Commit 5dd514af authored by Ami Fischman's avatar Ami Fischman Committed by Ronald S. Bultje

matroskadec: forward parsing errors to caller.

Signed-off-by: 's avatarRonald S. Bultje <rsbultje@gmail.com>
parent 59ca3955
...@@ -1623,7 +1623,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, ...@@ -1623,7 +1623,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data,
if (size <= 3 || !track || !track->stream) { if (size <= 3 || !track || !track->stream) {
av_log(matroska->ctx, AV_LOG_INFO, av_log(matroska->ctx, AV_LOG_INFO,
"Invalid stream %"PRIu64" or size %u\n", num, size); "Invalid stream %"PRIu64" or size %u\n", num, size);
return res; return AVERROR_INVALIDDATA;
} }
st = track->stream; st = track->stream;
if (st->discard >= AVDISCARD_ALL) if (st->discard >= AVDISCARD_ALL)
...@@ -1860,7 +1860,7 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska) ...@@ -1860,7 +1860,7 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
res = ebml_parse(matroska, matroska_clusters, &cluster); res = ebml_parse(matroska, matroska_clusters, &cluster);
blocks_list = &cluster.blocks; blocks_list = &cluster.blocks;
blocks = blocks_list->elem; blocks = blocks_list->elem;
for (i=0; i<blocks_list->nb_elem; i++) for (i=0; i<blocks_list->nb_elem && !res; i++)
if (blocks[i].bin.size > 0 && blocks[i].bin.data) { if (blocks[i].bin.size > 0 && blocks[i].bin.data) {
int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1; int is_keyframe = blocks[i].non_simple ? !blocks[i].reference : -1;
if (!blocks[i].non_simple) if (!blocks[i].non_simple)
...@@ -1879,14 +1879,15 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska) ...@@ -1879,14 +1879,15 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt) static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt)
{ {
MatroskaDemuxContext *matroska = s->priv_data; MatroskaDemuxContext *matroska = s->priv_data;
int ret = 0;
while (matroska_deliver_packet(matroska, pkt)) { while (!ret && matroska_deliver_packet(matroska, pkt)) {
if (matroska->done) if (matroska->done)
return AVERROR_EOF; return AVERROR_EOF;
matroska_parse_cluster(matroska); ret = matroska_parse_cluster(matroska);
} }
return 0; return ret;
} }
static int matroska_read_seek(AVFormatContext *s, int stream_index, static int matroska_read_seek(AVFormatContext *s, int stream_index,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment