X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fwvdec.c;h=649791d1511f073500288bf0698bb164d1fc2a61;hb=d3807467b2587ea720f32933d44b9dac5ecda66b;hp=82526563ec18aec7291e8081ec22650359abe787;hpb=706d2c66e8e59cfda32e57713bc37e5558a25815;p=ffmpeg diff --git a/libavformat/wvdec.c b/libavformat/wvdec.c index 82526563ec1..649791d1511 100644 --- a/libavformat/wvdec.c +++ b/libavformat/wvdec.c @@ -40,6 +40,7 @@ enum WV_FLAGS { WV_HBAL = 0x0400, WV_MCINIT = 0x0800, WV_MCEND = 0x1000, + WV_DSD = 0x80000000, }; static const int wv_rates[16] = { @@ -59,7 +60,7 @@ typedef struct WVContext { int64_t apetag_start; } WVContext; -static int wv_probe(AVProbeData *p) +static int wv_probe(const AVProbeData *p) { /* check file header */ if (p->buf_size <= 32) @@ -97,6 +98,11 @@ static int wv_read_block_header(AVFormatContext *ctx, AVIOContext *pb) return ret; } + if (wc->header.flags & WV_DSD) { + avpriv_report_missing_feature(ctx, "WV DSD"); + return AVERROR_PATCHWELCOME; + } + if (wc->header.version < 0x402 || wc->header.version > 0x410) { avpriv_report_missing_feature(ctx, "WV version 0x%03X", wc->header.version); @@ -153,11 +159,18 @@ static int wv_read_block_header(AVFormatContext *ctx, AVIOContext *pb) case 3: chmask = avio_rl32(pb); break; - case 5: + case 4: avio_skip(pb, 1); chan |= (avio_r8(pb) & 0xF) << 8; + chan += 1; chmask = avio_rl24(pb); break; + case 5: + avio_skip(pb, 1); + chan |= (avio_r8(pb) & 0xF) << 8; + chan += 1; + chmask = avio_rl32(pb); + break; default: av_log(ctx, AV_LOG_ERROR, "Invalid channel info size %d\n", size);