28 #define UNCHECKED_BITSTREAM_READER 1 
   73 #define MB_TYPE_ZERO_MV   0x20000000 
  100      0,  1,  2,  3,  4,  5,   6,   7,
 
  101      8, 10, 12, 14, 16, 18,  20,  22,
 
  102     24, 28, 32, 36, 40, 44,  48,  52,
 
  103     56, 64, 72, 80, 88, 96, 104, 112,
 
  121         val  = (val - 1) << shift;
 
  133 #define check_scantable_index(ctx, x)                                         \ 
  136             av_log(ctx->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n",     \ 
  137                    ctx->mb_x, ctx->mb_y);                                     \ 
  138             return AVERROR_INVALIDDATA;                                       \ 
  150     const int qscale             = s->
qscale;
 
  153     component = (n <= 3 ? 0 : n - 4 + 1);
 
  160     block[0] = dc * quant_matrix[0];
 
  178                 level = (level * qscale * quant_matrix[j]) >> 4;
 
  179                 level = (level - 1) | 1;
 
  193                 } 
else if (level == 0) {
 
  202                     level = (level * qscale * quant_matrix[j]) >> 4;
 
  203                     level = (level - 1) | 1;
 
  206                     level = (level * qscale * quant_matrix[j]) >> 4;
 
  207                     level = (level - 1) | 1;
 
  237     const int qscale             = s->
qscale;
 
  245             level = (3 * qscale * quant_matrix[0]) >> 5;
 
  246             level = (level - 1) | 1;
 
  264                 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
 
  265                 level = (level - 1) | 1;
 
  279                 } 
else if (level == 0) {
 
  288                     level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
 
  289                     level = (level - 1) | 1;
 
  292                     level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
 
  293                     level = (level - 1) | 1;
 
  321     const int qscale         = s->
qscale;
 
  329             level = (3 * qscale) >> 1;
 
  330             level = (level - 1) | 1;
 
  349                 level = ((level * 2 + 1) * qscale) >> 1;
 
  350                 level = (level - 1) | 1;
 
  364                 } 
