63 #define MB_TYPE_ZERO_MV 0x20000000
90 0, 1, 2, 3, 4, 5, 6, 7,
91 8, 10, 12, 14, 16, 18, 20, 22,
92 24, 28, 32, 36, 40, 44, 48, 52,
93 56, 64, 72, 80, 88, 96, 104, 112,
99 int code, sign, val, shift;
111 val = (val - 1) << shift;
123 #define check_scantable_index(ctx, x) \
126 av_log(ctx->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", \
127 ctx->mb_x, ctx->mb_y); \
128 return AVERROR_INVALIDDATA; \
133 int16_t *
block,
int n)
140 const int qscale = s->
qscale;
143 component = (n <= 3 ? 0 : n - 4 + 1);
150 block[0] = dc * quant_matrix[0];
163 }
else if (level != 0) {
167 level = (level * qscale * quant_matrix[j]) >> 4;
168 level = (level - 1) | 1;
182 }
else if (level == 0) {
191 level = (level * qscale * quant_matrix[j]) >> 4;
192 level = (level - 1) | 1;
195 level = (level * qscale * quant_matrix[j]) >> 4;
196 level = (level - 1) | 1;
214 int16_t *
block,
int n)
220 const int qscale = s->
qscale;
228 level = (3 * qscale * quant_matrix[0]) >> 5;
229 level = (level - 1) | 1;
247 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
248 level = (level - 1) | 1;
262 }
else if (level == 0) {
271 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
272 level = (level - 1) | 1;
275 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
276 level = (level - 1) | 1;
294 int16_t *
block,
int n)
299 const int qscale = s->
qscale;
307 level = (3 * qscale) >> 1;
308 level = (level - 1) | 1;
327 level = ((level * 2 + 1) * qscale) >> 1;
328 level = (level - 1) | 1;
342 }
else if (level == 0) {
351 level = ((level * 2 + 1) * qscale) >> 1;
352 level = (level - 1) | 1;
355 level = ((level * 2 + 1) * qscale) >> 1;
356 level = (level - 1) | 1;
374 int16_t *
block,
int n)
379 const uint16_t *quant_matrix;
380 const int qscale = s->
qscale;
396 level = (3 * qscale * quant_matrix[0]) >> 5;
416 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
432 level = ((-level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
435 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
449 block[63] ^= (mismatch & 1);
456 int16_t *
block,
int n)
461 const int qscale = s->
qscale;
468 level = (3 * qscale) >> 1;
486 level = ((level * 2 + 1) * qscale) >> 1;
502 level = ((-level * 2 + 1) * qscale) >> 1;
505 level = ((level * 2 + 1) * qscale) >> 1;
522 int16_t *
block,
int n)
528 const uint16_t *quant_matrix;
529 const int qscale = s->
qscale;
538 component = (n & 1) + 1;
548 mismatch = block[0] ^ 1;
565 }
else if (level != 0) {
569 level = (level * qscale * quant_matrix[j]) >> 4;
584 level = (-level * qscale * quant_matrix[j]) >> 4;
587 level = (level * qscale * quant_matrix[j]) >> 4;
596 block[63] ^= mismatch & 1;
603 int16_t *
block,
int n)
609 const uint16_t *quant_matrix;
610 const int qscale = s->
qscale;
618 component = (n & 1) + 1;
643 }
else if (level != 0) {
647 level = (level * qscale * quant_matrix[j]) >> 4;
662 level = (-level * qscale * quant_matrix[j]) >> 4;
665 level = (level * qscale * quant_matrix[j]) >> 4;
706 int i, j, k, cbp, val, mb_type, motion_type;
732 if ((s->
mv[0][0][0] | s->
mv[0][0][1] | s->
mv[1][0][0] | s->
mv[1][0][1]) == 0)
745 "invalid mb type in I Frame at %d %d\n",
758 "invalid mb type in P Frame at %d %d\n", s->
mb_x, s->
mb_y);
767 "invalid mb type in B Frame at %d %d\n", s->
mb_x, s->
mb_y);
820 for (i = 0; i < 6; i++)
823 for (i = 0; i < mb_block_count; i++)
828 for (i = 0; i < 6; i++)
872 s->
mv_dir = (mb_type >> 13) & 3;
874 switch (motion_type) {
879 for (i = 0; i < 2; i++) {
894 s->
mv[i][0][0] <<= 1;
895 s->
mv[i][0][1] <<= 1;
902 for (i = 0; i < 2; i++) {
905 for (j = 0; j < 2; j++) {
907 for (k = 0; k < 2; k++) {
911 s->
mv[i][j][k] = val;
922 for (i = 0; i < 2; i++) {
924 for (j = 0; j < 2; j++) {
929 s->
mv[i][j][0] = val;
933 s->
last_mv[i][j][1] = val << 1;
934 s->
mv[i][j][1] = val;
941 for (i = 0; i < 2; i++) {
944 for (k = 0; k < 2; k++) {
949 s->
mv[i][0][k] = val;
957 for (i = 0; i < 2; i++) {
959 int dmx, dmy, mx, my, m;
968 s->
last_mv[i][0][1] >> my_shift);
972 s->
last_mv[i][0][1] = my << my_shift;
973 s->
last_mv[i][1][1] = my << my_shift;
987 s->
mv[i][2][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
988 s->
mv[i][2][1] = ((my * m + (my > 0)) >> 1) + dmy - 1;
990 s->
mv[i][3][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
991 s->
mv[i][3][1] = ((my * m + (my > 0)) >> 1) + dmy + 1;
995 s->
mv[i][2][0] = ((mx + (mx > 0)) >> 1) + dmx;
996 s->
mv[i][2][1] = ((my + (my > 0)) >> 1) + dmy;
1007 "00 motion_type at %d %d\n", s->
mb_x, s->
mb_y);
1017 if (mb_block_count > 6) {
1018 cbp <<= mb_block_count - 6;
1024 "invalid cbp at %d %d\n", s->
mb_x, s->
mb_y);
1038 for (i = 0; i < 6; i++) {
1046 cbp <<= 12 - mb_block_count;
1048 for (i = 0; i < mb_block_count; i++) {
1049 if (cbp & (1 << 11)) {
1060 for (i = 0; i < 6; i++) {
1068 for (i = 0; i < 6; i++) {
1080 for (i = 0; i < 12; i++)
1098 for (i = 0; i < 64; i++)
1128 if (avctx == avctx_from ||
1129 !ctx_from->mpeg_enc_ctx_allocated ||
1130 !s1->context_initialized)
1149 uint16_t temp_matrix[64];
1152 memcpy(temp_matrix, matrix, 64 *
sizeof(uint16_t));
1154 for (i = 0; i < 64; i++)
1155 matrix[new_perm[i]] = temp_matrix[old_perm[i]];
1167 #if CONFIG_MPEG2_DXVA2_HWACCEL
1170 #if CONFIG_MPEG2_VAAPI_HWACCEL
1173 #if CONFIG_MPEG1_VDPAU_HWACCEL | CONFIG_MPEG2_VDPAU_HWACCEL
1198 if (avctx->xvmc_acceleration)
1199 return avctx->
get_format(avctx, pixfmt_xvmc_mpg2_420);
1302 s->avctx->sample_aspect_ratio =
1314 if (avctx->hwaccel && avctx->idct_algo ==
FF_IDCT_AUTO)
1320 memcpy(old_permutation, s->dsp.idct_permutation, 64 *
sizeof(
uint8_t));
1330 s1->mpeg_enc_ctx_allocated = 1;
1340 int ref, f_code, vbv_delay;
1372 "vbv_delay %d, ref %d type:%d\n", vbv_delay, ref, s->
pict_type);
1382 int horiz_size_ext, vert_size_ext;
1392 s->
width |= (horiz_size_ext << 12);
1393 s->
height |= (vert_size_ext << 12);
1395 s->
bit_rate += (bit_rate_ext << 18) * 400;
1411 "profile: %d, level: %d vbv buffer: %d, bitrate:%d\n",
1419 int color_description, w, h;
1423 if (color_description) {
1459 for (i = 0; i < nofco; i++) {
1474 uint16_t matrix1[64],
int intra)
1478 for (i = 0; i < 64; i++) {
1485 if (intra && i == 0 && v != 8) {
1521 "Missing picture start code, guessing missing values\n");
1547 "interlaced frame in progressive sequence, ignoring\n");
1553 "picture_structure %d invalid, ignoring\n",
1655 "hardware accelerator failed to decode first field\n");
1658 for (i = 0; i < 4; i++) {
1684 #define DECODE_SLICE_ERROR -1
1685 #define DECODE_SLICE_OK 0
1694 const uint8_t **buf,
int buf_size)
1702 assert(mb_y < s->mb_height);
1749 const uint8_t *buf_end, *buf_start = *buf - 4;
1750 int start_code = -1;
1752 if (buf_end < *buf + buf_size)
1769 "qp:%d fc:%2d%2d%2d%2d %s %s %s %s %s dc:%d pstruct:%d fdct:%d cmv:%d qtype:%d ivlc:%d rff:%d %s\n",
1804 int motion_x, motion_y, dir, i;
1806 for (i = 0; i < 2; i++) {
1807 for (dir = 0; dir < 2; dir++) {
1810 motion_x = motion_y = 0;
1813 motion_x = s->
mv[dir][0][0];
1814 motion_y = s->
mv[dir][0][1];
1816 motion_x = s->
mv[dir][i][0];
1817 motion_y = s->
mv[dir][i][1];
1841 const int mb_size = 16;
1847 s->
mb_y += 1 << field_pic;
1886 }
else if (code == 35) {
1903 "skipped MB in I frame at %d %d\n", s->
mb_x, s->
mb_y);
1909 for (i = 0; i < 12; i++)
1918 s->
mv[0][0][0] = s->
mv[0][0][1] = 0;
1948 uint32_t start_code;
1953 av_dlog(c,
"ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n",
1977 if (mb_y < 0 || mb_y >= s->
end_mb_y)
1997 "hardware accelerator failed to decode picture\n");
2040 const uint8_t *buf,
int buf_size)
2051 if (width == 0 || height == 0) {
2053 "Invalid horizontal or vertical size value.\n");
2079 for (i = 0; i < 64; i++) {
2089 for (i = 0; i < 64; i++) {
2152 for (i = 0; i < 64; i++) {
2176 const uint8_t *p,
int buf_size)
2180 if (buf_size >= 6 &&
2181 p[0] ==
'G' && p[1] ==
'A' && p[2] ==
'9' && p[3] ==
'4' &&
2182 p[4] == 3 && (p[5] & 0x40)) {
2184 int cc_count = p[5] & 0x1f;
2185 if (cc_count > 0 && buf_size >= 7 + cc_count * 3) {
2193 }
else if (buf_size >= 11 &&
2194 p[0] ==
'C' && p[1] ==
'C' && p[2] == 0x01 && p[3] == 0xf8) {
2200 for (i = 5; i + 6 <= buf_size && ((p[i] & 0xfe) == 0xfe); i += 6)
2208 uint8_t field1 = !!(p[4] & 0x80);
2211 for (i = 0; i < cc_count; i++) {
2212 cap[0] = (p[0] == 0xff && field1) ? 0xfc : 0xfd;
2215 cap[3] = (p[3] == 0xff && !field1) ? 0xfc : 0xfd;
2229 const uint8_t *p,
int buf_size)
2231 const uint8_t *buf_end = p + buf_size;
2234 if (buf_end - p >= 5 &&
2235 p[0] ==
'D' && p[1] ==
'T' && p[2] ==
'G' && p[3] ==
'1') {
2243 if (buf_end - p < 1)
2247 }
else if (buf_end - p >= 6 &&
2248 p[0] ==
'J' && p[1] ==
'P' && p[2] ==
'3' && p[3] ==
'D' &&
2251 const uint8_t S3D_video_format_type = p[5] & 0x7F;
2253 if (S3D_video_format_type == 0x03 ||
2254 S3D_video_format_type == 0x04 ||
2255 S3D_video_format_type == 0x08 ||
2256 S3D_video_format_type == 0x23) {
2261 switch (S3D_video_format_type) {
2282 const uint8_t *buf,
int buf_size)
2287 int time_code_hours, time_code_minutes;
2288 int time_code_seconds, time_code_pictures;
2309 "GOP (%2d:%02d:%02d.[%02d]) closed_gop=%d broken_link=%d\n",
2310 time_code_hours, time_code_minutes, time_code_seconds,
2311 time_code_pictures, s1->
closed_gop, broken_link);
2315 int *got_output,
const uint8_t *buf,
int buf_size)
2320 const uint8_t *buf_end = buf + buf_size;
2321 int ret, input_size;
2326 uint32_t start_code = -1;
2328 if (start_code > 0x1ff) {
2355 input_size = buf_end - buf_ptr;
2359 start_code, buf_ptr - buf, input_size);
2362 switch (start_code) {
2364 if (last_code == 0) {
2369 "ignoring SEQ_START_CODE after %X\n", last_code);
2397 "mpeg_decode_postinit() failure\n");
2408 "ignoring pic after %X\n", last_code);
2418 if (last_code == 0) {
2422 "ignoring seq ext after %X\n", last_code);
2441 "ignoring pic cod ext after %X\n", last_code);
2452 if (last_code == 0) {
2458 "ignoring GOP_START_CODE after %X\n", last_code);
2475 "slice below image (%d >= %d)\n", mb_y, s2->
mb_height);
2512 if (mb_y < avctx->skip_top ||
2532 "current_picture not initialized\n");
2542 if (threshold <= mb_y) {
2584 int buf_size = avpkt->
size;
2588 av_dlog(avctx,
"fill_buffer\n");
2609 (
const uint8_t **) &buf, &buf_size) < 0)
2626 return decode_chunks(avctx, picture, got_output, buf, buf_size);
2662 .
name =
"mpeg1video",
2678 .
name =
"mpeg2video",
2694 #if CONFIG_MPEG_XVMC_DECODER
2702 av_dlog(avctx,
"mpeg12.c: XvMC decoder will work better if SLICE_FLAG_ALLOW_FIELD is set\n");
2707 avctx->xvmc_acceleration = 2;
2712 AVCodec ff_mpeg_xvmc_decoder = {
2713 .
name =
"mpegvideo_xvmc",
2716 .id = AV_CODEC_ID_MPEG2VIDEO_XVMC,
2718 .
init = mpeg_mc_decode_init,