| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -1888,12 +1888,14 @@ static av_cold int xma_decode_init(AVCodecContext *avctx) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        s->num_streams = avctx->extradata[1]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (avctx->extradata_size != (32 + ((avctx->extradata[0]==3)?0:8) + 4*s->num_streams)) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            av_log(avctx, AV_LOG_ERROR, "Incorrect XMA2 extradata size\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            s->num_streams = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return AVERROR(EINVAL); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } else if (avctx->codec_id == AV_CODEC_ID_XMA1 && avctx->extradata_size >= 4) { /* XMAWAVEFORMAT */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        s->num_streams = avctx->extradata[4]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (avctx->extradata_size != (8 + 20*s->num_streams)) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            av_log(avctx, AV_LOG_ERROR, "Incorrect XMA1 extradata size\n"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            s->num_streams = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return AVERROR(EINVAL); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } else { | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -1906,6 +1908,7 @@ static av_cold int xma_decode_init(AVCodecContext *avctx) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        s->num_streams <= 0 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    ) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        avpriv_request_sample(avctx, "More than %d channels in %d streams", XMA_MAX_CHANNELS, s->num_streams); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        s->num_streams = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return AVERROR_PATCHWELCOME; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -1938,6 +1941,7 @@ static av_cold int xma_decode_end(AVCodecContext *avctx) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        decode_end(&s->xma[i]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_frame_free(&s->frames[i]); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    s->num_streams = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -1993,6 +1997,7 @@ AVCodec ff_wmapro_decoder = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .close          = wmapro_decode_end, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .decode         = wmapro_decode_packet, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .capabilities   = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .flush          = wmapro_flush, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                      AV_SAMPLE_FMT_NONE }, | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -2008,6 +2013,7 @@ AVCodec ff_xma1_decoder = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .close          = xma_decode_end, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .decode         = xma_decode_packet, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .capabilities   = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                      AV_SAMPLE_FMT_NONE }, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			}; | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -2023,6 +2029,7 @@ AVCodec ff_xma2_decoder = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .decode         = xma_decode_packet, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .flush          = xma_flush, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .capabilities   = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .sample_fmts    = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                      AV_SAMPLE_FMT_NONE }, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			}; |