23 #define UNCHECKED_BITSTREAM_READER 1
39 #define SPRITE_TRAJ_VLC_BITS 6
41 #define MB_TYPE_B_VLC_BITS 4
62 int16_t *ac_val, *ac_val1;
74 if (s->
mb_x == 0 || s->
qscale == qscale_table[xy] ||
77 for (i = 1; i < 8; i++)
81 for (i = 1; i < 8; i++)
89 if (s->
mb_y == 0 || s->
qscale == qscale_table[xy] ||
92 for (i = 1; i < 8; i++)
96 for (i = 1; i < 8; i++)
102 for (i = 1; i < 8; i++)
106 for (i = 1; i < 8; i++)
134 v |= 0x7F >> (7 - (bits_count & 7));
147 for (len = 0; len < 32; len++)
174 int min_ab, i, w2, h2, w3, h3;
175 int sprite_ref[4][2];
176 int virtual_ref[2][2];
179 const int vop_ref[4][2] = { { 0, 0 }, { s->
width, 0 },
181 int d[4][2] = { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } };
183 if (w <= 0 || h <= 0)
208 while ((1 << alpha) < w)
210 while ((1 << beta) < h)
217 sprite_ref[0][0] = a * vop_ref[0][0] + d[0][0];
218 sprite_ref[0][1] = a * vop_ref[0][1] + d[0][1];
219 sprite_ref[1][0] = a * vop_ref[1][0] + d[0][0] + d[1][0];
220 sprite_ref[1][1] = a * vop_ref[1][1] + d[0][1] + d[1][1];
221 sprite_ref[2][0] = a * vop_ref[2][0] + d[0][0] + d[2][0];
222 sprite_ref[2][1] = a * vop_ref[2][1] + d[0][1] + d[2][1];
224 sprite_ref[0][0] = (a >> 1) * (2 * vop_ref[0][0] + d[0][0]);
225 sprite_ref[0][1] = (a >> 1) * (2 * vop_ref[0][1] + d[0][1]);
226 sprite_ref[1][0] = (a >> 1) * (2 * vop_ref[1][0] + d[0][0] + d[1][0]);
227 sprite_ref[1][1] = (a >> 1) * (2 * vop_ref[1][1] + d[0][1] + d[1][1]);
228 sprite_ref[2][0] = (a >> 1) * (2 * vop_ref[2][0] + d[0][0] + d[2][0]);
229 sprite_ref[2][1] = (a >> 1) * (2 * vop_ref[2][1] + d[0][1] + d[2][1]);
239 virtual_ref[0][0] = 16 * (vop_ref[0][0] + w2) +
241 (r * sprite_ref[0][0] - 16 * vop_ref[0][0]) +
242 w2 * (r * sprite_ref[1][0] - 16 * vop_ref[1][0])), w);
243 virtual_ref[0][1] = 16 * vop_ref[0][1] +
245 (r * sprite_ref[0][1] - 16 * vop_ref[0][1]) +
246 w2 * (r * sprite_ref[1][1] - 16 * vop_ref[1][1])), w);
247 virtual_ref[1][0] = 16 * vop_ref[0][0] +
248 ROUNDED_DIV(((h - h2) * (r * sprite_ref[0][0] - 16 * vop_ref[0][0]) +
249 h2 * (r * sprite_ref[2][0] - 16 * vop_ref[2][0])), h);
250 virtual_ref[1][1] = 16 * (vop_ref[0][1] + h2) +
251 ROUNDED_DIV(((h - h2) * (r * sprite_ref[0][1] - 16 * vop_ref[0][1]) +
252 h2 * (r * sprite_ref[2][1] - 16 * vop_ref[2][1])), h);
268 s->
sprite_offset[0][0] = sprite_ref[0][0] - a * vop_ref[0][0];
269 s->
sprite_offset[0][1] = sprite_ref[0][1] - a * vop_ref[0][1];
270 s->
sprite_offset[1][0] = ((sprite_ref[0][0] >> 1) | (sprite_ref[0][0] & 1)) -
271 a * (vop_ref[0][0] / 2);
272 s->
sprite_offset[1][1] = ((sprite_ref[0][1] >> 1) | (sprite_ref[0][1] & 1)) -
273 a * (vop_ref[0][1] / 2);
282 s->
sprite_offset[0][0] = (sprite_ref[0][0] << (alpha + rho)) +
283 (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
285 (r * sprite_ref[0][1] - virtual_ref[0][1]) *
286 (-vop_ref[0][1]) + (1 << (alpha + rho - 1));
287 s->
sprite_offset[0][1] = (sprite_ref[0][1] << (alpha + rho)) +
288 (-r * sprite_ref[0][1] + virtual_ref[0][1]) *
290 (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
291 (-vop_ref[0][1]) + (1 << (alpha + rho - 1));
292 s->
sprite_offset[1][0] = ((-r * sprite_ref[0][0] + virtual_ref[0][0]) *
293 (-2 * vop_ref[0][0] + 1) +
294 (r * sprite_ref[0][1] - virtual_ref[0][1]) *
295 (-2 * vop_ref[0][1] + 1) + 2 * w2 * r *
296 sprite_ref[0][0] - 16 * w2 + (1 << (alpha + rho + 1)));
297 s->
sprite_offset[1][1] = ((-r * sprite_ref[0][1] + virtual_ref[0][1]) *
298 (-2 * vop_ref[0][0] + 1) +
299 (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
300 (-2 * vop_ref[0][1] + 1) + 2 * w2 * r *
301 sprite_ref[0][1] - 16 * w2 + (1 << (alpha + rho + 1)));
302 s->
sprite_delta[0][0] = (-r * sprite_ref[0][0] + virtual_ref[0][0]);
303 s->
sprite_delta[0][1] = (+r * sprite_ref[0][1] - virtual_ref[0][1]);
304 s->
sprite_delta[1][0] = (-r * sprite_ref[0][1] + virtual_ref[0][1]);
305 s->
sprite_delta[1][1] = (-r * sprite_ref[0][0] + virtual_ref[0][0]);
311 min_ab =
FFMIN(alpha, beta);
314 s->
sprite_offset[0][0] = (sprite_ref[0][0] << (alpha + beta + rho - min_ab)) +
315 (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
316 h3 * (-vop_ref[0][0]) +
317 (-r * sprite_ref[0][0] + virtual_ref[1][0]) *
318 w3 * (-vop_ref[0][1]) +
319 (1 << (alpha + beta + rho - min_ab - 1));
320 s->
sprite_offset[0][1] = (sprite_ref[0][1] << (alpha + beta + rho - min_ab)) +
321 (-r * sprite_ref[0][1] + virtual_ref[0][1]) *
322 h3 * (-vop_ref[0][0]) +
323 (-r * sprite_ref[0][1] + virtual_ref[1][1]) *
324 w3 * (-vop_ref[0][1]) +
325 (1 << (alpha + beta + rho - min_ab - 1));
326 s->
sprite_offset[1][0] = (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
327 h3 * (-2 * vop_ref[0][0] + 1) +
328 (-r * sprite_ref[0][0] + virtual_ref[1][0]) *
329 w3 * (-2 * vop_ref[0][1] + 1) + 2 * w2 * h3 *
330 r * sprite_ref[0][0] - 16 * w2 * h3 +
331 (1 << (alpha + beta + rho - min_ab + 1));
332 s->
sprite_offset[1][1] = (-r * sprite_ref[0][1] + virtual_ref[0][1]) *
333 h3 * (-2 * vop_ref[0][0] + 1) +
334 (-r * sprite_ref[0][1] + virtual_ref[1][1]) *
335 w3 * (-2 * vop_ref[0][1] + 1) + 2 * w2 * h3 *
336 r * sprite_ref[0][1] - 16 * w2 * h3 +
337 (1 << (alpha + beta + rho - min_ab + 1));
338 s->
sprite_delta[0][0] = (-r * sprite_ref[0][0] + virtual_ref[0][0]) * h3;
339 s->
sprite_delta[0][1] = (-r * sprite_ref[0][0] + virtual_ref[1][0]) * w3;
340 s->
sprite_delta[1][0] = (-r * sprite_ref[0][1] + virtual_ref[0][1]) * h3;
341 s->
sprite_delta[1][1] = (-r * sprite_ref[0][1] + virtual_ref[1][1]) * w3;
366 for (i = 0; i < 2; i++) {
399 int header_extension = 0, mb_num,
len;
405 for (len = 0; len < 32; len++)
420 if (mb_num >= s->
mb_num) {
422 "illegal mb_num in video packet (%d %d) \n", mb_num, s->
mb_num);
438 if (header_extension) {
444 check_marker(&s->
gb,
"before time_increment in video packed header");
446 check_marker(&s->
gb,
"before vop_coding_type in video packed header");
467 "Error, video packet header damaged (f_code=0)\n");
473 "Error, video packet header damaged (b_code=0)\n");
491 int x,
y, mb_v, sum, dx, dy,
shift;
508 dy -= 1 << (shift + a + 1);
510 dx -= 1 << (shift + a + 1);
514 for (y = 0; y < 16; y++) {
519 for (x = 0; x < 16; x++) {
550 if (code < 0 || code > 9 ) {
563 level =
get_bits(&s->
gb, code - 1) + (1 << (code - 1));
565 level = -
get_bits(&s->
gb, code - 1) - (1 << (code - 1));
592 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
618 "mcbpc corrupted at %d %d\n", s->
mb_x, s->
mb_y);
633 for (i = 0; i < 6; i++) {
638 "DC corrupted at %d %d\n", s->
mb_x, s->
mb_y);
647 int mx, my, pred_x, pred_y,
bits;
657 if (bits & 0x10000) {
675 mot_val[0 + stride] =
676 mot_val[2 + stride] = mx;
679 mot_val[1 + stride] =
680 mot_val[3 + stride] = my;
690 "mcbpc corrupted at %d %d\n", s->
mb_x, s->
mb_y);
705 mot_val[0 + stride] =
706 mot_val[2 + stride] = 0;
709 mot_val[1 + stride] =
710 mot_val[3 + stride] = 0;
722 if ((cbpc & 16) == 0) {
746 mot_val[0 + stride] =
747 mot_val[2 + stride] = mx;
750 mot_val[1 + stride] =
751 mot_val[3 + stride] = my;
756 for (i = 0; i < 4; i++) {
785 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
804 "cbpy corrupted at %d %d\n", s->
mb_x, s->
mb_y);
819 "I cbpy corrupted at %d %d\n", s->
mb_x, s->
mb_y);
827 for (i = 0; i < 6; i++) {
832 "DC corrupted at %d %d\n", s->
mb_x, s->
mb_y);
851 "P cbpy corrupted at %d %d\n", s->
mb_x, s->
mb_y);
864 if (mb_num >= mb_count)
903 "marker missing after first I partition at %d %d\n",
912 "marker missing after first P partition at %d %d\n",
939 int n,
int coded,
int intra,
int rvlc)
942 int level, i, last,
run, qmul, qadd;
982 if (dc_pred_dir == 0)
1013 qadd = (s->
qscale - 1) | 1;
1030 "1. marker bit missing in rvlc esc\n");
1043 "2. marker bit missing in rvlc esc\n");
1057 level = level * qmul + qadd;
1069 cache ^= 0xC0000000;
1071 if (cache & 0x80000000) {
1072 if (cache & 0x40000000) {
1087 "1. marker bit missing in 3. esc\n");
1098 "2. marker bit missing in 3. esc\n");
1107 if (s->error_recognition >= FF_ER_COMPLIANT) {
1108 const int abs_level=
FFABS(level);
1110 const int run1= run - rl->
max_run[last][abs_level] - 1;
1111 if (abs_level <= rl->max_level[last][run]) {
1115 if (s->error_recognition > FF_ER_COMPLIANT) {
1116 if (abs_level <= rl->max_level[last][run]*2) {
1120 if (run1 >= 0 && abs_level <= rl->max_level[last][run1]) {
1129 level = level * qmul + qadd;
1131 level = level * qmul - qadd;
1133 if ((
unsigned)(level + 2048) > 4095) {
1135 if (level > 2560 || level < -2560) {
1137 "|level| overflow in 3. esc, qp=%d\n",
1142 level = level < 0 ? -2048 : 2047;
1152 i += run + rl->
max_run[run >> 7][level / qmul] + 1;
1161 level = level + rl->
max_level[run >> 7][(run - 1) & 63] * qmul;
1171 tprintf(s->
avctx,
"dct[%d][%d] = %- 4d end?:%d\n", scan_table[i&63]&7, scan_table[i&63] >> 3, level, i>62);
1176 "ac-tex damaged at %d %d\n", s->
mb_x, s->
mb_y);
1180 block[scan_table[i]] =
level;
1184 block[scan_table[i]] =
level;
1226 for (i = 0; i < 4; i++) {
1234 for (i = 0; i < 6; i++)
1267 for (i = 0; i < 6; i++) {
1270 "texture corrupted at %d %d %d\n",
1297 int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
1299 static int8_t quant_tab[4] = { -1, -2, 1, 2 };
1310 for (i = 0; i < 6; i++)
1338 "mcbpc damaged at %d %d\n", s->
mb_x, s->
mb_y);
1341 }
while (cbpc == 20);
1356 cbp = (cbpc & 3) | (cbpy << 2);
1364 if ((cbpc & 16) == 0) {
1373 s->
mv[0][0][0] = mx;
1374 s->
mv[0][0][1] = my;
1387 for (i = 0; i < 2; i++) {
1396 s->
mv[0][i][0] = mx;
1397 s->
mv[0][i][1] = my;
1413 s->
mv[0][0][0] = mx;
1414 s->
mv[0][0][1] = my;
1419 for (i = 0; i < 4; i++) {
1428 s->
mv[0][i][0] = mx;
1429 s->
mv[0][i][1] = my;
1443 for (i = 0; i < 2; i++) {
1458 for (i = 0; i < 6; i++)
1528 s->
mv[0][0][0] = mx;
1531 s->
mv[0][0][1] = my;
1541 s->
mv[1][0][0] = mx;
1544 s->
mv[1][0][1] = my;
1552 for (i = 0; i < 2; i++) {
1556 s->
mv[0][i][0] = mx;
1557 s->
last_mv[0][i][1] = (s->
mv[0][i][1] = my) * 2;
1564 for (i = 0; i < 2; i++) {
1568 s->
mv[1][i][0] = mx;
1569 s->
last_mv[1][i][1] = (s->
mv[1][i][1] = my) * 2;
1593 "I cbpc damaged at %d %d\n", s->
mb_x, s->
mb_y);
1596 }
while (cbpc == 8);
1611 "I cbpy damaged at %d %d\n", s->
mb_x, s->
mb_y);
1614 cbp = (cbpc & 3) | (cbpy << 2);
1626 for (i = 0; i < 6; i++) {
1635 for (i = 0; i < 6; i++) {
1670 int hours, minutes, seconds;
1682 s->
time_base = seconds + 60*(minutes + 60*hours);
1727 int chroma_format =
get_bits(gb, 2);
1789 if (width && height &&
1804 "MPEG4 OBMC not supported (very likely buggy encoder)\n");
1827 "%d sprite_warping_points\n",
1859 for (i = 0; i < 64; i++) {
1873 for (i = 0; i < 64; i++) {
1886 for (; i < 64; i++) {
1896 for (i = 0; i < 64; i++) {
1909 for (; i < 64; i++) {
1931 int estimation_method =
get_bits(gb, 2);
1932 if (estimation_method < 2) {
1947 if (!
check_marker(gb,
"in complexity estimation part 1")) {
1965 if (!
check_marker(gb,
"in complexity estimation part 2")) {
1969 if (estimation_method == 1) {
1975 "Invalid Complexity estimation method %d\n",
1991 if (vo_ver_id != 1) {
2000 "reduced resolution VOP not supported\n");
2009 int h_sampling_factor_n;
2010 int h_sampling_factor_m;
2011 int v_sampling_factor_n;
2012 int v_sampling_factor_m;
2017 h_sampling_factor_n =
get_bits(gb, 5);
2018 h_sampling_factor_m =
get_bits(gb, 5);
2019 v_sampling_factor_n =
get_bits(gb, 5);
2020 v_sampling_factor_m =
get_bits(gb, 5);
2023 if (h_sampling_factor_n == 0 || h_sampling_factor_m == 0 ||
2024 v_sampling_factor_n == 0 || v_sampling_factor_m == 0) {
2060 int ver = 0, build = 0, ver2 = 0, ver3 = 0;
2071 e = sscanf(buf,
"DivX%dBuild%d%c", &ver, &build, &last);
2073 e = sscanf(buf,
"DivX%db%d%c", &ver, &build, &last);
2080 "wasteful way to store B-frames ('packed B-frames'). "
2081 "Consider using a tool like VirtualDub or avidemux to fix it.\n");
2087 e = sscanf(buf,
"FFmpe%*[^b]b%d", &build) + 3;
2089 e = sscanf(buf,
"FFmpeg v%d.%d.%d / libavcodec build: %d", &ver, &ver2, &ver3, &build);
2091 e = sscanf(buf,
"Lavc%d.%d.%d", &ver, &ver2, &ver3) + 1;
2093 build = (ver << 16) + (ver2 << 8) + ver3;
2096 if (strcmp(buf,
"ffmpeg") == 0)
2103 e = sscanf(buf,
"XviD%d", &build);
2160 #define SET_QPEL_FUNC(postfix1, postfix2) \
2161 s->qdsp.put_ ## postfix1 = ff_put_ ## postfix2; \
2162 s->qdsp.put_no_rnd_ ## postfix1 = ff_put_no_rnd_ ## postfix2; \
2163 s->qdsp.avg_ ## postfix1 = ff_avg_ ## postfix2;
2207 "bugs: %X lavc_build:%d xvid_build:%d divx_version:%d divx_build:%d %s\n",
2226 int time_incr, time_increment;
2251 "hmm, seems the headers are not complete, trying to guess time_increment_bits\n");
2404 "sprite_brightness_change not supported\n");
2413 "Error, header damaged or not MPEG4 header (qscale=0)\n");
2421 "Error, header damaged or not MPEG4 header (f_code=0)\n");
2432 "Error, header damaged or not MPEG4 header (b_code=0)\n");
2441 "qp:%d fc:%d,%d %s size:%d pro:%d alt:%d top:%d %spel part:%d resync:%d w:%d a:%d rnd:%d vot:%d%s dc:%d ce:%d/%d/%d time:%"PRId64
" tincr:%d\n",
2462 int load_backward_shape =
get_bits1(gb);
2463 if (load_backward_shape)
2465 "load backward shape isn't supported\n");
2476 "looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag\n");
2502 unsigned startcode,
v;
2526 startcode = ((startcode << 8) | v) & 0xffffffff;
2528 if ((startcode & 0xFFFFFF00) != 0x100)
2533 if (startcode <= 0x11F)
2535 else if (startcode <= 0x12F)
2537 else if (startcode <= 0x13F)
2539 else if (startcode <= 0x15F)
2541 else if (startcode <= 0x1AF)
2543 else if (startcode == 0x1B0)
2545 else if (startcode == 0x1B1)
2547 else if (startcode == 0x1B2)
2549 else if (startcode == 0x1B3)
2551 else if (startcode == 0x1B4)
2553 else if (startcode == 0x1B5)
2555 else if (startcode == 0x1B6)
2557 else if (startcode == 0x1B7)
2559 else if (startcode == 0x1B8)
2561 else if (startcode == 0x1B9)
2563 else if (startcode == 0x1BA)
2565 else if (startcode == 0x1BB)
2567 else if (startcode == 0x1BC)
2569 else if (startcode == 0x1BD)
2571 else if (startcode == 0x1BE)
2573 else if (startcode == 0x1BF)
2575 else if (startcode == 0x1C0)
2577 else if (startcode == 0x1C1)
2579 else if (startcode == 0x1C2)
2581 else if (startcode == 0x1C3)
2583 else if (startcode <= 0x1C5)
2585 else if (startcode <= 0x1FF)
2590 if (startcode >= 0x120 && startcode <= 0x12F) {
2616 static int done = 0;
2651 int startcode_found = 0;
2653 if (buf_size - current_pos > 7) {
2656 for (i = current_pos; i < buf_size - 4; i++)
2661 buf[i + 3] == 0xB6) {
2662 startcode_found = !(buf[i + 4] & 0x40);
2667 if (startcode_found) {
2670 buf_size - current_pos);
2674 buf_size - current_pos);
2752 "MPEG4 Video Decoder",
2759 "MPEG4 Video VDPAU Decoder",
2786 #if CONFIG_MPEG4_VDPAU_DECODER
2787 AVCodec ff_mpeg4_vdpau_decoder = {
2788 .
name =
"mpeg4_vdpau",