vaapidecode: simplify codec lookup from caps.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Tue, 11 Sep 2012 14:41:32 +0000 (16:41 +0200)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Tue, 11 Sep 2012 15:08:47 +0000 (17:08 +0200)
Add new gst_vaapi_codec_from_caps() helper to determine codec type from
the specified caps. Don't globally expose this function since this is
really trivial and only used in the vaapidecode element.

gst/vaapi/gstvaapidecode.c

index 4a4f4e7..d79eaa1 100644 (file)
@@ -303,12 +303,16 @@ gst_vaapidecode_ensure_display(GstVaapiDecode *decode)
         &decode->display);
 }
 
+static inline guint
+gst_vaapi_codec_from_caps(GstCaps *caps)
+{
+    return gst_vaapi_profile_get_codec(gst_vaapi_profile_from_caps(caps));
+}
+
 static gboolean
 gst_vaapidecode_create(GstVaapiDecode *decode, GstCaps *caps)
 {
     GstVaapiDisplay *dpy;
-    GstStructure *structure;
-    int version;
 
     if (!gst_vaapidecode_ensure_display(decode))
         return FALSE;
@@ -322,30 +326,30 @@ gst_vaapidecode_create(GstVaapiDecode *decode, GstCaps *caps)
     if (!decode->decoder_ready)
         return FALSE;
 
-    structure = gst_caps_get_structure(caps, 0);
-    if (!structure)
-        return FALSE;
-
-    if (gst_structure_has_name(structure, "video/x-h264"))
+    switch (gst_vaapi_codec_from_caps(caps)) {
+    case GST_VAAPI_CODEC_MPEG2:
+        decode->decoder = gst_vaapi_decoder_mpeg2_new(dpy, caps);
+        break;
+    case GST_VAAPI_CODEC_MPEG4:
+    case GST_VAAPI_CODEC_H263:
+        decode->decoder = gst_vaapi_decoder_mpeg4_new(dpy, caps);
+        break;
+    case GST_VAAPI_CODEC_H264:
         decode->decoder = gst_vaapi_decoder_h264_new(dpy, caps);
-    else if (gst_structure_has_name(structure, "video/mpeg")) {
-        if (!gst_structure_get_int(structure, "mpegversion", &version))
-            return FALSE;
-        if (version == 2)
-            decode->decoder = gst_vaapi_decoder_mpeg2_new(dpy, caps);
-        else if (version == 4)
-            decode->decoder = gst_vaapi_decoder_mpeg4_new(dpy, caps);
-    }
-    else if (gst_structure_has_name(structure, "video/x-wmv"))
+        break;
+    case GST_VAAPI_CODEC_WMV3:
+    case GST_VAAPI_CODEC_VC1:
         decode->decoder = gst_vaapi_decoder_vc1_new(dpy, caps);
-    else if (gst_structure_has_name(structure, "video/x-h263") ||
-             gst_structure_has_name(structure, "video/x-divx") ||
-             gst_structure_has_name(structure, "video/x-xvid"))
-        decode->decoder = gst_vaapi_decoder_mpeg4_new(dpy, caps);
+        break;
 #if USE_JPEG_DECODER
-    else if (gst_structure_has_name(structure, "image/jpeg"))
+    case GST_VAAPI_CODEC_JPEG:
         decode->decoder = gst_vaapi_decoder_jpeg_new(dpy, caps);
+        break;
 #endif
+    default:
+        decode->decoder = NULL;
+        break;
+    }
     if (!decode->decoder)
         return FALSE;