X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fresample%2Ffilter_resample.c;h=b8da7605d04672ffa1e639bb2e8f140a6c503bbd;hb=00db7ed91dfa61f9e144b6d5548350a5954deb61;hp=b4fd13d77e56fa8f736694435230cffb1ea70114;hpb=0942454258a07166839a999c71b6fa35785ac70a;p=melted diff --git a/src/modules/resample/filter_resample.c b/src/modules/resample/filter_resample.c index b4fd13d..b8da760 100644 --- a/src/modules/resample/filter_resample.c +++ b/src/modules/resample/filter_resample.c @@ -54,12 +54,12 @@ static int resample_get_audio( mlt_frame frame, int16_t **buffer, mlt_audio_form // Get the producer's audio mlt_frame_get_audio( frame, buffer, format, frequency, channels, samples ); - //fprintf( stderr, "resample_get_audio: output_rate %d\n", output_rate ); - // Return now if now work to do if ( output_rate == *frequency ) return 0; + //fprintf( stderr, "resample_get_audio: input_rate %d output_rate %d\n", *frequency, output_rate ); + // Convert to floating point for ( i = 0; i < *samples * *channels; ++i ) input_buffer[ i ] = ( float )( (*buffer)[ i ] ) / 32768; @@ -76,8 +76,8 @@ static int resample_get_audio( mlt_frame frame, int16_t **buffer, mlt_audio_form { if ( data.output_frames_gen > *samples ) { - *buffer = (int16_t*) malloc( data.output_frames_gen * *channels * 2 ); - mlt_properties_set_data( properties, "audio", *buffer, *channels * data.output_frames_gen * 2, free, NULL ); + *buffer = mlt_pool_alloc( data.output_frames_gen * *channels * sizeof( int16_t ) ); + mlt_properties_set_data( properties, "audio", *buffer, *channels * data.output_frames_gen * 2, mlt_pool_release, NULL ); } *samples = data.output_frames_gen; *frequency = output_rate; @@ -134,22 +134,22 @@ static mlt_frame filter_process( mlt_filter this, mlt_frame frame ) mlt_filter filter_resample_init( char *arg ) { - mlt_filter this = calloc( sizeof( struct mlt_filter_s ), 1 ); - if ( this != NULL && mlt_filter_init( this, NULL ) == 0 ) + mlt_filter this = mlt_filter_new( ); + if ( this != NULL ) { int error; SRC_STATE *state = src_new( RESAMPLE_TYPE, 2 /* channels */, &error ); if ( error == 0 ) { + void *input_buffer = mlt_pool_alloc( BUFFER_LEN ); + void *output_buffer = mlt_pool_alloc( BUFFER_LEN ); this->process = filter_process; if ( arg != NULL ) mlt_properties_set_int( mlt_filter_properties( this ), "frequency", atoi( arg ) ); mlt_properties_set_int( mlt_filter_properties( this ), "channels", 2 ); mlt_properties_set_data( mlt_filter_properties( this ), "state", state, 0, (mlt_destructor)src_delete, NULL ); - mlt_properties_set_data( mlt_filter_properties( this ), "input_buffer", - malloc( BUFFER_LEN ), BUFFER_LEN, free, NULL ); - mlt_properties_set_data( mlt_filter_properties( this ), "output_buffer", - malloc( BUFFER_LEN ), BUFFER_LEN, free, NULL ); + mlt_properties_set_data( mlt_filter_properties( this ), "input_buffer", input_buffer, BUFFER_LEN, mlt_pool_release, NULL ); + mlt_properties_set_data( mlt_filter_properties( this ), "output_buffer", output_buffer, BUFFER_LEN, mlt_pool_release, NULL ); } else {