56     { 0, 1, 5, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0 },
 
   57     { 0, 3, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0 }
 
   61     { 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125 },
 
   62     { 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119 }
 
   66   { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
 
   67     0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
 
   68     0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08,
 
   69     0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0,
 
   70     0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16,
 
   71     0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28,
 
   72     0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
 
   73     0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
 
   74     0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
 
   75     0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
 
   76     0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
 
   77     0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
 
   78     0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
 
   79     0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
 
   80     0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,
 
   81     0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5,
 
   82     0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4,
 
   83     0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2,
 
   84     0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA,
 
   85     0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
 
   87   { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
 
   88     0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
 
   89     0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
 
   90     0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0,
 
   91     0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34,
 
   92     0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26,
 
   93     0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38,
 
   94     0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
 
   95     0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
 
   96     0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
 
   97     0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
 
   98     0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
 
   99     0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96,
 
  100     0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5,
 
  101     0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4,
 
  102     0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3,
 
  103     0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2,
 
  104     0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
 
  105     0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
 
  106     0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
 
  116     { 0, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
 
  117     { 0, 1, 5, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
 
  121     { 0, 7, 6, 5, 8, 4, 3, 1, 2 },
 
  122     { 0, 2, 3, 4, 5, 6, 7, 1, 8 }
 
  125 #define MAX_ENTRIES  162 
  146                                  const uint8_t *syms, 
int num_syms)
 
  151     int prefix = 0, max_bits = 0, idx = 0;
 
  153     for (i = 0; i < 16; i++) {
 
  154         for (j = 0; j < lens[i]; j++) {
 
  156             codes[idx] = prefix++;
 
  164                               codes, 2, 2, syms, 1, 1, 0);
 
  171     for (i = 0; i < 2; i++) {
 
  191     for (i = 0; i < 2; i++) {
 
  213     if (val < (1 << (nbits - 1)))
 
  214         val -= (1 << nbits) - 1;
 
  227                            int *
block, 
int *dc_cache,
 
  228                            int bx, 
int by, uint16_t *quant_mat)
 
  230     int skip, 
val, pos = 1, zz_pos, 
dc;
 
  232     memset(block, 0, 
sizeof(*block) * 64);
 
  252         dc += dc_cache[
LEFT];
 
  255     block[0]       = dc * quant_mat[0];
 
  274         block[zz_pos] = val * quant_mat[zz_pos];
 
  278     return pos == 64 ? 0 : -1;
 
  282                                  uint8_t *dst[3], 
int mb_x, 
int mb_y)
 
  287     for (j = 0; j < 2; j++) {
 
  288         for (i = 0; i < 2; i++) {
 
  289             int xpos = mb_x * 2 + i;
 
  305     for (i = 1; i < 3; i++) {
 
  316         out = dst[i] + mb_x * 16;
 
  319         for (j = 0; j < 16; j++) {
 
  320             for (k = 0; k < 8; k++)
 
  330                          int *sel_len, 
int *prev)
 
  334     for (i = 2; i >= 0; i--) {
 
  340             if (sel_len[i] > 0) {
 
  342                 vec_pos[i] = 
get_bits(gb, sel_len[i]);
 
  343                 if (vec_pos[i] >= pval)
 
  346                 vec_pos[i] = !prev[i];
 
  350             vec_pos[i] = prev[i];
 
  356                             int vec_size, 
int component, 
int shift, 
int *prev)
 
  358     if (vec_pos < vec_size)
 
  361         return prev[component];
 
  363     return prev[component];
 
  366 #define MKVAL(vals)  ((vals)[0] | ((vals)[1] << 3) | ((vals)[2] << 6)) 
  380                                    uint8_t *picdst[3], 
int mb_x, 
int mb_y)
 
  384     int     sel_len[3], sel_flag[3];
 
  386     int     prev_vec1 = 0, prev_split = 0;
 
  388     int     prev_pix[3] = { 0 };
 
  389     int     prev_mode[16] = { 0 };
 
  392     const int val_shift = ctx->
quality == 100 ? 0 : 2;
 
  394     for (i = 0; i < 3; i++)
 
  397     for (i = 0; i < 3; i++) {
 
  399         for (j = 0; j < vec_len[i]; j++) {
 
  404         sel_flag[i] = vec_len[i] > 1;
 
  405         sel_len[i]  = vec_len[i] > 2 ? vec_len[i] - 2 : 0;
 
  408     for (j = 0; j < 16; j++) {
 
  413                 vals[0] = vals[1] = vals[2] = 0;
 
  420             for (i = 0; i < 16; i++) {
 
  422                     vals[0] =  prev_mode[i]       & 7;
 
  423                     vals[1] = (prev_mode[i] >> 3) & 7;
 
  424                     vals[2] =  prev_mode[i] >> 6;
 
  425                     if (mode == 1 && i == split) {
 
  428                 } 
else if (mode == 2) {
 
  432                 for (k = 0; k < 3; k++)
 
  435                                                  val_shift, prev_pix);
 
  436                 prev_mode[i] = 
MKVAL(vals);
 
  441                 if (split >= prev_split)
 
  448                 vals[0] =  prev_mode[0]       & 7;
 
  449                 vals[1] = (prev_mode[0] >> 3) & 7;
 
  450                 vals[2] =  prev_mode[0] >> 6;
 
  451                 for (i = 0; i < 3; i++) {
 
  452                     for (k = 0; k < 
split; k++) {
 
  454                                                      vec_len[i], i, val_shift,
 
  456                         prev_mode[k] = 
MKVAL(vals);
 
  462                 vals[0] =  prev_vec1       & 7;
 
  463                 vals[1] = (prev_vec1 >> 3) & 7;
 
  464                 vals[2] =  prev_vec1 >> 6;
 
  467                     prev_vec1 = 
MKVAL(vals);
 
  469                 for (i = 0; i < 3; i++) {
 
  470                     for (k = 0; k < 16 - 
split; k++) {
 
  472                                                      vec_len[i], i, val_shift,
 
  474                         prev_mode[split + k] = 
MKVAL(vals);
 
  481     for (i = 0; i < 3; i++)
 
  482         for (j = 0; j < 16; j++)
 
  483             memcpy(picdst[i] + mb_x * 16 + j * ctx->
pic->
linesize[i],
 
  484                    ctx->
imgbuf[i] + j * 16, 16);
 
  498     for (i = 0; i < 2; i++)
 
  499         c->
prev_dc[0][mb_x * 2 + i] = 0;
 
  501     for (i = 1; i < 3; i++) {
 
  512     int buf_size = avpkt->
size;
 
  518     int x, y, i, mb_width, mb_height, blk_type;
 
  523                "Frame should have at least %d bytes, got %d instead\n",
 
  529     width      = bytestream2_get_be16(&bc);
 
  530     height     = bytestream2_get_be16(&bc);
 
  532     quality    = bytestream2_get_byte(&bc);
 
  533     frame_type = bytestream2_get_byte(&bc);
 
  535     if (width > avctx->
width ||
 
  536         height != avctx->
height) {
 
  541     if (quality < 1 || quality > 100) {
 
  545     if ((frame_type & ~3) || frame_type == 3) {
 
  552                "Empty frame found but it is not a skip frame.\n");
 
  571         for (i = 0; i < 2; i++)
 
  578     mb_width  = 
FFALIGN(width,  16) >> 4;
 
  579     mb_height = 
FFALIGN(height, 16) >> 4;
 
  585     for (y = 0; y < mb_height; y++) {
 
  587         for (x = 0; x < mb_width; x++) {
 
  593                            "Error decoding DCT block %d,%d\n",
 
  601                            "Error decoding VQ block %d,%d\n",
 
  635     for (i = 0; i < 3; i++)
 
  652     for (i = 0; i < 3; i++) {
 
static av_cold int mss4_decode_end(AVCodecContext *avctx)
const char const char void * val
void ff_mss34_gen_quant_mat(uint16_t *qmat, int quality, int luma)
Generate quantisation matrix for given quality. 
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
static int shift(int a, int b)
uint16_t quant_mat[2][64]
static int mss4_decode_dct_block(MSS4Context *c, GetBitContext *gb, uint8_t *dst[3], int mb_x, int mb_y)
This structure describes decoded (raw) audio or video data. 
ptrdiff_t const GLvoid * data
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) 
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits. 
static av_cold int init(AVCodecContext *avctx)
static void read_vec_pos(GetBitContext *gb, int *vec_pos, int *sel_flag, int *sel_len, int *prev)
int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
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)
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame)
Identical in function to av_frame_make_writable(), except it uses ff_get_buffer() to allocate the buf...
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values. 
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame. 
static int mss4_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
bitstream reader API header. 
static av_always_inline int get_coeff_bits(GetBitContext *gb, int nbits)
FrameType
G723.1 frame types. 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
static const uint8_t vec_len_syms[2][4]
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static int get_value_cached(GetBitContext *gb, int vec_pos, uint8_t *vec, int vec_size, int component, int shift, int *prev)
static av_always_inline unsigned int bytestream2_get_bytes_left(GetByteContext *g)
const char * name
Name of the codec implementation. 
static const uint8_t mss4_ac_vlc_syms[2][162]
static int get_coeff(GetBitContext *gb, VLC *vlc)
static char * split(char *message, char delim)
void ff_mss34_dct_put(uint8_t *dst, ptrdiff_t stride, int *block)
Transform and output DCT block. 
static av_cold void mss4_free_vlcs(MSS4Context *ctx)
enum AVPictureType pict_type
Picture type of the frame. 
static av_cold int mss4_init_vlc(VLC *vlc, const uint8_t *lens, const uint8_t *syms, int num_syms)
int width
picture width / height. 
static const uint8_t mss4_dc_vlc_lens[2][16]
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code. 
static av_cold int mss4_init_vlcs(MSS4Context *ctx)
Libavcodec external API header. 
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext. 
main external API structure. 
static void mss4_update_dc_cache(MSS4Context *c, int mb_x)
static av_cold int mss4_decode_init(AVCodecContext *avctx)
static unsigned int get_bits1(GetBitContext *s)
const uint8_t ff_zigzag_direct[64]
static const uint8_t mss4_ac_vlc_lens[2][16]
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
static const uint8_t mss4_vec_entry_vlc_lens[2][16]
static int mss4_decode_image_block(MSS4Context *ctx, GetBitContext *gb, uint8_t *picdst[3], int mb_x, int mb_y)
common internal api header. 
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length. 
static int decode012(GetBitContext *gb)
VLC_TYPE(* table)[2]
code, bits 
int key_frame
1 -> keyframe, 0-> not 
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> dc
static int mss4_decode_dct(GetBitContext *gb, VLC *dc_vlc, VLC *ac_vlc, int *block, int *dc_cache, int bx, int by, uint16_t *quant_mat)
#define av_malloc_array(a, b)
uint8_t imgbuf[3][16 *16]
This structure stores compressed data. 
void ff_free_vlc(VLC *vlc)
mode
Use these values in ebur128_init (or'ed). 
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators. 
static const uint8_t mss4_vec_entry_vlc_syms[2][9]