[vlc-commits] sout: sdi: refactor image loading

Francois Cartegnie git at videolan.org
Mon May 6 20:31:51 CEST 2019


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Mon May  6 18:55:56 2019 +0200| [18abaab9799a54c60d4da020db821654722a8201] | committer: Francois Cartegnie

sout: sdi: refactor image loading

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=18abaab9799a54c60d4da020db821654722a8201
---

 modules/stream_out/Makefile.am          |  2 +
 modules/stream_out/sdi/DBMSDIOutput.cpp | 36 +-----------------
 modules/stream_out/sdi/DBMSDIOutput.hpp |  1 -
 modules/stream_out/sdi/SDIGenerator.cpp | 65 +++++++++++++++++++++++++++++++++
 modules/stream_out/sdi/SDIGenerator.hpp | 34 +++++++++++++++++
 5 files changed, 103 insertions(+), 35 deletions(-)

diff --git a/modules/stream_out/Makefile.am b/modules/stream_out/Makefile.am
index 599735c01c..900dbfeabc 100644
--- a/modules/stream_out/Makefile.am
+++ b/modules/stream_out/Makefile.am
@@ -65,6 +65,8 @@ libstream_out_sdi_plugin_la_SOURCES = stream_out/sdi/sdiout.cpp \
         stream_out/sdi/DBMSDIOutput.hpp \
         stream_out/sdi/SDIAudioMultiplex.cpp \
         stream_out/sdi/SDIAudioMultiplex.hpp \
+        stream_out/sdi/SDIGenerator.cpp \
+        stream_out/sdi/SDIGenerator.hpp \
         stream_out/sdi/SDIOutput.cpp \
         stream_out/sdi/SDIOutput.hpp \
         stream_out/sdi/SDIStream.cpp \
diff --git a/modules/stream_out/sdi/DBMSDIOutput.cpp b/modules/stream_out/sdi/DBMSDIOutput.cpp
index a0fd487810..482fe8e24e 100644
--- a/modules/stream_out/sdi/DBMSDIOutput.cpp
+++ b/modules/stream_out/sdi/DBMSDIOutput.cpp
@@ -26,13 +26,13 @@
 #include <vlc_es.h>
 #include <vlc_picture.h>
 #include <vlc_interrupt.h>
-#include <vlc_image.h>
 #include <vlc_decklink.h>
 
 #include "DBMHelper.hpp"
 #include "DBMSDIOutput.hpp"
 #include "SDIStream.hpp"
 #include "SDIAudioMultiplex.hpp"
+#include "SDIGenerator.hpp"
 #include "Ancillary.hpp"
 #include "V210.hpp"
 
@@ -377,7 +377,7 @@ int DBMSDIOutput::ConfigureVideo(const video_format_t *vfmt)
         char *psz_file = var_InheritString(p_stream, CFG_PREFIX "nosignal-image");
         if(psz_file)
         {
-            video.pic_nosignal = CreateNoSignalPicture(psz_file, fmt);
+            video.pic_nosignal = sdi::Generator::Picture(VLC_OBJECT(p_stream), psz_file, fmt);
             if (!video.pic_nosignal)
                 msg_Err(p_stream, "Could not create no signal picture");
             free(psz_file);
@@ -646,35 +646,3 @@ void DBMSDIOutput::checkClockDrift()
         }
     }
 }
-
-picture_t * DBMSDIOutput::CreateNoSignalPicture(const char *psz_file, const video_format_t *fmt)
-{
-    picture_t *p_pic = NULL;
-    image_handler_t *img = image_HandlerCreate(p_stream);
-    if (img)
-    {
-        video_format_t in;
-        video_format_Init(&in, 0);
-        video_format_Setup(&in, 0,
-                           fmt->i_width, fmt->i_height,
-                           fmt->i_width, fmt->i_height, 1, 1);
-
-        picture_t *png = image_ReadUrl(img, psz_file, &in);
-        if (png)
-        {
-            video_format_t dummy;
-            video_format_Copy(&dummy, fmt);
-            p_pic = image_Convert(img, png, &in, &dummy);
-            if(!video_format_IsSimilar(&dummy, fmt))
-            {
-                picture_Release(p_pic);
-                p_pic = NULL;
-            }
-            picture_Release(png);
-            video_format_Clean(&dummy);
-        }
-        image_HandlerDelete(img);
-        video_format_Clean(&in);
-    }
-    return p_pic;
-}
diff --git a/modules/stream_out/sdi/DBMSDIOutput.hpp b/modules/stream_out/sdi/DBMSDIOutput.hpp
index 91550d3e2a..09a614186b 100644
--- a/modules/stream_out/sdi/DBMSDIOutput.hpp
+++ b/modules/stream_out/sdi/DBMSDIOutput.hpp
@@ -61,7 +61,6 @@ namespace sdi_sout
             bool b_running;
             int Start(vlc_tick_t);
             int doProcessVideo(picture_t *, block_t *);
-            picture_t * CreateNoSignalPicture(const char*, const video_format_t *);
             void checkClockDrift();
     };
 }
diff --git a/modules/stream_out/sdi/SDIGenerator.cpp b/modules/stream_out/sdi/SDIGenerator.cpp
new file mode 100644
index 0000000000..726587431b
--- /dev/null
+++ b/modules/stream_out/sdi/SDIGenerator.cpp
@@ -0,0 +1,65 @@
+/*****************************************************************************
+ * SDIGenerator.cpp: SDI Image and sound generators
+ *****************************************************************************
+ * Copyright © 2014-2016 VideoLAN and VideoLAN Authors
+ *             2018-2019 VideoLabs
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_es.h>
+#include <vlc_picture.h>
+#include <vlc_image.h>
+
+#include "SDIGenerator.hpp"
+
+using namespace sdi;
+
+picture_t * Generator::Picture(vlc_object_t *obj, const char *psz_file,
+                               const video_format_t *fmt)
+{
+    picture_t *p_pic = NULL;
+    image_handler_t *img = image_HandlerCreate(obj);
+    if (img)
+    {
+        video_format_t in;
+        video_format_Init(&in, 0);
+        video_format_Setup(&in, 0,
+                           fmt->i_width, fmt->i_height,
+                           fmt->i_width, fmt->i_height, 1, 1);
+
+        picture_t *png = image_ReadUrl(img, psz_file, &in);
+        if (png)
+        {
+            video_format_t dummy;
+            video_format_Copy(&dummy, fmt);
+            p_pic = image_Convert(img, png, &in, &dummy);
+            if(!video_format_IsSimilar(&dummy, fmt))
+            {
+                picture_Release(p_pic);
+                p_pic = NULL;
+            }
+            picture_Release(png);
+            video_format_Clean(&dummy);
+        }
+        image_HandlerDelete(img);
+        video_format_Clean(&in);
+    }
+    return p_pic;
+}
diff --git a/modules/stream_out/sdi/SDIGenerator.hpp b/modules/stream_out/sdi/SDIGenerator.hpp
new file mode 100644
index 0000000000..2310ba45df
--- /dev/null
+++ b/modules/stream_out/sdi/SDIGenerator.hpp
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * SDIGenerator.hpp: SDI Image and sound generators
+ *****************************************************************************
+ * Copyright © 2014-2016 VideoLAN and VideoLAN Authors
+ *             2018-2019 VideoLabs
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#ifndef SDIGENERATOR_HPP
+#define SDIGENERATOR_HPP
+
+namespace sdi
+{
+    class Generator
+    {
+        public:
+            static picture_t * Picture(vlc_object_t *, const char*,
+                                       const video_format_t *);
+    };
+}
+
+#endif



More information about the vlc-commits mailing list