[FFmpeg-devel] [PATCH] Issue 636 : ALAC encoding sometimes fails

Måns Rullgård mans
Fri Dec 5 15:12:34 CET 2008


Michael Niedermayer wrote:
> On Fri, Dec 05, 2008 at 10:09:16AM +0530, Jai Menon wrote:
>> Hi,
>>
>> Attached patch fixes issue 636 and a few other fringe cases where the
>> alac encoder produces
>> lossy output. I'm behind a NAT and svn doesn't work, so could someone
>> please apply. Thanks.
>>
>> Regards,
>>
>> Jai
>
>> Index: libavcodec/alacenc.c
>> ===================================================================
>> --- libavcodec/alacenc.c	(revision 15797)
>> +++ libavcodec/alacenc.c	(working copy)
>> @@ -253,7 +253,8 @@
>>
>>              sum >>= lpc.lpc_quant;
>>              sum += samples[0];
>> -            residual[i] = samples[lpc.lpc_order+1] - sum;
>> +            residual[i] = (samples[lpc.lpc_order+1] - sum) << (32 -
s->write_sample_size) >>
>> +                          (32 - s->write_sample_size);
>>              res_val = residual[i];
>
> you are missing a int32_t cast in there, without it this wont work on
> systems where int is not exactly 32bit

Alternatively substitute 8*sizeof(int) for 32.  For maximum portability,
use CHAR_BIT rather than 8.

I assume the intent here is to sign-extend a smaller value to 32 bits.
Are compilers clever enough to realise this and use more efficient
methods where available?  If not, we should add a macro or inline
function doing it properly.

-- 
M?ns Rullg?rd
mans at mansr.com




More information about the ffmpeg-devel mailing list