[FFmpeg-devel] [PATCH] new function get_sbits_long()

Justin Ruggles justin.ruggles
Tue Mar 3 01:38:09 CET 2009


M?ns Rullg?rd wrote:
> Justin Ruggles <justin.ruggles at gmail.com> writes:
> 
>> Reimar D?ffinger wrote:
>>> On Mon, Mar 02, 2009 at 01:35:45PM -0500, Justin Ruggles wrote:
>>>> Reimar D?ffinger wrote:
>>>>> On Mon, Mar 02, 2009 at 06:58:49PM +0100, Michael Niedermayer wrote:
>>>>>> On Mon, Mar 02, 2009 at 12:39:05PM -0500, Justin Ruggles wrote:
>>>>>>> I need a get_sbits_long() function to support FLAC files that are more
>>>>>>> than 24-bit.  There might be a better way to do it, but this works.
>>>>>> only where int is 32bit which isnt guranteed even if likely
>>>>> There is already the NEG_SSR32 macro to take care of that (and it
>>>>> also optimizes gcc's brain-deadness away on x86).
>>>> yes, this works well.
>>>>
>>>> -Justin
>>>>
>>>> Index: libavcodec/bitstream.h
>>>> ===================================================================
>>>> --- libavcodec/bitstream.h	(revision 17735)
>>>> +++ libavcodec/bitstream.h	(working copy)
>>>> @@ -707,6 +707,14 @@
>>>>  }
>>>>  
>>>>  /**
>>>> + * reads 0-32 bits as a signed integer.
>>>> + */
>>>> +static inline int get_sbits_long(GetBitContext *s, int n) {
>>>> +    int val = get_bits_long(s, n);
>>>> +    return NEG_SSR32(val, n);
>>> Can't imagine that, you must use it like in the SHOW_SBITS macro:
>>> NEG_SSR32(val<<(32-n), n)
>> You're right. The FLAC file I tested just happened not to trigger any
>> problem.  I tried another one.
>>
>> -Justin
>>
>>
>> Index: libavcodec/bitstream.h
>> ===================================================================
>> --- libavcodec/bitstream.h	(revision 17735)
>> +++ libavcodec/bitstream.h	(working copy)
>> @@ -707,6 +707,14 @@
>>  }
>>  
>>  /**
>> + * reads 0-32 bits as a signed integer.
>> + */
>> +static inline int get_sbits_long(GetBitContext *s, int n) {
>> +    int val = get_bits_long(s, n);
>> +    return NEG_SSR32(val<<(32-n), n);
>> +}
> 
> This is obfuscation IMO.  I'll prepare a patch adding a sign extend
> function if nobody beats me to it.  What is the preferred return type,
> int or int32_t?  I'd say int, but maybe there's a good reason for
> something else.

Thanks M?ns. Here is a patch using the new function in mathops.h.

-Justin

-------------- next part --------------
A non-text attachment was scrubbed...
Name: get_sbits_long.diff
Type: text/x-diff
Size: 719 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090302/e56ea4c9/attachment.diff>



More information about the ffmpeg-devel mailing list