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++) {
216 *factor1++ = (
dv100_qstep[s] << (c + 9)) * iweight1[i];
217 *factor2++ = (
dv100_qstep[s] << (c + 9)) * iweight2[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++){
334 "Valid DV profiles are:\n",
339 if (avctx->
height > 576) {
372 *vlc = 0xfe00 | (level << 1) | sign;
376 *vlc |= ((run < 16) ?
dv_vlc_map[run-1][0].vlc :
377 (0x1f80 | (run - 1))) <<
size;
378 size += (run < 16) ?
dv_vlc_map[run-1][0].size : 13;
395 size += (run < 16) ?
dv_vlc_map[run-1][0].size : 13;
442 put_bits(pb, bits_left, vlc >> size);
443 vlc = vlc & ((1 <<
size) - 1);
445 if (pb + 1 >= pb_end) {
485 131072, 257107, 257107, 242189, 252167, 242189, 235923, 237536,
486 237536, 235923, 229376, 231390, 223754, 231390, 229376, 222935,
487 224969, 217965, 217965, 224969, 222935, 200636, 218652, 211916,
488 212325, 211916, 218652, 200636, 188995, 196781, 205965, 206433,
489 206433, 205965, 196781, 188995, 185364, 185364, 200636, 200704,
490 200636, 185364, 185364, 174609, 180568, 195068, 195068, 180568,
491 174609, 170091, 175557, 189591, 175557, 170091, 165371, 170627,
492 170627, 165371, 160727, 153560, 160727, 144651, 144651, 136258,
495 131072, 242189, 257107, 237536, 229376, 200636, 242189, 223754,
496 224969, 196781, 262144, 242189, 229376, 200636, 257107, 237536,
497 211916, 185364, 235923, 217965, 229376, 211916, 206433, 180568,
498 242189, 223754, 224969, 196781, 211916, 185364, 235923, 217965,
499 200704, 175557, 222935, 205965, 200636, 185364, 195068, 170627,
500 229376, 211916, 206433, 180568, 200704, 175557, 222935, 205965,
501 175557, 153560, 188995, 174609, 165371, 144651, 200636, 185364,
502 195068, 170627, 175557, 153560, 188995, 174609, 165371, 144651,
522 static const int classes[] = {12, 24, 36, 0xffff};
524 static const int classes[] = {-1, -1, 255, 0xffff};
526 int max = classes[0];
542 memset(blk, 0, 64*
sizeof(*blk));
550 for (area = 0; area < 4; area++) {
551 bi->
prev[area] = prev;
554 int level = blk[zigzag_scan[i]];
556 if (level + 15 > 30
U) {
557 bi->
sign[i] = (level >> 31) & 1;
561 level = (
FFABS(level) * weight[i] + (1 << (dv_weight_bits+3))) >> (dv_weight_bits+4);
572 for (bi->
cno = 0; max > classes[bi->
cno]; bi->
cno++);
580 for (area = 0; area < 4; area++) {
581 bi->
prev[area] = prev;
602 int i, j, k,
a, prev,
a2;
605 size[0] = size[1] = size[2] = size[3] = size[4] = 1 << 24;
608 for (i = 0; i < 5; i++) {
614 for (j = 0; j < 6; j++, b++) {
615 for (a = 0; a < 4; a++) {
648 }
while (qnos[0]|qnos[1]|qnos[2]|qnos[3]|qnos[4]);
654 for (j = 0; j < 6 *5; j++, b++) {
656 for (k = b->
next[prev]; k < 64; k = b->next[k]) {
657 if (b->
mb[k] < a && b->
mb[k] > -a){
673 int mb_x, mb_y, c_offset, linesize, y_stride;
682 int qnos[5] = {15, 15, 15, 15, 15};
683 int* qnosp = &qnos[0];
686 enc_blk = &enc_blks[0];
687 for (mb_index = 0; mb_index < 5; mb_index++) {
693 (s->
sys->
height >= 720 && mb_y != 134)) {
719 for (j = 2; j; j--) {
726 for (i = 0; i < 8; i++) {
727 d = c_ptr + (linesize << 3);
728 b[0] = c_ptr[0]; b[1] = c_ptr[1]; b[2] = c_ptr[2]; b[3] = c_ptr[3];
729 b[4] = d[0]; b[5] = d[1]; b[6] = d[2]; b[7] = d[3];
748 for (j=0; j<5*s->
sys->
bpm;) {
755 for (i=0; i<s->
sys->
bpm; i++, j++) {
759 put_sbits(&pbs[j], 9, ((enc_blks[j].
mb[0] >> 3) - 1024 + 2) >> 2);
760 put_bits(&pbs[j], 1, enc_blks[j].dct_mode);
761 put_bits(&pbs[j], 2, enc_blks[j].cno);
769 for (i=0; i<s->
sys->
bpm; i++) {
770 if (enc_blks[start_mb+i].partial_bit_count)
777 for (j=0; j<5*s->
sys->
bpm; j++) {
778 if (enc_blks[j].partial_bit_count)
780 if (enc_blks[j].partial_bit_count)
784 for (j=0; j<5*s->
sys->
bpm; j++) {
793 memset(pbs[j].buf + pos, 0xff, size - pos);
867 buf[1] = buf[2] = buf[3] = buf[4] = 0xff;
872 #if CONFIG_DVVIDEO_ENCODER
878 buf[1] = (seq_num << 4) |
888 if (syb_num == 0 || syb_num == 6) {
893 else if (syb_num == 11) {
914 memset(buf, 0xff, 80 * 6);
922 for (j = 0; j < 2; j++) {
924 for (k = 0; k < 6; k++)
925 buf += dv_write_ssyb_id(k, (i < c->sys->difseg_size/2), buf) + 5;
930 for (j = 0; j < 3; j++) {
941 for (j = 0; j < 135; j++) {
943 memset(buf, 0xff, 80);
981 dv_format_frame(s, pkt->
data);
995 .encode2 = dvvideo_encode_frame,
1002 #endif // CONFIG_DVVIDEO_ENCODER