Commit 5f3a081b authored by Luca Barbato's avatar Luca Barbato

avi: Spin out the logic to position to the next non-interleaved stream

Signed-off-by: 's avatarLuca Barbato <lu_zero@gentoo.org>
parent cb49bb10
...@@ -1094,21 +1094,9 @@ start_sync: ...@@ -1094,21 +1094,9 @@ start_sync:
return AVERROR_EOF; return AVERROR_EOF;
} }
static int avi_read_packet(AVFormatContext *s, AVPacket *pkt) static int ni_prepare_read(AVFormatContext *s)
{ {
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
AVIOContext *pb = s->pb;
int err;
if (CONFIG_DV_DEMUXER && avi->dv_demux) {
int size = avpriv_dv_get_packet(avi->dv_demux, pkt);
if (size >= 0)
return size;
else
goto resync;
}
if (avi->non_interleaved) {
int best_stream_index = 0; int best_stream_index = 0;
AVStream *best_st = NULL; AVStream *best_st = NULL;
AVIStream *best_ast; AVIStream *best_ast;
...@@ -1171,6 +1159,28 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -1171,6 +1159,28 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
best_ast->packet_size = best_ast->packet_size =
best_ast->remaining = best_st->index_entries[i].size; best_ast->remaining = best_st->index_entries[i].size;
} }
return 0;
}
static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
{
AVIContext *avi = s->priv_data;
AVIOContext *pb = s->pb;
int err;
if (CONFIG_DV_DEMUXER && avi->dv_demux) {
int size = avpriv_dv_get_packet(avi->dv_demux, pkt);
if (size >= 0)
return size;
else
goto resync;
}
if (avi->non_interleaved) {
err = ni_prepare_read(s);
if (err < 0)
return err;
} }
resync: resync:
......
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