diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-12-10 15:54:30 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-12-10 15:56:01 +0100 |
commit | c61daa68e4f103ed18ad5af590ea20e9db8da328 (patch) | |
tree | 84a26ede8305b5012053c0389fe4dbea168a7f62 /libavcodec | |
parent | 4c32629b82598a837d5dfefbbfe4e6aeaf571496 (diff) | |
download | ffmpeg-c61daa68e4f103ed18ad5af590ea20e9db8da328.tar.gz |
avcodec/sonic: add larger version and minor_version fields with version >= 2
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/sonic.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/libavcodec/sonic.c b/libavcodec/sonic.c index 4d103f25df..c55d3dd15f 100644 --- a/libavcodec/sonic.c +++ b/libavcodec/sonic.c @@ -46,6 +46,7 @@ typedef struct SonicContext { int version; + int minor_version; int lossless, decorrelation; int num_taps, downsampling; @@ -573,8 +574,12 @@ static av_cold int sonic_encode_init(AVCodecContext *avctx) init_put_bits(&pb, avctx->extradata, 16*8); put_bits(&pb, 2, s->version); // version - if (s->version == 1) + if (s->version >= 1) { + if (s->version >= 2) { + put_bits(&pb, 8, s->version); + put_bits(&pb, 8, s->minor_version); + } put_bits(&pb, 2, s->channels); put_bits(&pb, 4, code_samplerate(s->samplerate)); } @@ -589,8 +594,8 @@ static av_cold int sonic_encode_init(AVCodecContext *avctx) flush_put_bits(&pb); avctx->extradata_size = put_bits_count(&pb)/8; - av_log(avctx, AV_LOG_INFO, "Sonic: ver: %d ls: %d dr: %d taps: %d block: %d frame: %d downsamp: %d\n", - s->version, s->lossless, s->decorrelation, s->num_taps, s->block_align, s->frame_size, s->downsampling); + av_log(avctx, AV_LOG_INFO, "Sonic: ver: %d.%d ls: %d dr: %d taps: %d block: %d frame: %d downsamp: %d\n", + s->version, s->minor_version, s->lossless, s->decorrelation, s->num_taps, s->block_align, s->frame_size, s->downsampling); avctx->frame_size = s->block_align*s->downsampling; @@ -762,13 +767,17 @@ static av_cold int sonic_decode_init(AVCodecContext *avctx) init_get_bits8(&gb, avctx->extradata, avctx->extradata_size); s->version = get_bits(&gb, 2); - if (s->version > 1) + if (s->version >= 2) { + s->version = get_bits(&gb, 8); + s->minor_version = get_bits(&gb, 8); + } + if (s->version > 2) { av_log(avctx, AV_LOG_ERROR, "Unsupported Sonic version, please report\n"); return AVERROR_INVALIDDATA; } - if (s->version == 1) + if (s->version >= 1) { s->channels = get_bits(&gb, 2); s->samplerate = samplerate_table[get_bits(&gb, 4)]; @@ -805,8 +814,8 @@ static av_cold int sonic_decode_init(AVCodecContext *avctx) s->frame_size = s->channels*s->block_align*s->downsampling; // avctx->frame_size = s->block_align; - av_log(avctx, AV_LOG_INFO, "Sonic: ver: %d ls: %d dr: %d taps: %d block: %d frame: %d downsamp: %d\n", - s->version, s->lossless, s->decorrelation, s->num_taps, s->block_align, s->frame_size, s->downsampling); + av_log(avctx, AV_LOG_INFO, "Sonic: ver: %d.%d ls: %d dr: %d taps: %d block: %d frame: %d downsamp: %d\n", + s->version, s->minor_version, s->lossless, s->decorrelation, s->num_taps, s->block_align, s->frame_size, s->downsampling); // generate taps s->tap_quant = av_calloc(s->num_taps, sizeof(*s->tap_quant)); |