You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avcodec/wmalosslessdec: fix decoding of raw pcm tiles
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
		| @@ -172,8 +172,6 @@ typedef struct WmallDecodeCtx { | |||||||
|     int lpc_order; |     int lpc_order; | ||||||
|     int lpc_scaling; |     int lpc_scaling; | ||||||
|     int lpc_intbits; |     int lpc_intbits; | ||||||
|  |  | ||||||
|     int channel_coeffs[WMALL_MAX_CHANNELS][WMALL_BLOCK_MAX_SIZE]; |  | ||||||
| } WmallDecodeCtx; | } WmallDecodeCtx; | ||||||
|  |  | ||||||
| /** Get sign of integer (1 for positive, -1 for negative and 0 for zero) */ | /** Get sign of integer (1 for positive, -1 for negative and 0 for zero) */ | ||||||
| @@ -897,14 +895,17 @@ static int decode_subframe(WmallDecodeCtx *s) | |||||||
|         s->quant_stepsize = get_bits(&s->gb, 8) + 1; |         s->quant_stepsize = get_bits(&s->gb, 8) + 1; | ||||||
|  |  | ||||||
|         reset_codec(s); |         reset_codec(s); | ||||||
|     } else if (!s->cdlms[0][0].order) { |     } | ||||||
|  |  | ||||||
|  |     rawpcm_tile = get_bits1(&s->gb); | ||||||
|  |  | ||||||
|  |     if (!rawpcm_tile && !s->cdlms[0][0].order) { | ||||||
|         av_log(s->avctx, AV_LOG_DEBUG, |         av_log(s->avctx, AV_LOG_DEBUG, | ||||||
|                "Waiting for seekable tile\n"); |                "Waiting for seekable tile\n"); | ||||||
|         av_frame_unref(s->frame); |         av_frame_unref(s->frame); | ||||||
|         return -1; |         return -1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     rawpcm_tile = get_bits1(&s->gb); |  | ||||||
|  |  | ||||||
|     for (i = 0; i < s->num_channels; i++) |     for (i = 0; i < s->num_channels; i++) | ||||||
|         s->is_channel_coded[i] = 1; |         s->is_channel_coded[i] = 1; | ||||||
| @@ -943,9 +944,9 @@ static int decode_subframe(WmallDecodeCtx *s) | |||||||
|                 bits * s->num_channels * subframe_len, get_bits_count(&s->gb)); |                 bits * s->num_channels * subframe_len, get_bits_count(&s->gb)); | ||||||
|         for (i = 0; i < s->num_channels; i++) |         for (i = 0; i < s->num_channels; i++) | ||||||
|             for (j = 0; j < subframe_len; j++) |             for (j = 0; j < subframe_len; j++) | ||||||
|                 s->channel_coeffs[i][j] = get_sbits_long(&s->gb, bits); |                 s->channel_residues[i][j] = get_sbits_long(&s->gb, bits); | ||||||
|     } else { |     } else { | ||||||
|         for (i = 0; i < s->num_channels; i++) |         for (i = 0; i < s->num_channels; i++) { | ||||||
|             if (s->is_channel_coded[i]) { |             if (s->is_channel_coded[i]) { | ||||||
|                 decode_channel_residues(s, i, subframe_len); |                 decode_channel_residues(s, i, subframe_len); | ||||||
|                 if (s->seekable_tile) |                 if (s->seekable_tile) | ||||||
| @@ -957,6 +958,7 @@ static int decode_subframe(WmallDecodeCtx *s) | |||||||
|                 memset(s->channel_residues[i], 0, sizeof(**s->channel_residues) * subframe_len); |                 memset(s->channel_residues[i], 0, sizeof(**s->channel_residues) * subframe_len); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (s->do_mclms) |         if (s->do_mclms) | ||||||
|             revert_mclms(s, subframe_len); |             revert_mclms(s, subframe_len); | ||||||
|         if (s->do_inter_ch_decorr) |         if (s->do_inter_ch_decorr) | ||||||
| @@ -969,6 +971,7 @@ static int decode_subframe(WmallDecodeCtx *s) | |||||||
|             for (i = 0; i < s->num_channels; i++) |             for (i = 0; i < s->num_channels; i++) | ||||||
|                 for (j = 0; j < subframe_len; j++) |                 for (j = 0; j < subframe_len; j++) | ||||||
|                     s->channel_residues[i][j] *= s->quant_stepsize; |                     s->channel_residues[i][j] *= s->quant_stepsize; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /* Write to proper output buffer depending on bit-depth */ |     /* Write to proper output buffer depending on bit-depth */ | ||||||
|     for (i = 0; i < s->channels_for_cur_subframe; i++) { |     for (i = 0; i < s->channels_for_cur_subframe; i++) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user