68 #define QUANT_BIAS_SHIFT 8
70 #define QMAT_SHIFT_MMX 16
89 const uint16_t *quant_matrix,
90 int bias,
int qmin,
int qmax,
int intra)
96 for (qscale = qmin; qscale <= qmax; qscale++) {
103 for (i = 0; i < 64; i++) {
105 int64_t den = (int64_t) qscale * quant_matrix[j];
115 for (i = 0; i < 64; i++) {
117 int64_t den =
ff_aanscales[i] * (int64_t) qscale * quant_matrix[j];
127 for (i = 0; i < 64; i++) {
129 int64_t den = (int64_t) qscale * quant_matrix[j];
140 if (
qmat16[qscale][0][i] == 0 ||
141 qmat16[qscale][0][i] == 128 * 256)
149 for (i = intra; i < 64; i++) {
154 while (((max * qmat[qscale][i]) >> shift) > INT_MAX) {
161 "Warning, QMAT_SHIFT is larger than %d, overflows possible\n",
170 int bestdiff=INT_MAX;
173 1,2,3,4,5,6,7,8,9,10,11,12,14,16,18,20,24,26,28
178 if (non_linear_qscale[i] < s->
avctx->
qmin ||
181 if (diff < bestdiff) {
183 best = non_linear_qscale[i];
203 for (i = 0; i < 64; i++) {
218 for (i = 0; i < s->
mb_num; i++) {
229 #define COPY(a) dst->a= src->a
254 for (i = -16; i < 16; i++) {
268 if (CONFIG_H263_ENCODER)
285 int i, ret, format_supported;
294 "only YUV420 and YUV422 are supported\n");
300 format_supported = 0;
309 format_supported = 1;
315 format_supported = 1;
317 if (!format_supported) {
351 "keyframe interval too large!, reducing it from %d to %d\n",
378 "intra dc precision must be positive, note some applications use"
379 " 0 and some 8 as base meaning 8bit, the value must not be smaller than that\n");
396 #if FF_API_MOTION_EST
450 av_log(avctx,
AV_LOG_ERROR,
"Either both buffer size and max rate or neither must be specified\n");
456 "Warning min_rate > 0 but min_rate != max_rate isn't recommended!\n");
473 "impossible bitrate constraints, this will fail\n");
498 "Warning vbv_delay will be set to 0xFFFF (=VBR) as the "
499 "specified vbv buffer is too large for the given bitrate!\n");
511 "OBMC is only supported with simple mb decision\n");
529 "max b frames must be 0 or positive for mpegvideo based encoders\n");
539 "Invalid pixel aspect ratio %i/%i, limit is 255/255 reducing\n",
547 (avctx->
width > 2048 ||
554 ((avctx->
width &3) ||
561 (avctx->
width > 4095 ||
568 (avctx->
width > 16383 ||
569 avctx->
height > 16383 )) {
570 av_log(avctx,
AV_LOG_ERROR,
"MPEG-2 does not support resolutions above 16383x16383\n");
605 "mpeg2 style quantization not supported by codec\n");
623 "closed gop with scene change detection are not supported yet, "
624 "set threshold to 1000000000\n");
631 "low delay forcing is only available for mpeg2\n");
636 "b frames cannot be used with low delay\n");
642 if (avctx->
qmax > 28) {
644 "non linear quant only supports qmax <= 28 currently\n");
656 "multi threaded encoding not supported by codec\n");
662 "automatic thread number detection not supported by codec, "
680 "notice: b_frame_strategy only affects the first pass\n");
703 av_log(avctx,
AV_LOG_ERROR,
"qmin and or qmax are invalid, they must be 0 < min <= max\n");
707 #if FF_API_QUANT_BIAS
723 "timebase %d/%d not supported by MPEG 4 standard, "
724 "the maximum admitted value for the timebase denominator "
747 if (!CONFIG_MJPEG_ENCODER ||
754 if (!CONFIG_H261_ENCODER)
758 "The specified picture size of %dx%d is not valid for the "
759 "H.261 codec.\nValid sizes are 176x144, 352x288\n",
769 if (!CONFIG_H263_ENCODER)
774 "The specified picture size of %dx%d is not valid for "
775 "the H.263 codec.\nValid sizes are 128x96, 176x144, "
776 "352x288, 704x576, and 1408x1152. "
907 2 * 64 *
sizeof(uint16_t),
fail);
912 if ((CONFIG_H263P_ENCODER || CONFIG_RV20_ENCODER) && s->
modified_quant)
927 if ((CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
932 for (i = 0; i < 64; i++) {
967 #if FF_API_ERROR_RATE
974 #if FF_API_NORMALIZE_AQP
1044 if (CONFIG_MJPEG_ENCODER &&
1079 for (y = 0; y < 16; y++) {
1080 for (x = 0; x < 16; x++) {
1081 acc +=
FFABS(src[x + y * stride] - ref);
1097 for (y = 0; y <
h; y += 16) {
1098 for (x = 0; x < w; x += 16) {
1103 int sae =
get_sae(src + offset, mean, stride);
1105 acc += sae + 500 < sad;
1123 int i, display_picture_number = 0, ret;
1138 "Invalid pts (%"PRId64
") <= last (%"PRId64
")\n",
1143 if (!s->
low_delay && display_picture_number == 1)
1152 "Warning: AVFrame.pts=? trying to guess (%"PRId64
")\n",
1155 pts = display_picture_number;
1161 if (!pic_arg->
buf[0] ||
1197 int h_chroma_shift, v_chroma_shift;
1202 for (i = 0; i < 3; i++) {
1203 int src_stride = pic_arg->
linesize[i];
1205 int h_shift = i ? h_chroma_shift : 0;
1206 int v_shift = i ? v_chroma_shift : 0;
1207 int w = s->
width >> h_shift;
1221 if (src_stride == dst_stride)
1222 memcpy(dst, src, src_stride * h);
1227 memcpy(dst2, src, w);
1263 int64_t score64 = 0;
1265 for (plane = 0; plane < 3; plane++) {
1267 const int bw = plane ? 1 : 2;
1268 for (y = 0; y < s->
mb_height * bw; y++) {
1269 for (x = 0; x < s->
mb_width * bw; x++) {
1270 int off = p->
shared ? 0 : 16;
1276 case 0: score =
FFMAX(score, v);
break;
1277 case 1: score +=
FFABS(v);
break;
1278 case 2: score64 += v * (int64_t)v;
break;
1279 case 3: score64 +=
FFABS(v * (int64_t)v * v);
break;
1280 case 4: score64 += (v * (int64_t)v) * (v * (int64_t)v);
break;
1303 int ret, got_output;
1320 int i, j, out_size, p_lambda, b_lambda,
lambda2;
1321 int64_t best_rd = INT64_MAX;
1322 int best_b_count = -1;
1334 b_lambda = p_lambda;
1359 pre_input = *pre_input_ptr;
1360 memcpy(data, pre_input_ptr->
f->
data,
sizeof(data));
1362 if (!pre_input.
shared && i) {
1430 return best_b_count;
1503 b_frames =
FFMAX(0, i - 1);
1506 for (i = 0; i < b_frames + 1; i++) {
1518 for (i = b_frames - 1; i >= 0; i--) {
1526 "warning, too many b frames in a row\n");
1549 for (i = 0; i < b_frames; i++) {
1595 for (i = 0; i < 4; i++) {
1647 #if FF_API_CODED_FRAME
1658 for (intra = 0; intra < 2; intra++) {
1660 for (i = 0; i < 64; i++) {
1666 for (i = 0; i < 64; i++) {
1717 for (i = 0; i < 4; i++) {
1748 const AVFrame *pic_arg,
int *got_packet)
1751 int i, stuffing_count, ret;
1780 for (i = 0; i < context_count; i++) {
1797 if (growing_buffer) {
1848 for (i = 0; i < context_count; i++) {
1863 for (i = 0; i < 4; i++) {
1883 if (stuffing_count) {
1885 stuffing_count + 50) {
1893 while (stuffing_count--) {
1900 stuffing_count -= 4;
1901 while (stuffing_count--) {
1927 "Internal error, negative bits\n");
1935 vbv_delay =
FFMAX(vbv_delay, min_delay);
1975 *got_packet = !!pkt->
size;
1980 int n,
int threshold)
1982 static const char tab[64] = {
1983 3, 2, 2, 1, 1, 1, 1, 1,
1984 1, 1, 1, 1, 1, 1, 1, 1,
1985 1, 1, 1, 1, 1, 1, 1, 1,
1986 0, 0, 0, 0, 0, 0, 0, 0,
1987 0, 0, 0, 0, 0, 0, 0, 0,
1988 0, 0, 0, 0, 0, 0, 0, 0,
1989 0, 0, 0, 0, 0, 0, 0, 0,
1990 0, 0, 0, 0, 0, 0, 0, 0
1999 if (threshold < 0) {
2001 threshold = -threshold;
2006 if (last_index <= skip_dc - 1)
2009 for (i = 0; i <= last_index; i++) {
2013 if (skip_dc && i == 0)
2017 }
else if (level > 1) {
2023 if (score >= threshold)
2025 for (i = skip_dc; i <= last_index; i++) {
2048 for (; i <= last_index; i++) {
2050 int level = block[j];
2052 if (level > maxlevel) {
2055 }
else if (level < minlevel) {
2065 "warning, clipping %d dct coefficients to %d..%d\n",
2066 overflow, minlevel, maxlevel);
2073 for (y = 0; y < 8; y++) {
2074 for (x = 0; x < 8; x++) {
2080 for (y2 =
FFMAX(y - 1, 0); y2 <
FFMIN(8, y + 2); y2++) {
2081 for (x2=
FFMAX(x - 1, 0); x2 <
FFMIN(8, x + 2); x2++) {
2082 int v = ptr[x2 + y2 *
stride];
2088 weight[x + 8 *
y]= (36 *
ff_sqrt(count * sqr - sum * sum)) / count;
2094 int motion_x,
int motion_y,
2095 int mb_block_height,
2100 int16_t orig[12][64];
2107 uint8_t *ptr_y, *ptr_cb, *ptr_cr;
2108 ptrdiff_t wrap_y, wrap_c;
2110 for (i = 0; i < mb_block_count; i++)
2114 const int last_qp = s->
qscale;
2115 const int mb_xy = mb_x + mb_y * s->
mb_stride;
2146 (mb_y * 16 * wrap_y) + mb_x * 16;
2148 (mb_y * mb_block_height * wrap_c) + mb_x * mb_block_width;
2150 (mb_y * mb_block_height * wrap_c) + mb_x * mb_block_width;
2158 16, 16, mb_x * 16, mb_y * 16,
2163 mb_block_width, mb_block_height,
2164 mb_x * mb_block_width, mb_y * mb_block_height,
2166 ptr_cb = ebuf + 16 * wrap_y;
2169 mb_block_width, mb_block_height,
2170 mb_x * mb_block_width, mb_y * mb_block_height,
2172 ptr_cr = ebuf + 16 * wrap_y + 16;
2177 int progressive_score, interlaced_score;
2182 NULL, wrap_y, 8) - 400;
2184 if (progressive_score > 0) {
2186 NULL, wrap_y * 2, 8) +
2188 NULL, wrap_y * 2, 8);
2189 if (progressive_score > interlaced_score) {
2192 dct_offset = wrap_y;
2193 uv_dct_offset = wrap_c;
2228 uint8_t *dest_y, *dest_cb, *dest_cr;
2230 dest_y = s->
dest[0];
2231 dest_cb = s->
dest[1];
2232 dest_cr = s->
dest[2];
2256 int progressive_score, interlaced_score;
2259 progressive_score = s->
mecc.
ildct_cmp[0](
s, dest_y, ptr_y, wrap_y, 8) +
2265 progressive_score -= 400;
2267 if (progressive_score > 0) {
2274 if (progressive_score > interlaced_score) {
2277 dct_offset = wrap_y;
2278 uv_dct_offset = wrap_c;
2289 dest_y + dct_offset, wrap_y);
2291 dest_y + dct_offset + 8, wrap_y);
2301 dest_cb + uv_dct_offset, wrap_c);
2303 dest_cr + uv_dct_offset, wrap_c);
2314 if (s->
mecc.
sad[1](
NULL, ptr_y + dct_offset, dest_y + dct_offset,
2315 wrap_y, 8) < 20 * s->
qscale)
2317 if (s->
mecc.
sad[1](
NULL, ptr_y + dct_offset + 8, dest_y + dct_offset + 8,
2318 wrap_y, 8) < 20 * s->
qscale)
2326 dest_cb + uv_dct_offset,
2327 wrap_c, 8) < 20 * s->
qscale)
2330 dest_cr + uv_dct_offset,
2331 wrap_c, 8) < 20 * s->
qscale)
2358 memcpy(orig[0], s->
block[0],
sizeof(int16_t) * 64 * mb_block_count);
2364 for (i = 0; i < mb_block_count; i++) {
2379 for (i = 0; i < mb_block_count; i++) {
2389 for (i = 0; i < 4; i++)
2392 for (i = 4; i < mb_block_count; i++)
2396 for (i = 0; i < mb_block_count; i++) {
2409 for (i=6; i<12; i++) {
2418 for (i = 0; i < mb_block_count; i++) {
2421 for (j = 63; j > 0; j--) {
2434 if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
2438 if (CONFIG_MPEG4_ENCODER)
2448 if (CONFIG_WMV2_ENCODER)
2452 if (CONFIG_H261_ENCODER)
2460 if (CONFIG_H263_ENCODER)
2465 if (CONFIG_MJPEG_ENCODER)
2511 memcpy(d->
mv, s->
mv, 2*4*2*
sizeof(
int));
2549 int *dmin,
int *next_block,
int motion_x,
int motion_y)
2557 s->
pb= pb[*next_block];
2559 s->
pb2 = pb2 [*next_block];
2560 s->
tex_pb= tex_pb[*next_block];
2564 memcpy(dest_backup, s->
dest,
sizeof(s->
dest));
2587 memcpy(s->
dest, dest_backup,
sizeof(s->
dest));
2605 else if(w==8 && h==8)
2695 for(mb_x=0; mb_x < s->
mb_width; mb_x++) {
2703 (((unsigned) sum * sum) >> 8) + 500 + 128) >> 8;
2738 if (CONFIG_H263_ENCODER)
2740 bytestream_put_le32(&ptr, offset);
2741 bytestream_put_byte(&ptr, s->
qscale);
2742 bytestream_put_byte(&ptr, gobn);
2743 bytestream_put_le16(&ptr, mba);
2744 bytestream_put_byte(&ptr, pred_x);
2745 bytestream_put_byte(&ptr, pred_y);
2747 bytestream_put_byte(&ptr, 0);
2748 bytestream_put_byte(&ptr, 0);
2783 int new_buffer_size = 0;
2853 if (CONFIG_H263_ENCODER)
2873 for(mb_x=0; mb_x < s->
mb_width; mb_x++) {
2907 int current_packet_size, is_gob_start;
2913 if(s->
start_mb_y == mb_y && mb_y > 0 && mb_x==0) is_gob_start=1;
2922 if(s->
mb_x==0 && s->
mb_y!=0) is_gob_start=1;
2927 if(s->
mb_x==0 && s->
mb_y!=0) is_gob_start=1;
2947 current_packet_size=0;
2961 if (CONFIG_MPEG4_ENCODER) {
2968 if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER) {
2975 if (CONFIG_H263_ENCODER)
3005 int pb_bits_count, pb2_bits_count, tex_pb_bits_count;
3012 backup_s.pb2= s->
pb2;
3013 backup_s.tex_pb= s->
tex_pb;
3022 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER, pb, pb2, tex_pb,
3023 &dmin, &next_block, s->
mv[0][0][0], s->
mv[0][0][1]);
3034 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER_I, pb, pb2, tex_pb,
3035 &dmin, &next_block, 0, 0);
3043 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_SKIPPED, pb, pb2, tex_pb,
3044 &dmin, &next_block, s->
mv[0][0][0], s->
mv[0][0][1]);
3054 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER4V, pb, pb2, tex_pb,
3055 &dmin, &next_block, 0, 0);
3063 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_FORWARD, pb, pb2, tex_pb,
3064 &dmin, &next_block, s->
mv[0][0][0], s->
mv[0][0][1]);
3072 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BACKWARD, pb, pb2, tex_pb,
3073 &dmin, &next_block, s->
mv[1][0][0], s->
mv[1][0][1]);
3083 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BIDIR, pb, pb2, tex_pb,
3084 &dmin, &next_block, 0, 0);
3095 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_FORWARD_I, pb, pb2, tex_pb,
3096 &dmin, &next_block, 0, 0);
3107 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BACKWARD_I, pb, pb2, tex_pb,
3108 &dmin, &next_block, 0, 0);
3114 for(dir=0; dir<2; dir++){
3121 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BIDIR_I, pb, pb2, tex_pb,
3122 &dmin, &next_block, 0, 0);
3130 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTRA, pb, pb2, tex_pb,
3131 &dmin, &next_block, 0, 0);
3142 const int last_qp= backup_s.qscale;
3146 static const int dquant_tab[4]={-1,1,-2,2};
3155 s->
mv[0][0][0] = best_s.
mv[0][0][0];
3156 s->
mv[0][0][1] = best_s.
mv[0][0][1];
3157 s->
mv[1][0][0] = best_s.
mv[1][0][0];
3158 s->
mv[1][0][1] = best_s.
mv[1][0][1];
3161 for(; qpi<4; qpi++){
3162 int dquant= dquant_tab[qpi];
3174 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER , pb, pb2, tex_pb,
3175 &dmin, &next_block, s->
mv[mvdir][0][0], s->
mv[mvdir][0][1]);
3191 backup_s.dquant = 0;
3195 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb,
3196 &dmin, &next_block, mx, my);
3199 backup_s.dquant = 0;
3203 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb,
3204 &dmin, &next_block, 0, 0);
3212 memcpy(s->
mv, best_s.
mv,
sizeof(s->
mv));
3233 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER , pb, pb2, tex_pb,
3234 &dmin, &next_block, mx, my);
3252 s->
pb2= backup_s.pb2;
3256 avpriv_copy_bits(&backup_s.tex_pb, bit_buf_tex[next_block^1], tex_pb_bits_count);
3257 s->
tex_pb= backup_s.tex_pb;
3261 if (CONFIG_H263_ENCODER &&
3274 int motion_x = 0, motion_y = 0;
3282 motion_x= s->
mv[0][0][0] = 0;
3283 motion_y= s->
mv[0][0][1] = 0;
3311 if (CONFIG_MPEG4_ENCODER) {
3320 if (CONFIG_MPEG4_ENCODER) {
3370 for(dir=0; dir<2; dir++){
3387 if (CONFIG_H263_ENCODER &&
3444 #define MERGE(field) dst->field += src->field; src->field=0
3471 for(i=0; i<64; i++){
3498 if (CONFIG_MPEG4_ENCODER)
3504 if (CONFIG_H263_ENCODER)
3585 for(i=1; i<context_count; i++){
3615 for(i=1; i<context_count; i++){
3628 ff_dlog(s,
"Scene change detected, encoding as I Frame %"PRId64
" %"PRId64
"\n",
3672 for(dir=0; dir<2; dir++){
3723 static const uint8_t y[32]={13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13};
3724 static const uint8_t c[32]={14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14};
3755 if (CONFIG_MJPEG_ENCODER)
3760 if (CONFIG_H261_ENCODER)
3768 else if (CONFIG_MPEG4_ENCODER && s->
h263_pred)
3779 else if (CONFIG_H263_ENCODER)
3783 if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
3792 for(i=1; i<context_count; i++){
3796 for(i=1; i<context_count; i++){
3811 for(i=0; i<64; i++){
3812 int level= block[i];
3818 if(level<0) level=0;
3822 if(level>0) level=0;
3831 int qscale,
int *overflow){
3833 const uint16_t *matrix;
3837 unsigned int threshold1, threshold2;
3849 int coeff_count[64];
3850 int qmul, qadd, start_i, last_non_zero, i,
dc;
3861 qadd= ((qscale-1)|1)*8;
3878 block[0] = (block[0] + (q >> 1)) / q;
3904 threshold2= (threshold1<<1);
3906 for(i=63; i>=start_i; i--) {
3907 const int j = scantable[i];
3908 int level = block[j] * qmat[j];
3910 if(((
unsigned)(level+threshold1))>threshold2){
3916 for(i=start_i; i<=last_non_zero; i++) {
3917 const int j = scantable[i];
3918 int level = block[j] * qmat[j];
3922 if(((
unsigned)(level+threshold1))>threshold2){
3926 coeff[1][i]= level-1;
3930 coeff[0][i]= -
level;
3931 coeff[1][i]= -level+1;
3934 coeff_count[i]=
FFMIN(level, 2);
3938 coeff[0][i]= (level>>31)|1;
3945 if(last_non_zero < start_i){
3946 memset(block + start_i, 0, (64-start_i)*
sizeof(int16_t));
3947 return last_non_zero;
3950 score_tab[start_i]= 0;
3951 survivor[0]= start_i;
3954 for(i=start_i; i<=last_non_zero; i++){
3955 int level_index, j, zero_distortion;
3956 int dct_coeff=
FFABS(block[ scantable[i] ]);
3957 int best_score=256*256*256*120;
3961 zero_distortion= dct_coeff*dct_coeff;
3963 for(level_index=0; level_index < coeff_count[i]; level_index++){
3965 int level= coeff[level_index][i];
3966 const int alevel=
FFABS(level);
3972 unquant_coeff= alevel*qmul + qadd;
3975 unquant_coeff = alevel * matrix[j] * 8;
3979 unquant_coeff = (int)( alevel * qscale * matrix[j]) >> 3;
3980 unquant_coeff = (unquant_coeff - 1) | 1;
3982 unquant_coeff = ((( alevel << 1) + 1) * qscale * ((int) matrix[j])) >> 4;
3983 unquant_coeff = (unquant_coeff - 1) | 1;
3988 distortion= (unquant_coeff - dct_coeff) * (unquant_coeff - dct_coeff) - zero_distortion;
3990 if((level&(~127)) == 0){
3991 for(j=survivor_count-1; j>=0; j--){
3992 int run= i - survivor[j];
3994 score += score_tab[i-
run];
3996 if(score < best_score){
3999 level_tab[i+1]= level-64;
4004 for(j=survivor_count-1; j>=0; j--){
4005 int run= i - survivor[j];
4007 score += score_tab[i-
run];
4008 if(score < last_score){
4011 last_level= level-64;
4017 distortion += esc_length*
lambda;
4018 for(j=survivor_count-1; j>=0; j--){
4019 int run= i - survivor[j];
4020 int score= distortion + score_tab[i-
run];
4022 if(score < best_score){
4025 level_tab[i+1]= level-64;
4030 for(j=survivor_count-1; j>=0; j--){
4031 int run= i - survivor[j];
4032 int score= distortion + score_tab[i-
run];
4033 if(score < last_score){
4036 last_level= level-64;
4044 score_tab[i+1]= best_score;
4047 if(last_non_zero <= 27){
4048 for(; survivor_count; survivor_count--){
4049 if(score_tab[ survivor[survivor_count-1] ] <= best_score)
4053 for(; survivor_count; survivor_count--){
4054 if(score_tab[ survivor[survivor_count-1] ] <= best_score + lambda)
4059 survivor[ survivor_count++ ]= i+1;
4063 last_score= 256*256*256*120;
4064 for(i= survivor[0]; i<=last_non_zero + 1; i++){
4065 int score= score_tab[i];
4066 if(i) score += lambda*2;
4068 if(score < last_score){
4071 last_level= level_tab[i];
4072 last_run= run_tab[i];
4079 dc=
FFABS(block[0]);
4080 last_non_zero= last_i - 1;
4081 memset(block + start_i, 0, (64-start_i)*
sizeof(int16_t));
4083 if(last_non_zero < start_i)
4084 return last_non_zero;
4086 if(last_non_zero == 0 && start_i == 0){
4088 int best_score= dc *
dc;
4090 for(i=0; i<coeff_count[0]; i++){
4091 int level= coeff[i][0];
4092 int alevel=
FFABS(level);
4093 int unquant_coeff, score, distortion;
4096 unquant_coeff= (alevel*qmul + qadd)>>3;
4098 unquant_coeff = ((( alevel << 1) + 1) * qscale * ((int) matrix[0])) >> 4;
4099 unquant_coeff = (unquant_coeff - 1) | 1;
4101 unquant_coeff = (unquant_coeff + 4) >> 3;
4102 unquant_coeff<<= 3 + 3;
4104 distortion= (unquant_coeff -
dc) * (unquant_coeff - dc);
4107 else score= distortion + esc_length*
lambda;
4109 if(score < best_score){
4111 best_level= level - 64;
4114 block[0]= best_level;
4116 if(best_level == 0)
return -1;
4117 else return last_non_zero;
4123 block[ perm_scantable[last_non_zero] ]= last_level;
4126 for(; i>start_i; i -= run_tab[i] + 1){
4127 block[ perm_scantable[i-1] ]= level_tab[i];
4130 return last_non_zero;
4145 int perm_index= perm[
index];
4146 if(i==0) s*= sqrt(0.5);
4147 if(j==0) s*= sqrt(0.5);
4148 basis[perm_index][8*x +
y]=
lrintf(s * cos((
M_PI/8.0)*i*(x+0.5)) * cos((
M_PI/8.0)*j*(y+0.5)));
4167 int qmul, qadd, start_i, last_non_zero, i,
dc;
4171 int rle_index,
run, q = 1, sum;
4174 static int after_last=0;
4175 static int to_zero=0;
4176 static int from_zero=0;
4179 static int messed_sign=0;
4182 if(basis[0][0] == 0)
4224 for(i=0; i<64; i++){
4231 for(i=0; i<64; i++){
4236 w=
FFABS(weight[i]) + qns*one;
4237 w= 15 + (48*qns*one + w/2)/w;
4252 for(i=start_i; i<=last_non_zero; i++){
4253 int j= perm_scantable[i];
4254 const int level= block[j];
4258 if(level<0) coeff= qmul*level - qadd;
4259 else coeff= qmul*level + qadd;
4260 run_tab[rle_index++]=
run;
4269 if(last_non_zero>0){
4280 int run2, best_unquant_change=0, analyze_gradient;
4286 if(analyze_gradient){
4290 for(i=0; i<64; i++){
4306 const int level= block[0];
4307 int change, old_coeff;
4313 for(change=-1; change<=1; change+=2){
4314 int new_level= level + change;
4315 int score, new_coeff;
4317 new_coeff= q*new_level;
4318 if(new_coeff >= 2048 || new_coeff < 0)
4322 new_coeff - old_coeff);
4323 if(score<best_score){
4326 best_change= change;
4327 best_unquant_change= new_coeff - old_coeff;
4334 run2= run_tab[rle_index++];
4338 for(i=start_i; i<64; i++){
4339 int j= perm_scantable[i];
4340 const int level= block[j];
4341 int change, old_coeff;
4347 if(level<0) old_coeff= qmul*level - qadd;
4348 else old_coeff= qmul*level + qadd;
4349 run2= run_tab[rle_index++];
4356 for(change=-1; change<=1; change+=2){
4357 int new_level= level + change;
4358 int score, new_coeff, unquant_change;
4365 if(new_level<0) new_coeff= qmul*new_level - qadd;
4366 else new_coeff= qmul*new_level + qadd;
4367 if(new_coeff >= 2048 || new_coeff <= -2048)
4372 if(level < 63 && level > -63){
4373 if(i < last_non_zero)
4383 if(analyze_gradient){
4384 int g= d1[ scantable[i] ];
4385 if(g && (g^new_level) >= 0)
4389 if(i < last_non_zero){
4390 int next_i= i + run2 + 1;
4391 int next_level= block[ perm_scantable[next_i] ] + 64;
4393 if(next_level&(~127))
4396 if(next_i < last_non_zero)
4416 if(i < last_non_zero){
4417 int next_i= i + run2 + 1;
4418 int next_level= block[ perm_scantable[next_i] ] + 64;
4420 if(next_level&(~127))
4423 if(next_i < last_non_zero)
4442 unquant_change= new_coeff - old_coeff;
4443 av_assert2((score < 100*lambda && score > -100*lambda) || lambda==0);
4447 if(score<best_score){
4450 best_change= change;
4451 best_unquant_change= unquant_change;
4455 prev_level= level + 64;
4456 if(prev_level&(~127))
4469 int j= perm_scantable[ best_coeff ];
4471 block[j] += best_change;
4473 if(best_coeff > last_non_zero){
4474 last_non_zero= best_coeff;
4482 if(block[j] - best_change){
4483 if(
FFABS(block[j]) >
FFABS(block[j] - best_change)){
4495 for(; last_non_zero>=start_i; last_non_zero--){
4496 if(block[perm_scantable[last_non_zero]])
4502 if(256*256*256*64 % count == 0){
4503 av_log(s->
avctx,
AV_LOG_DEBUG,
"after_last:%d to_zero:%d from_zero:%d raise:%d lower:%d sign:%d xyp:%d/%d/%d\n", after_last, to_zero, from_zero,
raise, lower, messed_sign, s->
mb_x, s->
mb_y, s->
picture_number);
4508 for(i=start_i; i<=last_non_zero; i++){
4509 int j= perm_scantable[i];
4510 const int level= block[j];
4513 run_tab[rle_index++]=
run;
4526 if(last_non_zero>0){
4532 return last_non_zero;
4547 const uint8_t *scantable,
int last)
4558 for (i = 0; i <= last; i++) {
4559 const int j = scantable[i];
4564 for (i = 0; i <= last; i++) {
4565 const int j = scantable[i];
4566 const int perm_j = permutation[j];
4567 block[perm_j] = temp[j];
4573 int qscale,
int *overflow)
4575 int i, j,
level, last_non_zero, q, start_i;
4580 unsigned int threshold1, threshold2;
4599 block[0] = (block[0] + (q >> 1)) / q;
4611 threshold2= (threshold1<<1);
4612 for(i=63;i>=start_i;i--) {
4614 level = block[j] * qmat[j];
4616 if(((
unsigned)(level+threshold1))>threshold2){
4623 for(i=start_i; i<=last_non_zero; i++) {
4625 level = block[j] * qmat[j];
4629 if(((
unsigned)(level+threshold1))>threshold2){
4647 scantable, last_non_zero);
4649 return last_non_zero;
4652 #define OFFSET(x) offsetof(MpegEncContext, x)
4653 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
4657 {
"mb_info",
"emit macroblock info for RFC 2190 packetization, the parameter value is the maximum payload size",
OFFSET(
mb_info),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
VE },
4719 .
name =
"msmpeg4v2",
const uint16_t ff_mpeg1_default_non_intra_matrix[64]
#define AV_CODEC_FLAG_INTERLACED_ME
interlaced motion estimation
av_cold void ff_me_cmp_init(MECmpContext *c, AVCodecContext *avctx)
static const AVClass wmv1_class
void ff_h261_reorder_mb_index(MpegEncContext *s)
int(* try_8x8basis)(int16_t rem[64], int16_t weight[64], int16_t basis[64], int scale)
int chroma_elim_threshold
void ff_jpeg_fdct_islow_10(int16_t *data)
static const AVOption h263_options[]
int frame_bits
bits used for the current frame
av_cold int ff_dct_encode_init(MpegEncContext *s)
RateControlContext rc_context
contains stuff only accessed in ratecontrol.c
const struct AVCodec * codec
int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase)
av_cold void ff_rate_control_uninit(MpegEncContext *s)
#define FF_MPV_FLAG_STRICT_GOP
void ff_init_block_index(MpegEncContext *s)
void ff_estimate_b_frame_motion(MpegEncContext *s, int mb_x, int mb_y)
qpel_mc_func avg_qpel_pixels_tab[2][16]
attribute_deprecated int intra_quant_bias
me_cmp_func frame_skip_cmp[6]
#define CANDIDATE_MB_TYPE_SKIPPED
static int shift(int a, int b)
void(* dct_unquantize_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
void ff_mpeg1_encode_init(MpegEncContext *s)
void av_free_packet(AVPacket *pkt)
Free a packet.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
static void get_visual_weight(int16_t *weight, uint8_t *ptr, int stride)
int time_increment_bits
< number of bits to represent the fractional part of time (encoder only)
void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number)
This structure describes decoded (raw) audio or video data.
AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
int16_t(* p_mv_table)[2]
MV table (1MV per MB) p-frame encoding.
int mpeg_quant
0-> h263 quant 1-> mpeg quant
void ff_fdct_ifast(int16_t *data)
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
ptrdiff_t const GLvoid * data
uint8_t * fcode_tab
smallest fcode needed for each MV
int start_mb_y
start mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) ...
#define MV_TYPE_FIELD
2 vectors, one per field
void ff_estimate_p_frame_motion(MpegEncContext *s, int mb_x, int mb_y)
const uint8_t * y_dc_scale_table
qscale -> y_dc_scale table
uint8_t * mb_mean
Table for MB luminance.
uint64_t error[AV_NUM_DATA_POINTERS]
error
#define AV_CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
int last_mv[2][2][2]
last MV, used for MV prediction in MPEG1 & B-frame MPEG4
uint8_t * edge_emu_buffer
temporary buffer for if MVs point to out-of-frame data
int pre_pass
= 1 for the pre pass
#define AV_CODEC_FLAG_LOOP_FILTER
loop filter.
op_pixels_func avg_pixels_tab[4][4]
Halfpel motion compensation with rounding (a+b+1)>>1.
#define FF_MPV_FLAG_SKIP_RD
AVFrame * tmp_frames[MAX_B_FRAMES+2]
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
attribute_deprecated int rc_qmod_freq
#define AV_LOG_WARNING
Something somehow does not look correct.
qpel_mc_func put_no_rnd_qpel_pixels_tab[2][16]
void(* shrink[4])(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height)
#define CANDIDATE_MB_TYPE_INTER_I
#define LIBAVUTIL_VERSION_INT
static void block_permute(int16_t *block, uint8_t *permutation, const uint8_t *scantable, int last)
Permute an 8x8 block according to permuatation.
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
void ff_h263_encode_init(MpegEncContext *s)
int end_mb_y
end mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) ...
static av_cold int init(AVCodecContext *avctx)
void ff_init_qscale_tab(MpegEncContext *s)
init s->current_picture.qscale_table from s->lambda_table
uint16_t * mb_var
Table for MB variances.
uint16_t(* q_chroma_intra_matrix16)[2][64]
uint16_t chroma_intra_matrix[64]
static int estimate_qp(MpegEncContext *s, int dry_run)
int max_b_frames
maximum number of B-frames between non-B-frames Note: The output will be delayed by max_b_frames+1 re...
int16_t(*[3] ac_val)[16]
used for mpeg4 AC prediction, all 3 arrays must be continuous
void(* add_8x8basis)(int16_t rem[64], int16_t basis[64], int scale)
int v_edge_pos
horizontal / vertical position of the right/bottom edge (pixel replication)
#define FF_MPV_COMMON_OPTS
enum AVColorRange color_range
MPEG vs JPEG YUV range.
int msmpeg4_version
0=not msmpeg4, 1=mp41, 2=mp42, 3=mp43/divx3 4=wmv1/7 5=wmv2/8
#define CANDIDATE_MB_TYPE_BIDIR
av_cold void ff_h263dsp_init(H263DSPContext *ctx)
void(* rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb)
attribute_deprecated int lmax
void ff_get_2pass_fcode(MpegEncContext *s)
void avpriv_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
Copy the content of src to the bitstream.
int obmc
overlapped block motion compensation
void avpriv_align_put_bits(PutBitContext *s)
Pad the bitstream with zeros up to the next byte boundary.
void ff_mpeg1_clean_buffers(MpegEncContext *s)
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
int ff_h261_get_picture_format(int width, int height)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int16_t(*[2][2] p_field_mv_table)[2]
MV table (2MV per MB) interlaced p-frame encoding.
static int select_input_picture(MpegEncContext *s)
static const AVClass msmpeg4v3_class
int min_qcoeff
minimum encodable coefficient
static int sse(MpegEncContext *s, uint8_t *src1, uint8_t *src2, int w, int h, int stride)
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
Same behaviour av_fast_malloc but the buffer has additional AV_INPUT_BUFFER_PADDING_SIZE at the end w...
int ildct_cmp
interlaced DCT comparison function
void(* qpel_mc_func)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
const uint16_t ff_h263_format[8][2]
av_cold int ff_mjpeg_encode_init(MpegEncContext *s)
int mpv_flags
flags set by private options
static const AVClass h263_class
uint8_t * intra_ac_vlc_length
int padding_bug_score
used to detect the VERY common padding bug in MPEG4
int ff_mpeg_ref_picture(AVCodecContext *avctx, Picture *dst, Picture *src)
#define UNI_AC_ENC_INDEX(run, level)
int mb_num
number of MBs of a picture
void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, ScanTable *intra_scantable, uint16_t luma_intra_matrix[64], uint16_t chroma_intra_matrix[64])
av_cold void ff_fdctdsp_init(FDCTDSPContext *c, AVCodecContext *avctx)
int frame_skip_cmp
frame skip comparison function
static void clip_coeffs(MpegEncContext *s, int16_t *block, int last_index)
An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of structures with info about macroblo...
static void write_mb_info(MpegEncContext *s)
int time_base
time in seconds of last I,P,S Frame
int h263_aic
Advanded INTRA Coding (AIC)
int16_t(* b_back_mv_table)[2]
MV table (1MV per MB) backward mode b-frame encoding.
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
int encoding
true if we are encoding (vs decoding)
uint64_t vbv_delay
VBV delay coded in the last frame (in periods of a 27 MHz clock).
void(* dct_unquantize_h263_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
void(* dct_unquantize_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
attribute_deprecated int me_method
This option does nothing.
int scenechange_threshold
scene change detection threshold 0 is default, larger means fewer detected scene changes.
uint32_t ff_square_tab[512]
void ff_mpeg4_merge_partitions(MpegEncContext *s)
static int mb_var_thread(AVCodecContext *c, void *arg)
void ff_clean_intra_table_entries(MpegEncContext *s)
Clean dc, ac, coded_block for the current non-intra MB.
void(* dct_unquantize_h263_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
#define FF_MPV_FLAG_CBP_RD
int skipdct
skip dct and code zero residual
float rc_buffer_aggressivity
void ff_mpeg4_clean_buffers(MpegEncContext *s)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#define CANDIDATE_MB_TYPE_INTER
float p_masking
p block masking (0-> disabled)
int picture_in_gop_number
0-> first pic in gop, ...
#define av_assert0(cond)
assert() equivalent, that is always enabled.
void(* emulated_edge_mc)(uint8_t *dst, const uint8_t *src, ptrdiff_t dst_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...
int alt_inter_vlc
alternative inter vlc
void ff_mpeg1_encode_slice_header(MpegEncContext *s)
int ff_dct_quantize_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
int64_t time
time of current frame
static int encode_picture(MpegEncContext *s, int picture_number)
av_cold void ff_mpegvideoencdsp_init(MpegvideoEncDSPContext *c, AVCodecContext *avctx)
int bit_rate_tolerance
number of bits the bitstream is allowed to diverge from the reference.
static const AVClass msmpeg4v2_class
#define MV_DIRECT
bidirectional mode where the difference equals the MV of the last P/S/I-Frame (mpeg4) ...
attribute_deprecated const char * rc_eq
attribute_deprecated float rc_buffer_aggressivity
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Picture ** input_picture
next pictures on display order for encoding
#define CANDIDATE_MB_TYPE_INTER4V
void(* get_pixels)(int16_t *block, const uint8_t *pixels, ptrdiff_t line_size)
void(* denoise_dct)(struct MpegEncContext *s, int16_t *block)
PutBitContext pb2
used for data partitioned VOPs
enum OutputFormat out_format
output format
#define CANDIDATE_MB_TYPE_FORWARD_I
uint16_t(* dct_offset)[64]
void ff_dct_encode_init_x86(MpegEncContext *s)
static av_cold int end(AVCodecContext *avctx)
uint16_t * chroma_intra_matrix
custom intra quantization matrix Code outside libavcodec should access this field using av_codec_g/se...
void ff_mpv_motion(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int dir, uint8_t **ref_picture, op_pixels_func(*pix_op)[4], qpel_mc_func(*qpix_op)[16])
void ff_msmpeg4_encode_picture_header(MpegEncContext *s, int picture_number)
static void mpv_encode_defaults(MpegEncContext *s)
Set the given MpegEncContext to defaults for encoding.
Multithreading support functions.
int pre_dia_size
ME prepass diamond size & shape.
static const AVOption h263p_options[]
static int get_sae(uint8_t *src, int ref, int stride)
#define AV_CODEC_FLAG_LOW_DELAY
Force low delay.
void ff_free_picture_tables(Picture *pic)
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
int misc_bits
cbp, mb_type
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
int no_rounding
apply no rounding to motion compensation (MPEG4, msmpeg4, ...) for b-frames rounding mode is always 0...
#define CANDIDATE_MB_TYPE_BACKWARD_I
int(* q_chroma_intra_matrix)[64]
int me_cmp
motion estimation comparison function
void ff_mpv_decode_mb(MpegEncContext *s, int16_t block[12][64])
void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
Picture current_picture
copy of the current picture structure.
int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
Encode a frame of video.
int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared)
#define PICT_BOTTOM_FIELD
static double av_q2d(AVRational a)
Convert rational to double.
int16_t(* b_bidir_forw_mv_table)[2]
MV table (1MV per MB) bidir mode b-frame encoding.
static void dct_single_coeff_elimination(MpegEncContext *s, int n, int threshold)
const uint16_t ff_aanscales[64]
uint8_t(* mv_penalty)[MAX_MV *2+1]
bit amount needed to encode a MV
void ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number)
int ff_wmv2_encode_picture_header(MpegEncContext *s, int picture_number)
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
uint16_t pp_time
time distance between the last 2 p,s,i frames
#define AV_LOG_VERBOSE
Detailed information.
const uint8_t * scantable
av_cold void ff_mpv_idct_init(MpegEncContext *s)
int mb_height
number of MBs horizontally & vertically
static void rebase_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Rebase the bit writer onto a reallocated buffer.
float lumi_masking
luminance masking (0-> disabled)
char * stats_out
pass1 encoding statistics output buffer
int max_qcoeff
maximum encodable coefficient
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
high precision timer, useful to profile code
static void update_noise_reduction(MpegEncContext *s)
#define FF_MPV_FLAG_QP_RD
void ff_mpeg1_encode_mb(MpegEncContext *s, int16_t block[8][64], int motion_x, int motion_y)
void ff_h261_encode_picture_header(MpegEncContext *s, int picture_number)
int dquant
qscale difference to prev qscale
int num_entries
number of RateControlEntries
int gop_picture_number
index of the first picture of a GOP based on fake_pic_num & mpeg1 specific
static void ff_update_block_index(MpegEncContext *s)
void ff_set_qscale(MpegEncContext *s, int qscale)
set qscale and update qscale dependent variables.
#define ROUNDED_DIV(a, b)
int(* q_inter_matrix)[64]
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
static int get_bits_diff(MpegEncContext *s)
int(* q_intra_matrix)[64]
precomputed matrix (combine qscale and DCT renorm)
int intra_only
if true, only intra pictures are generated
av_cold int ff_mpv_encode_end(AVCodecContext *avctx)
int avcodec_close(AVCodecContext *avctx)
Close a given AVCodecContext and free all the data associated with it (but not the AVCodecContext its...
int16_t * dc_val[3]
used for mpeg4 DC prediction, all 3 arrays must be continuous
int h263_plus
h263 plus headers
int slice_context_count
number of used thread_contexts
int last_non_b_pict_type
used for mpeg4 gmc b-frames & ratecontrol
int width
width and height of the video frame
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
int has_b_frames
Size of the frame reordering buffer in the decoder.
int last_dc[3]
last DC values for MPEG1
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
attribute_deprecated float rc_initial_cplx
uint8_t * inter_ac_vlc_last_length
#define FF_MB_DECISION_BITS
chooses the one which needs the fewest bits
#define AV_CODEC_FLAG_4MV
4 MV per MB allowed / advanced prediction for H.263.
#define PTRDIFF_SPECIFIER
int mb_skipped
MUST BE SET only during DECODING.
int strict_std_compliance
strictly follow the std (MPEG4, ...)
int partitioned_frame
is current frame partitioned
uint8_t * rd_scratchpad
scratchpad for rate distortion mb decision
#define MAX_PICTURE_COUNT
int frame_skip_threshold
frame skip threshold
av_cold int ff_rate_control_init(MpegEncContext *s)
int me_sub_cmp
subpixel motion estimation comparison function
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
int qmax
maximum quantizer
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor.
static void update_mb_info(MpegEncContext *s, int startcode)
void ff_write_pass1_stats(MpegEncContext *s)
int unrestricted_mv
mv can point outside of the coded picture
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
int last_lambda_for[5]
last lambda for a specific pict type
static int sse_mb(MpegEncContext *s)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static int dct_quantize_trellis_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
void(* dct_unquantize_mpeg2_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
uint8_t * intra_chroma_ac_vlc_length
void(* dct_unquantize_mpeg1_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
int h263_slice_structured
int flags
AV_CODEC_FLAG_*.
uint64_t error[AV_NUM_DATA_POINTERS]
int rc_max_rate
maximum bitrate
int64_t av_gcd(int64_t a, int64_t b)
Return the greatest common divisor of a and b.
MpegvideoEncDSPContext mpvencdsp
attribute_deprecated int inter_quant_bias
const char * name
Name of the codec implementation.
int quarter_sample
1->qpel, 0->half pel ME/MC
uint16_t * mb_type
Table for candidate MB types for encoding (defines in mpegutils.h)
void ff_mjpeg_encode_picture_trailer(PutBitContext *pb, int header_bits)
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Shrink the already allocated side data buffer.
int low_delay
no reordering needed / has no b-frames
qpel_mc_func put_qpel_pixels_tab[2][16]
uint8_t *[2][2] b_field_select_table
static const uint8_t offset[127][2]
void ff_mpv_common_end(MpegEncContext *s)
Libavcodec external API header.
int flags
A combination of AV_PKT_FLAG values.
static int put_bits_count(PutBitContext *s)
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
static void frame_end(MpegEncContext *s)
int resync_mb_x
x position of last resync marker
int rc_buffer_size
decoder bitstream buffer size
void ff_clean_h263_qscales(MpegEncContext *s)
modify qscale so that encoding is actually possible in h263 (limit difference to -2..2)
int coded_picture_number
used to set pic->coded_picture_number, should not be used for/by anything else
static int estimate_best_b_count(MpegEncContext *s)
int intra_dc_precision
precision of the intra DC coefficient - 8
int me_penalty_compensation
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
void ff_wmv2_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
common internal API header
uint8_t * intra_ac_vlc_last_length
static const uint8_t non_linear_qscale[32]
static av_always_inline void encode_mb_internal(MpegEncContext *s, int motion_x, int motion_y, int mb_block_height, int mb_block_width, int mb_block_count)
const uint8_t *const ff_mpeg2_dc_scale_table[4]
#define FF_COMPLIANCE_EXPERIMENTAL
Allow nonstandardized experimental things.
void ff_h263_loop_filter(MpegEncContext *s)
void(* op_pixels_func)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
int bit_rate
the average bitrate
enum AVPictureType pict_type
Picture type of the frame.
const uint8_t ff_h263_chroma_qscale_table[32]
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define AV_CODEC_FLAG_QSCALE
Use fixed qscale.
int display_picture_number
picture number in display order
uint16_t(* q_inter_matrix16)[2][64]
uint8_t * vbv_delay_ptr
pointer to vbv_delay in the bitstream
int fixed_qscale
fixed qscale if non zero
void ff_clean_mpeg4_qscales(MpegEncContext *s)
modify mb_type & qscale so that encoding is actually possible in mpeg4
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
#define AV_CODEC_FLAG_AC_PRED
H.263 advanced intra coding / MPEG-4 AC prediction.
int me_method
ME algorithm.
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
int umvplus
== H263+ && unrestricted_mv
Picture new_picture
copy of the source picture structure for encoding.
int intra_quant_bias
bias for the quantizer
int width
picture width / height.
int(* pix_sum)(uint8_t *pix, int line_size)
int16_t(*[2] motion_val)[2]
Picture * current_picture_ptr
pointer to the current picture
float rc_max_available_vbv_use
Ratecontrol attempt to use, at maximum, of what can be used without an underflow. ...
int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
uint16_t(* q_intra_matrix16)[2][64]
identical to the above but for MMX & these are not permutated, second 64 entries are bias ...
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
int quality
quality (between 1 (good) and FF_LAMBDA_MAX (bad))
int(* ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2]
[mb_intra][isChroma][level][run][last]
int block_last_index[12]
last non zero coefficient in block
static int dct_quantize_refine(MpegEncContext *s, int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale)
uint8_t idct_permutation[64]
IDCT input permutation.
const int16_t ff_mpeg4_default_non_intra_matrix[64]
int mb_decision
macroblock decision mode
static int get_intra_count(MpegEncContext *s, uint8_t *src, uint8_t *ref, int stride)
attribute_deprecated float rc_qsquish
uint8_t * mbintra_table
used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding
int ff_msmpeg4_encode_init(MpegEncContext *s)
int ac_esc_length
num of bits needed to encode the longest esc
preferred ID for MPEG-1/2 video decoding
static void set_put_bits_buffer_size(PutBitContext *s, int size)
Change the end of the buffer.
#define FF_ARRAY_ELEMS(a)
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
int block_index[6]
index to current MB in block based arrays with edges
the normal 2^n-1 "JPEG" YUV ranges
int * mb_index2xy
mb_index -> mb_x + mb_y*mb_stride
static uint8_t default_fcode_tab[MAX_MV *2+1]
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
static void build_basis(uint8_t *perm)
#define MV_TYPE_16X16
1 vector for the whole mb
int frame_skip_factor
frame skip factor
int first_slice_line
used in mpeg4 too to handle resync markers
uint16_t * mc_mb_var
Table for motion compensated MB variances.
void ff_flv_encode_picture_header(MpegEncContext *s, int picture_number)
#define FF_COMPLIANCE_UNOFFICIAL
Allow unofficial extensions.
int coded_picture_number
picture number in bitstream order
#define AV_LOG_INFO
Standard information.
uint16_t inter_matrix[64]
uint64_t error[AV_NUM_DATA_POINTERS]
error
void ff_jpeg_fdct_islow_8(int16_t *data)
void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
struct MpegEncContext * thread_context[MAX_THREADS]
#define CONFIG_MSMPEG4_ENCODER
unsigned int lambda2
(lambda*lambda) >> FF_LAMBDA_SHIFT
#define CODEC_FLAG_NORMALIZE_AQP
void ff_faandct(int16_t *data)
double buffer_index
amount of bits in the video/audio buffer
void ff_h263_update_motion_val(MpegEncContext *s)
int h263_flv
use flv h263 header
static const AVClass h263p_class
ptrdiff_t linesize
line size, in bytes, may be different from width
char * av_strdup(const char *s)
Duplicate the string s.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
void ff_convert_matrix(MpegEncContext *s, int(*qmat)[64], uint16_t(*qmat16)[2][64], const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra)
const uint16_t ff_inv_aanscales[64]
void ff_set_cmp(MECmpContext *c, me_cmp_func *cmp, int type)
int frame_bits
number of bits used for the previously encoded frame
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
uint8_t * intra_chroma_ac_vlc_last_length
void(* fdct)(int16_t *block)
main external API structure.
int ff_alloc_picture(AVCodecContext *avctx, Picture *pic, MotionEstContext *me, ScratchpadContext *sc, int shared, int encoding, int chroma_x_shift, int chroma_y_shift, int out_format, int mb_stride, int mb_width, int mb_height, int b8_stride, ptrdiff_t *linesize, ptrdiff_t *uvlinesize)
Allocate a Picture.
ScanTable intra_scantable
int pre_me
prepass for motion estimation
int qmin
minimum quantizer
int height
picture size. must be a multiple of 16
static void write_slice_end(MpegEncContext *s)
int64_t dts_delta
pts difference between the first and second input frame, used for calculating dts of the first frame ...
int64_t user_specified_pts
last non-zero pts from AVFrame which was passed into avcodec_encode_video2()
static void denoise_dct_c(MpegEncContext *s, int16_t *block)
op_pixels_func put_pixels_tab[4][4]
Halfpel motion compensation with rounding (a+b+1)>>1.
static int frame_start(MpegEncContext *s)
float spatial_cplx_masking
spatial complexity masking (0-> disabled)
void ff_fix_long_p_mvs(MpegEncContext *s)
Picture * picture
main picture buffer
int data_partitioning
data partitioning flag from header
uint8_t * inter_ac_vlc_length
uint16_t * intra_matrix
custom intra quantization matrix
void ff_h263_encode_gob_header(MpegEncContext *s, int mb_line)
Encode a group of blocks header.
Describe the class of an AVClass context structure.
int stuffing_bits
bits used for stuffing
op_pixels_func put_no_rnd_pixels_tab[4][4]
Halfpel motion compensation with no rounding (a+b)>>1.
int16_t(*[2][2][2] b_field_mv_table)[2]
MV table (4MV per MB) interlaced b-frame encoding.
int(* pix_norm1)(uint8_t *pix, int line_size)
int64_t mc_mb_var_sum
motion compensated MB variance for current frame
#define CANDIDATE_MB_TYPE_DIRECT
#define FF_DEFAULT_QUANT_BIAS
static void copy_context_after_encode(MpegEncContext *d, MpegEncContext *s, int type)
const uint16_t ff_mpeg1_default_intra_matrix[256]
int input_picture_number
used to set pic->display_picture_number, should not be used for/by anything else
const uint8_t ff_zigzag_direct[64]
av_cold void ff_pixblockdsp_init(PixblockDSPContext *c, AVCodecContext *avctx)
ptrdiff_t uvlinesize
line size, for chroma in bytes, may be different from width
int mb_info
interval for outputting info about mb offsets as side data
void ff_set_mpeg4_time(MpegEncContext *s)
static void copy_context_before_encode(MpegEncContext *d, MpegEncContext *s, int type)
av_cold void ff_mjpeg_encode_close(MpegEncContext *s)
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
int frame_skip_exp
frame skip exponent
#define CANDIDATE_MB_TYPE_BIDIR_I
const int16_t ff_mpeg4_default_intra_matrix[64]
int f_code
forward MV resolution
int ff_pre_estimate_p_frame_motion(MpegEncContext *s, int mb_x, int mb_y)
#define CANDIDATE_MB_TYPE_DIRECT0
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my)
int ff_mjpeg_encode_stuffing(MpegEncContext *s)
static uint8_t default_mv_penalty[MAX_FCODE+1][MAX_MV *2+1]
static int weight(int i, int blen, int offset)
uint16_t * inter_matrix
custom inter quantization matrix
int max_b_frames
max number of b-frames for encoding
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
static enum AVPixelFormat pix_fmts[]
void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix)
static av_always_inline void encode_mb(MpegEncContext *s, int motion_x, int motion_y)
int last_mv_dir
last mv_dir, used for b frame encoding
int av_frame_get_buffer(AVFrame *frame, int align)
Allocate new buffer(s) for audio or video data.
int h263_pred
use mpeg4/h263 ac/dc predictions
int16_t(* b_bidir_back_mv_table)[2]
MV table (1MV per MB) bidir mode b-frame encoding.
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
float dark_masking
darkness masking (0-> disabled)
static int64_t pts
Global timestamp for the audio frames.
float temporal_cplx_masking
temporary complexity masking (0-> disabled)
int ff_init_me(MpegEncContext *s)
uint8_t *[2] p_field_select_table
int16_t(* b_direct_mv_table)[2]
MV table (1MV per MB) direct mode b-frame encoding.
#define AV_CODEC_FLAG_QPEL
Use qpel MC.
AAN (Arai, Agui and Nakajima) (I)DCT tables.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
const uint8_t * c_dc_scale_table
qscale -> c_dc_scale table
#define FF_MB_DECISION_SIMPLE
uses mb_cmp
int64_t mc_mb_var_sum_temp
int mv[2][4][2]
motion vectors for a macroblock first coordinate : 0 = forward 1 = backward second " : depend...
int16_t(* b_forw_mv_table)[2]
MV table (1MV per MB) forward mode b-frame encoding.
int b8_stride
2*mb_width+1 used for some 8x8 block arrays to allow simple addressing
int noise_reduction
noise reduction strength
static int estimate_motion_thread(AVCodecContext *c, void *arg)
Picture * next_picture_ptr
pointer to the next picture (for bidir pred)
struct AVCodecContext * avctx
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
PutBitContext pb
bit output
static int skip_check(MpegEncContext *s, Picture *p, Picture *ref)
void ff_mpeg_unref_picture(AVCodecContext *avctx, Picture *pic)
Deallocate a picture.
av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
GLint GLenum GLboolean GLsizei stride
static void update_qscale(MpegEncContext *s)
int mb_cmp
macroblock comparison function (not supported yet)
int quantizer_noise_shaping
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
void ff_msmpeg4_encode_ext_header(MpegEncContext *s)
static int pre_estimate_motion_thread(AVCodecContext *c, void *arg)
#define FF_DISABLE_DEPRECATION_WARNINGS
static const int32_t qmat16[MAT_SIZE]
#define FF_MB_DECISION_RD
rate distortion
common internal api header.
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
#define CANDIDATE_MB_TYPE_FORWARD
void ff_h263_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
int adaptive_quant
use adaptive quantization
static int16_t basis[64][64]
attribute_deprecated float border_masking
static int score_tab[256]
Picture last_picture
copy of the previous picture structure.
Picture * last_picture_ptr
pointer to the previous picture.
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
float rc_qsquish
ratecontrol qmin qmax limiting method 0-> clipping, 1-> use a nice continuous function to limit qscal...
int64_t reordered_pts
reordered pts to be used as dts for the next output frame when there's a delay
attribute_deprecated AVFrame * coded_frame
the picture in the bitstream
int ff_vbv_update(MpegEncContext *s, int frame_size)
#define H263_GOB_HEIGHT(h)
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
attribute_deprecated float rc_qmod_amp
const uint8_t * chroma_qscale_table
qscale -> chroma_qscale (h263)
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
AVCodec ff_msmpeg4v3_encoder
int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src)
int trellis
trellis RD quantization
void(* dct_unquantize_mpeg1_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
static int alloc_picture(MpegEncContext *s, Picture *pic, int shared)
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
void ff_mpeg1_encode_picture_header(MpegEncContext *s, int picture_number)
void ff_mpeg4_stuffing(PutBitContext *pbc)
add mpeg4 stuffing bits (01...1)
#define CANDIDATE_MB_TYPE_INTRA
int16_t(* blocks)[12][64]
int slices
Number of slices.
int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet)
const AVOption ff_mpv_generic_options[]
int last_bits
temp var used for calculating the above vars
void ff_mpeg4_init_partitions(MpegEncContext *s)
av_cold int ff_mpv_common_init(MpegEncContext *s)
init common structure for both encoder and decoder.
void(* diff_pixels)(int16_t *block, const uint8_t *s1, const uint8_t *s2, int stride)
static av_always_inline int diff(const uint32_t a, const uint32_t b)
int dia_size
ME diamond size & shape.
int b_sensitivity
Adjust sensitivity of b_frame_strategy 1.
int(* execute)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size)
The codec may call this to execute several independent things.
#define FF_ENABLE_DEPRECATION_WARNINGS
static void merge_context_after_me(MpegEncContext *dst, MpegEncContext *src)
void(* draw_edges)(uint8_t *buf, int wrap, int width, int height, int w, int h, int sides)
int ff_get_best_fcode(MpegEncContext *s, int16_t(*mv_table)[2], int type)
int resync_mb_y
y position of last resync marker
struct AVCodecInternal * internal
Private context used for internal data.
int16_t(* block)[64]
points to one of the following blocks
void ff_mjpeg_encode_mb(MpegEncContext *s, int16_t block[12][64])
int64_t bit_rate
wanted bit rate
PutBitContext tex_pb
used for data partitioned VOPs
Picture next_picture
copy of the next picture structure.
int key_frame
1 -> keyframe, 0-> not
attribute_deprecated int error_rate
static void set_frame_distances(MpegEncContext *s)
static const double coeff[2][5]
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
void ff_fix_long_mvs(MpegEncContext *s, uint8_t *field_select_table, int field_select, int16_t(*mv_table)[2], int f_code, int type, int truncate)
Picture ** reordered_input_picture
pointer to the next pictures in codedorder for encoding
static const struct twinvq_data tab
unsigned int byte_buffer_size
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
void ff_rv20_encode_picture_header(MpegEncContext *s, int picture_number)
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
void(* dct_unquantize_mpeg2_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
static int encode_thread(AVCodecContext *c, void *arg)
void ff_mpv_common_defaults(MpegEncContext *s)
Set the given MpegEncContext to common defaults (same for encoding and decoding). ...
int(* fast_dct_quantize)(struct MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
uint16_t intra_matrix[64]
matrix transmitted in the bitstream
#define LOCAL_ALIGNED_16(t, v,...)
static void merge_context_after_encode(MpegEncContext *dst, MpegEncContext *src)
static void update_duplicate_context_after_me(MpegEncContext *dst, MpegEncContext *src)
#define AV_CODEC_FLAG_CLOSED_GOP
Allow non spec compliant speedup tricks.
int inter_quant_bias
bias for the quantizer
av_cold void ff_qpeldsp_init(QpelDSPContext *c)
attribute_deprecated int lmin
#define CANDIDATE_MB_TYPE_BACKWARD
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet.
int(* dct_quantize)(struct MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
#define MV_TYPE_8X8
4 vectors (h263, mpeg4 4MV)
int rc_min_rate
minimum bitrate
int b_code
backward MV resolution for B Frames (mpeg4)
void ff_msmpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
void ff_h261_encode_init(MpegEncContext *s)
int64_t mb_var_sum
sum of MB variance for current frame
static int encode_frame(AVCodecContext *c, AVFrame *frame)
AVPixelFormat
Pixel format.
This structure stores compressed data.
uint8_t * byte_buffer
temporary buffer used for encoders to store their bitstream
int strict_std_compliance
strictly follow the standard (MPEG4, ...).
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int ff_check_alignment(void)
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
#define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)
int ff_match_2uint16(const uint16_t(*tab)[2], int size, int a, int b)
Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
#define AV_NOPTS_VALUE
Undefined timestamp value.
static void encode_mb_hq(MpegEncContext *s, MpegEncContext *backup, MpegEncContext *best, int type, PutBitContext pb[2], PutBitContext pb2[2], PutBitContext tex_pb[2], int *dmin, int *next_block, int motion_x, int motion_y)
unsigned int lambda
lagrange multipler used in rate distortion
AVCodec ff_msmpeg4v2_encoder
uint16_t pb_time
time distance between the last b and p,s,i frame
enum idct_permutation_type perm_type
static const uint8_t sp5x_quant_table[20][64]
int next_lambda
next lambda used for retrying to encode a frame