86 #define FULLPEL_MODE 1
87 #define HALFPEL_MODE 2
88 #define THIRDPEL_MODE 3
89 #define PREDICT_MODE 4
101 0 + 0 * 4, 1 + 0 * 4, 2 + 0 * 4, 2 + 1 * 4,
102 2 + 2 * 4, 3 + 0 * 4, 3 + 1 * 4, 3 + 2 * 4,
103 0 + 1 * 4, 0 + 2 * 4, 1 + 1 * 4, 1 + 2 * 4,
104 0 + 3 * 4, 1 + 3 * 4, 2 + 3 * 4, 3 + 3 * 4,
108 0 * 16 + 0 * 64, 1 * 16 + 0 * 64, 2 * 16 + 0 * 64, 0 * 16 + 2 * 64,
109 3 * 16 + 0 * 64, 0 * 16 + 1 * 64, 1 * 16 + 1 * 64, 2 * 16 + 1 * 64,
110 1 * 16 + 2 * 64, 2 * 16 + 2 * 64, 3 * 16 + 2 * 64, 0 * 16 + 3 * 64,
111 3 * 16 + 1 * 64, 1 * 16 + 3 * 64, 2 * 16 + 3 * 64, 3 * 16 + 3 * 64,
117 { 0, 2 }, { 1, 1 }, { 2, 0 },
118 { 3, 0 }, { 2, 1 }, { 1, 2 }, { 0, 3 },
119 { 0, 4 }, { 1, 3 }, { 2, 2 }, { 3, 1 }, { 4, 0 },
120 { 4, 1 }, { 3, 2 }, { 2, 3 }, { 1, 4 },
121 { 2, 4 }, { 3, 3 }, { 4, 2 },
127 { { 2, -1, -1, -1, -1 }, { 2, 1, -1, -1, -1 }, { 1, 2, -1, -1, -1 },
128 { 2, 1, -1, -1, -1 }, { 1, 2, -1, -1, -1 }, { 1, 2, -1, -1, -1 } },
129 { { 0, 2, -1, -1, -1 }, { 0, 2, 1, 4, 3 }, { 0, 1, 2, 4, 3 },
130 { 0, 2, 1, 4, 3 }, { 2, 0, 1, 3, 4 }, { 0, 4, 2, 1, 3 } },
131 { { 2, 0, -1, -1, -1 }, { 2, 1, 0, 4, 3 }, { 1, 2, 4, 0, 3 },
132 { 2, 1, 0, 4, 3 }, { 2, 1, 4, 3, 0 }, { 1, 2, 4, 0, 3 } },
133 { { 2, 0, -1, -1, -1 }, { 2, 0, 1, 4, 3 }, { 1, 2, 0, 4, 3 },
134 { 2, 1, 0, 4, 3 }, { 2, 1, 3, 4, 0 }, { 2, 4, 1, 0, 3 } },
135 { { 0, 2, -1, -1, -1 }, { 0, 2, 1, 3, 4 }, { 1, 2, 3, 0, 4 },
136 { 2, 0, 1, 3, 4 }, { 2, 1, 3, 0, 4 }, { 2, 0, 4, 3, 1 } },
137 { { 0, 2, -1, -1, -1 }, { 0, 2, 4, 1, 3 }, { 1, 4, 2, 0, 3 },
138 { 4, 2, 0, 1, 3 }, { 2, 0, 1, 4, 3 }, { 4, 2, 1, 0, 3 } },
141 static const struct {
145 { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 2, 1 }, { 0, 2 }, { 3, 1 }, { 4, 1 }, { 5, 1 },
146 { 0, 3 }, { 1, 2 }, { 2, 2 }, { 6, 1 }, { 7, 1 }, { 8, 1 }, { 9, 1 }, { 0, 4 } },
147 { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 0, 2 }, { 2, 1 }, { 0, 3 }, { 0, 4 }, { 0, 5 },
148 { 3, 1 }, { 4, 1 }, { 1, 2 }, { 1, 3 }, { 0, 6 }, { 0, 7 }, { 0, 8 }, { 0, 9 } }
152 3881, 4351, 4890, 5481, 6154, 6914, 7761, 8718,
153 9781, 10987, 12339, 13828, 15523, 17435, 19561, 21873,
154 24552, 27656, 30847, 34870, 38807, 43747, 49103, 54683,
155 61694, 68745, 77615, 89113, 100253, 109366, 126635, 141533
166 for (i = 0; i < 4; i++) {
167 const int z0 = 13 * (input[4 * i + 0] + input[4 * i + 2]);
168 const int z1 = 13 * (input[4 * i + 0] - input[4 * i + 2]);
169 const int z2 = 7 * input[4 * i + 1] - 17 * input[4 * i + 3];
170 const int z3 = 17 * input[4 * i + 1] + 7 * input[4 * i + 3];
172 temp[4 * i + 0] = z0 + z3;
173 temp[4 * i + 1] = z1 + z2;
174 temp[4 * i + 2] = z1 - z2;
175 temp[4 * i + 3] = z0 - z3;
178 for (i = 0; i < 4; i++) {
179 const int offset = x_offset[i];
180 const int z0 = 13 * (temp[4 * 0 + i] + temp[4 * 2 + i]);
181 const int z1 = 13 * (temp[4 * 0 + i] - temp[4 * 2 + i]);
182 const int z2 = 7 * temp[4 * 1 + i] - 17 * temp[4 * 3 + i];
183 const int z3 = 17 * temp[4 * 1 + i] + 7 * temp[4 * 3 + i];
185 output[
stride * 0 + offset] = (z0 + z3) * qmul + 0x80000 >> 20;
186 output[
stride * 2 + offset] = (z1 + z2) * qmul + 0x80000 >> 20;
187 output[
stride * 8 + offset] = (z1 - z2) * qmul + 0x80000 >> 20;
188 output[
stride * 10 + offset] = (z0 - z3) * qmul + 0x80000 >> 20;
200 dc = 13 * 13 * (dc == 1 ? 1538 * block[0]
201 : qmul * (block[0] >> 3) / 2);
205 for (i = 0; i < 4; i++) {
206 const int z0 = 13 * (block[0 + 4 * i] + block[2 + 4 * i]);
207 const int z1 = 13 * (block[0 + 4 * i] - block[2 + 4 * i]);
208 const int z2 = 7 * block[1 + 4 * i] - 17 * block[3 + 4 * i];
209 const int z3 = 17 * block[1 + 4 * i] + 7 * block[3 + 4 * i];
211 block[0 + 4 * i] = z0 + z3;
212 block[1 + 4 * i] = z1 + z2;
213 block[2 + 4 * i] = z1 - z2;
214 block[3 + 4 * i] = z0 - z3;
217 for (i = 0; i < 4; i++) {
218 const int z0 = 13 * (block[i + 4 * 0] + block[i + 4 * 2]);
219 const int z1 = 13 * (block[i + 4 * 0] - block[i + 4 * 2]);
220 const int z2 = 7 * block[i + 4 * 1] - 17 * block[i + 4 * 3];
221 const int z3 = 17 * block[i + 4 * 1] + 7 * block[i + 4 * 3];
222 const int rr = (dc + 0x80000);
224 dst[i + stride * 0] = av_clip_uint8(dst[i + stride * 0] + ((z0 + z3) * qmul + rr >> 20));
225 dst[i + stride * 1] = av_clip_uint8(dst[i + stride * 1] + ((z1 + z2) * qmul + rr >> 20));
226 dst[i + stride * 2] = av_clip_uint8(dst[i + stride * 2] + ((z1 - z2) * qmul + rr >> 20));
227 dst[i + stride * 3] = av_clip_uint8(dst[i + stride * 3] + ((z0 - z3) * qmul + rr >> 20));
230 memset(block, 0, 16 *
sizeof(int16_t));
234 int index,
const int type)
236 static const uint8_t *
const scan_patterns[4] =
241 const int intra = 3 * type >> 2;
242 const uint8_t *
const scan = scan_patterns[type];
244 for (limit = (16 >> intra); index < 16; index = limit, limit += 8) {
246 int sign = (vlc & 1) ? 0 : -1;
253 }
else if (vlc < 4) {
258 level = (vlc + 9 >> 2) - run;
267 ((run == 0) ? 8 : ((run < 2) ? 2 : ((run < 5) ? 0 : -1)));
271 ((run == 0) ? 4 : ((run < 3) ? 2 : ((run < 10) ? 1 : 0)));
275 if ((index += run) >= limit)
278 block[scan[
index]] = (level ^ sign) - sign;
291 int mx,
int my,
int dxy,
292 int thirdpel,
int dir,
int avg)
298 int blocksize = 2 - (width >> 3);
303 if (mx < 0 || mx >= s->
h_edge_pos - width - 1 ||
306 mx = av_clip(mx, -16, s->
h_edge_pos - width + 15);
307 my = av_clip(my, -16, s->
v_edge_pos - height + 15);
317 width + 1, height + 1,
331 mx = mx + (mx < (int) x) >> 1;
332 my = my + (my < (int) y) >> 1;
334 height = height >> 1;
337 for (i = 1; i < 3; i++) {
344 width + 1, height + 1,
366 int i, j, k, mx, my, dx, dy, x, y;
368 const int part_width = ((size & 5) == 4) ? 4 : 16 >> (size & 1);
369 const int part_height = 16 >> ((unsigned)(size + 1) / 3);
370 const int extra_width = (mode ==
PREDICT_MODE) ? -16 * 6 : 0;
371 const int h_edge_pos = 6 * (s->
h_edge_pos - part_width) - extra_width;
372 const int v_edge_pos = 6 * (s->
v_edge_pos - part_height) - extra_width;
374 for (i = 0; i < 16; i += part_height)
375 for (j = 0; j < 16; j += part_width) {
376 const int b_xy = (4 * h->
mb_x + (j >> 2)) +
379 x = 16 * h->
mb_x + j;
380 y = 16 * h->
mb_y + i;
381 k = (j >> 2 & 1) + (i >> 1 & 2) +
382 (j >> 1 & 4) + (i & 8);
385 pred_motion(h, k, part_width >> 2, dir, 1, &mx, &my);
404 mx = av_clip(mx, extra_width - 6 * x, h_edge_pos - 6 * x);
405 my = av_clip(my, extra_width - 6 * y, v_edge_pos - 6 * y);
423 mx = (mx + 1 >> 1) + dx;
424 my = (my + 1 >> 1) + dy;
425 fx = (unsigned)(mx + 0x3000) / 3 - 0x1000;
426 fy = (unsigned)(my + 0x3000) / 3 - 0x1000;
427 dxy = (mx - 3 * fx) + 4 * (my - 3 * fy);
430 fx, fy, dxy, 1, dir, avg);
434 mx = (unsigned)(mx + 1 + 0x3000) / 3 + dx - 0x1000;
435 my = (unsigned)(my + 1 + 0x3000) / 3 + dy - 0x1000;
436 dxy = (mx & 1) + 2 * (my & 1);
439 mx >> 1, my >> 1, dxy, 0, dir, avg);
443 mx = (unsigned)(mx + 3 + 0x6000) / 6 + dx - 0x1000;
444 my = (unsigned)(my + 3 + 0x6000) / 6 + dy - 0x1000;
447 mx, my, 0, 0, dir, avg);
456 if (part_height == 8 && i < 8) {
459 if (part_width == 8 && j < 8)
462 if (part_width == 8 && j < 8)
464 if (part_width == 4 || part_height == 4)
470 part_width >> 2, part_height >> 2, h->
b_stride,
480 int i, j, k, m, dir, mode;
484 const int mb_xy = h->
mb_xy;
511 }
else if (mb_type < 8) {
529 for (m = 0; m < 2; m++) {
531 for (i = 0; i < 4; i++)
535 for (i = 0; i < 4; i++)
541 4 * 2 *
sizeof(int16_t));
577 for (i = 0; i < 4; i++)
579 0, 4 * 2 *
sizeof(int16_t));
585 for (i = 0; i < 4; i++)
587 0, 4 * 2 *
sizeof(int16_t));
592 }
else if (mb_type == 8 || mb_type == 33) {
597 for (i = 0; i < 4; i++)
613 for (i = 0; i < 16; i += 2) {
625 left[2] =
svq3_pred_1[top[1] + 1][left[1] + 1][svq3_pred_0[vlc][1]];
627 if (left[1] == -1 || left[2] == -1) {
633 for (i = 0; i < 4; i++)
645 for (i = 0; i < 4; i++)
655 dir = (dir >> 1) ^ 3 * (dir & 1) ^ 1;
667 for (i = 0; i < 4; i++)
669 0, 4 * 2 *
sizeof(int16_t));
671 for (i = 0; i < 4; i++)
673 0, 4 * 2 *
sizeof(int16_t));
707 "error while decoding intra luma dc\n");
716 for (i = 0; i < 4; i++)
717 if ((cbp & (1 << i))) {
718 for (j = 0; j < 4; j++) {
719 k = index ? (1 * (j & 1) + 2 * (i & 1) +
720 2 * (j & 2) + 4 * (i & 2))
726 "error while decoding block\n");
733 for (i = 1; i < 3; ++i)
736 "error while decoding chroma dc block\n");
741 for (i = 1; i < 3; i++) {
742 for (j = 0; j < 4; j++) {
748 "error while decoding chroma ac block\n");
770 const int mb_xy = h->
mb_xy;
776 if (((header & 0x9F) != 1 && (header & 0x9F) != 2) || (header & 0x60) == 0) {
781 int length = header >> 5 & 3;
814 if ((header & 0x9F) == 2) {
842 -1, 4 *
sizeof(int8_t));
844 -1, 8 *
sizeof(int8_t) * h->
mb_x);
862 unsigned char *extradata;
863 unsigned char *extradata_end;
865 int marker_found = 0;
894 extradata = (
unsigned char *)avctx->
extradata;
898 if (!memcmp(extradata,
"SEQH", 4)) {
912 if (size > extradata_end - extradata - 8)
918 switch (frame_size_code) {
980 unsigned long buf_len = watermark_width *
981 watermark_height * 4;
985 if (watermark_height > 0 &&
986 (uint64_t)watermark_width * 4 > UINT_MAX / watermark_height)
991 watermark_width, watermark_height);
993 "u1: %x u2: %x u3: %x compressed data size: %d offset: %d\n",
994 u1, u2, u3, u4, offset);
995 if (uncompress(buf, &buf_len, extradata + 8 + offset,
996 size - offset) != Z_OK) {
998 "could not uncompress watermark logo\n");
1009 "this svq3 file contains watermark which need zlib support compiled in\n");
1036 for (i = 0; i < 2; i++) {
1051 const int b4_stride = h->
mb_width * 4 + 1;
1052 const int b4_array_size = b4_stride * h->
mb_height * 4;
1063 for (i = 0; i < 2; i++) {
1103 int buf_size = avpkt->
size;
1107 if (buf_size == 0) {
1147 for (i = 0; i < 16; i++) {
1151 for (i = 0; i < 16; i++) {
1186 "%c hpel:%d, tpel:%d aqp:%d qp:%d, slice_num:%02X\n",
1222 for (m = 0; m < 2; m++) {
1224 for (i = 0; i < 4; i++) {
1226 for (j = -1; j < 4; j++)
1258 "error while decoding MB %d %d\n", h->
mb_x, h->
mb_y);
#define MB_TYPE_INTRA16x16
static const struct @58 svq3_dct_tables[2][16]
const struct AVCodec * codec
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
discard all frames except keyframes
uint8_t * edge_emu_buffer
unsigned int top_samples_available
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
op_pixels_func avg_pixels_tab[4][4]
Halfpel motion compensation with rounding (a+b+1)>>1.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
uint16_t ff_svq1_packet_checksum(const uint8_t *data, const int length, int value)
static int svq3_decode_block(GetBitContext *gb, int16_t *block, int index, const int type)
static void skip_bits_long(GetBitContext *s, int n)
av_cold int ff_h264_decode_init(AVCodecContext *avctx)
static unsigned svq3_get_ue_golomb(GetBitContext *gb)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static void free_picture(AVCodecContext *avctx, Picture *pic)
int16_t mv_cache[2][5 *8][2]
Motion vector cache.
static av_always_inline uint32_t pack16to32(int a, int b)
static const uint8_t zigzag_scan[16]
Macro definitions for various function/variable attributes.
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 svq3_mc_dir(SVQ3Context *s, int size, int mode, int dir, int avg)
enum AVDiscard skip_frame
static const uint8_t golomb_to_pict_type[5]
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
static const uint8_t luma_dc_zigzag_scan[16]
int prev_frame_num_offset
for POC type 2
#define FF_DEBUG_PICT_INFO
static int get_buffer(AVCodecContext *avctx, Picture *pic)
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static const IMbInfo i_mb_type_info[26]
static int get_bits_count(const GetBitContext *s)
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
AVBufferRef * mb_type_buf
static int svq3_decode_mb(SVQ3Context *s, unsigned int mb_type)
H.264 / AVC / MPEG4 part10 codec.
int ff_h264_check_intra_pred_mode(H264Context *h, int mode, int is_chroma)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int has_b_frames
Size of the frame reordering buffer in the decoder.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
int16_t mb_luma_dc[3][16 *2]
tpel_mc_func avg_tpel_pixels_tab[11]
void ff_h264_hl_decode_mb(H264Context *h)
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
void ff_draw_horiz_band(AVCodecContext *avctx, Picture *cur, Picture *last, int y, int h, int picture_structure, int first_field, int low_delay)
Sorenson Vector Quantizer #1 (SVQ1) video codec.
static const uint8_t scan8[16 *3+3]
static av_always_inline void pred_motion(H264Context *const h, int n, int part_width, int list, int ref, int *const mx, int *const my)
Get the predicted MV.
av_cold void ff_hpeldsp_init(HpelDSPContext *c, int flags)
static int svq3_get_se_golomb(GetBitContext *gb)
void ff_svq3_add_idct_c(uint8_t *dst, int16_t *block, int stride, int qp, int dc)
useful rectangle filling function
unsigned int left_samples_available
AVBufferRef * motion_val_buf[2]
enum AVPixelFormat * pix_fmts
array of supported pixel formats, or NULL if unknown, array is terminated by -1
enum AVPictureType pict_type
Picture type of the frame.
int frame_num_offset
for POC type 2
#define CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_...
int width
picture width / height.
int16_t(*[2] motion_val)[2]
void ff_svq3_luma_dc_dequant_idct_c(int16_t *output, int16_t *input, int qp)
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
static av_cold int svq3_decode_init(AVCodecContext *avctx)
static void fill_rectangle(SDL_Surface *screen, int x, int y, int w, int h, int color)
int8_t intra4x4_pred_mode_cache[5 *8]
unsigned int topright_samples_available
static const uint8_t golomb_to_intra4x4_cbp[48]
#define PART_NOT_AVAILABLE
if(ac->has_optimized_func)
static const int8_t mv[256][2]
Libavcodec external API header.
H264 / AVC / MPEG4 part10 codec data table
int prev_frame_num
frame_num of the last pic for POC type 1/2
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
main external API structure.
static void close(AVCodecParserContext *s)
int ff_h264_check_intra4x4_pred_mode(H264Context *h)
Check if the top & left blocks are available if needed and change the dc mode so it only uses the ava...
uint8_t * data
The data buffer.
int ff_h264_alloc_tables(H264Context *h)
Allocate tables.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
int16_t mb[16 *48 *2]
as a dct coeffecient is int32_t in high depth, we need to reserve twice the space.
op_pixels_func put_pixels_tab[4][4]
Halfpel motion compensation with rounding (a+b+1)>>1.
AVBufferRef * av_buffer_allocz(int size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
static const uint8_t chroma_dc_scan[4]
static void svq3_mc_dir_part(SVQ3Context *s, int x, int y, int width, int height, int mx, int my, int dxy, int thirdpel, int dir, int avg)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static av_cold int svq3_decode_end(AVCodecContext *avctx)
static const uint8_t svq3_pred_0[25][2]
int block_offset[2 *(16 *3)]
block_offset[ 0..23] for frame macroblocks block_offset[24..47] for field macroblocks ...
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
av_cold void ff_h264_free_context(H264Context *h)
Free any data that may have been allocated in the H264 context like SPS, PPS etc. ...
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
tpel_mc_func put_tpel_pixels_tab[11]
Thirdpel motion compensation with rounding (a+b+1)>>1.
discard all non reference
common internal api header.
#define CODEC_FLAG_GRAY
Only decode/encode grayscale.
H.264 / AVC / MPEG4 part10 motion vector predicion.
static const uint8_t golomb_to_inter_cbp[48]
static av_cold int init(AVCodecParserContext *s)
static av_always_inline void write_back_intra_pred_mode(H264Context *h)
static const uint32_t svq3_dequant_coeff[32]
uint8_t non_zero_count_cache[15 *8]
non zero coeff count cache.
static int svq3_decode_slice_header(AVCodecContext *avctx)
int key_frame
1 -> keyframe, 0-> not
enum AVPictureType pict_type
static const uint8_t svq3_scan[16]
static const int8_t svq3_pred_1[6][6][5]
int8_t * intra4x4_pred_mode
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
#define FFSWAP(type, a, b)
AVPixelFormat
Pixel format.
This structure stores compressed data.
static int svq3_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
void(* emulated_edge_mc)(uint8_t *buf, const uint8_t *src, ptrdiff_t buf_linesize, ptrdiff_t src_linesize, int block_w, int block_h, int src_x, int src_y, int w, int h)
Copy a rectangular area of samples to a temporary buffer and replicate the border samples...
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
int8_t ref_cache[2][5 *8]
AVBufferRef * ref_index_buf[2]