[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