| 722 | } EncBlockInfo; |
| 723 | |
| 724 | static av_always_inline PutBitContext* dv_encode_ac(EncBlockInfo* bi, |
| 725 | PutBitContext* pb_pool, |
| 726 | PutBitContext* pb_end) |
| 727 | { |
| 728 | int prev, bits_left; |
| 729 | PutBitContext* pb = pb_pool; |
| 730 | int size = bi->partial_bit_count; |
| 731 | uint32_t vlc = bi->partial_bit_buffer; |
| 732 | |
| 733 | bi->partial_bit_count = bi->partial_bit_buffer = 0; |
| 734 | for (;;){ |
| 735 | /* Find suitable storage space */ |
| 736 | for (; size > (bits_left = put_bits_left(pb)); pb++) { |
| 737 | if (bits_left) { |
| 738 | size -= bits_left; |
| 739 | put_bits(pb, bits_left, vlc >> size); |
| 740 | vlc = vlc & ((1 << size) - 1); |
| 741 | } |
| 742 | if (pb + 1 >= pb_end) { |
| 743 | bi->partial_bit_count = size; |
| 744 | bi->partial_bit_buffer = vlc; |
| 745 | return pb; |
| 746 | } |
| 747 | } |
| 748 | |
| 749 | /* Store VLC */ |
| 750 | put_bits(pb, size, vlc); |
| 751 | |
| 752 | if (bi->cur_ac >= 64) |
| 753 | break; |
| 754 | |
| 755 | /* Construct the next VLC */ |
| 756 | prev = bi->cur_ac; |
| 757 | bi->cur_ac = bi->next[prev]; |
| 758 | if (bi->cur_ac < 64){ |
| 759 | size = dv_rl2vlc(bi->cur_ac - prev - 1, bi->mb[bi->cur_ac], bi->sign[bi->cur_ac], &vlc); |
| 760 | } else { |
| 761 | size = 4; vlc = 6; /* End Of Block stamp */ |
| 762 | } |
| 763 | } |
| 764 | return pb; |
| 765 | } |
| 766 | |
| 767 | static av_always_inline int dv_guess_dct_mode(DVVideoContext *s, uint8_t *data, int linesize) { |
| 768 | if (s->avctx->flags & CODEC_FLAG_INTERLACED_DCT) { |
no test coverage detected