[PATCH 2/5] winegstreamer: Factor out create_element().

Zebediah Figura z.figura12 at gmail.com
Sat Jul 10 19:22:19 CDT 2021


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/winegstreamer/wg_parser.c | 68 +++++++++++-----------------------
 1 file changed, 21 insertions(+), 47 deletions(-)

diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index a2eb5415c7b..1ff82836184 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -992,6 +992,16 @@ static gboolean sink_query_cb(GstPad *pad, GstObject *parent, GstQuery *query)
     }
 }
 
+static GstElement *create_element(const char *name, const char *plugin_set)
+{
+    GstElement *element;
+
+    if (!(element = gst_element_factory_make(name, NULL)))
+        fprintf(stderr, "winegstreamer: failed to create %s, are %u-bit GStreamer \"%s\" plugins installed?\n",
+                name, 8 * (unsigned int)sizeof(void *), plugin_set);
+    return element;
+}
+
 static struct wg_parser_stream *create_stream(struct wg_parser *parser)
 {
     struct wg_parser_stream *stream, **new_array;
@@ -1046,39 +1056,23 @@ static void pad_added_cb(GstElement *element, GstPad *pad, gpointer user)
 
         /* DirectShow can express interlaced video, but downstream filters can't
          * necessarily consume it. In particular, the video renderer can't. */
-        if (!(deinterlace = gst_element_factory_make("deinterlace", NULL)))
-        {
-            fprintf(stderr, "winegstreamer: failed to create deinterlace, are %u-bit GStreamer \"good\" plugins installed?\n",
-                    8 * (int)sizeof(void *));
+        if (!(deinterlace = create_element("deinterlace", "good")))
             goto out;
-        }
 
         /* decodebin considers many YUV formats to be "raw", but some quartz
          * filters can't handle those. Also, videoflip can't handle all "raw"
          * formats either. Add a videoconvert to swap color spaces. */
-        if (!(vconv = gst_element_factory_make("videoconvert", NULL)))
-        {
-            fprintf(stderr, "winegstreamer: failed to create videoconvert, are %u-bit GStreamer \"base\" plugins installed?\n",
-                    8 * (int)sizeof(void *));
+        if (!(vconv = create_element("videoconvert", "base")))
             goto out;
-        }
 
         /* GStreamer outputs RGB video top-down, but DirectShow expects bottom-up. */
-        if (!(flip = gst_element_factory_make("videoflip", NULL)))
-        {
-            fprintf(stderr, "winegstreamer: failed to create videoflip, are %u-bit GStreamer \"good\" plugins installed?\n",
-                    8 * (int)sizeof(void *));
+        if (!(flip = create_element("videoflip", "good")))
             goto out;
-        }
 
         /* videoflip does not support 15 and 16-bit RGB so add a second videoconvert
          * to do the final conversion. */
-        if (!(vconv2 = gst_element_factory_make("videoconvert", NULL)))
-        {
-            fprintf(stderr, "winegstreamer: failed to create videoconvert, are %u-bit GStreamer \"base\" plugins installed?\n",
-                    8 * (int)sizeof(void *));
+        if (!(vconv2 = create_element("videoconvert", "base")))
             goto out;
-        }
 
         /* The bin takes ownership of these elements. */
         gst_bin_add(GST_BIN(parser->container), deinterlace);
@@ -1106,12 +1100,8 @@ static void pad_added_cb(GstElement *element, GstPad *pad, gpointer user)
          * surround-sound configurations. Native dsound can't always handle
          * 64-bit formats either. Add an audioconvert to allow changing bit
          * depth and channel count. */
-        if (!(convert = gst_element_factory_make("audioconvert", NULL)))
-        {
-            fprintf(stderr, "winegstreamer: failed to create audioconvert, are %u-bit GStreamer \"base\" plugins installed?\n",
-                    8 * (int)sizeof(void *));
+        if (!(convert = create_element("audioconvert", "base")))
             goto out;
-        }
 
         gst_bin_add(GST_BIN(parser->container), convert);
         gst_element_sync_state_with_parent(convert);
@@ -1636,15 +1626,11 @@ static void CDECL wg_parser_disconnect(struct wg_parser *parser)
 
 static BOOL decodebin_parser_init_gst(struct wg_parser *parser)
 {
-    GstElement *element = gst_element_factory_make("decodebin", NULL);
+    GstElement *element;
     int ret;
 
-    if (!element)
-    {
-        ERR("Failed to create decodebin; are %u-bit GStreamer \"base\" plugins installed?\n",
-                8 * (int)sizeof(void*));
+    if (!(element = create_element("decodebin", "base")))
         return FALSE;
-    }
 
     gst_bin_add(GST_BIN(parser->container), element);
     parser->decodebin = element;
@@ -1689,15 +1675,11 @@ static BOOL decodebin_parser_init_gst(struct wg_parser *parser)
 
 static BOOL avi_parser_init_gst(struct wg_parser *parser)
 {
-    GstElement *element = gst_element_factory_make("avidemux", NULL);
+    GstElement *element;
     int ret;
 
-    if (!element)
-    {
-        ERR("Failed to create avidemux; are %u-bit GStreamer \"good\" plugins installed?\n",
-                8 * (int)sizeof(void*));
+    if (!(element = create_element("avidemux", "good")))
         return FALSE;
-    }
 
     gst_bin_add(GST_BIN(parser->container), element);
 
@@ -1744,12 +1726,8 @@ static BOOL mpeg_audio_parser_init_gst(struct wg_parser *parser)
     GstElement *element;
     int ret;
 
-    if (!(element = gst_element_factory_make("mpegaudioparse", NULL)))
-    {
-        ERR("Failed to create mpegaudioparse; are %u-bit GStreamer \"good\" plugins installed?\n",
-                8 * (int)sizeof(void*));
+    if (!(element = create_element("mpegaudioparse", "good")))
         return FALSE;
-    }
 
     gst_bin_add(GST_BIN(parser->container), element);
 
@@ -1797,12 +1775,8 @@ static BOOL wave_parser_init_gst(struct wg_parser *parser)
     GstElement *element;
     int ret;
 
-    if (!(element = gst_element_factory_make("wavparse", NULL)))
-    {
-        ERR("Failed to create wavparse; are %u-bit GStreamer \"good\" plugins installed?\n",
-                8 * (int)sizeof(void*));
+    if (!(element = create_element("wavparse", "good")))
         return FALSE;
-    }
 
     gst_bin_add(GST_BIN(parser->container), element);
 
-- 
2.32.0




More information about the wine-devel mailing list