40 if (
c->high >= 0x8000) {
41 if (
c->low < 0x8000) {
42 if (
c->low >= 0x4000 &&
c->high < 0xC000) {
69 int range =
c->high -
c->low + 1;
70 int val = (((
c->value -
c->low + 1) <<
bits) - 1) / range;
73 c->high = ((
prob + range) >>
bits) +
c->low - 1;
83 int range =
c->high -
c->low + 1;
84 int val = ((
c->value -
c->low + 1) * mod_val - 1) / range;
87 c->high = (
prob + range) / mod_val +
c->low - 1;
88 c->low +=
prob / mod_val;
97 int range =
c->high -
c->low + 1;
98 int val = ((
c->value -
c->low + 1) * probs[0] - 1) / range;
101 while (probs[sym] >
val)
104 c->high = range * probs[sym - 1] / probs[0] +
c->low - 1;
105 c->low += range * probs[sym] / probs[0];
119 c->get_model_sym = arith_get_model_sym;
125 int i, ncol,
r,
g,
b;
126 uint32_t *pal =
ctx->pal + 256 -
ctx->free_colours;
128 if (!
ctx->free_colours)
132 for (
i = 0;
i < ncol;
i++) {
136 *pal++ = (0xFFU << 24) | (
r << 16) | (
g << 8) |
b;
160 c->pal_pic =
ctx->pic->data[0] +
ctx->pic->linesize[0] * (avctx->
height - 1);
161 c->pal_stride = -
ctx->pic->linesize[0];
162 c->keyframe = !arith_get_bit(&acoder);
167 ctx->pic->key_frame = 1;
172 ctx->pic->key_frame = 0;
180 ctx->pic->palette_has_changed = pal_changed;
196 c->ctx.avctx = avctx;
static double val(void *priv, double ch)
Libavcodec external API header.
static av_cold int init(AVCodecContext *avctx)
#define prob(name, subs,...)
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 decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static int get_bits_left(GetBitContext *gb)
static unsigned int get_bits1(GetBitContext *s)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
@ AV_PICTURE_TYPE_I
Intra.
@ AV_PICTURE_TYPE_P
Predicted.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
int ff_mss12_decode_rect(SliceContext *sc, ArithCoder *acoder, int x, int y, int width, int height)
av_cold int ff_mss12_decode_end(MSS12Context *c)
av_cold int ff_mss12_decode_init(MSS12Context *c, int version, SliceContext *sc1, SliceContext *sc2)
void ff_mss12_slicecontext_reset(SliceContext *sc)
Common header for Microsoft Screen 1 and 2.
#define ARITH_GET_MODEL_SYM(prefix)
#define ARITH_GET_BIT(prefix)
static int arith_get_prob(ArithCoder *c, int16_t *probs)
static void arith_init(ArithCoder *c, GetBitContext *gb)
static void arith_normalise(ArithCoder *c)
static int decode_pal(MSS12Context *ctx, ArithCoder *acoder)
static av_cold int mss1_decode_init(AVCodecContext *avctx)
static int mss1_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static av_cold int mss1_decode_end(AVCodecContext *avctx)
static int arith_get_bits(ArithCoder *c, int bits)
static int arith_get_number(ArithCoder *c, int mod_val)
@ AV_PIX_FMT_PAL8
8 bits with AV_PIX_FMT_RGB32 palette
main external API structure.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int width
picture width / height.
const char * name
Name of the codec implementation.
This structure describes decoded (raw) audio or video data.
This structure stores compressed data.