33 #define AIC_HDR_SIZE    24 
   34 #define AIC_BAND_COEFFS (64 + 32 + 192 + 96) 
   49      8, 16, 19, 22, 22, 26, 26, 27,
 
   50     16, 16, 22, 22, 26, 27, 27, 29,
 
   51     19, 22, 26, 26, 27, 29, 29, 35,
 
   52     22, 24, 27, 27, 29, 32, 34, 38,
 
   53     26, 27, 29, 29, 32, 35, 38, 46,
 
   54     27, 29, 34, 34, 35, 40, 46, 56,
 
   55     29, 34, 34, 37, 40, 48, 56, 69,
 
   56     34, 37, 38, 40, 48, 58, 69, 83,
 
   60      0,  4,  1,  2,  5,  8, 12,  9,
 
   61      6,  3,  7, 10, 13, 14, 11, 15,
 
   62     47, 43, 46, 45, 42, 39, 35, 38,
 
   63     41, 44, 40, 37, 34, 33, 36, 32,
 
   64     16, 20, 17, 18, 21, 24, 28, 25,
 
   65     22, 19, 23, 26, 29, 30, 27, 31,
 
   66     63, 59, 62, 61, 58, 55, 51, 54,
 
   67     57, 60, 56, 53, 50, 49, 52, 48,
 
   71      64,  72,  65,  66,  73,  80,  88,  81,
 
   72      74,  67,  75,  82,  89,  90,  83,  91,
 
   73       0,   4,   1,   2,   5,   8,  12,   9,
 
   74       6,   3,   7,  10,  13,  14,  11,  15,
 
   75      16,  20,  17,  18,  21,  24,  28,  25,
 
   76      22,  19,  23,  26,  29,  30,  27,  31,
 
   77     155, 147, 154, 153, 146, 139, 131, 138,
 
   78     145, 152, 144, 137, 130, 129, 136, 128,
 
   79      47,  43,  46,  45,  42,  39,  35,  38,
 
   80      41,  44,  40,  37,  34,  33,  36,  32,
 
   81      63,  59,  62,  61,  58,  55,  51,  54,
 
   82      57,  60,  56,  53,  50,  49,  52,  48,
 
   83      96, 104,  97,  98, 105, 112, 120, 113,
 
   84     106,  99, 107, 114, 121, 122, 115, 123,
 
   85      68,  76,  69,  70,  77,  84,  92,  85,
 
   86      78,  71,  79,  86,  93,  94,  87,  95,
 
   87     100, 108, 101, 102, 109, 116, 124, 117,
 
   88     110, 103, 111, 118, 125, 126, 119, 127,
 
   89     187, 179, 186, 185, 178, 171, 163, 170,
 
   90     177, 184, 176, 169, 162, 161, 168, 160,
 
   91     159, 151, 158, 157, 150, 143, 135, 142,
 
   92     149, 156, 148, 141, 134, 133, 140, 132,
 
   93     191, 183, 190, 189, 182, 175, 167, 174,
 
   94     181, 188, 180, 173, 166, 165, 172, 164,
 
   98      0,  4,  1,  2,  5,  8, 12,  9,
 
   99      6,  3,  7, 10, 13, 14, 11, 15,
 
  100     31, 27, 30, 29, 26, 23, 19, 22,
 
  101     25, 28, 24, 21, 18, 17, 20, 16,
 
  102     32, 36, 33, 34, 37, 40, 44, 41,
 
  103     38, 35, 39, 42, 45, 46, 43, 47,
 
  104     63, 59, 62, 61, 58, 55, 51, 54,
 
  105     57, 60, 56, 53, 50, 49, 52, 48,
 
  109      16,  24,  17,  18,  25,  32,  40,  33,
 
  110      26,  19,  27,  34,  41,  42,  35,  43,
 
  111       0,   4,   1,   2,   5,   8,  12,   9,
 
  112       6,   3,   7,  10,  13,  14,  11,  15,
 
  113      20,  28,  21,  22,  29,  36,  44,  37,
 
  114      30,  23,  31,  38,  45,  46,  39,  47,
 
  115      95,  87,  94,  93,  86,  79,  71,  78,
 
  116      85,  92,  84,  77,  70,  69,  76,  68,
 
  117      63,  59,  62,  61,  58,  55,  51,  54,
 
  118      57,  60,  56,  53,  50,  49,  52,  48,
 
  119      91,  83,  90,  89,  82,  75,  67,  74,
 
  120      81,  88,  80,  73,  66,  65,  72,  64,
 
  121     112, 120, 113, 114, 121, 128, 136, 129,
 
  122     122, 115, 123, 130, 137, 138, 131, 139,
 
  123      96, 100,  97,  98, 101, 104, 108, 105,
 
  124     102,  99, 103, 106, 109, 110, 107, 111,
 
  125     116, 124, 117, 118, 125, 132, 140, 133,
 
  126     126, 119, 127, 134, 141, 142, 135, 143,
 
  127     191, 183, 190, 189, 182, 175, 167, 174,
 
  128     181, 188, 180, 173, 166, 165, 172, 164,
 
  129     159, 155, 158, 157, 154, 151, 147, 150,
 
  130     153, 156, 152, 149, 146, 145, 148, 144,
 
  131     187, 179, 186, 185, 178, 171, 163, 170,
 
  132     177, 184, 176, 169, 162, 161, 168, 160,
 
  174     if (frame_size > size) {
 
  181                "Picture dimension changed: old: %d x %d, new: %d x %d\n",
 
  185     ctx->
quant      = src[15];
 
  191 #define GET_CODE(val, type, add_bits)                         \ 
  194             val = get_ue_golomb(gb);                          \ 
  196             val = get_unary(gb, 1, 31);                       \ 
  198             val = (val << add_bits) + get_bits(gb, add_bits); \ 
  202                              int band, 
int slice_width, 
int force_chroma)
 
  204     int has_skips, coeff_type, coeff_bits, skip_type, 
