summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wtaymans@redhat.com>2014-05-29 18:24:20 +0200
committerWim Taymans <wtaymans@redhat.com>2014-05-29 18:24:20 +0200
commit2ef3c94b82ef54673ff838c48483e5b50ff59274 (patch)
treeaf4ad218391d2e966ad95a16c8b72b0abbd94649
parent3dda75f493a0c820cc753eddb5d866a30b9ab091 (diff)
avcodecmap: handle simple and advanced-simple profile in MPEG4
Always enable 4MV flag for MPEG4 Pare the profile property and enable more features for advanced-simple profile. video/x-xvid is advanced-simple profile so enable more features. We now also support encoding of video/x-xvid so add this to the caps. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=651320
-rw-r--r--ext/libav/gstavcodecmap.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/ext/libav/gstavcodecmap.c b/ext/libav/gstavcodecmap.c
index d8c42f2546..8a9c0ba80d 100644
--- a/ext/libav/gstavcodecmap.c
+++ b/ext/libav/gstavcodecmap.c
@@ -1001,6 +1001,8 @@ gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id,
gst_ff_vid_caps_new (context, NULL, codec_id, encode, "video/mpeg",
"mpegversion", G_TYPE_INT, 4, "systemstream", G_TYPE_BOOLEAN, FALSE,
NULL);
+ gst_caps_append (caps, gst_ff_vid_caps_new (context, NULL, codec_id,
+ encode, "video/x-xvid", NULL));
if (encode) {
gst_caps_append (caps, gst_ff_vid_caps_new (context, NULL, codec_id,
encode, "video/x-divx", "divxversion", G_TYPE_INT, 5, NULL));
@@ -1009,8 +1011,6 @@ gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id,
encode, "video/x-divx", "divxversion", GST_TYPE_INT_RANGE, 4,
5, NULL));
gst_caps_append (caps, gst_ff_vid_caps_new (context, NULL, codec_id,
- encode, "video/x-xvid", NULL));
- gst_caps_append (caps, gst_ff_vid_caps_new (context, NULL, codec_id,
encode, "video/x-3ivx", NULL));
}
}
@@ -2944,16 +2944,29 @@ gst_ffmpeg_caps_with_codecid (enum AVCodecID codec_id,
{
const gchar *mime = gst_structure_get_name (str);
+ context->flags |= CODEC_FLAG_4MV;
+
if (!strcmp (mime, "video/x-divx"))
context->codec_tag = GST_MAKE_FOURCC ('D', 'I', 'V', 'X');
- else if (!strcmp (mime, "video/x-xvid"))
+ else if (!strcmp (mime, "video/x-xvid")) {
context->codec_tag = GST_MAKE_FOURCC ('X', 'V', 'I', 'D');
- else if (!strcmp (mime, "video/x-3ivx"))
+ /* Advanced Simple Profile */
+ context->flags |= CODEC_FLAG_GMC | CODEC_FLAG_QPEL;
+ } else if (!strcmp (mime, "video/x-3ivx"))
context->codec_tag = GST_MAKE_FOURCC ('3', 'I', 'V', '1');
- else if (!strcmp (mime, "video/mpeg"))
+ else if (!strcmp (mime, "video/mpeg")) {
+ const gchar *profile;
+
context->codec_tag = GST_MAKE_FOURCC ('m', 'p', '4', 'v');
- }
+
+ profile = gst_structure_get_string (str, "profile");
+ if (profile) {
+ if (g_strcmp0 (profile, "advanced-simple") == 0)
+ context->flags |= CODEC_FLAG_GMC | CODEC_FLAG_QPEL;
+ }
+ }
break;
+ }
case AV_CODEC_ID_SVQ3:
/* FIXME: this is a workaround for older gst-plugins releases