diff options
author | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2013-01-06 18:48:51 +0100 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2013-01-06 18:48:51 +0100 |
commit | 1ae9d2820e1181a1109c230d4f1e717443dcce2d (patch) | |
tree | f84cc0408b71350c81dbb784eb8c94cab1756006 /libavformat/wavdec.c | |
parent | 9ff92cf1953d90e0e4f87f76f3f2f6439205a139 (diff) | |
download | ffmpeg-1ae9d2820e1181a1109c230d4f1e717443dcce2d.tar.gz |
Support decoding AC-3 in wav.
All known samples are actually ac3-in-spdif-in-wav, so use
the spdif demuxer to get the ac3 frames.
Diffstat (limited to 'libavformat/wavdec.c')
-rw-r--r-- | libavformat/wavdec.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c index f8a36e9d6c..451187739f 100644 --- a/libavformat/wavdec.c +++ b/libavformat/wavdec.c @@ -36,6 +36,7 @@ #include "w64.h" #include "avio.h" #include "metadata.h" +#include "spdif.h" typedef struct WAVDemuxContext { const AVClass *class; @@ -49,6 +50,7 @@ typedef struct WAVDemuxContext { int smv_eof; int audio_eof; int ignore_length; + int spdif; } WAVDemuxContext; @@ -407,6 +409,21 @@ static int wav_read_packet(AVFormatContext *s, AVStream *st; WAVDemuxContext *wav = s->priv_data; + if (CONFIG_SPDIF_DEMUXER && wav->spdif == 0 && + s->streams[0]->codec->codec_tag == 1) { + enum AVCodecID codec; + ret = ff_spdif_probe(s->pb->buffer, s->pb->buf_end - s->pb->buffer, + &codec); + if (ret > AVPROBE_SCORE_MAX / 2) { + s->streams[0]->codec->codec_id = codec; + wav->spdif = 1; + } else { + wav->spdif = -1; + } + } + if (CONFIG_SPDIF_DEMUXER && wav->spdif == 1) + return ff_spdif_read_packet(s, pkt); + if (wav->smv_data_ofs > 0) { int64_t audio_dts, video_dts; smv_retry: |