mov_read_packet: extract code that searches for the stream/sample to demux next

into a separate function.

Originally committed as revision 19263 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Reimar Döffinger 2009-06-24 08:57:53 +00:00
parent a2f3851166
commit 5dc5c43bda

View File

@ -2055,15 +2055,11 @@ static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
return 0; return 0;
} }
static int mov_read_packet(AVFormatContext *s, AVPacket *pkt) static AVIndexEntry *mov_find_next_sample(AVFormatContext *s, AVStream **st)
{ {
MOVContext *mov = s->priv_data; AVIndexEntry *sample = NULL;
MOVStreamContext *sc = 0;
AVIndexEntry *sample = 0;
AVStream *st = NULL;
int64_t best_dts = INT64_MAX; int64_t best_dts = INT64_MAX;
int i, ret; int i;
retry:
for (i = 0; i < s->nb_streams; i++) { for (i = 0; i < s->nb_streams; i++) {
AVStream *avst = s->streams[i]; AVStream *avst = s->streams[i];
MOVStreamContext *msc = avst->priv_data; MOVStreamContext *msc = avst->priv_data;
@ -2078,10 +2074,22 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
(FFABS(best_dts - dts) > AV_TIME_BASE && dts < best_dts)))))) { (FFABS(best_dts - dts) > AV_TIME_BASE && dts < best_dts)))))) {
sample = current_sample; sample = current_sample;
best_dts = dts; best_dts = dts;
st = avst; *st = avst;
} }
} }
} }
return sample;
}
static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
{
MOVContext *mov = s->priv_data;
MOVStreamContext *sc;
AVIndexEntry *sample;
AVStream *st = NULL;
int ret;
retry:
sample = mov_find_next_sample(s, &st);
if (!sample) { if (!sample) {
mov->found_mdat = 0; mov->found_mdat = 0;
if (!url_is_streamed(s->pb) || if (!url_is_streamed(s->pb) ||