Set a constant frame size for encoding G.726 audio.
Originally committed as revision 25107 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							parent
							
								
									680861ca73
								
							
						
					
					
						commit
						c7d89948a3
					
				@ -334,6 +334,11 @@ static av_cold int g726_init(AVCodecContext * avctx)
 | 
				
			|||||||
    if (avctx->codec->decode)
 | 
					    if (avctx->codec->decode)
 | 
				
			||||||
        avctx->sample_fmt = SAMPLE_FMT_S16;
 | 
					        avctx->sample_fmt = SAMPLE_FMT_S16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* select a frame size that will end on a byte boundary and have a size of
 | 
				
			||||||
 | 
					       approximately 1024 bytes */
 | 
				
			||||||
 | 
					    if (avctx->codec->encode)
 | 
				
			||||||
 | 
					        avctx->frame_size = ((int[]){ 4096, 2736, 2048, 1640 })[index];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -350,10 +355,11 @@ static int g726_encode_frame(AVCodecContext *avctx,
 | 
				
			|||||||
    G726Context *c = avctx->priv_data;
 | 
					    G726Context *c = avctx->priv_data;
 | 
				
			||||||
    const short *samples = data;
 | 
					    const short *samples = data;
 | 
				
			||||||
    PutBitContext pb;
 | 
					    PutBitContext pb;
 | 
				
			||||||
 | 
					    int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    init_put_bits(&pb, dst, 1024*1024);
 | 
					    init_put_bits(&pb, dst, 1024*1024);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (; buf_size; buf_size--)
 | 
					    for (i = 0; i < avctx->frame_size; i++)
 | 
				
			||||||
        put_bits(&pb, c->code_size, g726_encode(c, *samples++));
 | 
					        put_bits(&pb, c->code_size, g726_encode(c, *samples++));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    flush_put_bits(&pb);
 | 
					    flush_put_bits(&pb);
 | 
				
			||||||
@ -394,6 +400,7 @@ AVCodec adpcm_g726_encoder = {
 | 
				
			|||||||
    g726_encode_frame,
 | 
					    g726_encode_frame,
 | 
				
			||||||
    g726_close,
 | 
					    g726_close,
 | 
				
			||||||
    NULL,
 | 
					    NULL,
 | 
				
			||||||
 | 
					    .capabilities = CODEC_CAP_SMALL_LAST_FRAME,
 | 
				
			||||||
    .sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
 | 
					    .sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
 | 
				
			||||||
    .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
 | 
					    .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
5d8cce28f83dd33c3c7eaf43a5db5294 *./tests/data/acodec/g726.wav
 | 
					fd090ddf05cc3401cc75c4a5ace1d05a *./tests/data/acodec/g726.wav
 | 
				
			||||||
24082 ./tests/data/acodec/g726.wav
 | 
					24052 ./tests/data/acodec/g726.wav
 | 
				
			||||||
4f1ba1af75dee64625a1c852e6cd01d3 *./tests/data/g726.acodec.out.wav
 | 
					74abea06027375111eeac1b2f8c7d3af *./tests/data/g726.acodec.out.wav
 | 
				
			||||||
stddev: 8504.69 PSNR: 17.74 MAXDIFF:31645 bytes:    96104/  1058400
 | 
					stddev: 8554.55 PSNR: 17.69 MAXDIFF:29353 bytes:    95984/  1058400
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user