82 "in DV, input value is: %s\n",
name ?
name :
"unknown");
90 "Valid DV profiles are:\n",
98 memset(&fdsp,0,
sizeof(fdsp));
99 memset(&mecc,0,
sizeof(mecc));
100 memset(&pdsp,0,
sizeof(pdsp));
111 s->fdct[0] = fdsp.
fdct;
114 #if !CONFIG_HARDCODED_TABLES
143 *vlc = 0xfe00 | (
level << 1) | sign;
220 if (pb + 1 >= pb_end) {
264 131072, 257107, 257107, 242189, 252167, 242189, 235923, 237536,
265 237536, 235923, 229376, 231390, 223754, 231390, 229376, 222935,
266 224969, 217965, 217965, 224969, 222935, 200636, 218652, 211916,
267 212325, 211916, 218652, 200636, 188995, 196781, 205965, 206433,
268 206433, 205965, 196781, 188995, 185364, 185364, 200636, 200704,
269 200636, 185364, 185364, 174609, 180568, 195068, 195068, 180568,
270 174609, 170091, 175557, 189591, 175557, 170091, 165371, 170627,
271 170627, 165371, 160727, 153560, 160727, 144651, 144651, 136258,
274 131072, 262144, 257107, 257107, 242189, 242189, 242189, 242189,
275 237536, 237536, 229376, 229376, 200636, 200636, 224973, 224973,
276 223754, 223754, 235923, 235923, 229376, 229376, 217965, 217965,
277 211916, 211916, 196781, 196781, 185364, 185364, 206433, 206433,
278 211916, 211916, 222935, 222935, 200636, 200636, 205964, 205964,
279 200704, 200704, 180568, 180568, 175557, 175557, 195068, 195068,
280 185364, 185364, 188995, 188995, 174606, 174606, 175557, 175557,
281 170627, 170627, 153560, 153560, 165371, 165371, 144651, 144651,
286 #define DV100_SACRIFICE_QUALITY_FOR_SPEED 1
287 #define DV100_ENABLE_FINER 1
290 #define DV100_MAKE_QLEVEL(qno,cno) ((qno<<2) | (cno))
291 #define DV100_QLEVEL_QNO(qlevel) (qlevel>>2)
292 #define DV100_QLEVEL_CNO(qlevel) (qlevel&0x3)
294 #define DV100_NUM_QLEVELS 31
343 #if DV100_SACRIFICE_QUALITY_FOR_SPEED
352 65536, 65536, 32768, 21845, 16384, 13107, 10923, 9362, 8192, 4096, 3641, 3277, 2979, 2731, 2341, 1260,
358 { 8192, 65536, 65536, 61681, 61681, 61681, 58254, 58254,
359 58254, 58254, 58254, 58254, 55188, 58254, 58254, 55188,
360 55188, 55188, 55188, 55188, 55188, 24966, 27594, 26214,
361 26214, 26214, 27594, 24966, 23831, 24385, 25575, 25575,
362 25575, 25575, 24385, 23831, 23302, 23302, 24966, 24966,
363 24966, 23302, 23302, 21845, 22795, 24385, 24385, 22795,
364 21845, 21400, 21845, 23831, 21845, 21400, 10382, 10700,
365 10700, 10382, 10082, 9620, 10082, 9039, 9039, 8525, },
366 { 8192, 65536, 65536, 61681, 61681, 61681, 41943, 41943,
367 41943, 41943, 40330, 41943, 40330, 41943, 40330, 40330,
368 40330, 38836, 38836, 40330, 40330, 24966, 27594, 26214,
369 26214, 26214, 27594, 24966, 23831, 24385, 25575, 25575,
370 25575, 25575, 24385, 23831, 11523, 11523, 12483, 12483,
371 12483, 11523, 11523, 10923, 11275, 12193, 12193, 11275,
372 10923, 5323, 5490, 5924, 5490, 5323, 5165, 5323,
373 5323, 5165, 5017, 4788, 5017, 4520, 4520, 4263, }
377 { 8192, 65536, 65536, 61681, 61681, 61681, 58254, 58254,
378 58254, 58254, 58254, 58254, 55188, 58254, 58254, 55188,
379 55188, 55188, 55188, 55188, 55188, 24966, 27594, 26214,
380 26214, 26214, 27594, 24966, 23831, 24385, 25575, 25575,
381 25575, 25575, 24385, 23831, 15420, 15420, 16644, 16644,
382 16644, 15420, 15420, 10923, 11398, 12193, 12193, 11398,
383 10923, 10700, 10923, 11916, 10923, 10700, 5191, 5350,
384 5350, 5191, 5041, 4810, 5041, 4520, 4520, 4263, },
385 { 8192, 43691, 43691, 40330, 40330, 40330, 29127, 29127,
386 29127, 29127, 29127, 29127, 27594, 29127, 29127, 27594,
387 27594, 27594, 27594, 27594, 27594, 12483, 13797, 13107,
388 13107, 13107, 13797, 12483, 11916, 12193, 12788, 12788,
389 12788, 12788, 12193, 11916, 5761, 5761, 6242, 6242,
390 6242, 5761, 5761, 5461, 5638, 5461, 6096, 5638,
391 5461, 2661, 2745, 2962, 2745, 2661, 2583, 2661,
392 2661, 2583, 2509, 2394, 2509, 2260, 2260, 2131, }
397 const uint8_t *zigzag_scan,
412 static const int classes[] = { 12, 24, 36, 0xffff };
414 static const int classes[] = { -1, -1, 255, 0xffff };
416 int max = classes[0];
418 const unsigned deadzone =
s->quant_deadzone;
419 const unsigned threshold = 2 * deadzone;
423 for (area = 0; area < 4; area++) {
424 bi->
prev[area] = prev;
429 if (
level + deadzone > threshold) {
457 for (area = 0; area < 4; area++) {
458 bi->
prev[area] = prev;
481 const uint8_t *zigzag_scan,
492 for (
i = 0;
i < 64;
i += 2) {
496 level0 =
blk[zigzag_scan[
i+0]];
497 level1 =
blk[zigzag_scan[
i+1]];
500 bi->
sign[
i+0] = (level0>>31)&1;
501 bi->
sign[
i+1] = (level1>>31)&1;
504 level0 =
FFABS(level0);
505 level1 =
FFABS(level1);
508 level0 = (level0*
weight[
i+0] + 4096 + (1<<17)) >> 18;
509 level1 = (level1*
weight[
i+1] + 4096 + (1<<17)) >> 18;
512 bi->
save[
i+0] = level0;
513 bi->
save[
i+1] = level1;
558 memset(
blk, 0, 64*
sizeof(*
blk));
564 if (
s->sys->height == 1080) {
607 if (
b->area_q[0] == qno &&
b->cno == cno)
608 return b->bit_size[0];
621 for (k = 1; k < 64; k++) {
635 return b->bit_size[0];
649 for (
i = 0;
i < 5;
i++) {
651 for (j = 0; j < 8; j++) {
652 if (blks[8*
i+j].min_qlevel > min_qlevel[
i])
658 for (
i = 0;
i < 5;
i++) {
660 if (qlevels[
i] < min_qlevel[
i])
661 qlevels[
i] = min_qlevel[
i];
665 for (j = 0; j < 8; j++) {
667 size[
i] += size_cache[8*
i+j][qlevels[
i]];
673 int largest =
size[0] % 5;
674 int qlevels_done = 0;
678 for (
i = 0;
i < 5;
i++) {
679 if (qlevels[
i] < qlevels[largest])
685 largest = (largest+1) % 5;
699 for (j = 0; j < 8; j++,
b++) {
701 if(size_cache[8*
i+j][qlevels[
i]] == 0) {
706 size[
i] += size_cache[8*
i+j][qlevels[
i]];
715 int largest =
size[0] % 5;
717 while (qlevels[0] > min_qlevel[0] ||
718 qlevels[1] > min_qlevel[1] ||
719 qlevels[2] > min_qlevel[2] ||
720 qlevels[3] > min_qlevel[3] ||
721 qlevels[4] > min_qlevel[4]) {
724 for (
i = 0;
i < 5;
i++) {
725 if (qlevels[
i] > min_qlevel[
i] && qlevels[
i] > qlevels[largest])
732 largest = (largest+1) % 5;
734 if (qlevels[
i] <= min_qlevel[
i]) {
739 save_qlevel = qlevels[
i];
741 if (qlevels[
i] < min_qlevel[
i])
742 qlevels[
i] = min_qlevel[
i];
750 for (j = 0; j < 8; j++,
b++) {
752 if(size_cache[8*
i+j][qlevels[
i]] == 0) {
755 size[
i] += size_cache[8*
i+j][qlevels[
i]];
761 qlevels[
i] = save_qlevel;
769 for (
i = 0;
i < 5;
i++) {
773 for (j = 0; j < 8; j++,
b++) {
783 int i, j, k,
a, prev,
a2;
793 for (
i = 0;
i < 5;
i++) {
799 for (j = 0; j < 6; j++,
b++) {
800 for (
a = 0;
a < 4;
a++) {
822 b->next[prev] =
b->next[k];
825 b->prev[
a + 1] = prev;
833 }
while (qnos[0] | qnos[1] | qnos[2] | qnos[3] | qnos[4]);
838 for (j = 0; j < 6 * 5; j++,
b++) {
840 for (k =
b->next[prev]; k < 64; k = b->next[k]) {
841 if (
b->mb[k] <
a &&
b->mb[k] > -
a) {
842 b->next[prev] =
b->next[k];
859 for (mb_index = 0; mb_index < 5; mb_index++) {
860 data = dif + mb_index*80 + 4;
877 int mb_x, mb_y, c_offset;
878 ptrdiff_t linesize, y_stride;
879 const uint8_t *y_ptr;
888 int *qnosp = &qnos[0];
891 enc_blk = &enc_blks[0];
892 for (mb_index = 0; mb_index < 5; mb_index++) {
897 y_ptr =
s->frame->data[0] + (mb_y *
s->frame->linesize[0] + mb_x) * 8;
898 linesize =
s->frame->linesize[0];
900 if (
s->sys->height == 1080 && mb_y < 134)
904 for (
i = 1;
i < 8;
i++)
910 (
s->sys->height >= 720 && mb_y != 134)) {
911 y_stride =
s->frame->linesize[0] * (1 << (3*!enc_blk->
dct_mode));
915 y_ptr =
s->frame->data[0] +
916 (mb_y *
s->frame->linesize[0] + mb_x) * 8;
917 linesize =
s->frame->linesize[0];
919 if (
s->sys->video_stype == 4) {
937 for (j = 2; j; j--) {
938 const uint8_t *c_ptr =
s->frame->data[j] + c_offset;
939 linesize =
s->frame->linesize[j];
940 y_stride = (mb_y == 134) ? 8 : (
s->frame->linesize[j] * (1 << (3*!enc_blk->
dct_mode)));
942 uint8_t *
b = scratch;
943 for (
i = 0;
i < 8;
i++) {
944 const uint8_t *
d = c_ptr + linesize * 8;
961 if (
s->sys->bpm == 8)
975 for (j = 0; j < 5 *
s->sys->bpm;) {
982 for (
i = 0;
i <
s->sys->bpm;
i++, j++) {
983 int sz =
s->sys->block_sizes[
i] >> 3;
986 put_sbits(&pbs[j], 9, ((enc_blks[j].
mb[0] >> 3) - 1024 + 2) >> 2);
988 put_bits(&pbs[j], 2, enc_blks[j].cno);
996 for (
i = 0;
i <
s->sys->bpm;
i++)
997 if (enc_blks[start_mb +
i].partial_bit_count)
999 &pbs[start_mb +
s->sys->bpm]);
1004 for (j = 0; j < 5 *
s->sys->bpm; j++) {
1005 if (enc_blks[j].partial_bit_count)
1007 if (enc_blks[j].partial_bit_count)
1011 for (j = 0; j < 5 *
s->sys->bpm; j++) {
1047 if (
c->avctx->height >= 720)
1053 (
int)(
av_q2d(
c->avctx->sample_aspect_ratio) *
1054 c->avctx->width /
c->avctx->height * 10) >= 17)
1058 buf[0] = (uint8_t) pack_id;
1081 (
c->sys->dsf << 5) |
1082 c->sys->video_stype;
1107 uint8_t seq_num, uint8_t dif_num,
1110 int fsc = chan_num & 1;
1111 int fsp = 1 - (chan_num >> 1);
1113 buf[0] = (uint8_t) t;
1114 buf[1] = (seq_num << 4) |
1124 if (syb_num == 0 || syb_num == 6) {
1125 buf[0] = (fr << 7) |
1128 }
else if (syb_num == 11) {
1129 buf[0] = (fr << 7) |
1132 buf[0] = (fr << 7) |
1146 int chan_offset = 2*(
c->sys->height == 720 &&
c->avctx->frame_num & 1);
1148 for (chan = 0; chan <
c->sys->n_difchan; chan++) {
1149 for (
i = 0;
i <
c->sys->difseg_size;
i++) {
1150 memset(buf, 0xff, 80 * 6);
1159 for (j = 0; j < 2; j++) {
1161 for (k = 0; k < 6; k++)
1167 for (j = 0; j < 3; j++) {
1178 for (j = 0; j < 135; j++) {
1180 memset(buf, 0xff, 80);
1205 c->pix_fmt =
s->sys->pix_fmt;
1221 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
1222 #define OFFSET(x) offsetof(DVEncContext, x)
1224 {
"quant_deadzone",
"Quantizer dead zone",
OFFSET(quant_deadzone),
AV_OPT_TYPE_INT, { .i64 = 7 }, 0, 1024,
VE },
1236 .
p.
name =
"dvvideo",