Go to the documentation of this file.
38 #define CBP_VLC_BITS 9
65 12, 12, 15, 19, 25, 34, 40, 48,
66 12, 12, 18, 22, 27, 44, 47, 46,
67 17, 18, 21, 26, 35, 46, 52, 47,
68 18, 20, 24, 28, 40, 61, 59, 51,
69 20, 24, 32, 43, 50, 72, 72, 63,
70 25, 31, 42, 48, 58, 72, 81, 75,
71 38, 46, 54, 61, 71, 84, 88, 85,
72 50, 61, 65, 68, 79, 78, 86, 91,
76 12, 16, 24, 47, 99, 99, 99, 99,
77 16, 21, 26, 66, 99, 99, 99, 99,
78 24, 26, 56, 99, 99, 99, 99, 99,
79 47, 66, 99, 99, 99, 99, 99, 99,
80 99, 99, 99, 99, 99, 99, 99, 99,
81 99, 99, 99, 99, 99, 99, 99, 99,
82 99, 99, 99, 99, 99, 99, 99, 99,
83 99, 99, 99, 99, 99, 99, 99, 99,
87 0, 1, 8, 9, 16, 2, 3, 10,
88 17, 24, 32, 25, 18, 11, 4, 5,
89 12, 19, 26, 33, 40, 48, 41, 34,
90 27, 20, 13, 6, 7, 14, 21, 28,
91 35, 42, 49, 56, 57, 50, 43, 36,
92 29, 22, 15, 23, 30, 37, 44, 51,
93 58, 59, 52, 45, 38, 31, 39, 46,
94 53, 60, 61, 54, 47, 55, 62, 63,
101 for (
int i = 0;
i < 64;
i++) {
113 const unsigned t4 =
t0 +
t2;
114 const unsigned t5 =
t0 -
t2;
115 const unsigned t6 =
t1 +
t3;
116 const unsigned t7 =
t1 -
t3;
121 const unsigned tC =
t8 + tA;
122 const unsigned tD = (
int)((tB +
t9) * 473
U) >> 8;
123 const unsigned tE = (((
int)(
t9 * -669
U) >> 8) - tC) + tD;
124 const unsigned tF = ((
int)((tA -
t8) * 362
U) >> 8) - tE;
125 const unsigned t10 = (((
int)(tB * 277
U) >> 8) - tD) + tF;
139 for (
int i = 0;
i < 8;
i++) {
159 for (
int i = 0;
i < 8;
i++) {
161 for (
int j = 0; j < 8; j++)
169 const uint8_t *
src,
int in_linesize,
int *
block)
171 for (
int i = 0;
i < 8;
i++) {
191 for (
int i = 0;
i < 8;
i++) {
193 for (
int j = 0; j < 8; j++)
205 const unsigned int t2 = (
int)(
t1 * 473
U) >> 8;
206 const unsigned int t3 =
t2 -
t1;
207 const unsigned int t4 = ((
int)(
t1 * 362
U) >> 8) -
t3;
208 const unsigned int t5 = (((
int)(
t1 * 277
U) >> 8) -
t2) +
t4;
222 for (
int i = 0;
i < 2;
i++) {
223 if ((
block[0x08 +
i]) == 0) {
236 for (
int i = 0;
i < 8;
i++) {
238 for (
int j = 0; j < 8; j++)
242 for (
int j = 0; j < 8; j++)
251 const uint8_t *
src,
int in_linesize,
254 for (
int i = 0;
i < 2;
i++) {
255 if ((
block[0x08 +
i]) == 0) {
268 for (
int i = 0;
i < 8;
i++) {
270 for (
int j = 0; j < 8; j++)
274 for (
int j = 0; j < 8; j++)
284 const uint8_t *
src,
int in_linesize,
287 for (
int i = 0;
i < 8;
i++) {
288 for (
int j = 0; j < 8; j++)
297 int *
block,
int *pfill,
298 uint8_t *dst,
int linesize)
305 s->bdsp.fill_block_tab[1](dst, 128, linesize, 8);
310 block[0] = ((
int)((
unsigned)pfill[0] * qtab[0]) >> 5) + 128;
311 s->bdsp.fill_block_tab[1](dst,
block[0], linesize, 8);
317 block[0] = (unsigned)pfill[0] * qtab[0];
326 block[0] = (unsigned)pfill[0] * qtab[0];
327 for (
int i = 1;
i < 64;
i++)
338 int *
block,
int *pfill,
339 uint8_t *dst,
int linesize,
340 const uint8_t *
src,
int in_linesize)
351 block[0] = (
int)((
unsigned)pfill[0] * qtab[0]) >> 5;
358 block[0] = (unsigned)pfill[0] * qtab[0];
367 block[0] = (unsigned)pfill[0] * qtab[0];
368 for (
int i = 1;
i < 64;
i++)
379 memset(coeffs, 0, nb_codes *
sizeof(*coeffs));
381 for (
int i = 0;
i < nb_codes;) {
387 if (x < (1 <<
value) / 2) {
388 x = (1 << (
value - 1)) + (x & ((1 <<
value) - 1 >> 1));
390 x = -(1 << (
value - 1)) - (x & ((1 <<
value) - 1 >> 1));
417 linesize[0] =
frame->linesize[0];
418 linesize[1] =
frame->linesize[0];
419 linesize[2] =
frame->linesize[0];
420 linesize[3] =
frame->linesize[0];
421 linesize[4] =
frame->linesize[1];
422 linesize[5] =
frame->linesize[2];
424 for (
int y = 0; y < avctx->
height; y += 16) {
426 int pfill[3][1] = { {0} };
438 for (
int x = 0; x < avctx->
width; x += 16) {
439 dst[0] =
frame->data[0] + linesize[0] * y + x;
440 dst[1] =
frame->data[0] + linesize[0] * y + x + 8;
441 dst[2] =
frame->data[0] + linesize[0] * (y + 8) + x;
442 dst[3] =
frame->data[0] + linesize[0] * (y + 8) + x + 8;
443 dst[4] =
frame->data[1] + linesize[4] * (y >> 1) + (x >> 1);
444 dst[5] =
frame->data[2] + linesize[5] * (y >> 1) + (x >> 1);
446 for (
int b = 0;
b < 6;
b++) {
451 pfill[(
b >= 4) + (
b >= 5)],
452 dst[
b], linesize[
b]);
469 const int mask_size = ((avctx->
height >> 4) * (avctx->
width >> 4) * 2 + 7) / 8;
470 uint8_t *dst[6], *
src[6];
483 linesize[0] =
frame->linesize[0];
484 linesize[1] =
frame->linesize[0];
485 linesize[2] =
frame->linesize[0];
486 linesize[3] =
frame->linesize[0];
487 linesize[4] =
frame->linesize[1];
488 linesize[5] =
frame->linesize[2];
507 for (
int y = 0; y < avctx->
height; y += 16) {
509 int pfill[3][1] = { {0} };
530 for (
int x = 0; x < avctx->
width; x += 16) {
541 dst[0] =
frame->data[0] + linesize[0] * y + x;
542 dst[1] =
frame->data[0] + linesize[0] * y + x + 8;
543 dst[2] =
frame->data[0] + linesize[0] * (y + 8) + x;
544 dst[3] =
frame->data[0] + linesize[0] * (y + 8) + x + 8;
545 dst[4] =
frame->data[1] + linesize[4] * (y >> 1) + (x >> 1);
546 dst[5] =
frame->data[2] + linesize[5] * (y >> 1) + (x >> 1);
548 if ((
flags >> (cnt)) & 1) {
559 src[0] = prev->
data[0] + in_linesize[0] * py + px;
560 src[1] = prev->
data[0] + in_linesize[0] * py + px + 8;
561 src[2] = prev->
data[0] + in_linesize[0] * (py + 8) + px;
562 src[3] = prev->
data[0] + in_linesize[0] * (py + 8) + px + 8;
563 src[4] = prev->
data[1] + in_linesize[4] * (py >> 1) + (px >> 1);
564 src[5] = prev->
data[2] + in_linesize[5] * (py >> 1) + (px >> 1);
566 if ((
flags >> (cnt + 4)) & 1) {
567 for (
int b = 0;
b < 6;
b++)
570 for (
int b = 0;
b < 6;
b++) {
575 pfill[(
b >= 4) + (
b >= 5)],
577 src[
b], in_linesize[
b]);
583 for (
int b = 0;
b < 6;
b++) {
588 pfill[(
b >= 4) + (
b >= 5)],
589 dst[
b], linesize[
b]);
618 s->inter_quant =
s->intra_quant +
get_sbits(gb, 8);
627 frame->key_frame =
s->is_inter == 0;
629 if (
frame->key_frame) {
637 if (!
s->prev_frame->data[0]) {
657 2, 2, 3, 3, 3, 4, 5, 6, 7, 8, 9, 9,
700 s->mvectors_size = 0;
unsigned int mvectors_size
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static void idct2_add(uint8_t *dst, int stride, const uint8_t *src, int in_linesize, int *block)
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
static int get_bits_left(GetBitContext *gb)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static const int8_t mv[256][2]
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
This structure describes decoded (raw) audio or video data.
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
@ AVCOL_RANGE_JPEG
Full range content.
static const uint8_t luma_tab[]
static const uint16_t table[]
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
static void copy_block8(uint8_t *dst, const uint8_t *src, ptrdiff_t dstStride, ptrdiff_t srcStride, int h)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
static void skip_bits(GetBitContext *s, int n)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static int decode_intra(AVCodecContext *avctx, GetBitContext *gb, AVFrame *frame)
static av_cold void init_static_data(void)
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static int quant(float coef, const float Q, const float rounding)
Quantize one coefficient.
static const uint8_t chroma_tab[]
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
static int ff_thread_once(char *control, void(*routine)(void))
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FF_ARRAY_ELEMS(a)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static const uint16_t mask[17]
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
static unsigned int get_bits_le(GetBitContext *s, int n)
static int get_sbits(GetBitContext *s, int n)
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
static void decode_flush(AVCodecContext *avctx)
static const uint8_t cbp_bits[]
static void flush(AVCodecContext *avctx)
enum AVColorRange color_range
MPEG vs JPEG YUV range.
static int decode_intra_block(AVCodecContext *avctx, int mode, GetByteContext *gbyte, int16_t *qtab, int *block, int *pfill, uint8_t *dst, int linesize)
const AVCodec ff_mv30_decoder
#define INIT_VLC_STATIC_FROM_LENGTHS(vlc, bits, nb_codes, lens, len_wrap, symbols, symbols_wrap, symbols_size, offset, flags, static_size)
static unsigned int get_bits1(GetBitContext *s)
static void idct2_put(uint8_t *dst, int stride, int *block)
static const uint8_t zigzag[]
static av_cold int decode_close(AVCodecContext *avctx)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
static void idct_put(uint8_t *dst, int stride, int *block)
#define bytestream2_get_ne16
int16_t interq_tab[2][64]
static void idct_1d(unsigned *blk, int step)
#define i(width, name, range_min, range_max)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
Same behaviour av_fast_malloc but the buffer has additional AV_INPUT_BUFFER_PADDING_SIZE at the end w...
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
const char * name
Name of the codec implementation.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static void get_qtable(int16_t *table, int quant, const uint8_t *quant_tab)
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
int16_t intraq_tab[2][64]
main external API structure.
static av_const int sign_extend(int val, unsigned bits)
static int decode_coeffs(GetBitContext *gb, int16_t *coeffs, int nb_codes)
static const int factor[16]
static int decode_inter(AVCodecContext *avctx, GetBitContext *gb, AVFrame *frame, AVFrame *prev)
static av_cold int decode_init(AVCodecContext *avctx)
This structure stores compressed data.
int width
picture width / height.
static void idct_add(uint8_t *dst, int stride, const uint8_t *src, int in_linesize, int *block)
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
#define flags(name, subs,...)
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
The exact code depends on how similar the blocks are and how related they are to the block
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
av_cold void ff_blockdsp_init(BlockDSPContext *c, AVCodecContext *avctx)
VLC_TYPE(* table)[2]
code, bits
static void idct2_1d(int *blk, int step)
const uint16_t ff_aanscales[64]
static void update_inter_block(uint8_t *dst, int stride, const uint8_t *src, int in_linesize, int block)
static int decode_inter_block(AVCodecContext *avctx, int mode, GetByteContext *gbyte, int16_t *qtab, int *block, int *pfill, uint8_t *dst, int linesize, const uint8_t *src, int in_linesize)