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
1187 if (avctx->xvmc_acceleration)
1188 return avctx->
get_format(avctx, pixfmt_xvmc_mpg2_420);
1289 s->avctx->sample_aspect_ratio =
1301 if (avctx->hwaccel && avctx->idct_algo ==
FF_IDCT_AUTO)
1307 memcpy(old_permutation, s->dsp.idct_permutation, 64 *
sizeof(
uint8_t));
1317 s1->mpeg_enc_ctx_allocated = 1;
1327 int ref, f_code, vbv_delay;
1359 "vbv_delay %d, ref %d type:%d\n", vbv_delay, ref, s->
pict_type);
1369 int horiz_size_ext, vert_size_ext;
1379 s->
width |= (horiz_size_ext << 12);
1380 s->
height |= (vert_size_ext << 12);
1382 s->
bit_rate += (bit_rate_ext << 18) * 400;
1398 "profile: %d, level: %d vbv buffer: %d, bitrate:%d\n",
1406 int color_description, w, h;
1410 if (color_description) {
1446 for (i = 0; i < nofco; i++) {
1461 uint16_t matrix1[64],
int intra)
1465 for (i = 0; i < 64; i++) {
1472 if (intra && i == 0 && v != 8) {
1508 "Missing picture start code, guessing missing values\n");
1534 "interlaced frame in progressive sequence, ignoring\n");
1540 "picture_structure %d invalid, ignoring\n",
1642 "hardware accelerator failed to decode first field\n");
1645 for (i = 0; i < 4; i++) {
1671 #define DECODE_SLICE_ERROR -1
1672 #define DECODE_SLICE_OK 0
1681 const uint8_t **buf,
int buf_size)
1689 assert(mb_y < s->mb_height);
1736 const uint8_t *buf_end, *buf_start = *buf - 4;
1737 int start_code = -1;
1739 if (buf_end < *buf + buf_size)
1756 "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",
1791 int motion_x, motion_y, dir, i;
1793 for (i = 0; i < 2; i++) {
1794 for (dir = 0; dir < 2; dir++) {
1797 motion_x = motion_y = 0;
1800 motion_x = s->
mv[dir][0][0];
1801 motion_y = s->
mv[dir][0][1];
1803 motion_x = s->
mv[dir][i][0];
1804 motion_y = s->
mv[dir][i][1];
1828 const int mb_size = 16;
1834 s->
mb_y += 1 << field_pic;
1873 }
else if (code == 35) {
1890 "skipped MB in I frame at %d %d\n", s->
mb_x, s->
mb_y);
1896 for (i = 0; i < 12; i++)
1905 s->
mv[0][0][0] = s->
mv[0][0][1] = 0;
1935 uint32_t start_code;
1940 av_dlog(c,
"ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n",
1964 if (mb_y < 0 || mb_y >= s->
end_mb_y)
1984 "hardware accelerator failed to decode picture\n");
2027 const uint8_t *buf,
int buf_size)
2038 if (width == 0 || height == 0) {
2040 "Invalid horizontal or vertical size value.\n");
2066 for (i = 0; i < 64; i++) {
2076 for (i = 0; i < 64; i++) {
2139 for (i = 0; i < 64; i++) {
2163 const uint8_t *p,
int buf_size)
2167 if (buf_size >= 6 &&
2168 p[0] ==
'G' && p[1] ==
'A' && p[2] ==
'9' && p[3] ==
'4' &&
2169 p[4] == 3 && (p[5] & 0x40)) {
2171 int cc_count = p[5] & 0x1f;
2172 if (cc_count > 0 && buf_size >= 7 + cc_count * 3) {
2180 }
else if (buf_size >= 11 &&
2181 p[0] ==
'C' && p[1] ==
'C' && p[2] == 0x01 && p[3] == 0xf8) {
2187 for (i = 5; i + 6 <= buf_size && ((p[i] & 0xfe) == 0xfe); i += 6)
2195 uint8_t field1 = !!(p[4] & 0x80);
2198 for (i = 0; i < cc_count; i++) {
2199 cap[0] = (p[0] == 0xff && field1) ? 0xfc : 0xfd;
2202 cap[3] = (p[3] == 0xff && !field1) ? 0xfc : 0xfd;
2216 const uint8_t *p,
int buf_size)
2218 const uint8_t *buf_end = p + buf_size;
2221 if (buf_end - p >= 5 &&
2222 p[0] ==
'D' && p[1] ==
'T' && p[2] ==
'G' && p[3] ==
'1') {
2230 if (buf_end - p < 1)
2234 }
else if (buf_end - p >= 6 &&
2235 p[0] ==
'J' && p[1] ==
'P' && p[2] ==
'3' && p[3] ==
'D' &&
2238 const uint8_t S3D_video_format_type = p[5] & 0x7F;
2240 if (S3D_video_format_type == 0x03 ||
2241 S3D_video_format_type == 0x04 ||
2242 S3D_video_format_type == 0x08 ||
2243 S3D_video_format_type == 0x23) {
2248 switch (S3D_video_format_type) {
2269 const uint8_t *buf,
int buf_size)
2274 int time_code_hours, time_code_minutes;
2275 int time_code_seconds, time_code_pictures;
2296 "GOP (%2d:%02d:%02d.[%02d]) closed_gop=%d broken_link=%d\n",
2297 time_code_hours, time_code_minutes, time_code_seconds,
2298 time_code_pictures, s1->
closed_gop, broken_link);
2302 int *got_output,
const uint8_t *buf,
int buf_size)
2307 const uint8_t *buf_end = buf + buf_size;
2308 int ret, input_size;
2313 uint32_t start_code = -1;
2315 if (start_code > 0x1ff) {
2342 input_size = buf_end - buf_ptr;
2346 start_code, buf_ptr - buf, input_size);
2349 switch (start_code) {
2351 if (last_code == 0) {
2356 "ignoring SEQ_START_CODE after %X\n", last_code);
2384 "mpeg_decode_postinit() failure\n");
2395 "ignoring pic after %X\n", last_code);
2405 if (last_code == 0) {
2409 "ignoring seq ext after %X\n", last_code);
2428 "ignoring pic cod ext after %X\n", last_code);
2439 if (last_code == 0) {
2445 "ignoring GOP_START_CODE after %X\n", last_code);
2462 "slice below image (%d >= %d)\n", mb_y, s2->
mb_height);
2499 if (mb_y < avctx->skip_top ||
2519 "current_picture not initialized\n");
2529 if (threshold <= mb_y) {
2571 int buf_size = avpkt->
size;
2575 av_dlog(avctx,
"fill_buffer\n");
2596 (
const uint8_t **) &buf, &buf_size) < 0)
2613 return decode_chunks(avctx, picture, got_output, buf, buf_size);
2649 .
name =
"mpeg1video",
2665 .
name =
"mpeg2video",
2681 #if CONFIG_MPEG_XVMC_DECODER
2689 av_dlog(avctx,
"mpeg12.c: XvMC decoder will work better if SLICE_FLAG_ALLOW_FIELD is set\n");
2694 avctx->xvmc_acceleration = 2;
2699 AVCodec ff_mpeg_xvmc_decoder = {
2700 .
name =
"mpegvideo_xvmc",
2703 .id = AV_CODEC_ID_MPEG2VIDEO_XVMC,
2705 .
init = mpeg_mc_decode_init,