summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2007-10-01 17:27:42 +0000
committerWim Taymans <wim.taymans@gmail.com>2007-10-01 17:27:42 +0000
commit503ab7bf82ddac983f385034fc3165f63d35f3e5 (patch)
tree3c540fdf84d161c763b6923b82b398086059f75a
parentf616f4aa7c24c681f1df9cba2a3c17850e20302d (diff)
ext/ffmpeg/gstffmpegcodecmap.c: Add Real Video 3.0 and remove some bogus caps.
Original commit message from CVS: * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps), (gst_ffmpeg_caps_with_codecid), (gst_ffmpeg_get_codecid_longname): Add Real Video 3.0 and remove some bogus caps. * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_open), (gst_ffmpegdec_video_frame): When skipping because of QoS, pretend we consumed all bytes for the frame so that the pcache's timestamp is updated correctly.
-rw-r--r--ChangeLog11
m---------common0
-rw-r--r--ext/ffmpeg/gstffmpegcodecmap.c17
-rw-r--r--ext/ffmpeg/gstffmpegdec.c6
4 files changed, 30 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index b2980cc..530e2f6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2007-10-01 Wim Taymans <wim.taymans@gmail.com>
+
+ * ext/ffmpeg/gstffmpegcodecmap.c: (gst_ffmpeg_codecid_to_caps),
+ (gst_ffmpeg_caps_with_codecid), (gst_ffmpeg_get_codecid_longname):
+ Add Real Video 3.0 and remove some bogus caps.
+
+ * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_open),
+ (gst_ffmpegdec_video_frame):
+ When skipping because of QoS, pretend we consumed all bytes for the
+ frame so that the pcache's timestamp is updated correctly.
+
2007-08-14 Edward Hervey <edward@fluendo.com>
* ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_register):
diff --git a/common b/common
-Subproject b3fe2a25c1cd0f4b021795d0db7330aeb338da7
+Subproject 34d7d649b972ea4915611a6ed88f01613bf3277
diff --git a/ext/ffmpeg/gstffmpegcodecmap.c b/ext/ffmpeg/gstffmpegcodecmap.c
index 88d67bc..cba75cc 100644
--- a/ext/ffmpeg/gstffmpegcodecmap.c
+++ b/ext/ffmpeg/gstffmpegcodecmap.c
@@ -252,6 +252,7 @@ gst_ffmpeg_codecid_to_caps (enum CodecID codec_id,
case CODEC_ID_RV10:
case CODEC_ID_RV20:
+ case CODEC_ID_RV30:
case CODEC_ID_RV40:
{
gint version;
@@ -260,6 +261,9 @@ gst_ffmpeg_codecid_to_caps (enum CodecID codec_id,
case CODEC_ID_RV40:
version = 4;
break;
+ case CODEC_ID_RV30:
+ version = 3;
+ break;
case CODEC_ID_RV20:
version = 2;
break;
@@ -274,7 +278,11 @@ gst_ffmpeg_codecid_to_caps (enum CodecID codec_id,
"rmversion", G_TYPE_INT, version, NULL);
if (context) {
gst_caps_set_simple (caps,
- "rmsubid", GST_TYPE_FOURCC, context->sub_id, NULL);
+ "format", G_TYPE_INT, context->sub_id, NULL);
+ if (context->extradata_size >= 8) {
+ gst_caps_set_simple (caps,
+ "subformat", G_TYPE_INT, GST_READ_UINT32_BE (context->extradata), NULL);
+ }
}
}
break;
@@ -1599,13 +1607,11 @@ gst_ffmpeg_caps_with_codecid (enum CodecID codec_id,
case CODEC_ID_RV10:
case CODEC_ID_RV20:
+ case CODEC_ID_RV30:
case CODEC_ID_RV40:
{
- guint32 fourcc;
gint format;
- if (gst_structure_get_fourcc (str, "rmsubid", &fourcc))
- context->sub_id = fourcc;
if (gst_structure_get_int (str, "format", &format))
context->sub_id = format;
@@ -2438,6 +2444,9 @@ gst_ffmpeg_get_codecid_longname (enum CodecID codec_id)
case CODEC_ID_RV20:
name = "Realvideo 2.0";
break;
+ case CODEC_ID_RV30:
+ name = "Realvideo 3.0";
+ break;
case CODEC_ID_RV40:
name = "Realvideo 4.0";
break;
diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c
index 9c49661..360739d 100644
--- a/ext/ffmpeg/gstffmpegdec.c
+++ b/ext/ffmpeg/gstffmpegdec.c
@@ -513,7 +513,9 @@ gst_ffmpegdec_open (GstFFMpegDec * ffmpegdec)
}
break;
case CODEC_ID_RV10:
+ case CODEC_ID_RV30:
case CODEC_ID_RV20:
+ case CODEC_ID_RV40:
ffmpegdec->is_realvideo = TRUE;
break;
default:
@@ -1479,6 +1481,10 @@ beach:
drop_qos:
{
GST_WARNING_OBJECT (ffmpegdec, "Dropping frame because of QoS");
+ /* drop a frame, set discont on next buffer, pretend we decoded the complete
+ * buffer */
+ ffmpegdec->discont = TRUE;
+ len = size;
goto beach;
}
drop_non_keyframe: