Detect byte-swapped AC-3 and support decoding it directly.
This allows the AC-3 decoder to be used directly with RealMedia decoders that unlike the libavformat one do not byte-swap automatically. Since the new code is only used in case we would fail directly otherwise there should be no risk for regressions.
This commit is contained in:
		
							parent
							
								
									40728b5169
								
							
						
					
					
						commit
						4c886d613d
					
				@ -1314,6 +1314,11 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
 | 
			
		||||
 | 
			
		||||
    /* copy input buffer to decoder context to avoid reading past the end
 | 
			
		||||
       of the buffer, which can be caused by a damaged input stream. */
 | 
			
		||||
    if (buf_size >= 2 && AV_RB16(buf) == 0x770B) {
 | 
			
		||||
        // seems to be byte-swapped AC-3
 | 
			
		||||
        int cnt = FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE) >> 1;
 | 
			
		||||
        s->dsp.bswap16_buf((uint16_t *)s->input_buffer, (const uint16_t *)buf, cnt);
 | 
			
		||||
    } else
 | 
			
		||||
        memcpy(s->input_buffer, buf, FFMIN(buf_size, AC3_FRAME_BUFFER_SIZE));
 | 
			
		||||
    buf = s->input_buffer;
 | 
			
		||||
    /* initialize the GetBitContext with the start of valid AC-3 Frame */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user