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 | /* Low frequency effect data */ | 818 | /* Low frequency effect data */ |
| 819 | if (!base_channel && s->lfe) { | 819 | if (!base_channel && s->lfe) { |
| 820 | int quant7; | ||
| 820 | /* LFE samples */ | 821 | /* LFE samples */ |
| 821 | int lfe_samples = 2 * s->lfe * (4 + block_index); | 822 | int lfe_samples = 2 * s->lfe * (4 + block_index); |
| 822 | int lfe_end_sample = 2 * s->lfe * (4 + block_index + s->subsubframes[s->current_subframe]); | 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 | /* Scale factor index */ | 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 | /* Quantization step size * scale factor */ | 839 | /* Quantization step size * scale factor */ |
| 834 | lfe_scale = 0.035 * s->lfe_scale_factor; | 840 | lfe_scale = 0.035 * s->lfe_scale_factor; |