diff options
author | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2012-09-11 16:41:32 +0200 |
---|---|---|
committer | Gwenole Beauchesne <gwenole.beauchesne@intel.com> | 2012-09-11 17:08:47 +0200 |
commit | 2b71db30598634dc17c3d45689a0f63528b3767c (patch) | |
tree | aa37638b055888b8eec47b7e27efd3259448f0dd | |
parent | 9afe700005ff47a6368734814fd58bbfaed62f04 (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.c | 46 |
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; |