43 #include "libavutil/attributes.h"
89 #define FULLPEL_MODE 1
90 #define HALFPEL_MODE 2
91 #define THIRDPEL_MODE 3
92 #define PREDICT_MODE 4
104 0 + 0 * 4, 1 + 0 * 4, 2 + 0 * 4, 2 + 1 * 4,
105 2 + 2 * 4, 3 + 0 * 4, 3 + 1 * 4, 3 + 2 * 4,
106 0 + 1 * 4, 0 + 2 * 4, 1 + 1 * 4, 1 + 2 * 4,
107 0 + 3 * 4, 1 + 3 * 4, 2 + 3 * 4, 3 + 3 * 4,
111 0 * 16 + 0 * 64, 1 * 16 + 0 * 64, 2 * 16 + 0 * 64, 0 * 16 + 2 * 64,
112 3 * 16 + 0 * 64, 0 * 16 + 1 * 64, 1 * 16 + 1 * 64, 2 * 16 + 1 * 64,
113 1 * 16 + 2 * 64, 2 * 16 + 2 * 64, 3 * 16 + 2 * 64, 0 * 16 + 3 * 64,
114 3 * 16 + 1 * 64, 1 * 16 + 3 * 64, 2 * 16 + 3 * 64, 3 * 16 + 3 * 64,
120 { 0, 2 }, { 1, 1 }, { 2, 0 },
121 { 3, 0 }, { 2, 1 }, { 1, 2 }, { 0, 3 },
122 { 0, 4 }, { 1, 3 }, { 2, 2 }, { 3, 1 }, { 4, 0 },
123 { 4, 1 }, { 3, 2 }, { 2, 3 }, { 1, 4 },
124 { 2, 4 }, { 3, 3 }, { 4, 2 },
130 { { 2, -1, -1, -1, -1 }, { 2, 1, -1, -1, -1 }, { 1, 2, -1, -1, -1 },
131 { 2, 1, -1, -1, -1 }, { 1, 2, -1, -1, -1 }, { 1, 2, -1, -1, -1 } },
132 { { 0, 2, -1, -1, -1 }, { 0, 2, 1, 4, 3 }, { 0, 1, 2, 4, 3 },
133 { 0, 2, 1, 4, 3 }, { 2, 0, 1, 3, 4 }, { 0, 4, 2, 1, 3 } },
134 { { 2, 0, -1, -1, -1 }, { 2, 1, 0, 4, 3 }, { 1, 2, 4, 0, 3 },
135 { 2, 1, 0, 4, 3 }, { 2, 1, 4, 3, 0 }, { 1, 2, 4, 0, 3 } },
136 { { 2, 0, -1, -1, -1 }, { 2, 0, 1, 4, 3 }, { 1, 2, 0, 4, 3 },
137 { 2, 1, 0, 4, 3 }, { 2, 1, 3, 4, 0 }, { 2, 4, 1, 0, 3 } },
138 { { 0, 2, -1, -1, -1 }, { 0, 2, 1, 3, 4 }, { 1, 2, 3, 0, 4 },
139 { 2, 0, 1, 3, 4 }, { 2, 1, 3, 0, 4 }, { 2, 0, 4, 3, 1 } },
140 { { 0, 2, -1, -1, -1 }, { 0, 2, 4, 1, 3 }, { 1, 4, 2, 0, 3 },
141 { 4, 2, 0, 1, 3 }, { 2, 0, 1, 4, 3 }, { 4, 2, 1, 0, 3 } },
144 static const struct {
148 { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 2, 1 }, { 0, 2 }, { 3, 1 }, { 4, 1 }, { 5, 1 },
149 { 0, 3 }, { 1, 2 }, { 2, 2 }, { 6, 1 }, { 7, 1 }, { 8, 1 }, { 9, 1 }, { 0, 4 } },
150 { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 0, 2 }, { 2, 1 }, { 0, 3 }, { 0, 4 }, { 0, 5 },
151 { 3, 1 }, { 4, 1 }, { 1, 2 }, { 1, 3 }, { 0, 6 }, { 0, 7 }, { 0, 8 }, { 0, 9 } }
155 3881, 4351, 4890, 5481, 6154, 6914, 7761, 8718,
156 9781, 10987, 12339, 13828, 15523, 17435, 19561, 21873,
157 24552, 27656, 30847, 34870, 38807, 43747, 49103, 54683,
158 61694, 68745, 77615, 89113, 100253, 109366, 126635, 141533
169 for (i = 0; i < 4; i++) {
170 const int z0 = 13 * (input[4 * i + 0] + input[4 * i + 2]);
171 const int z1 = 13 * (input[4 * i + 0] - input[4 * i + 2]);
172 const int z2 = 7 * input[4 * i + 1] - 17 * input[4 * i + 3];
173 const int z3 = 17 * input[4 * i + 1] + 7 * input[4 * i + 3];
175 temp[4 * i + 0] = z0 + z3;
176 temp[4 * i + 1] = z1 + z2;
177 temp[4 * i + 2] = z1 - z2;
178 temp[4 * i + 3] = z0 - z3;
181 for (i = 0; i < 4; i++) {
182 const int offset = x_offset[i];
183 const int z0 = 13 * (temp[4 * 0 + i] + temp[4 * 2 + i]);
184 const int z1 = 13 * (temp[4 * 0 + i] - temp[4 * 2 + i]);
185 const int z2 = 7 * temp[4 * 1 + i] - 17 * temp[4 * 3 + i];
186 const int z3 = 17 * temp[4 * 1 + i] + 7 * temp[4 * 3 + i];
188 output[
stride * 0 +
offset] = (z0 + z3) * qmul + 0x80000 >> 20;
189 output[
stride * 2 +
offset] = (z1 + z2) * qmul + 0x80000 >> 20;
190 output[
stride * 8 +
offset] = (z1 - z2) * qmul + 0x80000 >> 20;
191 output[
stride * 10 +
offset] = (z0 - z3) * qmul + 0x80000 >> 20;
203 dc = 13 * 13 * (dc == 1 ? 1538 * block[0]
204 : qmul * (block[0] >> 3) / 2);
208 for (i = 0; i < 4; i++) {
209 const int z0 = 13 * (block[0 + 4 * i] + block[2 + 4 * i]);
210 const int z1 = 13 * (block[0 + 4 * i] - block[2 + 4 * i]);
211 const int z2 = 7 * block[1 + 4 * i] - 17 * block[3 + 4 * i];
212 const int z3 = 17 * block[1 + 4 * i] + 7 * block[3 + 4 * i];
214 block[0 + 4 * i] = z0 + z3;
215 block[1 + 4 * i] = z1 + z2;
216 block[2 + 4 * i] = z1 - z2;
217 block[3 + 4 * i] = z0 - z3;
220 for (i = 0; i < 4; i++) {
221 const int z0 = 13 * (block[i + 4 * 0] + block[i + 4 * 2]);
222 const int z1 = 13 * (block[i + 4 * 0] - block[i + 4 * 2]);
223 const int z2 = 7 * block[i + 4 * 1] - 17 * block[i + 4 * 3];
224 const int z3 = 17 * block[i + 4 * 1] + 7 * block[i + 4 * 3];
225 const int rr = (dc + 0x80000);
227 dst[i + stride * 0] = av_clip_uint8(dst[i + stride * 0] + ((z0 + z3) * qmul + rr >> 20));
228 dst[i + stride * 1] = av_clip_uint8(dst[i + stride * 1] + ((z1 + z2) * qmul + rr >> 20));
229 dst[i + stride * 2] = av_clip_uint8(dst[i + stride * 2] + ((z1 - z2) * qmul + rr >> 20));
230 dst[i + stride * 3] = av_clip_uint8(dst[i + stride * 3] + ((z0 - z3) * qmul + rr >> 20));
233 memset(block, 0, 16 *
sizeof(int16_t));
239 static const uint8_t *
const scan_patterns[4] =
244 const int intra = 3 * type >> 2;
247 for (limit = (16 >> intra); index < 16; index = limit, limit += 8) {
252 sign = (vlc & 1) ? 0 : -1;
259 }
else if (vlc < 4) {
264 level = (vlc + 9 >> 2) - run;
272 level = (vlc >> 3) + ((run == 0) ? 8 : ((run < 2) ? 2 : ((run < 5) ? 0 : -1)));
275 level = (vlc >> 4) + ((run == 0) ? 4 : ((run < 3) ? 2 : ((run < 10) ? 1 : 0)));
280 if ((index += run) >= limit)
283 block[scan[
index]] = (level ^ sign) - sign;
296 int mx,
int my,
int dxy,
297 int thirdpel,
int dir,
int avg)
303 int blocksize = 2 - (width >> 3);
308 if (mx < 0 || mx >= s->
h_edge_pos - width - 1 ||
311 mx = av_clip(mx, -16, s->
h_edge_pos - width + 15);
312 my = av_clip(my, -16, s->
v_edge_pos - height + 15);
322 width + 1, height + 1,
336 mx = mx + (mx < (int) x) >> 1;
337 my = my + (my < (int) y) >> 1;
339 height = height >> 1;
342 for (i = 1; i < 3; i++) {
349 width + 1, height + 1,
371 int i, j, k, mx, my, dx, dy, x,
y;
373 const int part_width = ((size & 5) == 4) ? 4 : 16 >> (size & 1);
374 const int part_height = 16 >> ((unsigned)(size + 1) / 3);
375 const int extra_width = (mode ==
PREDICT_MODE) ? -16 * 6 : 0;
376 const int h_edge_pos = 6 * (s->
h_edge_pos - part_width) - extra_width;
377 const int v_edge_pos = 6 * (s->
v_edge_pos - part_height) - extra_width;
379 for (i = 0; i < 16; i += part_height)
380 for (j = 0; j < 16; j += part_width) {
381 const int b_xy = (4 * h->
mb_x + (j >> 2)) +
384 x = 16 * h->
mb_x + j;
385 y = 16 * h->
mb_y + i;
386 k = (j >> 2 & 1) + (i >> 1 & 2) +
387 (j >> 1 & 4) + (i & 8);
390 pred_motion(h, k, part_width >> 2, dir, 1, &mx, &my);
409 mx = av_clip(mx, extra_width - 6 * x, h_edge_pos - 6 * x);
410 my = av_clip(my, extra_width - 6 * y, v_edge_pos - 6 * y);
428 mx = (mx + 1 >> 1) + dx;
429 my = (my + 1 >> 1) + dy;
430 fx = (unsigned)(mx + 0x3000) / 3 - 0x1000;
431 fy = (unsigned)(my + 0x3000) / 3 - 0x1000;
432 dxy = (mx - 3 * fx) + 4 * (my - 3 * fy);
435 fx, fy, dxy, 1, dir, avg);
439 mx = (unsigned)(mx + 1 + 0x3000) / 3 + dx - 0x1000;
440 my = (unsigned)(my + 1 + 0x3000) / 3 + dy - 0x1000;
441 dxy = (mx & 1) + 2 * (my & 1);
444 mx >> 1, my >> 1, dxy, 0, dir, avg);
448 mx = (unsigned)(mx + 3 + 0x6000) / 6 + dx - 0x1000;
449 my = (unsigned)(my + 3 + 0x6000) / 6 + dy - 0x1000;
452 mx, my, 0, 0, dir, avg);
461 if (part_height == 8 && i < 8) {
464 if (part_width == 8 && j < 8)
467 if (part_width == 8 && j < 8)
469 if (part_width == 4 || part_height == 4)
475 part_width >> 2, part_height >> 2, h->
b_stride,
485 int i, j, k,
m, dir,
mode;
489 const int mb_xy = h->
mb_xy;
516 }
else if (mb_type < 8) {
534 for (m = 0; m < 2; m++) {
536 for (i = 0; i < 4; i++)
540 for (i = 0; i < 4; i++)
546 4 * 2 *
sizeof(int16_t));
582 for (i = 0; i < 4; i++)
584 0, 4 * 2 *
sizeof(int16_t));
590 for (i = 0; i < 4; i++)
592 0, 4 * 2 *
sizeof(int16_t));
597 }
else if (mb_type == 8 || mb_type == 33) {
602 for (i = 0; i < 4; i++)
618 for (i = 0; i < 16; i += 2) {
630 left[2] =
svq3_pred_1[top[1] + 1][left[1] + 1][svq3_pred_0[vlc][1]];
632 if (left[1] == -1 || left[2] == -1) {
638 for (i = 0; i < 4; i++)
650 for (i = 0; i < 4; i++)
660 dir = (dir >> 1) ^ 3 * (dir & 1) ^ 1;
672 for (i = 0; i < 4; i++)
674 0, 4 * 2 *
sizeof(int16_t));
676 for (i = 0; i < 4; i++)
678 0, 4 * 2 *
sizeof(int16_t));
712 "error while decoding intra luma dc\n");
721 for (i = 0; i < 4; i++)
722 if ((cbp & (1 << i))) {
723 for (j = 0; j < 4; j++) {
724 k = index ? (1 * (j & 1) + 2 * (i & 1) +
725 2 * (j & 2) + 4 * (i & 2))
731 "error while decoding block\n");
738 for (i = 1; i < 3; ++i)
741 "error while decoding chroma dc block\n");
746 for (i = 1; i < 3; i++) {
747 for (j = 0; j < 4; j++) {
753 "error while decoding chroma ac block\n");
775 const int mb_xy = h->
mb_xy;
781 if (((header & 0x9F) != 1 && (header & 0x9F) != 2) || (header & 0x60) == 0) {
786 int length = header >> 5 & 3;
819 if ((header & 0x9F) == 2) {
847 -1, 4 *
sizeof(int8_t));
849 -1, 8 *
sizeof(int8_t) * h->
mb_x);
867 unsigned char *extradata;
868 unsigned char *extradata_end;
870 int marker_found = 0;
900 extradata = (
unsigned char *)avctx->
extradata;
904 if (!memcmp(extradata,
"SEQH", 4)) {
918 if (size > extradata_end - extradata - 8)
924 switch (frame_size_code) {
986 unsigned long buf_len = watermark_width *
987 watermark_height * 4;
991 if (watermark_height <= 0 ||
992 (uint64_t)watermark_width * 4 > UINT_MAX / watermark_height)
997 watermark_width, watermark_height);
999 "u1: %x u2: %x u3: %x compressed data size: %d offset: %d\n",
1000 u1, u2, u3, u4, offset);
1001 if (uncompress(buf, &buf_len, extradata + 8 + offset,
1002 size - offset) != Z_OK) {
1004 "could not uncompress watermark logo\n");
1015 "this svq3 file contains watermark which need zlib support compiled in\n");
1042 for (i = 0; i < 2; i++) {
1057 const int b4_stride = h->
mb_width * 4 + 1;
1058 const int b4_array_size = b4_stride * h->
mb_height * 4;
1069 for (i = 0; i < 2; i++) {
1108 int buf_size = avpkt->
size;
1114 if (buf_size == 0) {
1132 memcpy(s->
buf, avpkt->
data, buf_size);
1165 for (i = 0; i < 16; i++) {
1169 for (i = 0; i < 16; i++) {
1204 "%c hpel:%d, tpel:%d aqp:%d qp:%d, slice_num:%02X\n",
1240 for (m = 0; m < 2; m++) {
1242 for (i = 0; i < 4; i++) {
1244 for (j = -1; j < 4; j++)
1276 "error while decoding MB %d %d\n", h->
mb_x, h->
mb_y);
1280 if (mb_type != 0 || h->
cbp)
#define MB_TYPE_INTRA16x16
discard all frames except keyframes
uint8_t * edge_emu_buffer
unsigned int top_samples_available
void av_buffer_unref(AVBufferRef **buf)
Free a given reference and automatically free the buffer if there are no more references to it...
void(* emulated_edge_mc)(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *src, ptrdiff_t src_stride, 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...
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)
static av_cold int init(AVCodecContext *avctx)
av_cold int ff_h264_decode_init(AVCodecContext *avctx)
static unsigned svq3_get_ue_golomb(GetBitContext *gb)
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 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)
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
void av_freep(void *ptr)
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)
if((e=av_dict_get(options,"", NULL, AV_DICT_IGNORE_SUFFIX)))
enum AVDiscard skip_frame
Skip decoding for selected frames.
static const uint8_t golomb_to_pict_type[5]
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
static const uint8_t luma_dc_zigzag_scan[16]
int prev_frame_num_offset
for POC type 2
static struct @83 svq3_dct_tables[2][16]
static const uint8_t offset[511][2]
static int get_buffer(AVCodecContext *avctx, Picture *pic)
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 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 void fill_rectangle(SDL_Surface *screen, int x, int y, int w, int h, int color, int update)
#define FFSWAP(type, a, b)
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]
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
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.
Libavcodec external API header.
AVPixelFormat
Pixel format.
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)
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
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 AVPictureType pict_type
Picture type of the frame.
int frame_num_offset
for POC type 2
uint8_t * data
The data buffer.
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
#define CODEC_CAP_DRAW_HORIZ_BAND
Decoder can use draw_horiz_band callback.
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)
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 unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
static av_cold int svq3_decode_init(AVCodecContext *avctx)
int8_t intra4x4_pred_mode_cache[5 *8]
unsigned int topright_samples_available
static const uint8_t golomb_to_intra4x4_cbp[48]
void ff_draw_horiz_band(AVCodecContext *avctx, DSPContext *dsp, Picture *cur, Picture *last, int y, int h, int picture_structure, int first_field, int draw_edges, int low_delay, int v_edge_pos, int h_edge_pos)
#define PART_NOT_AVAILABLE
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_...
static const int8_t mv[256][2]
#define AV_LOG_INFO
Standard information.
H264 / AVC / MPEG4 part10 codec data table
static const uint8_t zigzag_scan[16+1]
int prev_frame_num
frame_num of the last pic for POC type 1/2
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...
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.
static unsigned int get_bits1(GetBitContext *s)
BYTE int const BYTE int int int height
static void skip_bits1(GetBitContext *s)
AVBufferRef * av_buffer_allocz(int size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
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 linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
int block_offset[2 *(16 *3)]
block_offset[ 0..23] for frame macroblocks block_offset[24..47] for field macroblocks ...
#define FF_DEBUG_PICT_INFO
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. ...
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]
enum AVPixelFormat * pix_fmts
array of supported pixel formats, or NULL if unknown, array is terminated by -1
static av_always_inline void write_back_intra_pred_mode(H264Context *h)
static const uint32_t svq3_dequant_coeff[32]
#define AVERROR_INVALIDDATA
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]
int frame_number
Frame counter, set by libavcodec.
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
int8_t * intra4x4_pred_mode
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.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
void * av_mallocz(size_t size) av_malloc_attrib 1(1)
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]