MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / dv_encode_ac

Function dv_encode_ac

libavcodec/dv.c:724–765  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

722} EncBlockInfo;
723
724static 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
767static av_always_inline int dv_guess_dct_mode(DVVideoContext *s, uint8_t *data, int linesize) {
768 if (s->avctx->flags & CODEC_FLAG_INTERLACED_DCT) {

Callers 1

dv_encode_video_segmentFunction · 0.85

Calls 2

put_bits_leftFunction · 0.85
dv_rl2vlcFunction · 0.85

Tested by

no test coverage detected