42 #include "libavutil/pixdesc.h"
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) {
367 *vlc = 0xfe00 | (level << 1) | sign;
371 *vlc |= ((run < 16) ?
dv_vlc_map[run-1][0].vlc :
372 (0x1f80 | (run - 1))) <<
size;
373 size += (run < 16) ?
dv_vlc_map[run-1][0].size : 13;
390 size += (run < 16) ?
dv_vlc_map[run-1][0].size : 13;
437 put_bits(pb, bits_left, vlc >> size);
438 vlc = vlc & ((1 <<
size) - 1);
440 if (pb + 1 >= pb_end) {
480 131072, 257107, 257107, 242189, 252167, 242189, 235923, 237536,
481 237536, 235923, 229376, 231390, 223754, 231390, 229376, 222935,
482 224969, 217965, 217965, 224969, 222935, 200636, 218652, 211916,
483 212325, 211916, 218652, 200636, 188995, 196781, 205965, 206433,
484 206433, 205965, 196781, 188995, 185364, 185364, 200636, 200704,
485 200636, 185364, 185364, 174609, 180568, 195068, 195068, 180568,
486 174609, 170091, 175557, 189591, 175557, 170091, 165371, 170627,
487 170627, 165371, 160727, 153560, 160727, 144651, 144651, 136258,
490 131072, 242189, 257107, 237536, 229376, 200636, 242189, 223754,
491 224969, 196781, 262144, 242189, 229376, 200636, 257107, 237536,
492 211916, 185364, 235923, 217965, 229376, 211916, 206433, 180568,
493 242189, 223754, 224969, 196781, 211916, 185364, 235923, 217965,
494 200704, 175557, 222935, 205965, 200636, 185364, 195068, 170627,
495 229376, 211916, 206433, 180568, 200704, 175557, 222935, 205965,
496 175557, 153560, 188995, 174609, 165371, 144651, 200636, 185364,
497 195068, 170627, 175557, 153560, 188995, 174609, 165371, 144651,
517 static const int classes[] = {12, 24, 36, 0xffff};
519 static const int classes[] = {-1, -1, 255, 0xffff};
521 int max = classes[0];
537 memset(blk, 0, 64*
sizeof(*blk));
545 for (area = 0; area < 4; area++) {
546 bi->
prev[area] = prev;
549 int level = blk[zigzag_scan[i]];
551 if (level + 15 > 30
U) {
552 bi->
sign[i] = (level >> 31) & 1;
556 level = (
FFABS(level) * weight[i] + (1 << (dv_weight_bits+3))) >> (dv_weight_bits+4);
567 for (bi->
cno = 0; max > classes[bi->
cno]; bi->
cno++);
575 for (area = 0; area < 4; area++) {
576 bi->
prev[area] = prev;
597 int i, j, k,
a, prev,
a2;
600 size[0] = size[1] = size[2] = size[3] = size[4] = 1 << 24;
603 for (i = 0; i < 5; i++) {
609 for (j = 0; j < 6; j++, b++) {
610 for (a = 0; a < 4; a++) {
643 }
while (qnos[0]|qnos[1]|qnos[2]|qnos[3]|qnos[4]);
649 for (j = 0; j < 6 *5; j++, b++) {
651 for (k = b->
next[prev]; k < 64; k = b->next[k]) {
652 if (b->
mb[k] < a && b->
mb[k] > -a){
668 int mb_x, mb_y, c_offset, linesize, y_stride;
677 int qnos[5] = {15, 15, 15, 15, 15};
678 int* qnosp = &qnos[0];
681 enc_blk = &enc_blks[0];
682 for (mb_index = 0; mb_index < 5; mb_index++) {
688 (s->
sys->
height >= 720 && mb_y != 134)) {
714 for (j = 2; j; j--) {
721 for (i = 0; i < 8; i++) {
722 d = c_ptr + (linesize << 3);
723 b[0] = c_ptr[0]; b[1] = c_ptr[1]; b[2] = c_ptr[2]; b[3] = c_ptr[3];
724 b[4] = d[0]; b[5] = d[1]; b[6] = d[2]; b[7] = d[3];
743 for (j=0; j<5*s->
sys->
bpm;) {
750 for (i=0; i<s->
sys->
bpm; i++, j++) {
754 put_sbits(&pbs[j], 9, ((enc_blks[j].
mb[0] >> 3) - 1024 + 2) >> 2);
755 put_bits(&pbs[j], 1, enc_blks[j].dct_mode);
756 put_bits(&pbs[j], 2, enc_blks[j].cno);
764 for (i=0; i<s->
sys->
bpm; i++) {
765 if (enc_blks[start_mb+i].partial_bit_count)
772 for (j=0; j<5*s->
sys->
bpm; j++) {
773 if (enc_blks[j].partial_bit_count)
775 if (enc_blks[j].partial_bit_count)
779 for (j=0; j<5*s->
sys->
bpm; j++) {
788 memset(pbs[j].buf + pos, 0xff, size - pos);
862 buf[1] = buf[2] = buf[3] = buf[4] = 0xff;
867 #if CONFIG_DVVIDEO_ENCODER
873 buf[1] = (seq_num << 4) |
883 if (syb_num == 0 || syb_num == 6) {
888 else if (syb_num == 11) {
909 memset(buf, 0xff, 80 * 6);
917 for (j = 0; j < 2; j++) {
919 for (k = 0; k < 6; k++)
920 buf += dv_write_ssyb_id(k, (i < c->sys->difseg_size/2), buf) + 5;
925 for (j = 0; j < 3; j++) {
936 for (j = 0; j < 135; j++) {
938 memset(buf, 0xff, 80);
976 dv_format_frame(s, pkt->
data);
990 .encode2 = dvvideo_encode_frame,
997 #endif // CONFIG_DVVIDEO_ENCODER