62 #define QUANT_BIAS_SHIFT 8
64 #define QMAT_SHIFT_MMX 16
82 uint16_t (*qmat16)[2][64],
83 const uint16_t *quant_matrix,
84 int bias,
int qmin,
int qmax,
int intra)
90 for (qscale = qmin; qscale <= qmax; qscale++) {
97 for (i = 0; i < 64; i++) {
99 int64_t den = (int64_t) qscale * quant_matrix[j];
109 for (i = 0; i < 64; i++) {
111 int64_t den =
ff_aanscales[i] * (int64_t) qscale * quant_matrix[j];
121 for (i = 0; i < 64; i++) {
123 int64_t den = (int64_t) qscale * quant_matrix[j];
134 if (qmat16[qscale][0][i] == 0 ||
135 qmat16[qscale][0][i] == 128 * 256)
136 qmat16[
qscale][0][i] = 128 * 256 - 1;
139 qmat16[qscale][0][i]);
143 for (i = intra; i < 64; i++) {
148 while (((max * qmat[qscale][i]) >> shift) > INT_MAX) {
155 "Warning, QMAT_SHIFT is larger than %d, overflows possible\n",
176 for (i = 0; i < 64; i++) {
191 for (i = 0; i < s->
mb_num; i++) {
202 #define COPY(a) dst->a= src->a
227 for (i = -16; i < 16; i++) {
241 if (CONFIG_H263_ENCODER)
258 int i,
ret, format_supported;
267 "only YUV420 and YUV422 are supported\n");
273 format_supported = 0;
282 format_supported = 1;
288 format_supported = 1;
290 if (!format_supported) {
324 "keyframe interval too large!, reducing it from %d to %d\n",
353 "intra dc precision must be positive, note some applications use"
354 " 0 and some 8 as base meaning 8bit, the value must not be smaller than that\n");
421 av_log(avctx,
AV_LOG_ERROR,
"Either both buffer size and max rate or neither must be specified\n");
427 "Warning min_rate > 0 but min_rate != max_rate isn't recommended!\n");
444 "impossible bitrate constraints, this will fail\n");
469 "Warning vbv_delay will be set to 0xFFFF (=VBR) as the "
470 "specified vbv buffer is too large for the given bitrate!\n");
482 "OBMC is only supported with simple mb decision\n");
500 "max b frames must be 0 or positive for mpegvideo based encoders\n");
510 "Invalid pixel aspect ratio %i/%i, limit is 255/255 reducing\n",
518 (avctx->
width > 2048 ||
525 ((avctx->
width &3) ||
532 (avctx->
width > 4095 ||
539 (avctx->
width > 16383 ||
540 avctx->
height > 16383 )) {
541 av_log(avctx,
AV_LOG_ERROR,
"MPEG-2 does not support resolutions above 16383x16383\n");
576 "mpeg2 style quantization not supported by codec\n");
594 "closed gop with scene change detection are not supported yet, "
595 "set threshold to 1000000000\n");
602 "low delay forcing is only available for mpeg2\n");
607 "b frames cannot be used with low delay\n");
613 if (avctx->
qmax > 12) {
615 "non linear quant only supports qmax <= 12 currently\n");
627 "multi threaded encoding not supported by codec\n");
633 "automatic thread number detection not supported by codec, "
651 "notice: b_frame_strategy only affects the first pass\n");
674 av_log(avctx,
AV_LOG_ERROR,
"qmin and or qmax are invalid, they must be 0 < min <= max\n");
688 "timebase %d/%d not supported by MPEG 4 standard, "
689 "the maximum admitted value for the timebase denominator "
712 if (!CONFIG_MJPEG_ENCODER ||
719 if (!CONFIG_H261_ENCODER)
723 "The specified picture size of %dx%d is not valid for the "
724 "H.261 codec.\nValid sizes are 176x144, 352x288\n",
734 if (!CONFIG_H263_ENCODER)
739 "The specified picture size of %dx%d is not valid for "
740 "the H.263 codec.\nValid sizes are 128x96, 176x144, "
741 "352x288, 704x576, and 1408x1152. "
857 (
MAX_RUN + 1) * 2 *
sizeof(
int), fail);
874 2 * 64 *
sizeof(uint16_t), fail);
879 if ((CONFIG_H263P_ENCODER || CONFIG_RV20_ENCODER) && s->
modified_quant)
894 if ((CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
899 for (i = 0; i < 64; i++) {
934 #if FF_API_ERROR_RATE
941 #if FF_API_NORMALIZE_AQP
1011 if (CONFIG_MJPEG_ENCODER &&
1046 for (y = 0; y < 16; y++) {
1047 for (x = 0; x < 16; x++) {
1048 acc +=
FFABS(src[x + y * stride] - ref);
1064 for (y = 0; y < h; y += 16) {
1065 for (x = 0; x < w; x += 16) {
1066 int offset = x + y * stride;
1070 int sae =
get_sae(src + offset, mean, stride);
1072 acc += sae + 500 < sad;
1083 int i, display_picture_number = 0,
ret;
1098 "Invalid pts (%"PRId64
") <= last (%"PRId64
")\n",
1103 if (!s->
low_delay && display_picture_number == 1)
1112 "Warning: AVFrame.pts=? trying to guess (%"PRId64
")\n",
1115 pts = display_picture_number;
1121 if (!pic_arg->
buf[0] ||
1159 int h_chroma_shift, v_chroma_shift;
1164 for (i = 0; i < 3; i++) {
1165 int src_stride = pic_arg->
linesize[i];
1167 int h_shift = i ? h_chroma_shift : 0;
1168 int v_shift = i ? v_chroma_shift : 0;
1169 int w = s->
width >> h_shift;
1170 int h = s->
height >> v_shift;
1183 if (src_stride == dst_stride)
1184 memcpy(dst, src, src_stride * h);
1189 memcpy(dst2, src, w);
1225 int64_t score64 = 0;
1227 for (plane = 0; plane < 3; plane++) {
1229 const int bw = plane ? 1 : 2;
1230 for (y = 0; y < s->
mb_height * bw; y++) {
1231 for (x = 0; x < s->
mb_width * bw; x++) {
1232 int off = p->
shared ? 0 : 16;
1233 uint8_t *dptr = p->
f->
data[plane] + 8 * (x + y * stride) + off;
1234 uint8_t *rptr = ref->
f->
data[plane] + 8 * (x + y * stride);
1238 case 0: score =
FFMAX(score, v);
break;
1239 case 1: score +=
FFABS(v);
break;
1240 case 2: score64 += v * (int64_t)v;
break;
1241 case 3: score64 +=
FFABS(v * (int64_t)v * v);
break;
1242 case 4: score64 += (v * (int64_t)v) * (v * (int64_t)v);
break;
1265 int ret, got_output;
1282 int i, j, out_size, p_lambda, b_lambda,
lambda2;
1283 int64_t best_rd = INT64_MAX;
1284 int best_b_count = -1;
1294 b_lambda = p_lambda;
1319 pre_input = *pre_input_ptr;
1320 memcpy(data, pre_input_ptr->
f->
data,
sizeof(data));
1322 if (!pre_input.
shared && i) {
1390 return best_b_count;
1463 b_frames =
FFMAX(0, i - 1);
1466 for (i = 0; i < b_frames + 1; i++) {
1478 for (i = b_frames - 1; i >= 0; i--) {
1486 "warning, too many b frames in a row\n");
1509 for (i = 0; i < b_frames; i++) {
1555 for (i = 0; i < 4; i++) {
1615 for (intra = 0; intra < 2; intra++) {
1617 for (i = 0; i < 64; i++) {
1623 for (i = 0; i < 64; i++) {
1674 for (i = 0; i < 4; i++) {
1705 const AVFrame *pic_arg,
int *got_packet)
1708 int i, stuffing_count,
ret;
1735 for (i = 0; i < context_count; i++) {
1752 if (growing_buffer) {
1803 for (i = 0; i < context_count; i++) {
1817 for (i = 0; i < 4; i++) {
1833 if (stuffing_count) {
1835 stuffing_count + 50) {
1843 while (stuffing_count--) {
1850 stuffing_count -= 4;
1851 while (stuffing_count--) {
1877 "Internal error, negative bits\n");
1885 vbv_delay =
FFMAX(vbv_delay, min_delay);
1925 *got_packet = !!pkt->
size;
1930 int n,
int threshold)
1932 static const char tab[64] = {
1933 3, 2, 2, 1, 1, 1, 1, 1,
1934 1, 1, 1, 1, 1, 1, 1, 1,
1935 1, 1, 1, 1, 1, 1, 1, 1,
1936 0, 0, 0, 0, 0, 0, 0, 0,
1937 0, 0, 0, 0, 0, 0, 0, 0,
1938 0, 0, 0, 0, 0, 0, 0, 0,
1939 0, 0, 0, 0, 0, 0, 0, 0,
1940 0, 0, 0, 0, 0, 0, 0, 0
1949 if (threshold < 0) {
1951 threshold = -threshold;
1956 if (last_index <= skip_dc - 1)
1959 for (i = 0; i <= last_index; i++) {
1963 if (skip_dc && i == 0)
1967 }
else if (level > 1) {
1973 if (score >= threshold)
1975 for (i = skip_dc; i <= last_index; i++) {
1998 for (; i <= last_index; i++) {
2000 int level = block[j];
2002 if (level > maxlevel) {
2005 }
else if (level < minlevel) {
2015 "warning, clipping %d dct coefficients to %d..%d\n",
2016 overflow, minlevel, maxlevel);
2023 for (y = 0; y < 8; y++) {
2024 for (x = 0; x < 8; x++) {
2030 for (y2 =
FFMAX(y - 1, 0); y2 <
FFMIN(8, y + 2); y2++) {
2031 for (x2=
FFMAX(x - 1, 0); x2 <
FFMIN(8, x + 2); x2++) {
2032 int v = ptr[x2 + y2 * stride];
2038 weight[x + 8 *
y]= (36 *
ff_sqrt(count * sqr - sum * sum)) / count;
2044 int motion_x,
int motion_y,
2045 int mb_block_height,
2050 int16_t orig[12][64];
2057 uint8_t *ptr_y, *ptr_cb, *ptr_cr;
2058 ptrdiff_t wrap_y, wrap_c;
2060 for (i = 0; i < mb_block_count; i++)
2064 const int last_qp = s->
qscale;
2065 const int mb_xy = mb_x + mb_y * s->
mb_stride;
2096 (mb_y * 16 * wrap_y) + mb_x * 16;
2098 (mb_y * mb_block_height * wrap_c) + mb_x * mb_block_width;
2100 (mb_y * mb_block_height * wrap_c) + mb_x * mb_block_width;
2108 16, 16, mb_x * 16, mb_y * 16,
2113 mb_block_width, mb_block_height,
2114 mb_x * mb_block_width, mb_y * mb_block_height,
2116 ptr_cb = ebuf + 16 * wrap_y;
2119 mb_block_width, mb_block_height,
2120 mb_x * mb_block_width, mb_y * mb_block_height,
2122 ptr_cr = ebuf + 16 * wrap_y + 16;
2127 int progressive_score, interlaced_score;
2132 NULL, wrap_y, 8) - 400;
2134 if (progressive_score > 0) {
2136 NULL, wrap_y * 2, 8) +
2138 NULL, wrap_y * 2, 8);
2139 if (progressive_score > interlaced_score) {
2142 dct_offset = wrap_y;
2143 uv_dct_offset = wrap_c;
2178 uint8_t *dest_y, *dest_cb, *dest_cr;
2180 dest_y = s->
dest[0];
2181 dest_cb = s->
dest[1];
2182 dest_cr = s->
dest[2];
2206 int progressive_score, interlaced_score;
2209 progressive_score = s->
mecc.
ildct_cmp[0](
s, dest_y, ptr_y, wrap_y, 8) +
2215 progressive_score -= 400;
2217 if (progressive_score > 0) {
2224 if (progressive_score > interlaced_score) {
2227 dct_offset = wrap_y;
2228 uv_dct_offset = wrap_c;
2239 dest_y + dct_offset, wrap_y);
2241 dest_y + dct_offset + 8, wrap_y);
2251 dest_cb + uv_dct_offset, wrap_c);
2253 dest_cr + uv_dct_offset, wrap_c);
2264 if (s->
mecc.
sad[1](
NULL, ptr_y + dct_offset, dest_y + dct_offset,
2265 wrap_y, 8) < 20 * s->
qscale)
2267 if (s->
mecc.
sad[1](
NULL, ptr_y + dct_offset + 8, dest_y + dct_offset + 8,
2268 wrap_y, 8) < 20 * s->
qscale)
2276 dest_cb + uv_dct_offset,
2277 wrap_c, 8) < 20 * s->
qscale)
2280 dest_cr + uv_dct_offset,
2281 wrap_c, 8) < 20 * s->
qscale)
2308 memcpy(orig[0], s->
block[0],
sizeof(int16_t) * 64 * mb_block_count);
2314 for (i = 0; i < mb_block_count; i++) {
2329 for (i = 0; i < mb_block_count; i++) {
2339 for (i = 0; i < 4; i++)
2342 for (i = 4; i < mb_block_count; i++)
2346 for (i = 0; i < mb_block_count; i++) {
2359 for (i=6; i<12; i++) {
2368 for (i = 0; i < mb_block_count; i++) {
2371 for (j = 63; j > 0; j--) {
2384 if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
2388 if (CONFIG_MPEG4_ENCODER)
2398 if (CONFIG_WMV2_ENCODER)
2402 if (CONFIG_H261_ENCODER)
2410 if (CONFIG_H263_ENCODER)
2415 if (CONFIG_MJPEG_ENCODER)
2461 memcpy(d->
mv, s->
mv, 2*4*2*
sizeof(
int));
2499 int *dmin,
int *next_block,
int motion_x,
int motion_y)
2507 s->
pb= pb[*next_block];
2509 s->
pb2 = pb2 [*next_block];
2510 s->
tex_pb= tex_pb[*next_block];
2514 memcpy(dest_backup, s->
dest,
sizeof(s->
dest));
2537 memcpy(s->
dest, dest_backup,
sizeof(s->
dest));
2554 return s->
mecc.
sse[0](
NULL, src1, src2, stride, 16);
2555 else if(w==8 && h==8)
2556 return s->
mecc.
sse[1](
NULL, src1, src2, stride, 8);
2560 acc+= sq[src1[x + y*stride] - src2[x + y*stride]];
2645 for(mb_x=0; mb_x < s->
mb_width; mb_x++) {
2653 (((unsigned) sum * sum) >> 8) + 500 + 128) >> 8;
2688 if (CONFIG_H263_ENCODER)
2690 bytestream_put_le32(&ptr, offset);
2691 bytestream_put_byte(&ptr, s->
qscale);
2692 bytestream_put_byte(&ptr, gobn);
2693 bytestream_put_le16(&ptr, mba);
2694 bytestream_put_byte(&ptr, pred_x);
2695 bytestream_put_byte(&ptr, pred_y);
2697 bytestream_put_byte(&ptr, 0);
2698 bytestream_put_byte(&ptr, 0);
2774 if (CONFIG_H263_ENCODER)
2794 for(mb_x=0; mb_x < s->
mb_width; mb_x++) {
2811 int new_buffer_size = 0;
2848 int current_packet_size, is_gob_start;
2854 if(s->
start_mb_y == mb_y && mb_y > 0 && mb_x==0) is_gob_start=1;
2863 if(s->
mb_x==0 && s->
mb_y!=0) is_gob_start=1;
2868 if(s->
mb_x==0 && s->
mb_y!=0) is_gob_start=1;
2888 current_packet_size=0;
2902 if (CONFIG_MPEG4_ENCODER) {
2909 if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER) {
2916 if (CONFIG_H263_ENCODER)
2946 int pb_bits_count, pb2_bits_count, tex_pb_bits_count;
2953 backup_s.pb2= s->
pb2;
2954 backup_s.tex_pb= s->
tex_pb;
2963 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER, pb, pb2, tex_pb,
2964 &dmin, &next_block, s->
mv[0][0][0], s->
mv[0][0][1]);
2975 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER_I, pb, pb2, tex_pb,
2976 &dmin, &next_block, 0, 0);
2984 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_SKIPPED, pb, pb2, tex_pb,
2985 &dmin, &next_block, s->
mv[0][0][0], s->
mv[0][0][1]);
2995 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER4V, pb, pb2, tex_pb,
2996 &dmin, &next_block, 0, 0);
3004 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_FORWARD, pb, pb2, tex_pb,
3005 &dmin, &next_block, s->
mv[0][0][0], s->
mv[0][0][1]);
3013 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BACKWARD, pb, pb2, tex_pb,
3014 &dmin, &next_block, s->
mv[1][0][0], s->
mv[1][0][1]);
3024 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BIDIR, pb, pb2, tex_pb,
3025 &dmin, &next_block, 0, 0);
3036 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_FORWARD_I, pb, pb2, tex_pb,
3037 &dmin, &next_block, 0, 0);
3048 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BACKWARD_I, pb, pb2, tex_pb,
3049 &dmin, &next_block, 0, 0);
3055 for(dir=0; dir<2; dir++){
3062 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BIDIR_I, pb, pb2, tex_pb,
3063 &dmin, &next_block, 0, 0);
3071 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTRA, pb, pb2, tex_pb,
3072 &dmin, &next_block, 0, 0);
3083 const int last_qp= backup_s.qscale;
3087 static const int dquant_tab[4]={-1,1,-2,2};
3096 s->
mv[0][0][0] = best_s.
mv[0][0][0];
3097 s->
mv[0][0][1] = best_s.
mv[0][0][1];
3098 s->
mv[1][0][0] = best_s.
mv[1][0][0];
3099 s->
mv[1][0][1] = best_s.
mv[1][0][1];
3102 for(; qpi<4; qpi++){
3103 int dquant= dquant_tab[qpi];
3115 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER , pb, pb2, tex_pb,
3116 &dmin, &next_block, s->
mv[mvdir][0][0], s->
mv[mvdir][0][1]);
3132 backup_s.dquant = 0;
3136 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb,
3137 &dmin, &next_block, mx, my);
3140 backup_s.dquant = 0;
3144 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb,
3145 &dmin, &next_block, 0, 0);
3153 memcpy(s->
mv, best_s.
mv,
sizeof(s->
mv));
3174 encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER , pb, pb2, tex_pb,
3175 &dmin, &next_block, mx, my);
3193 s->
pb2= backup_s.pb2;
3197 avpriv_copy_bits(&backup_s.tex_pb, bit_buf_tex[next_block^1], tex_pb_bits_count);
3198 s->
tex_pb= backup_s.tex_pb;
3202 if (CONFIG_H263_ENCODER &&
3215 int motion_x = 0, motion_y = 0;
3223 motion_x= s->
mv[0][0][0] = 0;
3224 motion_y= s->
mv[0][0][1] = 0;
3252 if (CONFIG_MPEG4_ENCODER) {
3261 if (CONFIG_MPEG4_ENCODER) {
3311 for(dir=0; dir<2; dir++){
3328 if (CONFIG_H263_ENCODER &&
3385 #define MERGE(field) dst->field += src->field; src->field=0
3412 for(i=0; i<64; i++){
3439 if (CONFIG_MPEG4_ENCODER)
3445 if (CONFIG_H263_ENCODER)
3526 for(i=1; i<context_count; i++){
3556 for(i=1; i<context_count; i++){
3569 av_dlog(s,
"Scene change detected, encoding as I Frame %"PRId64
" %"PRId64
"\n",
3613 for(dir=0; dir<2; dir++){
3662 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};
3663 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};
3694 if (CONFIG_MJPEG_ENCODER)
3699 if (CONFIG_H261_ENCODER)
3707 else if (CONFIG_MPEG4_ENCODER && s->
h263_pred)
3718 else if (CONFIG_H263_ENCODER)
3722 if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
3731 for(i=1; i<context_count; i++){
3735 for(i=1; i<context_count; i++){
3748 for(i=0; i<64; i++){
3749 int level= block[i];
3755 if(level<0) level=0;
3759 if(level>0) level=0;
3768 int qscale,
int *overflow){
3770 const uint16_t *matrix;
3774 unsigned int threshold1, threshold2;
3786 int coeff_count[64];
3787 int qmul, qadd, start_i, last_non_zero, i,
dc;
3798 qadd= ((qscale-1)|1)*8;
3815 block[0] = (block[0] + (q >> 1)) / q;
3841 threshold2= (threshold1<<1);
3843 for(i=63; i>=start_i; i--) {
3844 const int j = scantable[i];
3845 int level = block[j] * qmat[j];
3847 if(((
unsigned)(level+threshold1))>threshold2){
3853 for(i=start_i; i<=last_non_zero; i++) {
3854 const int j = scantable[i];
3855 int level = block[j] * qmat[j];
3859 if(((
unsigned)(level+threshold1))>threshold2){
3863 coeff[1][i]= level-1;
3867 coeff[0][i]= -
level;
3868 coeff[1][i]= -level+1;
3871 coeff_count[i]=
FFMIN(level, 2);
3875 coeff[0][i]= (level>>31)|1;
3882 if(last_non_zero < start_i){
3883 memset(block + start_i, 0, (64-start_i)*
sizeof(int16_t));
3884 return last_non_zero;
3887 score_tab[start_i]= 0;
3888 survivor[0]= start_i;
3891 for(i=start_i; i<=last_non_zero; i++){
3892 int level_index, j, zero_distortion;
3893 int dct_coeff=
FFABS(block[ scantable[i] ]);
3894 int best_score=256*256*256*120;
3898 zero_distortion= dct_coeff*dct_coeff;
3900 for(level_index=0; level_index < coeff_count[i]; level_index++){
3902 int level= coeff[level_index][i];
3903 const int alevel=
FFABS(level);
3909 unquant_coeff= alevel*qmul + qadd;
3912 unquant_coeff = alevel * matrix[j] * 8;
3916 unquant_coeff = (int)( alevel * qscale * matrix[j]) >> 3;
3917 unquant_coeff = (unquant_coeff - 1) | 1;
3919 unquant_coeff = ((( alevel << 1) + 1) * qscale * ((int) matrix[j])) >> 4;
3920 unquant_coeff = (unquant_coeff - 1) | 1;
3925 distortion= (unquant_coeff - dct_coeff) * (unquant_coeff - dct_coeff) - zero_distortion;
3927 if((level&(~127)) == 0){
3928 for(j=survivor_count-1; j>=0; j--){
3929 int run= i - survivor[j];
3931 score += score_tab[i-
run];
3933 if(score < best_score){
3936 level_tab[i+1]= level-64;
3941 for(j=survivor_count-1; j>=0; j--){
3942 int run= i - survivor[j];
3944 score += score_tab[i-
run];
3945 if(score < last_score){
3948 last_level= level-64;
3954 distortion += esc_length*
lambda;
3955 for(j=survivor_count-1; j>=0; j--){
3956 int run= i - survivor[j];
3957 int score= distortion + score_tab[i-
run];
3959 if(score < best_score){
3962 level_tab[i+1]= level-64;
3967 for(j=survivor_count-1; j>=0; j--){
3968 int run= i - survivor[j];
3969 int score= distortion + score_tab[i-
run];
3970 if(score < last_score){
3973 last_level= level-64;
3981 score_tab[i+1]= best_score;
3984 if(last_non_zero <= 27){
3985 for(; survivor_count; survivor_count--){
3986 if(score_tab[ survivor[survivor_count-1] ] <= best_score)
3990 for(; survivor_count; survivor_count--){
3991 if(score_tab[ survivor[survivor_count-1] ] <= best_score + lambda)
3996 survivor[ survivor_count++ ]= i+1;
4000 last_score= 256*256*256*120;
4001 for(i= survivor[0]; i<=last_non_zero + 1; i++){
4002 int score= score_tab[i];
4003 if(i) score += lambda*2;
4005 if(score < last_score){
4008 last_level= level_tab[i];
4009 last_run= run_tab[i];
4016 dc=
FFABS(block[0]);
4017 last_non_zero= last_i - 1;
4018 memset(block + start_i, 0, (64-start_i)*
sizeof(int16_t));
4020 if(last_non_zero < start_i)
4021 return last_non_zero;
4023 if(last_non_zero == 0 && start_i == 0){
4025 int best_score= dc *
dc;
4027 for(i=0; i<coeff_count[0]; i++){
4028 int level= coeff[i][0];
4029 int alevel=
FFABS(level);
4030 int unquant_coeff, score, distortion;
4033 unquant_coeff= (alevel*qmul + qadd)>>3;
4035 unquant_coeff = ((( alevel << 1) + 1) * qscale * ((int) matrix[0])) >> 4;
4036 unquant_coeff = (unquant_coeff - 1) | 1;
4038 unquant_coeff = (unquant_coeff + 4) >> 3;
4039 unquant_coeff<<= 3 + 3;
4041 distortion= (unquant_coeff -
dc) * (unquant_coeff - dc);
4044 else score= distortion + esc_length*
lambda;
4046 if(score < best_score){
4048 best_level= level - 64;
4051 block[0]= best_level;
4053 if(best_level == 0)
return -1;
4054 else return last_non_zero;
4060 block[ perm_scantable[last_non_zero] ]= last_level;
4063 for(; i>start_i; i -= run_tab[i] + 1){
4064 block[ perm_scantable[i-1] ]= level_tab[i];
4067 return last_non_zero;
4082 int perm_index= perm[
index];
4083 if(i==0) s*= sqrt(0.5);
4084 if(j==0) s*= sqrt(0.5);
4085 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)));
4104 int qmul, qadd, start_i, last_non_zero, i,
dc;
4108 int rle_index,
run, q = 1, sum;
4111 static int after_last=0;
4112 static int to_zero=0;
4113 static int from_zero=0;
4116 static int messed_sign=0;
4119 if(basis[0][0] == 0)
4161 for(i=0; i<64; i++){
4168 for(i=0; i<64; i++){
4173 w=
FFABS(weight[i]) + qns*one;
4174 w= 15 + (48*qns*one + w/2)/w;
4189 for(i=start_i; i<=last_non_zero; i++){
4190 int j= perm_scantable[i];
4191 const int level= block[j];
4195 if(level<0) coeff= qmul*level - qadd;
4196 else coeff= qmul*level + qadd;
4197 run_tab[rle_index++]=
run;
4206 if(last_non_zero>0){
4217 int run2, best_unquant_change=0, analyze_gradient;
4223 if(analyze_gradient){
4227 for(i=0; i<64; i++){
4243 const int level= block[0];
4244 int change, old_coeff;
4250 for(change=-1; change<=1; change+=2){
4251 int new_level= level + change;
4252 int score, new_coeff;
4254 new_coeff= q*new_level;
4255 if(new_coeff >= 2048 || new_coeff < 0)
4259 new_coeff - old_coeff);
4260 if(score<best_score){
4263 best_change= change;
4264 best_unquant_change= new_coeff - old_coeff;
4271 run2= run_tab[rle_index++];
4275 for(i=start_i; i<64; i++){
4276 int j= perm_scantable[i];
4277 const int level= block[j];
4278 int change, old_coeff;
4284 if(level<0) old_coeff= qmul*level - qadd;
4285 else old_coeff= qmul*level + qadd;
4286 run2= run_tab[rle_index++];
4293 for(change=-1; change<=1; change+=2){
4294 int new_level= level + change;
4295 int score, new_coeff, unquant_change;
4302 if(new_level<0) new_coeff= qmul*new_level - qadd;
4303 else new_coeff= qmul*new_level + qadd;
4304 if(new_coeff >= 2048 || new_coeff <= -2048)
4309 if(level < 63 && level > -63){
4310 if(i < last_non_zero)
4320 if(analyze_gradient){
4321 int g= d1[ scantable[i] ];
4322 if(g && (g^new_level) >= 0)
4326 if(i < last_non_zero){
4327 int next_i= i + run2 + 1;
4328 int next_level= block[ perm_scantable[next_i] ] + 64;
4330 if(next_level&(~127))
4333 if(next_i < last_non_zero)
4353 if(i < last_non_zero){
4354 int next_i= i + run2 + 1;
4355 int next_level= block[ perm_scantable[next_i] ] + 64;
4357 if(next_level&(~127))
4360 if(next_i < last_non_zero)
4379 unquant_change= new_coeff - old_coeff;
4380 av_assert2((score < 100*lambda && score > -100*lambda) || lambda==0);
4384 if(score<best_score){
4387 best_change= change;
4388 best_unquant_change= unquant_change;
4392 prev_level= level + 64;
4393 if(prev_level&(~127))
4406 int j= perm_scantable[ best_coeff ];
4408 block[j] += best_change;
4410 if(best_coeff > last_non_zero){
4411 last_non_zero= best_coeff;
4419 if(block[j] - best_change){
4420 if(
FFABS(block[j]) >
FFABS(block[j] - best_change)){
4432 for(; last_non_zero>=start_i; last_non_zero--){
4433 if(block[perm_scantable[last_non_zero]])
4439 if(256*256*256*64 % count == 0){
4440 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);
4445 for(i=start_i; i<=last_non_zero; i++){
4446 int j= perm_scantable[i];
4447 const int level= block[j];
4450 run_tab[rle_index++]=
run;
4463 if(last_non_zero>0){
4469 return last_non_zero;
4474 int qscale,
int *overflow)
4476 int i, j,
level, last_non_zero, q, start_i;
4481 unsigned int threshold1, threshold2;
4500 block[0] = (block[0] + (q >> 1)) / q;
4512 threshold2= (threshold1<<1);
4513 for(i=63;i>=start_i;i--) {
4515 level = block[j] * qmat[j];
4517 if(((
unsigned)(level+threshold1))>threshold2){
4524 for(i=start_i; i<=last_non_zero; i++) {
4526 level = block[j] * qmat[j];
4530 if(((
unsigned)(level+threshold1))>threshold2){
4548 scantable, last_non_zero);
4550 return last_non_zero;
4553 #define OFFSET(x) offsetof(MpegEncContext, x)
4554 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
4558 {
"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 },
4615 .
name =
"msmpeg4v2",
4624 .priv_class = &msmpeg4v2_class,
4639 .priv_class = &msmpeg4v3_class,
4654 .priv_class = &wmv1_class,