1 /*
2 * DV decoder
3 * Copyright (c) 2002 Fabrice Bellard
4 * Copyright (c) 2004 Roman Shaposhnik
5 *
6 * 50 Mbps (DVCPRO50) support
7 * Copyright (c) 2006 Daniel Maas <dmaas@maasdigital.com>
8 *
9 * 100 Mbps (DVCPRO HD) support
10 * Initial code by Daniel Maas <dmaas@maasdigital.com> (funded by BBC R&D)
11 * Final code by Roman Shaposhnik
12 *
13 * Many thanks to Dan Dennedy <dan@dennedy.org> for providing wealth
14 * of DV technical info.
15 *
16 * This file is part of FFmpeg.
17 *
18 * FFmpeg is free software; you can redistribute it and/or
19 * modify it under the terms of the GNU Lesser General Public
20 * License as published by the Free Software Foundation; either
21 * version 2.1 of the License, or (at your option) any later version.
22 *
23 * FFmpeg is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 * Lesser General Public License for more details.
27 *
28 * You should have received a copy of the GNU Lesser General Public
29 * License along with FFmpeg; if not, write to the Free Software
30 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
31 */
32
33 /**
34 * @file
35 * DV decoder
36 */
37
42
52
62
64
66 32768, 16705, 16705, 17734, 17032, 17734, 18205, 18081,
67 18081, 18205, 18725, 18562, 19195, 18562, 18725, 19266,
68 19091, 19705, 19705, 19091, 19266, 21407, 19643, 20267,
69 20228, 20267, 19643, 21407, 22725, 21826, 20853, 20806,
70 20806, 20853, 21826, 22725, 23170, 23170, 21407, 21400,
71 21407, 23170, 23170, 24598, 23786, 22018, 22018, 23786,
72 24598, 25251, 24465, 22654, 24465, 25251, 25972, 25172,
73 25172, 25972, 26722, 27969, 26722, 29692, 29692, 31521,
74 };
76 32768, 16384, 16705, 16705, 17734, 17734, 17734, 17734,
77 18081, 18081, 18725, 18725, 21407, 21407, 19091, 19091,
78 19195, 19195, 18205, 18205, 18725, 18725, 19705, 19705,
79 20267, 20267, 21826, 21826, 23170, 23170, 20806, 20806,
80 20267, 20267, 19266, 19266, 21407, 21407, 20853, 20853,
81 21400, 21400, 23786, 23786, 24465, 24465, 22018, 22018,
82 23170, 23170, 22725, 22725, 24598, 24598, 24465, 24465,
83 25172, 25172, 27969, 27969, 25972, 25972, 29692, 29692
84 };
85
86 /**
87 * The "inverse" DV100 weights are actually just the spec weights (zig-zagged).
88 */
90 128, 16, 16, 17, 17, 17, 18, 18,
91 18, 18, 18, 18, 19, 18, 18, 19,
92 19, 19, 19, 19, 19, 42, 38, 40,
93 40, 40, 38, 42, 44, 43, 41, 41,
94 41, 41, 43, 44, 45, 45, 42, 42,
95 42, 45, 45, 48, 46, 43, 43, 46,
96 48, 49, 48, 44, 48, 49, 101, 98,
97 98, 101, 104, 109, 104, 116, 116, 123,
98 };
100 128, 16, 16, 17, 17, 17, 25, 25,
101 25, 25, 26, 25, 26, 25, 26, 26,
102 26, 27, 27, 26, 26, 42, 38, 40,
103 40, 40, 38, 42, 44, 43, 41, 41,
104 41, 41, 43, 44, 91, 91, 84, 84,
105 84, 91, 91, 96, 93, 86, 86, 93,
106 96, 197, 191, 177, 191, 197, 203, 197,
107 197, 203, 209, 219, 209, 232, 232, 246,
108 };
110 128, 16, 16, 17, 17, 17, 18, 18,
111 18, 18, 18, 18, 19, 18, 18, 19,
112 19, 19, 19, 19, 19, 42, 38, 40,
113 40, 40, 38, 42, 44, 43, 41, 41,
114 41, 41, 43, 44, 68, 68, 63, 63,
115 63, 68, 68, 96, 92, 86, 86, 92,
116 96, 98, 96, 88, 96, 98, 202, 196,
117 196, 202, 208, 218, 208, 232, 232, 246,
118 };
120 128, 24, 24, 26, 26, 26, 36, 36,
121 36, 36, 36, 36, 38, 36, 36, 38,
122 38, 38, 38, 38, 38, 84, 76, 80,
123 80, 80, 76, 84, 88, 86, 82, 82,
124 82, 82, 86, 88, 182, 182, 168, 168,
125 168, 182, 182, 192, 186, 192, 172, 186,
126 192, 394, 382, 354, 382, 394, 406, 394,
127 394, 406, 418, 438, 418, 464, 464, 492,
128 };
129
131 {
135
137 /* quantization quanta by QNO for DV100 */
139 1, /* QNO = 0 and 1 both have no quantization */
140 1,
141 2, 3, 4, 5, 6, 7, 8, 16, 18, 20, 22, 24, 28, 52
142 };
143 const uint16_t *iweight1, *iweight2;
144
148 } else {
151 }
152 for (c = 0; c < 4; c++) {
153 for (s = 0; s < 16; s++) {
154 for (i = 0; i < 64; i++) {
155 *factor1++ = (dv100_qstep[
s] << (c + 9)) * iweight1[i];
156 *factor2++ = (dv100_qstep[
s] << (c + 9)) * iweight2[i];
157 }
158 }
159 }
160 } else {
164 for (s = 0; s < 22; s++) {
165 for (i = c = 0; c < 4; c++) {
166 for (; i < dv_quant_areas[
c]; i++) {
168 *factor2++ = (*factor1++) << 1;
169 }
170 }
171 }
172 }
173 }
174 }
175
177 {
180 int i;
181
182 memset(&idsp,0, sizeof(idsp));
184
185 for (i = 0; i < 64; i++)
187
189 for (i = 0; i < 64; i++){
192 }
193 }else
195
198
200 }
201
202 /* decode AC coefficients */
204 {
211
214
215 /* if we must parse a partial VLC, we do it here */
216 if (partial_bit_count > 0) {
217 re_cache = re_cache >> partial_bit_count |
219 re_index -= partial_bit_count;
221 }
222
223 /* get the AC coefficients until last_index is reached */
224 for (;;) {
226 re_index);
227 /* our own optimized GET_RL_VLC */
230 if (vlc_len < 0) {
234 }
237
238 /* gotta check if we're still within gb boundaries */
239 if (re_index + vlc_len > last_index) {
240 /* should be < 16 bits otherwise a codeword could have been parsed */
243 re_index = last_index;
244 break;
245 }
246 re_index += vlc_len;
247
250 if (pos >= 64)
251 break;
252
255 block[scan_table[pos]] =
level;
256
258 }
261 }
262
264 {
269 }
270 if (bits_left > 0)
272 }
273
274 /* mb_x and mb_y are in units of 8 pixels */
276 {
279 int quant,
dc, dct_mode, class1, j;
280 int mb_index, mb_x, mb_y, last_index;
281 int y_stride, linesize;
283 int c_offset;
293 int is_field_mode[5];
294
297
298 memset(sblock, 0, 5 *
DV_MAX_BPM *
sizeof(*sblock));
299
300 /* pass 1: read DC and AC coefficients in blocks */
302 block1 = &sblock[0][0];
303 mb1 = mb_data;
305 for (mb_index = 0; mb_index < 5; mb_index++, mb1 += s->
sys->
bpm, block1 += s->
sys->
bpm * 64) {
306 /* skip header */
307 quant = buf_ptr[3] & 0x0f;
308 buf_ptr += 4;
310 mb = mb1;
312 is_field_mode[mb_index] = 0;
313 for (j = 0; j < s->
sys->
bpm; j++) {
316
317 /* get the DC */
325 class1 * 16 * 64 +
326 quant * 64];
327 is_field_mode[mb_index] |= !j && dct_mode;
328 } else {
333 dct_mode * 22 * 64 +
335 }
336 dc = dc << 2;
337 /* convert to unsigned because 128 is not added in the
338 * standard IDCT */
339 dc += 1024;
341 buf_ptr += last_index >> 3;
344
345 av_dlog(avctx,
"MB block: %d, %d ", mb_index, j);
347
348 /* write the remaining bits in a new buffer only if the
349 * block is finished */
352
353 block += 64;
354 mb++;
355 }
356
357 /* pass 2: we can do it just after */
360 mb = mb1;
364 for (j = 0; j < s->
sys->
bpm; j++, block += 64, mb++) {
367 /* if still not finished, no need to parse other blocks */
369 break;
370 }
371 }
372 /* all blocks are finished, so the extra bytes can be used at
373 * the video segment level */
376 }
377
378 /* we need a pass over the whole video segment */
380 block = &sblock[0][0];
381 mb = mb_data;
383 put_bits32(&vs_pb, 0);
// padding must be zeroed
385 for (mb_index = 0; mb_index < 5; mb_index++) {
386 for (j = 0; j < s->
sys->
bpm; j++) {
388 av_dlog(avctx,
"start %d:%d\n", mb_index, j);
390 }
391 if (mb->
pos >= 64 && mb->
pos < 127)
393 "AC EOB marker is absent pos=%d\n", mb->
pos);
394 block += 64;
395 mb++;
396 }
397 }
398
399 /* compute idct and place blocks */
400 block = &sblock[0][0];
401 mb = mb_data;
402 for (mb_index = 0; mb_index < 5; mb_index++) {
404
405 /* idct_put'ting luminance */
408 (s->
sys->
height >= 720 && mb_y != 134)) {
410 ((!is_field_mode[mb_index]) * log2_blocksize));
411 } else {
412 y_stride = (2 << log2_blocksize);
413 }
417 mb[0].
idct_put(y_ptr, linesize, block + 0 * 64);
419 mb[2].
idct_put(y_ptr + (1 << log2_blocksize), linesize, block + 2 * 64);
420 } else {
421 mb[1].
idct_put(y_ptr + (1 << log2_blocksize), linesize, block + 1 * 64);
422 mb[2].
idct_put(y_ptr + y_stride, linesize, block + 2 * 64);
423 mb[3].
idct_put(y_ptr + (1 << log2_blocksize) + y_stride, linesize, block + 3 * 64);
424 }
425 mb += 4;
426 block += 4 * 64;
427
428 /* idct_put'ting chrominance */
431 for (j = 2; j; j--) {
434 uint64_t aligned_pixels[64 / 8];
439 for (y = 0; y < (1 << log2_blocksize); y++, c_ptr += s->
frame->
linesize[j], pixels += 8) {
440 ptr1 = pixels + ((1 << (log2_blocksize))>>1);
442 for (x = 0; x < (1 <<
FFMAX(log2_blocksize - 1, 0)); x++) {
443 c_ptr[x] = pixels[x];
444 c_ptr1[x] = ptr1[x];
445 }
446 }
447 block += 64;
448 mb++;
449 } else {
450 y_stride = (mb_y == 134) ? (1 << log2_blocksize) :
451 s->
frame->
linesize[j] << ((!is_field_mode[mb_index]) * log2_blocksize);
453 (mb++)->
idct_put(c_ptr, linesize, block);
454 block += 64;
456 (mb++)->
idct_put(c_ptr + y_stride, linesize, block);
457 block += 64;
458 }
459 }
460 }
461 }
462 return 0;
463 }
464
465 /* NOTE: exactly one frame must be given (120000 bytes for NTSC,
466 * 144000 bytes for PAL - or twice those for 50Mbps) */
469 {
471 int buf_size = avpkt->
size;
474 int apt, is16_9,
ret;
476
480 return -1; /* NOTE: we only accept several full frames */
481 }
482
485 if (ret < 0) {
488 }
491 }
492
498
500 if (ret < 0)
502
503 /* Determine the codec's sample_aspect ratio from the packet */
504 vsc_pack = buf + 80 * 5 + 48 + 5;
506 apt = buf[4] & 0x07;
507 is16_9 = (vsc_pack[2] & 0x07) == 0x02 ||
508 (!apt && (vsc_pack[2] & 0x07) == 0x07);
510 }
511
516
517 /* Determine the codec's field order from the packet */
520 }
521
525
526 emms_c();
527
528 /* return image */
529 *got_frame = 1;
530
532 }
533
543 .max_lowres = 3,
544 };