mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
gst/qtdemux/qtdemux.c: Handle the case where data atoms are before moov atoms in push-based mode.
Original commit message from CVS: * gst/qtdemux/qtdemux.c: (next_entry_size), (gst_qtdemux_chain): Handle the case where data atoms are before moov atoms in push-based mode. Errors out gracefully.
This commit is contained in:
parent
7e2a049670
commit
44cded3b2f
1 changed files with 13 additions and 2 deletions
|
@ -761,7 +761,7 @@ next_entry_size (GstQTDemux * demux)
|
|||
{
|
||||
QtDemuxStream *stream;
|
||||
int i;
|
||||
int smallidx = 0;
|
||||
int smallidx = -1;
|
||||
guint64 smalloffs = -1;
|
||||
|
||||
GST_LOG_OBJECT (demux, "Finding entry at offset %lld", demux->offset);
|
||||
|
@ -785,6 +785,8 @@ next_entry_size (GstQTDemux * demux)
|
|||
GST_LOG_OBJECT (demux, "stream %d offset %lld demux->offset :%lld",
|
||||
smallidx, smalloffs, demux->offset);
|
||||
|
||||
if (smallidx == -1)
|
||||
return -1;
|
||||
stream = demux->streams[smallidx];
|
||||
|
||||
if (stream->samples[stream->sample_index].offset >= demux->offset) {
|
||||
|
@ -826,7 +828,16 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
|
|||
|
||||
/* get fourcc/length, set neededbytes */
|
||||
extract_initial_length_and_fourcc ((guint8 *) data, &size, &fourcc);
|
||||
if (fourcc == GST_MAKE_FOURCC ('m', 'd', 'a', 't')) {
|
||||
GST_DEBUG_OBJECT (demux,
|
||||
"Peeking found [%" GST_FOURCC_FORMAT "] size:%ld",
|
||||
GST_FOURCC_ARGS (fourcc), size);
|
||||
if ((fourcc == GST_MAKE_FOURCC ('m', 'd', 'a', 't'))) {
|
||||
if (demux->n_streams <= 0) {
|
||||
GST_ELEMENT_ERROR (demux, STREAM, FAILED,
|
||||
(NULL),
|
||||
("Can't handled files with header after data in push-mode!"));
|
||||
ret = GST_FLOW_ERROR;
|
||||
}
|
||||
demux->state = QTDEMUX_STATE_MOVIE;
|
||||
demux->offset += 24;
|
||||
gst_adapter_flush (demux->adapter, 24);
|
||||
|
|
Loading…
Reference in a new issue