34 #define MAX_TABLE_DEPTH(table_bits, max_bits) \ 
   35     ((max_bits + table_bits - 1) / table_bits) 
   41 #define DC_VLC_MTD MAX_TABLE_DEPTH(DC_VLC_BITS, MAX_DC_VLC_BITS) 
   42 #define AC_VLC_MTD MAX_TABLE_DEPTH(AC_VLC_BITS, MAX_AC_VLC_BITS) 
   43 #define OR_VLC_MTD MAX_TABLE_DEPTH(OR_VLC_BITS, MAX_OR_VLC_BITS) 
   54     static const uint16_t 
sizes[8 * 4 + 8 * 2 + 2 + 4] = {
 
   55         576, 548, 582, 618, 546, 616, 560, 642,
 
   56         584, 582, 704, 664, 512, 544, 656, 640,
 
   57         512, 648, 582, 566, 532, 614, 596, 648,
 
   58         586, 552, 584, 590, 544, 578, 584, 624,
 
   60         528, 528, 526, 528, 536, 528, 526, 544,
 
   61         544, 512, 512, 528, 528, 544, 512, 544,
 
   63         128, 128, 128, 128, 128, 128,
 
   69 #define init_ac_vlc(dst, src)                                                 \ 
   71         dst.table           = &table[offset];                                 \ 
   72         dst.table_allocated = sizes[sizeidx];                                 \ 
   73         offset             += sizes[sizeidx++];                               \ 
   74         init_vlc(&dst, AC_VLC_BITS, 77, &src[1], 4, 2, &src[0], 4, 2,         \ 
   75                  INIT_VLC_USE_NEW_STATIC);                                    \ 
   78     for (i = 0; i < 8; i++) {
 
   87 #define init_dc_vlc(dst, src)                                                 \ 
   89         dst.table           = &table[offset];                                 \ 
   90         dst.table_allocated = sizes[sizeidx];                                 \ 
   91         offset             += sizes[sizeidx++];                               \ 
   92         init_vlc(&dst, DC_VLC_BITS, 34, &src[1], 4, 2, &src[0], 4, 2,         \ 
   93                  INIT_VLC_USE_NEW_STATIC);                                    \ 
   96     for (i = 0; i < 8; i++) {
 
  103 #define init_or_vlc(dst, src)                                                 \ 
  105         dst.table           = &table[offset];                                 \ 
  106         dst.table_allocated = sizes[sizeidx];                                 \ 
  107         offset             += sizes[sizeidx++];                               \ 
  108         init_vlc(&dst, OR_VLC_BITS, 12, &src[1], 4, 2, &src[0], 4, 2,         \ 
  109                  INIT_VLC_USE_NEW_STATIC);                                    \ 
  112     for (i = 0; i < 2; i++)
 
  114     for (i = 0; i < 4; i++)
 
  118     if (offset != 
sizeof(table) / 
sizeof(
VLC_TYPE) / 2) {
 
  120                sizeof(table) / 
sizeof(
VLC_TYPE) / 2, offset);
 
  159 #define extra_bits(eb)  (eb)        // 3 bits 
  160 #define extra_run       (0xFF << 8) // 1 bit 
  161 #define extra_level     (0x00 << 8) // 1 bit 
  162 #define run_offset(r)   ((r) << 16) // 6 bits 
  163 #define level_offset(l) ((l) << 24) // 5 bits 
  207                           int *
const run, 
int *
const level, 
int *
const final)
 
  236         l = (0xE50000 >> (i & 0x1E)) & 3; 
 
  240         t = 0x01030F >> (l << 3);
 
  256         *run   = (sm &  0xff) + (e &  mask);    
 
  257         *level = (sm >>    8) + (e & ~mask);    
 
  258         *
final = i > (58 - 46);
 
  260         static const uint8_t crazy_mix_runlevel[32] = {
 
  261             0x22, 0x32, 0x33, 0x53, 0x23, 0x42, 0x43, 0x63,
 
  262             0x24, 0x52, 0x34, 0x73, 0x25, 0x62, 0x44, 0x83,
 
  263             0x26, 0x72, 0x35, 0x54, 0x27, 0x82, 0x45, 0x64,
 
  264             0x28, 0x92, 0x36, 0x74, 0x29, 0xa2, 0x46, 0x84,
 
  269         *run   = crazy_mix_runlevel[e] >> 4;
 
  270         *level = crazy_mix_runlevel[e] & 0x0F;
 
  283     0, 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
 
  287                          int *
const level, 
int *
const final)
 
  316     *level =  (i ^ e) - e; 
 
  330                                       &range, &sum, w->
edges);
 
  339     if (range < quant || range < 3) {
 
  354     if (range < 2 * w->quant) {
 
  355         if ((w->
edges & 3) == 0) {
 
  365         static const uint8_t prediction_table[3][12] = {
 
  366             { 0, 8, 4, 10, 11, 2, 6, 9, 1, 3, 5, 7 },
 
  367             { 4, 0, 8, 11, 10, 3, 5, 2, 6, 9, 1, 7 },
 
  368             { 8, 0, 4, 10, 11, 1, 7, 2, 6, 9, 3, 5 },
 
  414     switch (w->
edges & 3) {
 
  449     i = (0xFFEAF4C4 >> (2 * b + 8 * 
a)) & 3;
 
  453         w->
orient = (0xFFEAD8 >> (2 * c + 8 * (w->
quant > 12))) & 3;
 
  479 #define B(x,y)  w->block[0][w->idct_permutation[(x) + (y) * 8]] 
  480 #define T(x)  ((x) * dc_level + 0x8000) >> 16; 
  547                                   const ptrdiff_t linesize)
 
  550     for (k = 0; k < 8; k++) {
 
  557     256, 256, 256, 256, 256, 256, 259, 262,
 
  558     265, 269, 272, 275, 278, 282, 285, 288,
 
  559     292, 295, 299, 303, 306, 310, 314, 317,
 
  560     321, 325, 329, 333, 337, 341, 345, 349,
 
  561     353, 358, 362, 366, 371, 375, 379, 384,
 
  562     389, 393, 398, 403, 408, 413, 417, 422,
 
  563     428, 433, 438, 443, 448, 454, 459, 465,
 
  564     470, 476, 482, 488, 493, 499, 505, 511,
 
  571     int ac_mode, dc_mode, est_run, dc_level;
 
  574     int use_quant_matrix;
 
  596                 use_quant_matrix = 0;
 
  630             level  = (level + 1) * w->
dquant;
 
  634             level = (level ^ sign) - sign;
 
  636             if (use_quant_matrix)
 
  645         if (w->
flat_dc && ((
unsigned) (dc_level + 1)) < 3) { 
 
  653             dc_level += (w->
predicted_dc * divide_quant + (1 << 12)) >> 13;
 
  661         zeros_only = dc_level == 0;
 
  669     if ((
unsigned int) (dc_level + 1) >= 3 && (w->
edges & 3) != 3) {
 
  673         direction = (0x6A017C >> (w->
orient * 2)) & 3;
 
  674         if (direction != 3) {
 
  701         if (!((w->
edges & 2) || (zeros_only && (w->
orient | 4) == 4)))
 
  704         if (!((w->
edges & 1) || (zeros_only && (w->
orient | 8) == 8)))
 
  715     const ptrdiff_t linesize   = frame->
linesize[0];
 
  716     const ptrdiff_t uvlinesize = frame->
linesize[1];
 
  722     w->
dest[0] +=  w->
mb_y       * linesize   << 3;
 
  724     w->
dest[1] += (w->
mb_y & ~1) * uvlinesize << 2;
 
  725     w->
dest[2] += (w->
mb_y & ~1) * uvlinesize << 2;
 
  730                                    int16_t (*
block)[64],
 
  731                                    int block_last_index[12],
 
  732                                    int mb_width, 
int mb_height)
 
  775                               int dquant, 
int quant_offset,
 
  776                               int loopfilter, 
int lowdelay)
 
  782     w->
quant  = dquant >> 1;
 
  783     w->
qsum   = quant_offset;
 
  834                                (w->
mb_y - 1) * 8, 16,
 
static void x8_get_prediction(IntraX8Context *const w)
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
This structure describes decoded (raw) audio or video data. 
void(* setup_spatial_compensation)(uint8_t *src, uint8_t *dst, ptrdiff_t stride, int *range, int *sum, int edges)
void(* clear_block)(int16_t *block)
static void x8_update_predictions(IntraX8Context *const w, const int orient, const int est_run)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits. 
av_cold void ff_blockdsp_init(BlockDSPContext *c, AVCodecContext *avctx)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
static const uint16_t x8_ac0_highquant_table[8][77][2]
static int x8_decode_intra_mb(IntraX8Context *const w, const int chroma)
void ff_draw_horiz_band(AVCodecContext *avctx, AVFrame *cur, AVFrame *last, int y, int h, int picture_structure, int first_field, int low_delay)
Draw a horizontal band if supported. 
av_cold int ff_intrax8_common_init(AVCodecContext *avctx, IntraX8Context *w, IDCTDSPContext *idsp, int16_t(*block)[64], int block_last_index[12], int mb_width, int mb_height)
Initialize IntraX8 frame decoder. 
static void x8_reset_vlc_tables(IntraX8Context *w)
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code. 
int ff_intrax8_decode_picture(IntraX8Context *w, Picture *pict, GetBitContext *gb, int *mb_x, int *mb_y, int dquant, int quant_offset, int loopfilter, int lowdelay)
Decode single IntraX8 frame. 
#define init_ac_vlc(dst, src)
static const uint16_t x8_orient_highquant_table[2][12][2]
bitstream reader API header. 
static void x8_init_block_index(IntraX8Context *w, AVFrame *frame)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
static const uint16_t mask[17]
static const int sizes[][2]
static const struct endianess table[]
static int x8_get_orient_vlc(IntraX8Context *w)
static const int16_t quant_table[64]
static const uint16_t x8_ac0_lowquant_table[8][77][2]
int * block_last_index
last nonzero coefficient in block 
simple assert() macros that are a bit more flexible than ISO C assert(). 
av_cold void ff_wmv2dsp_init(WMV2DSPContext *c)
static const uint8_t offset[127][2]
const uint8_t ff_wmv1_scantable[WMV1_SCANTABLE_COUNT][64]
static const uint16_t x8_orient_lowquant_table[4][12][2]
av_cold void ff_init_scantable_permutation(uint8_t *idct_permutation, enum idct_permutation_type perm_type)
av_cold void ff_intrax8_common_end(IntraX8Context *w)
Destroy IntraX8 frame structure. 
void(* h_loop_filter)(uint8_t *src, ptrdiff_t stride, int qscale)
static VLC j_dc_vlc[2][8]
static const uint32_t ac_decode_table[]
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code. 
void(* v_loop_filter)(uint8_t *src, ptrdiff_t stride, int qscale)
static void error(const char *err)
static const uint16_t x8_dc_lowquant_table[8][34][2]
static const uint8_t dc_index_offset[]
static VLC j_ac_vlc[2][2][8]
Libavcodec external API header. 
void(* idct_add)(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
#define init_dc_vlc(dst, src)
static const uint16_t x8_ac1_highquant_table[8][77][2]
main external API structure. 
static const uint16_t x8_dc_highquant_table[8][34][2]
void(* spatial_compensation[12])(uint8_t *src, uint8_t *dst, ptrdiff_t stride)
static unsigned int get_bits1(GetBitContext *s)
uint8_t idct_permutation[64]
av_cold void ff_intrax8dsp_init(IntraX8DSPContext *dsp)
static av_cold int x8_vlc_init(void)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
static void x8_get_ac_rlf(IntraX8Context *const w, const int mode, int *const run, int *const level, int *const final)
static void x8_select_ac_table(IntraX8Context *const w, int mode)
#define init_or_vlc(dst, src)
static int x8_get_dc_rlf(IntraX8Context *const w, const int mode, int *const level, int *const final)
av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
static const uint16_t x8_ac1_lowquant_table[8][77][2]
VLC_TYPE(* table)[2]
code, bits 
static void x8_get_prediction_chroma(IntraX8Context *const w)
static int x8_setup_spatial_predictor(IntraX8Context *const w, const int chroma)
int divide_quant_dc_chroma
static VLC j_orient_vlc[2][4]
mode
Use these values in ebur128_init (or'ed). 
static void dsp_x8_put_solidcolor(const uint8_t pix, uint8_t *dst, const ptrdiff_t linesize)
uint8_t * prediction_table
static void x8_ac_compensation(IntraX8Context *const w, const int direction, const int dc_level)