71 #define MB_TYPE_ZERO_MV 0x20000000 98 0, 1, 2, 3, 4, 5, 6, 7,
99 8, 10, 12, 14, 16, 18, 20, 22,
100 24, 28, 32, 36, 40, 44, 48, 52,
101 56, 64, 72, 80, 88, 96, 104, 112,
107 int code, sign, val, shift;
119 val = (val - 1) << shift;
131 #define MAX_INDEX (64 - 1) 132 #define check_scantable_index(ctx, x) \ 134 if ((x) > MAX_INDEX) { \ 135 av_log(ctx->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", \ 136 ctx->mb_x, ctx->mb_y); \ 137 return AVERROR_INVALIDDATA; \ 142 int16_t *
block,
int n)
148 const int qscale = s->
qscale;
156 level = (3 * qscale * quant_matrix[0]) >> 5;
157 level = (level - 1) | 1;
176 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
177 level = (level - 1) | 1;
191 }
else if (level == 0) {
201 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
202 level = (level - 1) | 1;
205 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
206 level = (level - 1) | 1;
227 int16_t *
block,
int n)
232 const int qscale = s->
qscale;
240 level = (3 * qscale) >> 1;
241 level = (level - 1) | 1;
261 level = ((level * 2 + 1) * qscale) >> 1;
262 level = (level - 1) | 1;
276 }
else if (level == 0) {
286 level = ((level * 2 + 1) * qscale) >> 1;
287 level = (level - 1) | 1;
290 level = ((level * 2 + 1) * qscale) >> 1;
291 level = (level - 1) | 1;
312 int16_t *
block,
int n)
317 const uint16_t *quant_matrix;
318 const int qscale = s->
qscale;
334 level = (3 * qscale * quant_matrix[0]) >> 5;
355 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
372 level = ((-level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
375 level = ((level * 2 + 1) * qscale * quant_matrix[j]) >> 5;
389 block[63] ^= (mismatch & 1);
398 int16_t *
block,
int n)
403 const int qscale = s->
qscale;
410 level = (3 * qscale) >> 1;
429 level = ((level * 2 + 1) * qscale) >> 1;
446 level = ((-level * 2 + 1) * qscale) >> 1;
449 level = ((level * 2 + 1) * qscale) >> 1;
469 int16_t *
block,
int n)
475 const uint16_t *quant_matrix;
476 const int qscale = s->
qscale;
485 component = (n & 1) + 1;
495 mismatch = block[0] ^ 1;
512 }
else if (level != 0) {
517 level = (level * qscale * quant_matrix[j]) >> 4;
533 level = (-level * qscale * quant_matrix[j]) >> 4;
536 level = (level * qscale * quant_matrix[j]) >> 4;
545 block[63] ^= mismatch & 1;
554 int16_t *
block,
int n)
560 const uint16_t *quant_matrix;
561 const int qscale = s->
qscale;
569 component = (n & 1) + 1;
594 }
else if (level != 0) {
599 level = (level * qscale * quant_matrix[j]) >> 4;
615 level = (-level * qscale * quant_matrix[j]) >> 4;
618 level = (level * qscale * quant_matrix[j]) >> 4;
661 int i, j, k, cbp, val, mb_type, motion_type;
688 if ((s->
mv[0][0][0] | s->
mv[0][0][1] | s->
mv[1][0][0] | s->
mv[1][0][1]) == 0)
701 "Invalid mb type in I-frame at %d %d\n",
714 "Invalid mb type in P-frame at %d %d\n", s->
mb_x, s->
mb_y);
723 "Invalid mb type in B-frame at %d %d\n", s->
mb_x, s->
mb_y);
776 for (i = 0; i < 6; i++)
779 for (i = 0; i < mb_block_count; i++)
784 for (i = 0; i < 6; i++) {
839 s->
mv_dir = (mb_type >> 13) & 3;
841 switch (motion_type) {
846 for (i = 0; i < 2; i++) {
861 s->
mv[i][0][0] <<= 1;
862 s->
mv[i][0][1] <<= 1;
869 for (i = 0; i < 2; i++) {
872 for (j = 0; j < 2; j++) {
874 for (k = 0; k < 2; k++) {
878 s->
mv[i][j][k] = val;
889 for (i = 0; i < 2; i++) {
891 for (j = 0; j < 2; j++) {
896 s->
mv[i][j][0] = val;
900 s->
last_mv[i][j][1] = val << 1;
901 s->
mv[i][j][1] = val;
908 for (i = 0; i < 2; i++) {
911 for (k = 0; k < 2; k++) {
916 s->
mv[i][0][k] = val;
924 for (i = 0; i < 2; i++) {
926 int dmx, dmy, mx, my, m;
935 s->
last_mv[i][0][1] >> my_shift);
939 s->
last_mv[i][0][1] = my << my_shift;
940 s->
last_mv[i][1][1] = my << my_shift;
954 s->
mv[i][2][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
955 s->
mv[i][2][1] = ((my * m + (my > 0)) >> 1) + dmy - 1;
957 s->
mv[i][3][0] = ((mx * m + (mx > 0)) >> 1) + dmx;
958 s->
mv[i][3][1] = ((my * m + (my > 0)) >> 1) + dmy + 1;
962 s->
mv[i][2][0] = ((mx + (mx > 0)) >> 1) + dmx;
963 s->
mv[i][2][1] = ((my + (my > 0)) >> 1) + dmy;
974 "00 motion_type at %d %d\n", s->
mb_x, s->
mb_y);
984 if (mb_block_count > 6) {
985 cbp <<= mb_block_count - 6;
991 "invalid cbp at %d %d\n", s->
mb_x, s->
mb_y);
1005 for (i = 0; i < 6; i++) {
1013 cbp <<= 12 - mb_block_count;
1015 for (i = 0; i < mb_block_count; i++) {
1016 if (cbp & (1 << 11)) {
1027 for (i = 0; i < 6; i++) {
1035 for (i = 0; i < 6; i++) {
1047 for (i = 0; i < 12; i++)
1091 if (avctx == avctx_from ||
1092 !ctx_from->mpeg_enc_ctx_allocated ||
1093 !s1->context_initialized)
1102 memcpy(ctx, ctx_from,
sizeof(*ctx));
1115 uint16_t temp_matrix[64];
1118 memcpy(temp_matrix, matrix, 64 *
sizeof(uint16_t));
1120 for (i = 0; i < 64; i++)
1121 matrix[new_perm[i]] = temp_matrix[old_perm[i]];
1133 #if CONFIG_MPEG2_DXVA2_HWACCEL 1136 #if CONFIG_MPEG2_D3D11VA_HWACCEL 1139 #if CONFIG_MPEG2_VAAPI_HWACCEL 1142 #if CONFIG_MPEG1_VDPAU_HWACCEL | CONFIG_MPEG2_VDPAU_HWACCEL 1167 if (avctx->xvmc_acceleration)
1239 s1->pan_scan.height }),
1255 (
AVRational) { s1->pan_scan.width, s1->pan_scan.height });
1307 int ref, f_code, vbv_delay;
1339 "vbv_delay %d, ref %d type:%d\n", vbv_delay, ref, s->
pict_type);
1349 int horiz_size_ext, vert_size_ext;
1359 s->
width |= (horiz_size_ext << 12);
1360 s->
height |= (vert_size_ext << 12);
1363 if (bit_rate_ext < INT_MAX / 400 &&
1364 bit_rate_ext * 400 < INT_MAX - s->
bit_rate) {
1368 bit_rate_ext >> 18);
1387 "profile: %d, level: %d vbv buffer: %d, bitrate:%d\n",
1395 int color_description, w, h;
1399 if (color_description) {
1435 for (i = 0; i < nofco; i++) {
1444 "pde (%"PRId16
",%"PRId16
") (%"PRId16
",%"PRId16
") (%"PRId16
",%"PRId16
")\n",
1451 uint16_t matrix1[64],
int intra)
1455 for (i = 0; i < 64; i++) {
1462 if (intra && i == 0 && v != 8) {
1498 "Missing picture start code, guessing missing values\n");
1524 "interlaced frame in progressive sequence, ignoring\n");
1530 "picture_structure %d invalid, ignoring\n",
1648 "hardware accelerator failed to decode first field\n");
1651 for (i = 0; i < 4; i++) {
1677 #define DECODE_SLICE_ERROR -1 1678 #define DECODE_SLICE_OK 0 1687 const uint8_t **buf,
int buf_size)
1696 assert(mb_y < s->mb_height);
1743 const uint8_t *buf_end, *buf_start = *buf - 4;
1744 int start_code = -1;
1746 if (buf_end < *buf + buf_size)
1763 "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",
1798 int motion_x, motion_y, dir, i;
1800 for (i = 0; i < 2; i++) {
1801 for (dir = 0; dir < 2; dir++) {
1804 motion_x = motion_y = 0;
1807 motion_x = s->
mv[dir][0][0];
1808 motion_y = s->
mv[dir][0][1];
1810 motion_x = s->
mv[dir][i][0];
1811 motion_y = s->
mv[dir][i][1];
1835 const int mb_size = 16;
1841 s->
mb_y += 1 << field_pic;
1880 }
else if (code == 35) {
1897 "skipped MB in I-frame at %d %d\n", s->
mb_x, s->
mb_y);
1903 for (i = 0; i < 12; i++)
1912 s->
mv[0][0][0] = s->
mv[0][0][1] = 0;
1942 uint32_t start_code;
1947 ff_dlog(c,
"ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n",
1971 if (mb_y < 0 || mb_y >= s->
end_mb_y)
1991 "hardware accelerator failed to decode picture\n");
2034 const uint8_t *buf,
int buf_size)
2045 if (width == 0 || height == 0) {
2047 "Invalid horizontal or vertical size value.\n");
2078 for (i = 0; i < 64; i++) {
2088 for (i = 0; i < 64; i++) {
2151 for (i = 0; i < 64; i++) {
2175 const uint8_t *p,
int buf_size)
2179 if (buf_size >= 6 &&
2180 p[0] ==
'G' && p[1] ==
'A' && p[2] ==
'9' && p[3] ==
'4' &&
2181 p[4] == 3 && (p[5] & 0x40)) {
2183 int cc_count = p[5] & 0x1f;
2184 if (cc_count > 0 && buf_size >= 7 + cc_count * 3) {
2192 }
else if (buf_size >= 11 &&
2193 p[0] ==
'C' && p[1] ==
'C' && p[2] == 0x01 && p[3] == 0xf8) {
2199 for (i = 5; i + 6 <= buf_size && ((p[i] & 0xfe) == 0xfe); i += 6)
2207 uint8_t field1 = !!(p[4] & 0x80);
2210 for (i = 0; i < cc_count; i++) {
2211 cap[0] = (p[0] == 0xff && field1) ? 0xfc : 0xfd;
2214 cap[3] = (p[3] == 0xff && !field1) ? 0xfc : 0xfd;
2228 const uint8_t *p,
int buf_size)
2230 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)
2251 s1->
afd = p[0] & 0x0f;
2253 }
else if (buf_end - p >= 6 &&
2254 p[0] ==
'J' && p[1] ==
'P' && p[2] ==
'3' && p[3] ==
'D' &&
2257 const uint8_t S3D_video_format_type = p[5] & 0x7F;
2259 if (S3D_video_format_type == 0x03 ||
2260 S3D_video_format_type == 0x04 ||
2261 S3D_video_format_type == 0x08 ||
2262 S3D_video_format_type == 0x23) {
2266 switch (S3D_video_format_type) {
2287 const uint8_t *buf,
int buf_size)
2292 int time_code_hours, time_code_minutes;
2293 int time_code_seconds, time_code_pictures;
2314 "GOP (%2d:%02d:%02d.[%02d]) closed_gop=%d broken_link=%d\n",
2315 time_code_hours, time_code_minutes, time_code_seconds,
2316 time_code_pictures, s1->
closed_gop, broken_link);
2320 int *got_output,
const uint8_t *buf,
int buf_size)
2325 const uint8_t *buf_end = buf + buf_size;
2326 int ret, input_size;
2331 uint32_t start_code = -1;
2333 if (start_code > 0x1ff) {
2360 input_size = buf_end - buf_ptr;
2364 start_code, buf_ptr - buf, input_size);
2367 switch (start_code) {
2369 if (last_code == 0) {
2374 "ignoring SEQ_START_CODE after %X\n", last_code);
2402 "mpeg_decode_postinit() failure\n");
2413 "ignoring pic after %X\n", last_code);
2423 if (last_code == 0) {
2427 "ignoring seq ext after %X\n", last_code);
2446 "ignoring pic cod ext after %X\n", last_code);
2457 if (last_code == 0) {
2463 "ignoring GOP_START_CODE after %X\n", last_code);
2480 "slice below image (%d >= %d)\n", mb_y, s2->
mb_height);
2517 if (mb_y < avctx->skip_top ||
2537 "current_picture not initialized\n");
2547 if (threshold <= mb_y) {
2589 int buf_size = avpkt->
size;
2593 ff_dlog(avctx,
"fill_buffer\n");
2614 (
const uint8_t **) &buf, &buf_size) < 0)
2631 return decode_chunks(avctx, picture, got_output, buf, buf_size);
2655 .
name =
"mpeg1video",
2671 .
name =
"mpeg2video",
2687 #if CONFIG_MPEG_XVMC_DECODER 2695 ff_dlog(avctx,
"mpeg12.c: XvMC decoder will work better if SLICE_FLAG_ALLOW_FIELD is set\n");
2700 avctx->xvmc_acceleration = 2;
2705 AVCodec ff_mpeg_xvmc_decoder = {
2706 .
name =
"mpegvideo_xvmc",
2709 .id = AV_CODEC_ID_MPEG2VIDEO_XVMC,
2711 .
init = mpeg_mc_decode_init,
static const uint32_t btype2mb_type[11]
const uint16_t ff_mpeg1_default_non_intra_matrix[64]
int ff_xvmc_field_start(MpegEncContext *s, AVCodecContext *avctx)
const struct AVCodec * codec
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
discard all frames except keyframes
void ff_init_block_index(MpegEncContext *s)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define CONFIG_MPEG_XVMC_DECODER
#define SLICE_MAX_START_CODE
#define SLICE_FLAG_ALLOW_FIELD
allow draw_horiz_band() with field slices (MPEG-2 field pics)
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)
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 MPEG-1 & B-frame MPEG-4
int coded_width
Bitstream width / height, may be different from width/height e.g.
static void mpeg_decode_sequence_display_extension(Mpeg1Context *s1)
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)
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) ...
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)
enum AVColorRange color_range
MPEG vs JPEG YUV range.
int repeat_pict
When decoding, this signals how much the picture must be delayed.
av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (%s)\, len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic ? ac->func_descr_generic :ac->func_descr)
static void mpeg_decode_picture_coding_extension(Mpeg1Context *s1)
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
void ff_print_debug_info(MpegEncContext *s, Picture *p)
Print debugging info for the given picture.
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.
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
enum AVDiscard skip_frame
static int mpeg_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from)
struct AVHWAccel * hwaccel
Hardware accelerator in use.
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define USES_LIST(a, list)
void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h)
void ff_xvmc_pack_pblocks(MpegEncContext *s, int cbp)
static const uint32_t ptype2mb_type[7]
Stereo 3D type: this structure describes how two videos are packed within a single video surface...
enum OutputFormat out_format
output format
#define FF_DEBUG_PICT_INFO
const float ff_mpeg1_aspect[16]
Multithreading support functions.
#define AV_CODEC_FLAG_LOW_DELAY
Force low delay.
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
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)
Picture current_picture
copy of the current picture structure.
The data is the AVPanScan struct defined in libavcodec.
#define PICT_BOTTOM_FIELD
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
static int get_bits_count(const GetBitContext *s)
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
Check that the provided sample aspect ratio is valid and set it on the codec context.
av_cold void ff_mpv_idct_init(MpegEncContext *s)
int mb_height
number of MBs horizontally & vertically
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 enum...
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
Libavcodec version macros.
const uint16_t ff_mpeg1_default_intra_matrix[64]
static int get_bits_left(GetBitContext *gb)
int slice_context_count
number of used thread_contexts
#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 MPEG-1
void ff_er_add_slice(ERContext *s, int startx, int starty, int endx, int endy, int status)
Add a slice.
int mb_skipped
MUST BE SET only during DECODING.
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)
void(* clear_blocks)(int16_t *blocks)
#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.
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)
int flags
AV_CODEC_FLAG_*.
XVideo Motion Acceleration via common packet passing.
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)
#define DECODE_SLICE_ERROR
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
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
common internal API header
static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size)
static const uint8_t non_linear_qscale[32]
const AVProfile ff_mpeg2_video_profiles[]
#define AV_CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
static int mpeg2_decode_block_non_intra(MpegEncContext *s, int16_t *block, int n)
int bit_rate
the average bitrate
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 FF_THREAD_FRAME
Decode more than one frame at once.
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...
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
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)
#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)
static int mpeg_decode_a53_cc(AVCodecContext *avctx, const uint8_t *p, int buf_size)
#define MB_BTYPE_VLC_BITS
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
#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 ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
int mpeg_enc_ctx_allocated
#define check_scantable_index(ctx, x)
void ff_xvmc_init_block(MpegEncContext *s)
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.
static int mpeg1_decode_sequence(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
if(ac->has_optimized_func)
static const float pred[4]
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format.
int first_field
is 1 for the first field of a field picture 0 otherwise
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
#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]
int concealment_motion_vectors
struct MpegEncContext * thread_context[MAX_THREADS]
Libavcodec external API header.
int(* end_frame)(AVCodecContext *avctx)
Called at the end of each frame or field picture.
AVRational frame_rate_ext
static int mpeg2_fast_decode_block_intra(MpegEncContext *s, int16_t *block, int n)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
#define AV_CODEC_FLAG2_FAST
Allow non spec compliant speedup tricks.
#define MB_PTYPE_VLC_BITS
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.
static const AVProfile profiles[]
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits1(GetBitContext *s)
int slice_flags
slice flags
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.
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)
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]
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 ...
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, ...
static enum AVPixelFormat pix_fmts[]
int bit_rate
wanted bit rate
av_cold void ff_mpeg12_common_init(MpegEncContext *s)
Views are on top of each other.
#define AV_CODEC_CAP_TRUNCATED
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) #define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac) { } void ff_audio_convert_free(AudioConvert **ac) { if(! *ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);} AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map) { AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;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);return NULL;} return ac;} 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;} else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->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);return ac;} int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in) { int use_generic=1;int len=in->nb_samples;int p;if(ac->dc) { av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (dithered)\", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> dc
static av_const int sign_extend(int val, unsigned bits)
int skip_bottom
Number of macroblock rows at the bottom which are skipped.
int(* decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size)
Callback for each slice.
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.
int mv[2][4][2]
motion vectors for a macroblock first coordinate : 0 = forward 1 = backward second " : depend...
const uint8_t * avpriv_find_start_code(const uint8_t *restrict p, const uint8_t *end, uint32_t *restrict state)
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
int(* start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size)
Called at the beginning of each frame or field picture.
Picture * next_picture_ptr
pointer to the next picture (for bidir pred)
Views are next to each other.
struct AVCodecContext * avctx
#define SHOW_SBITS(name, gb, num)
int ff_mpeg1_decode_block_intra(GetBitContext *gb, const uint16_t *quant_matrix, uint8_t *const scantable, int last_dc[3], int16_t *block, int index, int qscale)
discard all non reference
const AVRational ff_mpeg2_aspect[16]
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
#define FF_DISABLE_DEPRECATION_WARNINGS
common internal api header.
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
AVCodec ff_mpeg2video_decoder
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.
static int mpeg1_decode_picture(AVCodecContext *avctx, const uint8_t *buf, int buf_size)
const uint8_t ff_alternate_vertical_scan[64]
static av_cold int init(AVCodecParserContext *s)
int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src)
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)
av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
#define FF_DEBUG_STARTCODE
#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
VLC_TYPE(* table)[2]
code, bits
int key_frame
1 -> keyframe, 0-> not
int flags2
AV_CODEC_FLAG2_*.
MpegEncContext mpeg_enc_ctx
#define SLICE_FLAG_CODED_ORDER
draw_horiz_band() is called in coded order instead of display
#define AV_CODEC_FLAG_TRUNCATED
Input bitstream might be truncated at a random location instead of only at frame boundaries.
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 the cache usage
#define PICTURE_START_CODE
HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer...
void ff_xvmc_field_end(MpegEncContext *s)
static int slice_decode_thread(AVCodecContext *c, void *arg)
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.
static enum AVPixelFormat mpeg12_pixfmt_list_444[]
AVPixelFormat
Pixel format.
This structure stores compressed data.
void ff_mpv_report_decode_progress(MpegEncContext *s)
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static void mpeg_decode_picture_display_extension(Mpeg1Context *s1)
static enum AVPixelFormat mpeg12_hwaccel_pixfmt_list_420[]
static enum AVDiscard skip_frame
const AVRational ff_mpeg12_frame_rate_tab[]