summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-10-10 16:33:36 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2008-10-10 16:33:36 +0000
commit1854fd19a988e196cf645e1d1d807c77671a936a (patch)
tree4b62ba89c7e6c29f43bbfa0fbd341ce52325658b /gst
parent7b619115fb4cab4817ab3d661d153b98d4d9540a (diff)
downloadgst-plugins-bad-1854fd19a988e196cf645e1d1d807c77671a936a.tar.gz
gst-plugins-bad-1854fd19a988e196cf645e1d1d807c77671a936a.tar.bz2
gst-plugins-bad-1854fd19a988e196cf645e1d1d807c77671a936a.zip
gst/flv/gstflvparse.c: Use gst_pad_alloc_buffer_and_set_caps() to make sure we get a buffer with caps that we can wor...
Original commit message from CVS: * gst/flv/gstflvparse.c: (gst_flv_parse_tag_audio), (gst_flv_parse_tag_video): Use gst_pad_alloc_buffer_and_set_caps() to make sure we get a buffer with caps that we can work with (i.e. the pad's caps). Add non-keyframe video frames to the index too but without the keyframe flag. Add audio frames to the index only if we have no video stream.
Diffstat (limited to 'gst')
-rw-r--r--gst/flv/gstflvparse.c36
1 files changed, 30 insertions, 6 deletions
diff --git a/gst/flv/gstflvparse.c b/gst/flv/gstflvparse.c
index 1a4e53cc..16c83ec3 100644
--- a/gst/flv/gstflvparse.c
+++ b/gst/flv/gstflvparse.c
@@ -625,9 +625,10 @@ gst_flv_parse_tag_audio (GstFLVDemux * demux, const guint8 * data,
}
/* Create buffer from pad */
- ret = gst_pad_alloc_buffer (demux->audio_pad, GST_BUFFER_OFFSET_NONE,
- demux->tag_data_size - codec_data, GST_PAD_CAPS (demux->audio_pad),
- &buffer);
+ ret =
+ gst_pad_alloc_buffer_and_set_caps (demux->audio_pad,
+ GST_BUFFER_OFFSET_NONE, demux->tag_data_size - codec_data,
+ GST_PAD_CAPS (demux->audio_pad), &buffer);
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
GST_WARNING_OBJECT (demux, "failed allocating a %" G_GUINT64_FORMAT
" bytes buffer: %s", demux->tag_data_size, gst_flow_get_name (ret));
@@ -675,6 +676,19 @@ gst_flv_parse_tag_audio (GstFLVDemux * demux, const guint8 * data,
GST_BUFFER_OFFSET (buffer) = demux->audio_offset++;
GST_BUFFER_OFFSET_END (buffer) = demux->audio_offset;
+ /* Only add audio frames to the index if we have no video */
+ if (!demux->has_video) {
+ if (demux->index) {
+ GST_LOG_OBJECT (demux, "adding association %" GST_TIME_FORMAT "-> %"
+ G_GUINT64_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+ demux->cur_tag_offset);
+ gst_index_add_association (demux->index, demux->index_id,
+ GST_ASSOCIATION_FLAG_KEY_UNIT,
+ GST_FORMAT_TIME, GST_BUFFER_TIMESTAMP (buffer),
+ GST_FORMAT_BYTES, demux->cur_tag_offset, NULL);
+ }
+ }
+
if (G_UNLIKELY (demux->audio_need_discont)) {
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
demux->audio_need_discont = FALSE;
@@ -909,9 +923,10 @@ gst_flv_parse_tag_video (GstFLVDemux * demux, const guint8 * data,
}
/* Create buffer from pad */
- ret = gst_pad_alloc_buffer (demux->video_pad, GST_BUFFER_OFFSET_NONE,
- demux->tag_data_size - codec_data, GST_PAD_CAPS (demux->video_pad),
- &buffer);
+ ret =
+ gst_pad_alloc_buffer_and_set_caps (demux->video_pad,
+ GST_BUFFER_OFFSET_NONE, demux->tag_data_size - codec_data,
+ GST_PAD_CAPS (demux->video_pad), &buffer);
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
GST_WARNING_OBJECT (demux, "failed allocating a %" G_GUINT64_FORMAT
" bytes buffer: %s", demux->tag_data_size, gst_flow_get_name (ret));
@@ -961,6 +976,15 @@ gst_flv_parse_tag_video (GstFLVDemux * demux, const guint8 * data,
if (!keyframe) {
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
+ if (demux->index) {
+ GST_LOG_OBJECT (demux, "adding association %" GST_TIME_FORMAT "-> %"
+ G_GUINT64_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
+ demux->cur_tag_offset);
+ gst_index_add_association (demux->index, demux->index_id,
+ GST_ASSOCIATION_FLAG_NONE,
+ GST_FORMAT_TIME, GST_BUFFER_TIMESTAMP (buffer),
+ GST_FORMAT_BYTES, demux->cur_tag_offset, NULL);
+ }
} else {
if (demux->index) {
GST_LOG_OBJECT (demux, "adding association %" GST_TIME_FORMAT "-> %"