Go to the documentation of this file.
   74 #define QUANT_BIAS_SHIFT 8 
   76 #define QMAT_SHIFT_MMX 16 
   90 #if FF_API_MPEGVIDEO_OPTS 
  107                        uint16_t (*
qmat16)[2][64],
 
  108                        const uint16_t *quant_matrix,
 
  109                        int bias, 
int qmin, 
int qmax, 
int intra)
 
  120         else                 qscale2 = 
qscale << 1;
 
  127             for (
i = 0; 
i < 64; 
i++) {
 
  128                 const int j = 
s->idsp.idct_permutation[
i];
 
  129                 int64_t den = (int64_t) qscale2 * quant_matrix[j];
 
  139             for (
i = 0; 
i < 64; 
i++) {
 
  140                 const int j = 
s->idsp.idct_permutation[
i];
 
  141                 int64_t den = 
ff_aanscales[
i] * (int64_t) qscale2 * quant_matrix[j];
 
  151             for (
i = 0; 
i < 64; 
i++) {
 
  152                 const int j = 
s->idsp.idct_permutation[
i];
 
  153                 int64_t den = (int64_t) qscale2 * quant_matrix[j];
 
  173         for (
i = intra; 
i < 64; 
i++) {
 
  185                "Warning, QMAT_SHIFT is larger than %d, overflows possible\n",
 
  192     if (
s->q_scale_type == 1 && 0) {
 
  194         int bestdiff=INT_MAX;
 
  202             if (
diff < bestdiff) {
 
  211         s->qscale = 
av_clip(
s->qscale, 
s->avctx->qmin, 
s->vbv_ignore_qmax ? 31 : 
s->avctx->qmax);
 
  224         for (
i = 0; 
i < 64; 
i++) {
 
  236     int8_t * 
const qscale_table = 
s->current_picture.qscale_table;
 
  239     for (
i = 0; 
i < 
s->mb_num; 
i++) {
 
  240         unsigned int lam = 
s->lambda_table[
s->mb_index2xy[
i]];
 
  242         qscale_table[
s->mb_index2xy[
i]] = 
av_clip(qp, 
s->avctx->qmin,
 
  250 #define COPY(a) dst->a= src->a 
  268    for (
int i = -16; 
i < 16; 
i++)
 
  287     s->input_picture_number  = 0;
 
  288     s->picture_in_gop_number = 0;
 
  296     if (CONFIG_H263_ENCODER)
 
  298     if (!
s->dct_quantize)
 
  302     s->fast_dct_quantize = 
s->dct_quantize;
 
  303     if (
s->avctx->trellis)
 
  342                "keyframe interval too large!, reducing it from %d to %d\n",
 
  357     s->rtp_mode           = !!
s->rtp_payload_size;
 
  361     if (
s->intra_dc_precision < 0) {
 
  362         s->intra_dc_precision += 8;
 
  363     } 
else if (
s->intra_dc_precision >= 8)
 
  364         s->intra_dc_precision -= 8;
 
  366     if (
s->intra_dc_precision < 0) {
 
  368                 "intra dc precision must be positive, note some applications use" 
  369                 " 0 and some 8 as base meaning 8bit, the value must not be smaller than that\n");
 
  382     if (
s->gop_size <= 1) {
 
  436                "Warning min_rate > 0 but min_rate != max_rate isn't recommended!\n");
 
  453                "impossible bitrate constraints, this will fail\n");
 
  463     if (!
s->fixed_qscale &&
 
  469         if (nbt <= INT_MAX) {
 
  482                "Warning vbv_delay will be set to 0xFFFF (=VBR) as the " 
  483                "specified vbv buffer is too large for the given bitrate!\n");
 
  495                "OBMC is only supported with simple mb decision\n");
 
  504     if (
s->max_b_frames                    &&
 
  511     if (
s->max_b_frames < 0) {
 
  513                "max b frames must be 0 or positive for mpegvideo based encoders\n");
 
  523                "Invalid pixel aspect ratio %i/%i, limit is 255/255 reducing\n",
 
  581                "QP RD is no longer compatible with MJPEG or AMV\n");
 
  585     if (
s->scenechange_threshold < 1000000000 &&
 
  588                "closed gop with scene change detection are not supported yet, " 
  589                "set threshold to 1000000000\n");
 
  597                    "low delay forcing is only available for mpeg2, " 
  598                    "set strict_std_compliance to 'unofficial' or lower in order to allow it\n");
 
  601         if (
s->max_b_frames != 0) {
 
  603                    "B-frames cannot be used with low delay\n");
 
  608     if (
s->q_scale_type == 1) {
 
  611                    "non linear quant only supports qmax <= 28 currently\n");
 
  629                "multi threaded encoding not supported by codec\n");
 
  635                "automatic thread number detection not supported by codec, " 
  642                "notice: b_frame_strategy only affects the first pass\n");
 
  643         s->b_frame_strategy = 0;
 
  657         s->inter_quant_bias = 0;
 
  659         s->intra_quant_bias = 0;
 
  674                "timebase %d/%d not supported by MPEG 4 standard, " 
  675                "the maximum admitted value for the timebase denominator " 
  686         avctx->
delay  = 
s->low_delay ? 0 : (
s->max_b_frames + 1);
 
  691         avctx->
delay  = 
s->low_delay ? 0 : (
s->max_b_frames + 1);
 
  694 #if CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER 
  708         if (!CONFIG_SPEEDHQ_ENCODER)
 
  716         if (!CONFIG_H261_ENCODER)
 
  720                    "The specified picture size of %dx%d is not valid for the " 
  721                    "H.261 codec.\nValid sizes are 176x144, 352x288\n",
 
  722                     s->width, 
s->height);
 
  731         if (!CONFIG_H263_ENCODER)
 
  734                              s->width, 
s->height) == 8) {
 
  736                    "The specified picture size of %dx%d is not valid for " 
  737                    "the H.263 codec.\nValid sizes are 128x96, 176x144, " 
  738                    "352x288, 704x576, and 1408x1152. " 
  739                    "Try H.263+.\n", 
s->width, 
s->height);
 
  751         s->modified_quant  = 
s->h263_aic;
 
  753         s->unrestricted_mv = 
s->obmc || 
s->loop_filter || 
s->umvplus;
 
  763         s->unrestricted_mv = 1;
 
  777         s->modified_quant  = 1;
 
  781         s->unrestricted_mv = 0;
 
  786         s->unrestricted_mv = 1;
 
  787         s->low_delay       = 
s->max_b_frames ? 0 : 1;
 
  788         avctx->
delay       = 
s->low_delay ? 0 : (
s->max_b_frames + 1);
 
  793         s->unrestricted_mv = 1;
 
  794         s->msmpeg4_version = 2;
 
  801         s->unrestricted_mv   = 1;
 
  802         s->msmpeg4_version   = 3;
 
  803         s->flipflop_rounding = 1;
 
  810         s->unrestricted_mv   = 1;
 
  811         s->msmpeg4_version   = 4;
 
  812         s->flipflop_rounding = 1;
 
  819         s->unrestricted_mv   = 1;
 
  820         s->msmpeg4_version   = 5;
 
  821         s->flipflop_rounding = 1;
 
  833     s->progressive_frame    =
 
  849     if (
s->msmpeg4_version) {
 
  866     if (
s->noise_reduction) {
 
  873     if ((CONFIG_H263P_ENCODER || CONFIG_RV20_ENCODER) && 
s->modified_quant)
 
  876     if (
s->slice_context_count > 1) {
 
  880             s->h263_slice_structured = 1;
 
  883     s->quant_precision = 5;
 
  886     ff_set_cmp(&
s->mecc, 
s->mecc.frame_skip_cmp, 
s->frame_skip_cmp);
 
  888     if (CONFIG_H261_ENCODER && 
s->out_format == 
FMT_H261) {
 
  890     } 
else if ((CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
 
  893     } 
else if (CONFIG_H263_ENCODER && 
s->out_format == 
FMT_H263) {
 
  900     for (
i = 0; 
i < 64; 
i++) {
 
  901         int j = 
s->idsp.idct_permutation[
i];
 
  914             s->chroma_intra_matrix[j] =
 
  938     if (
s->b_frame_strategy == 2) {
 
  939         for (
i = 0; 
i < 
s->max_b_frames + 2; 
i++) {
 
  941             if (!
s->tmp_frames[
i])
 
  945             s->tmp_frames[
i]->width  = 
s->width  >> 
s->brd_scale;
 
  946             s->tmp_frames[
i]->height = 
s->height >> 
s->brd_scale;
 
  973     if ((CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER) &&
 
  986     if(
s->q_chroma_intra_matrix   != 
s->q_intra_matrix  ) 
av_freep(&
s->q_chroma_intra_matrix);
 
  987     if(
s->q_chroma_intra_matrix16 != 
s->q_intra_matrix16) 
av_freep(&
s->q_chroma_intra_matrix16);
 
  988     s->q_chroma_intra_matrix=   
NULL;
 
  989     s->q_chroma_intra_matrix16= 
NULL;
 
 1006     for (y = 0; y < 16; y++) {
 
 1007         for (x = 0; x < 16; x++) {
 
 1022     h = 
s->height & ~15;
 
 1024     for (y = 0; y < 
h; y += 16) {
 
 1025         for (x = 0; x < 
w; x += 16) {
 
 1032             acc += sae + 500 < sad;
 
 1041                             s->chroma_x_shift, 
s->chroma_y_shift, 
s->out_format,
 
 1042                             s->mb_stride, 
s->mb_width, 
s->mb_height, 
s->b8_stride,
 
 1043                             &
s->linesize, &
s->uvlinesize);
 
 1050     int i, display_picture_number = 0, 
ret;
 
 1051     int encoding_delay = 
s->max_b_frames ? 
s->max_b_frames
 
 1052                                          : (
s->low_delay ? 0 : 1);
 
 1053     int flush_offset = 1;
 
 1058         display_picture_number = 
s->input_picture_number++;
 
 1062                 int64_t last = 
s->user_specified_pts;
 
 1066                            "Invalid pts (%"PRId64
") <= last (%"PRId64
")\n",
 
 1071                 if (!
s->low_delay && display_picture_number == 1)
 
 1072                     s->dts_delta = 
pts - last;
 
 1074             s->user_specified_pts = 
pts;
 
 1077                 s->user_specified_pts =
 
 1078                 pts = 
s->user_specified_pts + 1;
 
 1080                        "Warning: AVFrame.pts=? trying to guess (%"PRId64
")\n",
 
 1083                 pts = display_picture_number;
 
 1087         if (!pic_arg->
buf[0] ||
 
 1089             pic_arg->
linesize[1] != 
s->uvlinesize ||
 
 1092         if ((
s->width & 15) || (
s->height & 15))
 
 1100                 pic_arg->
linesize[1], 
s->linesize, 
s->uvlinesize);
 
 1106         pic = &
s->picture[
i];
 
 1123                 int h_chroma_shift, v_chroma_shift;
 
 1128                 for (
i = 0; 
i < 3; 
i++) {
 
 1130                     int dst_stride = 
i ? 
s->uvlinesize : 
s->linesize;
 
 1131                     int h_shift = 
i ? h_chroma_shift : 0;
 
 1132                     int v_shift = 
i ? v_chroma_shift : 0;
 
 1133                     int w = 
s->width  >> h_shift;
 
 1134                     int h = 
s->height >> v_shift;
 
 1136                     uint8_t *dst = pic->
f->
data[
i];
 
 1140                         && !
s->progressive_sequence
 
 1141                         && 
FFALIGN(
s->height, 32) - 
s->height > 16)
 
 1144                     if (!
s->avctx->rc_buffer_size)
 
 1147                     if (src_stride == dst_stride)
 
 1148                         memcpy(dst, 
src, src_stride * 
h);
 
 1151                         uint8_t *dst2 = dst;
 
 1153                             memcpy(dst2, 
src, 
w);
 
 1158                     if ((
s->width & 15) || (
s->height & (vpad-1))) {
 
 1159                         s->mpvencdsp.draw_edges(dst, dst_stride,
 
 1178         for (flush_offset = 0; flush_offset < encoding_delay + 1; flush_offset++)
 
 1179             if (
s->input_picture[flush_offset])
 
 1182         if (flush_offset <= 1)
 
 1185             encoding_delay = encoding_delay - flush_offset + 1;
 
 1190         s->input_picture[
i - flush_offset] = 
s->input_picture[
i];
 
 1192     s->input_picture[encoding_delay] = (
Picture*) pic;
 
 1201     int64_t score64 = 0;
 
 1203     for (plane = 0; plane < 3; plane++) {
 
 1205         const int bw = plane ? 1 : 2;
 
 1206         for (y = 0; y < 
s->mb_height * bw; y++) {
 
 1207             for (x = 0; x < 
s->mb_width * bw; x++) {
 
 1208                 int off = p->
shared ? 0 : 16;
 
 1209                 uint8_t *dptr = p->
f->
data[plane] + 8 * (x + y * 
stride) + off;
 
 1210                 uint8_t *rptr = 
ref->f->data[plane] + 8 * (x + y * 
stride);
 
 1211                 int v = 
s->mecc.frame_skip_cmp[1](
s, dptr, rptr, 
stride, 8);
 
 1213                 switch (
FFABS(
s->frame_skip_exp)) {
 
 1214                 case 0: score    =  
FFMAX(score, v);          
break;
 
 1215                 case 1: score   += 
FFABS(v);                  
break;
 
 1216                 case 2: score64 += v * (int64_t)v;                       
break;
 
 1217                 case 3: score64 += 
FFABS(v * (int64_t)v * v);            
break;
 
 1218                 case 4: score64 += (v * (int64_t)v) * (v * (int64_t)v);  
break;
 
 1227     if (
s->frame_skip_exp < 0)
 
 1228         score64 = pow(score64 / (
double)(
s->mb_width * 
s->mb_height),
 
 1229                       -1.0/
s->frame_skip_exp);
 
 1233     if (score64 < ((
s->frame_skip_factor * (int64_t) 
s->lambda) >> 8))
 
 1263     const int scale = 
s->brd_scale;
 
 1267     int64_t best_rd  = INT64_MAX;
 
 1268     int best_b_count = -1;
 
 1283         b_lambda = p_lambda;
 
 1287     for (
i = 0; 
i < 
s->max_b_frames + 2; 
i++) {
 
 1288         Picture pre_input, *pre_input_ptr = 
i ? 
s->input_picture[
i - 1] :
 
 1289                                                 s->next_picture_ptr;
 
 1292         if (pre_input_ptr && (!
i || 
s->input_picture[
i - 1])) {
 
 1293             pre_input = *pre_input_ptr;
 
 1302             s->mpvencdsp.shrink[
scale](
s->tmp_frames[
i]->data[0],
 
 1303                                        s->tmp_frames[
i]->linesize[0],
 
 1307             s->mpvencdsp.shrink[
scale](
s->tmp_frames[
i]->data[1],
 
 1308                                        s->tmp_frames[
i]->linesize[1],
 
 1312             s->mpvencdsp.shrink[
scale](
s->tmp_frames[
i]->data[2],
 
 1313                                        s->tmp_frames[
i]->linesize[2],
 
 1320     for (j = 0; j < 
s->max_b_frames + 1; j++) {
 
 1324         if (!
s->input_picture[j])
 
 1337         c->mb_decision  = 
s->avctx->mb_decision;
 
 1338         c->me_cmp       = 
s->avctx->me_cmp;
 
 1339         c->mb_cmp       = 
s->avctx->mb_cmp;
 
 1340         c->me_sub_cmp   = 
s->avctx->me_sub_cmp;
 
 1342         c->time_base    = 
s->avctx->time_base;
 
 1343         c->max_b_frames = 
s->max_b_frames;
 
 1361         for (
i = 0; 
i < 
s->max_b_frames + 1; 
i++) {
 
 1362             int is_p = 
i % (j + 1) == j || 
i == 
s->max_b_frames;
 
 1364             s->tmp_frames[
i + 1]->pict_type = is_p ?
 
 1366             s->tmp_frames[
i + 1]->quality   = is_p ? p_lambda : b_lambda;
 
 1385         rd += 
c->error[0] + 
c->error[1] + 
c->error[2];
 
 1403     return best_b_count;
 
 1411         s->reordered_input_picture[
i - 1] = 
s->reordered_input_picture[
i];
 
 1415     if (!
s->reordered_input_picture[0] && 
s->input_picture[0]) {
 
 1416         if (
s->frame_skip_threshold || 
s->frame_skip_factor) {
 
 1417             if (
s->picture_in_gop_number < 
s->gop_size &&
 
 1418                 s->next_picture_ptr &&
 
 1430             !
s->next_picture_ptr || 
s->intra_only) {
 
 1431             s->reordered_input_picture[0] = 
s->input_picture[0];
 
 1433             s->reordered_input_picture[0]->f->coded_picture_number =
 
 1434                 s->coded_picture_number++;
 
 1439                 for (
i = 0; 
i < 
s->max_b_frames + 1; 
i++) {
 
 1440                     int pict_num = 
s->input_picture[0]->f->display_picture_number + 
i;
 
 1442                     if (pict_num >= 
s->rc_context.num_entries)
 
 1444                     if (!
s->input_picture[
i]) {
 
 1449                     s->input_picture[
i]->f->pict_type =
 
 1450                         s->rc_context.entry[pict_num].new_pict_type;
 
 1454             if (
s->b_frame_strategy == 0) {
 
 1455                 b_frames = 
s->max_b_frames;
 
 1456                 while (b_frames && !
s->input_picture[b_frames])
 
 1458             } 
else if (
s->b_frame_strategy == 1) {
 
 1459                 for (
i = 1; 
i < 
s->max_b_frames + 1; 
i++) {
 
 1460                     if (
s->input_picture[
i] &&
 
 1461                         s->input_picture[
i]->b_frame_score == 0) {
 
 1462                         s->input_picture[
i]->b_frame_score =
 
 1464                                             s->input_picture[
i    ]->f->data[0],
 
 1465                                             s->input_picture[
i - 1]->f->data[0],
 
 1469                 for (
i = 0; 
i < 
s->max_b_frames + 1; 
i++) {
 
 1470                     if (!
s->input_picture[
i] ||
 
 1471                         s->input_picture[
i]->b_frame_score - 1 >
 
 1472                             s->mb_num / 
s->b_sensitivity)
 
 1476                 b_frames = 
FFMAX(0, 
i - 1);
 
 1479                 for (
i = 0; 
i < b_frames + 1; 
i++) {
 
 1480                     s->input_picture[
i]->b_frame_score = 0;
 
 1482             } 
else if (
s->b_frame_strategy == 2) {
 
 1490             for (
i = b_frames - 1; 
i >= 0; 
i--) {
 
 1491                 int type = 
s->input_picture[
i]->f->pict_type;
 
 1496                 b_frames == 
s->max_b_frames) {
 
 1498                        "warning, too many B-frames in a row\n");
 
 1501             if (
s->picture_in_gop_number + b_frames >= 
s->gop_size) {
 
 1503                     s->gop_size > 
s->picture_in_gop_number) {
 
 1504                     b_frames = 
s->gop_size - 
s->picture_in_gop_number - 1;
 
 1516             s->reordered_input_picture[0] = 
s->input_picture[b_frames];
 
 1519             s->reordered_input_picture[0]->f->coded_picture_number =
 
 1520                 s->coded_picture_number++;
 
 1521             for (
i = 0; 
i < b_frames; 
i++) {
 
 1522                 s->reordered_input_picture[
i + 1] = 
s->input_picture[
i];
 
 1523                 s->reordered_input_picture[
i + 1]->f->pict_type =
 
 1525                 s->reordered_input_picture[
i + 1]->f->coded_picture_number =
 
 1526                     s->coded_picture_number++;
 
 1533     if (
s->reordered_input_picture[0]) {
 
 1534         s->reordered_input_picture[0]->reference =
 
 1535            s->reordered_input_picture[0]->f->pict_type !=
 
 1541         if (
s->reordered_input_picture[0]->shared || 
s->avctx->rc_buffer_size) {
 
 1549             pic = &
s->picture[
i];
 
 1551             pic->
reference = 
s->reordered_input_picture[0]->reference;
 
 1562             s->reordered_input_picture[0]->shared = 0;
 
 1564             s->current_picture_ptr = pic;
 
 1567             s->current_picture_ptr = 
s->reordered_input_picture[0];
 
 1568             for (
i = 0; 
i < 4; 
i++) {
 
 1569                 if (
s->new_picture.f->data[
i])
 
 1575                                        s->current_picture_ptr)) < 0)
 
 1578         s->picture_number = 
s->new_picture.f->display_picture_number;
 
 1585     if (
s->unrestricted_mv &&
 
 1586         s->current_picture.reference &&
 
 1589         int hshift = 
desc->log2_chroma_w;
 
 1590         int vshift = 
desc->log2_chroma_h;
 
 1591         s->mpvencdsp.draw_edges(
s->current_picture.f->data[0],
 
 1592                                 s->current_picture.f->linesize[0],
 
 1593                                 s->h_edge_pos, 
s->v_edge_pos,
 
 1596         s->mpvencdsp.draw_edges(
s->current_picture.f->data[1],
 
 1597                                 s->current_picture.f->linesize[1],
 
 1598                                 s->h_edge_pos >> hshift,
 
 1599                                 s->v_edge_pos >> vshift,
 
 1603         s->mpvencdsp.draw_edges(
s->current_picture.f->data[2],
 
 1604                                 s->current_picture.f->linesize[2],
 
 1605                                 s->h_edge_pos >> hshift,
 
 1606                                 s->v_edge_pos >> vshift,
 
 1614     s->last_pict_type                 = 
s->pict_type;
 
 1615     s->last_lambda_for [
s->pict_type] = 
s->current_picture_ptr->f->quality;
 
 1617         s->last_non_b_pict_type = 
s->pict_type;
 
 1624     for (intra = 0; intra < 2; intra++) {
 
 1625         if (
s->dct_count[intra] > (1 << 16)) {
 
 1626             for (
i = 0; 
i < 64; 
i++) {
 
 1627                 s->dct_error_sum[intra][
i] >>= 1;
 
 1629             s->dct_count[intra] >>= 1;
 
 1632         for (
i = 0; 
i < 64; 
i++) {
 
 1633             s->dct_offset[intra][
i] = (
s->noise_reduction *
 
 1634                                        s->dct_count[intra] +
 
 1635                                        s->dct_error_sum[intra][
i] / 2) /
 
 1636                                       (
s->dct_error_sum[intra][
i] + 1);
 
 1647         s->last_picture_ptr != 
s->next_picture_ptr &&
 
 1648         s->last_picture_ptr->f->buf[0]) {
 
 1652     s->current_picture_ptr->f->pict_type = 
s->pict_type;
 
 1657                                    s->current_picture_ptr)) < 0)
 
 1661         s->last_picture_ptr = 
s->next_picture_ptr;
 
 1662         s->next_picture_ptr = 
s->current_picture_ptr;
 
 1665     if (
s->last_picture_ptr) {
 
 1667         if (
s->last_picture_ptr->f->buf[0] &&
 
 1669                                        s->last_picture_ptr)) < 0)
 
 1672     if (
s->next_picture_ptr) {
 
 1674         if (
s->next_picture_ptr->f->buf[0] &&
 
 1676                                        s->next_picture_ptr)) < 0)
 
 1682         for (
i = 0; 
i < 4; 
i++) {
 
 1684                 s->current_picture.f->data[
i] +=
 
 1685                     s->current_picture.f->linesize[
i];
 
 1687             s->current_picture.f->linesize[
i] *= 2;
 
 1688             s->last_picture.f->linesize[
i]    *= 2;
 
 1689             s->next_picture.f->linesize[
i]    *= 2;
 
 1694         s->dct_unquantize_intra = 
s->dct_unquantize_mpeg2_intra;
 
 1695         s->dct_unquantize_inter = 
s->dct_unquantize_mpeg2_inter;
 
 1697         s->dct_unquantize_intra = 
s->dct_unquantize_h263_intra;
 
 1698         s->dct_unquantize_inter = 
s->dct_unquantize_h263_inter;
 
 1700         s->dct_unquantize_intra = 
s->dct_unquantize_mpeg1_intra;
 
 1701         s->dct_unquantize_inter = 
s->dct_unquantize_mpeg1_inter;
 
 1704     if (
s->dct_error_sum) {
 
 1713                           const AVFrame *pic_arg, 
int *got_packet)
 
 1716     int i, stuffing_count, 
ret;
 
 1717     int context_count = 
s->slice_context_count;
 
 1719     s->vbv_ignore_qmax = 0;
 
 1721     s->picture_in_gop_number++;
 
 1731     if (
s->new_picture.f->data[0]) {
 
 1732         int growing_buffer = context_count == 1 && !
pkt->
data && !
s->data_partitioning;
 
 1741                                  s->mb_width*
s->mb_height*12);
 
 1742             s->prev_mb_info = 
s->last_mb_info = 
s->mb_info_size = 0;
 
 1745         for (
i = 0; 
i < context_count; 
i++) {
 
 1746             int start_y = 
s->thread_context[
i]->start_mb_y;
 
 1748             int h       = 
s->mb_height;
 
 1749             uint8_t *start = 
pkt->
data + (size_t)(((int64_t) 
pkt->
size) * start_y / 
h);
 
 1750             uint8_t *end   = 
pkt->
data + (size_t)(((int64_t) 
pkt->
size) *   end_y / 
h);
 
 1755         s->pict_type = 
s->new_picture.f->pict_type;
 
 1762         if (growing_buffer) {
 
 1772        if ((CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER) && 
s->out_format == 
FMT_MJPEG)
 
 1782                 s->lambda < 
s->lmax) {
 
 1783                 s->next_lambda = 
FFMAX(
s->lambda + min_step, 
s->lambda *
 
 1784                                        (
s->qscale + 1) / 
s->qscale);
 
 1785                 if (
s->adaptive_quant) {
 
 1787                     for (
i = 0; 
i < 
s->mb_height * 
s->mb_stride; 
i++)
 
 1788                         s->lambda_table[
i] =
 
 1789                             FFMAX(
s->lambda_table[
i] + min_step,
 
 1790                                   s->lambda_table[
i] * (
s->qscale + 1) /
 
 1796                     if (
s->flipflop_rounding          ||
 
 1799                         s->no_rounding ^= 1;
 
 1802                     s->time_base       = 
s->last_time_base;
 
 1803                     s->last_non_b_time = 
s->time - 
s->pp_time;
 
 1805                 for (
i = 0; 
i < context_count; 
i++) {
 
 1809                 s->vbv_ignore_qmax = 1;
 
 1820         for (
i = 0; 
i < 4; 
i++) {
 
 1821             s->current_picture_ptr->encoding_error[
i] = 
s->current_picture.encoding_error[
i];
 
 1822             avctx->
error[
i] += 
s->current_picture_ptr->encoding_error[
i];
 
 1825                                        s->current_picture_ptr->encoding_error,
 
 1831                                              s->misc_bits + 
s->i_tex_bits +
 
 1837         s->stuffing_bits = 8*stuffing_count;
 
 1838         if (stuffing_count) {
 
 1844             switch (
s->codec_id) {
 
 1847                 while (stuffing_count--) {
 
 1854                 stuffing_count -= 4;
 
 1855                 while (stuffing_count--) {
 
 1861                 s->stuffing_bits = 0;
 
 1879             int    minbits = 
s->frame_bits - 8 *
 
 1880                              (
s->vbv_delay_ptr - 
s->pb.buf - 1);
 
 1881             double bits    = 
s->rc_context.buffer_index + minbits - inbits;
 
 1885                        "Internal error, negative bits\n");
 
 1897             s->vbv_delay_ptr[0] &= 0xF8;
 
 1900             s->vbv_delay_ptr[2] &= 0x07;
 
 1909                                           (uint8_t*)props, props_size);
 
 1915         s->total_bits     += 
s->frame_bits;
 
 1917         pkt->
pts = 
s->current_picture.f->pts;
 
 1919             if (!
s->current_picture.f->coded_picture_number)
 
 1926         if (
s->current_picture.f->key_frame)
 
 1936         if (!
s->picture[
i].reference)
 
 1948                                                 int n, 
int threshold)
 
 1950     static const char tab[64] = {
 
 1951         3, 2, 2, 1, 1, 1, 1, 1,
 
 1952         1, 1, 1, 1, 1, 1, 1, 1,
 
 1953         1, 1, 1, 1, 1, 1, 1, 1,
 
 1954         0, 0, 0, 0, 0, 0, 0, 0,
 
 1955         0, 0, 0, 0, 0, 0, 0, 0,
 
 1956         0, 0, 0, 0, 0, 0, 0, 0,
 
 1957         0, 0, 0, 0, 0, 0, 0, 0,
 
 1958         0, 0, 0, 0, 0, 0, 0, 0
 
 1963     int16_t *
block = 
s->block[n];
 
 1964     const int last_index = 
s->block_last_index[n];
 
 1967     if (threshold < 0) {
 
 1969         threshold = -threshold;
 
 1974     if (last_index <= skip_dc - 1)
 
 1977     for (
i = 0; 
i <= last_index; 
i++) {
 
 1978         const int j = 
s->intra_scantable.permutated[
i];
 
 1981             if (skip_dc && 
i == 0)
 
 1985         } 
else if (
level > 1) {
 
 1991     if (score >= threshold)
 
 1993     for (
i = skip_dc; 
i <= last_index; 
i++) {
 
 1994         const int j = 
s->intra_scantable.permutated[
i];
 
 1998         s->block_last_index[n] = 0;
 
 2000         s->block_last_index[n] = -1;
 
 2007     const int maxlevel = 
s->max_qcoeff;
 
 2008     const int minlevel = 
s->min_qcoeff;
 
 2016     for (; 
i <= last_index; 
i++) {
 
 2017         const int j = 
s->intra_scantable.permutated[
i];
 
 2020         if (
level > maxlevel) {
 
 2023         } 
else if (
level < minlevel) {
 
 2033                "warning, clipping %d dct coefficients to %d..%d\n",
 
 2041     for (y = 0; y < 8; y++) {
 
 2042         for (x = 0; x < 8; x++) {
 
 2048             for (y2 = 
FFMAX(y - 1, 0); y2 < 
FFMIN(8, y + 2); y2++) {
 
 2049                 for (x2= 
FFMAX(x - 1, 0); x2 < 
FFMIN(8, x + 2); x2++) {
 
 2050                     int v = ptr[x2 + y2 * 
stride];
 
 2062                                                 int motion_x, 
int motion_y,
 
 2063                                                 int mb_block_height,
 
 2068     int16_t orig[12][64];
 
 2069     const int mb_x = 
s->mb_x;
 
 2070     const int mb_y = 
s->mb_y;
 
 2074     int uv_dct_offset = 
s->uvlinesize * 8;
 
 2075     uint8_t *ptr_y, *ptr_cb, *ptr_cr;
 
 2076     ptrdiff_t wrap_y, wrap_c;
 
 2078     for (
i = 0; 
i < mb_block_count; 
i++)
 
 2079         skip_dct[
i] = 
s->skipdct;
 
 2081     if (
s->adaptive_quant) {
 
 2082         const int last_qp = 
s->qscale;
 
 2083         const int mb_xy = 
mb_x + 
mb_y * 
s->mb_stride;
 
 2085         s->lambda = 
s->lambda_table[mb_xy];
 
 2089             s->qscale = 
s->current_picture_ptr->qscale_table[mb_xy];
 
 2090             s->dquant = 
s->qscale - last_qp;
 
 2111     wrap_y = 
s->linesize;
 
 2112     wrap_c = 
s->uvlinesize;
 
 2113     ptr_y  = 
s->new_picture.f->data[0] +
 
 2115     ptr_cb = 
s->new_picture.f->data[1] +
 
 2116              (
mb_y * mb_block_height * wrap_c) + 
mb_x * mb_block_width;
 
 2117     ptr_cr = 
s->new_picture.f->data[2] +
 
 2118              (
mb_y * mb_block_height * wrap_c) + 
mb_x * mb_block_width;
 
 2121         uint8_t *ebuf = 
s->sc.edge_emu_buffer + 38 * wrap_y;
 
 2122         int cw = (
s->width  + 
s->chroma_x_shift) >> 
s->chroma_x_shift;
 
 2123         int ch = (
s->height + 
s->chroma_y_shift) >> 
s->chroma_y_shift;
 
 2124         s->vdsp.emulated_edge_mc(ebuf, ptr_y,
 
 2127                                  s->width, 
s->height);
 
 2129         s->vdsp.emulated_edge_mc(ebuf + 16 * wrap_y, ptr_cb,
 
 2131                                  mb_block_width, mb_block_height,
 
 2132                                  mb_x * mb_block_width, 
mb_y * mb_block_height,
 
 2134         ptr_cb = ebuf + 16 * wrap_y;
 
 2135         s->vdsp.emulated_edge_mc(ebuf + 16 * wrap_y + 16, ptr_cr,
 
 2137                                  mb_block_width, mb_block_height,
 
 2138                                  mb_x * mb_block_width, 
mb_y * mb_block_height,
 
 2140         ptr_cr = ebuf + 16 * wrap_y + 16;
 
 2145             int progressive_score, interlaced_score;
 
 2147             s->interlaced_dct = 0;
 
 2148             progressive_score = 
s->mecc.ildct_cmp[4](
s, ptr_y, 
NULL, wrap_y, 8) +
 
 2149                                 s->mecc.ildct_cmp[4](
s, ptr_y + wrap_y * 8,
 
 2150                                                      NULL, wrap_y, 8) - 400;
 
 2152             if (progressive_score > 0) {
 
 2153                 interlaced_score = 
s->mecc.ildct_cmp[4](
s, ptr_y,
 
 2154                                                         NULL, wrap_y * 2, 8) +
 
 2155                                    s->mecc.ildct_cmp[4](
s, ptr_y + wrap_y,
 
 2156                                                         NULL, wrap_y * 2, 8);
 
 2157                 if (progressive_score > interlaced_score) {
 
 2158                     s->interlaced_dct = 1;
 
 2161                     uv_dct_offset = wrap_c;
 
 2170         s->pdsp.get_pixels(
s->block[0], ptr_y,                  wrap_y);
 
 2171         s->pdsp.get_pixels(
s->block[1], ptr_y + 8,              wrap_y);
 
 2172         s->pdsp.get_pixels(
s->block[2], ptr_y + 
dct_offset,     wrap_y);
 
 2173         s->pdsp.get_pixels(
s->block[3], ptr_y + 
dct_offset + 8, wrap_y);
 
 2179             s->pdsp.get_pixels(
s->block[4], ptr_cb, wrap_c);
 
 2180             s->pdsp.get_pixels(
s->block[5], ptr_cr, wrap_c);
 
 2181             if (!
s->chroma_y_shift && 
s->chroma_x_shift) { 
 
 2182                 s->pdsp.get_pixels(
s->block[6], ptr_cb + uv_dct_offset, wrap_c);
 
 2183                 s->pdsp.get_pixels(
s->block[7], ptr_cr + uv_dct_offset, wrap_c);
 
 2184             } 
else if (!
s->chroma_y_shift && !
s->chroma_x_shift) { 
 
 2185                 s->pdsp.get_pixels(
s->block[ 6], ptr_cb + 8, wrap_c);
 
 2186                 s->pdsp.get_pixels(
s->block[ 7], ptr_cr + 8, wrap_c);
 
 2187                 s->pdsp.get_pixels(
s->block[ 8], ptr_cb + uv_dct_offset, wrap_c);
 
 2188                 s->pdsp.get_pixels(
s->block[ 9], ptr_cr + uv_dct_offset, wrap_c);
 
 2189                 s->pdsp.get_pixels(
s->block[10], ptr_cb + uv_dct_offset + 8, wrap_c);
 
 2190                 s->pdsp.get_pixels(
s->block[11], ptr_cr + uv_dct_offset + 8, wrap_c);
 
 2196         uint8_t *dest_y, *dest_cb, *dest_cr;
 
 2198         dest_y  = 
s->dest[0];
 
 2199         dest_cb = 
s->dest[1];
 
 2200         dest_cr = 
s->dest[2];
 
 2203             op_pix  = 
s->hdsp.put_pixels_tab;
 
 2204             op_qpix = 
s->qdsp.put_qpel_pixels_tab;
 
 2206             op_pix  = 
s->hdsp.put_no_rnd_pixels_tab;
 
 2207             op_qpix = 
s->qdsp.put_no_rnd_qpel_pixels_tab;
 
 2212                           s->last_picture.f->data,
 
 2214             op_pix  = 
s->hdsp.avg_pixels_tab;
 
 2215             op_qpix = 
s->qdsp.avg_qpel_pixels_tab;
 
 2219                           s->next_picture.f->data,
 
 2224             int progressive_score, interlaced_score;
 
 2226             s->interlaced_dct = 0;
 
 2227             progressive_score = 
s->mecc.ildct_cmp[0](
s, dest_y, ptr_y, wrap_y, 8) +
 
 2228                                 s->mecc.ildct_cmp[0](
s, dest_y + wrap_y * 8,
 
 2233                 progressive_score -= 400;
 
 2235             if (progressive_score > 0) {
 
 2236                 interlaced_score = 
s->mecc.ildct_cmp[0](
s, dest_y, ptr_y,
 
 2238                                    s->mecc.ildct_cmp[0](
s, dest_y + wrap_y,
 
 2242                 if (progressive_score > interlaced_score) {
 
 2243                     s->interlaced_dct = 1;
 
 2246                     uv_dct_offset = wrap_c;
 
 2254         s->pdsp.diff_pixels(
s->block[0], ptr_y, dest_y, wrap_y);
 
 2255         s->pdsp.diff_pixels(
s->block[1], ptr_y + 8, dest_y + 8, wrap_y);
 
 2258         s->pdsp.diff_pixels(
s->block[3], ptr_y + 
dct_offset + 8,
 
 2265             s->pdsp.diff_pixels(
s->block[4], ptr_cb, dest_cb, wrap_c);
 
 2266             s->pdsp.diff_pixels(
s->block[5], ptr_cr, dest_cr, wrap_c);
 
 2267             if (!
s->chroma_y_shift) { 
 
 2268                 s->pdsp.diff_pixels(
s->block[6], ptr_cb + uv_dct_offset,
 
 2269                                     dest_cb + uv_dct_offset, wrap_c);
 
 2270                 s->pdsp.diff_pixels(
s->block[7], ptr_cr + uv_dct_offset,
 
 2271                                     dest_cr + uv_dct_offset, wrap_c);
 
 2275         if (
s->current_picture.mc_mb_var[
s->mb_stride * 
mb_y + 
mb_x] <
 
 2276                 2 * 
s->qscale * 
s->qscale) {
 
 2278             if (
s->mecc.sad[1](
NULL, ptr_y, dest_y, wrap_y, 8) < 20 * 
s->qscale)
 
 2280             if (
s->mecc.sad[1](
NULL, ptr_y + 8, dest_y + 8, wrap_y, 8) < 20 * 
s->qscale)
 
 2283                                wrap_y, 8) < 20 * 
s->qscale)
 
 2286                                wrap_y, 8) < 20 * 
s->qscale)
 
 2288             if (
s->mecc.sad[1](
NULL, ptr_cb, dest_cb, wrap_c, 8) < 20 * 
s->qscale)
 
 2290             if (
s->mecc.sad[1](
NULL, ptr_cr, dest_cr, wrap_c, 8) < 20 * 
s->qscale)
 
 2292             if (!
s->chroma_y_shift) { 
 
 2293                 if (
s->mecc.sad[1](
NULL, ptr_cb + uv_dct_offset,
 
 2294                                    dest_cb + uv_dct_offset,
 
 2295                                    wrap_c, 8) < 20 * 
s->qscale)
 
 2297                 if (
s->mecc.sad[1](
NULL, ptr_cr + uv_dct_offset,
 
 2298                                    dest_cr + uv_dct_offset,
 
 2299                                    wrap_c, 8) < 20 * 
s->qscale)
 
 2305     if (
s->quantizer_noise_shaping) {
 
 2318         if (!
s->chroma_y_shift) { 
 
 2326         memcpy(orig[0], 
s->block[0], 
sizeof(int16_t) * 64 * mb_block_count);
 
 2332         for (
i = 0; 
i < mb_block_count; 
i++) {
 
 2335                 s->block_last_index[
i] = 
s->dct_quantize(
s, 
s->block[
i], 
i, 
s->qscale, &
overflow);
 
 2344                 s->block_last_index[
i] = -1;
 
 2346         if (
s->quantizer_noise_shaping) {
 
 2347             for (
i = 0; 
i < mb_block_count; 
i++) {
 
 2349                     s->block_last_index[
i] =
 
 2351                                             orig[
i], 
i, 
s->qscale);
 
 2356         if (
s->luma_elim_threshold && !
s->mb_intra)
 
 2357             for (
i = 0; 
i < 4; 
i++)
 
 2359         if (
s->chroma_elim_threshold && !
s->mb_intra)
 
 2360             for (
i = 4; 
i < mb_block_count; 
i++)
 
 2364             for (
i = 0; 
i < mb_block_count; 
i++) {
 
 2365                 if (
s->block_last_index[
i] == -1)
 
 2366                     s->coded_score[
i] = INT_MAX / 256;
 
 2372         s->block_last_index[4] =
 
 2373         s->block_last_index[5] = 0;
 
 2375         s->block[5][0] = (1024 + 
s->c_dc_scale / 2) / 
s->c_dc_scale;
 
 2376         if (!
s->chroma_y_shift) { 
 
 2377             for (
i=6; 
i<12; 
i++) {
 
 2378                 s->block_last_index[
i] = 0;
 
 2379                 s->block[
i][0] = 
s->block[4][0];
 
 2386         for (
i = 0; 
i < mb_block_count; 
i++) {
 
 2388             if (
s->block_last_index[
i] > 0) {
 
 2389                 for (j = 63; j > 0; j--) {
 
 2390                     if (
s->block[
i][
s->intra_scantable.permutated[j]])
 
 2393                 s->block_last_index[
i] = j;
 
 2399     switch(
s->codec_id){ 
 
 2402         if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
 
 2406         if (CONFIG_MPEG4_ENCODER)
 
 2416         if (CONFIG_WMV2_ENCODER)
 
 2420         if (CONFIG_H261_ENCODER)
 
 2428         if (CONFIG_H263_ENCODER)
 
 2431 #if CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER 
 2438         if (CONFIG_SPEEDHQ_ENCODER)
 
 2456     memcpy(
d->last_mv, 
s->last_mv, 2*2*2*
sizeof(
int)); 
 
 2459     d->mb_skip_run= 
s->mb_skip_run;
 
 2461         d->last_dc[
i] = 
s->last_dc[
i];
 
 2464     d->mv_bits= 
s->mv_bits;
 
 2465     d->i_tex_bits= 
s->i_tex_bits;
 
 2466     d->p_tex_bits= 
s->p_tex_bits;
 
 2467     d->i_count= 
s->i_count;
 
 2468     d->f_count= 
s->f_count;
 
 2469     d->b_count= 
s->b_count;
 
 2470     d->skip_count= 
s->skip_count;
 
 2471     d->misc_bits= 
s->misc_bits;
 
 2475     d->qscale= 
s->qscale;
 
 2476     d->dquant= 
s->dquant;
 
 2478     d->esc3_level_length= 
s->esc3_level_length;
 
 2484     memcpy(
d->mv, 
s->mv, 2*4*2*
sizeof(
int));
 
 2485     memcpy(
d->last_mv, 
s->last_mv, 2*2*2*
sizeof(
int)); 
 
 2488     d->mb_skip_run= 
s->mb_skip_run;
 
 2490         d->last_dc[
i] = 
s->last_dc[
i];
 
 2493     d->mv_bits= 
s->mv_bits;
 
 2494     d->i_tex_bits= 
s->i_tex_bits;
 
 2495     d->p_tex_bits= 
s->p_tex_bits;
 
 2496     d->i_count= 
s->i_count;
 
 2497     d->f_count= 
s->f_count;
 
 2498     d->b_count= 
s->b_count;
 
 2499     d->skip_count= 
s->skip_count;
 
 2500     d->misc_bits= 
s->misc_bits;
 
 2502     d->mb_intra= 
s->mb_intra;
 
 2503     d->mb_skipped= 
s->mb_skipped;
 
 2504     d->mv_type= 
s->mv_type;
 
 2505     d->mv_dir= 
s->mv_dir;
 
 2507     if(
s->data_partitioning){
 
 2509         d->tex_pb= 
s->tex_pb;
 
 2513         d->block_last_index[
i]= 
s->block_last_index[
i];
 
 2514     d->interlaced_dct= 
s->interlaced_dct;
 
 2515     d->qscale= 
s->qscale;
 
 2517     d->esc3_level_length= 
s->esc3_level_length;
 
 2522                            int *dmin, 
int *next_block, 
int motion_x, 
int motion_y)
 
 2525     uint8_t *dest_backup[3];
 
 2529     s->block= 
s->blocks[*next_block];
 
 2530     s->pb= 
pb[*next_block];
 
 2531     if(
s->data_partitioning){
 
 2532         s->pb2   = 
pb2   [*next_block];
 
 2533         s->tex_pb= 
tex_pb[*next_block];
 
 2537         memcpy(dest_backup, 
s->dest, 
sizeof(
s->dest));
 
 2538         s->dest[0] = 
s->sc.rd_scratchpad;
 
 2539         s->dest[1] = 
s->sc.rd_scratchpad + 16*
s->linesize;
 
 2540         s->dest[2] = 
s->sc.rd_scratchpad + 16*
s->linesize + 8;
 
 2547     if(
s->data_partitioning){
 
 2555         score *= 
s->lambda2;
 
 2560         memcpy(
s->dest, dest_backup, 
sizeof(
s->dest));
 
 2578     else if(
w==8 && 
h==8)
 
 2596     if(
s->mb_x*16 + 16 > 
s->width ) 
w= 
s->width - 
s->mb_x*16;
 
 2597     if(
s->mb_y*16 + 16 > 
s->height) 
h= 
s->height- 
s->mb_y*16;
 
 2601         return s->mecc.nsse[0](
s, 
s->new_picture.f->data[0] + 
s->mb_x * 16 + 
s->mb_y * 
s->linesize   * 16, 
s->dest[0], 
s->linesize,   16) +
 
 2602                s->mecc.nsse[1](
s, 
s->new_picture.f->data[1] + 
s->mb_x *  8 + 
s->mb_y * 
s->uvlinesize *  8, 
s->dest[1], 
s->uvlinesize,  8) +
 
 2603                s->mecc.nsse[1](
s, 
s->new_picture.f->data[2] + 
s->mb_x *  8 + 
s->mb_y * 
s->uvlinesize *  8, 
s->dest[2], 
s->uvlinesize,  8);
 
 2605         return s->mecc.sse[0](
NULL, 
s->new_picture.f->data[0] + 
s->mb_x * 16 + 
s->mb_y * 
s->linesize   * 16, 
s->dest[0], 
s->linesize,   16) +
 
 2606                s->mecc.sse[1](
NULL, 
s->new_picture.f->data[1] + 
s->mb_x *  8 + 
s->mb_y * 
s->uvlinesize *  8, 
s->dest[1], 
s->uvlinesize,  8) +
 
 2607                s->mecc.sse[1](
NULL, 
s->new_picture.f->data[2] + 
s->mb_x *  8 + 
s->mb_y * 
s->uvlinesize *  8, 
s->dest[2], 
s->uvlinesize,  8);
 
 2610         return  sse(
s, 
s->new_picture.f->data[0] + 
s->mb_x*16 + 
s->mb_y*
s->linesize*16, 
s->dest[0], 
w, 
h, 
s->linesize)
 
 2611                +
sse(
s, 
s->new_picture.f->data[1] + 
s->mb_x*8  + 
s->mb_y*
s->uvlinesize*8,
s->dest[1], 
w>>1, 
h>>1, 
s->uvlinesize)
 
 2612                +
sse(
s, 
s->new_picture.f->data[2] + 
s->mb_x*8  + 
s->mb_y*
s->uvlinesize*8,
s->dest[2], 
w>>1, 
h>>1, 
s->uvlinesize);
 
 2620     s->me.dia_size= 
s->avctx->pre_dia_size;
 
 2621     s->first_slice_line=1;
 
 2622     for(
s->mb_y= 
s->end_mb_y-1; 
s->mb_y >= 
s->start_mb_y; 
s->mb_y--) {
 
 2623         for(
s->mb_x=
s->mb_width-1; 
s->mb_x >=0 ;
s->mb_x--) {
 
 2626         s->first_slice_line=0;
 
 2637     s->me.dia_size= 
s->avctx->dia_size;
 
 2638     s->first_slice_line=1;
 
 2639     for(
s->mb_y= 
s->start_mb_y; 
s->mb_y < 
s->end_mb_y; 
s->mb_y++) {
 
 2642         for(
s->mb_x=0; 
s->mb_x < 
s->mb_width; 
s->mb_x++) {
 
 2643             s->block_index[0]+=2;
 
 2644             s->block_index[1]+=2;
 
 2645             s->block_index[2]+=2;
 
 2646             s->block_index[3]+=2;
 
 2654         s->first_slice_line=0;
 
 2667             uint8_t *pix = 
s->new_picture.f->data[0] + (yy * 
s->linesize) + xx;
 
 2669             int sum = 
s->mpvencdsp.pix_sum(pix, 
s->linesize);
 
 2671             varc = (
s->mpvencdsp.pix_norm1(pix, 
s->linesize) -
 
 2672                     (((unsigned) sum * sum) >> 8) + 500 + 128) >> 8;
 
 2674             s->current_picture.mb_var [
s->mb_stride * 
mb_y + 
mb_x] = varc;
 
 2675             s->current_picture.mb_mean[
s->mb_stride * 
mb_y + 
mb_x] = (sum+128)>>8;
 
 2676             s->me.mb_var_sum_temp    += varc;
 
 2684         if(
s->partitioned_frame){
 
 2689     } 
else if ((CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER) &&
 
 2692     } 
else if (CONFIG_SPEEDHQ_ENCODER && 
s->out_format == 
FMT_SPEEDHQ) {
 
 2704     uint8_t *ptr = 
s->mb_info_ptr + 
s->mb_info_size - 12;
 
 2706     int mba  = 
s->mb_x + 
s->mb_width * (
s->mb_y % 
s->gob_index);
 
 2707     int gobn = 
s->mb_y / 
s->gob_index;
 
 2709     if (CONFIG_H263_ENCODER)
 
 2711     bytestream_put_le32(&ptr, 
offset);
 
 2712     bytestream_put_byte(&ptr, 
s->qscale);
 
 2713     bytestream_put_byte(&ptr, gobn);
 
 2714     bytestream_put_le16(&ptr, mba);
 
 2715     bytestream_put_byte(&ptr, pred_x); 
 
 2716     bytestream_put_byte(&ptr, pred_y); 
 
 2718     bytestream_put_byte(&ptr, 0); 
 
 2719     bytestream_put_byte(&ptr, 0); 
 
 2727         s->mb_info_size += 12;
 
 2728         s->prev_mb_info = 
s->last_mb_info;
 
 2740     if (!
s->mb_info_size)
 
 2741         s->mb_info_size += 12;
 
 2748         && 
s->slice_context_count == 1
 
 2749         && 
s->pb.buf == 
s->avctx->internal->byte_buffer) {
 
 2750         int lastgob_pos = 
s->ptr_lastgob - 
s->pb.buf;
 
 2751         int vbv_pos     = 
s->vbv_delay_ptr - 
s->pb.buf;
 
 2753         uint8_t *new_buffer = 
NULL;
 
 2754         int new_buffer_size = 0;
 
 2756         if ((
s->avctx->internal->byte_buffer_size + size_increase) >= INT_MAX/8) {
 
 2764                               s->avctx->internal->byte_buffer_size + size_increase);
 
 2768         memcpy(new_buffer, 
s->avctx->internal->byte_buffer, 
s->avctx->internal->byte_buffer_size);
 
 2769         av_free(
s->avctx->internal->byte_buffer);
 
 2770         s->avctx->internal->byte_buffer      = new_buffer;
 
 2771         s->avctx->internal->byte_buffer_size = new_buffer_size;
 
 2773         s->ptr_lastgob   = 
s->pb.buf + lastgob_pos;
 
 2774         s->vbv_delay_ptr = 
s->pb.buf + vbv_pos;
 
 2784     int chr_h= 16>>
s->chroma_y_shift;
 
 2811         s->last_dc[
i] = 128 << 
s->intra_dc_precision;
 
 2813         s->current_picture.encoding_error[
i] = 0;
 
 2816         s->last_dc[0] = 128*8/13;
 
 2817         s->last_dc[1] = 128*8/14;
 
 2818         s->last_dc[2] = 128*8/14;
 
 2821     memset(
s->last_mv, 0, 
sizeof(
s->last_mv));
 
 2825     switch(
s->codec_id){
 
 2829         if (CONFIG_H263_ENCODER)
 
 2833         if(CONFIG_MPEG4_ENCODER && 
s->partitioned_frame)
 
 2840     s->first_slice_line = 1;
 
 2841     s->ptr_lastgob = 
s->pb.buf;
 
 2842     for (mb_y_order = 
s->start_mb_y; mb_y_order < s->
end_mb_y; mb_y_order++) {
 
 2846             if (first_in_slice && mb_y_order != 
s->start_mb_y)
 
 2848             s->last_dc[0] = 
s->last_dc[1] = 
s->last_dc[2] = 1024 << 
s->intra_dc_precision;
 
 2864             int size_increase =  
s->avctx->internal->byte_buffer_size/4
 
 2872             if(
s->data_partitioning){
 
 2886                 xy= 
s->mb_y*
s->mb_stride + 
s->mb_x;
 
 2892                 int current_packet_size, is_gob_start;
 
 2895                                       - (
s->ptr_lastgob - 
s->pb.buf);
 
 2897                 is_gob_start = 
s->rtp_payload_size &&
 
 2898                                current_packet_size >= 
s->rtp_payload_size &&
 
 2901                 if(
s->start_mb_y == 
mb_y && 
mb_y > 0 && 
mb_x==0) is_gob_start=1;
 
 2903                 switch(
s->codec_id){
 
 2906                     if(!
s->h263_slice_structured)
 
 2907                         if(
s->mb_x || 
s->mb_y%
s->gob_index) is_gob_start=0;
 
 2910                     if(
s->mb_x==0 && 
s->mb_y!=0) is_gob_start=1;
 
 2912                     if(
s->mb_skip_run) is_gob_start=0;
 
 2915                     if(
s->mb_x==0 && 
s->mb_y!=0) is_gob_start=1;
 
 2931                     if (
s->error_rate && 
s->resync_mb_x + 
s->resync_mb_y > 0) {
 
 2933                         int d = 100 / 
s->error_rate;
 
 2935                             current_packet_size=0;
 
 2936                             s->pb.buf_ptr= 
s->ptr_lastgob;
 
 2943                     switch(
s->codec_id){
 
 2945                         if (CONFIG_MPEG4_ENCODER) {
 
 2952                         if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER) {
 
 2959                         if (CONFIG_H263_ENCODER)
 
 2966                         s->misc_bits+= 
bits - 
s->last_bits;
 
 2970                     s->ptr_lastgob += current_packet_size;
 
 2971                     s->first_slice_line=1;
 
 2972                     s->resync_mb_x=
mb_x;
 
 2973                     s->resync_mb_y=
mb_y;
 
 2977             if(  (
s->resync_mb_x   == 
s->mb_x)
 
 2978                && 
s->resync_mb_y+1 == 
s->mb_y){
 
 2979                 s->first_slice_line=0;
 
 2989                 int pb_bits_count, pb2_bits_count, tex_pb_bits_count;
 
 2995                 if(
s->data_partitioning){
 
 2996                     backup_s.pb2= 
s->pb2;
 
 2997                     backup_s.tex_pb= 
s->tex_pb;
 
 3004                     s->mv[0][0][0] = 
s->p_mv_table[xy][0];
 
 3005                     s->mv[0][0][1] = 
s->p_mv_table[xy][1];
 
 3007                                  &dmin, &next_block, 
s->mv[0][0][0], 
s->mv[0][0][1]);
 
 3014                         j= 
s->field_select[0][
i] = 
s->p_field_select_table[
i][xy];
 
 3015                         s->mv[0][
i][0] = 
s->p_field_mv_table[
i][j][xy][0];
 
 3016                         s->mv[0][
i][1] = 
s->p_field_mv_table[
i][j][xy][1];
 
 3019                                  &dmin, &next_block, 0, 0);
 
 3028                                  &dmin, &next_block, 
s->mv[0][0][0], 
s->mv[0][0][1]);
 
 3035                         s->mv[0][
i][0] = 
s->current_picture.motion_val[0][
s->block_index[
i]][0];
 
 3036                         s->mv[0][
i][1] = 
s->current_picture.motion_val[0][
s->block_index[
i]][1];
 
 3039                                  &dmin, &next_block, 0, 0);
 
 3045                     s->mv[0][0][0] = 
s->b_forw_mv_table[xy][0];
 
 3046                     s->mv[0][0][1] = 
s->b_forw_mv_table[xy][1];
 
 3048                                  &dmin, &next_block, 
s->mv[0][0][0], 
s->mv[0][0][1]);
 
 3054                     s->mv[1][0][0] = 
s->b_back_mv_table[xy][0];
 
 3055                     s->mv[1][0][1] = 
s->b_back_mv_table[xy][1];
 
 3057                                  &dmin, &next_block, 
s->mv[1][0][0], 
s->mv[1][0][1]);
 
 3063                     s->mv[0][0][0] = 
s->b_bidir_forw_mv_table[xy][0];
 
 3064                     s->mv[0][0][1] = 
s->b_bidir_forw_mv_table[xy][1];
 
 3065                     s->mv[1][0][0] = 
s->b_bidir_back_mv_table[xy][0];
 
 3066                     s->mv[1][0][1] = 
s->b_bidir_back_mv_table[xy][1];
 
 3068                                  &dmin, &next_block, 0, 0);
 
 3075                         j= 
s->field_select[0][
i] = 
s->b_field_select_table[0][
i][xy];
 
 3076                         s->mv[0][
i][0] = 
s->b_field_mv_table[0][
i][j][xy][0];
 
 3077                         s->mv[0][
i][1] = 
s->b_field_mv_table[0][
i][j][xy][1];
 
 3080                                  &dmin, &next_block, 0, 0);
 
 3087                         j= 
s->field_select[1][
i] = 
s->b_field_select_table[1][
i][xy];
 
 3088                         s->mv[1][
i][0] = 
s->b_field_mv_table[1][
i][j][xy][0];
 
 3089                         s->mv[1][
i][1] = 
s->b_field_mv_table[1][
i][j][xy][1];
 
 3092                                  &dmin, &next_block, 0, 0);
 
 3098                     for(dir=0; dir<2; dir++){
 
 3100                             j= 
s->field_select[dir][
i] = 
s->b_field_select_table[dir][
i][xy];
 
 3101                             s->mv[dir][
i][0] = 
s->b_field_mv_table[dir][
i][j][xy][0];
 
 3102                             s->mv[dir][
i][1] = 
s->b_field_mv_table[dir][
i][j][xy][1];
 
 3106                                  &dmin, &next_block, 0, 0);
 
 3115                                  &dmin, &next_block, 0, 0);
 
 3116                     if(
s->h263_pred || 
s->h263_aic){
 
 3118                             s->mbintra_table[
mb_x + 
mb_y*
s->mb_stride]=1;
 
 3126                         const int last_qp= backup_s.qscale;
 
 3130                         static const int dquant_tab[4]={-1,1,-2,2};
 
 3131                         int storecoefs = 
s->mb_intra && 
s->dc_val[0];
 
 3139                         s->mv[0][0][0] = best_s.
mv[0][0][0];
 
 3140                         s->mv[0][0][1] = best_s.
mv[0][0][1];
 
 3141                         s->mv[1][0][0] = best_s.
mv[1][0][0];
 
 3142                         s->mv[1][0][1] = best_s.
mv[1][0][1];
 
 3145                         for(; qpi<4; qpi++){
 
 3146                             int dquant= dquant_tab[qpi];
 
 3148                             if(qp < s->
avctx->
qmin || qp > 
s->avctx->qmax)
 
 3153                                     dc[
i]= 
s->dc_val[0][ 
s->block_index[
i] ];
 
 3154                                     memcpy(ac[
i], 
s->ac_val[0][
s->block_index[
i]], 
sizeof(int16_t)*16);
 
 3159                                          &dmin, &next_block, 
s->mv[mvdir][0][0], 
s->mv[mvdir][0][1]);
 
 3163                                         s->dc_val[0][ 
s->block_index[
i] ]= 
dc[
i];
 
 3164                                         memcpy(
s->ac_val[0][
s->block_index[
i]], ac[
i], 
sizeof(int16_t)*16);
 
 3172                     int mx= 
s->b_direct_mv_table[xy][0];
 
 3173                     int my= 
s->b_direct_mv_table[xy][1];
 
 3175                     backup_s.dquant = 0;
 
 3180                                  &dmin, &next_block, mx, my);
 
 3183                     backup_s.dquant = 0;
 
 3188                                  &dmin, &next_block, 0, 0);
 
 3193                         coded |= 
s->block_last_index[
i];
 
 3196                         memcpy(
s->mv, best_s.
mv, 
sizeof(
s->mv));
 
 3218                                         &dmin, &next_block, mx, my);
 
 3223                 s->current_picture.qscale_table[xy] = best_s.
qscale;
 
 3229                 ff_copy_bits(&backup_s.pb, bit_buf[next_block^1], pb_bits_count);
 
 3232                 if(
s->data_partitioning){
 
 3235                     ff_copy_bits(&backup_s.pb2, bit_buf2[next_block^1], pb2_bits_count);
 
 3236                     s->pb2= backup_s.pb2;
 
 3240                     ff_copy_bits(&backup_s.tex_pb, bit_buf_tex[next_block^1], tex_pb_bits_count);
 
 3241                     s->tex_pb= backup_s.tex_pb;
 
 3245                 if (CONFIG_H263_ENCODER &&
 
 3250                     s->hdsp.put_pixels_tab[0][0](
s->dest[0], 
s->sc.rd_scratchpad                     , 
s->linesize  ,16);
 
 3251                     s->hdsp.put_pixels_tab[1][0](
s->dest[1], 
s->sc.rd_scratchpad + 16*
s->linesize    , 
s->uvlinesize, 8);
 
 3252                     s->hdsp.put_pixels_tab[1][0](
s->dest[2], 
s->sc.rd_scratchpad + 16*
s->linesize + 8, 
s->uvlinesize, 8);
 
 3258                 int motion_x = 0, motion_y = 0;
 
 3266                     motion_x= 
s->mv[0][0][0] = 0;
 
 3267                     motion_y= 
s->mv[0][0][1] = 0;
 
 3272                     motion_x= 
s->mv[0][0][0] = 
s->p_mv_table[xy][0];
 
 3273                     motion_y= 
s->mv[0][0][1] = 
s->p_mv_table[xy][1];
 
 3280                         j= 
s->field_select[0][
i] = 
s->p_field_select_table[
i][xy];
 
 3281                         s->mv[0][
i][0] = 
s->p_field_mv_table[
i][j][xy][0];
 
 3282                         s->mv[0][
i][1] = 
s->p_field_mv_table[
i][j][xy][1];
 
 3290                         s->mv[0][
i][0] = 
s->current_picture.motion_val[0][
s->block_index[
i]][0];
 
 3291                         s->mv[0][
i][1] = 
s->current_picture.motion_val[0][
s->block_index[
i]][1];
 
 3295                     if (CONFIG_MPEG4_ENCODER) {
 
 3298                         motion_x=
s->b_direct_mv_table[xy][0];
 
 3299                         motion_y=
s->b_direct_mv_table[xy][1];
 
 3304                     if (CONFIG_MPEG4_ENCODER) {
 
 3313                     s->mv[0][0][0] = 
s->b_bidir_forw_mv_table[xy][0];
 
 3314                     s->mv[0][0][1] = 
s->b_bidir_forw_mv_table[xy][1];
 
 3315                     s->mv[1][0][0] = 
s->b_bidir_back_mv_table[xy][0];
 
 3316                     s->mv[1][0][1] = 
s->b_bidir_back_mv_table[xy][1];
 
 3321                     motion_x= 
s->mv[1][0][0] = 
s->b_back_mv_table[xy][0];
 
 3322                     motion_y= 
s->mv[1][0][1] = 
s->b_back_mv_table[xy][1];
 
 3327                     motion_x= 
s->mv[0][0][0] = 
s->b_forw_mv_table[xy][0];
 
 3328                     motion_y= 
s->mv[0][0][1] = 
s->b_forw_mv_table[xy][1];
 
 3335                         j= 
s->field_select[0][
i] = 
s->b_field_select_table[0][
i][xy];
 
 3336                         s->mv[0][
i][0] = 
s->b_field_mv_table[0][
i][j][xy][0];
 
 3337                         s->mv[0][
i][1] = 
s->b_field_mv_table[0][
i][j][xy][1];
 
 3345                         j= 
s->field_select[1][
i] = 
s->b_field_select_table[1][
i][xy];
 
 3346                         s->mv[1][
i][0] = 
s->b_field_mv_table[1][
i][j][xy][0];
 
 3347                         s->mv[1][
i][1] = 
s->b_field_mv_table[1][
i][j][xy][1];
 
 3354                     for(dir=0; dir<2; dir++){
 
 3356                             j= 
s->field_select[dir][
i] = 
s->b_field_select_table[dir][
i][xy];
 
 3357                             s->mv[dir][
i][0] = 
s->b_field_mv_table[dir][
i][j][xy][0];
 
 3358                             s->mv[dir][
i][1] = 
s->b_field_mv_table[dir][
i][j][xy][1];
 
 3369                 s->last_mv_dir = 
s->mv_dir;
 
 3371                 if (CONFIG_H263_ENCODER &&
 
 3380                 s->p_mv_table[xy][0]=0;
 
 3381                 s->p_mv_table[xy][1]=0;
 
 3388                 if(
s->mb_x*16 + 16 > 
s->width ) 
w= 
s->width - 
s->mb_x*16;
 
 3389                 if(
s->mb_y*16 + 16 > 
s->height) 
h= 
s->height- 
s->mb_y*16;
 
 3391                 s->current_picture.encoding_error[0] += 
sse(
 
 3392                     s, 
s->new_picture.f->data[0] + 
s->mb_x*16 + 
s->mb_y*
s->linesize*16,
 
 3393                     s->dest[0], 
w, 
h, 
s->linesize);
 
 3394                 s->current_picture.encoding_error[1] += 
sse(
 
 3395                     s, 
s->new_picture.f->data[1] + 
s->mb_x*8  + 
s->mb_y*
s->uvlinesize*chr_h,
 
 3396                     s->dest[1], 
w>>1, 
h>>
s->chroma_y_shift, 
s->uvlinesize);
 
 3397                 s->current_picture.encoding_error[2] += 
sse(
 
 3398                     s, 
s->new_picture.f->data[2] + 
s->mb_x*8  + 
s->mb_y*
s->uvlinesize*chr_h,
 
 3399                     s->dest[2], 
w>>1, 
h>>
s->chroma_y_shift, 
s->uvlinesize);
 
 3402                 if(CONFIG_H263_ENCODER && 
s->out_format == 
FMT_H263)
 
 3405             ff_dlog(
s->avctx, 
"MB %d %d bits\n",
 
 3419 #define MERGE(field) dst->field += src->field; src->field=0 
 3446         for(
i=0; 
i<64; 
i++){
 
 3459     if (
s->next_lambda){
 
 3460         s->current_picture_ptr->f->quality =
 
 3461         s->current_picture.f->quality = 
s->next_lambda;
 
 3462         if(!dry_run) 
s->next_lambda= 0;
 
 3463     } 
else if (!
s->fixed_qscale) {
 
 3465         s->current_picture_ptr->f->quality =
 
 3466         s->current_picture.f->quality = 
quality;
 
 3467         if (
s->current_picture.f->quality < 0)
 
 3471     if(
s->adaptive_quant){
 
 3472         switch(
s->codec_id){
 
 3474             if (CONFIG_MPEG4_ENCODER)
 
 3480             if (CONFIG_H263_ENCODER)
 
 3487         s->lambda= 
s->lambda_table[0];
 
 3490         s->lambda = 
s->current_picture.f->quality;
 
 3498     s->time = 
s->current_picture_ptr->f->pts * 
s->avctx->time_base.num;
 
 3501         s->pb_time= 
s->pp_time - (
s->last_non_b_time - 
s->time);
 
 3504         s->pp_time= 
s->time - 
s->last_non_b_time;
 
 3505         s->last_non_b_time= 
s->time;
 
 3514     int context_count = 
s->slice_context_count;
 
 3519     s->me.mb_var_sum_temp    =
 
 3520     s->me.mc_mb_var_sum_temp = 0;
 
 3524     if (
s->out_format == 
FMT_MPEG1 || (
s->h263_pred && !
s->msmpeg4_version))
 
 3529     s->me.scene_change_score=0;
 
 3534         if(
s->msmpeg4_version >= 3) 
s->no_rounding=1;
 
 3535         else                        s->no_rounding=0;
 
 3538             s->no_rounding ^= 1;
 
 3547             s->lambda= 
s->last_lambda_for[
s->pict_type];
 
 3549             s->lambda= 
s->last_lambda_for[
s->last_non_b_pict_type];
 
 3554         if(
s->q_chroma_intra_matrix   != 
s->q_intra_matrix  ) 
av_freep(&
s->q_chroma_intra_matrix);
 
 3555         if(
s->q_chroma_intra_matrix16 != 
s->q_intra_matrix16) 
av_freep(&
s->q_chroma_intra_matrix16);
 
 3556         s->q_chroma_intra_matrix   = 
s->q_intra_matrix;
 
 3557         s->q_chroma_intra_matrix16 = 
s->q_intra_matrix16;
 
 3561     for(
i=1; 
i<context_count; 
i++){
 
 3572         s->lambda  = (
s->lambda  * 
s->me_penalty_compensation + 128) >> 8;
 
 3573         s->lambda2 = (
s->lambda2 * (int64_t) 
s->me_penalty_compensation + 128) >> 8;
 
 3584         for(
i=0; 
i<
s->mb_stride*
s->mb_height; 
i++)
 
 3587         if(!
s->fixed_qscale){
 
 3589             s->avctx->execute(
s->avctx, 
mb_var_thread, &
s->thread_context[0], 
NULL, context_count, 
sizeof(
void*));
 
 3592     for(
i=1; 
i<context_count; 
i++){
 
 3595     s->current_picture.mc_mb_var_sum= 
s->current_picture_ptr->mc_mb_var_sum= 
s->me.mc_mb_var_sum_temp;
 
 3596     s->current_picture.   mb_var_sum= 
s->current_picture_ptr->   mb_var_sum= 
s->me.   mb_var_sum_temp;
 
 3599     if (
s->me.scene_change_score > 
s->scenechange_threshold &&
 
 3602         for(
i=0; 
i<
s->mb_stride*
s->mb_height; 
i++)
 
 3604         if(
s->msmpeg4_version >= 3)
 
 3606         ff_dlog(
s, 
"Scene change detected, encoding as I Frame %"PRId64
" %"PRId64
"\n",
 
 3607                 s->current_picture.mb_var_sum, 
s->current_picture.mc_mb_var_sum);
 
 3650                 for(dir=0; dir<2; dir++){
 
 3656                                             s->b_field_mv_table[dir][
i][j], dir ? 
s->b_code : 
s->f_code, 
type, 1);
 
 3667     if (
s->qscale < 3 && 
s->max_qcoeff <= 128 &&
 
 3676         if (
s->avctx->intra_matrix) {
 
 3678             luma_matrix = 
s->avctx->intra_matrix;
 
 3680         if (
s->avctx->chroma_intra_matrix)
 
 3681             chroma_matrix = 
s->avctx->chroma_intra_matrix;
 
 3685             int j = 
s->idsp.idct_permutation[
i];
 
 3687             s->chroma_intra_matrix[j] = 
av_clip_uint8((chroma_matrix[
i] * 
s->qscale) >> 3);
 
 3690         s->y_dc_scale_table=
 
 3692         s->chroma_intra_matrix[0] =
 
 3695                        s->intra_matrix, 
s->intra_quant_bias, 8, 8, 1);
 
 3697                        s->chroma_intra_matrix, 
s->intra_quant_bias, 8, 8, 1);
 
 3701             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};
 
 3702             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};
 
 3703             for (
int i = 1; 
i < 64; 
i++) {
 
 3709             s->y_dc_scale_table = y;
 
 3710             s->c_dc_scale_table = 
c;
 
 3711             s->intra_matrix[0] = 13;
 
 3712             s->chroma_intra_matrix[0] = 14;
 
 3714                               s->intra_matrix, 
s->intra_quant_bias, 8, 8, 1);
 
 3716                               s->chroma_intra_matrix, 
s->intra_quant_bias, 8, 8, 1);
 
 3720         s->y_dc_scale_table=
 
 3725     s->current_picture_ptr->f->key_frame =
 
 3727     s->current_picture_ptr->f->pict_type =
 
 3728     s->current_picture.f->pict_type = 
s->pict_type;
 
 3730     if (
s->current_picture.f->key_frame)
 
 3731         s->picture_in_gop_number=0;
 
 3733     s->mb_x = 
s->mb_y = 0;
 
 3735     switch(
s->out_format) {
 
 3736 #if CONFIG_MJPEG_ENCODER || CONFIG_AMV_ENCODER 
 3741                                            s->pred, 
s->intra_matrix, 
s->chroma_intra_matrix);
 
 3745         if (CONFIG_SPEEDHQ_ENCODER)
 
 3749         if (CONFIG_H261_ENCODER)
 
 3757         else if (CONFIG_MPEG4_ENCODER && 
s->h263_pred) {
 
 3770         else if (CONFIG_H263_ENCODER)
 
 3774         if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
 
 3781     s->header_bits= 
bits - 
s->last_bits;
 
 3783     for(
i=1; 
i<context_count; 
i++){
 
 3786     s->avctx->execute(
s->avctx, 
encode_thread, &
s->thread_context[0], 
NULL, context_count, 
sizeof(
void*));
 
 3787     for(
i=1; 
i<context_count; 
i++){
 
 3788         if (
s->pb.buf_end == 
s->thread_context[
i]->pb.buf)
 
 3797     const int intra= 
s->mb_intra;
 
 3800     s->dct_count[intra]++;
 
 3802     for(
i=0; 
i<64; 
i++){
 
 3807                 s->dct_error_sum[intra][
i] += 
level;
 
 3808                 level -= 
s->dct_offset[intra][
i];
 
 3811                 s->dct_error_sum[intra][
i] -= 
level;
 
 3812                 level += 
s->dct_offset[intra][
i];
 
 3821                                   int16_t *
block, 
int n,
 
 3824     const uint16_t *matrix;
 
 3825     const uint8_t *scantable;
 
 3826     const uint8_t *perm_scantable;
 
 3828     unsigned int threshold1, threshold2;
 
 3840     int coeff_count[64];
 
 3841     int qmul, qadd, start_i, last_non_zero, 
i, 
dc;
 
 3842     const int esc_length= 
s->ac_esc_length;
 
 3844     uint8_t * last_length;
 
 3850     if(
s->dct_error_sum)
 
 3856     else                 mpeg2_qscale = 
qscale << 1;
 
 3860         scantable= 
s->intra_scantable.scantable;
 
 3861         perm_scantable= 
s->intra_scantable.permutated;
 
 3878         qmat = n < 4 ? 
s->q_intra_matrix[
qscale] : 
s->q_chroma_intra_matrix[
qscale];
 
 3879         matrix = n < 4 ? 
s->intra_matrix : 
s->chroma_intra_matrix;
 
 3883         if (n > 3 && 
s->intra_chroma_ac_vlc_length) {
 
 3884             length     = 
s->intra_chroma_ac_vlc_length;
 
 3885             last_length= 
s->intra_chroma_ac_vlc_last_length;
 
 3887             length     = 
s->intra_ac_vlc_length;
 
 3888             last_length= 
s->intra_ac_vlc_last_length;
 
 3891         scantable= 
s->inter_scantable.scantable;
 
 3892         perm_scantable= 
s->inter_scantable.permutated;
 
 3895         qmat = 
s->q_inter_matrix[
qscale];
 
 3896         matrix = 
s->inter_matrix;
 
 3897         length     = 
s->inter_ac_vlc_length;
 
 3898         last_length= 
s->inter_ac_vlc_last_length;
 
 3903     threshold2= (threshold1<<1);
 
 3905     for(
i=63; 
i>=start_i; 
i--) {
 
 3906         const int j = scantable[
i];
 
 3909         if(((
unsigned)(
level+threshold1))>threshold2){
 
 3915     for(
i=start_i; 
i<=last_non_zero; 
i++) {
 
 3916         const int j = scantable[
i];
 
 3921         if(((
unsigned)(
level+threshold1))>threshold2){
 
 3944     if(last_non_zero < start_i){
 
 3945         memset(
block + start_i, 0, (64-start_i)*
sizeof(int16_t));
 
 3946         return last_non_zero;
 
 3949     score_tab[start_i]= 0;
 
 3950     survivor[0]= start_i;
 
 3953     for(
i=start_i; 
i<=last_non_zero; 
i++){
 
 3954         int level_index, j, zero_distortion;
 
 3956         int best_score=256*256*256*120;
 
 3960         zero_distortion= dct_coeff*dct_coeff;
 
 3962         for(level_index=0; level_index < coeff_count[
i]; level_index++){
 
 3971                 unquant_coeff= alevel*qmul + qadd;
 
 3973                 j = 
s->idsp.idct_permutation[scantable[
i]];
 
 3974                 unquant_coeff = alevel * matrix[j] * 8;
 
 3976                 j = 
s->idsp.idct_permutation[scantable[
i]]; 
 
 3978                         unquant_coeff = (
int)(  alevel  * mpeg2_qscale * matrix[j]) >> 4;
 
 3979                         unquant_coeff =   (unquant_coeff - 1) | 1;
 
 3981                         unquant_coeff = (((  alevel  << 1) + 1) * mpeg2_qscale * ((
int) matrix[j])) >> 5;
 
 3982                         unquant_coeff =   (unquant_coeff - 1) | 1;
 
 3987             distortion= (unquant_coeff - dct_coeff) * (unquant_coeff - dct_coeff) - zero_distortion;
 
 3989             if((
level&(~127)) == 0){
 
 3990                 for(j=survivor_count-1; j>=0; j--){
 
 3991                     int run= 
i - survivor[j];
 
 3993                     score += score_tab[
i-
run];
 
 3995                     if(score < best_score){
 
 3998                         level_tab[
i+1]= 
level-64;
 
 4003                     for(j=survivor_count-1; j>=0; j--){
 
 4004                         int run= 
i - survivor[j];
 
 4006                         score += score_tab[
i-
run];
 
 4007                         if(score < last_score){
 
 4010                             last_level= 
level-64;
 
 4016                 distortion += esc_length*
lambda;
 
 4017                 for(j=survivor_count-1; j>=0; j--){
 
 4018                     int run= 
i - survivor[j];
 
 4019                     int score= distortion + score_tab[
i-
run];
 
 4021                     if(score < best_score){
 
 4024                         level_tab[
i+1]= 
level-64;
 
 4029                   for(j=survivor_count-1; j>=0; j--){
 
 4030                         int run= 
i - survivor[j];
 
 4031                         int score= distortion + score_tab[
i-
run];
 
 4032                         if(score < last_score){
 
 4035                             last_level= 
level-64;
 
 4043         score_tab[
i+1]= best_score;
 
 4046         if(last_non_zero <= 27){
 
 4047             for(; survivor_count; survivor_count--){
 
 4048                 if(score_tab[ survivor[survivor_count-1] ] <= best_score)
 
 4052             for(; survivor_count; survivor_count--){
 
 4053                 if(score_tab[ survivor[survivor_count-1] ] <= best_score + 
lambda)
 
 4058         survivor[ survivor_count++ ]= 
i+1;
 
 4062         last_score= 256*256*256*120;
 
 4063         for(
i= survivor[0]; 
i<=last_non_zero + 1; 
i++){
 
 4064             int score= score_tab[
i];
 
 4068             if(score < last_score){
 
 4071                 last_level= level_tab[
i];
 
 4072                 last_run= run_tab[
i];
 
 4077     s->coded_score[n] = last_score;
 
 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++){
 
 4093             int unquant_coeff, score, distortion;
 
 4096                     unquant_coeff= (alevel*qmul + qadd)>>3;
 
 4098                     unquant_coeff = (((  alevel  << 1) + 1) * mpeg2_qscale * ((
int) matrix[0])) >> 5;
 
 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;
 
 4115         s->coded_score[n] = best_score - 
dc*
dc;
 
 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                     if(
i==0) 
s*= sqrt(0.5);
 
 4146                     if(j==0) 
s*= sqrt(0.5);
 
 4159     const uint8_t *scantable;
 
 4160     const uint8_t *perm_scantable;
 
 4166     int qmul, qadd, start_i, last_non_zero, 
i, 
dc;
 
 4168     uint8_t * last_length;
 
 4170     int rle_index, 
run, q = 1, sum; 
 
 4172     if(
basis[0][0] == 0)
 
 4178         scantable= 
s->intra_scantable.scantable;
 
 4179         perm_scantable= 
s->intra_scantable.permutated;
 
 4197         if (n > 3 && 
s->intra_chroma_ac_vlc_length) {
 
 4198             length     = 
s->intra_chroma_ac_vlc_length;
 
 4199             last_length= 
s->intra_chroma_ac_vlc_last_length;
 
 4201             length     = 
s->intra_ac_vlc_length;
 
 4202             last_length= 
s->intra_ac_vlc_last_length;
 
 4205         scantable= 
s->inter_scantable.scantable;
 
 4206         perm_scantable= 
s->inter_scantable.permutated;
 
 4209         length     = 
s->inter_ac_vlc_length;
 
 4210         last_length= 
s->inter_ac_vlc_last_length;
 
 4212     last_non_zero = 
s->block_last_index[n];
 
 4215     for(
i=0; 
i<64; 
i++){
 
 4220     for(
i=0; 
i<64; 
i++){
 
 4226         w= 15 + (48*qns*one + 
w/2)/
w; 
 
 4239     for(
i=start_i; 
i<=last_non_zero; 
i++){
 
 4240         int j= perm_scantable[
i];
 
 4247             run_tab[rle_index++]=
run;
 
 4257         int best_score = 
s->mpvencdsp.try_8x8basis(rem, 
weight, 
basis[0], 0);
 
 4260         int run2, best_unquant_change=0, analyze_gradient;
 
 4261         analyze_gradient = last_non_zero > 2 || 
s->quantizer_noise_shaping >= 3;
 
 4263         if(analyze_gradient){
 
 4264             for(
i=0; 
i<64; 
i++){
 
 4274             int change, old_coeff;
 
 4280             for(change=-1; change<=1; change+=2){
 
 4281                 int new_level= 
level + change;
 
 4282                 int score, new_coeff;
 
 4284                 new_coeff= q*new_level;
 
 4285                 if(new_coeff >= 2048 || new_coeff < 0)
 
 4288                 score = 
s->mpvencdsp.try_8x8basis(rem, 
weight, 
basis[0],
 
 4289                                                   new_coeff - old_coeff);
 
 4290                 if(score<best_score){
 
 4293                     best_change= change;
 
 4294                     best_unquant_change= new_coeff - old_coeff;
 
 4301         run2= run_tab[rle_index++];
 
 4305         for(
i=start_i; 
i<64; 
i++){
 
 4306             int j= perm_scantable[
i];
 
 4308             int change, old_coeff;
 
 4310             if(
s->quantizer_noise_shaping < 3 && 
i > last_non_zero + 1)
 
 4315                 else        old_coeff= qmul*
level + qadd;
 
 4316                 run2= run_tab[rle_index++]; 
 
 4323             for(change=-1; change<=1; change+=2){
 
 4324                 int new_level= 
level + change;
 
 4325                 int score, new_coeff, unquant_change;
 
 4332                     if(new_level<0) new_coeff= qmul*new_level - qadd;
 
 4333                     else            new_coeff= qmul*new_level + qadd;
 
 4334                     if(new_coeff >= 2048 || new_coeff <= -2048)
 
 4339                         if(level < 63 && level > -63){
 
 4340                             if(
i < last_non_zero)
 
 4350                         if(analyze_gradient){
 
 4351                             int g= d1[ scantable[
i] ];
 
 4352                             if(
g && (
g^new_level) >= 0)
 
 4356                         if(
i < last_non_zero){
 
 4357                             int next_i= 
i + run2 + 1;
 
 4358                             int next_level= 
block[ perm_scantable[next_i] ] + 64;
 
 4360                             if(next_level&(~127))
 
 4363                             if(next_i < last_non_zero)
 
 4383                     if(
i < last_non_zero){
 
 4384                         int next_i= 
i + run2 + 1;
 
 4385                         int next_level= 
block[ perm_scantable[next_i] ] + 64;
 
 4387                         if(next_level&(~127))
 
 4390                         if(next_i < last_non_zero)
 
 4409                 unquant_change= new_coeff - old_coeff;
 
 4412                 score += 
s->mpvencdsp.try_8x8basis(rem, 
weight, 
basis[j],
 
 4414                 if(score<best_score){
 
 4417                     best_change= change;
 
 4418                     best_unquant_change= unquant_change;
 
 4422                 prev_level= 
level + 64;
 
 4423                 if(prev_level&(~127))
 
 4433             int j= perm_scantable[ best_coeff ];
 
 4435             block[j] += best_change;
 
 4437             if(best_coeff > last_non_zero){
 
 4438                 last_non_zero= best_coeff;
 
 4441                 for(; last_non_zero>=start_i; last_non_zero--){
 
 4442                     if(
block[perm_scantable[last_non_zero]])
 
 4449             for(
i=start_i; 
i<=last_non_zero; 
i++){
 
 4450                 int j= perm_scantable[
i];
 
 4454                      run_tab[rle_index++]=
run;
 
 4461             s->mpvencdsp.add_8x8basis(rem, 
basis[j], best_unquant_change);
 
 4467     return last_non_zero;
 
 4482                       const uint8_t *scantable, 
int last)
 
 4493     for (
i = 0; 
i <= last; 
i++) {
 
 4494         const int j = scantable[
i];
 
 4499     for (
i = 0; 
i <= last; 
i++) {
 
 4500         const int j = scantable[
i];
 
 4501         const int perm_j = permutation[j];
 
 4507                         int16_t *
block, 
int n,
 
 4510     int i, j, 
level, last_non_zero, q, start_i;
 
 4512     const uint8_t *scantable;
 
 4515     unsigned int threshold1, threshold2;
 
 4519     if(
s->dct_error_sum)
 
 4523         scantable= 
s->intra_scantable.scantable;
 
 4538         qmat = n < 4 ? 
s->q_intra_matrix[
qscale] : 
s->q_chroma_intra_matrix[
qscale];
 
 4541         scantable= 
s->inter_scantable.scantable;
 
 4544         qmat = 
s->q_inter_matrix[
qscale];
 
 4548     threshold2= (threshold1<<1);
 
 4549     for(
i=63;
i>=start_i;
i--) {
 
 4553         if(((
unsigned)(
level+threshold1))>threshold2){
 
 4560     for(
i=start_i; 
i<=last_non_zero; 
i++) {
 
 4566         if(((
unsigned)(
level+threshold1))>threshold2){
 
 4584                       scantable, last_non_zero);
 
 4586     return last_non_zero;
 
 4589 #define OFFSET(x) offsetof(MpegEncContext, x) 
 4590 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM 
 4593     { 
"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 },
 
 4595 #if FF_API_MPEGVIDEO_OPTS 
 4631 #if FF_API_MPEGVIDEO_OPTS 
 4662     .
name           = 
"msmpeg4v2",
 
  
#define FF_ALLOCZ_TYPED_ARRAY(p, nelem)
av_cold int ff_mpv_common_init(MpegEncContext *s)
init common structure for both encoder and decoder.
#define FF_MPV_DEPRECATED_A53_CC_OPT
void ff_speedhq_end_slice(MpegEncContext *s)
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
int ff_wmv2_encode_picture_header(MpegEncContext *s, int picture_number)
uint16_t * mb_type
Table for candidate MB types for encoding (defines in mpegutils.h)
#define MV_TYPE_16X16
1 vector for the whole mb
#define AV_LOG_WARNING
Something somehow does not look correct.
static void direct(const float *in, const FFTComplex *ir, int len, float *out)
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
av_cold int ff_speedhq_encode_init(MpegEncContext *s)
AVPixelFormat
Pixel format.
const AVClass ff_mpv_enc_class
int data_partitioning
data partitioning flag from header
static void set_frame_distances(MpegEncContext *s)
int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt)
Read encoded data from the encoder.
unsigned int lambda
Lagrange multiplier used in rate distortion.
#define H263_GOB_HEIGHT(h)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
int b_code
backward MV resolution for B-frames (MPEG-4)
void ff_mpeg4_merge_partitions(MpegEncContext *s)
void ff_mpv_common_defaults(MpegEncContext *s)
Set the given MpegEncContext to common defaults (same for encoding and decoding).
int av_frame_get_buffer(AVFrame *frame, int align)
Allocate new buffer(s) for audio or video data.
#define FF_COMPLIANCE_EXPERIMENTAL
Allow nonstandardized experimental things.
int64_t rc_min_rate
minimum bitrate
void ff_fix_long_p_mvs(MpegEncContext *s, int type)
void ff_speedhq_encode_picture_header(MpegEncContext *s)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AVERROR_EOF
End of file.
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
static av_always_inline void encode_mb(MpegEncContext *s, int motion_x, int motion_y)
#define AV_CODEC_FLAG_QSCALE
Use fixed qscale.
static int sse_mb(MpegEncContext *s)
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
void ff_block_permute(int16_t *block, uint8_t *permutation, const uint8_t *scantable, int last)
Permute an 8x8 block according to permutation.
av_cold void ff_qpeldsp_init(QpelDSPContext *c)
static int16_t basis[64][64]
void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, ScanTable *intra_scantable, int pred, uint16_t luma_intra_matrix[64], uint16_t chroma_intra_matrix[64])
uint16_t * intra_matrix
custom intra quantization matrix Must be allocated with the av_malloc() family of functions,...
Picture current_picture
copy of the current picture structure.
static const uint8_t mv_bits[2][16][10]
static int estimate_motion_thread(AVCodecContext *c, void *arg)
float lumi_masking
luminance masking (0-> disabled)
static void update_noise_reduction(MpegEncContext *s)
#define MV_DIRECT
bidirectional mode where the difference equals the MV of the last P/S/I-Frame (MPEG-4)
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
const AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
int partitioned_frame
is current frame partitioned
uint16_t(* dct_offset)[64]
const AVCodec ff_h263p_encoder
#define UNI_AC_ENC_INDEX(run, level)
This structure describes decoded (raw) audio or video data.
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
void ff_msmpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
#define CANDIDATE_MB_TYPE_INTER_I
static const int BUF_BITS
void ff_free_picture_tables(Picture *pic)
static int alloc_picture(MpegEncContext *s, Picture *pic, int shared)
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size)
Shrink the already allocated side data buffer.
static int put_bytes_count(const PutBitContext *s, int round_up)
#define CANDIDATE_MB_TYPE_BACKWARD_I
const uint8_t ff_mpeg2_non_linear_qscale[32]
av_cold int ff_mjpeg_encode_init(MpegEncContext *s)
void ff_clean_intra_table_entries(MpegEncContext *s)
Clean dc, ac, coded_block for the current non-intra MB.
#define AV_LOG_VERBOSE
Detailed information.
#define PICT_BOTTOM_FIELD
av_cold void ff_pixblockdsp_init(PixblockDSPContext *c, AVCodecContext *avctx)
void ff_h261_encode_init(MpegEncContext *s)
void ff_init_block_index(MpegEncContext *s)
struct AVCodecContext * avctx
void ff_rv20_encode_picture_header(MpegEncContext *s, int picture_number)
av_cold int ff_rate_control_init(MpegEncContext *s)
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
#define CANDIDATE_MB_TYPE_SKIPPED
static int pre_estimate_motion_thread(AVCodecContext *c, void *arg)
PutBitContext pb
bit output
int mb_decision
macroblock decision mode
#define CANDIDATE_MB_TYPE_INTER
AVCPBProperties * ff_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
int qmax
maximum quantizer
#define AV_CODEC_FLAG_INTERLACED_ME
interlaced motion estimation
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
#define AV_CODEC_FLAG_4MV
4 MV per MB allowed / advanced prediction for H.263.
void ff_set_cmp(MECmpContext *c, me_cmp_func *cmp, int type)
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
void ff_msmpeg4_encode_picture_header(MpegEncContext *s, int picture_number)
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about quality
int mv[2][4][2]
motion vectors for a macroblock first coordinate : 0 = forward 1 = backward second "         : depend...
#define FF_MPV_FLAG_SKIP_RD
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
#define CANDIDATE_MB_TYPE_FORWARD_I
void ff_mpeg1_encode_picture_header(MpegEncContext *s, int picture_number)
av_cold void ff_mpegvideoencdsp_init(MpegvideoEncDSPContext *c, AVCodecContext *avctx)
int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet)
void ff_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
Copy the content of src to the bitstream.
static int estimate_qp(MpegEncContext *s, int dry_run)
int ff_get_best_fcode(MpegEncContext *s, int16_t(*mv_table)[2], int type)
void ff_set_mpeg4_time(MpegEncContext *s)
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size)
Wrap an existing array as a packet side data.
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.
const struct AVCodec * codec
static void merge_context_after_me(MpegEncContext *dst, MpegEncContext *src)
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
#define CANDIDATE_MB_TYPE_BIDIR
int padding_bug_score
used to detect the VERY common padding bug in MPEG-4
static const struct twinvq_data tab
static int get_intra_count(MpegEncContext *s, uint8_t *src, uint8_t *ref, int stride)
av_cold void ff_me_cmp_init(MECmpContext *c, AVCodecContext *avctx)
av_cold void ff_h263dsp_init(H263DSPContext *ctx)
int flags
AV_CODEC_FLAG_*.
int bit_rate_tolerance
number of bits the bitstream is allowed to diverge from the reference.
int umvplus
== H.263+ && unrestricted_mv
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.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
#define AV_CODEC_FLAG_LOW_DELAY
Force low delay.
static av_always_inline float scale(float x, float s)
void ff_h263_update_motion_val(MpegEncContext *s)
#define AV_CODEC_FLAG_LOOP_FILTER
loop filter.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
static void mpv_encode_init_static(void)
#define CANDIDATE_MB_TYPE_INTER4V
static const AVOption h263_options[]
static int put_bytes_left(const PutBitContext *s, int round_up)
#define MAX_PICTURE_COUNT
av_cold int ff_dct_encode_init(MpegEncContext *s)
void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
#define AV_CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase)
void ff_mjpeg_encode_mb(MpegEncContext *s, int16_t block[12][64])
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
int ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number)
void ff_mpv_common_end(MpegEncContext *s)
static int frame_start(MpegEncContext *s)
static int ff_thread_once(char *control, void(*routine)(void))
void ff_init_qscale_tab(MpegEncContext *s)
init s->current_picture.qscale_table from s->lambda_table
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FF_ARRAY_ELEMS(a)
static void update_mb_info(MpegEncContext *s, int startcode)
av_cold void ff_fdctdsp_init(FDCTDSPContext *c, AVCodecContext *avctx)
int ff_h261_get_picture_format(int width, int height)
static uint8_t default_fcode_tab[MAX_MV *2+1]
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my)
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
static void build_basis(uint8_t *perm)
int has_b_frames
Size of the frame reordering buffer in the decoder.
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
void ff_h263_encode_init(MpegEncContext *s)
const uint8_t ff_h263_chroma_qscale_table[32]
static void rebase_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Rebase the bit writer onto a reallocated buffer.
static int encode_frame(AVCodecContext *c, AVFrame *frame, AVPacket *pkt)
void ff_mpeg_unref_picture(AVCodecContext *avctx, Picture *pic)
Deallocate a picture.
const uint8_t *const ff_mpeg2_dc_scale_table[4]
static int sse(MpegEncContext *s, uint8_t *src1, uint8_t *src2, int w, int h, int stride)
static double av_q2d(AVRational a)
Convert an AVRational to a double.
@ HUFFMAN_TABLE_OPTIMAL
Compute and use optimal Huffman tables.
void ff_estimate_b_frame_motion(MpegEncContext *s, int mb_x, int mb_y)
#define LOCAL_ALIGNED_16(t, v,...)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static enum AVPixelFormat pix_fmts[]
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix)
void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number)
void ff_h263_encode_gob_header(MpegEncContext *s, int mb_line)
Encode a group of blocks header.
void ff_mpeg4_stuffing(PutBitContext *pbc)
add MPEG-4 stuffing bits (01...1)
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
int64_t rc_max_rate
maximum bitrate
uint64_t error[AV_NUM_DATA_POINTERS]
error
This structure describes the bitrate properties of an encoded bitstream.
uint64_t encoding_error[AV_NUM_DATA_POINTERS]
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
float p_masking
p block masking (0-> disabled)
static int mb_var_thread(AVCodecContext *c, void *arg)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
int rc_buffer_size
decoder bitstream buffer size
int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared)
static const AVClass h263_class
PutBitContext pb2
used for data partitioned VOPs
static double sqr(double x)
#define LIBAVUTIL_VERSION_INT
void ff_write_pass1_stats(MpegEncContext *s)
Describe the class of an AVClass context structure.
#define PTRDIFF_SPECIFIER
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
#define FF_MPV_DEPRECATED_BFRAME_OPTS
static void write_mb_info(MpegEncContext *s)
int f_code
forward MV resolution
av_cold void ff_mpv_idct_init(MpegEncContext *s)
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
struct AVCodecInternal * internal
Private context used for internal data.
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
int64_t bit_rate
the average bitrate
#define ROUNDED_DIV(a, b)
void ff_faandct(int16_t *data)
const char * av_default_item_name(void *ptr)
Return the context name.
@ AV_PICTURE_TYPE_I
Intra.
void ff_fdct_ifast(int16_t *data)
void ff_set_qscale(MpegEncContext *s, int qscale)
set qscale and update qscale dependent variables.
#define FF_MPV_DEPRECATED_MPEG_QUANT_OPT
#define AV_CODEC_FLAG_AC_PRED
H.263 advanced intra coding / MPEG-4 AC prediction.
int ildct_cmp
interlaced DCT comparison function
int ff_vbv_update(MpegEncContext *s, int frame_size)
av_cold int ff_mpv_encode_end(AVCodecContext *avctx)
#define FF_MB_DECISION_SIMPLE
uses mb_cmp
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
void ff_jpeg_fdct_islow_8(int16_t *data)
int trellis
trellis RD quantization
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.
const AVCodec ff_h263_encoder
void(* op_pixels_func)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
void ff_jpeg_fdct_islow_10(int16_t *data)
void ff_clean_h263_qscales(MpegEncContext *s)
modify qscale so that encoding is actually possible in H.263 (limit difference to -2....
void(* qpel_mc_func)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
static int weight(int i, int blen, int offset)
#define MV_TYPE_8X8
4 vectors (H.263, MPEG-4 4MV)
float temporal_cplx_masking
temporary complexity masking (0-> disabled)
static void mpv_encode_defaults(MpegEncContext *s)
Set the given MpegEncContext to defaults for encoding.
static void denoise_dct_c(MpegEncContext *s, int16_t *block)
static void set_put_bits_buffer_size(PutBitContext *s, int size)
Change the end of the buffer.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
static int get_sae(uint8_t *src, int ref, int stride)
char * stats_out
pass1 encoding statistics output buffer
#define AV_CODEC_FLAG_QPEL
Use qpel MC.
static void merge_context_after_encode(MpegEncContext *dst, MpegEncContext *src)
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled top and top right vectors is used as motion vector prediction the used motion vector is the sum of the predictor and(mvx_diff, mvy_diff) *mv_scale Intra DC Prediction block[y][x] dc[1]
int ff_mpeg_ref_picture(AVCodecContext *avctx, Picture *dst, Picture *src)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
void ff_mpeg4_clean_buffers(MpegEncContext *s)
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
static void dct_single_coeff_elimination(MpegEncContext *s, int n, int threshold)
#define CONFIG_MSMPEG4_ENCODER
const AVCodec ff_msmpeg4v2_encoder
const AVCodec ff_msmpeg4v3_encoder
uint16_t intra_matrix[64]
matrix transmitted in the bitstream
void ff_mpeg1_encode_slice_header(MpegEncContext *s)
int ff_pre_estimate_p_frame_motion(MpegEncContext *s, int mb_x, int mb_y)
void ff_mpeg1_clean_buffers(MpegEncContext *s)
unsigned int lambda2
(lambda*lambda) >> FF_LAMBDA_SHIFT
const int16_t ff_mpeg4_default_intra_matrix[64]
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])
#define AV_NOPTS_VALUE
Undefined timestamp value.
static const AVOption mpv_generic_options[]
uint8_t * byte_buffer
temporary buffer used for encoders to store their bitstream
#define CANDIDATE_MB_TYPE_DIRECT0
void ff_mpeg1_encode_mb(MpegEncContext *s, int16_t block[8][64], int motion_x, int motion_y)
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
@ AV_PKT_DATA_H263_MB_INFO
An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of structures with info about macroblo...
int64_t min_bitrate
Minimum bitrate of the stream, in bits per second.
const uint16_t ff_mpeg1_default_intra_matrix[256]
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
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)
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
const int16_t ff_mpeg4_default_non_intra_matrix[64]
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
void ff_msmpeg4_encode_ext_header(MpegEncContext *s)
#define MV_TYPE_FIELD
2 vectors, one per field
int flags
A combination of AV_PKT_FLAG values.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
int picture_in_gop_number
0-> first pic in gop, ...
int64_t avg_bitrate
Average bitrate of the stream, in bits per second.
unsigned int byte_buffer_size
#define FF_COMPLIANCE_NORMAL
void ff_clean_mpeg4_qscales(MpegEncContext *s)
modify mb_type & qscale so that encoding is actually possible in MPEG-4
#define AV_LOG_INFO
Standard information.
static void update_qscale(MpegEncContext *s)
static void ff_update_block_index(MpegEncContext *s)
uint64_t vbv_delay
The delay between the time the packet this structure is associated with is received and the time when...
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)
void ff_msmpeg4_encode_init(MpegEncContext *s)
void ff_speedhq_encode_mb(MpegEncContext *s, int16_t block[12][64])
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
void ff_dct_encode_init_x86(MpegEncContext *s)
#define i(width, name, range_min, range_max)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
static int put_bits_count(PutBitContext *s)
static int dct_quantize_trellis_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
static int encode_thread(AVCodecContext *c, void *arg)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
const uint32_t ff_square_tab[512]
static int estimate_best_b_count(MpegEncContext *s)
int intra_dc_precision
precision of the intra DC coefficient - 8
int obmc
overlapped block motion compensation
PutBitContext tex_pb
used for data partitioned VOPs
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
int64_t max_bitrate
Maximum bitrate of the stream, in bits per second.
#define FF_MPV_DEPRECATED_MATRIX_OPT
static const int32_t qmat16[MAT_SIZE]
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...
const AVCodec ff_wmv1_encoder
static void get_visual_weight(int16_t *weight, uint8_t *ptr, int stride)
const uint16_t ff_h263_format[8][2]
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
void ff_flv_encode_picture_header(MpegEncContext *s, int picture_number)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
static const AVClass h263p_class
void ff_mpeg4_init_partitions(MpegEncContext *s)
const char * name
Name of the codec implementation.
@ AV_PKT_DATA_CPB_PROPERTIES
This side data corresponds to the AVCPBProperties struct.
int ff_init_me(MpegEncContext *s)
int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame)
Supply a raw video or audio frame to the encoder.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
av_cold void ff_rate_control_uninit(MpegEncContext *s)
#define CANDIDATE_MB_TYPE_DIRECT
double buffer_index
amount of bits in the video/audio buffer
int h263_slice_structured
const uint8_t ff_zigzag_direct[64]
static int get_bits_diff(MpegEncContext *s)
#define AV_CODEC_FLAG_CLOSED_GOP
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
const uint16_t ff_mpeg1_default_non_intra_matrix[64]
int64_t buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
#define CANDIDATE_MB_TYPE_BIDIR_I
const uint16_t ff_inv_aanscales[64]
av_cold void ff_mjpeg_encode_close(MpegEncContext *s)
void ff_h263_loop_filter(MpegEncContext *s)
#define FF_MPV_FLAG_CBP_RD
void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
#define AV_INPUT_BUFFER_PADDING_SIZE
static void update_duplicate_context_after_me(MpegEncContext *dst, MpegEncContext *src)
int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
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)
int dquant
qscale difference to prev qscale
float dark_masking
darkness masking (0-> disabled)
main external API structure.
int active_thread_type
Which multithreading methods are in use by the codec.
static uint8_t default_mv_penalty[MAX_FCODE+1][MAX_DMV *2+1]
void ff_estimate_p_frame_motion(MpegEncContext *s, int mb_x, int mb_y)
int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src)
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
#define CANDIDATE_MB_TYPE_INTRA
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size)
Allocate new information of a packet.
int qmin
minimum quantizer
int gop_picture_number
index of the first picture of a GOP based on fake_pic_num & MPEG-1 specific
static int select_input_picture(MpegEncContext *s)
float spatial_cplx_masking
spatial complexity masking (0-> disabled)
static void frame_end(MpegEncContext *s)
static int ref[MAX_W *MAX_W]
void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64])
static float mean(const float *input, int size)
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
#define CANDIDATE_MB_TYPE_FORWARD
#define FF_MB_DECISION_RD
rate distortion
static int shift(int a, int b)
void ff_wmv2_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
@ AV_PICTURE_TYPE_P
Predicted.
#define AVERROR_ENCODER_NOT_FOUND
Encoder not found.
int ff_speedhq_mb_y_order_to_mb(int mb_y_order, int mb_height, int *first_in_slice)
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
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...
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)
void ff_mpeg1_encode_init(MpegEncContext *s)
Undefined Behavior In the C some operations are like signed integer overflow
void(* fdct)(int16_t *block)
static int skip_check(MpegEncContext *s, Picture *p, Picture *ref)
av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
float rc_max_available_vbv_use
Ratecontrol attempt to use, at maximum, of what can be used without an underflow.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
static int dct_quantize_refine(MpegEncContext *s, int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale)
static av_always_inline int diff(const uint32_t a, const uint32_t b)
#define FF_MPV_FLAG_STRICT_GOP
int slices
Number of slices.
#define FF_MB_DECISION_BITS
chooses the one which needs the fewest bits
This structure stores compressed data.
static void clip_coeffs(MpegEncContext *s, int16_t *block, int last_index)
uint16_t * inter_matrix
custom inter quantization matrix Must be allocated with the av_malloc() family of functions,...
static int encode_picture(MpegEncContext *s, int picture_number)
int width
picture width / height.
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
static const double coeff[2][5]
The exact code depends on how similar the blocks are and how related they are to the block
#define FF_MPV_FLAG_QP_RD
int misc_bits
cbp, mb_type
void ff_mjpeg_encode_picture_trailer(PutBitContext *pb, int header_bits)
static void copy_context_after_encode(MpegEncContext *d, MpegEncContext *s, int type)
void ff_get_2pass_fcode(MpegEncContext *s)
int end_mb_y
end mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y)
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
static void copy_context_before_encode(MpegEncContext *d, MpegEncContext *s, int type)
void ff_h261_reorder_mb_index(MpegEncContext *s)
int ff_dct_quantize_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
static const uint8_t sp5x_qscale_five_quant_table[][64]
int display_picture_number
picture number in display order
@ AV_PICTURE_TYPE_S
S(GMC)-VOP MPEG-4.
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
#define FF_MPV_COMMON_OPTS
int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
Check AVPacket size and allocate data.
int ff_mjpeg_encode_stuffing(MpegEncContext *s)
Writes the complete JPEG frame when optimal huffman tables are enabled, otherwise writes the stuffing...
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 alt_inter_vlc
alternative inter vlc
void ff_h263_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
void ff_h261_encode_picture_header(MpegEncContext *s, int picture_number)
#define CANDIDATE_MB_TYPE_BACKWARD
const uint16_t ff_aanscales[64]
AVCPBProperties * av_cpb_properties_alloc(size_t *size)
Allocate a CPB properties structure and initialize its fields to default values.
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
static const AVOption h263p_options[]
static void write_slice_end(MpegEncContext *s)