Its not clear from the spec what to do with values larger than 127 so iam opting for the safe side and ask for a sample.
Unified · Split
| @@ -817,6 +817,7 @@ static int dca_subframe_header(DCAContext *s, int base_channel, int block_index) · 816 unmodified lines | ||
| 817 | 817 | |
| 818 | 818 | /* Low frequency effect data */ |
| 819 | 819 | if (!base_channel && s->lfe) { |
| 820 | + int quant7; | |
| 820 | 821 | /* LFE samples */ |
| 821 | 822 | int lfe_samples = 2 * s->lfe * (4 + block_index); |
| 822 | 823 | int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]); |
| @@ -828,7 +829,12 @@ static int dca_subframe_header(DCAContext *s, int base_channel, int block_index) · 5 unmodified lines | ||
| 828 | 829 | } |
| 829 | 830 | |
| 830 | 831 | /* Scale factor index */ |
| 831 | − s->lfe_scale_factor = scale_factor_quant7[get_bits(&s->gb, 8)]; | |
| 832 | + quant7 = get_bits(&s->gb, 8); | |
| 833 | + if (quant7 > 127) { | |
| 834 | + av_log_ask_for_sample(s->avctx, "LFEScaleIndex larger than 127\n"); | |
| 835 | + return AVERROR_INVALIDDATA; | |
| 836 | + } | |
| 837 | + s->lfe_scale_factor = scale_factor_quant7[quant7]; | |
| 832 | 838 | |
| 833 | 839 | /* Quantization step size * scale factor */ |
| 834 | 840 | lfe_scale = 0.035 * s->lfe_scale_factor; |