Only set channels in the stream if previously unset, fixes resampling crash on broken dca frames
Originally committed as revision 12780 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		@@ -1173,7 +1173,14 @@ static int dca_decode_frame(AVCodecContext * avctx,
 | 
				
			|||||||
        s->output = DCA_STEREO;
 | 
					        s->output = DCA_STEREO;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* There is nothing that prevents a dts frame to change channel configuration
 | 
				
			||||||
 | 
					       but FFmpeg doesn't support that so only set the channels if it is previously
 | 
				
			||||||
 | 
					       unset. Ideally during the first probe for channels the crc should be checked
 | 
				
			||||||
 | 
					       and only set avctx->channels when the crc is ok. Right now the decoder could
 | 
				
			||||||
 | 
					       set the channels based on a broken first frame.*/
 | 
				
			||||||
 | 
					    if (!avctx->channels)
 | 
				
			||||||
        avctx->channels = channels;
 | 
					        avctx->channels = channels;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if(*data_size < (s->sample_blocks / 8) * 256 * sizeof(int16_t) * channels)
 | 
					    if(*data_size < (s->sample_blocks / 8) * 256 * sizeof(int16_t) * channels)
 | 
				
			||||||
        return -1;
 | 
					        return -1;
 | 
				
			||||||
    *data_size = 0;
 | 
					    *data_size = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user