mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 23:06:49 +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;
|
QtDemuxStream *stream;
|
||||||
int i;
|
int i;
|
||||||
int smallidx = 0;
|
int smallidx = -1;
|
||||||
guint64 smalloffs = -1;
|
guint64 smalloffs = -1;
|
||||||
|
|
||||||
GST_LOG_OBJECT (demux, "Finding entry at offset %lld", demux->offset);
|
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",
|
GST_LOG_OBJECT (demux, "stream %d offset %lld demux->offset :%lld",
|
||||||
smallidx, smalloffs, demux->offset);
|
smallidx, smalloffs, demux->offset);
|
||||||
|
|
||||||
|
if (smallidx == -1)
|
||||||
|
return -1;
|
||||||
stream = demux->streams[smallidx];
|
stream = demux->streams[smallidx];
|
||||||
|
|
||||||
if (stream->samples[stream->sample_index].offset >= demux->offset) {
|
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 */
|
/* get fourcc/length, set neededbytes */
|
||||||
extract_initial_length_and_fourcc ((guint8 *) data, &size, &fourcc);
|
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->state = QTDEMUX_STATE_MOVIE;
|
||||||
demux->offset += 24;
|
demux->offset += 24;
|
||||||
gst_adapter_flush (demux->adapter, 24);
|
gst_adapter_flush (demux->adapter, 24);
|
||||||
|
|
Loading…
Reference in a new issue