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];
363 prev[component] =
get_bits(gb, 8 - shift) << shift;
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];
386 int i, j, k, mode,
split;
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");
574 for (i = 0; i < 2; i++)
580 mb_width =
FFALIGN(width, 16) >> 4;
581 mb_height =
FFALIGN(height, 16) >> 4;
587 for (y = 0; y < mb_height; y++) {
589 for (x = 0; x < mb_width; x++) {
595 "Error decoding DCT block %d,%d\n",
603 "Error decoding VQ block %d,%d\n",
637 for (i = 0; i < 3; i++)
654 for (i = 0; i < 3; i++) {
static av_cold int mss4_decode_end(AVCodecContext *avctx)
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
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.
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.
FrameType
G723.1 frame types.
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.
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)
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 *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
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)
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.
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=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);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_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
#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.
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)
void av_log(void *avcl, int level, const char *fmt,...)
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)
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]
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.
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)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
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.
const uint8_t ff_zigzag_direct[64]
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
static av_cold int init(AVCodecParserContext *s)
static int decode012(GetBitContext *gb)
VLC_TYPE(* table)[2]
code, bits
int key_frame
1 -> keyframe, 0-> not
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 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=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);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_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
uint8_t imgbuf[3][16 *16]
This structure stores compressed data.
void ff_free_vlc(VLC *vlc)
static const uint8_t mss4_vec_entry_vlc_syms[2][9]