53     thr = ((thr >> 1) + 4 * m->
cum_prob[0]) / thr;
 
   55     return FFMIN(thr, 0x3FFF);
 
  114     for (i = val - 1; i >= 0; i--)
 
  135     for (i = 0; i < 15; i++)
 
  136         for (j = 0; j < 4; j++)
 
  141                                 int full_model_syms, 
int special_initial_cache)
 
  152     for (i = 0, idx = 0; i < 4; i++)
 
  154             for (k = 0; k < 4; k++)
 
  160                                          uint8_t *ngb, 
int num_ngb, 
int any_ngb)
 
  165     if (val < pctx->num_syms) {
 
  171                 for (j = 0; j < num_ngb; j++)
 
  172                     if (pctx->
cache[i] == ngb[j])
 
  186             if (pctx->
cache[i] == pix)
 
  191         for (i = val; i > 0; i--)
 
  193         pctx->
cache[0] = pix;
 
  211         memset(neighbours, src[-1], 4);
 
  217             neighbours[
TOP_LEFT] = src[-stride - 1];
 
  218             neighbours[    
LEFT] = src[-1];
 
  221             neighbours[
TOP_RIGHT] = src[-stride + 1];
 
  227     if (x >= 2 && src[-2] == neighbours[
LEFT])
 
  229     if (y >= 2 && src[-2 * stride] == neighbours[
TOP])
 
  233     ref_pix[0] = neighbours[0];
 
  234     for (i = 1; i < 4; i++) {
 
  235         for (j = 0; j < nlen; j++)
 
  236             if (ref_pix[j] == neighbours[i])
 
  239             ref_pix[nlen++] = neighbours[i];
 
  247         if (neighbours[TOP] == neighbours[
TOP_LEFT]) {
 
  248             if (neighbours[
TOP_RIGHT] == neighbours[TOP_LEFT])
 
  250             else if (neighbours[LEFT] == neighbours[TOP_LEFT])
 
  254         } 
else if (neighbours[
TOP_RIGHT] == neighbours[TOP_LEFT]) {
 
  255             if (neighbours[LEFT] == neighbours[TOP_LEFT])
 
  259         } 
else if (neighbours[LEFT] == neighbours[TOP_LEFT]) {
 
  266         if (neighbours[TOP] == neighbours[TOP_LEFT])
 
  268         else if (neighbours[
TOP_RIGHT] == neighbours[TOP_LEFT])
 
  270         else if (neighbours[LEFT] == neighbours[TOP_LEFT])
 
  272         else if (neighbours[
TOP_RIGHT] == neighbours[TOP])
 
  274         else if (neighbours[TOP] == neighbours[LEFT])
 
  294                          int rgb_stride, 
PixContext *pctx, 
const uint32_t *pal)
 
  297     uint8_t *rgb_dst = rgb_pic + x * 3 + y * rgb_stride;
 
  301     for (j = 0; j < 
height; j++) {
 
  302         for (i = 0; i < 
width; i++) {
 
  307                                             i, j, width - i - 1);
 
  311                 AV_WB24(rgb_dst + i * 3, pal[p]);
 
  314         rgb_dst += rgb_stride;
 
  326         for (j = y; j < y + 
height; j++) {
 
  358         for (j = 0; j < 
height; j++) {
 
  359             memmove(dst, src, width);
 
  360             memmove(rgb_dst, rgb_src, width * 3);
 
  372                                 int mask_stride, 
int x, 
int y,
 
  380     mask += x + y * mask_stride;
 
  382     for (j = 0; j < 
height; j++) {
 
  383         for (i = 0; i < 
width; i++) {
 
  385                 ( c->
rgb_pic && mask[i] != 0x01 && mask[i] != 0x02 && mask[i] != 0x04 ||
 
  386                  !c->
rgb_pic && mask[i] != 0x80 && mask[i] != 0xFF))
 
  389             if (mask[i] == 0x02) {
 
  391             } 
else if (mask[i] == 0x04) {
 
  394             } 
else if (mask[i] != 0x80) {
 
  399                                                 i, j, width - i - 1);
 
  414                                       int version, 
int full_model_syms)
 
  425                 full_model_syms, version ? 1 : 0);
 
  447         if ((base + 1) / 2 - 2 <= 0)
 
  450         val = acoder->
get_number(acoder, (base + 1) / 2 - 2) + 3;
 
  453     if ((
unsigned)val >= base)
 
  456     return inv ? base - val : 
val;
 
  468         int i, j, pix, rgb_pix;
 
  475         rgb_pix = c->
pal[pix];
 
  476         for (i = 0; i < 
height; i++, dst += 
stride, rgb_dst += rgb_stride) {
 
  477             memset(dst, pix, width);
 
  479                 for (j = 0; j < width * 3; j += 3)
 
  503             ( c->
rgb_pic && mode != 0x01 && mode != 0x02 && mode != 0x04 ||
 
  504              !c->
rgb_pic && mode != 0x80 && mode != 0xFF))
 
  509         else if (mode == 0x04)
 
  511         else if (mode != 0x80)
 
  578                "Insufficient extradata size: expected %"PRIu32
" got %d\n",
 
  601                "Header version doesn't match codec tag\n");
 
  608                "Incorrect number of changeable palette entries: %d\n",
 
  632                    "Insufficient extradata size %d for v2\n",
 
  643                    "Incorrect number of used colours %d\n",
 
  654     for (i = 0; i < 256; i++)
 
  656                             (version ? 8 : 0) + i * 3);
 
const char const char void * val
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
int coded_width
Bitstream width / height, may be different from width/height e.g. 
av_cold int ff_mss12_decode_init(MSS12Context *c, int version, SliceContext *sc1, SliceContext *sc2)
static av_always_inline float av_int2float(uint32_t i)
Reinterpret a 32-bit integer as a float. 
static void pixctx_reset(PixContext *ctx)
static int decode_region_inter(SliceContext *sc, ArithCoder *acoder, int x, int y, int width, int height)
int16_t weights[MODEL_MAX_SYMS+1]
int ff_mss12_decode_rect(SliceContext *sc, ArithCoder *acoder, int x, int y, int width, int height)
static const int sec_order_sizes[4]
uint8_t * extradata
some codecs need / can use extradata like Huffman tables. 
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
int(* get_model_sym)(struct ArithCoder *c, Model *m)
static av_cold void slicecontext_init(SliceContext *sc, int version, int full_model_syms)
static int decode_region_intra(SliceContext *sc, ArithCoder *acoder, int x, int y, int width, int height)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
static const uint16_t mask[17]
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
static void model_rescale_weights(Model *m)
static int decode_pivot(SliceContext *sc, ArithCoder *acoder, int base)
static av_cold void pixctx_init(PixContext *ctx, int cache_size, int full_model_syms, int special_initial_cache)
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors. 
static int model_calc_threshold(Model *m)
static int motion_compensation(MSS12Context const *c, int x, int y, int width, int height)
int width
picture width / height. 
static int decode_pixel_in_context(ArithCoder *acoder, PixContext *pctx, uint8_t *src, int stride, int x, int y, int has_right)
#define AV_EF_EXPLODE
abort decoding on minor error detection 
static int decode_region(ArithCoder *acoder, uint8_t *dst, uint8_t *rgb_pic, int x, int y, int width, int height, int stride, int rgb_stride, PixContext *pctx, const uint32_t *pal)
av_cold int ff_mss12_decode_end(MSS12Context *c)
Libavcodec external API header. 
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
static int decode_region_masked(MSS12Context const *c, ArithCoder *acoder, uint8_t *dst, int stride, uint8_t *mask, int mask_stride, int x, int y, int width, int height, PixContext *pctx)
main external API structure. 
uint8_t idx2sym[MODEL_MAX_SYMS+1]
int special_initial_cache
static av_cold void model_init(Model *m, int num_syms, int thr_weight)
static void model_reset(Model *m)
GLint GLenum GLboolean GLsizei stride
void ff_mss12_slicecontext_reset(SliceContext *sc)
static av_always_inline int decode_pixel(ArithCoder *acoder, PixContext *pctx, uint8_t *ngb, int num_ngb, int any_ngb)
void ff_mss12_model_update(Model *m, int val)
#define av_malloc_array(a, b)
int(* get_number)(struct ArithCoder *c, int n)
static void copy_rectangles(MSS12Context const *c, int x, int y, int width, int height)
int16_t cum_prob[MODEL_MAX_SYMS+1]
Common header for Microsoft Screen 1 and 2.