57 { 0, 1, 5, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0 },
58 { 0, 3, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0 }
62 { 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125 },
63 { 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119 }
67 { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
68 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
69 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08,
70 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0,
71 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16,
72 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28,
73 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
74 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
75 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
76 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
77 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
78 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
79 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
80 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
81 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,
82 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5,
83 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4,
84 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2,
85 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA,
86 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
88 { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
89 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
90 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
91 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0,
92 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34,
93 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26,
94 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38,
95 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
96 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
97 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
98 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
99 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
100 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96,
101 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5,
102 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4,
103 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3,
104 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2,
105 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
106 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
107 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
117 { 0, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
118 { 0, 1, 5, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
122 { 0, 7, 6, 5, 8, 4, 3, 1, 2 },
123 { 0, 2, 3, 4, 5, 6, 7, 1, 8 }
126 #define MAX_ENTRIES 162
147 const uint8_t *syms,
int num_syms)
152 int prefix = 0, max_bits = 0, idx = 0;
154 for (i = 0; i < 16; i++) {
155 for (j = 0; j < lens[i]; j++) {
157 codes[idx] = prefix++;
165 codes, 2, 2, syms, 1, 1, 0);
172 for (i = 0; i < 2; i++) {
192 for (i = 0; i < 2; i++) {
214 if (val < (1 << (nbits - 1)))
215 val -= (1 << nbits) - 1;
228 int *
block,
int *dc_cache,
229 int bx,
int by, uint16_t *quant_mat)
231 int skip,
val, pos = 1, zz_pos,
dc;
233 memset(block, 0,
sizeof(*block) * 64);
253 dc += dc_cache[
LEFT];
256 block[0] = dc * quant_mat[0];
275 block[zz_pos] = val * quant_mat[zz_pos];
279 return pos == 64 ? 0 : -1;
283 uint8_t *dst[3],
int mb_x,
int mb_y)
288 for (j = 0; j < 2; j++) {
289 for (i = 0; i < 2; i++) {
290 int xpos = mb_x * 2 + i;
306 for (i = 1; i < 3; i++) {
317 out = dst[i] + mb_x * 16;
320 for (j = 0; j < 16; j++) {
321 for (k = 0; k < 8; k++)
331 int *sel_len,
int *prev)
335 for (i = 2; i >= 0; i--) {
341 if (sel_len[i] > 0) {
343 vec_pos[i] =
get_bits(gb, sel_len[i]);
344 if (vec_pos[i] >= pval)
347 vec_pos[i] = !prev[i];
351 vec_pos[i] = prev[i];
357 int vec_size,
int component,
int shift,
int *prev)
359 if (vec_pos < vec_size)
362 return prev[component];
364 return prev[component];
367 #define MKVAL(vals) (vals[0] | (vals[1] << 3) | (vals[2] << 6))
381 uint8_t *picdst[3],
int mb_x,
int mb_y)
385 int sel_len[3], sel_flag[3];
387 int prev_vec1 = 0, prev_split = 0;
389 int prev_pix[3] = { 0 };
390 int prev_mode[16] = { 0 };
393 const int val_shift = ctx->
quality == 100 ? 0 : 2;
395 for (i = 0; i < 3; i++)
398 for (i = 0; i < 3; i++) {
400 for (j = 0; j < vec_len[i]; j++) {
405 sel_flag[i] = vec_len[i] > 1;
406 sel_len[i] = vec_len[i] > 2 ? vec_len[i] - 2 : 0;
409 for (j = 0; j < 16; j++) {
414 vals[0] = vals[1] = vals[2] = 0;
421 for (i = 0; i < 16; i++) {
423 vals[0] = prev_mode[i] & 7;
424 vals[1] = (prev_mode[i] >> 3) & 7;
425 vals[2] = prev_mode[i] >> 6;
426 if (mode == 1 && i == split) {
429 }
else if (mode == 2) {
433 for (k = 0; k < 3; k++)
436 val_shift, prev_pix);
437 prev_mode[i] =
MKVAL(vals);
442 if (split >= prev_split)
449 vals[0] = prev_mode[0] & 7;
450 vals[1] = (prev_mode[0] >> 3) & 7;
451 vals[2] = prev_mode[0] >> 6;
452 for (i = 0; i < 3; i++) {
453 for (k = 0; k <
split; k++) {
455 vec_len[i], i, val_shift,
457 prev_mode[k] =
MKVAL(vals);
463 vals[0] = prev_vec1 & 7;
464 vals[1] = (prev_vec1 >> 3) & 7;
465 vals[2] = prev_vec1 >> 6;
468 prev_vec1 =
MKVAL(vals);
470 for (i = 0; i < 3; i++) {
471 for (k = 0; k < 16 -
split; k++) {
473 vec_len[i], i, val_shift,
475 prev_mode[split + k] =
MKVAL(vals);
482 for (i = 0; i < 3; i++)
483 for (j = 0; j < 16; j++)
484 memcpy(picdst[i] + mb_x * 16 + j * ctx->
pic->
linesize[i],
485 ctx->
imgbuf[i] + j * 16, 16);
499 for (i = 0; i < 2; i++)
500 c->
prev_dc[0][mb_x * 2 + i] = 0;
502 for (i = 1; i < 3; i++) {
513 int buf_size = avpkt->
size;
519 int x,
y, i, mb_width, mb_height, blk_type;
524 "Frame should have at least %d bytes, got %d instead\n",
530 width = bytestream2_get_be16(&bc);
531 height = bytestream2_get_be16(&bc);
533 quality = bytestream2_get_byte(&bc);
534 frame_type = bytestream2_get_byte(&bc);
536 if (width > avctx->
width ||
537 height != avctx->
height) {
542 if (quality < 1 || quality > 100) {
546 if ((frame_type & ~3) || frame_type == 3) {
553 "Empty frame found but it is not a skip frame.\n");
572 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",
643 for (i = 0; i < 3; i++) {
665 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.
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.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static av_cold int init(AVCodecContext *avctx)
void ff_mss34_dct_put(uint8_t *dst, int stride, int *block)
Transform and output DCT block.
static void read_vec_pos(GetBitContext *gb, int *vec_pos, int *sel_flag, int *sel_len, int *prev)
void av_log(void *avcl, int level, const char *fmt,...) av_printf_format(3
Send the specified message to the log if the level is less than or equal to the current av_log_level...
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)
void av_freep(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
int ff_init_vlc_sparse(VLC *vlc, 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)
const char * name
Name of the codec implementation.
int av_frame_ref(AVFrame *dst, AVFrame *src)
Setup a new reference to the data described by a given frame.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
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)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
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){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));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=av_sample_fmt_is_planar(in_fmt);out_planar=av_sample_fmt_is_planar(out_fmt);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);ff_audio_convert_init_arm(ac);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_dlog(ac->avr,"%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 av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
static const uint8_t vec_len_syms[2][4]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
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)
FrameType
G723.1 frame types.
static const uint8_t mss4_ac_vlc_syms[2][162]
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Libavcodec external API header.
static int get_coeff(GetBitContext *gb, VLC *vlc)
static char * split(char *message, char delim)
static av_cold void mss4_free_vlcs(MSS4Context *ctx)
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...
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]
void * av_malloc(size_t size) av_malloc_attrib 1(1)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
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)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
main external API structure.
static void close(AVCodecParserContext *s)
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)
BYTE int const BYTE int int int height
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
static const uint8_t mss4_ac_vlc_lens[2][16]
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.
const uint8_t ff_zigzag_direct[64]
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
#define AVERROR_INVALIDDATA
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){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));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=av_sample_fmt_is_planar(in_fmt);out_planar=av_sample_fmt_is_planar(out_fmt);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);ff_audio_convert_init_arm(ac);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_dlog(ac->avr,"%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-> out
static int decode012(GetBitContext *gb)
VLC_TYPE(* table)[2]
code, bits
int key_frame
1 -> keyframe, 0-> not
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
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)
uint8_t imgbuf[3][16 *16]
This structure stores compressed data.
void ff_free_vlc(VLC *vlc)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
static const uint8_t mss4_vec_entry_vlc_syms[2][9]