34 #define SPRITE_TRAJ_VLC_BITS 6
36 #define MB_TYPE_B_VLC_BITS 4
57 int16_t *ac_val, *ac_val1;
69 if (s->
mb_x == 0 || s->
qscale == qscale_table[xy] ||
72 for (i = 1; i < 8; i++)
76 for (i = 1; i < 8; i++)
84 if (s->
mb_y == 0 || s->
qscale == qscale_table[xy] ||
87 for (i = 1; i < 8; i++)
91 for (i = 1; i < 8; i++)
97 for (i = 1; i < 8; i++)
101 for (i = 1; i < 8; i++)
128 v |= 0x7F >> (7 - (bits_count & 7));
140 for (len = 0; len < 32; len++)
163 int min_ab, i, w2, h2, w3, h3;
164 int sprite_ref[4][2];
165 int virtual_ref[2][2];
168 const int vop_ref[4][2] = { { 0, 0 }, { s->
width, 0 },
170 int d[4][2] = { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } };
172 if (w <= 0 || h <= 0)
197 while ((1 << alpha) < w)
199 while ((1 << beta) < h)
206 sprite_ref[0][0] = a * vop_ref[0][0] + d[0][0];
207 sprite_ref[0][1] = a * vop_ref[0][1] + d[0][1];
208 sprite_ref[1][0] = a * vop_ref[1][0] + d[0][0] + d[1][0];
209 sprite_ref[1][1] = a * vop_ref[1][1] + d[0][1] + d[1][1];
210 sprite_ref[2][0] = a * vop_ref[2][0] + d[0][0] + d[2][0];
211 sprite_ref[2][1] = a * vop_ref[2][1] + d[0][1] + d[2][1];
213 sprite_ref[0][0] = (a >> 1) * (2 * vop_ref[0][0] + d[0][0]);
214 sprite_ref[0][1] = (a >> 1) * (2 * vop_ref[0][1] + d[0][1]);
215 sprite_ref[1][0] = (a >> 1) * (2 * vop_ref[1][0] + d[0][0] + d[1][0]);
216 sprite_ref[1][1] = (a >> 1) * (2 * vop_ref[1][1] + d[0][1] + d[1][1]);
217 sprite_ref[2][0] = (a >> 1) * (2 * vop_ref[2][0] + d[0][0] + d[2][0]);
218 sprite_ref[2][1] = (a >> 1) * (2 * vop_ref[2][1] + d[0][1] + d[2][1]);
228 virtual_ref[0][0] = 16 * (vop_ref[0][0] + w2) +
230 (r * sprite_ref[0][0] - 16 * vop_ref[0][0]) +
231 w2 * (r * sprite_ref[1][0] - 16 * vop_ref[1][0])), w);
232 virtual_ref[0][1] = 16 * vop_ref[0][1] +
234 (r * sprite_ref[0][1] - 16 * vop_ref[0][1]) +
235 w2 * (r * sprite_ref[1][1] - 16 * vop_ref[1][1])), w);
236 virtual_ref[1][0] = 16 * vop_ref[0][0] +
237 ROUNDED_DIV(((h - h2) * (r * sprite_ref[0][0] - 16 * vop_ref[0][0]) +
238 h2 * (r * sprite_ref[2][0] - 16 * vop_ref[2][0])), h);
239 virtual_ref[1][1] = 16 * (vop_ref[0][1] + h2) +
240 ROUNDED_DIV(((h - h2) * (r * sprite_ref[0][1] - 16 * vop_ref[0][1]) +
241 h2 * (r * sprite_ref[2][1] - 16 * vop_ref[2][1])), h);
257 s->
sprite_offset[0][0] = sprite_ref[0][0] - a * vop_ref[0][0];
258 s->
sprite_offset[0][1] = sprite_ref[0][1] - a * vop_ref[0][1];
259 s->
sprite_offset[1][0] = ((sprite_ref[0][0] >> 1) | (sprite_ref[0][0] & 1)) -
260 a * (vop_ref[0][0] / 2);
261 s->
sprite_offset[1][1] = ((sprite_ref[0][1] >> 1) | (sprite_ref[0][1] & 1)) -
262 a * (vop_ref[0][1] / 2);
271 s->
sprite_offset[0][0] = (sprite_ref[0][0] << (alpha + rho)) +
272 (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
274 (r * sprite_ref[0][1] - virtual_ref[0][1]) *
275 (-vop_ref[0][1]) + (1 << (alpha + rho - 1));
276 s->
sprite_offset[0][1] = (sprite_ref[0][1] << (alpha + rho)) +
277 (-r * sprite_ref[0][1] + virtual_ref[0][1]) *
279 (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
280 (-vop_ref[0][1]) + (1 << (alpha + rho - 1));
281 s->
sprite_offset[1][0] = ((-r * sprite_ref[0][0] + virtual_ref[0][0]) *
282 (-2 * vop_ref[0][0] + 1) +
283 (r * sprite_ref[0][1] - virtual_ref[0][1]) *
284 (-2 * vop_ref[0][1] + 1) + 2 * w2 * r *
285 sprite_ref[0][0] - 16 * w2 + (1 << (alpha + rho + 1)));
286 s->
sprite_offset[1][1] = ((-r * sprite_ref[0][1] + virtual_ref[0][1]) *
287 (-2 * vop_ref[0][0] + 1) +
288 (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
289 (-2 * vop_ref[0][1] + 1) + 2 * w2 * r *
290 sprite_ref[0][1] - 16 * w2 + (1 << (alpha + rho + 1)));
291 s->
sprite_delta[0][0] = (-r * sprite_ref[0][0] + virtual_ref[0][0]);
292 s->
sprite_delta[0][1] = (+r * sprite_ref[0][1] - virtual_ref[0][1]);
293 s->
sprite_delta[1][0] = (-r * sprite_ref[0][1] + virtual_ref[0][1]);
294 s->
sprite_delta[1][1] = (-r * sprite_ref[0][0] + virtual_ref[0][0]);
300 min_ab =
FFMIN(alpha, beta);
303 s->
sprite_offset[0][0] = (sprite_ref[0][0] << (alpha + beta + rho - min_ab)) +
304 (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
305 h3 * (-vop_ref[0][0]) +
306 (-r * sprite_ref[0][0] + virtual_ref[1][0]) *
307 w3 * (-vop_ref[0][1]) +
308 (1 << (alpha + beta + rho - min_ab - 1));
309 s->
sprite_offset[0][1] = (sprite_ref[0][1] << (alpha + beta + rho - min_ab)) +
310 (-r * sprite_ref[0][1] + virtual_ref[0][1]) *
311 h3 * (-vop_ref[0][0]) +
312 (-r * sprite_ref[0][1] + virtual_ref[1][1]) *
313 w3 * (-vop_ref[0][1]) +
314 (1 << (alpha + beta + rho - min_ab - 1));
315 s->
sprite_offset[1][0] = (-r * sprite_ref[0][0] + virtual_ref[0][0]) *
316 h3 * (-2 * vop_ref[0][0] + 1) +
317 (-r * sprite_ref[0][0] + virtual_ref[1][0]) *
318 w3 * (-2 * vop_ref[0][1] + 1) + 2 * w2 * h3 *
319 r * sprite_ref[0][0] - 16 * w2 * h3 +
320 (1 << (alpha + beta + rho - min_ab + 1));
321 s->
sprite_offset[1][1] = (-r * sprite_ref[0][1] + virtual_ref[0][1]) *
322 h3 * (-2 * vop_ref[0][0] + 1) +
323 (-r * sprite_ref[0][1] + virtual_ref[1][1]) *
324 w3 * (-2 * vop_ref[0][1] + 1) + 2 * w2 * h3 *
325 r * sprite_ref[0][1] - 16 * w2 * h3 +
326 (1 << (alpha + beta + rho - min_ab + 1));
327 s->
sprite_delta[0][0] = (-r * sprite_ref[0][0] + virtual_ref[0][0]) * h3;
328 s->
sprite_delta[0][1] = (-r * sprite_ref[0][0] + virtual_ref[1][0]) * w3;
329 s->
sprite_delta[1][0] = (-r * sprite_ref[0][1] + virtual_ref[0][1]) * h3;
330 s->
sprite_delta[1][1] = (-r * sprite_ref[0][1] + virtual_ref[1][1]) * w3;
355 for (i = 0; i < 2; i++) {
377 int header_extension = 0, mb_num,
len;
383 for (len = 0; len < 32; len++)
398 if (mb_num >= s->
mb_num) {
400 "illegal mb_num in video packet (%d %d) \n", mb_num, s->
mb_num);
404 int mb_x = 0, mb_y = 0;
429 if (header_extension) {
435 check_marker(&s->
gb,
"before time_increment in video packed header");
437 check_marker(&s->
gb,
"before vop_coding_type in video packed header");
458 "Error, video packet header damaged (f_code=0)\n");
464 "Error, video packet header damaged (b_code=0)\n");
481 int x, y, mb_v, sum, dx, dy, shift;
498 dy -= 1 << (shift + a + 1);
500 dx -= 1 << (shift + a + 1);
504 for (y = 0; y < 16; y++) {
509 for (x = 0; x < 16; x++) {
540 if (code < 0 || code > 9 ) {
553 level =
get_bits(&s->
gb, code - 1) + (1 << (code - 1));
555 level = -
get_bits(&s->
gb, code - 1) - (1 << (code - 1));
582 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
608 "cbpc corrupted at %d %d\n", s->
mb_x, s->
mb_y);
623 for (i = 0; i < 6; i++) {
628 "DC corrupted at %d %d\n", s->
mb_x, s->
mb_y);
637 int mx, my, pred_x, pred_y,
bits;
647 if (bits & 0x10000) {
680 "cbpc corrupted at %d %d\n", s->
mb_x, s->
mb_y);
712 if ((cbpc & 16) == 0) {
746 for (i = 0; i < 4; i++) {
775 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
794 "cbpy corrupted at %d %d\n", s->
mb_x, s->
mb_y);
809 "I cbpy corrupted at %d %d\n", s->
mb_x, s->
mb_y);
817 for (i = 0; i < 6; i++) {
822 "DC corrupted at %d %d\n", s->
mb_x, s->
mb_y);
841 "P cbpy corrupted at %d %d\n", s->
mb_x, s->
mb_y);
854 if (mb_num >= mb_count)
893 "marker missing after first I partition at %d %d\n",
902 "marker missing after first P partition at %d %d\n",
929 int n,
int coded,
int intra,
int rvlc)
932 int level, i, last,
run, qmul, qadd, dc_pred_dir;
971 if (dc_pred_dir == 0)
1002 qadd = (s->
qscale - 1) | 1;
1019 "1. marker bit missing in rvlc esc\n");
1032 "2. marker bit missing in rvlc esc\n");
1046 level = level * qmul + qadd;
1058 cache ^= 0xC0000000;
1060 if (cache & 0x80000000) {
1061 if (cache & 0x40000000) {
1076 "1. marker bit missing in 3. esc\n");
1086 "2. marker bit missing in 3. esc\n");
1094 level = level * qmul + qadd;
1096 level = level * qmul - qadd;
1098 if ((
unsigned)(level + 2048) > 4095) {
1100 if (level > 2560 || level < -2560) {
1102 "|level| overflow in 3. esc, qp=%d\n",
1107 level = level < 0 ? -2048 : 2047;
1117 i += run + rl->
max_run[run >> 7][level / qmul] + 1;
1126 level = level + rl->
max_level[run >> 7][(run - 1) & 63] * qmul;
1140 "ac-tex damaged at %d %d\n", s->
mb_x, s->
mb_y);
1144 block[scan_table[i]] =
level;
1148 block[scan_table[i]] =
level;
1190 for (i = 0; i < 4; i++) {
1198 for (i = 0; i < 6; i++)
1231 for (i = 0; i < 6; i++) {
1234 "texture corrupted at %d %d %d\n",
1261 int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
1263 static int8_t quant_tab[4] = { -1, -2, 1, 2 };
1274 for (i = 0; i < 6; i++)
1302 "cbpc damaged at %d %d\n", s->
mb_x, s->
mb_y);
1305 }
while (cbpc == 20);
1320 cbp = (cbpc & 3) | (cbpy << 2);
1328 if ((cbpc & 16) == 0) {
1337 s->
mv[0][0][0] = mx;
1338 s->
mv[0][0][1] = my;
1351 for (i = 0; i < 2; i++) {
1360 s->
mv[0][i][0] = mx;
1361 s->
mv[0][i][1] = my;
1377 s->
mv[0][0][0] = mx;
1378 s->
mv[0][0][1] = my;
1383 for (i = 0; i < 4; i++) {
1392 s->
mv[0][i][0] = mx;
1393 s->
mv[0][i][1] = my;
1407 for (i = 0; i < 2; i++) {
1422 for (i = 0; i < 6; i++)
1492 s->
mv[0][0][0] = mx;
1495 s->
mv[0][0][1] = my;
1505 s->
mv[1][0][0] = mx;
1508 s->
mv[1][0][1] = my;
1516 for (i = 0; i < 2; i++) {
1520 s->
mv[0][i][0] = mx;
1521 s->
last_mv[0][i][1] = (s->
mv[0][i][1] = my) * 2;
1528 for (i = 0; i < 2; i++) {
1532 s->
mv[1][i][0] = mx;
1533 s->
last_mv[1][i][1] = (s->
mv[1][i][1] = my) * 2;
1557 "I cbpc damaged at %d %d\n", s->
mb_x, s->
mb_y);
1560 }
while (cbpc == 8);
1575 "I cbpy damaged at %d %d\n", s->
mb_x, s->
mb_y);
1578 cbp = (cbpc & 3) | (cbpy << 2);
1590 for (i = 0; i < 6; i++) {
1599 for (i = 0; i < 6; i++) {
1631 int hours, minutes, seconds;
1634 if (time_code & 0x40) {
1635 hours = time_code >> 13;
1636 minutes = time_code >> 7 & 0x3f;
1637 seconds = time_code & 0x3f;
1638 s->
time_base = seconds + 60 * (minutes + 60 * hours);
1649 int profile_and_level_indication;
1651 profile_and_level_indication =
get_bits(gb, 8);
1653 s->
avctx->
profile = (profile_and_level_indication & 0xf0) >> 4;
1654 s->
avctx->
level = (profile_and_level_indication & 0x0f);
1687 int chroma_format =
get_bits(gb, 2);
1749 if (width && height &&
1764 "MPEG4 OBMC not supported (very likely buggy encoder)\n");
1787 "%d sprite_warping_points\n",
1816 for (i = 0; i < 64; i++) {
1830 for (i = 0; i < 64; i++) {
1843 for (; i < 64; i++) {
1853 for (i = 0; i < 64; i++) {
1866 for (; i < 64; i++) {
1883 int estimation_method =
get_bits(gb, 2);
1884 if (estimation_method < 2) {
1899 if (!
check_marker(gb,
"in complexity estimation part 1")) {
1917 if (!
check_marker(gb,
"in complexity estimation part 2")) {
1921 if (estimation_method == 1) {
1927 "Invalid Complexity estimation method %d\n",
1943 if (vo_ver_id != 1) {
1952 "reduced resolution VOP not supported\n");
1961 int h_sampling_factor_n;
1962 int h_sampling_factor_m;
1963 int v_sampling_factor_n;
1964 int v_sampling_factor_m;
1969 h_sampling_factor_n =
get_bits(gb, 5);
1970 h_sampling_factor_m =
get_bits(gb, 5);
1971 v_sampling_factor_n =
get_bits(gb, 5);
1972 v_sampling_factor_m =
get_bits(gb, 5);
1975 if (h_sampling_factor_n == 0 || h_sampling_factor_m == 0 ||
1976 v_sampling_factor_n == 0 || v_sampling_factor_m == 0) {
2001 int ver = 0, build = 0, ver2 = 0, ver3 = 0;
2012 e = sscanf(buf,
"DivX%dBuild%d%c", &ver, &build, &last);
2014 e = sscanf(buf,
"DivX%db%d%c", &ver, &build, &last);
2021 "Invalid and inefficient vfw-avi packed B frames detected\n");
2027 e = sscanf(buf,
"FFmpe%*[^b]b%d", &build) + 3;
2029 e = sscanf(buf,
"FFmpeg v%d.%d.%d / libavcodec build: %d", &ver, &ver2, &ver3, &build);
2031 e = sscanf(buf,
"Lavc%d.%d.%d", &ver, &ver2, &ver3) + 1;
2033 build = (ver << 16) + (ver2 << 8) + ver3;
2036 if (strcmp(buf,
"ffmpeg") == 0)
2043 e = sscanf(buf,
"XviD%d", &build);
2082 int time_incr, time_increment;
2106 "hmm, seems the headers are not complete, trying to guess time_increment_bits\n");
2239 "sprite_brightness_change not supported\n");
2248 "Error, header damaged or not MPEG4 header (qscale=0)\n");
2256 "Error, header damaged or not MPEG4 header (f_code=0)\n");
2269 "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\n",
2287 int load_backward_shape =
get_bits1(gb);
2288 if (load_backward_shape)
2290 "load backward shape isn't supported\n");
2301 "looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag\n");
2327 unsigned startcode, v;
2351 startcode = ((startcode << 8) | v) & 0xffffffff;
2353 if ((startcode & 0xFFFFFF00) != 0x100)
2358 if (startcode <= 0x11F)
2360 else if (startcode <= 0x12F)
2362 else if (startcode <= 0x13F)
2364 else if (startcode <= 0x15F)
2366 else if (startcode <= 0x1AF)
2368 else if (startcode == 0x1B0)
2370 else if (startcode == 0x1B1)
2372 else if (startcode == 0x1B2)
2374 else if (startcode == 0x1B3)
2376 else if (startcode == 0x1B4)
2378 else if (startcode == 0x1B5)
2380 else if (startcode == 0x1B6)
2382 else if (startcode == 0x1B7)
2384 else if (startcode == 0x1B8)
2386 else if (startcode == 0x1B9)
2388 else if (startcode == 0x1BA)
2390 else if (startcode == 0x1BB)
2392 else if (startcode == 0x1BC)
2394 else if (startcode == 0x1BD)
2396 else if (startcode == 0x1BE)
2398 else if (startcode == 0x1BF)
2400 else if (startcode == 0x1C0)
2402 else if (startcode == 0x1C1)
2404 else if (startcode == 0x1C2)
2406 else if (startcode == 0x1C3)
2408 else if (startcode <= 0x1C5)
2410 else if (startcode <= 0x1FF)
2415 if (startcode >= 0x120 && startcode <= 0x12F) {
2490 "bugs: %X lavc_build:%d xvid_build:%d divx_version:%d divx_build:%d %s\n",
2505 int startcode_found = 0;
2507 if (buf_size - current_pos > 5) {
2509 for (i = current_pos; i < buf_size - 3; i++)
2513 buf[i + 3] == 0xB6) {
2514 startcode_found = 1;
2520 startcode_found = 1;
2524 if (startcode_found) {
2527 buf_size - current_pos +
2532 buf_size - current_pos);
2562 static int done = 0;