Go to the documentation of this file.
49 while ((
c->high >> 15) - (
c->low >> 15) < 2) {
50 if ((
c->low ^
c->high) & 0x10000) {
55 c->high = (uint16_t)
c->high << 8 | 0xFF;
56 c->value = (uint16_t)
c->value << 8 | bytestream2_get_byte(
c->gbc.gB);
57 c->low = (uint16_t)
c->low << 8;
77 int low,
int high,
int n)
86 c->high +=
c->low - 1;
96 int range =
c->high -
c->low + 1;
116 int range =
c->high -
c->low + 1, n = *probs;
126 while (probs[++
i] >
val) ;
138 int diff = (
c->high >> 16) - (
c->low >> 16);
142 while (!(
diff & 0x80)) {
147 return (
bits + bp + 7 >> 3) + ((
c->low >> 16) + 1 ==
c->high >> 16);
154 c->value = bytestream2_get_be24(gB);
157 c->get_model_sym = arith2_get_model_sym;
164 uint32_t *pal =
ctx->pal + 256 -
ctx->free_colours;
166 if (!
ctx->free_colours)
170 if (ncol >
ctx->free_colours || buf_size < 2 + ncol * 3)
172 for (
i = 0;
i < ncol;
i++)
179 int keyframe,
int w,
int h)
181 int last_symbol = 0, repeat = 0, prev_avail = 0;
184 int x, y, endx, endy, t;
186 #define READ_PAIR(a, b) \
187 a = bytestream2_get_byte(gB) << 4; \
188 t = bytestream2_get_byte(gB); \
190 b = (t & 0xF) << 8; \
191 b |= bytestream2_get_byte(gB); \
196 if (endx >=
w || endy >=
h || x > endx || y > endy)
209 int b = bytestream2_get_byte(gB);
211 last_symbol =
b << 8 | bytestream2_get_byte(gB);
215 if (repeat >= (INT_MAX >> 8) - 1) {
219 repeat = (repeat << 8) + bytestream2_get_byte(gB) + 1;
221 if (last_symbol == -2) {
222 int skip =
FFMIN((
unsigned)repeat, dst +
w - p);
227 last_symbol = 127 -
b;
229 if (last_symbol >= 0)
231 else if (last_symbol == -1 && prev_avail)
233 }
while (++p < dst +
w);
242 uint8_t *rgb_dst, ptrdiff_t rgb_stride, uint32_t *pal,
243 int keyframe,
int kf_slipt,
int slice,
int w,
int h)
245 uint8_t
bits[270] = { 0 };
249 int current_length = 0, read_codes = 0, next_code = 0, current_codes = 0;
250 int remaining_codes, surplus_codes,
i;
252 const int alphabet_size = 270 - keyframe;
254 int last_symbol = 0, repeat = 0, prev_avail = 0;
257 int x, y, clipw, cliph;
264 if (x + clipw >
w || y + cliph >
h)
266 pal_dst += pal_stride * y + x;
267 rgb_dst += rgb_stride * y + x * 3;
274 pal_dst += pal_stride * kf_slipt;
275 rgb_dst += rgb_stride * kf_slipt;
284 while (current_codes--) {
286 if (symbol >= 204 - keyframe)
287 symbol += 14 - keyframe;
288 else if (symbol > 189)
289 symbol =
get_bits1(gb) + (symbol << 1) - 190;
292 bits[symbol] = current_length;
293 codes[symbol] = next_code++;
298 remaining_codes = (1 << current_length) - next_code;
300 if (current_length > 22 || current_codes > remaining_codes)
302 }
while (current_codes != remaining_codes);
304 remaining_codes = alphabet_size - read_codes;
307 while ((surplus_codes = (2 << current_length) -
308 (next_code << 1) - remaining_codes) < 0) {
314 for (
i = 0;
i < alphabet_size;
i++)
316 if (surplus_codes-- == 0) {
320 bits[
i] = current_length;
321 codes[
i] = next_code++;
324 if (next_code != 1 << current_length)
327 if ((
i =
vlc_init(&vlc, 9, alphabet_size,
bits, 1, 1, codes, 4, 4, 0)) < 0)
332 uint8_t *pp = pal_dst;
333 uint8_t *rp = rgb_dst;
349 repeat += (1 <<
b) - 1;
351 if (last_symbol == -2) {
358 last_symbol = 267 -
b;
360 if (last_symbol >= 0) {
363 }
else if (last_symbol == -1 && prev_avail) {
364 *pp = *(pp - pal_stride);
365 memcpy(rp, rp - rgb_stride, 3);
368 }
while (++pp < pal_dst +
w);
369 pal_dst += pal_stride;
370 rgb_dst += rgb_stride;
379 int x,
int y,
int w,
int h,
int wmv9_mask)
416 s->end_mb_y = (
h + 15) >> 4;
420 s->end_mb_y =
s->end_mb_y + 1 >> 1;
424 if (v->
end_mb_x ==
s->mb_width &&
s->end_mb_y ==
s->mb_height) {
428 "disabling error correction due to block count mismatch %dx%d != %dx%d\n",
429 v->
end_mb_x,
s->end_mb_y,
s->mb_width,
s->mb_height);
434 f =
s->current_picture.f;
437 ctx->dsp.upsample_plane(
f->data[0],
f->linesize[0],
w,
h);
438 ctx->dsp.upsample_plane(
f->data[1],
f->linesize[1],
w+1 >> 1,
h+1 >> 1);
439 ctx->dsp.upsample_plane(
f->data[2],
f->linesize[2],
w+1 >> 1,
h+1 >> 1);
442 "Asymmetric WMV9 rectangle subsampling");
447 ctx->dsp.mss2_blit_wmv9_masked(
c->rgb_pic + y *
c->rgb_stride + x * 3,
448 c->rgb_stride, wmv9_mask,
449 c->pal_pic + y *
c->pal_stride + x,
451 f->data[0],
f->linesize[0],
452 f->data[1],
f->data[2],
f->linesize[1],
455 ctx->dsp.mss2_blit_wmv9(
c->rgb_pic + y *
c->rgb_stride + x * 3,
457 f->data[0],
f->linesize[0],
458 f->data[1],
f->data[2],
f->linesize[1],
476 #define COMPARE(top, bottom, left, right) \
477 if (rect->top <= draw->top && rect->bottom >= draw->bottom) { \
478 if (rect->left <= draw->left && rect->right >= draw->left) \
479 draw->left = FFMIN(rect->right, draw->right); \
481 if (rect->right >= draw->right) { \
482 if (rect->left >= draw->left) { \
483 if (rect->left < draw->right) \
484 draw->right = rect->left; \
486 draw->right = draw->left; \
503 #define MAX_WMV9_RECTANGLES 20
504 #define ARITH2_PADDING 2
509 const uint8_t *buf = avpkt->
data;
510 int buf_size = avpkt->
size;
517 int keyframe, has_wmv9, has_mv, is_rle, is_555,
ret;
521 int used_rects = 0,
i, implicit_rect = 0, wmv9_mask = -1;
532 if (
c->slice_split > 0)
533 ctx->split_position =
c->slice_split;
534 else if (
c->slice_split < 0) {
550 if (
c->slice_split && (
ctx->split_position < 1 - is_555 ||
551 ctx->split_position > avctx->
height - 1))
561 if (is_555 && (has_wmv9 || has_mv ||
c->slice_split &&
ctx->split_position))
572 implicit_rect = !arith2_get_bit(&acoder);
574 while (arith2_get_bit(&acoder)) {
577 r = &wmv9rects[used_rects];
582 wmv9rects[used_rects - 1].
x) +
583 wmv9rects[used_rects - 1].
x;
590 if (implicit_rect && used_rects) {
598 wmv9rects[0].
w = avctx->
width;
599 wmv9rects[0].
h = avctx->
height;
603 for (
i = 0;
i < used_rects;
i++) {
604 if (!implicit_rect && arith2_get_bit(&acoder)) {
609 wmv9_mask = arith2_get_bit(&acoder) - 1;
623 if (keyframe && !is_555) {
637 if (
c->mvX < 0 ||
c->mvY < 0) {
638 FFSWAP(uint8_t *,
c->pal_pic,
c->last_pal_pic);
643 if (
ctx->last_pic->data[0]) {
645 c->last_rgb_pic =
ctx->last_pic->data[0] +
646 ctx->last_pic->linesize[0] * (avctx->
height - 1);
657 c->last_rgb_pic =
NULL;
672 if (
decode_555(avctx, &gB, (uint16_t *)
c->rgb_pic,
c->rgb_stride >> 1,
688 c->rgb_pic,
c->rgb_stride,
c->pal, keyframe,
689 ctx->split_position, 0,
696 c->rgb_pic,
c->rgb_stride,
c->pal, keyframe,
697 ctx->split_position, 1,
704 }
else if (!implicit_rect || wmv9_mask != -1) {
709 c->keyframe = keyframe;
715 if (wmv9_mask == -1) {
716 for (
i = 0;
i < used_rects;
i++) {
718 r.left = wmv9rects[
i].
x;
719 r.top = wmv9rects[
i].
y;
720 r.right =
r.left + wmv9rects[
i].
w;
721 r.bottom =
r.top + wmv9rects[
i].
h;
730 if (
c->slice_split &&
draw.bottom -
draw.top >= 10) {
734 ctx->split_position -
draw.top))
738 if (
c->slice_split) {
746 draw.bottom -
ctx->split_position))
760 memset(
c->pal_pic, 0,
c->pal_stride * avctx->
height);
764 for (
i = 0;
i < used_rects;
i++) {
765 int x = wmv9rects[
i].
x;
766 int y = wmv9rects[
i].
y;
767 int w = wmv9rects[
i].
w;
768 int h = wmv9rects[
i].
h;
769 if (wmv9rects[
i].coded) {
770 int WMV9codedFrameSize;
771 if (buf_size < 4 || !(WMV9codedFrameSize =
AV_RL24(buf)))
774 x, y,
w,
h, wmv9_mask))
776 buf += WMV9codedFrameSize + 3;
777 buf_size -= WMV9codedFrameSize + 3;
779 uint8_t *dst =
c->rgb_pic + y *
c->rgb_stride + x * 3;
780 if (wmv9_mask != -1) {
781 ctx->dsp.mss2_gray_fill_masked(dst,
c->rgb_stride,
783 c->pal_pic + y *
c->pal_stride + x,
788 memset(dst, 0x80,
w * 3);
789 dst +=
c->rgb_stride;
799 if (
c->mvX < 0 ||
c->mvY < 0) {
886 c->pal_stride =
c->mask_stride;
889 if (!
c->pal_pic || !
c->last_pal_pic || !
ctx->last_pic)
static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, int x, int y, int w, int h, int wmv9_mask)
#define AV_LOG_WARNING
Something somehow does not look correct.
#define COMPARE(top, bottom, left, right)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
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
int end_mb_x
Horizontal macroblock limit (used only by mss2)
int overlap
overlapped transforms in use
int max_b_frames
max number of B-frames for encoding
#define ARITH_GET_MODEL_SYM(prefix)
static void calc_draw_region(struct Rectangle2 *draw, const struct Rectangle2 *rect)
static int get_bits_count(const GetBitContext *s)
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
void ff_vc1_init_transposed_scantables(VC1Context *v)
This structure describes decoded (raw) audio or video data.
int ff_vc1_decode_init(AVCodecContext *avctx)
int fastuvmc
Rounding of qpel vector to hpel ? (not in Simple)
const uint8_t * zz_8x4
Zigzag scan table for TT_8x4 coding mode.
struct AVCodecContext * avctx
int flags
Frame flags, a combination of AV_FRAME_FLAGS.
static void arith2_init(ArithCoder *c, GetByteContext *gB)
static int arith2_get_number(ArithCoder *c, int n)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext *gb)
static void skip_bits(GetBitContext *s, int n)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
AVCodec p
The public AVCodec.
av_cold void ff_mss2dsp_init(MSS2DSPContext *dsp)
int multires
frame-level RESPIC syntax element present
static int decode_555(AVCodecContext *avctx, GetByteContext *gB, uint16_t *dst, ptrdiff_t stride, int keyframe, int w, int h)
static double val(void *priv, double ch)
static int arith2_get_scaled_value(int value, int n, int range)
static int arith2_get_consumed_bytes(ArithCoder *c)
int dquant
How qscale varies with MBs, 2 bits (not in Simple)
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
static int calc_split_position(int split_position, const struct Rectangle2 *rect, int height)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
void ff_er_frame_end(ERContext *s, int *decode_error_flags)
Indicate that a frame has finished decoding and perform error concealment in case it has been enabled...
#define FF_CODEC_DECODE_CB(func)
int res_sprite
Simple/Main Profile sequence header.
int res_fasttx
reserved, always 1
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
void ff_mpeg_er_frame_start(MpegEncContext *s)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define vlc_init(vlc, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)
int rangered
RANGEREDFRM (range reduction) syntax element present at frame level.
int ff_vc1_decode_end(AVCodecContext *avctx)
Close a VC1/WMV3 decoder.
void ff_vc1_init_common(VC1Context *v)
Init VC-1 specific tables and VC1Context members.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
#define CODEC_LONG_NAME(str)
@ AVDISCARD_ALL
discard all
void ff_vc1_decode_blocks(VC1Context *v)
@ AV_PICTURE_TYPE_I
Intra.
static unsigned int get_bits1(GetBitContext *s)
int resync_marker
could this stream contain resync markers
#define MAX_WMV9_RECTANGLES
static int arith2_get_prob(ArithCoder *c, int16_t *probs)
static av_cold int mss2_decode_end(AVCodecContext *avctx)
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
static av_always_inline int bytestream2_tell(GetByteContext *g)
#define ARITH_GET_BIT(prefix)
enum AVPictureType pict_type
Picture type of the frame.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
int(* init)(AVBSFContext *ctx)
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
static void scale(int *out, const int *in, const int w, const int h, const int shift)
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
const uint8_t ff_wmv2_scantableB[64]
const FFCodec ff_mss2_decoder
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_RL24
const uint8_t ff_wmv2_scantableA[64]
static int decode_pal_v2(MSS12Context *ctx, const uint8_t *buf, int buf_size)
int res_transtab
reserved, always 0
uint8_t respic
Frame-level flag for resized images.
static av_always_inline int diff(const struct color_info *a, const struct color_info *b, const int trans_thresh)
int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx)
generic function called after decoding the header and before a frame is decoded.
static char * split(char *message, char delim)
void ff_mpeg_flush(AVCodecContext *avctx)
enum AVDiscard skip_loop_filter
Skip loop filtering for selected frames.
static int draw(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
#define i(width, name, range_min, range_max)
int frmrtq_postproc
3 bits,
#define AV_PIX_FMT_RGB555
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
static av_cold int mss2_decode_init(AVCodecContext *avctx)
int extended_mv
Ext MV in P/B (not in Simple)
av_cold int ff_mss12_decode_end(MSS12Context *c)
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
const uint8_t * zz_4x8
Zigzag scan table for TT_4x8 coding mode.
const char * name
Name of the codec implementation.
static int decode_rle(GetBitContext *gb, uint8_t *pal_dst, ptrdiff_t pal_stride, uint8_t *rgb_dst, ptrdiff_t rgb_stride, uint32_t *pal, int keyframe, int kf_slipt, int slice, int w, int h)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int res_y411
reserved, old interlaced mode
static av_cold int wmv9_init(AVCodecContext *avctx)
void ff_vlc_free(VLC *vlc)
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Identical in function to ff_get_buffer(), except it reuses the existing buffer if available.
static void arith2_normalise(ArithCoder *c)
#define FFSWAP(type, a, b)
static const uint8_t * align_get_bits(GetBitContext *s)
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
int av_frame_replace(AVFrame *dst, const AVFrame *src)
Ensure the destination frame refers to the same data described by the source frame,...
main external API structure.
int res_rtm_flag
reserved, set to 1
int profile
Sequence header data for all Profiles TODO: choose between ints, uint8_ts and monobit flags.
void ff_mpv_frame_end(MpegEncContext *s)
int vstransform
variable-size [48]x[48] transform type + info
static void arith2_rescale_interval(ArithCoder *c, int range, int low, int high, int n)
int ff_mss12_decode_rect(SliceContext *sc, ArithCoder *acoder, int x, int y, int width, int height)
@ AV_PICTURE_TYPE_P
Predicted.
int max_b_frames
maximum number of B-frames between non-B-frames Note: The output will be delayed by max_b_frames+1 re...
#define avpriv_request_sample(...)
This structure stores compressed data.
void ff_mss12_slicecontext_reset(SliceContext *sc)
int width
picture width / height.
int finterpflag
INTERPFRM present.
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int quantizer_mode
2 bits, quantizer mode used for sequence, see QUANT_*
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_WB32 unsigned int_TMPL AV_RB24
av_cold int ff_mss12_decode_init(MSS12Context *c, int version, SliceContext *sc1, SliceContext *sc2)
static void BS_FUNC() skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
static int mss2_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt)
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_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
int bitrtq_postproc
5 bits, quantized framerate-based postprocessing strength