[FFmpeg-devel] [PATCH 6/9] avcodec/asvenc: Avoid reversing output data twice
Michael Niedermayer
michael at niedermayer.cc
Thu Oct 15 20:05:24 EEST 2020
On Thu, Oct 15, 2020 at 04:12:01PM +0200, Andreas Rheinhardt wrote:
> Michael Niedermayer:
> > On Tue, Oct 13, 2020 at 11:10:14AM +0200, Andreas Rheinhardt wrote:
> >> The ASUS V2 format is designed for a little-endian bitstream reader, yet
> >> our encoder used an ordinary big-endian bitstream writer to write it;
> >> the bits of every byte were swapped at the end and some data (namely the
> >> numbers not in static tables) had to be bitreversed before writing it at
> >> all, so that it would be reversed twice.
> >>
> >> This commit stops doing so; instead, a little-endian bitstream writer is
> >> used. This also necessitated to switch certain static tables, which
> >> required trivial modifications to the decoder (that uses the same
> >> tables).
> > [...]
> >
> >> -const uint8_t ff_asv2_level_tab[63][2] = {
> >> - { 0x3F, 10 }, { 0x2F, 10 }, { 0x37, 10 }, { 0x27, 10 }, { 0x3B, 10 }, { 0x2B, 10 }, { 0x33, 10 }, { 0x23, 10 },
> >> - { 0x3D, 10 }, { 0x2D, 10 }, { 0x35, 10 }, { 0x25, 10 }, { 0x39, 10 }, { 0x29, 10 }, { 0x31, 10 }, { 0x21, 10 },
> >> - { 0x1F, 8 }, { 0x17, 8 }, { 0x1B, 8 }, { 0x13, 8 }, { 0x1D, 8 }, { 0x15, 8 }, { 0x19, 8 }, { 0x11, 8 },
> >> - { 0x0F, 6 }, { 0x0B, 6 }, { 0x0D, 6 }, { 0x09, 6 },
> >> - { 0x07, 4 }, { 0x05, 4 },
> >> - { 0x03, 2 },
> >> - { 0x00, 5 },
> >> - { 0x02, 2 },
> >> - { 0x04, 4 }, { 0x06, 4 },
> >> - { 0x08, 6 }, { 0x0C, 6 }, { 0x0A, 6 }, { 0x0E, 6 },
> >> - { 0x10, 8 }, { 0x18, 8 }, { 0x14, 8 }, { 0x1C, 8 }, { 0x12, 8 }, { 0x1A, 8 }, { 0x16, 8 }, { 0x1E, 8 },
> >> - { 0x20, 10 }, { 0x30, 10 }, { 0x28, 10 }, { 0x38, 10 }, { 0x24, 10 }, { 0x34, 10 }, { 0x2C, 10 }, { 0x3C, 10 },
> >> - { 0x22, 10 }, { 0x32, 10 }, { 0x2A, 10 }, { 0x3A, 10 }, { 0x26, 10 }, { 0x36, 10 }, { 0x2E, 10 }, { 0x3E, 10 },
> >> +const uint16_t ff_asv2_level_tab[63][2] = {
> >> + { 0x3F0, 10 }, { 0x3D0, 10 }, { 0x3B0, 10 }, { 0x390, 10 }, { 0x370, 10 },
> >> + { 0x350, 10 }, { 0x330, 10 }, { 0x310, 10 }, { 0x2F0, 10 }, { 0x2D0, 10 },
> >> + { 0x2B0, 10 }, { 0x290, 10 }, { 0x270, 10 }, { 0x250, 10 }, { 0x230, 10 },
> >> + { 0x210, 10 },
> >> + { 0x0F8, 8 }, { 0x0E8, 8 }, { 0x0D8, 8 }, { 0x0C8, 8 }, { 0x0B8, 8 },
> >> + { 0x0A8, 8 }, { 0x098, 8 }, { 0x088, 8 },
> >> + { 0x03C, 6 }, { 0x034, 6 }, { 0x02C, 6 }, { 0x024, 6 },
> >> + { 0x00E, 4 }, { 0x00A, 4 },
> >> + { 0x003, 2 },
> >> + { 0x000, 5 },
> >> + { 0x001, 2 },
> >> + { 0x002, 4 }, { 0x006, 4 },
> >> + { 0x004, 6 }, { 0x00C, 6 }, { 0x014, 6 }, { 0x01C, 6 },
> >> + { 0x008, 8 }, { 0x018, 8 }, { 0x028, 8 }, { 0x038, 8 }, { 0x048, 8 },
> >> + { 0x058, 8 }, { 0x068, 8 }, { 0x078, 8 },
> >> + { 0x010, 10 }, { 0x030, 10 }, { 0x050, 10 }, { 0x070, 10 }, { 0x090, 10 },
> >> + { 0x0B0, 10 }, { 0x0D0, 10 }, { 0x0F0, 10 }, { 0x110, 10 }, { 0x130, 10 },
> >> + { 0x150, 10 }, { 0x170, 10 }, { 0x190, 10 }, { 0x1B0, 10 }, { 0x1D0, 10 },
> >> + { 0x1F0, 10 }
> >> };
> >
> > would it be worth it to handle codes with length > the 8*sizeof in such a way
> > that this fits still in uint8 ?
> >
> You seem to believe that the reason I switch to little-endian codes
> (which entails switching to uint16_t) in this array lies in the VLC API.
> This is not so. The reason for the switch is that the little endian
> values are now directly written by put_bits_le(). If the values were not
> reversed, one would have to reverse them at runtime in the encoder.
right, i missed that this was of course also used in the encoder
thx
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
The real ebay dictionary, page 1
"Used only once" - "Some unspecified defect prevented a second use"
"In good condition" - "Can be repaird by experienced expert"
"As is" - "You wouldnt want it even if you were payed for it, if you knew ..."
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20201015/52273465/attachment.sig>
More information about the ffmpeg-devel
mailing list