summaryrefslogtreecommitdiff
path: root/libavformat/wavdec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-04-03 02:15:06 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2016-04-03 03:25:28 +0200
commitcf4d050b7231d7d96ed4d9a1bfaad87b8981e19d (patch)
treed374b733c4a21698a910afb9814095d1a71c8f83 /libavformat/wavdec.c
parentfcbdc44f4e0c425506d627e16a12a7031dec398d (diff)
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.c26
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);
}
}