summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-09-11 16:41:32 +0200
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>2012-09-11 17:08:47 +0200
commit2b71db30598634dc17c3d45689a0f63528b3767c (patch)
treeaa37638b055888b8eec47b7e27efd3259448f0dd
parent9afe700005ff47a6368734814fd58bbfaed62f04 (diff)
vaapidecode: simplify codec lookup from caps.
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.
-rw-r--r--gst/vaapi/gstvaapidecode.c46
1 files changed, 25 insertions, 21 deletions
diff --git a/gst/vaapi/gstvaapidecode.c b/gst/vaapi/gstvaapidecode.c
index 4a4f4e7..d79eaa1 100644
--- a/gst/vaapi/gstvaapidecode.c
+++ b/gst/vaapi/gstvaapidecode.c
@@ -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;