else if (level == 0) {
 
  373                     level = ((level * 2 + 1) * qscale) >> 1;
 
  374                     level = (level - 1) | 1;
 
  377                     level = ((level * 2 + 1) * qscale) >> 1;
 
  378                     level = (level - 1) | 1;
 
  401     const uint16_t *quant_matrix;
 
  402     const int qscale = s->
qscale;
 
  418             level = (3 * qscale * quant_matrix[0]) >> 5;
 
  438                 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
 
  454                     level = ((-level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
 
  457                     level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
 
  471     block[63] ^= (mismatch & 1);
 
  488     const int qscale         = s->
qscale;
 
  495         level = (3 * qscale) >> 1;
 
  512             level = ((level * 2 + 1) * qscale) >> 1;
 
  527                 level = ((-level * 2 + 1) * qscale) >> 1;
 
  530                 level = ((level * 2 + 1) * qscale) >> 1;
 
  554     const uint16_t *quant_matrix;
 
  555     const int qscale = s->
qscale;
 
  564         component    = (n & 1) + 1;
 
  574     mismatch = block[0] ^ 1;
 
  591             } 
else if (level != 0) {
 
  595                 level = (level * qscale * quant_matrix[j]) >> 4;
 
  610                     level = (-level * qscale * quant_matrix[j]) >> 4;
 
  613                     level = (level * qscale * quant_matrix[j]) >> 4;
 
  622     block[63] ^= mismatch & 1;
 
  640     const uint16_t *quant_matrix;
 
  641     const int qscale = s->
qscale;
 
  649         component    = (n & 1) + 1;
 
  672             if (level >= 64 || i > 63) {
 
  674             } 
else if (level != 0) {
 
  677                 level = (level * qscale * quant_matrix[j]) >> 4;
 
  691                     level = (-level * qscale * quant_matrix[j]) >> 4;
 
  694                     level = (level * qscale * quant_matrix[j]) >> 4;
 
  736     int i, j, k, cbp, 
val, mb_type, motion_type;
 
  764             if ((s->
mv[0][0][0] | s->
mv[0][0][1] | s->
mv[1][0][0] | s->
mv[1][0][1]) == 0)
 
  777                        "invalid mb type in I Frame at %d %d\n",
 
  790                    "invalid mb type in P Frame at %d %d\n", s->
mb_x, s->
mb_y);
 
  799                    "invalid mb type in B Frame at %d %d\n", s->
mb_x, s->
mb_y);
 
  843         if ((CONFIG_MPEG1_XVMC_HWACCEL || CONFIG_MPEG2_XVMC_HWACCEL) && s->
pack_pblocks)
 
  848                 for (i = 0; i < 6; i++)
 
  851                 for (i = 0; i < mb_block_count; i++)
 
  856             for (i = 0; i < 6; i++)
 
  901             s->
mv_dir = (mb_type >> 13) & 3;
 
  903             switch (motion_type) {
 
  908                     for (i = 0; i < 2; i++) {
 
  923                                 s->
mv[i][0][0] <<= 1;
 
  924                                 s->
mv[i][0][1] <<= 1;
 
  931                     for (i = 0; i < 2; i++) {
 
  934                             for (j = 0; j < 2; j++) {
 
  936                                 for (k = 0; k < 2; k++) {
 
  940                                     s->
mv[i][j][k]      = 
val;
 
  951                     for (i = 0; i < 2; i++) {
 
  953                             for (j = 0; j < 2; j++) {
 
  958                                 s->
mv[i][j][0]      = 
val;
 
  963                                 s->
mv[i][j][1]      = 
val;
 
  971                     for (i = 0; i < 2; i++) {
 
  974                             for (k = 0; k < 2; k++) {
 
  979                                 s->
mv[i][0][k]      = 
val;
 
  991                 for (i = 0; i < 2; i++) {
 
  993                         int dmx, dmy, mx, my, 
m;
 
 1002                                                  s->
last_mv[i][0][1] >> my_shift);
 
 1006                         s->
last_mv[i][0][1] = my << my_shift;
 
 1007                         s->
last_mv[i][1][1] = my << my_shift;
 
 1009                         s->
mv[i][0][0] = mx;
 
 1010                         s->
mv[i][0][1] = my;
 
 1011                         s->
mv[i][1][0] = mx; 
 
 1012                         s->
mv[i][1][1] = my; 
 
 1021                             s->
mv[i][2][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
 
 1022                             s->
mv[i][2][1] = ((my * m + (my > 0)) >> 1) + dmy - 1;
 
 1024                             s->
mv[i][3][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
 
 1025                             s->
mv[i][3][1] = ((my * m + (my > 0)) >> 1) + dmy + 1;
 
 1029                             s->
mv[i][2][0] = ((mx + (mx > 0)) >> 1) + dmx;
 
 1030                             s->
mv[i][2][1] = ((my + (my > 0)) >> 1) + dmy;
 
 1041                        "00 motion_type at %d %d\n", s->
mb_x, s->
mb_y);
 
 1051             if (mb_block_count > 6) {
 
 1052                 cbp <<= mb_block_count - 6;
 
 1058                        "invalid cbp %d at %d %d\n", cbp, s->
mb_x, s->
mb_y);
 
 1063             if ((CONFIG_MPEG1_XVMC_HWACCEL || CONFIG_MPEG2_XVMC_HWACCEL) && s->
pack_pblocks)
 
 1068                     for (i = 0; i < 6; i++) {
 
 1076                     cbp <<= 12 - mb_block_count;
 
 1078                     for (i = 0; i < mb_block_count; i++) {
 
 1079                         if (cbp & (1 << 11)) {
 
 1090                     for (i = 0; i < 6; i++) {
 
 1098                     for (i = 0; i < 6; i++) {
 
 1110             for (i = 0; i < 12; i++)
 
 1155     if (avctx == avctx_from               ||
 
 1156         !ctx_from->mpeg_enc_ctx_allocated ||
 
 1157         !
s1->context_initialized)
 
 1176     uint16_t temp_matrix[64];
 
 1179     memcpy(temp_matrix, matrix, 64 * 
sizeof(uint16_t));
 
 1181     for (i = 0; i < 64; i++)
 
 1182         matrix[new_perm[i]] = temp_matrix[old_perm[i]];
 
 1186 #if CONFIG_MPEG1_XVMC_HWACCEL 
 1189 #if CONFIG_MPEG1_VDPAU_HWACCEL 
 1198 #if CONFIG_MPEG2_XVMC_HWACCEL 
 1201 #if CONFIG_MPEG2_VDPAU_HWACCEL 
 1205 #if CONFIG_MPEG2_DXVA2_HWACCEL 
 1208 #if CONFIG_MPEG2_D3D11VA_HWACCEL 
 1211 #if CONFIG_MPEG2_VAAPI_HWACCEL 
 1266         avctx->xvmc_acceleration = 2;
 
 1310                 ff_dlog(avctx, 
"aspect A %d/%d\n",
 
 1317             s->avctx->sample_aspect_ratio =
 
 1323                            avctx->sample_aspect_ratio) < 0) {
 
 1325                 avctx->sample_aspect_ratio.num,
 
 1326                 avctx->sample_aspect_ratio.den);
 
 1327         avctx->sample_aspect_ratio = (
AVRational){ 0, 1 };
 
 1330     if ((
s1->mpeg_enc_ctx_allocated == 0)                   ||
 
 1331         avctx->coded_width       != 
s->width                ||
 
 1332         avctx->coded_height      != 
s->height               ||
 
 1333         s1->save_width           != 
s->width                ||
 
 1334         s1->save_height          != 
s->height               ||
 
 1335         av_cmp_q(
s1->save_aspect, 
s->avctx->sample_aspect_ratio) ||
 
 1336         (
s1->save_progressive_seq != 
s->progressive_sequence && 
FFALIGN(
s->height, 16) != 
FFALIGN(
s->height, 32)) ||
 
 1338         if (
s1->mpeg_enc_ctx_allocated) {
 
 1340             s->parse_context.buffer = 0;
 
 1342             s->parse_context = pc;
 
 1343             s1->mpeg_enc_ctx_allocated = 0;
 
 1351             avctx->rc_max_rate = 
s->bit_rate;
 
 1353                    (
s->bit_rate != 0x3FFFF*400 || 
s->vbv_delay != 0xFFFF)) {
 
 1354             avctx->bit_rate = 
s->bit_rate;
 
 1356         s1->save_aspect          = 
s->avctx->sample_aspect_ratio;
 
 1357         s1->save_width           = 
s->width;
 
 1358         s1->save_height          = 
s->height;
 
 1359         s1->save_progressive_seq = 
s->progressive_sequence;
 
 1363         avctx->has_b_frames = !
s->low_delay;
 
 1368             avctx->ticks_per_frame     = 1;
 
 1374                       &
s->avctx->framerate.den,
 
 1378             avctx->ticks_per_frame = 2;
 
 1380             switch (
s->chroma_format) {
 
 1392         memcpy(old_permutation, 
s->idsp.idct_permutation, 64 * 
sizeof(
uint8_t));
 
 1403         s1->mpeg_enc_ctx_allocated = 1;
 
 1413     int ref, f_code, vbv_delay;
 
 1448                "vbv_delay %d, ref %d type:%d\n", vbv_delay, ref, s->
pict_type);
 
 1458     int horiz_size_ext, vert_size_ext;
 
 1468     s->
width  |= (horiz_size_ext << 12);
 
 1469     s->
height |= (vert_size_ext  << 12);
 
 1471     s->
bit_rate += (bit_rate_ext << 18) * 400;
 
 1487                "profile: %d, level: %d ps: %d cf:%d vbv buffer: %d, bitrate:%d\n",
 
 1495     int color_description, w, 
h;
 
 1499     if (color_description) {
 
 1535     for (i = 0; i < nofco; i++) {
 
 1544                "pde (%"PRId16
",%"PRId16
") (%"PRId16
",%"PRId16
") (%"PRId16
",%"PRId16
")\n",
 
 1551                        uint16_t matrix1[64], 
int intra)
 
 1555     for (i = 0; i < 64; i++) {
 
 1562         if (intra && i == 0 && v != 8) {
 
 1598                "Missing picture start code, guessing missing values\n");
 
 1724                        "hardware accelerator failed to decode first field\n");
 
 1727         for (i = 0; i < 4; i++) {
 
 1743 #define DECODE_SLICE_ERROR -1 
 1744 #define DECODE_SLICE_OK     0 
 1812         const uint8_t *buf_end, *buf_start = *buf - 4; 
 
 1815         if (buf_end < *buf + buf_size)
 
 1832                    "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",
 
 1852         if ((CONFIG_MPEG1_XVMC_HWACCEL || CONFIG_MPEG2_XVMC_HWACCEL) && s->
pack_pblocks)
 
 1863             int motion_x, motion_y, dir, i;
 
 1865             for (i = 0; i < 2; i++) {
 
 1866                 for (dir = 0; dir < 2; dir++) {
 
 1869                         motion_x = motion_y = 0;
 
 1872                         motion_x = s->
mv[dir][0][0];
 
 1873                         motion_y = s->
mv[dir][0][1];
 
 1875                         motion_x = s->
mv[dir][i][0];
 
 1876                         motion_y = s->
mv[dir][i][1];
 
 1906             s->
mb_y += 1 << field_pic;
 
 1918                 if (left >= 32 && !is_d10) {
 
 1966                     } 
else if (code == 35) {
 
 1983                            "skipped MB in I frame at %d %d\n", s->
mb_x, s->
mb_y);
 
 1989                 for (i = 0; i < 12; i++)
 
 1998                     s->
mv[0][0][0]        = s->
mv[0][0][1]      = 0;
 
 2037         ff_dlog(c, 
"ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n",
 
 2060             mb_y += (*buf&0xE0)<<2;
 
 2064         if (mb_y < 0 || mb_y >= s->
end_mb_y)
 
 2084                    "hardware accelerator failed to decode picture\n");
 
 2133     if (width == 0 || height == 0) {
 
 2135                "Invalid horizontal or vertical size value.\n");
 
 2165         for (i = 0; i < 64; i++) {
 
 2175         for (i = 0; i < 64; i++) {
 
 2234     for (i = 0; i < 64; i++) {
 
 2264                               const uint8_t *p, 
int buf_size)
 
 2268     if (buf_size >= 6 &&
 
 2269         p[0] == 
'G' && p[1] == 
'A' && p[2] == 
'9' && p[3] == 
'4' &&
 
 2270         p[4] == 3 && (p[5] & 0x40)) {
 
 2272         int cc_count = p[5] & 0x1f;
 
 2273         if (cc_count > 0 && buf_size >= 7 + cc_count * 3) {
 
 2281     } 
else if (buf_size >= 11 &&
 
 2282                p[0] == 
'C' && p[1] == 
'C' && p[2] == 0x01 && p[3] == 0xf8) {
 
 2288         for (i = 5; i + 6 <= buf_size && ((p[i] & 0xfe) == 0xfe); i += 6)
 
 2296                 uint8_t field1 = !!(p[4] & 0x80);
 
 2299                 for (i = 0; i < cc_count; i++) {
 
 2300                     cap[0] = (p[0] == 0xff && field1) ? 0xfc : 0xfd;
 
 2303                     cap[3] = (p[3] == 0xff && !field1) ? 0xfc : 0xfd;
 
 2317                                   const uint8_t *p, 
int buf_size)
 
 2320     const uint8_t *buf_end = p + buf_size;
 
 2325     for(i=0; !(!p[i-2] && !p[i-1] && p[i]==1) && i<buf_size; i++){
 
 2334             if (!memcmp(p+i, 
"\0TMPGEXS\0", 9)){
 
 2339     if (buf_end - p >= 5 &&
 
 2340         p[0] == 
'D' && p[1] == 
'T' && p[2] == 
'G' && p[3] == 
'1') {
 
 2348             if (buf_end - p < 1)
 
 2356             s1->
afd     = p[0] & 0x0f;
 
 2358     } 
else if (buf_end - p >= 6 &&
 
 2359                p[0] == 
'J' && p[1] == 
'P' && p[2] == 
'3' && p[3] == 
'D' &&
 
 2362         const uint8_t S3D_video_format_type = p[5] & 0x7F;
 
 2364         if (S3D_video_format_type == 0x03 ||
 
 2365             S3D_video_format_type == 0x04 ||
 
 2366             S3D_video_format_type == 0x08 ||
 
 2367             S3D_video_format_type == 0x23) {
 
 2371             switch (S3D_video_format_type) {
 
 2413                "GOP (%s) closed_gop=%d broken_link=%d\n",
 
 2419                          int *got_output, 
const uint8_t *
buf, 
int buf_size)
 
 2424     const uint8_t *buf_end = buf + buf_size;
 
 2425     int ret, input_size;
 
 2426     int last_code = 0, skip_frame = 0;
 
 2427     int picture_start_code_seen = 0;
 
 2433         if (start_code > 0x1ff) {
 
 2448                 if ((CONFIG_MPEG_VDPAU_DECODER || CONFIG_MPEG1_VDPAU_DECODER)
 
 2469         input_size = buf_end - buf_ptr;
 
 2473                    start_code, buf_ptr - buf, input_size);
 
 2476         switch (start_code) {
 
 2478             if (last_code == 0) {
 
 2484                        "ignoring SEQ_START_CODE after %X\n", last_code);
 
 2497             picture_start_code_seen = 1;
 
 2524                            "mpeg_decode_postinit() failure\n");
 
 2535                        "ignoring pic after %X\n", last_code);
 
 2545                 if (last_code == 0) {
 
 2549                            "ignoring seq ext after %X\n", last_code);
 
 2568                            "ignoring pic cod ext after %X\n", last_code);
 
 2579             if (last_code == 0) {
 
 2585                        "ignoring GOP_START_CODE after %X\n", last_code);
 
 2596                            "interlaced frame in progressive sequence, ignoring\n");
 
 2602                            "picture_structure %d invalid, ignoring\n",
 
 2625                     mb_y += (*buf_ptr&0xE0)<<2;
 
 2631                 if (buf_end - buf_ptr < 2) {
 
 2638                            "slice below image (%d >= %d)\n", mb_y, s2->
mb_height);
 
 2675                     if (mb_y < avctx->skip_top ||
 
 2695                            "current_picture not initialized\n");
 
 2711                     if (threshold <= mb_y) {
 
 2754     int buf_size = avpkt->
size;
 
 2778                              (
const uint8_t **) &buf, &buf_size) < 0)
 
 2804     ret = 
decode_chunks(avctx, picture, got_output, buf, buf_size);
 
 2805     if (ret<0 || *got_output)
 
 2843     .
name                  = 
"mpeg1video",
 
 2860     .
name           = 
"mpeg2video",
 
 2878     .
name           = 
"mpegvideo",
 
 2892 #if CONFIG_MPEG_XVMC_DECODER 
 2900         ff_dlog(avctx, 
"mpeg12.c: XvMC decoder will work better if SLICE_FLAG_ALLOW_FIELD is set\n");
 
 2905     avctx->xvmc_acceleration = 2; 
 
 2910 AVCodec ff_mpeg_xvmc_decoder = {
 
 2911     .
name           = 
"mpegvideo_xvmc",
 
 2914     .id             = AV_CODEC_ID_MPEG2VIDEO_XVMC,
 
 2916     .
init           = mpeg_mc_decode_init,
 
 2927 #if CONFIG_MPEG_VDPAU_DECODER 
 2928 AVCodec ff_mpeg_vdpau_decoder = {
 
 2929     .
name           = 
"mpegvideo_vdpau",
 
 2943 #if CONFIG_MPEG1_VDPAU_DECODER 
 2944 AVCodec ff_mpeg1_vdpau_decoder = {
 
 2945     .
name           = 
"mpeg1video_vdpau",
 
static const uint32_t btype2mb_type[11]
const uint16_t ff_mpeg1_default_non_intra_matrix[64]
const struct AVCodec * codec
const char const char void * val
discard all frames except keyframes 
void ff_init_block_index(MpegEncContext *s)
int(* start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size)
Called at the beginning of each frame or field picture. 
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
#define CODEC_FLAG2_FAST
Allow non spec compliant speedup tricks. 
#define SLICE_MAX_START_CODE
#define FF_PROFILE_MPEG2_SNR_SCALABLE
static int shift(int a, int b)
mpeg2/4 4:2:0, h264 default for 4:2:0 
This structure describes decoded (raw) audio or video data. 
static void quant_matrix_rebuild(uint16_t *matrix, const uint8_t *old_perm, const uint8_t *new_perm)
ptrdiff_t const GLvoid * data
int start_mb_y
start mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) ...
#define MV_TYPE_FIELD
2 vectors, one per field 
int last_mv[2][2][2]
last MV, used for MV prediction in MPEG1 & B-frame MPEG4 
int ff_mpeg1_decode_block_intra(MpegEncContext *s, int16_t *block, int n)
int coded_width
Bitstream width / height, may be different from width/height e.g. 
static const AVProfile mpeg2_video_profiles[]
static void mpeg_decode_sequence_display_extension(Mpeg1Context *s1)
#define FF_PROFILE_MPEG2_SS
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) 
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits. 
Views are next to each other, but when upscaling apply a checkerboard pattern. 
#define AV_LOG_WARNING
Something somehow does not look correct. 
av_cold void ff_mpeg12_init_vlcs(void)
MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstr...
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context. 
int end_mb_y
end mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) ...
static av_cold int init(AVCodecContext *avctx)
#define CODEC_CAP_TRUNCATED
uint16_t chroma_intra_matrix[64]
int v_edge_pos
horizontal / vertical position of the right/bottom edge (pixel replication) 
uint16_t chroma_inter_matrix[64]
void ff_er_frame_end(ERContext *s)
static int mpeg2_fast_decode_block_non_intra(MpegEncContext *s, int16_t *block, int n)
Note: this function can read out of range and crash for corrupt streams. 
enum AVColorRange color_range
MPEG vs JPEG YUV range. 
#define FF_PROFILE_RESERVED
int repeat_pict
When decoding, this signals how much the picture must be delayed. 
void(* clear_blocks)(int16_t *blocks)
HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the b...
static void mpeg_decode_picture_coding_extension(Mpeg1Context *s1)
#define AV_EF_AGGRESSIVE
consider things that a sane encoder should not do as an error 
void ff_mpeg1_clean_buffers(MpegEncContext *s)
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
AVCodec ff_mpeg1video_decoder
char * av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit)
Get the timecode string from the 25-bit timecode format (MPEG GOP format). 
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals. 
static av_cold int mpeg_decode_init(AVCodecContext *avctx)
static void mpeg_decode_gop(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
#define SLICE_MIN_START_CODE
static int get_dmv(MpegEncContext *s)
static int get_sbits(GetBitContext *s, int n)
int encoding
true if we are encoding (vs decoding) 
Macro definitions for various function/variable attributes. 
enum AVDiscard skip_frame
Skip decoding for selected frames. 
static int mpeg_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from)
struct AVHWAccel * hwaccel
Hardware accelerator in use. 
#define USES_LIST(a, list)
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h)
static const uint32_t ptype2mb_type[7]
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code. 
Stereo 3D type: this structure describes how two videos are packed within a single video surface...
enum OutputFormat out_format
output format 
static av_cold int end(AVCodecContext *avctx)
const float ff_mpeg1_aspect[16]
Multithreading support functions. 
#define CODEC_CAP_HWACCEL_VDPAU
Codec can export data for HW decoding (VDPAU). 
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame. 
#define FF_PROFILE_UNKNOWN
#define FF_PROFILE_MPEG2_MAIN
static int load_matrix(MpegEncContext *s, uint16_t matrix0[64], uint16_t matrix1[64], int intra)
uint8_t * extradata
some codecs need / can use extradata like Huffman tables. 
void ff_mpv_decode_mb(MpegEncContext *s, int16_t block[12][64])
static enum AVPixelFormat mpeg_get_pixelformat(AVCodecContext *avctx)
static int mpeg1_fast_decode_block_inter(MpegEncContext *s, int16_t *block, int n)
Note: this function can read out of range and crash for corrupt streams. 
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
Picture current_picture
copy of the current picture structure. 
The data is the AVPanScan struct defined in libavcodec. 
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
void ff_xvmc_init_block(MpegEncContext *s)
Initialize the block field of the MpegEncContext pointer passed as parameter after making sure that t...
Structure to hold side data for an AVFrame. 
int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar)
Check if the given sample aspect ratio of an image is valid. 
#define PICT_BOTTOM_FIELD
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals. 
static int get_bits_count(const GetBitContext *s)
void ff_xvmc_pack_pblocks(MpegEncContext *s, int cbp)
Fill individual block pointers, so there are no gaps in the data_block array in case not all blocks i...
MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstr...
#define FF_PROFILE_MPEG2_HIGH
av_cold void ff_mpv_idct_init(MpegEncContext *s)
int mb_height
number of MBs horizontally & vertically 
int lowres
low resolution decoding, 1-> 1/2 size, 2->1/4 size 
int codec_tag
internal codec_tag upper case converted from avctx codec_tag 
void ff_thread_finish_setup(AVCodecContext *avctx)
If the codec defines update_thread_context(), call this when they are ready for the next thread to st...
Active Format Description data consisting of a single byte as specified in ETSI TS 101 154 using AVAc...
void ff_vdpau_mpeg_picture_complete(MpegEncContext *s, const uint8_t *buf, int buf_size, int slice_count)
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
static void setup_hwaccel_for_pixfmt(AVCodecContext *avctx)
Libavcodec version macros. 
static int get_bits_left(GetBitContext *gb)
int slice_context_count
number of used thread_contexts 
#define CODEC_FLAG_TRUNCATED
#define UPDATE_CACHE(name, gb)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
int has_b_frames
Size of the frame reordering buffer in the decoder. 
int last_dc[3]
last DC values for MPEG1 
void ff_er_add_slice(ERContext *s, int startx, int starty, int endx, int endy, int status)
Add a slice. 
#define PTRDIFF_SPECIFIER
int mb_skipped
MUST BE SET only during DECODING. 
#define AV_EF_EXPLODE
abort decoding on minor error detection 
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size)
Combine the (truncated) bitstream to a complete frame. 
static void mpeg_decode_sequence_extension(Mpeg1Context *s1)
#define FF_PROFILE_MPEG2_SIMPLE
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static int mpeg1_decode_block_inter(MpegEncContext *s, int16_t *block, int n)
int active_thread_type
Which multithreading methods are in use by the codec. 
AVCodec ff_mpegvideo_decoder
AVRational av_div_q(AVRational b, AVRational c)
Divide one rational by another. 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
ATSC A53 Part 4 Closed Captions. 
static int get_qscale(MpegEncContext *s)
const char * name
Name of the codec implementation. 
static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred)
int width
width and height in 1/16 pel 
int low_delay
no reordering needed / has no b-frames 
static void mpeg_decode_user_data(AVCodecContext *avctx, const uint8_t *p, int buf_size)
Video is not stereoscopic (and metadata has to be there). 
#define CLOSE_READER(name, gb)
void ff_mpv_common_end(MpegEncContext *s)
static int decode_dc(GetBitContext *gb, int component)
Libavcodec external API header. 
#define DECODE_SLICE_ERROR
#define CODEC_FLAG_LOW_DELAY
Force low delay. 
static int check_marker(GetBitContext *s, const char *msg)
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) 
void ff_mpeg_flush(AVCodecContext *avctx)
#define SKIP_BITS(name, gb, num)
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified. 
int resync_mb_x
x position of last resync marker 
int rc_buffer_size
decoder bitstream buffer size 
static int update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction. 
#define MB_PTYPE_VLC_BITS
#define CODEC_FLAG2_SHOW_ALL
Show all frames before the first keyframe. 
common internal API header 
#define FF_DEBUG_STARTCODE
static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size)
static const uint8_t non_linear_qscale[32]
static int mpeg2_decode_block_non_intra(MpegEncContext *s, int16_t *block, int n)
int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type)
int64_t timecode_frame_start
GOP timecode frame start number. 
AVRational av_d2q(double d, int max)
Convert a double precision floating point number to a rational. 
enum AVPictureType pict_type
Picture type of the frame. 
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors. 
#define CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback. 
#define MB_BTYPE_VLC_BITS
static int vcr2_init_sequence(AVCodecContext *avctx)
uint8_t * mbskip_table
used to avoid copy if macroblock skipped (for black regions for example) and used for b-frame encodin...
int idct_algo
IDCT algorithm, see FF_IDCT_* below. 
#define MB_TYPE_INTERLACED
int16_t(*[2] motion_val)[2]
Picture * current_picture_ptr
pointer to the current picture 
void ff_mpeg_er_frame_start(MpegEncContext *s)
static int mpeg_decode_a53_cc(AVCodecContext *avctx, const uint8_t *p, int buf_size)
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2. 
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries. 
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits. 
#define LAST_SKIP_BITS(name, gb, num)
static av_cold int mpeg_decode_end(AVCodecContext *avctx)
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code. 
static void mpeg_decode_quant_matrix_extension(MpegEncContext *s)
int16_t(*[12] pblocks)[64]
int block_last_index[12]
last non zero coefficient in block 
uint8_t idct_permutation[64]
IDCT input permutation. 
int mpeg_enc_ctx_allocated
#define check_scantable_index(ctx, x)
int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
preferred ID for MPEG-1/2 video decoding 
RL_VLC_ELEM * rl_vlc[32]
decoding only 
#define SHOW_UBITS(name, gb, num)
void ff_mpv_decode_defaults(MpegEncContext *s)
Set the given MpegEncContext to defaults for decoding. 
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
static int mpeg1_decode_sequence(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
#define SLICE_FLAG_ALLOW_FIELD
allow draw_horiz_band() with field slices (MPEG2 field pics) 
static const float pred[4]
int first_field
is 1 for the first field of a field picture 0 otherwise 
#define MV_TYPE_16X16
1 vector for the whole mb 
static int mpeg2_decode_block_intra(MpegEncContext *s, int16_t *block, int n)
enum AVStereo3DType type
How views are packed within the video. 
uint16_t inter_matrix[64]
static enum AVPixelFormat mpeg2_hwaccel_pixfmt_list_420[]
int concealment_motion_vectors
struct MpegEncContext * thread_context[MAX_THREADS]
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once. 
AVRational frame_rate_ext
static int mpeg2_fast_decode_block_intra(MpegEncContext *s, int16_t *block, int n)
Note: this function can read out of range and crash for corrupt streams. 
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
main external API structure. 
ScanTable intra_scantable
int height
picture size. must be a multiple of 16 
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). 
#define OPEN_READER(name, gb)
#define MV_TYPE_16X8
2 vectors, one per 16x8 block 
static int mpeg_decode_slice(MpegEncContext *s, int mb_y, const uint8_t **buf, int buf_size)
Decode a slice. 
void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict)
static unsigned int get_bits1(GetBitContext *s)
BYTE int const BYTE int int int height
static void skip_bits1(GetBitContext *s)
#define FF_THREAD_FRAME
Decode more than one frame at once. 
int slice_flags
slice flags 
static const AVProfile profiles[]
static void skip_bits(GetBitContext *s, int n)
AVFrameSideData * av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, int size)
Add a new side data to a frame. 
int closed_gop
MPEG1/2 GOP is closed. 
unsigned int avpriv_toupper4(unsigned int x)
enum AVColorSpace colorspace
YUV colorspace type. 
rational number numerator/denominator 
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic. 
HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface. 
static enum AVPixelFormat mpeg12_pixfmt_list_422[]
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext. 
#define GET_CACHE(name, gb)
const uint16_t ff_mpeg1_default_intra_matrix[256]
int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size, AVCodecParserContext *s)
Find the end of the current frame in the bitstream. 
const uint8_t ff_zigzag_direct[64]
static int mpeg1_decode_block_intra(MpegEncContext *s, int16_t *block, int n)
enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Wrapper around get_format() for frame-multithreaded codecs. 
int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx)
generic function called after decoding the header and before a frame is decoded. 
attribute_deprecated int dtg_active_format
DTG active format information (additional aspect ratio information only used in DVB MPEG-2 transport ...
static int uses_vdpau(AVCodecContext *avctx)
HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer. ...
static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_output, AVPacket *avpkt)
static int decode_chunks(AVCodecContext *avctx, AVFrame *picture, int *got_output, const uint8_t *buf, int buf_size)
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ... 
int bit_rate
wanted bit rate 
static const uint8_t start_code[]
av_cold void ff_mpeg12_common_init(MpegEncContext *s)
Views are on top of each other. 
static av_const int sign_extend(int val, unsigned bits)
int skip_bottom
Number of macroblock rows at the bottom which are skipped. 
AVStereo3D * av_stereo3d_create_side_data(AVFrame *frame)
Allocate a complete AVFrameSideData and add it to the frame. 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
#define FF_DEBUG_PICT_INFO
int mv[2][4][2]
motion vectors for a macroblock first coordinate : 0 = forward 1 = backward second "         : depend...
int b8_stride
2*mb_width+1 used for some 8x8 block arrays to allow simple addressing 
the normal 219*2^(n-8) "MPEG" YUV ranges 
Picture * next_picture_ptr
pointer to the next picture (for bidir pred) 
Views are next to each other. 
struct AVCodecContext * avctx
static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avpkt)
#define SHOW_SBITS(name, gb, num)
discard all non reference 
const AVRational ff_mpeg2_aspect[16]
static enum AVPixelFormat mpeg1_hwaccel_pixfmt_list_420[]
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) 
#define FF_DISABLE_DEPRECATION_WARNINGS
#define CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading. 
common internal api header. 
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
void ff_mpv_decode_init(MpegEncContext *s, AVCodecContext *avctx)
AVCodec ff_mpeg2video_decoder
#define CODEC_FLAG_GRAY
Only decode/encode grayscale. 
static int mpeg_decode_mb(MpegEncContext *s, int16_t block[12][64])
const uint8_t * buffer_end
static void flush(AVCodecContext *avctx)
Picture * last_picture_ptr
pointer to the previous picture. 
#define AV_EF_BITSTREAM
detect bitstream specification deviations 
static int mpeg1_decode_picture(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
const uint8_t ff_alternate_vertical_scan[64]
int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src)
#define SLICE_FLAG_CODED_ORDER
draw_horiz_band() is called in coded order instead of display 
static int slice_end(AVCodecContext *avctx, AVFrame *pict)
Handle slice ends. 
int16_t position[3][2]
position of the top left corner in 1/16 pel for up to 3 fields/frames 
av_cold int ff_mpv_common_init(MpegEncContext *s)
init common structure for both encoder and decoder. 
static int mpeg_decode_postinit(AVCodecContext *avctx)
static av_always_inline int diff(const uint32_t a, const uint32_t b)
av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
int(* execute)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size)
The codec may call this to execute several independent things. 
#define FF_ENABLE_DEPRECATION_WARNINGS
void ff_mpv_frame_end(MpegEncContext *s)
#define MV_TYPE_DMV
2 vectors, special mpeg2 Dual Prime Vectors 
int resync_mb_y
y position of last resync marker 
int16_t(* block)[64]
points to one of the following blocks 
ParseContext parse_context
#define FF_QSCALE_TYPE_MPEG2
VLC_TYPE(* table)[2]
code, bits 
int key_frame
1 -> keyframe, 0-> not 
#define AV_EF_COMPLIANT
consider all spec non compliances as errors 
static const uint8_t * align_get_bits(GetBitContext *s)
MpegEncContext mpeg_enc_ctx
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> dc
uint16_t intra_matrix[64]
matrix transmitted in the bitstream 
uint32_t * mb_type
types and macros are defined in mpegutils.h 
ScanTable inter_scantable
if inter == intra then intra should be used to reduce tha cache usage 
#define PICTURE_START_CODE
static int skip_1stop_8data_bits(GetBitContext *gb)
HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer...
mpeg1 4:2:0, jpeg 4:2:0, h263 4:2:0 
#define FF_PROFILE_MPEG2_422
int(* decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size)
Callback for each slice. 
static int slice_decode_thread(AVCodecContext *c, void *arg)
int(* end_frame)(AVCodecContext *avctx)
Called at the end of each frame or field picture. 
static enum AVPixelFormat mpeg12_pixfmt_list_444[]
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
AVPixelFormat
Pixel format. 
This structure stores compressed data. 
void ff_mpv_report_decode_progress(MpegEncContext *s)
const AVRational ff_mpeg12_frame_rate_tab[16]
static void mpeg_decode_picture_display_extension(Mpeg1Context *s1)
#define AV_TIMECODE_STR_SIZE