@ -99,7 +99,6 @@ int main(int argc, char **argv)
AVFrame * frame ;
AVFrame * frame ;
AVPacket pkt ;
AVPacket pkt ;
int i , j , k , ret , got_output ;
int i , j , k , ret , got_output ;
int buffer_size ;
FILE * f ;
FILE * f ;
uint16_t * samples ;
uint16_t * samples ;
float t , tincr ;
float t , tincr ;
@ -165,25 +164,10 @@ int main(int argc, char **argv)
frame - > format = c - > sample_fmt ;
frame - > format = c - > sample_fmt ;
frame - > channel_layout = c - > channel_layout ;
frame - > channel_layout = c - > channel_layout ;
/* the codec gives us the frame size, in samples,
/* allocate the data buffers */
* we calculate the size of the samples buffer in bytes */
ret = av_frame_get_buffer ( frame , 0 ) ;
buffer_size = av_samples_get_buffer_size ( NULL , c - > channels , c - > frame_size ,
c - > sample_fmt , 0 ) ;
if ( buffer_size < 0 ) {
fprintf ( stderr , " Could not get sample buffer size \n " ) ;
exit ( 1 ) ;
}
samples = av_malloc ( buffer_size ) ;
if ( ! samples ) {
fprintf ( stderr , " Could not allocate %d bytes for samples buffer \n " ,
buffer_size ) ;
exit ( 1 ) ;
}
/* setup the data pointers in the AVFrame */
ret = avcodec_fill_audio_frame ( frame , c - > channels , c - > sample_fmt ,
( const uint8_t * ) samples , buffer_size , 0 ) ;
if ( ret < 0 ) {
if ( ret < 0 ) {
fprintf ( stderr , " Could not setup audio frame \n " ) ;
fprintf ( stderr , " Could not allocate audio data buffers \n " ) ;
exit ( 1 ) ;
exit ( 1 ) ;
}
}
@ -195,6 +179,13 @@ int main(int argc, char **argv)
pkt . data = NULL ; // packet data will be allocated by the encoder
pkt . data = NULL ; // packet data will be allocated by the encoder
pkt . size = 0 ;
pkt . size = 0 ;
/* make sure the frame is writable -- makes a copy if the encoder
* kept a reference internally */
ret = av_frame_make_writable ( frame ) ;
if ( ret < 0 )
exit ( 1 ) ;
samples = ( uint16_t * ) frame - > data [ 0 ] ;
for ( j = 0 ; j < c - > frame_size ; j + + ) {
for ( j = 0 ; j < c - > frame_size ; j + + ) {
samples [ 2 * j ] = ( int ) ( sin ( t ) * 10000 ) ;
samples [ 2 * j ] = ( int ) ( sin ( t ) * 10000 ) ;
@ -229,7 +220,6 @@ int main(int argc, char **argv)
}
}
fclose ( f ) ;
fclose ( f ) ;
av_freep ( & samples ) ;
av_frame_free ( & frame ) ;
av_frame_free ( & frame ) ;
avcodec_free_context ( & c ) ;
avcodec_free_context ( & c ) ;
}
}