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++){
333 "Valid DV profiles are:\n",
338 if (avctx->
height > 576) {
370 *vlc = 0xfe00 | (level << 1) | sign;
374 *vlc |= ((run < 16) ?
dv_vlc_map[run-1][0].vlc :
375 (0x1f80 | (run - 1))) <<
size;
376 size += (run < 16) ?
dv_vlc_map[run-1][0].size : 13;
393 size += (run < 16) ?
dv_vlc_map[run-1][0].size : 13;
440 put_bits(pb, bits_left, vlc >> size);
441 vlc = vlc & ((1 <<
size) - 1);
443 if (pb + 1 >= pb_end) {
470 int ps = s->
ildct_cmp(NULL, data, NULL, linesize, 8) - 400;
472 int is = s->
ildct_cmp(NULL, data , NULL, linesize<<1, 4) +
473 s->
ildct_cmp(NULL, data + linesize, NULL, linesize<<1, 4);
483 131072, 257107, 257107, 242189, 252167, 242189, 235923, 237536,
484 237536, 235923, 229376, 231390, 223754, 231390, 229376, 222935,
485 224969, 217965, 217965, 224969, 222935, 200636, 218652, 211916,
486 212325, 211916, 218652, 200636, 188995, 196781, 205965, 206433,
487 206433, 205965, 196781, 188995, 185364, 185364, 200636, 200704,
488 200636, 185364, 185364, 174609, 180568, 195068, 195068, 180568,
489 174609, 170091, 175557, 189591, 175557, 170091, 165371, 170627,
490 170627, 165371, 160727, 153560, 160727, 144651, 144651, 136258,
493 131072, 242189, 257107, 237536, 229376, 200636, 242189, 223754,
494 224969, 196781, 262144, 242189, 229376, 200636, 257107, 237536,
495 211916, 185364, 235923, 217965, 229376, 211916, 206433, 180568,
496 242189, 223754, 224969, 196781, 211916, 185364, 235923, 217965,
497 200704, 175557, 222935, 205965, 200636, 185364, 195068, 170627,
498 229376, 211916, 206433, 180568, 200704, 175557, 222935, 205965,
499 175557, 153560, 188995, 174609, 165371, 144651, 200636, 185364,
500 195068, 170627, 175557, 153560, 188995, 174609, 165371, 144651,
520 static const int classes[] = {12, 24, 36, 0xffff};
522 static const int classes[] = {-1, -1, 255, 0xffff};
524 int max = classes[0];
540 memset(blk, 0, 64*
sizeof(*blk));
548 for (area = 0; area < 4; area++) {
549 bi->
prev[area] = prev;
552 int level = blk[zigzag_scan[i]];
554 if (level + 15 > 30
U) {
555 bi->
sign[i] = (level >> 31) & 1;
559 level = (
FFABS(level) * weight[i] + (1 << (dv_weight_bits+3))) >> (dv_weight_bits+4);
570 for (bi->
cno = 0; max > classes[bi->
cno]; bi->
cno++);
578 for (area = 0; area < 4; area++) {
579 bi->
prev[area] = prev;
600 int i, j, k,
a, prev,
a2;
603 size[0] = size[1] = size[2] = size[3] = size[4] = 1 << 24;
606 for (i = 0; i < 5; i++) {
612 for (j = 0; j < 6; j++, b++) {
613 for (a = 0; a < 4; a++) {
646 }
while (qnos[0]|qnos[1]|qnos[2]|qnos[3]|qnos[4]);
652 for (j = 0; j < 6 *5; j++, b++) {
654 for (k = b->
next[prev]; k < 64; k = b->next[k]) {
655 if (b->
mb[k] < a && b->
mb[k] > -a){
671 int mb_x, mb_y, c_offset, linesize, y_stride;
680 int qnos[5] = {15, 15, 15, 15, 15};
681 int* qnosp = &qnos[0];
684 enc_blk = &enc_blks[0];
685 for (mb_index = 0; mb_index < 5; mb_index++) {
691 (s->
sys->
height >= 720 && mb_y != 134)) {
717 for (j = 2; j; j--) {
724 for (i = 0; i < 8; i++) {
725 d = c_ptr + (linesize << 3);
726 b[0] = c_ptr[0]; b[1] = c_ptr[1]; b[2] = c_ptr[2]; b[3] = c_ptr[3];
727 b[4] = d[0]; b[5] = d[1]; b[6] = d[2]; b[7] = d[3];
746 for (j=0; j<5*s->
sys->
bpm;) {
753 for (i=0; i<s->
sys->
bpm; i++, j++) {
757 put_sbits(&pbs[j], 9, ((enc_blks[j].
mb[0] >> 3) - 1024 + 2) >> 2);
758 put_bits(&pbs[j], 1, enc_blks[j].dct_mode);
759 put_bits(&pbs[j], 2, enc_blks[j].cno);
767 for (i=0; i<s->
sys->
bpm; i++) {
768 if (enc_blks[start_mb+i].partial_bit_count)
775 for (j=0; j<5*s->
sys->
bpm; j++) {
776 if (enc_blks[j].partial_bit_count)
778 if (enc_blks[j].partial_bit_count)
782 for (j=0; j<5*s->
sys->
bpm; j++) {
791 memset(pbs[j].
buf + pos, 0xff, size - pos);
865 buf[1] = buf[2] = buf[3] = buf[4] = 0xff;
870 #if CONFIG_DVVIDEO_ENCODER
876 buf[1] = (seq_num << 4) |
886 if (syb_num == 0 || syb_num == 6) {
891 else if (syb_num == 11) {
912 memset(buf, 0xff, 80 * 6);
920 for (j = 0; j < 2; j++) {
922 for (k = 0; k < 6; k++)
923 buf += dv_write_ssyb_id(k, (i < c->sys->difseg_size/2), buf) + 5;
928 for (j = 0; j < 3; j++) {
939 for (j = 0; j < 135; j++) {
941 memset(buf, 0xff, 80);
979 dv_format_frame(s, pkt->
data);
1000 .encode2 = dvvideo_encode_frame,
1001 .
close = dvvideo_encode_close,
1007 #endif // CONFIG_DVVIDEO_ENCODER