aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat
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
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')
-rw-r--r--libavformat/asfdec.c2
-rw-r--r--libavformat/avio.h27
-rw-r--r--libavformat/avio_internal.h26
-rw-r--r--libavformat/aviobuf.c8
-rw-r--r--libavformat/flvdec.c14
-rw-r--r--libavformat/utils.c4
6 files changed, 44 insertions, 37 deletions
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index 9724c84992..dbb3f82205 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -1234,7 +1234,7 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
/* Try using the protocol's read_seek if available */
if(s->pb) {
- int ret = ffio_read_seek(s->pb, stream_index, pts, flags);
+ int ret = avio_seek_time(s->pb, stream_index, pts, flags);
if(ret >= 0)
asf_reset_header(s);
if (ret != AVERROR(ENOSYS))
diff --git a/libavformat/avio.h b/libavformat/avio.h
index fa43340f9c..7deca337cf 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -618,4 +618,31 @@ int udp_get_file_handle(URLContext *h);
*/
const char *avio_enum_protocols(void **opaque, int output);
+/**
+ * Pause and resume playing - only meaningful if using a network streaming
+ * protocol (e.g. MMS).
+ * @param pause 1 for pause, 0 for resume
+ */
+int avio_pause(AVIOContext *h, int pause);
+
+/**
+ * Seek to a given timestamp relative to some component stream.
+ * Only meaningful if using a network streaming protocol (e.g. MMS.).
+ * @param stream_index The stream index that the timestamp is relative to.
+ * If stream_index is (-1) the timestamp should be in AV_TIME_BASE
+ * units from the beginning of the presentation.
+ * If a stream_index >= 0 is used and the protocol does not support
+ * seeking based on component streams, the call will fail with ENOTSUP.
+ * @param timestamp timestamp in AVStream.time_base units
+ * or if there is no stream specified then in AV_TIME_BASE units.
+ * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE
+ * and AVSEEK_FLAG_ANY. The protocol may silently ignore
+ * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will
+ * fail with ENOTSUP if used and not supported.
+ * @return >= 0 on success
+ * @see AVInputFormat::read_seek
+ */
+int64_t avio_seek_time(AVIOContext *h, int stream_index,
+ int64_t timestamp, int flags);
+
#endif /* AVFORMAT_AVIO_H */
diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h
index 71a6846ef8..92528f2d18 100644
--- a/libavformat/avio_internal.h
+++ b/libavformat/avio_internal.h
@@ -67,32 +67,6 @@ uint64_t ffio_read_varlen(AVIOContext *bc);
/** @warning must be called before any I/O */
int ffio_set_buf_size(AVIOContext *s, int buf_size);
-/**
- * Pause and resume playing - only meaningful if using a network streaming
- * protocol (e.g. MMS).
- * @param pause 1 for pause, 0 for resume
- */
-int ffio_read_pause(AVIOContext *h, int pause);
-/**
- * Seek to a given timestamp relative to some component stream.
- * Only meaningful if using a network streaming protocol (e.g. MMS.).
- * @param stream_index The stream index that the timestamp is relative to.
- * If stream_index is (-1) the timestamp should be in AV_TIME_BASE
- * units from the beginning of the presentation.
- * If a stream_index >= 0 is used and the protocol does not support
- * seeking based on component streams, the call will fail with ENOTSUP.
- * @param timestamp timestamp in AVStream.time_base units
- * or if there is no stream specified then in AV_TIME_BASE units.
- * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE
- * and AVSEEK_FLAG_ANY. The protocol may silently ignore
- * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will
- * fail with ENOTSUP if used and not supported.
- * @return >= 0 on success
- * @see AVInputFormat::read_seek
- */
-int64_t ffio_read_seek (AVIOContext *h, int stream_index,
- int64_t timestamp, int flags);
-
void ffio_init_checksum(AVIOContext *s,
unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
unsigned long checksum);
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index fb6a0c7b69..70084e9323 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -412,12 +412,12 @@ void put_flush_packet(AVIOContext *s)
}
int av_url_read_fpause(AVIOContext *s, int pause)
{
- return ffio_read_pause(s, pause);
+ return avio_pause(s, pause);
}
int64_t av_url_read_fseek(AVIOContext *s, int stream_index,
int64_t timestamp, int flags)
{
- return ffio_read_seek(s, stream_index, timestamp, flags);
+ return avio_seek_time(s, stream_index, timestamp, flags);
}
void init_checksum(AVIOContext *s,
unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
@@ -1022,14 +1022,14 @@ int url_fget_max_packet_size(AVIOContext *s)
}
#endif
-int ffio_read_pause(AVIOContext *s, int pause)
+int avio_pause(AVIOContext *s, int pause)
{
if (!s->read_pause)
return AVERROR(ENOSYS);
return s->read_pause(s->opaque, pause);
}
-int64_t ffio_read_seek(AVIOContext *s, int stream_index,
+int64_t avio_seek_time(AVIOContext *s, int stream_index,
int64_t timestamp, int flags)
{
URLContext *h = s->opaque;
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))
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 835408bc32..0ea8ca94a9 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2600,7 +2600,7 @@ int av_read_play(AVFormatContext *s)
if (s->iformat->read_play)
return s->iformat->read_play(s);
if (s->pb)
- return ffio_read_pause(s->pb, 0);
+ return avio_pause(s->pb, 0);
return AVERROR(ENOSYS);
}
@@ -2609,7 +2609,7 @@ int av_read_pause(AVFormatContext *s)
if (s->iformat->read_pause)
return s->iformat->read_pause(s);
if (s->pb)
- return ffio_read_pause(s->pb, 1);
+ return avio_pause(s->pb, 1);
return AVERROR(ENOSYS);
}