|
|
|
@@ -60,6 +60,19 @@ typedef struct WAVDemuxContext { |
|
|
|
int rifx; // RIFX: integer byte order for parameters is big endian |
|
|
|
} WAVDemuxContext; |
|
|
|
|
|
|
|
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); |
|
|
|
if (ret > AVPROBE_SCORE_EXTENSION) { |
|
|
|
s->streams[0]->codec->codec_id = codec; |
|
|
|
wav->spdif = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#if CONFIG_WAV_DEMUXER |
|
|
|
|
|
|
|
static int64_t next_tag(AVIOContext *pb, uint32_t *tag, int big_endian) |
|
|
|
@@ -528,6 +541,8 @@ break_loop: |
|
|
|
ff_metadata_conv_ctx(s, NULL, wav_metadata_conv); |
|
|
|
ff_metadata_conv_ctx(s, NULL, ff_riff_info_conv); |
|
|
|
|
|
|
|
set_spdif(s, wav); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -561,18 +576,6 @@ static int wav_read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
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_EXTENSION) { |
|
|
|
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); |
|
|
|
|
|
|
|
@@ -833,6 +836,8 @@ static int w64_read_header(AVFormatContext *s) |
|
|
|
|
|
|
|
avio_seek(pb, data_ofs, SEEK_SET); |
|
|
|
|
|
|
|
set_spdif(s, wav); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
|