diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2008-10-28 18:41:19 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2008-10-28 18:41:19 +0000 |
commit | a85344333bfbc5dd4ac1d5d4e975e8027e606f1e (patch) | |
tree | e366dc94d3fd1aca48561dcc8ce2460e825a19f6 /gst/flv/gstflvparse.c | |
parent | 8416cc94b58e0ea9d3c54fbf439202e0591a7b9f (diff) | |
download | gst-plugins-bad-a85344333bfbc5dd4ac1d5d4e975e8027e606f1e.tar.gz gst-plugins-bad-a85344333bfbc5dd4ac1d5d4e975e8027e606f1e.tar.bz2 gst-plugins-bad-a85344333bfbc5dd4ac1d5d4e975e8027e606f1e.zip |
gst/flv/: Put the GstSegment directly into the instance struct instead of allocating and free'ing it again.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_cleanup),
(gst_flv_demux_loop), (gst_flv_demux_handle_seek_push),
(gst_flv_demux_handle_seek_pull), (gst_flv_demux_sink_event),
(gst_flv_demux_dispose), (gst_flv_demux_init):
* gst/flv/gstflvdemux.h:
* gst/flv/gstflvparse.c: (gst_flv_parse_tag_audio),
(gst_flv_parse_tag_video), (gst_flv_parse_tag_timestamp):
Put the GstSegment directly into the instance struct instead of
allocating and free'ing it again.
Push tags already if only one pad was added, no need to wait for
the second one.
When generating our index set has_video and has_audio if we find
video or audio in case the FLV header has incorrect data.
Diffstat (limited to 'gst/flv/gstflvparse.c')
-rw-r--r-- | gst/flv/gstflvparse.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/gst/flv/gstflvparse.c b/gst/flv/gstflvparse.c index 5b828507..067ba94f 100644 --- a/gst/flv/gstflvparse.c +++ b/gst/flv/gstflvparse.c @@ -607,7 +607,7 @@ gst_flv_parse_tag_audio (GstFLVDemux * demux, GstBuffer * buffer) } /* Push taglist if present */ - if ((demux->has_audio && !demux->audio_pad) || + if ((demux->has_audio && !demux->audio_pad) && (demux->has_video && !demux->video_pad)) { GST_DEBUG_OBJECT (demux, "we are still waiting for a stream to come up " "before we can push tags"); @@ -686,7 +686,7 @@ gst_flv_parse_tag_audio (GstFLVDemux * demux, GstBuffer * buffer) demux->audio_need_discont = FALSE; } - gst_segment_set_last_stop (demux->segment, GST_FORMAT_TIME, + gst_segment_set_last_stop (&demux->segment, GST_FORMAT_TIME, GST_BUFFER_TIMESTAMP (outbuf)); /* Do we need a newsegment event ? */ @@ -698,12 +698,12 @@ gst_flv_parse_tag_audio (GstFLVDemux * demux, GstBuffer * buffer) if (!demux->new_seg_event) { GST_DEBUG_OBJECT (demux, "pushing newsegment from %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT, - GST_TIME_ARGS (demux->segment->last_stop), - GST_TIME_ARGS (demux->segment->stop)); + GST_TIME_ARGS (demux->segment.last_stop), + GST_TIME_ARGS (demux->segment.stop)); demux->new_seg_event = - gst_event_new_new_segment (FALSE, demux->segment->rate, - demux->segment->format, demux->segment->last_stop, - demux->segment->stop, demux->segment->last_stop); + gst_event_new_new_segment (FALSE, demux->segment.rate, + demux->segment.format, demux->segment.last_stop, + demux->segment.stop, demux->segment.last_stop); } else { GST_DEBUG_OBJECT (demux, "pushing pre-generated newsegment event"); } @@ -922,7 +922,7 @@ gst_flv_parse_tag_video (GstFLVDemux * demux, GstBuffer * buffer) } /* Push taglist if present */ - if ((demux->has_audio && !demux->audio_pad) || + if ((demux->has_audio && !demux->audio_pad) && (demux->has_video && !demux->video_pad)) { GST_DEBUG_OBJECT (demux, "we are still waiting for a stream to come up " "before we can push tags"); @@ -1012,7 +1012,7 @@ gst_flv_parse_tag_video (GstFLVDemux * demux, GstBuffer * buffer) demux->video_need_discont = FALSE; } - gst_segment_set_last_stop (demux->segment, GST_FORMAT_TIME, + gst_segment_set_last_stop (&demux->segment, GST_FORMAT_TIME, GST_BUFFER_TIMESTAMP (outbuf)); /* Do we need a newsegment event ? */ @@ -1024,12 +1024,12 @@ gst_flv_parse_tag_video (GstFLVDemux * demux, GstBuffer * buffer) if (!demux->new_seg_event) { GST_DEBUG_OBJECT (demux, "pushing newsegment from %" GST_TIME_FORMAT " to %" GST_TIME_FORMAT, - GST_TIME_ARGS (demux->segment->last_stop), - GST_TIME_ARGS (demux->segment->stop)); + GST_TIME_ARGS (demux->segment.last_stop), + GST_TIME_ARGS (demux->segment.stop)); demux->new_seg_event = - gst_event_new_new_segment (FALSE, demux->segment->rate, - demux->segment->format, demux->segment->last_stop, - demux->segment->stop, demux->segment->last_stop); + gst_event_new_new_segment (FALSE, demux->segment.rate, + demux->segment.format, demux->segment.last_stop, + demux->segment.stop, demux->segment.last_stop); } else { GST_DEBUG_OBJECT (demux, "pushing pre-generated newsegment event"); } @@ -1085,6 +1085,11 @@ gst_flv_parse_tag_timestamp (GstFLVDemux * demux, GstBuffer * buffer, return GST_CLOCK_TIME_NONE; } + if (type == 9) + demux->has_video = TRUE; + else if (type == 8) + demux->has_audio = TRUE; + tag_data_size = GST_READ_UINT24_BE (data + 1); if (GST_BUFFER_SIZE (buffer) >= tag_data_size + 11 + 4) { |