summaryrefslogtreecommitdiffstats
path: root/gst/flv/gstflvparse.c
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-10-28 18:41:19 +0000
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-05-12 21:21:00 +0200
commitb7f0ba61e4f246356c7122076c98d5bd3eddb13a (patch)
tree9ec28c6f326e69ebfa64f55a5305aa7cf1ac005f /gst/flv/gstflvparse.c
parent029dfc56d40d6705ffaba75e61a90cf5e20dd01d (diff)
[MOVED FROM BAD 44/57] 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.c33
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) {