diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-04-13 02:49:22 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-04-13 02:49:22 +0200 |
commit | 9891004ba91a126f56cd02c6f7a7b0c368a158b9 (patch) | |
tree | 05dd1b2b9250a7d09d9e9142be55100a581d2396 /libavformat/flvdec.c | |
parent | a0f17473b37589d8e05f42fefa5a266a2b33831c (diff) | |
parent | 578d6861a753eb0b9d277f7ec17d1502eb2bb35a (diff) | |
download | ffmpeg-9891004ba91a126f56cd02c6f7a7b0c368a158b9.tar.gz |
Merge remote branch 'qatar/master'
* qatar/master:
Partially merged:flvdec: Allow parsing keyframes metadata without seeking in most cases
Error out if vaapi is not found
avio: undeprecate av_url_read_fseek/fpause under nicer names
libvo-*: Don't use deprecated sample format names and enum names
DUPLICATE flvdec: Fix support for flvtool2 "keyframes based" generated index
DUPLICATE libavcodec: Use "const enum AVSampleFormat[]" in AVCodec initialization
Fix the conversion of AV_SAMPLE_FMT_FLT and _DBL to AV_SAMPLE_FMT_S32.
Convert some undefined 1<<31 shifts into 1U<<31.
Conflicts:
configure
libavcodec/libvo-aacenc.c
libavcodec/libvo-amrwbenc.c
libavformat/flvdec.c
Marged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/flvdec.c')
-rw-r--r-- | libavformat/flvdec.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index d06cfcc8d5..58a2abad2b 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -130,8 +130,8 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream char str_val[256]; int64_t *times = NULL; int64_t *filepositions = NULL; - int ret = 0; - int64_t initial_pos = url_ftell(ioc); + int ret = AVERROR(ENOSYS); + int64_t initial_pos = avio_tell(ioc); while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) { int64_t** current_array; @@ -164,6 +164,12 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream goto finish; current_array[0][i] = av_int2dbl(avio_rb64(ioc)); } + if (times && filepositions) { + // All done, exiting at a position allowing amf_parse_object + // to finish parsing the object + ret = 0; + break; + } } if (timeslen == fileposlen) { @@ -520,7 +526,7 @@ leave: static int flv_read_seek(AVFormatContext *s, int stream_index, int64_t ts, int flags) { - return ffio_read_seek(s->pb, stream_index, ts, flags); + return avio_seek_time(s->pb, stream_index, ts, flags); } #if 0 /* don't know enough to implement this */ @@ -541,7 +547,7 @@ static int flv_read_seek2(AVFormatContext *s, int stream_index, ts = av_rescale_rnd(ts, 1000, AV_TIME_BASE, flags & AVSEEK_FLAG_BACKWARD ? AV_ROUND_DOWN : AV_ROUND_UP); } - ret = ffio_read_seek(s->pb, stream_index, ts, flags); + ret = avio_seek_time(s->pb, stream_index, ts, flags); } if (ret == AVERROR(ENOSYS)) |