diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2008-05-25 15:34:48 +0000 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2008-05-25 15:34:48 +0000 |
commit | 82a591d8d1d4cfec186c3616f44f4b9480413ea4 (patch) | |
tree | e74f8b566480d6dd950407048c17cda4419b878c /libavcodec/ac3dec.c | |
parent | 3af91313983b54d76aadda0f80ef7fc72aa9d5cf (diff) | |
download | ffmpeg-82a591d8d1d4cfec186c3616f44f4b9480413ea4.tar.gz |
add checks for missing information in the first block
Originally committed as revision 13382 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ac3dec.c')
-rw-r--r-- | libavcodec/ac3dec.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index ae9f2eafb2..8abbab984a 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -853,6 +853,9 @@ static int ac3_parse_audio_block(AC3DecodeContext *s, int blk) for (ch = 1; ch <= fbw_channels; ch++) s->channel_in_cpl[ch] = 0; } + } else if (!blk) { + av_log(s->avctx, AV_LOG_ERROR, "new coupling strategy must be present in block 0\n"); + return -1; } /* coupling coordinates */ @@ -874,6 +877,9 @@ static int ac3_parse_audio_block(AC3DecodeContext *s, int blk) s->cpl_coords[ch][bnd] = (cpl_coord_mant + 16) << 21; s->cpl_coords[ch][bnd] >>= (cpl_coord_exp + master_cpl_coord); } + } else if (!blk) { + av_log(s->avctx, AV_LOG_ERROR, "new coupling coordinates must be present in block 0\n"); + return -1; } } } @@ -893,6 +899,9 @@ static int ac3_parse_audio_block(AC3DecodeContext *s, int blk) s->num_rematrixing_bands -= 1 + (s->start_freq[CPL_CH] == 37); for(bnd=0; bnd<s->num_rematrixing_bands; bnd++) s->rematrixing_flags[bnd] = get_bits1(gbc); + } else if (!blk) { + av_log(s->avctx, AV_LOG_ERROR, "new rematrixing strategy must be present in block 0\n"); + return -1; } } @@ -959,6 +968,9 @@ static int ac3_parse_audio_block(AC3DecodeContext *s, int blk) for(ch=!s->cpl_in_use; ch<=s->channels; ch++) { bit_alloc_stages[ch] = FFMAX(bit_alloc_stages[ch], 2); } + } else if (!blk) { + av_log(s->avctx, AV_LOG_ERROR, "new bit allocation info must be present in block 0\n"); + return -1; } /* signal-to-noise ratio offsets and fast gains (signal-to-mask ratios) */ @@ -970,6 +982,9 @@ static int ac3_parse_audio_block(AC3DecodeContext *s, int blk) s->fast_gain[ch] = ff_ac3_fast_gain_tab[get_bits(gbc, 3)]; } memset(bit_alloc_stages, 3, AC3_MAX_CHANNELS); + } else if (!blk) { + av_log(s->avctx, AV_LOG_ERROR, "new snr offsets must be present in block 0\n"); + return -1; } /* coupling leak information */ @@ -977,6 +992,9 @@ static int ac3_parse_audio_block(AC3DecodeContext *s, int blk) s->bit_alloc_params.cpl_fast_leak = get_bits(gbc, 3); s->bit_alloc_params.cpl_slow_leak = get_bits(gbc, 3); bit_alloc_stages[CPL_CH] = FFMAX(bit_alloc_stages[CPL_CH], 2); + } else if (!blk) { + av_log(s->avctx, AV_LOG_ERROR, "new coupling leak info must be present in block 0\n"); + return -1; } /* delta bit allocation information */ |