diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2007-10-01 17:27:42 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2007-10-01 17:27:42 +0000 |
commit | 503ab7bf82ddac983f385034fc3165f63d35f3e5 (patch) | |
tree | 3c540fdf84d161c763b6923b82b398086059f75a | |
parent | f616f4aa7c24c681f1df9cba2a3c17850e20302d (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-- | ChangeLog | 11 | ||||
m--------- | common | 0 | ||||
-rw-r--r-- | ext/ffmpeg/gstffmpegcodecmap.c | 17 | ||||
-rw-r--r-- | ext/ffmpeg/gstffmpegdec.c | 6 |
4 files changed, 30 insertions, 4 deletions
@@ -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: |