summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Simon <jsimon13@yahoo.fr>2004-01-26 20:01:36 +0000
committerJeremy Simon <jsimon13@yahoo.fr>2004-01-26 20:01:36 +0000
commit2a56f1cec9becef94300549467b3c3160ab27ed8 (patch)
tree9d9139898579520f7b2accf0eadc95253cc31920
parentcfcbc7800f71dab213bca525b0004d59950e6c20 (diff)
downloadgst-libav-2a56f1cec9becef94300549467b3c3160ab27ed8.tar.gz
Add SVQ3 specific flags to qtdemux and ffmpeg
Original commit message from CVS: 2004-01-26 Jeremy Simon <jesimon@libertysurf.fr> * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps), (gst_ffmpeg_caps_to_extradata), (gst_ffmpeg_caps_to_pixfmt): * gst/qtdemux/qtdemux.c: (plugin_init), (qtdemux_parse_trak), (qtdemux_video_caps): * gst/qtdemux/qtdemux.h: Add SVQ3 specific flags to qtdemux and ffmpeg
m---------common0
-rw-r--r--ext/ffmpeg/gstffmpegcodecmap.c47
2 files changed, 46 insertions, 1 deletions
diff --git a/common b/common
-Subproject c81ad072c76522175cbddead96d6f3c448068d6
+Subproject 0bcde342015b96d9a6ba3b9d9102e2a543399d9
diff --git a/ext/ffmpeg/gstffmpegcodecmap.c b/ext/ffmpeg/gstffmpegcodecmap.c
index 7631733..22af45f 100644
--- a/ext/ffmpeg/gstffmpegcodecmap.c
+++ b/ext/ffmpeg/gstffmpegcodecmap.c
@@ -193,7 +193,11 @@ gst_ffmpeg_codecid_to_caps (enum CodecID codec_id,
case CODEC_ID_SVQ3:
caps = GST_FF_VID_CAPS_NEW ("video/x-svq",
- "svqversion", G_TYPE_INT, 3,
+ "svqversion", G_TYPE_INT, 3,
+ "halfpel_flag", GST_TYPE_INT_RANGE, G_MININT, G_MAXINT,
+ "thirdpel_flag", GST_TYPE_INT_RANGE, G_MININT, G_MAXINT,
+ "low_delay", GST_TYPE_INT_RANGE, G_MININT, G_MAXINT,
+ "unknown_svq3_flag", GST_TYPE_INT_RANGE, G_MININT, G_MAXINT,
NULL);
break;
@@ -663,6 +667,45 @@ gst_ffmpeg_caps_to_extradata (const GstCaps *caps,
g_warning ("Unknown wma version %d\n", wmaversion);
break;
}
+
+ return;
+ }
+
+ if (!strcmp(mimetype, "video/x-svq")) {
+ gint version = 0;
+
+ if (!gst_structure_get_int (structure, "svqversion", &version)) {
+ g_warning ("invalid caps for video/x-svq");
+ return;
+ }
+
+ if (version == 3) {
+ gint halfpel_flag, thirdpel_flag, low_delay, unknown_svq3_flag;
+ guint16 flags;
+
+ if (!gst_structure_get_int (structure, "halfpel_flag", &halfpel_flag) ||
+ !gst_structure_get_int (structure, "thirdpel_flag", &thirdpel_flag) ||
+ !gst_structure_get_int (structure, "low_delay", &low_delay) ||
+ !gst_structure_get_int (structure, "unknown_svq3_flag", &unknown_svq3_flag)) {
+ g_warning ("invalid caps for video/x-svq");
+ return;
+ }
+
+ context->extradata = (guint8 *) g_malloc0 (0x64);
+ g_stpcpy (context->extradata, "SVQ3");
+ flags = 1 << 3;
+ flags |= low_delay;
+ flags = flags << 2;
+ flags |= unknown_svq3_flag;
+ flags = flags << 6;
+ flags |= halfpel_flag;
+ flags = flags << 1;
+ flags |= thirdpel_flag;
+ flags = flags << 3;
+
+ memcpy (context->extradata + 0x62, &flags, 2);
+ context->extradata_size = 0x64;
+ }
}
}
@@ -789,6 +832,8 @@ gst_ffmpeg_caps_to_pixfmt (const GstCaps *caps,
}
}
}
+
+ gst_ffmpeg_caps_to_extradata (caps, context);
}
/* Convert a GstCaps and a FFMPEG codec Type to a