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 <slomo@circular-chaos.org>2008-10-28 18:41:19 +0000
commita85344333bfbc5dd4ac1d5d4e975e8027e606f1e (patch)
treee366dc94d3fd1aca48561dcc8ce2460e825a19f6 /gst/flv/gstflvparse.c
parent8416cc94b58e0ea9d3c54fbf439202e0591a7b9f (diff)
downloadgst-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.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) {