| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -638,7 +638,7 @@ static inline int wv_unpack_stereo(WavpackFrameContext *s, GetBitContext *gb, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        wv_check_crc(s, crc, crc_extra_bits)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return AVERROR_INVALIDDATA; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return count * 2; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static inline int wv_unpack_mono(WavpackFrameContext *s, GetBitContext *gb, | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -699,7 +699,7 @@ static inline int wv_unpack_mono(WavpackFrameContext *s, GetBitContext *gb, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        wv_check_crc(s, crc, crc_extra_bits)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return AVERROR_INVALIDDATA; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return count; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static av_cold int wv_alloc_frame_context(WavpackContext *c) | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -765,7 +765,7 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    WavpackFrameContext *s; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    GetByteContext gb; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    void *samples_l, *samples_r; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int samplecount; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int ret; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int got_terms   = 0, got_weights = 0, got_samples = 0, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        got_entropy = 0, got_bs      = 0, got_float   = 0, got_hybrid = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int i, j, id, size, ssize, weights, t; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -799,7 +799,8 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (!wc->mkv_mode) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        s->samples = bytestream2_get_le32(&gb); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (s->samples != wc->samples) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            av_log(avctx, AV_LOG_ERROR, "mismatching sample count in block"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            av_log(avctx, AV_LOG_ERROR, "Mismatching number of samples in " | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                   "a sequence: %d and %d\n", wc->samples, s->samples); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return AVERROR_INVALIDDATA; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -1136,13 +1137,13 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (s->stereo_in) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        samplecount = wv_unpack_stereo(s, &s->gb, samples_l, samples_r, avctx->sample_fmt); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (samplecount < 0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return samplecount; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ret = wv_unpack_stereo(s, &s->gb, samples_l, samples_r, avctx->sample_fmt); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (ret < 0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return ret; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        samplecount = wv_unpack_mono(s, &s->gb, samples_l, avctx->sample_fmt); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (samplecount < 0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return samplecount; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ret = wv_unpack_mono(s, &s->gb, samples_l, avctx->sample_fmt); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (ret < 0) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return ret; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (s->stereo) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            memcpy(samples_r, samples_l, bpp * s->samples); | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -1150,7 +1151,7 @@ static int wavpack_decode_block(AVCodecContext *avctx, int block_no, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    *got_frame_ptr = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return samplecount * bpp; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static void wavpack_decode_flush(AVCodecContext *avctx) | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -1170,7 +1171,6 @@ static int wavpack_decode_frame(AVCodecContext *avctx, void *data, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int buf_size       = avpkt->size; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    AVFrame *frame     = data; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int frame_size, ret, frame_flags; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int samplecount = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (avpkt->size < 12 + s->multichannel * 4) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return AVERROR_INVALIDDATA; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -1234,11 +1234,11 @@ static int wavpack_decode_frame(AVCodecContext *avctx, void *data, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            wavpack_decode_flush(avctx); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return AVERROR_INVALIDDATA; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if ((samplecount = wavpack_decode_block(avctx, s->block, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                frame->extended_data, got_frame_ptr, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                buf, frame_size)) < 0) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if ((ret = wavpack_decode_block(avctx, s->block, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                        frame->extended_data, got_frame_ptr, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                        buf, frame_size)) < 0) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            wavpack_decode_flush(avctx); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return samplecount; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return ret; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        s->block++; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        buf      += frame_size; | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |