Add gst_vaapidecode_ensure_display() helper for set-caps.
authorgb <gb@5584edef-b1fe-4b99-b61b-dd2bab72e969>
Wed, 5 May 2010 15:36:25 +0000 (15:36 +0000)
committerGwenole Beauchesne <gbeauchesne@splitted-desktop.com>
Mon, 20 Sep 2010 10:55:44 +0000 (12:55 +0200)
gst/vaapidecode/gstvaapidecode.c

index 38924fe..dd1f2ab 100644 (file)
@@ -160,11 +160,14 @@ error_commit_buffer:
 }
 
 static gboolean
-gst_vaapidecode_create(GstVaapiDecode *decode)
+gst_vaapidecode_ensure_display(GstVaapiDecode *decode)
 {
     GstVaapiVideoSink *sink;
     GstVaapiDisplay *display;
 
+    if (decode->display)
+        return TRUE;
+
     /* Look for a downstream vaapisink */
     sink = gst_vaapi_video_sink_lookup(GST_ELEMENT(decode));
     if (!sink)
@@ -175,10 +178,18 @@ gst_vaapidecode_create(GstVaapiDecode *decode)
         return FALSE;
 
     decode->display = g_object_ref(display);
+    return TRUE;
+}
+
+static gboolean
+gst_vaapidecode_create(GstVaapiDecode *decode)
+{
+    if (!gst_vaapidecode_ensure_display(decode))
+        return FALSE;
 
     if (decode->use_ffmpeg)
         decode->decoder =
-            gst_vaapi_decoder_ffmpeg_new(display, decode->decoder_caps);
+            gst_vaapi_decoder_ffmpeg_new(decode->display, decode->decoder_caps);
     return decode->decoder != NULL;
 }