[FFmpeg-devel] [PATCH] convert to S16 when resampling is requested

Baptiste Coudurier baptiste.coudurier
Mon Feb 9 20:12:13 CET 2009


Michael Niedermayer wrote:
> On Sun, Feb 08, 2009 at 05:15:14PM -0800, Baptiste Coudurier wrote:
>> Michael Niedermayer wrote:
>>> [...]
>>>
>>>> 3rd try.
>>> [...]
>>>> @@ -126,8 +132,10 @@
>>>>      }
>>>>  }
>>>>  
>>>> -ReSampleContext *audio_resample_init(int output_channels, int input_channels,
>>>> -                                      int output_rate, int input_rate)
>>>> +ReSampleContext *audio_resample_init2(int output_channels, int input_channels,
>>> this needs a ff or av prefix
>>> also there should be a way for the user to set/pass the other params
>>> to the resampler namely 
>>> int filter_size, int phase_shift, int linear, double cutoff
>>> when we already change the API ...
>> Good idea, updated.
>>
>>> [...]
>>>> +            av_log(NULL, AV_LOG_ERROR,
>>>> +                   "Cannot convert %s sample format to s16 sample format\n",
>>>> +                   avcodec_get_sample_fmt_name(s->sample_fmt[0]));
>>> av_log() should have some context different from NULL otherwise
>>> it may become hard in some cases to tell from where a message came
>>>
>> Ok, separate patch attached, which can be applied first.
> 
> are there 2 patches supposed to be attached? because there is just 1
> 

The idea was to seperate the context add and the actual conversion code.
I will seperate commits.

> 
>> Index: libavcodec/resample.c
>> ===================================================================
>> --- libavcodec/resample.c	(revision 17085)
>> +++ libavcodec/resample.c	(working copy)
>> @@ -25,16 +25,32 @@
>>   */
>>  
>>  #include "avcodec.h"
>> +#include "audioconvert.h"
>> +#include "opt.h"
>>  
>>  struct AVResampleContext;
>>  
> 
>> +static const const char *context_to_name(void *ptr)
> 
> const const?

Fixed.

> [...]
>> @@ -153,6 +173,35 @@
>>      if (s->output_channels < s->filter_channels)
>>          s->filter_channels = s->output_channels;
>>  
>> +    s->sample_fmt [0] = sample_fmt_in;
>> +    s->sample_fmt [1] = sample_fmt_out;
> 
>> +    s->sample_size[0] = av_get_bits_per_sample_format(s->sample_fmt[0])/8;
>> +    s->sample_size[1] = av_get_bits_per_sample_format(s->sample_fmt[1])/8;
> 
>>> 3

Sure ? This is initialization. Changed it nonetheless.

>> +
>> +    if (s->sample_fmt[0] != SAMPLE_FMT_S16) {
>> +        av_audio_convert_free(s->convert_ctx[0]);
>> +        if (!(s->convert_ctx[0] = av_audio_convert_alloc(SAMPLE_FMT_S16, 1,
>> +                                                         s->sample_fmt[0], 1, NULL, 0))) {
>> +            av_log(NULL, AV_LOG_ERROR,
>> +                   "Cannot convert %s sample format to s16 sample format\n",
>> +                   avcodec_get_sample_fmt_name(s->sample_fmt[0]));
>> +            av_free(s);
>> +            return NULL;
>> +        }
>> +    }
>> +
>> +    if (s->sample_fmt[1] != SAMPLE_FMT_S16) {
>> +        av_audio_convert_free(s->convert_ctx[1]);
>> +        if (!(s->convert_ctx[1] = av_audio_convert_alloc(s->sample_fmt[1], 1,
>> +                                                         SAMPLE_FMT_S16, 1, NULL, 0))) {
>> +            av_log(NULL, AV_LOG_ERROR,
>> +                   "Cannot convert s16 sample format to %s sample format\n",
>> +                   avcodec_get_sample_fmt_name(s->sample_fmt[1]));
>> +            av_free(s);
>> +            return NULL;
> 
> can leak s->convert_ctx[0]

Fixed.

-- 
Baptiste COUDURIER                              GnuPG Key Id: 0x5C1ABAAA
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
checking for life_signs in -lkenny... no
FFmpeg maintainer                                  http://www.ffmpeg.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: resample_s16_4.patch
Type: text/x-diff
Size: 11637 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090209/dd24ba81/attachment.patch>



More information about the ffmpeg-devel mailing list