diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2016-04-03 02:15:06 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2016-04-03 03:25:28 +0200 |
commit | cf4d050b7231d7d96ed4d9a1bfaad87b8981e19d (patch) | |
tree | d374b733c4a21698a910afb9814095d1a71c8f83 /libavformat/wavdec.c | |
parent | fcbdc44f4e0c425506d627e16a12a7031dec398d (diff) | |
download | ffmpeg-cf4d050b7231d7d96ed4d9a1bfaad87b8981e19d.tar.gz |
avformat/wavdec: Remove direct s->pb->buffer access
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/wavdec.c')
-rw-r--r-- | libavformat/wavdec.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c index 0391737828..c62096350e 100644 --- a/libavformat/wavdec.c +++ b/libavformat/wavdec.c @@ -64,12 +64,34 @@ static void set_spdif(AVFormatContext *s, WAVDemuxContext *wav) { if (CONFIG_SPDIF_DEMUXER && s->streams[0]->codec->codec_tag == 1) { enum AVCodecID codec; - int ret = ff_spdif_probe(s->pb->buffer, s->pb->buf_end - s->pb->buffer, - &codec); + uint8_t *buf = NULL; + int ret = ffio_ensure_seekback(s->pb, sizeof(buf)); + int len = 1<<16; + int64_t pos = avio_tell(s->pb); + + if (ret < 0) + goto end; + + buf = av_malloc(len); + if (!buf) { + ret = AVERROR(ENOMEM); + goto end; + } + + len = ret = avio_read(s->pb, buf, len); + if (ret < 0) + goto end; + + ret = ff_spdif_probe(buf, len, &codec); if (ret > AVPROBE_SCORE_EXTENSION) { s->streams[0]->codec->codec_id = codec; wav->spdif = 1; } +end: + avio_seek(s->pb, pos, SEEK_SET); + if (ret < 0) + av_log(s, AV_LOG_WARNING, "Cannot check for SPDIF\n"); + av_free(buf); } } |