skip_bits;
 
  218         for (mb = 0; mb < slice_width; mb++) {
 
  221                 GET_CODE(val, skip_type, skip_bits);
 
  225                 if (idx >= num_coeffs)
 
  227                 GET_CODE(val, coeff_type, coeff_bits);
 
  231                 dst[scan[idx]] = 
val;
 
  232             } 
while (idx < num_coeffs - 1);
 
  236         for (mb = 0; mb < slice_width; mb++) {
 
  237             for (idx = 0; idx < num_coeffs; idx++) {
 
  238                 GET_CODE(val, coeff_type, coeff_bits);
 
  241                 dst[scan[idx]] = 
val;
 
  250                             int16_t **base, int16_t **ext)
 
  254     for (i = 0; i < 4; i++) {
 
  255         for (j = 0; j < 4; j++)
 
  256             dst[scan[i * 8 + j]]     = (*base)[j];
 
  257         for (j = 0; j < 4; j++)
 
  258             dst[scan[i * 8 + j + 4]] = (*ext)[j];
 
  263         for (j = 0; j < 8; j++)
 
  264             dst[scan[i * 8 + j]] = (*ext)[j];
 
  270                                int16_t **base, int16_t **ext,
 
  276         for (i = 0; i < 8; i++) {
 
  277             for (j = 0; j < 4; j++)
 
  278                 dst[scan[i * 8 + j]]     = (*base)[j];
 
  279             for (j = 0; j < 4; j++)
 
  280                 dst[scan[i * 8 + j + 4]] = (*ext)[j];
 
  285         for (i = 0; i < 64; i++)
 
  286             dst[scan[i]] = (*ext)[i];
 
  295     for (i = 0; i < 64; i++) {
 
  296         int val  = (uint16_t)block[i];
 
  299         block[i] = (((val >> 1) ^ -sign) * q * quant_matrix[i] >> 4)
 
  318     Y = ctx->
frame->
data[0] + mb_x * 16 + mb_y * 16 * ystride;
 
  319     for (i = 0; i < 2; i++)
 
  320         C[i] = ctx->
frame->
data[i + 1] + mb_x * 8
 
  332     for (mb = 0; mb < slice_width; mb++) {
 
  333         for (blk = 0; blk < 4; blk++) {
 
  339                                    &base_y, &ext_y, blk);
 
  344                 dst = Y + (blk >> 1) * 8 * ystride + (blk & 1) * 8;
 
  347                 dst = Y + (blk & 1) * 8 + (blk >> 1) * ystride;
 
  354         for (blk = 0; blk < 2; blk++) {
 
  373     int buf_size       = avpkt->
size;
 
  385     if (buf_size < off) {
 
  404             slice_size = bytestream2_get_le16(&gb) * 4;
 
  405             if (slice_size + off > buf_size || !slice_size) {
 
  407                        "Incorrect slice size %d at %d.%d\n", slice_size, x, y);
 
  414                        "Error decoding slice at %d.%d\n", x, y);
 
  439     for (i = 0; i < 64; i++)
 
  442     for (i = 0; i < 64; i++)
 
  450     for (i = 1; i < 32; i++) {
 
static const int aic_num_band_coeffs[NUM_BANDS]
void(* put_signed_pixels_clamped)(const int16_t *block, uint8_t *pixels, ptrdiff_t line_size)
int16_t * data_ptr[NUM_BANDS]
const char const char void * val
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
This structure describes decoded (raw) audio or video data. 
ptrdiff_t const GLvoid * data
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits. 
static av_cold int init(AVCodecContext *avctx)
#define DECLARE_ALIGNED(n, t, v)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
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
static const uint8_t aic_c_scan[64]
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
bitstream reader API header. 
static av_cold int aic_decode_init(AVCodecContext *avctx)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
static int aic_decode_header(AICContext *ctx, const uint8_t *src, int size)
static const uint8_t aic_y_scan[64]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static av_cold int aic_decode_close(AVCodecContext *avctx)
const char * name
Name of the codec implementation. 
static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst, int band, int slice_width, int force_chroma)
Libavcodec external API header. 
static const uint8_t aic_c_ext_scan[192]
static const uint8_t *const aic_scan[NUM_BANDS]
enum AVPictureType pict_type
Picture type of the frame. 
int width
picture width / height. 
static const uint8_t aic_quant_matrix[64]
uint8_t idct_permutation[64]
IDCT input permutation. 
static const int aic_band_off[NUM_BANDS]
static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y, const uint8_t *src, int src_size)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
main external API structure. 
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame. 
static unsigned int get_bits1(GetBitContext *s)
BYTE int const BYTE int int int height
static void skip_bits(GetBitContext *s, int n)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext. 
static void unquant_block(int16_t *block, int q, uint8_t *quant_matrix)
static void recombine_block(int16_t *dst, const uint8_t *scan, int16_t **base, int16_t **ext)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avpkt)
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) 
common internal api header. 
static void recombine_block_il(int16_t *dst, const uint8_t *scan, int16_t **base, int16_t **ext, int block_no)
#define GET_CODE(val, type, add_bits)
av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
static int aic_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
int key_frame
1 -> keyframe, 0-> not 
#define av_malloc_array(a, b)
static const uint8_t aic_y_ext_scan[192]
This structure stores compressed data. 
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
void(* idct)(int16_t *block)