aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/flvdec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-04-13 02:49:22 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-04-13 02:49:22 +0200
commit9891004ba91a126f56cd02c6f7a7b0c368a158b9 (patch)
tree05dd1b2b9250a7d09d9e9142be55100a581d2396 /libavformat/flvdec.c
parenta0f17473b37589d8e05f42fefa5a266a2b33831c (diff)
parent578d6861a753eb0b9d277f7ec17d1502eb2bb35a (diff)
downloadffmpeg-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.c14
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))