Mercurial > libavcodec.hg
comparison dv.c @ 1875:45a1592dadca libavcodec
* moving some of the commonly used bit reading/writing functions
from common.c -> common.h so that they can be inlined.
+ performace gain ~1% (measured with DV decoding)
+ code bloat 0.05%
Looks like a win-win solution.
author | romansh |
---|---|
date | Fri, 12 Mar 2004 23:39:38 +0000 |
parents | 88056e077c7f |
children | fbcf02596520 |
comparison
equal
deleted
inserted
replaced
1874:fab737b59790 | 1875:45a1592dadca |
---|---|
640 DCTELEM *mb; | 640 DCTELEM *mb; |
641 uint8_t partial_bit_count; | 641 uint8_t partial_bit_count; |
642 uint32_t partial_bit_buffer; /* we can't use uint16_t here */ | 642 uint32_t partial_bit_buffer; /* we can't use uint16_t here */ |
643 } EncBlockInfo; | 643 } EncBlockInfo; |
644 | 644 |
645 static always_inline int dv_bits_left(PutBitContext* s) | |
646 { | |
647 return (s->buf_end - s->buf) * 8 - | |
648 ((s->buf_ptr - s->buf) * 8 + 32 - (int64_t)s->bit_left); | |
649 } | |
650 | |
651 static always_inline void dv_encode_ac(EncBlockInfo* bi, PutBitContext* pb_pool, | 645 static always_inline void dv_encode_ac(EncBlockInfo* bi, PutBitContext* pb_pool, |
652 int pb_size) | 646 int pb_size) |
653 { | 647 { |
654 int run; | 648 int run; |
655 int bits_left; | 649 int bits_left; |
658 uint32_t vlc = bi->partial_bit_buffer; | 652 uint32_t vlc = bi->partial_bit_buffer; |
659 | 653 |
660 bi->partial_bit_count = bi->partial_bit_buffer = 0; | 654 bi->partial_bit_count = bi->partial_bit_buffer = 0; |
661 vlc_loop: | 655 vlc_loop: |
662 /* Find suitable storage space */ | 656 /* Find suitable storage space */ |
663 for (; size > (bits_left = dv_bits_left(pb)); pb++) { | 657 for (; size > (bits_left = put_bits_left(pb)); pb++) { |
664 if (bits_left) { | 658 if (bits_left) { |
665 size -= bits_left; | 659 size -= bits_left; |
666 put_bits(pb, bits_left, vlc >> size); | 660 put_bits(pb, bits_left, vlc >> size); |
667 vlc = vlc & ((1<<size)-1); | 661 vlc = vlc & ((1<<size)-1); |
668 } | 662 } |