57 static const uint8_t off[] = { 2, 6, 8, 0, 4 };
58 static const uint8_t shuf1[] = { 36, 18, 54, 0, 72 };
59 static const uint8_t shuf2[] = { 24, 12, 36, 0, 48 };
60 static const uint8_t shuf3[] = { 18, 9, 27, 0, 36 };
62 static const uint8_t l_start[] = {0, 4, 9, 13, 18, 22, 27, 31, 36, 40};
63 static const uint8_t l_start_shuffled[] = { 9, 4, 13, 0, 18 };
65 static const uint8_t serpent1[] = {0, 1, 2, 2, 1, 0,
70 static const uint8_t serpent2[] = {0, 1, 2, 3, 4, 5, 5, 4, 3, 2, 1, 0,
71 0, 1, 2, 3, 4, 5, 5, 4, 3, 2, 1, 0,
74 static const uint8_t remap[][2] = {{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0},
75 { 0, 0}, { 0, 1}, { 0, 2}, { 0, 3}, {10, 0},
76 {10, 1}, {10, 2}, {10, 3}, {20, 0}, {20, 1},
77 {20, 2}, {20, 3}, {30, 0}, {30, 1}, {30, 2},
78 {30, 3}, {40, 0}, {40, 1}, {40, 2}, {40, 3},
79 {50, 0}, {50, 1}, {50, 2}, {50, 3}, {60, 0},
80 {60, 1}, {60, 2}, {60, 3}, {70, 0}, {70, 1},
81 {70, 2}, {70, 3}, { 0,64}, { 0,65}, { 0,66},
82 {10,64}, {10,65}, {10,66}, {20,64}, {20,65},
83 {20,66}, {30,64}, {30,65}, {30,66}, {40,64},
84 {40,65}, {40,66}, {50,64}, {50,65}, {50,66},
85 {60,64}, {60,65}, {60,66}, {70,64}, {70,65},
86 {70,66}, { 0,67}, {20,67}, {40,67}, {60,67}};
94 blk = (chan*11+seq)*27+slot;
96 if (chan == 0 && seq == 11) {
105 i = (4*chan + blk + off[
m])%11;
108 x = shuf1[
m] + (chan&1)*9 + k%9;
109 y = (i*3+k/9)*2 + (chan>>1) + 1;
111 tbl[
m] = (x<<1)|(y<<9);
114 blk = (chan*10+seq)*27+slot;
116 i = (4*chan + (seq/5) + 2*blk + off[m])%10;
119 x = shuf1[
m]+(chan&1)*9 + k%9;
120 y = (i*3+k/9)*2 + (chan>>1) + 4;
123 x = remap[
y][0]+((x-80)<<(y>59));
126 tbl[
m] = (x<<1)|(y<<9);
129 blk = (chan*10+seq)*27+slot;
131 i = (4*chan + (seq/5) + 2*blk + off[m])%10;
132 k = (blk/5)%27 + (i&1)*3;
134 x = shuf2[
m] + k%6 + 6*(chan&1);
135 y = l_start[i] + k/6 + 45*(chan>>1);
136 tbl[
m] = (x<<1)|(y<<9);
141 x = shuf3[
m] + slot/3;
144 tbl[
m] = (x<<1)|(y<<8);
147 x = shuf3[
m] + slot/3;
150 tbl[
m] = (x<<1)|(y<<9);
154 k = slot + ((m==1||m==2)?3:0);
156 x = l_start_shuffled[
m] + k/6;
157 y = serpent2[k] + i*6;
160 tbl[
m] = (x<<2)|(y<<8);
173 2, 3, 4, 5, 6, 7, 8, 16, 18, 20, 22, 24, 28, 52
181 uint32_t *factor1, *factor2;
182 const int *iweight1, *iweight2;
189 for (j=0; j<27; j++) {
213 for (c = 0; c < 4; c++) {
214 for (s = 0; s < 16; s++) {
215 for (i = 0; i < 64; i++) {
224 for (s = 0; s < 22; s++) {
225 for (i = c = 0; c < 4; c++) {
228 *factor2++ = (*factor1++) << 1;
256 for (i = 0, j = 0; i <
NB_DV_VLC; i++, j++) {
263 new_dv_vlc_bits[j] <<= 1;
277 new_dv_vlc_len, 1, 1, new_dv_vlc_bits, 2, 2, 0);
281 int code = dv_vlc.
table[i][0];
289 run = new_dv_vlc_run [code] + 1;
290 level = new_dv_vlc_level[code];
292 ff_dv_rl_vlc[i].
len =
len;
294 ff_dv_rl_vlc[i].
run =
run;
300 memset(&dsp,0,
sizeof(dsp));
309 for (i = 0; i < 64; i++)
316 for (i = 0; i < 64; i++){
335 "Valid DV profiles are:\n",
340 if (avctx->
height > 576) {
373 *vlc = 0xfe00 | (level << 1) | sign;
377 *vlc |= ((run < 16) ?
dv_vlc_map[run-1][0].vlc :
378 (0x1f80 | (run - 1))) <<
size;
379 size += (run < 16) ?
dv_vlc_map[run-1][0].size : 13;
396 size += (run < 16) ?
dv_vlc_map[run-1][0].size : 13;
443 put_bits(pb, bits_left, vlc >> size);
444 vlc = vlc & ((1 <<
size) - 1);
446 if (pb + 1 >= pb_end) {
486 131072, 257107, 257107, 242189, 252167, 242189, 235923, 237536,
487 237536, 235923, 229376, 231390, 223754, 231390, 229376, 222935,
488 224969, 217965, 217965, 224969, 222935, 200636, 218652, 211916,
489 212325, 211916, 218652, 200636, 188995, 196781, 205965, 206433,
490 206433, 205965, 196781, 188995, 185364, 185364, 200636, 200704,
491 200636, 185364, 185364, 174609, 180568, 195068, 195068, 180568,
492 174609, 170091, 175557, 189591, 175557, 170091, 165371, 170627,
493 170627, 165371, 160727, 153560, 160727, 144651, 144651, 136258,
496 131072, 242189, 257107, 237536, 229376, 200636, 242189, 223754,
497 224969, 196781, 262144, 242189, 229376, 200636, 257107, 237536,
498 211916, 185364, 235923, 217965, 229376, 211916, 206433, 180568,
499 242189, 223754, 224969, 196781, 211916, 185364, 235923, 217965,
500 200704, 175557, 222935, 205965, 200636, 185364, 195068, 170627,
501 229376, 211916, 206433, 180568, 200704, 175557, 222935, 205965,
502 175557, 153560, 188995, 174609, 165371, 144651, 200636, 185364,
503 195068, 170627, 175557, 153560, 188995, 174609, 165371, 144651,
523 static const int classes[] = {12, 24, 36, 0xffff};
525 static const int classes[] = {-1, -1, 255, 0xffff};
527 int max = classes[0];
543 memset(blk, 0, 64*
sizeof(*blk));
551 for (area = 0; area < 4; area++) {
552 bi->
prev[area] = prev;
555 int level = blk[zigzag_scan[i]];
557 if (level + 15 > 30
U) {
558 bi->
sign[i] = (level >> 31) & 1;
562 level = (
FFABS(level) * weight[i] + (1 << (dv_weight_bits+3))) >> (dv_weight_bits+4);
573 for (bi->
cno = 0; max > classes[bi->
cno]; bi->
cno++);
581 for (area = 0; area < 4; area++) {
582 bi->
prev[area] = prev;
603 int i, j, k,
a, prev,
a2;
606 size[0] = size[1] = size[2] = size[3] = size[4] = 1 << 24;
609 for (i = 0; i < 5; i++) {
615 for (j = 0; j < 6; j++, b++) {
616 for (a = 0; a < 4; a++) {
649 }
while (qnos[0]|qnos[1]|qnos[2]|qnos[3]|qnos[4]);
655 for (j = 0; j < 6 *5; j++, b++) {
657 for (k = b->
next[prev]; k < 64; k = b->next[k]) {
658 if (b->
mb[k] < a && b->
mb[k] > -a){
674 int mb_x, mb_y, c_offset, linesize, y_stride;
683 int qnos[5] = {15, 15, 15, 15, 15};
684 int* qnosp = &qnos[0];
687 enc_blk = &enc_blks[0];
688 for (mb_index = 0; mb_index < 5; mb_index++) {
694 (s->
sys->
height >= 720 && mb_y != 134)) {
720 for (j = 2; j; j--) {
727 for (i = 0; i < 8; i++) {
728 d = c_ptr + (linesize << 3);
729 b[0] = c_ptr[0]; b[1] = c_ptr[1]; b[2] = c_ptr[2]; b[3] = c_ptr[3];
730 b[4] = d[0]; b[5] = d[1]; b[6] = d[2]; b[7] = d[3];
749 for (j=0; j<5*s->
sys->
bpm;) {
756 for (i=0; i<s->
sys->
bpm; i++, j++) {
760 put_sbits(&pbs[j], 9, ((enc_blks[j].
mb[0] >> 3) - 1024 + 2) >> 2);
761 put_bits(&pbs[j], 1, enc_blks[j].dct_mode);
762 put_bits(&pbs[j], 2, enc_blks[j].cno);
770 for (i=0; i<s->
sys->
bpm; i++) {
771 if (enc_blks[start_mb+i].partial_bit_count)
778 for (j=0; j<5*s->
sys->
bpm; j++) {
779 if (enc_blks[j].partial_bit_count)
781 if (enc_blks[j].partial_bit_count)
785 for (j=0; j<5*s->
sys->
bpm; j++) {
794 memset(pbs[j].
buf + pos, 0xff, size - pos);
868 buf[1] = buf[2] = buf[3] = buf[4] = 0xff;
873 #if CONFIG_DVVIDEO_ENCODER
879 buf[1] = (seq_num << 4) |
889 if (syb_num == 0 || syb_num == 6) {
894 else if (syb_num == 11) {
915 memset(buf, 0xff, 80 * 6);
923 for (j = 0; j < 2; j++) {
925 for (k = 0; k < 6; k++)
926 buf += dv_write_ssyb_id(k, (i < c->sys->difseg_size/2), buf) + 5;
931 for (j = 0; j < 3; j++) {
942 for (j = 0; j < 135; j++) {
944 memset(buf, 0xff, 80);
982 dv_format_frame(s, pkt->
data);
996 .encode2 = dvvideo_encode_frame,
1003 #endif // CONFIG_DVVIDEO_ENCODER