[Ffmpeg-devel] Reading bit-reversed VLC codes

Michael Niedermayer michaelni
Sun Mar 18 21:38:10 CET 2007


Hi

On Sun, Mar 18, 2007 at 08:33:31PM +0000, M?ns Rullg?rd wrote:
> Michael Niedermayer <michaelni at gmx.at> writes:
> 
> > Hi
> >
> > On Sun, Mar 18, 2007 at 08:10:59PM +0000, M?ns Rullg?rd wrote:
> >> Michael Niedermayer <michaelni at gmx.at> writes:
> >> 
> >> > Hi
> >> >
> >> > On Sun, Mar 18, 2007 at 07:27:43PM +0000, M?ns Rullg?rd wrote:
> >> >> Michael Niedermayer <michaelni at gmx.at> writes:
> >> >> 
> >> >> > Hi
> >> >> >
> >> >> > On Sun, Mar 18, 2007 at 07:13:30PM +0000, M?ns Rullg?rd wrote:
> >> >> >> I need to read VLC codes that are stored in reverse order in the
> >> >> >> bitstream, i.e. a 4-bit code value of 5 is returned by get_bits as
> >> >> >> 0xa.  Is there some way to do this using the lavc VLC reader?
> >> >> >
> >> >> > for get bits the code in asv1.c
> >> >> > static inline int asv2_get_bits(GetBitContext *gb, int n){
> >> >> >     return ff_reverse[ get_bits(gb, n) << (8-n) ];
> >> >> > }
> >> >> 
> >> >> Non-VLC elements are stored the right way around, so I don't need to
> >> >> do anything special with those.
> >> >> 
> >> >> > might do what you want, for get_vlc() just change the table
> >> >> > before init_vlc()
> >> >> 
> >> >> I tried reversing the bits of each code before init_vlc(), but that
> >> >> only gives me an "incorrect codes" message and an error return.  I
> >> >> guess I did something wrong, but I'm at a loss figuring out what.
> >> >
> >> > well, you cannot just reverse a vlc like that, maybe you could elaborate
> >> > on what exactly you are trying to do (link to codec spec?)
> >> 
> >> I'm trying to write a zlib decoder.  The spec is RFC1951.
> >> 
> >> > i thought that you wanted to reverse the output of get_vlc() not the
> >> > bits of the vlc codes as stored in the bitstream later wont work in
> >> > general example:
> >> 
> >> [...]
> >> 
> >> > init_vlc/get_vlc() doesnt support such non prefix codes (for obvious
> >> > reasons)
> >> 
> >> No, of course it doesn't.  Do you have any suggestion how to solve
> >> this?
> >
> > now without reading the RFC (will do so in a moment) are you sure the
> > vlc is reversed instead of each byte being reversed?
> 
> It's stored in such a way that if I get_bits() the right number of
> bits for a code, I get the bits reversed compared to the code value
> I'm expecting.
> 
> Here's what the spec has to say:
> 
>              * Data elements are packed into bytes in order of
>                increasing bit number within the byte, i.e., starting
>                with the least-significant bit of the byte.

try a
#define ALT_BITSTREAM_READER_LE
before the #incldues

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

When you are offended at any man's fault, turn to yourself and study your
own failings. Then you will forget your anger. -- Epictetus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20070318/f566d17f/attachment.pgp>



More information about the ffmpeg-devel mailing list