FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mpegvideo_enc.c
Go to the documentation of this file.
1 /*
2  * The simplest mpeg encoder (well, it was the simplest!)
3  * Copyright (c) 2000,2001 Fabrice Bellard
4  * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
5  *
6  * 4MV & hq & B-frame encoding stuff by Michael Niedermayer <michaelni@gmx.at>
7  *
8  * This file is part of FFmpeg.
9  *
10  * FFmpeg is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) any later version.
14  *
15  * FFmpeg is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with FFmpeg; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  */
24 
25 /*
26  * non linear quantizers with large QPs and VBV with restrictive qmin fixes sponsored by NOA GmbH
27  */
28 
29 /**
30  * @file
31  * The simplest mpeg encoder (well, it was the simplest!).
32  */
33 
34 #include <stdint.h>
35 
36 #include "libavutil/internal.h"
37 #include "libavutil/intmath.h"
38 #include "libavutil/mathematics.h"
39 #include "libavutil/pixdesc.h"
40 #include "libavutil/opt.h"
41 #include "libavutil/timer.h"
42 #include "avcodec.h"
43 #include "dct.h"
44 #include "idctdsp.h"
45 #include "mpeg12.h"
46 #include "mpegvideo.h"
47 #include "mpegvideodata.h"
48 #include "h261.h"
49 #include "h263.h"
50 #include "h263data.h"
51 #include "mjpegenc_common.h"
52 #include "mathops.h"
53 #include "mpegutils.h"
54 #include "mjpegenc.h"
55 #include "msmpeg4.h"
56 #include "pixblockdsp.h"
57 #include "qpeldsp.h"
58 #include "faandct.h"
59 #include "thread.h"
60 #include "aandcttab.h"
61 #include "flv.h"
62 #include "mpeg4video.h"
63 #include "internal.h"
64 #include "bytestream.h"
65 #include "wmv2.h"
66 #include "rv10.h"
67 #include "libxvid.h"
68 #include <limits.h>
69 #include "sp5x.h"
70 
71 #define QUANT_BIAS_SHIFT 8
72 
73 #define QMAT_SHIFT_MMX 16
74 #define QMAT_SHIFT 21
75 
77 static int dct_quantize_refine(MpegEncContext *s, int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale);
78 static int sse_mb(MpegEncContext *s);
79 static void denoise_dct_c(MpegEncContext *s, int16_t *block);
80 static int dct_quantize_trellis_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow);
81 
84 
87  { NULL },
88 };
89 
90 void ff_convert_matrix(MpegEncContext *s, int (*qmat)[64],
91  uint16_t (*qmat16)[2][64],
92  const uint16_t *quant_matrix,
93  int bias, int qmin, int qmax, int intra)
94 {
95  FDCTDSPContext *fdsp = &s->fdsp;
96  int qscale;
97  int shift = 0;
98 
99  for (qscale = qmin; qscale <= qmax; qscale++) {
100  int i;
101  int qscale2;
102 
104  else qscale2 = qscale << 1;
105 
106  if (fdsp->fdct == ff_jpeg_fdct_islow_8 ||
107 #if CONFIG_FAANDCT
108  fdsp->fdct == ff_faandct ||
109 #endif /* CONFIG_FAANDCT */
110  fdsp->fdct == ff_jpeg_fdct_islow_10) {
111  for (i = 0; i < 64; i++) {
112  const int j = s->idsp.idct_permutation[i];
113  int64_t den = (int64_t) qscale2 * quant_matrix[j];
114  /* 16 <= qscale * quant_matrix[i] <= 7905
115  * Assume x = ff_aanscales[i] * qscale * quant_matrix[i]
116  * 19952 <= x <= 249205026
117  * (1 << 36) / 19952 >= (1 << 36) / (x) >= (1 << 36) / 249205026
118  * 3444240 >= (1 << 36) / (x) >= 275 */
119 
120  qmat[qscale][i] = (int)((UINT64_C(2) << QMAT_SHIFT) / den);
121  }
122  } else if (fdsp->fdct == ff_fdct_ifast) {
123  for (i = 0; i < 64; i++) {
124  const int j = s->idsp.idct_permutation[i];
125  int64_t den = ff_aanscales[i] * (int64_t) qscale2 * quant_matrix[j];
126  /* 16 <= qscale * quant_matrix[i] <= 7905
127  * Assume x = ff_aanscales[i] * qscale * quant_matrix[i]
128  * 19952 <= x <= 249205026
129  * (1 << 36) / 19952 >= (1 << 36) / (x) >= (1 << 36) / 249205026
130  * 3444240 >= (1 << 36) / (x) >= 275 */
131 
132  qmat[qscale][i] = (int)((UINT64_C(2) << (QMAT_SHIFT + 14)) / den);
133  }
134  } else {
135  for (i = 0; i < 64; i++) {
136  const int j = s->idsp.idct_permutation[i];
137  int64_t den = (int64_t) qscale2 * quant_matrix[j];
138  /* We can safely suppose that 16 <= quant_matrix[i] <= 255
139  * Assume x = qscale * quant_matrix[i]
140  * So 16 <= x <= 7905
141  * so (1 << 19) / 16 >= (1 << 19) / (x) >= (1 << 19) / 7905
142  * so 32768 >= (1 << 19) / (x) >= 67 */
143  qmat[qscale][i] = (int)((UINT64_C(2) << QMAT_SHIFT) / den);
144  //qmat [qscale][i] = (1 << QMAT_SHIFT_MMX) /
145  // (qscale * quant_matrix[i]);
146  qmat16[qscale][0][i] = (2 << QMAT_SHIFT_MMX) / den;
147 
148  if (qmat16[qscale][0][i] == 0 ||
149  qmat16[qscale][0][i] == 128 * 256)
150  qmat16[qscale][0][i] = 128 * 256 - 1;
151  qmat16[qscale][1][i] =
152  ROUNDED_DIV(bias * (1<<(16 - QUANT_BIAS_SHIFT)),
153  qmat16[qscale][0][i]);
154  }
155  }
156 
157  for (i = intra; i < 64; i++) {
158  int64_t max = 8191;
159  if (fdsp->fdct == ff_fdct_ifast) {
160  max = (8191LL * ff_aanscales[i]) >> 14;
161  }
162  while (((max * qmat[qscale][i]) >> shift) > INT_MAX) {
163  shift++;
164  }
165  }
166  }
167  if (shift) {
169  "Warning, QMAT_SHIFT is larger than %d, overflows possible\n",
170  QMAT_SHIFT - shift);
171  }
172 }
173 
174 static inline void update_qscale(MpegEncContext *s)
175 {
176  if (s->q_scale_type == 1 && 0) {
177  int i;
178  int bestdiff=INT_MAX;
179  int best = 1;
180 
181  for (i = 0 ; i<FF_ARRAY_ELEMS(ff_mpeg2_non_linear_qscale); i++) {
182  int diff = FFABS((ff_mpeg2_non_linear_qscale[i]<<(FF_LAMBDA_SHIFT + 6)) - (int)s->lambda * 139);
183  if (ff_mpeg2_non_linear_qscale[i] < s->avctx->qmin ||
185  continue;
186  if (diff < bestdiff) {
187  bestdiff = diff;
188  best = i;
189  }
190  }
191  s->qscale = best;
192  } else {
193  s->qscale = (s->lambda * 139 + FF_LAMBDA_SCALE * 64) >>
194  (FF_LAMBDA_SHIFT + 7);
195  s->qscale = av_clip(s->qscale, s->avctx->qmin, s->vbv_ignore_qmax ? 31 : s->avctx->qmax);
196  }
197 
198  s->lambda2 = (s->lambda * s->lambda + FF_LAMBDA_SCALE / 2) >>
200 }
201 
202 void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix)
203 {
204  int i;
205 
206  if (matrix) {
207  put_bits(pb, 1, 1);
208  for (i = 0; i < 64; i++) {
209  put_bits(pb, 8, matrix[ff_zigzag_direct[i]]);
210  }
211  } else
212  put_bits(pb, 1, 0);
213 }
214 
215 /**
216  * init s->current_picture.qscale_table from s->lambda_table
217  */
219 {
220  int8_t * const qscale_table = s->current_picture.qscale_table;
221  int i;
222 
223  for (i = 0; i < s->mb_num; i++) {
224  unsigned int lam = s->lambda_table[s->mb_index2xy[i]];
225  int qp = (lam * 139 + FF_LAMBDA_SCALE * 64) >> (FF_LAMBDA_SHIFT + 7);
226  qscale_table[s->mb_index2xy[i]] = av_clip(qp, s->avctx->qmin,
227  s->avctx->qmax);
228  }
229 }
230 
233 {
234 #define COPY(a) dst->a= src->a
235  COPY(pict_type);
237  COPY(f_code);
238  COPY(b_code);
239  COPY(qscale);
240  COPY(lambda);
241  COPY(lambda2);
244  COPY(frame_pred_frame_dct); // FIXME don't set in encode_header
245  COPY(progressive_frame); // FIXME don't set in encode_header
246  COPY(partitioned_frame); // FIXME don't set in encode_header
247 #undef COPY
248 }
249 
250 /**
251  * Set the given MpegEncContext to defaults for encoding.
252  * the changed fields will not depend upon the prior state of the MpegEncContext.
253  */
255 {
256  int i;
258 
259  for (i = -16; i < 16; i++) {
260  default_fcode_tab[i + MAX_MV] = 1;
261  }
264 
265  s->input_picture_number = 0;
266  s->picture_in_gop_number = 0;
267 }
268 
270 {
271  if (ARCH_X86)
273 
274  if (CONFIG_H263_ENCODER)
276  if (!s->dct_quantize)
278  if (!s->denoise_dct)
281  if (s->avctx->trellis)
283 
284  return 0;
285 }
286 
287 /* init video encoder */
289 {
290  MpegEncContext *s = avctx->priv_data;
291  AVCPBProperties *cpb_props;
292  int i, ret, format_supported;
293 
295 
296  switch (avctx->codec_id) {
298  if (avctx->pix_fmt != AV_PIX_FMT_YUV420P &&
299  avctx->pix_fmt != AV_PIX_FMT_YUV422P) {
300  av_log(avctx, AV_LOG_ERROR,
301  "only YUV420 and YUV422 are supported\n");
302  return -1;
303  }
304  break;
305  case AV_CODEC_ID_MJPEG:
306  case AV_CODEC_ID_AMV:
307  format_supported = 0;
308  /* JPEG color space */
309  if (avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
310  avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
311  avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
312  (avctx->color_range == AVCOL_RANGE_JPEG &&
313  (avctx->pix_fmt == AV_PIX_FMT_YUV420P ||
314  avctx->pix_fmt == AV_PIX_FMT_YUV422P ||
315  avctx->pix_fmt == AV_PIX_FMT_YUV444P)))
316  format_supported = 1;
317  /* MPEG color space */
318  else if (avctx->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL &&
319  (avctx->pix_fmt == AV_PIX_FMT_YUV420P ||
320  avctx->pix_fmt == AV_PIX_FMT_YUV422P ||
321  avctx->pix_fmt == AV_PIX_FMT_YUV444P))
322  format_supported = 1;
323 
324  if (!format_supported) {
325  av_log(avctx, AV_LOG_ERROR, "colorspace not supported in jpeg\n");
326  return -1;
327  }
328  break;
329  default:
330  if (avctx->pix_fmt != AV_PIX_FMT_YUV420P) {
331  av_log(avctx, AV_LOG_ERROR, "only YUV420 is supported\n");
332  return -1;
333  }
334  }
335 
336  switch (avctx->pix_fmt) {
337  case AV_PIX_FMT_YUVJ444P:
338  case AV_PIX_FMT_YUV444P:
340  break;
341  case AV_PIX_FMT_YUVJ422P:
342  case AV_PIX_FMT_YUV422P:
344  break;
345  case AV_PIX_FMT_YUVJ420P:
346  case AV_PIX_FMT_YUV420P:
347  default:
349  break;
350  }
351 
352  avctx->bits_per_raw_sample = av_clip(avctx->bits_per_raw_sample, 0, 8);
353 
354 #if FF_API_PRIVATE_OPT
356  if (avctx->rtp_payload_size)
358  if (avctx->me_penalty_compensation)
360  if (avctx->pre_me)
361  s->me_pre = avctx->pre_me;
363 #endif
364 
365  s->bit_rate = avctx->bit_rate;
366  s->width = avctx->width;
367  s->height = avctx->height;
368  if (avctx->gop_size > 600 &&
370  av_log(avctx, AV_LOG_WARNING,
371  "keyframe interval too large!, reducing it from %d to %d\n",
372  avctx->gop_size, 600);
373  avctx->gop_size = 600;
374  }
375  s->gop_size = avctx->gop_size;
376  s->avctx = avctx;
377  if (avctx->max_b_frames > MAX_B_FRAMES) {
378  av_log(avctx, AV_LOG_ERROR, "Too many B-frames requested, maximum "
379  "is %d.\n", MAX_B_FRAMES);
380  avctx->max_b_frames = MAX_B_FRAMES;
381  }
382  s->max_b_frames = avctx->max_b_frames;
383  s->codec_id = avctx->codec->id;
385  s->quarter_sample = (avctx->flags & AV_CODEC_FLAG_QPEL) != 0;
386  s->rtp_mode = !!s->rtp_payload_size;
388 
389  // workaround some differences between how applications specify dc precision
390  if (s->intra_dc_precision < 0) {
391  s->intra_dc_precision += 8;
392  } else if (s->intra_dc_precision >= 8)
393  s->intra_dc_precision -= 8;
394 
395  if (s->intra_dc_precision < 0) {
396  av_log(avctx, AV_LOG_ERROR,
397  "intra dc precision must be positive, note some applications use"
398  " 0 and some 8 as base meaning 8bit, the value must not be smaller than that\n");
399  return AVERROR(EINVAL);
400  }
401 
402  if (avctx->codec_id == AV_CODEC_ID_AMV || (avctx->active_thread_type & FF_THREAD_SLICE))
403  s->huffman = 0;
404 
405  if (s->intra_dc_precision > (avctx->codec_id == AV_CODEC_ID_MPEG2VIDEO ? 3 : 0)) {
406  av_log(avctx, AV_LOG_ERROR, "intra dc precision too large\n");
407  return AVERROR(EINVAL);
408  }
410 
411  if (s->gop_size <= 1) {
412  s->intra_only = 1;
413  s->gop_size = 12;
414  } else {
415  s->intra_only = 0;
416  }
417 
418  /* Fixed QSCALE */
419  s->fixed_qscale = !!(avctx->flags & AV_CODEC_FLAG_QSCALE);
420 
421  s->adaptive_quant = (s->avctx->lumi_masking ||
422  s->avctx->dark_masking ||
425  s->avctx->p_masking ||
426  s->border_masking ||
427  (s->mpv_flags & FF_MPV_FLAG_QP_RD)) &&
428  !s->fixed_qscale;
429 
431 
432  if (avctx->rc_max_rate && !avctx->rc_buffer_size) {
433  switch(avctx->codec_id) {
436  avctx->rc_buffer_size = FFMAX(avctx->rc_max_rate, 15000000) * 112LL / 15000000 * 16384;
437  break;
438  case AV_CODEC_ID_MPEG4:
442  if (avctx->rc_max_rate >= 15000000) {
443  avctx->rc_buffer_size = 320 + (avctx->rc_max_rate - 15000000LL) * (760-320) / (38400000 - 15000000);
444  } else if(avctx->rc_max_rate >= 2000000) {
445  avctx->rc_buffer_size = 80 + (avctx->rc_max_rate - 2000000LL) * (320- 80) / (15000000 - 2000000);
446  } else if(avctx->rc_max_rate >= 384000) {
447  avctx->rc_buffer_size = 40 + (avctx->rc_max_rate - 384000LL) * ( 80- 40) / ( 2000000 - 384000);
448  } else
449  avctx->rc_buffer_size = 40;
450  avctx->rc_buffer_size *= 16384;
451  break;
452  }
453  if (avctx->rc_buffer_size) {
454  av_log(avctx, AV_LOG_INFO, "Automatically choosing VBV buffer size of %d kbyte\n", avctx->rc_buffer_size/8192);
455  }
456  }
457 
458  if ((!avctx->rc_max_rate) != (!avctx->rc_buffer_size)) {
459  av_log(avctx, AV_LOG_ERROR, "Either both buffer size and max rate or neither must be specified\n");
460  return -1;
461  }
462 
463  if (avctx->rc_min_rate && avctx->rc_max_rate != avctx->rc_min_rate) {
464  av_log(avctx, AV_LOG_INFO,
465  "Warning min_rate > 0 but min_rate != max_rate isn't recommended!\n");
466  }
467 
468  if (avctx->rc_min_rate && avctx->rc_min_rate > avctx->bit_rate) {
469  av_log(avctx, AV_LOG_ERROR, "bitrate below min bitrate\n");
470  return -1;
471  }
472 
473  if (avctx->rc_max_rate && avctx->rc_max_rate < avctx->bit_rate) {
474  av_log(avctx, AV_LOG_ERROR, "bitrate above max bitrate\n");
475  return -1;
476  }
477 
478  if (avctx->rc_max_rate &&
479  avctx->rc_max_rate == avctx->bit_rate &&
480  avctx->rc_max_rate != avctx->rc_min_rate) {
481  av_log(avctx, AV_LOG_INFO,
482  "impossible bitrate constraints, this will fail\n");
483  }
484 
485  if (avctx->rc_buffer_size &&
486  avctx->bit_rate * (int64_t)avctx->time_base.num >
487  avctx->rc_buffer_size * (int64_t)avctx->time_base.den) {
488  av_log(avctx, AV_LOG_ERROR, "VBV buffer too small for bitrate\n");
489  return -1;
490  }
491 
492  if (!s->fixed_qscale &&
493  avctx->bit_rate * av_q2d(avctx->time_base) >
494  avctx->bit_rate_tolerance) {
495  av_log(avctx, AV_LOG_WARNING,
496  "bitrate tolerance %d too small for bitrate %"PRId64", overriding\n", avctx->bit_rate_tolerance, avctx->bit_rate);
497  avctx->bit_rate_tolerance = 5 * avctx->bit_rate * av_q2d(avctx->time_base);
498  }
499 
500  if (s->avctx->rc_max_rate &&
501  s->avctx->rc_min_rate == s->avctx->rc_max_rate &&
504  90000LL * (avctx->rc_buffer_size - 1) >
505  s->avctx->rc_max_rate * 0xFFFFLL) {
506  av_log(avctx, AV_LOG_INFO,
507  "Warning vbv_delay will be set to 0xFFFF (=VBR) as the "
508  "specified vbv buffer is too large for the given bitrate!\n");
509  }
510 
511  if ((s->avctx->flags & AV_CODEC_FLAG_4MV) && s->codec_id != AV_CODEC_ID_MPEG4 &&
513  s->codec_id != AV_CODEC_ID_FLV1) {
514  av_log(avctx, AV_LOG_ERROR, "4MV not supported by codec\n");
515  return -1;
516  }
517 
518  if (s->obmc && s->avctx->mb_decision != FF_MB_DECISION_SIMPLE) {
519  av_log(avctx, AV_LOG_ERROR,
520  "OBMC is only supported with simple mb decision\n");
521  return -1;
522  }
523 
524  if (s->quarter_sample && s->codec_id != AV_CODEC_ID_MPEG4) {
525  av_log(avctx, AV_LOG_ERROR, "qpel not supported by codec\n");
526  return -1;
527  }
528 
529  if (s->max_b_frames &&
530  s->codec_id != AV_CODEC_ID_MPEG4 &&
533  av_log(avctx, AV_LOG_ERROR, "B-frames not supported by codec\n");
534  return -1;
535  }
536  if (s->max_b_frames < 0) {
537  av_log(avctx, AV_LOG_ERROR,
538  "max b frames must be 0 or positive for mpegvideo based encoders\n");
539  return -1;
540  }
541 
542  if ((s->codec_id == AV_CODEC_ID_MPEG4 ||
543  s->codec_id == AV_CODEC_ID_H263 ||
544  s->codec_id == AV_CODEC_ID_H263P) &&
545  (avctx->sample_aspect_ratio.num > 255 ||
546  avctx->sample_aspect_ratio.den > 255)) {
547  av_log(avctx, AV_LOG_WARNING,
548  "Invalid pixel aspect ratio %i/%i, limit is 255/255 reducing\n",
551  avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den, 255);
552  }
553 
554  if ((s->codec_id == AV_CODEC_ID_H263 ||
555  s->codec_id == AV_CODEC_ID_H263P) &&
556  (avctx->width > 2048 ||
557  avctx->height > 1152 )) {
558  av_log(avctx, AV_LOG_ERROR, "H.263 does not support resolutions above 2048x1152\n");
559  return -1;
560  }
561  if ((s->codec_id == AV_CODEC_ID_H263 ||
562  s->codec_id == AV_CODEC_ID_H263P) &&
563  ((avctx->width &3) ||
564  (avctx->height&3) )) {
565  av_log(avctx, AV_LOG_ERROR, "w/h must be a multiple of 4\n");
566  return -1;
567  }
568 
569  if (s->codec_id == AV_CODEC_ID_MPEG1VIDEO &&
570  (avctx->width > 4095 ||
571  avctx->height > 4095 )) {
572  av_log(avctx, AV_LOG_ERROR, "MPEG-1 does not support resolutions above 4095x4095\n");
573  return -1;
574  }
575 
576  if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO &&
577  (avctx->width > 16383 ||
578  avctx->height > 16383 )) {
579  av_log(avctx, AV_LOG_ERROR, "MPEG-2 does not support resolutions above 16383x16383\n");
580  return -1;
581  }
582 
583  if (s->codec_id == AV_CODEC_ID_RV10 &&
584  (avctx->width &15 ||
585  avctx->height&15 )) {
586  av_log(avctx, AV_LOG_ERROR, "width and height must be a multiple of 16\n");
587  return AVERROR(EINVAL);
588  }
589 
590  if (s->codec_id == AV_CODEC_ID_RV20 &&
591  (avctx->width &3 ||
592  avctx->height&3 )) {
593  av_log(avctx, AV_LOG_ERROR, "width and height must be a multiple of 4\n");
594  return AVERROR(EINVAL);
595  }
596 
597  if ((s->codec_id == AV_CODEC_ID_WMV1 ||
598  s->codec_id == AV_CODEC_ID_WMV2) &&
599  avctx->width & 1) {
600  av_log(avctx, AV_LOG_ERROR, "width must be multiple of 2\n");
601  return -1;
602  }
603 
606  av_log(avctx, AV_LOG_ERROR, "interlacing not supported by codec\n");
607  return -1;
608  }
609 
610 #if FF_API_PRIVATE_OPT
612  if (avctx->mpeg_quant)
613  s->mpeg_quant = avctx->mpeg_quant;
615 #endif
616 
617  // FIXME mpeg2 uses that too
618  if (s->mpeg_quant && ( s->codec_id != AV_CODEC_ID_MPEG4
619  && s->codec_id != AV_CODEC_ID_MPEG2VIDEO)) {
620  av_log(avctx, AV_LOG_ERROR,
621  "mpeg2 style quantization not supported by codec\n");
622  return -1;
623  }
624 
625  if ((s->mpv_flags & FF_MPV_FLAG_CBP_RD) && !avctx->trellis) {
626  av_log(avctx, AV_LOG_ERROR, "CBP RD needs trellis quant\n");
627  return -1;
628  }
629 
630  if ((s->mpv_flags & FF_MPV_FLAG_QP_RD) &&
632  av_log(avctx, AV_LOG_ERROR, "QP RD needs mbd=2\n");
633  return -1;
634  }
635 
636  if ((s->mpv_flags & FF_MPV_FLAG_QP_RD) &&
637  (s->codec_id == AV_CODEC_ID_AMV ||
638  s->codec_id == AV_CODEC_ID_MJPEG)) {
639  // Used to produce garbage with MJPEG.
640  av_log(avctx, AV_LOG_ERROR,
641  "QP RD is no longer compatible with MJPEG or AMV\n");
642  return -1;
643  }
644 
645 #if FF_API_PRIVATE_OPT
647  if (avctx->scenechange_threshold)
650 #endif
651 
652  if (s->scenechange_threshold < 1000000000 &&
654  av_log(avctx, AV_LOG_ERROR,
655  "closed gop with scene change detection are not supported yet, "
656  "set threshold to 1000000000\n");
657  return -1;
658  }
659 
660  if (s->avctx->flags & AV_CODEC_FLAG_LOW_DELAY) {
661  if (s->codec_id != AV_CODEC_ID_MPEG2VIDEO &&
663  av_log(avctx, AV_LOG_ERROR,
664  "low delay forcing is only available for mpeg2, "
665  "set strict_std_compliance to 'unofficial' or lower in order to allow it\n");
666  return -1;
667  }
668  if (s->max_b_frames != 0) {
669  av_log(avctx, AV_LOG_ERROR,
670  "B-frames cannot be used with low delay\n");
671  return -1;
672  }
673  }
674 
675  if (s->q_scale_type == 1) {
676  if (avctx->qmax > 28) {
677  av_log(avctx, AV_LOG_ERROR,
678  "non linear quant only supports qmax <= 28 currently\n");
679  return -1;
680  }
681  }
682 
683  if (avctx->slices > 1 &&
684  (avctx->codec_id == AV_CODEC_ID_FLV1 || avctx->codec_id == AV_CODEC_ID_H261)) {
685  av_log(avctx, AV_LOG_ERROR, "Multiple slices are not supported by this codec\n");
686  return AVERROR(EINVAL);
687  }
688 
689  if (s->avctx->thread_count > 1 &&
690  s->codec_id != AV_CODEC_ID_MPEG4 &&
693  s->codec_id != AV_CODEC_ID_MJPEG &&
694  (s->codec_id != AV_CODEC_ID_H263P)) {
695  av_log(avctx, AV_LOG_ERROR,
696  "multi threaded encoding not supported by codec\n");
697  return -1;
698  }
699 
700  if (s->avctx->thread_count < 1) {
701  av_log(avctx, AV_LOG_ERROR,
702  "automatic thread number detection not supported by codec, "
703  "patch welcome\n");
704  return -1;
705  }
706 
707  if (!avctx->time_base.den || !avctx->time_base.num) {
708  av_log(avctx, AV_LOG_ERROR, "framerate not set\n");
709  return -1;
710  }
711 
712 #if FF_API_PRIVATE_OPT
714  if (avctx->b_frame_strategy)
716  if (avctx->b_sensitivity != 40)
717  s->b_sensitivity = avctx->b_sensitivity;
719 #endif
720 
721  if (s->b_frame_strategy && (avctx->flags & AV_CODEC_FLAG_PASS2)) {
722  av_log(avctx, AV_LOG_INFO,
723  "notice: b_frame_strategy only affects the first pass\n");
724  s->b_frame_strategy = 0;
725  }
726 
727  i = av_gcd(avctx->time_base.den, avctx->time_base.num);
728  if (i > 1) {
729  av_log(avctx, AV_LOG_INFO, "removing common factors from framerate\n");
730  avctx->time_base.den /= i;
731  avctx->time_base.num /= i;
732  //return -1;
733  }
734 
736  // (a + x * 3 / 8) / x
737  s->intra_quant_bias = 3 << (QUANT_BIAS_SHIFT - 3);
738  s->inter_quant_bias = 0;
739  } else {
740  s->intra_quant_bias = 0;
741  // (a - x / 4) / x
742  s->inter_quant_bias = -(1 << (QUANT_BIAS_SHIFT - 2));
743  }
744 
745  if (avctx->qmin > avctx->qmax || avctx->qmin <= 0) {
746  av_log(avctx, AV_LOG_ERROR, "qmin and or qmax are invalid, they must be 0 < min <= max\n");
747  return AVERROR(EINVAL);
748  }
749 
750  av_log(avctx, AV_LOG_DEBUG, "intra_quant_bias = %d inter_quant_bias = %d\n",s->intra_quant_bias,s->inter_quant_bias);
751 
752  if (avctx->codec_id == AV_CODEC_ID_MPEG4 &&
753  s->avctx->time_base.den > (1 << 16) - 1) {
754  av_log(avctx, AV_LOG_ERROR,
755  "timebase %d/%d not supported by MPEG 4 standard, "
756  "the maximum admitted value for the timebase denominator "
757  "is %d\n", s->avctx->time_base.num, s->avctx->time_base.den,
758  (1 << 16) - 1);
759  return -1;
760  }
761  s->time_increment_bits = av_log2(s->avctx->time_base.den - 1) + 1;
762 
763  switch (avctx->codec->id) {
765  s->out_format = FMT_MPEG1;
767  avctx->delay = s->low_delay ? 0 : (s->max_b_frames + 1);
768  break;
770  s->out_format = FMT_MPEG1;
772  avctx->delay = s->low_delay ? 0 : (s->max_b_frames + 1);
773  s->rtp_mode = 1;
774  break;
775  case AV_CODEC_ID_MJPEG:
776  case AV_CODEC_ID_AMV:
777  s->out_format = FMT_MJPEG;
778  s->intra_only = 1; /* force intra only for jpeg */
779  if (!CONFIG_MJPEG_ENCODER ||
780  ff_mjpeg_encode_init(s) < 0)
781  return -1;
782  avctx->delay = 0;
783  s->low_delay = 1;
784  break;
785  case AV_CODEC_ID_H261:
786  if (!CONFIG_H261_ENCODER)
787  return -1;
788  if (ff_h261_get_picture_format(s->width, s->height) < 0) {
789  av_log(avctx, AV_LOG_ERROR,
790  "The specified picture size of %dx%d is not valid for the "
791  "H.261 codec.\nValid sizes are 176x144, 352x288\n",
792  s->width, s->height);
793  return -1;
794  }
795  s->out_format = FMT_H261;
796  avctx->delay = 0;
797  s->low_delay = 1;
798  s->rtp_mode = 0; /* Sliced encoding not supported */
799  break;
800  case AV_CODEC_ID_H263:
801  if (!CONFIG_H263_ENCODER)
802  return -1;
804  s->width, s->height) == 8) {
805  av_log(avctx, AV_LOG_ERROR,
806  "The specified picture size of %dx%d is not valid for "
807  "the H.263 codec.\nValid sizes are 128x96, 176x144, "
808  "352x288, 704x576, and 1408x1152. "
809  "Try H.263+.\n", s->width, s->height);
810  return -1;
811  }
812  s->out_format = FMT_H263;
813  avctx->delay = 0;
814  s->low_delay = 1;
815  break;
816  case AV_CODEC_ID_H263P:
817  s->out_format = FMT_H263;
818  s->h263_plus = 1;
819  /* Fx */
820  s->h263_aic = (avctx->flags & AV_CODEC_FLAG_AC_PRED) ? 1 : 0;
821  s->modified_quant = s->h263_aic;
822  s->loop_filter = (avctx->flags & AV_CODEC_FLAG_LOOP_FILTER) ? 1 : 0;
823  s->unrestricted_mv = s->obmc || s->loop_filter || s->umvplus;
824 
825  /* /Fx */
826  /* These are just to be sure */
827  avctx->delay = 0;
828  s->low_delay = 1;
829  break;
830  case AV_CODEC_ID_FLV1:
831  s->out_format = FMT_H263;
832  s->h263_flv = 2; /* format = 1; 11-bit codes */
833  s->unrestricted_mv = 1;
834  s->rtp_mode = 0; /* don't allow GOB */
835  avctx->delay = 0;
836  s->low_delay = 1;
837  break;
838  case AV_CODEC_ID_RV10:
839  s->out_format = FMT_H263;
840  avctx->delay = 0;
841  s->low_delay = 1;
842  break;
843  case AV_CODEC_ID_RV20:
844  s->out_format = FMT_H263;
845  avctx->delay = 0;
846  s->low_delay = 1;
847  s->modified_quant = 1;
848  s->h263_aic = 1;
849  s->h263_plus = 1;
850  s->loop_filter = 1;
851  s->unrestricted_mv = 0;
852  break;
853  case AV_CODEC_ID_MPEG4:
854  s->out_format = FMT_H263;
855  s->h263_pred = 1;
856  s->unrestricted_mv = 1;
857  s->low_delay = s->max_b_frames ? 0 : 1;
858  avctx->delay = s->low_delay ? 0 : (s->max_b_frames + 1);
859  break;
861  s->out_format = FMT_H263;
862  s->h263_pred = 1;
863  s->unrestricted_mv = 1;
864  s->msmpeg4_version = 2;
865  avctx->delay = 0;
866  s->low_delay = 1;
867  break;
869  s->out_format = FMT_H263;
870  s->h263_pred = 1;
871  s->unrestricted_mv = 1;
872  s->msmpeg4_version = 3;
873  s->flipflop_rounding = 1;
874  avctx->delay = 0;
875  s->low_delay = 1;
876  break;
877  case AV_CODEC_ID_WMV1:
878  s->out_format = FMT_H263;
879  s->h263_pred = 1;
880  s->unrestricted_mv = 1;
881  s->msmpeg4_version = 4;
882  s->flipflop_rounding = 1;
883  avctx->delay = 0;
884  s->low_delay = 1;
885  break;
886  case AV_CODEC_ID_WMV2:
887  s->out_format = FMT_H263;
888  s->h263_pred = 1;
889  s->unrestricted_mv = 1;
890  s->msmpeg4_version = 5;
891  s->flipflop_rounding = 1;
892  avctx->delay = 0;
893  s->low_delay = 1;
894  break;
895  default:
896  return -1;
897  }
898 
899 #if FF_API_PRIVATE_OPT
901  if (avctx->noise_reduction)
902  s->noise_reduction = avctx->noise_reduction;
904 #endif
905 
906  avctx->has_b_frames = !s->low_delay;
907 
908  s->encoding = 1;
909 
910  s->progressive_frame =
913  s->alternate_scan);
914 
915  /* init */
916  ff_mpv_idct_init(s);
917  if (ff_mpv_common_init(s) < 0)
918  return -1;
919 
920  ff_fdctdsp_init(&s->fdsp, avctx);
921  ff_me_cmp_init(&s->mecc, avctx);
923  ff_pixblockdsp_init(&s->pdsp, avctx);
924  ff_qpeldsp_init(&s->qdsp);
925 
926  if (s->msmpeg4_version) {
928  2 * 2 * (MAX_LEVEL + 1) *
929  (MAX_RUN + 1) * 2 * sizeof(int), fail);
930  }
931  FF_ALLOCZ_OR_GOTO(s->avctx, s->avctx->stats_out, 256, fail);
932 
933  FF_ALLOCZ_OR_GOTO(s->avctx, s->q_intra_matrix, 64 * 32 * sizeof(int), fail);
934  FF_ALLOCZ_OR_GOTO(s->avctx, s->q_chroma_intra_matrix, 64 * 32 * sizeof(int), fail);
935  FF_ALLOCZ_OR_GOTO(s->avctx, s->q_inter_matrix, 64 * 32 * sizeof(int), fail);
936  FF_ALLOCZ_OR_GOTO(s->avctx, s->q_intra_matrix16, 64 * 32 * 2 * sizeof(uint16_t), fail);
937  FF_ALLOCZ_OR_GOTO(s->avctx, s->q_chroma_intra_matrix16, 64 * 32 * 2 * sizeof(uint16_t), fail);
938  FF_ALLOCZ_OR_GOTO(s->avctx, s->q_inter_matrix16, 64 * 32 * 2 * sizeof(uint16_t), fail);
940  MAX_PICTURE_COUNT * sizeof(Picture *), fail);
942  MAX_PICTURE_COUNT * sizeof(Picture *), fail);
943 
944 
945  if (s->noise_reduction) {
947  2 * 64 * sizeof(uint16_t), fail);
948  }
949 
951 
952  if ((CONFIG_H263P_ENCODER || CONFIG_RV20_ENCODER) && s->modified_quant)
954 
955  if (s->slice_context_count > 1) {
956  s->rtp_mode = 1;
957 
958  if (avctx->codec_id == AV_CODEC_ID_H263P)
959  s->h263_slice_structured = 1;
960  }
961 
962  s->quant_precision = 5;
963 
964 #if FF_API_PRIVATE_OPT
966  if (avctx->frame_skip_threshold)
968  if (avctx->frame_skip_factor)
970  if (avctx->frame_skip_exp)
971  s->frame_skip_exp = avctx->frame_skip_exp;
972  if (avctx->frame_skip_cmp != FF_CMP_DCTMAX)
973  s->frame_skip_cmp = avctx->frame_skip_cmp;
975 #endif
976 
979 
980  if (CONFIG_H261_ENCODER && s->out_format == FMT_H261)
982  if (CONFIG_H263_ENCODER && s->out_format == FMT_H263)
985  if ((ret = ff_msmpeg4_encode_init(s)) < 0)
986  return ret;
987  if ((CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
988  && s->out_format == FMT_MPEG1)
990 
991  /* init q matrix */
992  for (i = 0; i < 64; i++) {
993  int j = s->idsp.idct_permutation[i];
994  if (CONFIG_MPEG4_ENCODER && s->codec_id == AV_CODEC_ID_MPEG4 &&
995  s->mpeg_quant) {
998  } else if (s->out_format == FMT_H263 || s->out_format == FMT_H261) {
999  s->intra_matrix[j] =
1001  } else {
1002  /* MPEG-1/2 */
1003  s->chroma_intra_matrix[j] =
1006  }
1007  if (s->avctx->intra_matrix)
1008  s->intra_matrix[j] = s->avctx->intra_matrix[i];
1009  if (s->avctx->inter_matrix)
1010  s->inter_matrix[j] = s->avctx->inter_matrix[i];
1011  }
1012 
1013  /* precompute matrix */
1014  /* for mjpeg, we do include qscale in the matrix */
1015  if (s->out_format != FMT_MJPEG) {
1017  s->intra_matrix, s->intra_quant_bias, avctx->qmin,
1018  31, 1);
1020  s->inter_matrix, s->inter_quant_bias, avctx->qmin,
1021  31, 0);
1022  }
1023 
1024  if (ff_rate_control_init(s) < 0)
1025  return -1;
1026 
1028 #if CONFIG_LIBXVID
1029  ret = ff_xvid_rate_control_init(s);
1030 #else
1031  ret = AVERROR(ENOSYS);
1033  "Xvid ratecontrol requires libavcodec compiled with Xvid support.\n");
1034 #endif
1035  if (ret < 0)
1036  return ret;
1037  }
1038 
1039 #if FF_API_PRIVATE_OPT
1041  if (avctx->brd_scale)
1042  s->brd_scale = avctx->brd_scale;
1043 
1044  if (avctx->prediction_method)
1045  s->pred = avctx->prediction_method + 1;
1047 #endif
1048 
1049  if (s->b_frame_strategy == 2) {
1050  for (i = 0; i < s->max_b_frames + 2; i++) {
1051  s->tmp_frames[i] = av_frame_alloc();
1052  if (!s->tmp_frames[i])
1053  return AVERROR(ENOMEM);
1054 
1056  s->tmp_frames[i]->width = s->width >> s->brd_scale;
1057  s->tmp_frames[i]->height = s->height >> s->brd_scale;
1058 
1059  ret = av_frame_get_buffer(s->tmp_frames[i], 32);
1060  if (ret < 0)
1061  return ret;
1062  }
1063  }
1064 
1065  cpb_props = ff_add_cpb_side_data(avctx);
1066  if (!cpb_props)
1067  return AVERROR(ENOMEM);
1068  cpb_props->max_bitrate = avctx->rc_max_rate;
1069  cpb_props->min_bitrate = avctx->rc_min_rate;
1070  cpb_props->avg_bitrate = avctx->bit_rate;
1071  cpb_props->buffer_size = avctx->rc_buffer_size;
1072 
1073  return 0;
1074 fail:
1075  ff_mpv_encode_end(avctx);
1076  return AVERROR_UNKNOWN;
1077 }
1078 
1080 {
1081  MpegEncContext *s = avctx->priv_data;
1082  int i;
1083 
1085 #if CONFIG_LIBXVID
1088 #endif
1089 
1090  ff_mpv_common_end(s);
1091  if (CONFIG_MJPEG_ENCODER &&
1092  s->out_format == FMT_MJPEG)
1094 
1095  av_freep(&avctx->extradata);
1096 
1097  for (i = 0; i < FF_ARRAY_ELEMS(s->tmp_frames); i++)
1098  av_frame_free(&s->tmp_frames[i]);
1099 
1102 
1103  av_freep(&s->avctx->stats_out);
1104  av_freep(&s->ac_stats);
1105 
1110  av_freep(&s->q_intra_matrix);
1111  av_freep(&s->q_inter_matrix);
1114  av_freep(&s->input_picture);
1116  av_freep(&s->dct_offset);
1117 
1118  return 0;
1119 }
1120 
1121 static int get_sae(uint8_t *src, int ref, int stride)
1122 {
1123  int x,y;
1124  int acc = 0;
1125 
1126  for (y = 0; y < 16; y++) {
1127  for (x = 0; x < 16; x++) {
1128  acc += FFABS(src[x + y * stride] - ref);
1129  }
1130  }
1131 
1132  return acc;
1133 }
1134 
1136  uint8_t *ref, int stride)
1137 {
1138  int x, y, w, h;
1139  int acc = 0;
1140 
1141  w = s->width & ~15;
1142  h = s->height & ~15;
1143 
1144  for (y = 0; y < h; y += 16) {
1145  for (x = 0; x < w; x += 16) {
1146  int offset = x + y * stride;
1147  int sad = s->mecc.sad[0](NULL, src + offset, ref + offset,
1148  stride, 16);
1149  int mean = (s->mpvencdsp.pix_sum(src + offset, stride) + 128) >> 8;
1150  int sae = get_sae(src + offset, mean, stride);
1151 
1152  acc += sae + 500 < sad;
1153  }
1154  }
1155  return acc;
1156 }
1157 
1158 static int alloc_picture(MpegEncContext *s, Picture *pic, int shared)
1159 {
1160  return ff_alloc_picture(s->avctx, pic, &s->me, &s->sc, shared, 1,
1162  s->mb_stride, s->mb_width, s->mb_height, s->b8_stride,
1163  &s->linesize, &s->uvlinesize);
1164 }
1165 
1166 static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
1167 {
1168  Picture *pic = NULL;
1169  int64_t pts;
1170  int i, display_picture_number = 0, ret;
1171  int encoding_delay = s->max_b_frames ? s->max_b_frames
1172  : (s->low_delay ? 0 : 1);
1173  int flush_offset = 1;
1174  int direct = 1;
1175 
1176  if (pic_arg) {
1177  pts = pic_arg->pts;
1178  display_picture_number = s->input_picture_number++;
1179 
1180  if (pts != AV_NOPTS_VALUE) {
1181  if (s->user_specified_pts != AV_NOPTS_VALUE) {
1182  int64_t last = s->user_specified_pts;
1183 
1184  if (pts <= last) {
1186  "Invalid pts (%"PRId64") <= last (%"PRId64")\n",
1187  pts, last);
1188  return AVERROR(EINVAL);
1189  }
1190 
1191  if (!s->low_delay && display_picture_number == 1)
1192  s->dts_delta = pts - last;
1193  }
1194  s->user_specified_pts = pts;
1195  } else {
1196  if (s->user_specified_pts != AV_NOPTS_VALUE) {
1197  s->user_specified_pts =
1198  pts = s->user_specified_pts + 1;
1199  av_log(s->avctx, AV_LOG_INFO,
1200  "Warning: AVFrame.pts=? trying to guess (%"PRId64")\n",
1201  pts);
1202  } else {
1203  pts = display_picture_number;
1204  }
1205  }
1206 
1207  if (!pic_arg->buf[0] ||
1208  pic_arg->linesize[0] != s->linesize ||
1209  pic_arg->linesize[1] != s->uvlinesize ||
1210  pic_arg->linesize[2] != s->uvlinesize)
1211  direct = 0;
1212  if ((s->width & 15) || (s->height & 15))
1213  direct = 0;
1214  if (((intptr_t)(pic_arg->data[0])) & (STRIDE_ALIGN-1))
1215  direct = 0;
1216  if (s->linesize & (STRIDE_ALIGN-1))
1217  direct = 0;
1218 
1219  ff_dlog(s->avctx, "%d %d %"PTRDIFF_SPECIFIER" %"PTRDIFF_SPECIFIER"\n", pic_arg->linesize[0],
1220  pic_arg->linesize[1], s->linesize, s->uvlinesize);
1221 
1222  i = ff_find_unused_picture(s->avctx, s->picture, direct);
1223  if (i < 0)
1224  return i;
1225 
1226  pic = &s->picture[i];
1227  pic->reference = 3;
1228 
1229  if (direct) {
1230  if ((ret = av_frame_ref(pic->f, pic_arg)) < 0)
1231  return ret;
1232  }
1233  ret = alloc_picture(s, pic, direct);
1234  if (ret < 0)
1235  return ret;
1236 
1237  if (!direct) {
1238  if (pic->f->data[0] + INPLACE_OFFSET == pic_arg->data[0] &&
1239  pic->f->data[1] + INPLACE_OFFSET == pic_arg->data[1] &&
1240  pic->f->data[2] + INPLACE_OFFSET == pic_arg->data[2]) {
1241  // empty
1242  } else {
1243  int h_chroma_shift, v_chroma_shift;
1245  &h_chroma_shift,
1246  &v_chroma_shift);
1247 
1248  for (i = 0; i < 3; i++) {
1249  int src_stride = pic_arg->linesize[i];
1250  int dst_stride = i ? s->uvlinesize : s->linesize;
1251  int h_shift = i ? h_chroma_shift : 0;
1252  int v_shift = i ? v_chroma_shift : 0;
1253  int w = s->width >> h_shift;
1254  int h = s->height >> v_shift;
1255  uint8_t *src = pic_arg->data[i];
1256  uint8_t *dst = pic->f->data[i];
1257  int vpad = 16;
1258 
1259  if ( s->codec_id == AV_CODEC_ID_MPEG2VIDEO
1260  && !s->progressive_sequence
1261  && FFALIGN(s->height, 32) - s->height > 16)
1262  vpad = 32;
1263 
1264  if (!s->avctx->rc_buffer_size)
1265  dst += INPLACE_OFFSET;
1266 
1267  if (src_stride == dst_stride)
1268  memcpy(dst, src, src_stride * h);
1269  else {
1270  int h2 = h;
1271  uint8_t *dst2 = dst;
1272  while (h2--) {
1273  memcpy(dst2, src, w);
1274  dst2 += dst_stride;
1275  src += src_stride;
1276  }
1277  }
1278  if ((s->width & 15) || (s->height & (vpad-1))) {
1279  s->mpvencdsp.draw_edges(dst, dst_stride,
1280  w, h,
1281  16 >> h_shift,
1282  vpad >> v_shift,
1283  EDGE_BOTTOM);
1284  }
1285  }
1286  emms_c();
1287  }
1288  }
1289  ret = av_frame_copy_props(pic->f, pic_arg);
1290  if (ret < 0)
1291  return ret;
1292 
1293  pic->f->display_picture_number = display_picture_number;
1294  pic->f->pts = pts; // we set this here to avoid modifying pic_arg
1295  } else {
1296  /* Flushing: When we have not received enough input frames,
1297  * ensure s->input_picture[0] contains the first picture */
1298  for (flush_offset = 0; flush_offset < encoding_delay + 1; flush_offset++)
1299  if (s->input_picture[flush_offset])
1300  break;
1301 
1302  if (flush_offset <= 1)
1303  flush_offset = 1;
1304  else
1305  encoding_delay = encoding_delay - flush_offset + 1;
1306  }
1307 
1308  /* shift buffer entries */
1309  for (i = flush_offset; i < MAX_PICTURE_COUNT /*s->encoding_delay + 1*/; i++)
1310  s->input_picture[i - flush_offset] = s->input_picture[i];
1311 
1312  s->input_picture[encoding_delay] = (Picture*) pic;
1313 
1314  return 0;
1315 }
1316 
1318 {
1319  int x, y, plane;
1320  int score = 0;
1321  int64_t score64 = 0;
1322 
1323  for (plane = 0; plane < 3; plane++) {
1324  const int stride = p->f->linesize[plane];
1325  const int bw = plane ? 1 : 2;
1326  for (y = 0; y < s->mb_height * bw; y++) {
1327  for (x = 0; x < s->mb_width * bw; x++) {
1328  int off = p->shared ? 0 : 16;
1329  uint8_t *dptr = p->f->data[plane] + 8 * (x + y * stride) + off;
1330  uint8_t *rptr = ref->f->data[plane] + 8 * (x + y * stride);
1331  int v = s->mecc.frame_skip_cmp[1](s, dptr, rptr, stride, 8);
1332 
1333  switch (FFABS(s->frame_skip_exp)) {
1334  case 0: score = FFMAX(score, v); break;
1335  case 1: score += FFABS(v); break;
1336  case 2: score64 += v * (int64_t)v; break;
1337  case 3: score64 += FFABS(v * (int64_t)v * v); break;
1338  case 4: score64 += (v * (int64_t)v) * (v * (int64_t)v); break;
1339  }
1340  }
1341  }
1342  }
1343  emms_c();
1344 
1345  if (score)
1346  score64 = score;
1347  if (s->frame_skip_exp < 0)
1348  score64 = pow(score64 / (double)(s->mb_width * s->mb_height),
1349  -1.0/s->frame_skip_exp);
1350 
1351  if (score64 < s->frame_skip_threshold)
1352  return 1;
1353  if (score64 < ((s->frame_skip_factor * (int64_t) s->lambda) >> 8))
1354  return 1;
1355  return 0;
1356 }
1357 
1359 {
1360  AVPacket pkt = { 0 };
1361  int ret;
1362  int size = 0;
1363 
1364  av_init_packet(&pkt);
1365 
1366  ret = avcodec_send_frame(c, frame);
1367  if (ret < 0)
1368  return ret;
1369 
1370  do {
1371  ret = avcodec_receive_packet(c, &pkt);
1372  if (ret >= 0) {
1373  size += pkt.size;
1374  av_packet_unref(&pkt);
1375  } else if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
1376  return ret;
1377  } while (ret >= 0);
1378 
1379  return size;
1380 }
1381 
1383 {
1384  const AVCodec *codec = avcodec_find_encoder(s->avctx->codec_id);
1385  const int scale = s->brd_scale;
1386  int width = s->width >> scale;
1387  int height = s->height >> scale;
1388  int i, j, out_size, p_lambda, b_lambda, lambda2;
1389  int64_t best_rd = INT64_MAX;
1390  int best_b_count = -1;
1391  int ret = 0;
1392 
1393  av_assert0(scale >= 0 && scale <= 3);
1394 
1395  //emms_c();
1396  //s->next_picture_ptr->quality;
1397  p_lambda = s->last_lambda_for[AV_PICTURE_TYPE_P];
1398  //p_lambda * FFABS(s->avctx->b_quant_factor) + s->avctx->b_quant_offset;
1399  b_lambda = s->last_lambda_for[AV_PICTURE_TYPE_B];
1400  if (!b_lambda) // FIXME we should do this somewhere else
1401  b_lambda = p_lambda;
1402  lambda2 = (b_lambda * b_lambda + (1 << FF_LAMBDA_SHIFT) / 2) >>
1404 
1405  for (i = 0; i < s->max_b_frames + 2; i++) {
1406  Picture pre_input, *pre_input_ptr = i ? s->input_picture[i - 1] :
1407  s->next_picture_ptr;
1408  uint8_t *data[4];
1409 
1410  if (pre_input_ptr && (!i || s->input_picture[i - 1])) {
1411  pre_input = *pre_input_ptr;
1412  memcpy(data, pre_input_ptr->f->data, sizeof(data));
1413 
1414  if (!pre_input.shared && i) {
1415  data[0] += INPLACE_OFFSET;
1416  data[1] += INPLACE_OFFSET;
1417  data[2] += INPLACE_OFFSET;
1418  }
1419 
1420  s->mpvencdsp.shrink[scale](s->tmp_frames[i]->data[0],
1421  s->tmp_frames[i]->linesize[0],
1422  data[0],
1423  pre_input.f->linesize[0],
1424  width, height);
1425  s->mpvencdsp.shrink[scale](s->tmp_frames[i]->data[1],
1426  s->tmp_frames[i]->linesize[1],
1427  data[1],
1428  pre_input.f->linesize[1],
1429  width >> 1, height >> 1);
1430  s->mpvencdsp.shrink[scale](s->tmp_frames[i]->data[2],
1431  s->tmp_frames[i]->linesize[2],
1432  data[2],
1433  pre_input.f->linesize[2],
1434  width >> 1, height >> 1);
1435  }
1436  }
1437 
1438  for (j = 0; j < s->max_b_frames + 1; j++) {
1439  AVCodecContext *c;
1440  int64_t rd = 0;
1441 
1442  if (!s->input_picture[j])
1443  break;
1444 
1446  if (!c)
1447  return AVERROR(ENOMEM);
1448 
1449  c->width = width;
1450  c->height = height;
1452  c->flags |= s->avctx->flags & AV_CODEC_FLAG_QPEL;
1453  c->mb_decision = s->avctx->mb_decision;
1454  c->me_cmp = s->avctx->me_cmp;
1455  c->mb_cmp = s->avctx->mb_cmp;
1456  c->me_sub_cmp = s->avctx->me_sub_cmp;
1458  c->time_base = s->avctx->time_base;
1459  c->max_b_frames = s->max_b_frames;
1460 
1461  ret = avcodec_open2(c, codec, NULL);
1462  if (ret < 0)
1463  goto fail;
1464 
1466  s->tmp_frames[0]->quality = 1 * FF_QP2LAMBDA;
1467 
1468  out_size = encode_frame(c, s->tmp_frames[0]);
1469  if (out_size < 0) {
1470  ret = out_size;
1471  goto fail;
1472  }
1473 
1474  //rd += (out_size * lambda2) >> FF_LAMBDA_SHIFT;
1475 
1476  for (i = 0; i < s->max_b_frames + 1; i++) {
1477  int is_p = i % (j + 1) == j || i == s->max_b_frames;
1478 
1479  s->tmp_frames[i + 1]->pict_type = is_p ?
1481  s->tmp_frames[i + 1]->quality = is_p ? p_lambda : b_lambda;
1482 
1483  out_size = encode_frame(c, s->tmp_frames[i + 1]);
1484  if (out_size < 0) {
1485  ret = out_size;
1486  goto fail;
1487  }
1488 
1489  rd += (out_size * lambda2) >> (FF_LAMBDA_SHIFT - 3);
1490  }
1491 
1492  /* get the delayed frames */
1493  out_size = encode_frame(c, NULL);
1494  if (out_size < 0) {
1495  ret = out_size;
1496  goto fail;
1497  }
1498  rd += (out_size * lambda2) >> (FF_LAMBDA_SHIFT - 3);
1499 
1500  rd += c->error[0] + c->error[1] + c->error[2];
1501 
1502  if (rd < best_rd) {
1503  best_rd = rd;
1504  best_b_count = j;
1505  }
1506 
1507 fail:
1509  if (ret < 0)
1510  return ret;
1511  }
1512 
1513  return best_b_count;
1514 }
1515 
1517 {
1518  int i, ret;
1519 
1520  for (i = 1; i < MAX_PICTURE_COUNT; i++)
1522  s->reordered_input_picture[MAX_PICTURE_COUNT - 1] = NULL;
1523 
1524  /* set next picture type & ordering */
1525  if (!s->reordered_input_picture[0] && s->input_picture[0]) {
1526  if (s->frame_skip_threshold || s->frame_skip_factor) {
1527  if (s->picture_in_gop_number < s->gop_size &&
1528  s->next_picture_ptr &&
1529  skip_check(s, s->input_picture[0], s->next_picture_ptr)) {
1530  // FIXME check that the gop check above is +-1 correct
1531  av_frame_unref(s->input_picture[0]->f);
1532 
1533  ff_vbv_update(s, 0);
1534 
1535  goto no_output_pic;
1536  }
1537  }
1538 
1539  if (/*s->picture_in_gop_number >= s->gop_size ||*/
1540  !s->next_picture_ptr || s->intra_only) {
1541  s->reordered_input_picture[0] = s->input_picture[0];
1544  s->coded_picture_number++;
1545  } else {
1546  int b_frames = 0;
1547 
1548  if (s->avctx->flags & AV_CODEC_FLAG_PASS2) {
1549  for (i = 0; i < s->max_b_frames + 1; i++) {
1550  int pict_num = s->input_picture[0]->f->display_picture_number + i;
1551 
1552  if (pict_num >= s->rc_context.num_entries)
1553  break;
1554  if (!s->input_picture[i]) {
1555  s->rc_context.entry[pict_num - 1].new_pict_type = AV_PICTURE_TYPE_P;
1556  break;
1557  }
1558 
1559  s->input_picture[i]->f->pict_type =
1560  s->rc_context.entry[pict_num].new_pict_type;
1561  }
1562  }
1563 
1564  if (s->b_frame_strategy == 0) {
1565  b_frames = s->max_b_frames;
1566  while (b_frames && !s->input_picture[b_frames])
1567  b_frames--;
1568  } else if (s->b_frame_strategy == 1) {
1569  for (i = 1; i < s->max_b_frames + 1; i++) {
1570  if (s->input_picture[i] &&
1571  s->input_picture[i]->b_frame_score == 0) {
1572  s->input_picture[i]->b_frame_score =
1573  get_intra_count(s,
1574  s->input_picture[i ]->f->data[0],
1575  s->input_picture[i - 1]->f->data[0],
1576  s->linesize) + 1;
1577  }
1578  }
1579  for (i = 0; i < s->max_b_frames + 1; i++) {
1580  if (!s->input_picture[i] ||
1581  s->input_picture[i]->b_frame_score - 1 >
1582  s->mb_num / s->b_sensitivity)
1583  break;
1584  }
1585 
1586  b_frames = FFMAX(0, i - 1);
1587 
1588  /* reset scores */
1589  for (i = 0; i < b_frames + 1; i++) {
1590  s->input_picture[i]->b_frame_score = 0;
1591  }
1592  } else if (s->b_frame_strategy == 2) {
1593  b_frames = estimate_best_b_count(s);
1594  if (b_frames < 0)
1595  return b_frames;
1596  }
1597 
1598  emms_c();
1599 
1600  for (i = b_frames - 1; i >= 0; i--) {
1601  int type = s->input_picture[i]->f->pict_type;
1602  if (type && type != AV_PICTURE_TYPE_B)
1603  b_frames = i;
1604  }
1605  if (s->input_picture[b_frames]->f->pict_type == AV_PICTURE_TYPE_B &&
1606  b_frames == s->max_b_frames) {
1608  "warning, too many B-frames in a row\n");
1609  }
1610 
1611  if (s->picture_in_gop_number + b_frames >= s->gop_size) {
1612  if ((s->mpv_flags & FF_MPV_FLAG_STRICT_GOP) &&
1613  s->gop_size > s->picture_in_gop_number) {
1614  b_frames = s->gop_size - s->picture_in_gop_number - 1;
1615  } else {
1617  b_frames = 0;
1618  s->input_picture[b_frames]->f->pict_type = AV_PICTURE_TYPE_I;
1619  }
1620  }
1621 
1622  if ((s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP) && b_frames &&
1623  s->input_picture[b_frames]->f->pict_type == AV_PICTURE_TYPE_I)
1624  b_frames--;
1625 
1626  s->reordered_input_picture[0] = s->input_picture[b_frames];
1630  s->coded_picture_number++;
1631  for (i = 0; i < b_frames; i++) {
1632  s->reordered_input_picture[i + 1] = s->input_picture[i];
1633  s->reordered_input_picture[i + 1]->f->pict_type =
1636  s->coded_picture_number++;
1637  }
1638  }
1639  }
1640 no_output_pic:
1642 
1643  if (s->reordered_input_picture[0]) {
1646  AV_PICTURE_TYPE_B ? 3 : 0;
1647 
1648  if ((ret = ff_mpeg_ref_picture(s->avctx, &s->new_picture, s->reordered_input_picture[0])))
1649  return ret;
1650 
1651  if (s->reordered_input_picture[0]->shared || s->avctx->rc_buffer_size) {
1652  // input is a shared pix, so we can't modify it -> allocate a new
1653  // one & ensure that the shared one is reuseable
1654 
1655  Picture *pic;
1656  int i = ff_find_unused_picture(s->avctx, s->picture, 0);
1657  if (i < 0)
1658  return i;
1659  pic = &s->picture[i];
1660 
1662  if (alloc_picture(s, pic, 0) < 0) {
1663  return -1;
1664  }
1665 
1666  ret = av_frame_copy_props(pic->f, s->reordered_input_picture[0]->f);
1667  if (ret < 0)
1668  return ret;
1669 
1670  /* mark us unused / free shared pic */
1672  s->reordered_input_picture[0]->shared = 0;
1673 
1674  s->current_picture_ptr = pic;
1675  } else {
1676  // input is not a shared pix -> reuse buffer for current_pix
1678  for (i = 0; i < 4; i++) {
1679  s->new_picture.f->data[i] += INPLACE_OFFSET;
1680  }
1681  }
1683  if ((ret = ff_mpeg_ref_picture(s->avctx, &s->current_picture,
1684  s->current_picture_ptr)) < 0)
1685  return ret;
1686 
1688  }
1689  return 0;
1690 }
1691 
1692 static void frame_end(MpegEncContext *s)
1693 {
1694  if (s->unrestricted_mv &&
1696  !s->intra_only) {
1698  int hshift = desc->log2_chroma_w;
1699  int vshift = desc->log2_chroma_h;
1701  s->current_picture.f->linesize[0],
1702  s->h_edge_pos, s->v_edge_pos,
1704  EDGE_TOP | EDGE_BOTTOM);
1706  s->current_picture.f->linesize[1],
1707  s->h_edge_pos >> hshift,
1708  s->v_edge_pos >> vshift,
1709  EDGE_WIDTH >> hshift,
1710  EDGE_WIDTH >> vshift,
1711  EDGE_TOP | EDGE_BOTTOM);
1713  s->current_picture.f->linesize[2],
1714  s->h_edge_pos >> hshift,
1715  s->v_edge_pos >> vshift,
1716  EDGE_WIDTH >> hshift,
1717  EDGE_WIDTH >> vshift,
1718  EDGE_TOP | EDGE_BOTTOM);
1719  }
1720 
1721  emms_c();
1722 
1723  s->last_pict_type = s->pict_type;
1725  if (s->pict_type!= AV_PICTURE_TYPE_B)
1727 
1728 #if FF_API_CODED_FRAME
1733 #endif
1734 #if FF_API_ERROR_FRAME
1737  sizeof(s->current_picture.encoding_error));
1739 #endif
1740 }
1741 
1743 {
1744  int intra, i;
1745 
1746  for (intra = 0; intra < 2; intra++) {
1747  if (s->dct_count[intra] > (1 << 16)) {
1748  for (i = 0; i < 64; i++) {
1749  s->dct_error_sum[intra][i] >>= 1;
1750  }
1751  s->dct_count[intra] >>= 1;
1752  }
1753 
1754  for (i = 0; i < 64; i++) {
1755  s->dct_offset[intra][i] = (s->noise_reduction *
1756  s->dct_count[intra] +
1757  s->dct_error_sum[intra][i] / 2) /
1758  (s->dct_error_sum[intra][i] + 1);
1759  }
1760  }
1761 }
1762 
1764 {
1765  int ret;
1766 
1767  /* mark & release old frames */
1768  if (s->pict_type != AV_PICTURE_TYPE_B && s->last_picture_ptr &&
1770  s->last_picture_ptr->f->buf[0]) {
1772  }
1773 
1776 
1778  if ((ret = ff_mpeg_ref_picture(s->avctx, &s->current_picture,
1779  s->current_picture_ptr)) < 0)
1780  return ret;
1781 
1782  if (s->pict_type != AV_PICTURE_TYPE_B) {
1784  if (!s->droppable)
1786  }
1787 
1788  if (s->last_picture_ptr) {
1790  if (s->last_picture_ptr->f->buf[0] &&
1791  (ret = ff_mpeg_ref_picture(s->avctx, &s->last_picture,
1792  s->last_picture_ptr)) < 0)
1793  return ret;
1794  }
1795  if (s->next_picture_ptr) {
1797  if (s->next_picture_ptr->f->buf[0] &&
1798  (ret = ff_mpeg_ref_picture(s->avctx, &s->next_picture,
1799  s->next_picture_ptr)) < 0)
1800  return ret;
1801  }
1802 
1803  if (s->picture_structure!= PICT_FRAME) {
1804  int i;
1805  for (i = 0; i < 4; i++) {
1807  s->current_picture.f->data[i] +=
1808  s->current_picture.f->linesize[i];
1809  }
1810  s->current_picture.f->linesize[i] *= 2;
1811  s->last_picture.f->linesize[i] *= 2;
1812  s->next_picture.f->linesize[i] *= 2;
1813  }
1814  }
1815 
1816  if (s->mpeg_quant || s->codec_id == AV_CODEC_ID_MPEG2VIDEO) {
1819  } else if (s->out_format == FMT_H263 || s->out_format == FMT_H261) {
1822  } else {
1825  }
1826 
1827  if (s->dct_error_sum) {
1830  }
1831 
1832  return 0;
1833 }
1834 
1836  const AVFrame *pic_arg, int *got_packet)
1837 {
1838  MpegEncContext *s = avctx->priv_data;
1839  int i, stuffing_count, ret;
1840  int context_count = s->slice_context_count;
1841 
1842  s->vbv_ignore_qmax = 0;
1843 
1844  s->picture_in_gop_number++;
1845 
1846  if (load_input_picture(s, pic_arg) < 0)
1847  return -1;
1848 
1849  if (select_input_picture(s) < 0) {
1850  return -1;
1851  }
1852 
1853  /* output? */
1854  if (s->new_picture.f->data[0]) {
1855  int growing_buffer = context_count == 1 && !pkt->data && !s->data_partitioning;
1856  int pkt_size = growing_buffer ? FFMAX(s->mb_width*s->mb_height*64+10000, avctx->internal->byte_buffer_size) - AV_INPUT_BUFFER_PADDING_SIZE
1857  :
1858  s->mb_width*s->mb_height*(MAX_MB_BYTES+100)+10000;
1859  if ((ret = ff_alloc_packet2(avctx, pkt, pkt_size, 0)) < 0)
1860  return ret;
1861  if (s->mb_info) {
1864  s->mb_width*s->mb_height*12);
1865  s->prev_mb_info = s->last_mb_info = s->mb_info_size = 0;
1866  }
1867 
1868  for (i = 0; i < context_count; i++) {
1869  int start_y = s->thread_context[i]->start_mb_y;
1870  int end_y = s->thread_context[i]-> end_mb_y;
1871  int h = s->mb_height;
1872  uint8_t *start = pkt->data + (size_t)(((int64_t) pkt->size) * start_y / h);
1873  uint8_t *end = pkt->data + (size_t)(((int64_t) pkt->size) * end_y / h);
1874 
1875  init_put_bits(&s->thread_context[i]->pb, start, end - start);
1876  }
1877 
1878  s->pict_type = s->new_picture.f->pict_type;
1879  //emms_c();
1880  ret = frame_start(s);
1881  if (ret < 0)
1882  return ret;
1883 vbv_retry:
1884  ret = encode_picture(s, s->picture_number);
1885  if (growing_buffer) {
1886  av_assert0(s->pb.buf == avctx->internal->byte_buffer);
1887  pkt->data = s->pb.buf;
1888  pkt->size = avctx->internal->byte_buffer_size;
1889  }
1890  if (ret < 0)
1891  return -1;
1892 
1893 #if FF_API_STAT_BITS
1895  avctx->header_bits = s->header_bits;
1896  avctx->mv_bits = s->mv_bits;
1897  avctx->misc_bits = s->misc_bits;
1898  avctx->i_tex_bits = s->i_tex_bits;
1899  avctx->p_tex_bits = s->p_tex_bits;
1900  avctx->i_count = s->i_count;
1901  // FIXME f/b_count in avctx
1902  avctx->p_count = s->mb_num - s->i_count - s->skip_count;
1903  avctx->skip_count = s->skip_count;
1905 #endif
1906 
1907  frame_end(s);
1908 
1909  if (CONFIG_MJPEG_ENCODER && s->out_format == FMT_MJPEG)
1911 
1912  if (avctx->rc_buffer_size) {
1913  RateControlContext *rcc = &s->rc_context;
1914  int max_size = FFMAX(rcc->buffer_index * avctx->rc_max_available_vbv_use, rcc->buffer_index - 500);
1915  int hq = (s->avctx->mb_decision == FF_MB_DECISION_RD || s->avctx->trellis);
1916  int min_step = hq ? 1 : (1<<(FF_LAMBDA_SHIFT + 7))/139;
1917 
1918  if (put_bits_count(&s->pb) > max_size &&
1919  s->lambda < s->lmax) {
1920  s->next_lambda = FFMAX(s->lambda + min_step, s->lambda *
1921  (s->qscale + 1) / s->qscale);
1922  if (s->adaptive_quant) {
1923  int i;
1924  for (i = 0; i < s->mb_height * s->mb_stride; i++)
1925  s->lambda_table[i] =
1926  FFMAX(s->lambda_table[i] + min_step,
1927  s->lambda_table[i] * (s->qscale + 1) /
1928  s->qscale);
1929  }
1930  s->mb_skipped = 0; // done in frame_start()
1931  // done in encode_picture() so we must undo it
1932  if (s->pict_type == AV_PICTURE_TYPE_P) {
1933  if (s->flipflop_rounding ||
1934  s->codec_id == AV_CODEC_ID_H263P ||
1936  s->no_rounding ^= 1;
1937  }
1938  if (s->pict_type != AV_PICTURE_TYPE_B) {
1939  s->time_base = s->last_time_base;
1940  s->last_non_b_time = s->time - s->pp_time;
1941  }
1942  for (i = 0; i < context_count; i++) {
1943  PutBitContext *pb = &s->thread_context[i]->pb;
1944  init_put_bits(pb, pb->buf, pb->buf_end - pb->buf);
1945  }
1946  s->vbv_ignore_qmax = 1;
1947  av_log(s->avctx, AV_LOG_VERBOSE, "reencoding frame due to VBV\n");
1948  goto vbv_retry;
1949  }
1950 
1952  }
1953 
1954  if (s->avctx->flags & AV_CODEC_FLAG_PASS1)
1956 
1957  for (i = 0; i < 4; i++) {
1959  avctx->error[i] += s->current_picture_ptr->encoding_error[i];
1960  }
1963  (s->avctx->flags&AV_CODEC_FLAG_PSNR) ? 4 : 0,
1964  s->pict_type);
1965 
1966  if (s->avctx->flags & AV_CODEC_FLAG_PASS1)
1967  assert(put_bits_count(&s->pb) == s->header_bits + s->mv_bits +
1968  s->misc_bits + s->i_tex_bits +
1969  s->p_tex_bits);
1970  flush_put_bits(&s->pb);
1971  s->frame_bits = put_bits_count(&s->pb);
1972 
1973  stuffing_count = ff_vbv_update(s, s->frame_bits);
1974  s->stuffing_bits = 8*stuffing_count;
1975  if (stuffing_count) {
1976  if (s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb) >> 3) <
1977  stuffing_count + 50) {
1978  av_log(s->avctx, AV_LOG_ERROR, "stuffing too large\n");
1979  return -1;
1980  }
1981 
1982  switch (s->codec_id) {
1985  while (stuffing_count--) {
1986  put_bits(&s->pb, 8, 0);
1987  }
1988  break;
1989  case AV_CODEC_ID_MPEG4:
1990  put_bits(&s->pb, 16, 0);
1991  put_bits(&s->pb, 16, 0x1C3);
1992  stuffing_count -= 4;
1993  while (stuffing_count--) {
1994  put_bits(&s->pb, 8, 0xFF);
1995  }
1996  break;
1997  default:
1998  av_log(s->avctx, AV_LOG_ERROR, "vbv buffer overflow\n");
1999  }
2000  flush_put_bits(&s->pb);
2001  s->frame_bits = put_bits_count(&s->pb);
2002  }
2003 
2004  /* update MPEG-1/2 vbv_delay for CBR */
2005  if (s->avctx->rc_max_rate &&
2006  s->avctx->rc_min_rate == s->avctx->rc_max_rate &&
2007  s->out_format == FMT_MPEG1 &&
2008  90000LL * (avctx->rc_buffer_size - 1) <=
2009  s->avctx->rc_max_rate * 0xFFFFLL) {
2010  AVCPBProperties *props;
2011  size_t props_size;
2012 
2013  int vbv_delay, min_delay;
2014  double inbits = s->avctx->rc_max_rate *
2015  av_q2d(s->avctx->time_base);
2016  int minbits = s->frame_bits - 8 *
2017  (s->vbv_delay_ptr - s->pb.buf - 1);
2018  double bits = s->rc_context.buffer_index + minbits - inbits;
2019 
2020  if (bits < 0)
2022  "Internal error, negative bits\n");
2023 
2024  assert(s->repeat_first_field == 0);
2025 
2026  vbv_delay = bits * 90000 / s->avctx->rc_max_rate;
2027  min_delay = (minbits * 90000LL + s->avctx->rc_max_rate - 1) /
2028  s->avctx->rc_max_rate;
2029 
2030  vbv_delay = FFMAX(vbv_delay, min_delay);
2031 
2032  av_assert0(vbv_delay < 0xFFFF);
2033 
2034  s->vbv_delay_ptr[0] &= 0xF8;
2035  s->vbv_delay_ptr[0] |= vbv_delay >> 13;
2036  s->vbv_delay_ptr[1] = vbv_delay >> 5;
2037  s->vbv_delay_ptr[2] &= 0x07;
2038  s->vbv_delay_ptr[2] |= vbv_delay << 3;
2039 
2040  props = av_cpb_properties_alloc(&props_size);
2041  if (!props)
2042  return AVERROR(ENOMEM);
2043  props->vbv_delay = vbv_delay * 300;
2044 
2046  (uint8_t*)props, props_size);
2047  if (ret < 0) {
2048  av_freep(&props);
2049  return ret;
2050  }
2051 
2052 #if FF_API_VBV_DELAY
2054  avctx->vbv_delay = vbv_delay * 300;
2056 #endif
2057  }
2058  s->total_bits += s->frame_bits;
2059 #if FF_API_STAT_BITS
2061  avctx->frame_bits = s->frame_bits;
2063 #endif
2064 
2065 
2066  pkt->pts = s->current_picture.f->pts;
2067  if (!s->low_delay && s->pict_type != AV_PICTURE_TYPE_B) {
2069  pkt->dts = pkt->pts - s->dts_delta;
2070  else
2071  pkt->dts = s->reordered_pts;
2072  s->reordered_pts = pkt->pts;
2073  } else
2074  pkt->dts = pkt->pts;
2075  if (s->current_picture.f->key_frame)
2076  pkt->flags |= AV_PKT_FLAG_KEY;
2077  if (s->mb_info)
2079  } else {
2080  s->frame_bits = 0;
2081  }
2082 
2083  /* release non-reference frames */
2084  for (i = 0; i < MAX_PICTURE_COUNT; i++) {
2085  if (!s->picture[i].reference)
2086  ff_mpeg_unref_picture(s->avctx, &s->picture[i]);
2087  }
2088 
2089  av_assert1((s->frame_bits & 7) == 0);
2090 
2091  pkt->size = s->frame_bits / 8;
2092  *got_packet = !!pkt->size;
2093  return 0;
2094 }
2095 
2097  int n, int threshold)
2098 {
2099  static const char tab[64] = {
2100  3, 2, 2, 1, 1, 1, 1, 1,
2101  1, 1, 1, 1, 1, 1, 1, 1,
2102  1, 1, 1, 1, 1, 1, 1, 1,
2103  0, 0, 0, 0, 0, 0, 0, 0,
2104  0, 0, 0, 0, 0, 0, 0, 0,
2105  0, 0, 0, 0, 0, 0, 0, 0,
2106  0, 0, 0, 0, 0, 0, 0, 0,
2107  0, 0, 0, 0, 0, 0, 0, 0
2108  };
2109  int score = 0;
2110  int run = 0;
2111  int i;
2112  int16_t *block = s->block[n];
2113  const int last_index = s->block_last_index[n];
2114  int skip_dc;
2115 
2116  if (threshold < 0) {
2117  skip_dc = 0;
2118  threshold = -threshold;
2119  } else
2120  skip_dc = 1;
2121 
2122  /* Are all we could set to zero already zero? */
2123  if (last_index <= skip_dc - 1)
2124  return;
2125 
2126  for (i = 0; i <= last_index; i++) {
2127  const int j = s->intra_scantable.permutated[i];
2128  const int level = FFABS(block[j]);
2129  if (level == 1) {
2130  if (skip_dc && i == 0)
2131  continue;
2132  score += tab[run];
2133  run = 0;
2134  } else if (level > 1) {
2135  return;
2136  } else {
2137  run++;
2138  }
2139  }
2140  if (score >= threshold)
2141  return;
2142  for (i = skip_dc; i <= last_index; i++) {
2143  const int j = s->intra_scantable.permutated[i];
2144  block[j] = 0;
2145  }
2146  if (block[0])
2147  s->block_last_index[n] = 0;
2148  else
2149  s->block_last_index[n] = -1;
2150 }
2151 
2152 static inline void clip_coeffs(MpegEncContext *s, int16_t *block,
2153  int last_index)
2154 {
2155  int i;
2156  const int maxlevel = s->max_qcoeff;
2157  const int minlevel = s->min_qcoeff;
2158  int overflow = 0;
2159 
2160  if (s->mb_intra) {
2161  i = 1; // skip clipping of intra dc
2162  } else
2163  i = 0;
2164 
2165  for (; i <= last_index; i++) {
2166  const int j = s->intra_scantable.permutated[i];
2167  int level = block[j];
2168 
2169  if (level > maxlevel) {
2170  level = maxlevel;
2171  overflow++;
2172  } else if (level < minlevel) {
2173  level = minlevel;
2174  overflow++;
2175  }
2176 
2177  block[j] = level;
2178  }
2179 
2180  if (overflow && s->avctx->mb_decision == FF_MB_DECISION_SIMPLE)
2181  av_log(s->avctx, AV_LOG_INFO,
2182  "warning, clipping %d dct coefficients to %d..%d\n",
2183  overflow, minlevel, maxlevel);
2184 }
2185 
2186 static void get_visual_weight(int16_t *weight, uint8_t *ptr, int stride)
2187 {
2188  int x, y;
2189  // FIXME optimize
2190  for (y = 0; y < 8; y++) {
2191  for (x = 0; x < 8; x++) {
2192  int x2, y2;
2193  int sum = 0;
2194  int sqr = 0;
2195  int count = 0;
2196 
2197  for (y2 = FFMAX(y - 1, 0); y2 < FFMIN(8, y + 2); y2++) {
2198  for (x2= FFMAX(x - 1, 0); x2 < FFMIN(8, x + 2); x2++) {
2199  int v = ptr[x2 + y2 * stride];
2200  sum += v;
2201  sqr += v * v;
2202  count++;
2203  }
2204  }
2205  weight[x + 8 * y]= (36 * ff_sqrt(count * sqr - sum * sum)) / count;
2206  }
2207  }
2208 }
2209 
2211  int motion_x, int motion_y,
2212  int mb_block_height,
2213  int mb_block_width,
2214  int mb_block_count)
2215 {
2216  int16_t weight[12][64];
2217  int16_t orig[12][64];
2218  const int mb_x = s->mb_x;
2219  const int mb_y = s->mb_y;
2220  int i;
2221  int skip_dct[12];
2222  int dct_offset = s->linesize * 8; // default for progressive frames
2223  int uv_dct_offset = s->uvlinesize * 8;
2224  uint8_t *ptr_y, *ptr_cb, *ptr_cr;
2225  ptrdiff_t wrap_y, wrap_c;
2226 
2227  for (i = 0; i < mb_block_count; i++)
2228  skip_dct[i] = s->skipdct;
2229 
2230  if (s->adaptive_quant) {
2231  const int last_qp = s->qscale;
2232  const int mb_xy = mb_x + mb_y * s->mb_stride;
2233 
2234  s->lambda = s->lambda_table[mb_xy];
2235  update_qscale(s);
2236 
2237  if (!(s->mpv_flags & FF_MPV_FLAG_QP_RD)) {
2238  s->qscale = s->current_picture_ptr->qscale_table[mb_xy];
2239  s->dquant = s->qscale - last_qp;
2240 
2241  if (s->out_format == FMT_H263) {
2242  s->dquant = av_clip(s->dquant, -2, 2);
2243 
2244  if (s->codec_id == AV_CODEC_ID_MPEG4) {
2245  if (!s->mb_intra) {
2246  if (s->pict_type == AV_PICTURE_TYPE_B) {
2247  if (s->dquant & 1 || s->mv_dir & MV_DIRECT)
2248  s->dquant = 0;
2249  }
2250  if (s->mv_type == MV_TYPE_8X8)
2251  s->dquant = 0;
2252  }
2253  }
2254  }
2255  }
2256  ff_set_qscale(s, last_qp + s->dquant);
2257  } else if (s->mpv_flags & FF_MPV_FLAG_QP_RD)
2258  ff_set_qscale(s, s->qscale + s->dquant);
2259 
2260  wrap_y = s->linesize;
2261  wrap_c = s->uvlinesize;
2262  ptr_y = s->new_picture.f->data[0] +
2263  (mb_y * 16 * wrap_y) + mb_x * 16;
2264  ptr_cb = s->new_picture.f->data[1] +
2265  (mb_y * mb_block_height * wrap_c) + mb_x * mb_block_width;
2266  ptr_cr = s->new_picture.f->data[2] +
2267  (mb_y * mb_block_height * wrap_c) + mb_x * mb_block_width;
2268 
2269  if((mb_x * 16 + 16 > s->width || mb_y * 16 + 16 > s->height) && s->codec_id != AV_CODEC_ID_AMV){
2270  uint8_t *ebuf = s->sc.edge_emu_buffer + 38 * wrap_y;
2271  int cw = (s->width + s->chroma_x_shift) >> s->chroma_x_shift;
2272  int ch = (s->height + s->chroma_y_shift) >> s->chroma_y_shift;
2273  s->vdsp.emulated_edge_mc(ebuf, ptr_y,
2274  wrap_y, wrap_y,
2275  16, 16, mb_x * 16, mb_y * 16,
2276  s->width, s->height);
2277  ptr_y = ebuf;
2278  s->vdsp.emulated_edge_mc(ebuf + 16 * wrap_y, ptr_cb,
2279  wrap_c, wrap_c,
2280  mb_block_width, mb_block_height,
2281  mb_x * mb_block_width, mb_y * mb_block_height,
2282  cw, ch);
2283  ptr_cb = ebuf + 16 * wrap_y;
2284  s->vdsp.emulated_edge_mc(ebuf + 16 * wrap_y + 16, ptr_cr,
2285  wrap_c, wrap_c,
2286  mb_block_width, mb_block_height,
2287  mb_x * mb_block_width, mb_y * mb_block_height,
2288  cw, ch);
2289  ptr_cr = ebuf + 16 * wrap_y + 16;
2290  }
2291 
2292  if (s->mb_intra) {
2294  int progressive_score, interlaced_score;
2295 
2296  s->interlaced_dct = 0;
2297  progressive_score = s->mecc.ildct_cmp[4](s, ptr_y, NULL, wrap_y, 8) +
2298  s->mecc.ildct_cmp[4](s, ptr_y + wrap_y * 8,
2299  NULL, wrap_y, 8) - 400;
2300 
2301  if (progressive_score > 0) {
2302  interlaced_score = s->mecc.ildct_cmp[4](s, ptr_y,
2303  NULL, wrap_y * 2, 8) +
2304  s->mecc.ildct_cmp[4](s, ptr_y + wrap_y,
2305  NULL, wrap_y * 2, 8);
2306  if (progressive_score > interlaced_score) {
2307  s->interlaced_dct = 1;
2308 
2309  dct_offset = wrap_y;
2310  uv_dct_offset = wrap_c;
2311  wrap_y <<= 1;
2312  if (s->chroma_format == CHROMA_422 ||
2313  s->chroma_format == CHROMA_444)
2314  wrap_c <<= 1;
2315  }
2316  }
2317  }
2318 
2319  s->pdsp.get_pixels(s->block[0], ptr_y, wrap_y);
2320  s->pdsp.get_pixels(s->block[1], ptr_y + 8, wrap_y);
2321  s->pdsp.get_pixels(s->block[2], ptr_y + dct_offset, wrap_y);
2322  s->pdsp.get_pixels(s->block[3], ptr_y + dct_offset + 8, wrap_y);
2323 
2324  if (s->avctx->flags & AV_CODEC_FLAG_GRAY) {
2325  skip_dct[4] = 1;
2326  skip_dct[5] = 1;
2327  } else {
2328  s->pdsp.get_pixels(s->block[4], ptr_cb, wrap_c);
2329  s->pdsp.get_pixels(s->block[5], ptr_cr, wrap_c);
2330  if (!s->chroma_y_shift && s->chroma_x_shift) { /* 422 */
2331  s->pdsp.get_pixels(s->block[6], ptr_cb + uv_dct_offset, wrap_c);
2332  s->pdsp.get_pixels(s->block[7], ptr_cr + uv_dct_offset, wrap_c);
2333  } else if (!s->chroma_y_shift && !s->chroma_x_shift) { /* 444 */
2334  s->pdsp.get_pixels(s->block[ 6], ptr_cb + 8, wrap_c);
2335  s->pdsp.get_pixels(s->block[ 7], ptr_cr + 8, wrap_c);
2336  s->pdsp.get_pixels(s->block[ 8], ptr_cb + uv_dct_offset, wrap_c);
2337  s->pdsp.get_pixels(s->block[ 9], ptr_cr + uv_dct_offset, wrap_c);
2338  s->pdsp.get_pixels(s->block[10], ptr_cb + uv_dct_offset + 8, wrap_c);
2339  s->pdsp.get_pixels(s->block[11], ptr_cr + uv_dct_offset + 8, wrap_c);
2340  }
2341  }
2342  } else {
2343  op_pixels_func (*op_pix)[4];
2344  qpel_mc_func (*op_qpix)[16];
2345  uint8_t *dest_y, *dest_cb, *dest_cr;
2346 
2347  dest_y = s->dest[0];
2348  dest_cb = s->dest[1];
2349  dest_cr = s->dest[2];
2350 
2351  if ((!s->no_rounding) || s->pict_type == AV_PICTURE_TYPE_B) {
2352  op_pix = s->hdsp.put_pixels_tab;
2353  op_qpix = s->qdsp.put_qpel_pixels_tab;
2354  } else {
2355  op_pix = s->hdsp.put_no_rnd_pixels_tab;
2356  op_qpix = s->qdsp.put_no_rnd_qpel_pixels_tab;
2357  }
2358 
2359  if (s->mv_dir & MV_DIR_FORWARD) {
2360  ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 0,
2361  s->last_picture.f->data,
2362  op_pix, op_qpix);
2363  op_pix = s->hdsp.avg_pixels_tab;
2364  op_qpix = s->qdsp.avg_qpel_pixels_tab;
2365  }
2366  if (s->mv_dir & MV_DIR_BACKWARD) {
2367  ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 1,
2368  s->next_picture.f->data,
2369  op_pix, op_qpix);
2370  }
2371 
2373  int progressive_score, interlaced_score;
2374 
2375  s->interlaced_dct = 0;
2376  progressive_score = s->mecc.ildct_cmp[0](s, dest_y, ptr_y, wrap_y, 8) +
2377  s->mecc.ildct_cmp[0](s, dest_y + wrap_y * 8,
2378  ptr_y + wrap_y * 8,
2379  wrap_y, 8) - 400;
2380 
2381  if (s->avctx->ildct_cmp == FF_CMP_VSSE)
2382  progressive_score -= 400;
2383 
2384  if (progressive_score > 0) {
2385  interlaced_score = s->mecc.ildct_cmp[0](s, dest_y, ptr_y,
2386  wrap_y * 2, 8) +
2387  s->mecc.ildct_cmp[0](s, dest_y + wrap_y,
2388  ptr_y + wrap_y,
2389  wrap_y * 2, 8);
2390 
2391  if (progressive_score > interlaced_score) {
2392  s->interlaced_dct = 1;
2393 
2394  dct_offset = wrap_y;
2395  uv_dct_offset = wrap_c;
2396  wrap_y <<= 1;
2397  if (s->chroma_format == CHROMA_422)
2398  wrap_c <<= 1;
2399  }
2400  }
2401  }
2402 
2403  s->pdsp.diff_pixels(s->block[0], ptr_y, dest_y, wrap_y);
2404  s->pdsp.diff_pixels(s->block[1], ptr_y + 8, dest_y + 8, wrap_y);
2405  s->pdsp.diff_pixels(s->block[2], ptr_y + dct_offset,
2406  dest_y + dct_offset, wrap_y);
2407  s->pdsp.diff_pixels(s->block[3], ptr_y + dct_offset + 8,
2408  dest_y + dct_offset + 8, wrap_y);
2409 
2410  if (s->avctx->flags & AV_CODEC_FLAG_GRAY) {
2411  skip_dct[4] = 1;
2412  skip_dct[5] = 1;
2413  } else {
2414  s->pdsp.diff_pixels(s->block[4], ptr_cb, dest_cb, wrap_c);
2415  s->pdsp.diff_pixels(s->block[5], ptr_cr, dest_cr, wrap_c);
2416  if (!s->chroma_y_shift) { /* 422 */
2417  s->pdsp.diff_pixels(s->block[6], ptr_cb + uv_dct_offset,
2418  dest_cb + uv_dct_offset, wrap_c);
2419  s->pdsp.diff_pixels(s->block[7], ptr_cr + uv_dct_offset,
2420  dest_cr + uv_dct_offset, wrap_c);
2421  }
2422  }
2423  /* pre quantization */
2424  if (s->current_picture.mc_mb_var[s->mb_stride * mb_y + mb_x] <
2425  2 * s->qscale * s->qscale) {
2426  // FIXME optimize
2427  if (s->mecc.sad[1](NULL, ptr_y, dest_y, wrap_y, 8) < 20 * s->qscale)
2428  skip_dct[0] = 1;
2429  if (s->mecc.sad[1](NULL, ptr_y + 8, dest_y + 8, wrap_y, 8) < 20 * s->qscale)
2430  skip_dct[1] = 1;
2431  if (s->mecc.sad[1](NULL, ptr_y + dct_offset, dest_y + dct_offset,
2432  wrap_y, 8) < 20 * s->qscale)
2433  skip_dct[2] = 1;
2434  if (s->mecc.sad[1](NULL, ptr_y + dct_offset + 8, dest_y + dct_offset + 8,
2435  wrap_y, 8) < 20 * s->qscale)
2436  skip_dct[3] = 1;
2437  if (s->mecc.sad[1](NULL, ptr_cb, dest_cb, wrap_c, 8) < 20 * s->qscale)
2438  skip_dct[4] = 1;
2439  if (s->mecc.sad[1](NULL, ptr_cr, dest_cr, wrap_c, 8) < 20 * s->qscale)
2440  skip_dct[5] = 1;
2441  if (!s->chroma_y_shift) { /* 422 */
2442  if (s->mecc.sad[1](NULL, ptr_cb + uv_dct_offset,
2443  dest_cb + uv_dct_offset,
2444  wrap_c, 8) < 20 * s->qscale)
2445  skip_dct[6] = 1;
2446  if (s->mecc.sad[1](NULL, ptr_cr + uv_dct_offset,
2447  dest_cr + uv_dct_offset,
2448  wrap_c, 8) < 20 * s->qscale)
2449  skip_dct[7] = 1;
2450  }
2451  }
2452  }
2453 
2454  if (s->quantizer_noise_shaping) {
2455  if (!skip_dct[0])
2456  get_visual_weight(weight[0], ptr_y , wrap_y);
2457  if (!skip_dct[1])
2458  get_visual_weight(weight[1], ptr_y + 8, wrap_y);
2459  if (!skip_dct[2])
2460  get_visual_weight(weight[2], ptr_y + dct_offset , wrap_y);
2461  if (!skip_dct[3])
2462  get_visual_weight(weight[3], ptr_y + dct_offset + 8, wrap_y);
2463  if (!skip_dct[4])
2464  get_visual_weight(weight[4], ptr_cb , wrap_c);
2465  if (!skip_dct[5])
2466  get_visual_weight(weight[5], ptr_cr , wrap_c);
2467  if (!s->chroma_y_shift) { /* 422 */
2468  if (!skip_dct[6])
2469  get_visual_weight(weight[6], ptr_cb + uv_dct_offset,
2470  wrap_c);
2471  if (!skip_dct[7])
2472  get_visual_weight(weight[7], ptr_cr + uv_dct_offset,
2473  wrap_c);
2474  }
2475  memcpy(orig[0], s->block[0], sizeof(int16_t) * 64 * mb_block_count);
2476  }
2477 
2478  /* DCT & quantize */
2479  av_assert2(s->out_format != FMT_MJPEG || s->qscale == 8);
2480  {
2481  for (i = 0; i < mb_block_count; i++) {
2482  if (!skip_dct[i]) {
2483  int overflow;
2484  s->block_last_index[i] = s->dct_quantize(s, s->block[i], i, s->qscale, &overflow);
2485  // FIXME we could decide to change to quantizer instead of
2486  // clipping
2487  // JS: I don't think that would be a good idea it could lower
2488  // quality instead of improve it. Just INTRADC clipping
2489  // deserves changes in quantizer
2490  if (overflow)
2491  clip_coeffs(s, s->block[i], s->block_last_index[i]);
2492  } else
2493  s->block_last_index[i] = -1;
2494  }
2495  if (s->quantizer_noise_shaping) {
2496  for (i = 0; i < mb_block_count; i++) {
2497  if (!skip_dct[i]) {
2498  s->block_last_index[i] =
2499  dct_quantize_refine(s, s->block[i], weight[i],
2500  orig[i], i, s->qscale);
2501  }
2502  }
2503  }
2504 
2505  if (s->luma_elim_threshold && !s->mb_intra)
2506  for (i = 0; i < 4; i++)
2508  if (s->chroma_elim_threshold && !s->mb_intra)
2509  for (i = 4; i < mb_block_count; i++)
2511 
2512  if (s->mpv_flags & FF_MPV_FLAG_CBP_RD) {
2513  for (i = 0; i < mb_block_count; i++) {
2514  if (s->block_last_index[i] == -1)
2515  s->coded_score[i] = INT_MAX / 256;
2516  }
2517  }
2518  }
2519 
2520  if ((s->avctx->flags & AV_CODEC_FLAG_GRAY) && s->mb_intra) {
2521  s->block_last_index[4] =
2522  s->block_last_index[5] = 0;
2523  s->block[4][0] =
2524  s->block[5][0] = (1024 + s->c_dc_scale / 2) / s->c_dc_scale;
2525  if (!s->chroma_y_shift) { /* 422 / 444 */
2526  for (i=6; i<12; i++) {
2527  s->block_last_index[i] = 0;
2528  s->block[i][0] = s->block[4][0];
2529  }
2530  }
2531  }
2532 
2533  // non c quantize code returns incorrect block_last_index FIXME
2534  if (s->alternate_scan && s->dct_quantize != ff_dct_quantize_c) {
2535  for (i = 0; i < mb_block_count; i++) {
2536  int j;
2537  if (s->block_last_index[i] > 0) {
2538  for (j = 63; j > 0; j--) {
2539  if (s->block[i][s->intra_scantable.permutated[j]])
2540  break;
2541  }
2542  s->block_last_index[i] = j;
2543  }
2544  }
2545  }
2546 
2547  /* huffman encode */
2548  switch(s->codec_id){ //FIXME funct ptr could be slightly faster
2551  if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
2552  ff_mpeg1_encode_mb(s, s->block, motion_x, motion_y);
2553  break;
2554  case AV_CODEC_ID_MPEG4:
2555  if (CONFIG_MPEG4_ENCODER)
2556  ff_mpeg4_encode_mb(s, s->block, motion_x, motion_y);
2557  break;
2558  case AV_CODEC_ID_MSMPEG4V2:
2559  case AV_CODEC_ID_MSMPEG4V3:
2560  case AV_CODEC_ID_WMV1:
2562  ff_msmpeg4_encode_mb(s, s->block, motion_x, motion_y);
2563  break;
2564  case AV_CODEC_ID_WMV2:
2565  if (CONFIG_WMV2_ENCODER)
2566  ff_wmv2_encode_mb(s, s->block, motion_x, motion_y);
2567  break;
2568  case AV_CODEC_ID_H261:
2569  if (CONFIG_H261_ENCODER)
2570  ff_h261_encode_mb(s, s->block, motion_x, motion_y);
2571  break;
2572  case AV_CODEC_ID_H263:
2573  case AV_CODEC_ID_H263P:
2574  case AV_CODEC_ID_FLV1:
2575  case AV_CODEC_ID_RV10:
2576  case AV_CODEC_ID_RV20:
2577  if (CONFIG_H263_ENCODER)
2578  ff_h263_encode_mb(s, s->block, motion_x, motion_y);
2579  break;
2580  case AV_CODEC_ID_MJPEG:
2581  case AV_CODEC_ID_AMV:
2582  if (CONFIG_MJPEG_ENCODER)
2583  ff_mjpeg_encode_mb(s, s->block);
2584  break;
2585  default:
2586  av_assert1(0);
2587  }
2588 }
2589 
2590 static av_always_inline void encode_mb(MpegEncContext *s, int motion_x, int motion_y)
2591 {
2592  if (s->chroma_format == CHROMA_420) encode_mb_internal(s, motion_x, motion_y, 8, 8, 6);
2593  else if (s->chroma_format == CHROMA_422) encode_mb_internal(s, motion_x, motion_y, 16, 8, 8);
2594  else encode_mb_internal(s, motion_x, motion_y, 16, 16, 12);
2595 }
2596 
2598  int i;
2599 
2600  memcpy(d->last_mv, s->last_mv, 2*2*2*sizeof(int)); //FIXME is memcpy faster than a loop?
2601 
2602  /* MPEG-1 */
2603  d->mb_skip_run= s->mb_skip_run;
2604  for(i=0; i<3; i++)
2605  d->last_dc[i] = s->last_dc[i];
2606 
2607  /* statistics */
2608  d->mv_bits= s->mv_bits;
2609  d->i_tex_bits= s->i_tex_bits;
2610  d->p_tex_bits= s->p_tex_bits;
2611  d->i_count= s->i_count;
2612  d->f_count= s->f_count;
2613  d->b_count= s->b_count;
2614  d->skip_count= s->skip_count;
2615  d->misc_bits= s->misc_bits;
2616  d->last_bits= 0;
2617 
2618  d->mb_skipped= 0;
2619  d->qscale= s->qscale;
2620  d->dquant= s->dquant;
2621 
2623 }
2624 
2626  int i;
2627 
2628  memcpy(d->mv, s->mv, 2*4*2*sizeof(int));
2629  memcpy(d->last_mv, s->last_mv, 2*2*2*sizeof(int)); //FIXME is memcpy faster than a loop?
2630 
2631  /* MPEG-1 */
2632  d->mb_skip_run= s->mb_skip_run;
2633  for(i=0; i<3; i++)
2634  d->last_dc[i] = s->last_dc[i];
2635 
2636  /* statistics */
2637  d->mv_bits= s->mv_bits;
2638  d->i_tex_bits= s->i_tex_bits;
2639  d->p_tex_bits= s->p_tex_bits;
2640  d->i_count= s->i_count;
2641  d->f_count= s->f_count;
2642  d->b_count= s->b_count;
2643  d->skip_count= s->skip_count;
2644  d->misc_bits= s->misc_bits;
2645 
2646  d->mb_intra= s->mb_intra;
2647  d->mb_skipped= s->mb_skipped;
2648  d->mv_type= s->mv_type;
2649  d->mv_dir= s->mv_dir;
2650  d->pb= s->pb;
2651  if(s->data_partitioning){
2652  d->pb2= s->pb2;
2653  d->tex_pb= s->tex_pb;
2654  }
2655  d->block= s->block;
2656  for(i=0; i<8; i++)
2657  d->block_last_index[i]= s->block_last_index[i];
2659  d->qscale= s->qscale;
2660 
2662 }
2663 
2664 static inline void encode_mb_hq(MpegEncContext *s, MpegEncContext *backup, MpegEncContext *best, int type,
2666  int *dmin, int *next_block, int motion_x, int motion_y)
2667 {
2668  int score;
2669  uint8_t *dest_backup[3];
2670 
2671  copy_context_before_encode(s, backup, type);
2672 
2673  s->block= s->blocks[*next_block];
2674  s->pb= pb[*next_block];
2675  if(s->data_partitioning){
2676  s->pb2 = pb2 [*next_block];
2677  s->tex_pb= tex_pb[*next_block];
2678  }
2679 
2680  if(*next_block){
2681  memcpy(dest_backup, s->dest, sizeof(s->dest));
2682  s->dest[0] = s->sc.rd_scratchpad;
2683  s->dest[1] = s->sc.rd_scratchpad + 16*s->linesize;
2684  s->dest[2] = s->sc.rd_scratchpad + 16*s->linesize + 8;
2685  av_assert0(s->linesize >= 32); //FIXME
2686  }
2687 
2688  encode_mb(s, motion_x, motion_y);
2689 
2690  score= put_bits_count(&s->pb);
2691  if(s->data_partitioning){
2692  score+= put_bits_count(&s->pb2);
2693  score+= put_bits_count(&s->tex_pb);
2694  }
2695 
2696  if(s->avctx->mb_decision == FF_MB_DECISION_RD){
2698 
2699  score *= s->lambda2;
2700  score += sse_mb(s) << FF_LAMBDA_SHIFT;
2701  }
2702 
2703  if(*next_block){
2704  memcpy(s->dest, dest_backup, sizeof(s->dest));
2705  }
2706 
2707  if(score<*dmin){
2708  *dmin= score;
2709  *next_block^=1;
2710 
2711  copy_context_after_encode(best, s, type);
2712  }
2713 }
2714 
2715 static int sse(MpegEncContext *s, uint8_t *src1, uint8_t *src2, int w, int h, int stride){
2716  const uint32_t *sq = ff_square_tab + 256;
2717  int acc=0;
2718  int x,y;
2719 
2720  if(w==16 && h==16)
2721  return s->mecc.sse[0](NULL, src1, src2, stride, 16);
2722  else if(w==8 && h==8)
2723  return s->mecc.sse[1](NULL, src1, src2, stride, 8);
2724 
2725  for(y=0; y<h; y++){
2726  for(x=0; x<w; x++){
2727  acc+= sq[src1[x + y*stride] - src2[x + y*stride]];
2728  }
2729  }
2730 
2731  av_assert2(acc>=0);
2732 
2733  return acc;
2734 }
2735 
2736 static int sse_mb(MpegEncContext *s){
2737  int w= 16;
2738  int h= 16;
2739 
2740  if(s->mb_x*16 + 16 > s->width ) w= s->width - s->mb_x*16;
2741  if(s->mb_y*16 + 16 > s->height) h= s->height- s->mb_y*16;
2742 
2743  if(w==16 && h==16)
2744  if(s->avctx->mb_cmp == FF_CMP_NSSE){
2745  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) +
2746  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) +
2747  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);
2748  }else{
2749  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) +
2750  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) +
2751  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);
2752  }
2753  else
2754  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)
2755  +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)
2756  +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);
2757 }
2758 
2760  MpegEncContext *s= *(void**)arg;
2761 
2762 
2763  s->me.pre_pass=1;
2764  s->me.dia_size= s->avctx->pre_dia_size;
2765  s->first_slice_line=1;
2766  for(s->mb_y= s->end_mb_y-1; s->mb_y >= s->start_mb_y; s->mb_y--) {
2767  for(s->mb_x=s->mb_width-1; s->mb_x >=0 ;s->mb_x--) {
2769  }
2770  s->first_slice_line=0;
2771  }
2772 
2773  s->me.pre_pass=0;
2774 
2775  return 0;
2776 }
2777 
2779  MpegEncContext *s= *(void**)arg;
2780 
2782 
2783  s->me.dia_size= s->avctx->dia_size;
2784  s->first_slice_line=1;
2785  for(s->mb_y= s->start_mb_y; s->mb_y < s->end_mb_y; s->mb_y++) {
2786  s->mb_x=0; //for block init below
2788  for(s->mb_x=0; s->mb_x < s->mb_width; s->mb_x++) {
2789  s->block_index[0]+=2;
2790  s->block_index[1]+=2;
2791  s->block_index[2]+=2;
2792  s->block_index[3]+=2;
2793 
2794  /* compute motion vector & mb_type and store in context */
2797  else
2799  }
2800  s->first_slice_line=0;
2801  }
2802  return 0;
2803 }
2804 
2805 static int mb_var_thread(AVCodecContext *c, void *arg){
2806  MpegEncContext *s= *(void**)arg;
2807  int mb_x, mb_y;
2808 
2810 
2811  for(mb_y=s->start_mb_y; mb_y < s->end_mb_y; mb_y++) {
2812  for(mb_x=0; mb_x < s->mb_width; mb_x++) {
2813  int xx = mb_x * 16;
2814  int yy = mb_y * 16;
2815  uint8_t *pix = s->new_picture.f->data[0] + (yy * s->linesize) + xx;
2816  int varc;
2817  int sum = s->mpvencdsp.pix_sum(pix, s->linesize);
2818 
2819  varc = (s->mpvencdsp.pix_norm1(pix, s->linesize) -
2820  (((unsigned) sum * sum) >> 8) + 500 + 128) >> 8;
2821 
2822  s->current_picture.mb_var [s->mb_stride * mb_y + mb_x] = varc;
2823  s->current_picture.mb_mean[s->mb_stride * mb_y + mb_x] = (sum+128)>>8;
2824  s->me.mb_var_sum_temp += varc;
2825  }
2826  }
2827  return 0;
2828 }
2829 
2831  if(CONFIG_MPEG4_ENCODER && s->codec_id==AV_CODEC_ID_MPEG4){
2832  if(s->partitioned_frame){
2834  }
2835 
2836  ff_mpeg4_stuffing(&s->pb);
2837  }else if(CONFIG_MJPEG_ENCODER && s->out_format == FMT_MJPEG){
2839  }
2840 
2842  flush_put_bits(&s->pb);
2843 
2844  if ((s->avctx->flags & AV_CODEC_FLAG_PASS1) && !s->partitioned_frame)
2845  s->misc_bits+= get_bits_diff(s);
2846 }
2847 
2849 {
2850  uint8_t *ptr = s->mb_info_ptr + s->mb_info_size - 12;
2851  int offset = put_bits_count(&s->pb);
2852  int mba = s->mb_x + s->mb_width * (s->mb_y % s->gob_index);
2853  int gobn = s->mb_y / s->gob_index;
2854  int pred_x, pred_y;
2855  if (CONFIG_H263_ENCODER)
2856  ff_h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
2857  bytestream_put_le32(&ptr, offset);
2858  bytestream_put_byte(&ptr, s->qscale);
2859  bytestream_put_byte(&ptr, gobn);
2860  bytestream_put_le16(&ptr, mba);
2861  bytestream_put_byte(&ptr, pred_x); /* hmv1 */
2862  bytestream_put_byte(&ptr, pred_y); /* vmv1 */
2863  /* 4MV not implemented */
2864  bytestream_put_byte(&ptr, 0); /* hmv2 */
2865  bytestream_put_byte(&ptr, 0); /* vmv2 */
2866 }
2867 
2868 static void update_mb_info(MpegEncContext *s, int startcode)
2869 {
2870  if (!s->mb_info)
2871  return;
2872  if (put_bits_count(&s->pb) - s->prev_mb_info*8 >= s->mb_info*8) {
2873  s->mb_info_size += 12;
2874  s->prev_mb_info = s->last_mb_info;
2875  }
2876  if (startcode) {
2877  s->prev_mb_info = put_bits_count(&s->pb)/8;
2878  /* This might have incremented mb_info_size above, and we return without
2879  * actually writing any info into that slot yet. But in that case,
2880  * this will be called again at the start of the after writing the
2881  * start code, actually writing the mb info. */
2882  return;
2883  }
2884 
2885  s->last_mb_info = put_bits_count(&s->pb)/8;
2886  if (!s->mb_info_size)
2887  s->mb_info_size += 12;
2888  write_mb_info(s);
2889 }
2890 
2891 int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase)
2892 {
2893  if ( s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < threshold
2894  && s->slice_context_count == 1
2895  && s->pb.buf == s->avctx->internal->byte_buffer) {
2896  int lastgob_pos = s->ptr_lastgob - s->pb.buf;
2897  int vbv_pos = s->vbv_delay_ptr - s->pb.buf;
2898 
2899  uint8_t *new_buffer = NULL;
2900  int new_buffer_size = 0;
2901 
2902  if ((s->avctx->internal->byte_buffer_size + size_increase) >= INT_MAX/8) {
2903  av_log(s->avctx, AV_LOG_ERROR, "Cannot reallocate putbit buffer\n");
2904  return AVERROR(ENOMEM);
2905  }
2906 
2907  emms_c();
2908 
2909  av_fast_padded_malloc(&new_buffer, &new_buffer_size,
2910  s->avctx->internal->byte_buffer_size + size_increase);
2911  if (!new_buffer)
2912  return AVERROR(ENOMEM);
2913 
2914  memcpy(new_buffer, s->avctx->internal->byte_buffer, s->avctx->internal->byte_buffer_size);
2916  s->avctx->internal->byte_buffer = new_buffer;
2917  s->avctx->internal->byte_buffer_size = new_buffer_size;
2918  rebase_put_bits(&s->pb, new_buffer, new_buffer_size);
2919  s->ptr_lastgob = s->pb.buf + lastgob_pos;
2920  s->vbv_delay_ptr = s->pb.buf + vbv_pos;
2921  }
2922  if (s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < threshold)
2923  return AVERROR(EINVAL);
2924  return 0;
2925 }
2926 
2927 static int encode_thread(AVCodecContext *c, void *arg){
2928  MpegEncContext *s= *(void**)arg;
2929  int mb_x, mb_y;
2930  int chr_h= 16>>s->chroma_y_shift;
2931  int i, j;
2932  MpegEncContext best_s = { 0 }, backup_s;
2933  uint8_t bit_buf[2][MAX_MB_BYTES];
2934  uint8_t bit_buf2[2][MAX_MB_BYTES];
2935  uint8_t bit_buf_tex[2][MAX_MB_BYTES];
2936  PutBitContext pb[2], pb2[2], tex_pb[2];
2937 
2939 
2940  for(i=0; i<2; i++){
2941  init_put_bits(&pb [i], bit_buf [i], MAX_MB_BYTES);
2942  init_put_bits(&pb2 [i], bit_buf2 [i], MAX_MB_BYTES);
2943  init_put_bits(&tex_pb[i], bit_buf_tex[i], MAX_MB_BYTES);
2944  }
2945 
2946  s->last_bits= put_bits_count(&s->pb);
2947  s->mv_bits=0;
2948  s->misc_bits=0;
2949  s->i_tex_bits=0;
2950  s->p_tex_bits=0;
2951  s->i_count=0;
2952  s->f_count=0;
2953  s->b_count=0;
2954  s->skip_count=0;
2955 
2956  for(i=0; i<3; i++){
2957  /* init last dc values */
2958  /* note: quant matrix value (8) is implied here */
2959  s->last_dc[i] = 128 << s->intra_dc_precision;
2960 
2961  s->current_picture.encoding_error[i] = 0;
2962  }
2963  if(s->codec_id==AV_CODEC_ID_AMV){
2964  s->last_dc[0] = 128*8/13;
2965  s->last_dc[1] = 128*8/14;
2966  s->last_dc[2] = 128*8/14;
2967  }
2968  s->mb_skip_run = 0;
2969  memset(s->last_mv, 0, sizeof(s->last_mv));
2970 
2971  s->last_mv_dir = 0;
2972 
2973  switch(s->codec_id){
2974  case AV_CODEC_ID_H263:
2975  case AV_CODEC_ID_H263P:
2976  case AV_CODEC_ID_FLV1:
2977  if (CONFIG_H263_ENCODER)
2978  s->gob_index = H263_GOB_HEIGHT(s->height);
2979  break;
2980  case AV_CODEC_ID_MPEG4:
2981  if(CONFIG_MPEG4_ENCODER && s->partitioned_frame)
2983  break;
2984  }
2985 
2986  s->resync_mb_x=0;
2987  s->resync_mb_y=0;
2988  s->first_slice_line = 1;
2989  s->ptr_lastgob = s->pb.buf;
2990  for(mb_y= s->start_mb_y; mb_y < s->end_mb_y; mb_y++) {
2991  s->mb_x=0;
2992  s->mb_y= mb_y;
2993 
2994  ff_set_qscale(s, s->qscale);
2996 
2997  for(mb_x=0; mb_x < s->mb_width; mb_x++) {
2998  int xy= mb_y*s->mb_stride + mb_x; // removed const, H261 needs to adjust this
2999  int mb_type= s->mb_type[xy];
3000 // int d;
3001  int dmin= INT_MAX;
3002  int dir;
3003  int size_increase = s->avctx->internal->byte_buffer_size/4
3004  + s->mb_width*MAX_MB_BYTES;
3005 
3006  ff_mpv_reallocate_putbitbuffer(s, MAX_MB_BYTES, size_increase);
3007  if(s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < MAX_MB_BYTES){
3008  av_log(s->avctx, AV_LOG_ERROR, "encoded frame too large\n");
3009  return -1;
3010  }
3011  if(s->data_partitioning){
3012  if( s->pb2 .buf_end - s->pb2 .buf - (put_bits_count(&s-> pb2)>>3) < MAX_MB_BYTES
3013  || s->tex_pb.buf_end - s->tex_pb.buf - (put_bits_count(&s->tex_pb )>>3) < MAX_MB_BYTES){
3014  av_log(s->avctx, AV_LOG_ERROR, "encoded partitioned frame too large\n");
3015  return -1;
3016  }
3017  }
3018 
3019  s->mb_x = mb_x;
3020  s->mb_y = mb_y; // moved into loop, can get changed by H.261
3022 
3023  if(CONFIG_H261_ENCODER && s->codec_id == AV_CODEC_ID_H261){
3025  xy= s->mb_y*s->mb_stride + s->mb_x;
3026  mb_type= s->mb_type[xy];
3027  }
3028 
3029  /* write gob / video packet header */
3030  if(s->rtp_mode){
3031  int current_packet_size, is_gob_start;
3032 
3033  current_packet_size= ((put_bits_count(&s->pb)+7)>>3) - (s->ptr_lastgob - s->pb.buf);
3034 
3035  is_gob_start = s->rtp_payload_size &&
3036  current_packet_size >= s->rtp_payload_size &&
3037  mb_y + mb_x > 0;
3038 
3039  if(s->start_mb_y == mb_y && mb_y > 0 && mb_x==0) is_gob_start=1;
3040 
3041  switch(s->codec_id){
3042  case AV_CODEC_ID_H263:
3043  case AV_CODEC_ID_H263P:
3044  if(!s->h263_slice_structured)
3045  if(s->mb_x || s->mb_y%s->gob_index) is_gob_start=0;
3046  break;
3048  if(s->mb_x==0 && s->mb_y!=0) is_gob_start=1;
3050  if(s->mb_skip_run) is_gob_start=0;
3051  break;
3052  case AV_CODEC_ID_MJPEG:
3053  if(s->mb_x==0 && s->mb_y!=0) is_gob_start=1;
3054  break;
3055  }
3056 
3057  if(is_gob_start){
3058  if(s->start_mb_y != mb_y || mb_x!=0){
3059  write_slice_end(s);
3060 
3061  if(CONFIG_MPEG4_ENCODER && s->codec_id==AV_CODEC_ID_MPEG4 && s->partitioned_frame){
3063  }
3064  }
3065 
3066  av_assert2((put_bits_count(&s->pb)&7) == 0);
3067  current_packet_size= put_bits_ptr(&s->pb) - s->ptr_lastgob;
3068 
3069  if (s->error_rate && s->resync_mb_x + s->resync_mb_y > 0) {
3070  int r= put_bits_count(&s->pb)/8 + s->picture_number + 16 + s->mb_x + s->mb_y;
3071  int d = 100 / s->error_rate;
3072  if(r % d == 0){
3073  current_packet_size=0;
3074  s->pb.buf_ptr= s->ptr_lastgob;
3075  assert(put_bits_ptr(&s->pb) == s->ptr_lastgob);
3076  }
3077  }
3078 
3079 #if FF_API_RTP_CALLBACK
3081  if (s->avctx->rtp_callback){
3082  int number_mb = (mb_y - s->resync_mb_y)*s->mb_width + mb_x - s->resync_mb_x;
3083  s->avctx->rtp_callback(s->avctx, s->ptr_lastgob, current_packet_size, number_mb);
3084  }
3086 #endif
3087  update_mb_info(s, 1);
3088 
3089  switch(s->codec_id){
3090  case AV_CODEC_ID_MPEG4:
3091  if (CONFIG_MPEG4_ENCODER) {
3094  }
3095  break;
3098  if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER) {
3101  }
3102  break;
3103  case AV_CODEC_ID_H263:
3104  case AV_CODEC_ID_H263P:
3105  if (CONFIG_H263_ENCODER)
3106  ff_h263_encode_gob_header(s, mb_y);
3107  break;
3108  }
3109 
3110  if (s->avctx->flags & AV_CODEC_FLAG_PASS1) {
3111  int bits= put_bits_count(&s->pb);
3112  s->misc_bits+= bits - s->last_bits;
3113  s->last_bits= bits;
3114  }
3115 
3116  s->ptr_lastgob += current_packet_size;
3117  s->first_slice_line=1;
3118  s->resync_mb_x=mb_x;
3119  s->resync_mb_y=mb_y;
3120  }
3121  }
3122 
3123  if( (s->resync_mb_x == s->mb_x)
3124  && s->resync_mb_y+1 == s->mb_y){
3125  s->first_slice_line=0;
3126  }
3127 
3128  s->mb_skipped=0;
3129  s->dquant=0; //only for QP_RD
3130 
3131  update_mb_info(s, 0);
3132 
3133  if (mb_type & (mb_type-1) || (s->mpv_flags & FF_MPV_FLAG_QP_RD)) { // more than 1 MB type possible or FF_MPV_FLAG_QP_RD
3134  int next_block=0;
3135  int pb_bits_count, pb2_bits_count, tex_pb_bits_count;
3136 
3137  copy_context_before_encode(&backup_s, s, -1);
3138  backup_s.pb= s->pb;
3141  if(s->data_partitioning){
3142  backup_s.pb2= s->pb2;
3143  backup_s.tex_pb= s->tex_pb;
3144  }
3145 
3146  if(mb_type&CANDIDATE_MB_TYPE_INTER){
3147  s->mv_dir = MV_DIR_FORWARD;
3148  s->mv_type = MV_TYPE_16X16;
3149  s->mb_intra= 0;
3150  s->mv[0][0][0] = s->p_mv_table[xy][0];
3151  s->mv[0][0][1] = s->p_mv_table[xy][1];
3152  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER, pb, pb2, tex_pb,
3153  &dmin, &next_block, s->mv[0][0][0], s->mv[0][0][1]);
3154  }
3155  if(mb_type&CANDIDATE_MB_TYPE_INTER_I){
3156  s->mv_dir = MV_DIR_FORWARD;
3157  s->mv_type = MV_TYPE_FIELD;
3158  s->mb_intra= 0;
3159  for(i=0; i<2; i++){
3160  j= s->field_select[0][i] = s->p_field_select_table[i][xy];
3161  s->mv[0][i][0] = s->p_field_mv_table[i][j][xy][0];
3162  s->mv[0][i][1] = s->p_field_mv_table[i][j][xy][1];
3163  }
3164  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER_I, pb, pb2, tex_pb,
3165  &dmin, &next_block, 0, 0);
3166  }
3167  if(mb_type&CANDIDATE_MB_TYPE_SKIPPED){
3168  s->mv_dir = MV_DIR_FORWARD;
3169  s->mv_type = MV_TYPE_16X16;
3170  s->mb_intra= 0;
3171  s->mv[0][0][0] = 0;
3172  s->mv[0][0][1] = 0;
3173  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_SKIPPED, pb, pb2, tex_pb,
3174  &dmin, &next_block, s->mv[0][0][0], s->mv[0][0][1]);
3175  }
3176  if(mb_type&CANDIDATE_MB_TYPE_INTER4V){
3177  s->mv_dir = MV_DIR_FORWARD;
3178  s->mv_type = MV_TYPE_8X8;
3179  s->mb_intra= 0;
3180  for(i=0; i<4; i++){
3181  s->mv[0][i][0] = s->current_picture.motion_val[0][s->block_index[i]][0];
3182  s->mv[0][i][1] = s->current_picture.motion_val[0][s->block_index[i]][1];
3183  }
3184  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER4V, pb, pb2, tex_pb,
3185  &dmin, &next_block, 0, 0);
3186  }
3187  if(mb_type&CANDIDATE_MB_TYPE_FORWARD){
3188  s->mv_dir = MV_DIR_FORWARD;
3189  s->mv_type = MV_TYPE_16X16;
3190  s->mb_intra= 0;
3191  s->mv[0][0][0] = s->b_forw_mv_table[xy][0];
3192  s->mv[0][0][1] = s->b_forw_mv_table[xy][1];
3193  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_FORWARD, pb, pb2, tex_pb,
3194  &dmin, &next_block, s->mv[0][0][0], s->mv[0][0][1]);
3195  }
3196  if(mb_type&CANDIDATE_MB_TYPE_BACKWARD){
3197  s->mv_dir = MV_DIR_BACKWARD;
3198  s->mv_type = MV_TYPE_16X16;
3199  s->mb_intra= 0;
3200  s->mv[1][0][0] = s->b_back_mv_table[xy][0];
3201  s->mv[1][0][1] = s->b_back_mv_table[xy][1];
3202  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BACKWARD, pb, pb2, tex_pb,
3203  &dmin, &next_block, s->mv[1][0][0], s->mv[1][0][1]);
3204  }
3205  if(mb_type&CANDIDATE_MB_TYPE_BIDIR){
3207  s->mv_type = MV_TYPE_16X16;
3208  s->mb_intra= 0;
3209  s->mv[0][0][0] = s->b_bidir_forw_mv_table[xy][0];
3210  s->mv[0][0][1] = s->b_bidir_forw_mv_table[xy][1];
3211  s->mv[1][0][0] = s->b_bidir_back_mv_table[xy][0];
3212  s->mv[1][0][1] = s->b_bidir_back_mv_table[xy][1];
3213  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BIDIR, pb, pb2, tex_pb,
3214  &dmin, &next_block, 0, 0);
3215  }
3216  if(mb_type&CANDIDATE_MB_TYPE_FORWARD_I){
3217  s->mv_dir = MV_DIR_FORWARD;
3218  s->mv_type = MV_TYPE_FIELD;
3219  s->mb_intra= 0;
3220  for(i=0; i<2; i++){
3221  j= s->field_select[0][i] = s->b_field_select_table[0][i][xy];
3222  s->mv[0][i][0] = s->b_field_mv_table[0][i][j][xy][0];
3223  s->mv[0][i][1] = s->b_field_mv_table[0][i][j][xy][1];
3224  }
3225  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_FORWARD_I, pb, pb2, tex_pb,
3226  &dmin, &next_block, 0, 0);
3227  }
3228  if(mb_type&CANDIDATE_MB_TYPE_BACKWARD_I){
3229  s->mv_dir = MV_DIR_BACKWARD;
3230  s->mv_type = MV_TYPE_FIELD;
3231  s->mb_intra= 0;
3232  for(i=0; i<2; i++){
3233  j= s->field_select[1][i] = s->b_field_select_table[1][i][xy];
3234  s->mv[1][i][0] = s->b_field_mv_table[1][i][j][xy][0];
3235  s->mv[1][i][1] = s->b_field_mv_table[1][i][j][xy][1];
3236  }
3237  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BACKWARD_I, pb, pb2, tex_pb,
3238  &dmin, &next_block, 0, 0);
3239  }
3240  if(mb_type&CANDIDATE_MB_TYPE_BIDIR_I){
3242  s->mv_type = MV_TYPE_FIELD;
3243  s->mb_intra= 0;
3244  for(dir=0; dir<2; dir++){
3245  for(i=0; i<2; i++){
3246  j= s->field_select[dir][i] = s->b_field_select_table[dir][i][xy];
3247  s->mv[dir][i][0] = s->b_field_mv_table[dir][i][j][xy][0];
3248  s->mv[dir][i][1] = s->b_field_mv_table[dir][i][j][xy][1];
3249  }
3250  }
3251  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_BIDIR_I, pb, pb2, tex_pb,
3252  &dmin, &next_block, 0, 0);
3253  }
3254  if(mb_type&CANDIDATE_MB_TYPE_INTRA){
3255  s->mv_dir = 0;
3256  s->mv_type = MV_TYPE_16X16;
3257  s->mb_intra= 1;
3258  s->mv[0][0][0] = 0;
3259  s->mv[0][0][1] = 0;
3260  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTRA, pb, pb2, tex_pb,
3261  &dmin, &next_block, 0, 0);
3262  if(s->h263_pred || s->h263_aic){
3263  if(best_s.mb_intra)
3264  s->mbintra_table[mb_x + mb_y*s->mb_stride]=1;
3265  else
3266  ff_clean_intra_table_entries(s); //old mode?
3267  }
3268  }
3269 
3270  if ((s->mpv_flags & FF_MPV_FLAG_QP_RD) && dmin < INT_MAX) {
3271  if(best_s.mv_type==MV_TYPE_16X16){ //FIXME move 4mv after QPRD
3272  const int last_qp= backup_s.qscale;
3273  int qpi, qp, dc[6];
3274  int16_t ac[6][16];
3275  const int mvdir= (best_s.mv_dir&MV_DIR_BACKWARD) ? 1 : 0;
3276  static const int dquant_tab[4]={-1,1,-2,2};
3277  int storecoefs = s->mb_intra && s->dc_val[0];
3278 
3279  av_assert2(backup_s.dquant == 0);
3280 
3281  //FIXME intra
3282  s->mv_dir= best_s.mv_dir;
3283  s->mv_type = MV_TYPE_16X16;
3284  s->mb_intra= best_s.mb_intra;
3285  s->mv[0][0][0] = best_s.mv[0][0][0];
3286  s->mv[0][0][1] = best_s.mv[0][0][1];
3287  s->mv[1][0][0] = best_s.mv[1][0][0];
3288  s->mv[1][0][1] = best_s.mv[1][0][1];
3289 
3290  qpi = s->pict_type == AV_PICTURE_TYPE_B ? 2 : 0;
3291  for(; qpi<4; qpi++){
3292  int dquant= dquant_tab[qpi];
3293  qp= last_qp + dquant;
3294  if(qp < s->avctx->qmin || qp > s->avctx->qmax)
3295  continue;
3296  backup_s.dquant= dquant;
3297  if(storecoefs){
3298  for(i=0; i<6; i++){
3299  dc[i]= s->dc_val[0][ s->block_index[i] ];
3300  memcpy(ac[i], s->ac_val[0][s->block_index[i]], sizeof(int16_t)*16);
3301  }
3302  }
3303 
3304  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER /* wrong but unused */, pb, pb2, tex_pb,
3305  &dmin, &next_block, s->mv[mvdir][0][0], s->mv[mvdir][0][1]);
3306  if(best_s.qscale != qp){
3307  if(storecoefs){
3308  for(i=0; i<6; i++){
3309  s->dc_val[0][ s->block_index[i] ]= dc[i];
3310  memcpy(s->ac_val[0][s->block_index[i]], ac[i], sizeof(int16_t)*16);
3311  }
3312  }
3313  }
3314  }
3315  }
3316  }
3317  if(CONFIG_MPEG4_ENCODER && mb_type&CANDIDATE_MB_TYPE_DIRECT){
3318  int mx= s->b_direct_mv_table[xy][0];
3319  int my= s->b_direct_mv_table[xy][1];
3320 
3321  backup_s.dquant = 0;
3323  s->mb_intra= 0;
3324  ff_mpeg4_set_direct_mv(s, mx, my);
3325  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb,
3326  &dmin, &next_block, mx, my);
3327  }
3328  if(CONFIG_MPEG4_ENCODER && mb_type&CANDIDATE_MB_TYPE_DIRECT0){
3329  backup_s.dquant = 0;
3331  s->mb_intra= 0;
3332  ff_mpeg4_set_direct_mv(s, 0, 0);
3333  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_DIRECT, pb, pb2, tex_pb,
3334  &dmin, &next_block, 0, 0);
3335  }
3336  if (!best_s.mb_intra && s->mpv_flags & FF_MPV_FLAG_SKIP_RD) {
3337  int coded=0;
3338  for(i=0; i<6; i++)
3339  coded |= s->block_last_index[i];
3340  if(coded){
3341  int mx,my;
3342  memcpy(s->mv, best_s.mv, sizeof(s->mv));
3343  if(CONFIG_MPEG4_ENCODER && best_s.mv_dir & MV_DIRECT){
3344  mx=my=0; //FIXME find the one we actually used
3345  ff_mpeg4_set_direct_mv(s, mx, my);
3346  }else if(best_s.mv_dir&MV_DIR_BACKWARD){
3347  mx= s->mv[1][0][0];
3348  my= s->mv[1][0][1];
3349  }else{
3350  mx= s->mv[0][0][0];
3351  my= s->mv[0][0][1];
3352  }
3353 
3354  s->mv_dir= best_s.mv_dir;
3355  s->mv_type = best_s.mv_type;
3356  s->mb_intra= 0;
3357 /* s->mv[0][0][0] = best_s.mv[0][0][0];
3358  s->mv[0][0][1] = best_s.mv[0][0][1];
3359  s->mv[1][0][0] = best_s.mv[1][0][0];
3360  s->mv[1][0][1] = best_s.mv[1][0][1];*/
3361  backup_s.dquant= 0;
3362  s->skipdct=1;
3363  encode_mb_hq(s, &backup_s, &best_s, CANDIDATE_MB_TYPE_INTER /* wrong but unused */, pb, pb2, tex_pb,
3364  &dmin, &next_block, mx, my);
3365  s->skipdct=0;
3366  }
3367  }
3368 
3369  s->current_picture.qscale_table[xy] = best_s.qscale;
3370 
3371  copy_context_after_encode(s, &best_s, -1);
3372 
3373  pb_bits_count= put_bits_count(&s->pb);
3374  flush_put_bits(&s->pb);
3375  avpriv_copy_bits(&backup_s.pb, bit_buf[next_block^1], pb_bits_count);
3376  s->pb= backup_s.pb;
3377 
3378  if(s->data_partitioning){
3379  pb2_bits_count= put_bits_count(&s->pb2);
3380  flush_put_bits(&s->pb2);
3381  avpriv_copy_bits(&backup_s.pb2, bit_buf2[next_block^1], pb2_bits_count);
3382  s->pb2= backup_s.pb2;
3383 
3384  tex_pb_bits_count= put_bits_count(&s->tex_pb);
3385  flush_put_bits(&s->tex_pb);
3386  avpriv_copy_bits(&backup_s.tex_pb, bit_buf_tex[next_block^1], tex_pb_bits_count);
3387  s->tex_pb= backup_s.tex_pb;
3388  }
3389  s->last_bits= put_bits_count(&s->pb);
3390 
3391  if (CONFIG_H263_ENCODER &&
3394 
3395  if(next_block==0){ //FIXME 16 vs linesize16
3396  s->hdsp.put_pixels_tab[0][0](s->dest[0], s->sc.rd_scratchpad , s->linesize ,16);
3397  s->hdsp.put_pixels_tab[1][0](s->dest[1], s->sc.rd_scratchpad + 16*s->linesize , s->uvlinesize, 8);
3398  s->hdsp.put_pixels_tab[1][0](s->dest[2], s->sc.rd_scratchpad + 16*s->linesize + 8, s->uvlinesize, 8);
3399  }
3400 
3403  } else {
3404  int motion_x = 0, motion_y = 0;
3406  // only one MB-Type possible
3407 
3408  switch(mb_type){
3410  s->mv_dir = 0;
3411  s->mb_intra= 1;
3412  motion_x= s->mv[0][0][0] = 0;
3413  motion_y= s->mv[0][0][1] = 0;
3414  break;
3416  s->mv_dir = MV_DIR_FORWARD;
3417  s->mb_intra= 0;
3418  motion_x= s->mv[0][0][0] = s->p_mv_table[xy][0];
3419  motion_y= s->mv[0][0][1] = s->p_mv_table[xy][1];
3420  break;
3422  s->mv_dir = MV_DIR_FORWARD;
3423  s->mv_type = MV_TYPE_FIELD;
3424  s->mb_intra= 0;
3425  for(i=0; i<2; i++){
3426  j= s->field_select[0][i] = s->p_field_select_table[i][xy];
3427  s->mv[0][i][0] = s->p_field_mv_table[i][j][xy][0];
3428  s->mv[0][i][1] = s->p_field_mv_table[i][j][xy][1];
3429  }
3430  break;
3432  s->mv_dir = MV_DIR_FORWARD;
3433  s->mv_type = MV_TYPE_8X8;
3434  s->mb_intra= 0;
3435  for(i=0; i<4; i++){
3436  s->mv[0][i][0] = s->current_picture.motion_val[0][s->block_index[i]][0];
3437  s->mv[0][i][1] = s->current_picture.motion_val[0][s->block_index[i]][1];
3438  }
3439  break;
3441  if (CONFIG_MPEG4_ENCODER) {
3443  s->mb_intra= 0;
3444  motion_x=s->b_direct_mv_table[xy][0];
3445  motion_y=s->b_direct_mv_table[xy][1];
3446  ff_mpeg4_set_direct_mv(s, motion_x, motion_y);
3447  }
3448  break;
3450  if (CONFIG_MPEG4_ENCODER) {
3452  s->mb_intra= 0;
3453  ff_mpeg4_set_direct_mv(s, 0, 0);
3454  }
3455  break;
3458  s->mb_intra= 0;
3459  s->mv[0][0][0] = s->b_bidir_forw_mv_table[xy][0];
3460  s->mv[0][0][1] = s->b_bidir_forw_mv_table[xy][1];
3461  s->mv[1][0][0] = s->b_bidir_back_mv_table[xy][0];
3462  s->mv[1][0][1] = s->b_bidir_back_mv_table[xy][1];
3463  break;
3465  s->mv_dir = MV_DIR_BACKWARD;
3466  s->mb_intra= 0;
3467  motion_x= s->mv[1][0][0] = s->b_back_mv_table[xy][0];
3468  motion_y= s->mv[1][0][1] = s->b_back_mv_table[xy][1];
3469  break;
3471  s->mv_dir = MV_DIR_FORWARD;
3472  s->mb_intra= 0;
3473  motion_x= s->mv[0][0][0] = s->b_forw_mv_table[xy][0];
3474  motion_y= s->mv[0][0][1] = s->b_forw_mv_table[xy][1];
3475  break;
3477  s->mv_dir = MV_DIR_FORWARD;
3478  s->mv_type = MV_TYPE_FIELD;
3479  s->mb_intra= 0;
3480  for(i=0; i<2; i++){
3481  j= s->field_select[0][i] = s->b_field_select_table[0][i][xy];
3482  s->mv[0][i][0] = s->b_field_mv_table[0][i][j][xy][0];
3483  s->mv[0][i][1] = s->b_field_mv_table[0][i][j][xy][1];
3484  }
3485  break;
3487  s->mv_dir = MV_DIR_BACKWARD;
3488  s->mv_type = MV_TYPE_FIELD;
3489  s->mb_intra= 0;
3490  for(i=0; i<2; i++){
3491  j= s->field_select[1][i] = s->b_field_select_table[1][i][xy];
3492  s->mv[1][i][0] = s->b_field_mv_table[1][i][j][xy][0];
3493  s->mv[1][i][1] = s->b_field_mv_table[1][i][j][xy][1];
3494  }
3495  break;
3498  s->mv_type = MV_TYPE_FIELD;
3499  s->mb_intra= 0;
3500  for(dir=0; dir<2; dir++){
3501  for(i=0; i<2; i++){
3502  j= s->field_select[dir][i] = s->b_field_select_table[dir][i][xy];
3503  s->mv[dir][i][0] = s->b_field_mv_table[dir][i][j][xy][0];
3504  s->mv[dir][i][1] = s->b_field_mv_table[dir][i][j][xy][1];
3505  }
3506  }
3507  break;
3508  default:
3509  av_log(s->avctx, AV_LOG_ERROR, "illegal MB type\n");
3510  }
3511 
3512  encode_mb(s, motion_x, motion_y);
3513 
3514  // RAL: Update last macroblock type
3515  s->last_mv_dir = s->mv_dir;
3516 
3517  if (CONFIG_H263_ENCODER &&
3520 
3522  }
3523 
3524  /* clean the MV table in IPS frames for direct mode in B-frames */
3525  if(s->mb_intra /* && I,P,S_TYPE */){
3526  s->p_mv_table[xy][0]=0;
3527  s->p_mv_table[xy][1]=0;
3528  }
3529 
3530  if (s->avctx->flags & AV_CODEC_FLAG_PSNR) {
3531  int w= 16;
3532  int h= 16;
3533 
3534  if(s->mb_x*16 + 16 > s->width ) w= s->width - s->mb_x*16;
3535  if(s->mb_y*16 + 16 > s->height) h= s->height- s->mb_y*16;
3536 
3538  s, s->new_picture.f->data[0] + s->mb_x*16 + s->mb_y*s->linesize*16,
3539  s->dest[0], w, h, s->linesize);
3541  s, s->new_picture.f->data[1] + s->mb_x*8 + s->mb_y*s->uvlinesize*chr_h,
3542  s->dest[1], w>>1, h>>s->chroma_y_shift, s->uvlinesize);
3544  s, s->new_picture.f->data[2] + s->mb_x*8 + s->mb_y*s->uvlinesize*chr_h,
3545  s->dest[2], w>>1, h>>s->chroma_y_shift, s->uvlinesize);
3546  }
3547  if(s->loop_filter){
3548  if(CONFIG_H263_ENCODER && s->out_format == FMT_H263)
3550  }
3551  ff_dlog(s->avctx, "MB %d %d bits\n",
3552  s->mb_x + s->mb_y * s->mb_stride, put_bits_count(&s->pb));
3553  }
3554  }
3555 
3556  //not beautiful here but we must write it before flushing so it has to be here
3559 
3560  write_slice_end(s);
3561 
3562 #if FF_API_RTP_CALLBACK
3564  /* Send the last GOB if RTP */
3565  if (s->avctx->rtp_callback) {
3566  int number_mb = (mb_y - s->resync_mb_y)*s->mb_width - s->resync_mb_x;
3567  int pdif = put_bits_ptr(&s->pb) - s->ptr_lastgob;
3568  /* Call the RTP callback to send the last GOB */
3569  emms_c();
3570  s->avctx->rtp_callback(s->avctx, s->ptr_lastgob, pdif, number_mb);
3571  }
3573 #endif
3574 
3575  return 0;
3576 }
3577 
3578 #define MERGE(field) dst->field += src->field; src->field=0
3580  MERGE(me.scene_change_score);
3581  MERGE(me.mc_mb_var_sum_temp);
3582  MERGE(me.mb_var_sum_temp);
3583 }
3584 
3586  int i;
3587 
3588  MERGE(dct_count[0]); //note, the other dct vars are not part of the context
3589  MERGE(dct_count[1]);
3590  MERGE(mv_bits);
3591  MERGE(i_tex_bits);
3592  MERGE(p_tex_bits);
3593  MERGE(i_count);
3594  MERGE(f_count);
3595  MERGE(b_count);
3596  MERGE(skip_count);
3597  MERGE(misc_bits);
3598  MERGE(er.error_count);
3603 
3604  if (dst->noise_reduction){
3605  for(i=0; i<64; i++){
3606  MERGE(dct_error_sum[0][i]);
3607  MERGE(dct_error_sum[1][i]);
3608  }
3609  }
3610 
3611  assert(put_bits_count(&src->pb) % 8 ==0);
3612  assert(put_bits_count(&dst->pb) % 8 ==0);
3613  avpriv_copy_bits(&dst->pb, src->pb.buf, put_bits_count(&src->pb));
3614  flush_put_bits(&dst->pb);
3615 }
3616 
3617 static int estimate_qp(MpegEncContext *s, int dry_run){
3618  if (s->next_lambda){
3621  if(!dry_run) s->next_lambda= 0;
3622  } else if (!s->fixed_qscale) {
3623  int quality;
3624 #if CONFIG_LIBXVID
3626  quality = ff_xvid_rate_estimate_qscale(s, dry_run);
3627  else
3628 #endif
3629  quality = ff_rate_estimate_qscale(s, dry_run);
3631  s->current_picture.f->quality = quality;
3632  if (s->current_picture.f->quality < 0)
3633  return -1;
3634  }
3635 
3636  if(s->adaptive_quant){
3637  switch(s->codec_id){
3638  case AV_CODEC_ID_MPEG4:
3639  if (CONFIG_MPEG4_ENCODER)
3641  break;
3642  case AV_CODEC_ID_H263:
3643  case AV_CODEC_ID_H263P:
3644  case AV_CODEC_ID_FLV1:
3645  if (CONFIG_H263_ENCODER)
3647  break;
3648  default:
3649  ff_init_qscale_tab(s);
3650  }
3651 
3652  s->lambda= s->lambda_table[0];
3653  //FIXME broken
3654  }else
3655  s->lambda = s->current_picture.f->quality;
3656  update_qscale(s);
3657  return 0;
3658 }
3659 
3660 /* must be called before writing the header */
3663  s->time = s->current_picture_ptr->f->pts * s->avctx->time_base.num;
3664 
3665  if(s->pict_type==AV_PICTURE_TYPE_B){
3666  s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
3667  assert(s->pb_time > 0 && s->pb_time < s->pp_time);
3668  }else{
3669  s->pp_time= s->time - s->last_non_b_time;
3670  s->last_non_b_time= s->time;
3671  assert(s->picture_number==0 || s->pp_time > 0);
3672  }
3673 }
3674 
3676 {
3677  int i, ret;
3678  int bits;
3679  int context_count = s->slice_context_count;
3680 
3682 
3683  /* Reset the average MB variance */
3684  s->me.mb_var_sum_temp =
3685  s->me.mc_mb_var_sum_temp = 0;
3686 
3687  /* we need to initialize some time vars before we can encode B-frames */
3688  // RAL: Condition added for MPEG1VIDEO
3691  if(CONFIG_MPEG4_ENCODER && s->codec_id == AV_CODEC_ID_MPEG4)
3692  ff_set_mpeg4_time(s);
3693 
3694  s->me.scene_change_score=0;
3695 
3696 // s->lambda= s->current_picture_ptr->quality; //FIXME qscale / ... stuff for ME rate distortion
3697 
3698  if(s->pict_type==AV_PICTURE_TYPE_I){
3699  if(s->msmpeg4_version >= 3) s->no_rounding=1;
3700  else s->no_rounding=0;
3701  }else if(s->pict_type!=AV_PICTURE_TYPE_B){
3703  s->no_rounding ^= 1;
3704  }
3705 
3706  if (s->avctx->flags & AV_CODEC_FLAG_PASS2) {
3707  if (estimate_qp(s,1) < 0)
3708  return -1;
3709  ff_get_2pass_fcode(s);
3710  } else if (!(s->avctx->flags & AV_CODEC_FLAG_QSCALE)) {
3712  s->lambda= s->last_lambda_for[s->pict_type];
3713  else
3715  update_qscale(s);
3716  }
3717 
3723  }
3724 
3725  s->mb_intra=0; //for the rate distortion & bit compare functions
3726  for(i=1; i<context_count; i++){
3728  if (ret < 0)
3729  return ret;
3730  }
3731 
3732  if(ff_init_me(s)<0)
3733  return -1;
3734 
3735  /* Estimate motion for every MB */
3736  if(s->pict_type != AV_PICTURE_TYPE_I){
3737  s->lambda = (s->lambda * s->me_penalty_compensation + 128) >> 8;
3738  s->lambda2 = (s->lambda2 * (int64_t) s->me_penalty_compensation + 128) >> 8;
3739  if (s->pict_type != AV_PICTURE_TYPE_B) {
3740  if ((s->me_pre && s->last_non_b_pict_type == AV_PICTURE_TYPE_I) ||
3741  s->me_pre == 2) {
3742  s->avctx->execute(s->avctx, pre_estimate_motion_thread, &s->thread_context[0], NULL, context_count, sizeof(void*));
3743  }
3744  }
3745 
3746  s->avctx->execute(s->avctx, estimate_motion_thread, &s->thread_context[0], NULL, context_count, sizeof(void*));
3747  }else /* if(s->pict_type == AV_PICTURE_TYPE_I) */{
3748  /* I-Frame */
3749  for(i=0; i<s->mb_stride*s->mb_height; i++)
3751 
3752  if(!s->fixed_qscale){
3753  /* finding spatial complexity for I-frame rate control */
3754  s->avctx->execute(s->avctx, mb_var_thread, &s->thread_context[0], NULL, context_count, sizeof(void*));
3755  }
3756  }
3757  for(i=1; i<context_count; i++){
3759  }
3761  s->current_picture. mb_var_sum= s->current_picture_ptr-> mb_var_sum= s->me. mb_var_sum_temp;
3762  emms_c();
3763 
3765  s->pict_type == AV_PICTURE_TYPE_P) {
3767  for(i=0; i<s->mb_stride*s->mb_height; i++)
3769  if(s->msmpeg4_version >= 3)
3770  s->no_rounding=1;
3771  ff_dlog(s, "Scene change detected, encoding as I Frame %"PRId64" %"PRId64"\n",
3773  }
3774 
3775  if(!s->umvplus){
3778 
3780  int a,b;
3781  a= ff_get_best_fcode(s, s->p_field_mv_table[0][0], CANDIDATE_MB_TYPE_INTER_I); //FIXME field_select
3783  s->f_code= FFMAX3(s->f_code, a, b);
3784  }
3785 
3786  ff_fix_long_p_mvs(s);
3789  int j;
3790  for(i=0; i<2; i++){
3791  for(j=0; j<2; j++)
3794  }
3795  }
3796  }
3797 
3798  if(s->pict_type==AV_PICTURE_TYPE_B){
3799  int a, b;
3800 
3803  s->f_code = FFMAX(a, b);
3804 
3807  s->b_code = FFMAX(a, b);
3808 
3814  int dir, j;
3815  for(dir=0; dir<2; dir++){
3816  for(i=0; i<2; i++){
3817  for(j=0; j<2; j++){
3820  ff_fix_long_mvs(s, s->b_field_select_table[dir][i], j,
3821  s->b_field_mv_table[dir][i][j], dir ? s->b_code : s->f_code, type, 1);
3822  }
3823  }
3824  }
3825  }
3826  }
3827  }
3828 
3829  if (estimate_qp(s, 0) < 0)
3830  return -1;
3831 
3832  if (s->qscale < 3 && s->max_qcoeff <= 128 &&
3833  s->pict_type == AV_PICTURE_TYPE_I &&
3834  !(s->avctx->flags & AV_CODEC_FLAG_QSCALE))
3835  s->qscale= 3; //reduce clipping problems
3836 
3837  if (s->out_format == FMT_MJPEG) {
3838  const uint16_t * luma_matrix = ff_mpeg1_default_intra_matrix;
3839  const uint16_t *chroma_matrix = ff_mpeg1_default_intra_matrix;
3840 
3841  if (s->avctx->intra_matrix) {
3842  chroma_matrix =
3843  luma_matrix = s->avctx->intra_matrix;
3844  }
3845  if (s->avctx->chroma_intra_matrix)
3846  chroma_matrix = s->avctx->chroma_intra_matrix;
3847 
3848  /* for mjpeg, we do include qscale in the matrix */
3849  for(i=1;i<64;i++){
3850  int j = s->idsp.idct_permutation[i];
3851 
3852  s->chroma_intra_matrix[j] = av_clip_uint8((chroma_matrix[i] * s->qscale) >> 3);
3853  s-> intra_matrix[j] = av_clip_uint8(( luma_matrix[i] * s->qscale) >> 3);
3854  }
3855  s->y_dc_scale_table=
3857  s->chroma_intra_matrix[0] =
3860  s->intra_matrix, s->intra_quant_bias, 8, 8, 1);
3862  s->chroma_intra_matrix, s->intra_quant_bias, 8, 8, 1);
3863  s->qscale= 8;
3864  }
3865  if(s->codec_id == AV_CODEC_ID_AMV){
3866  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};
3867  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};
3868  for(i=1;i<64;i++){
3869  int j= s->idsp.idct_permutation[ff_zigzag_direct[i]];
3870 
3871  s->intra_matrix[j] = sp5x_quant_table[5*2+0][i];
3872  s->chroma_intra_matrix[j] = sp5x_quant_table[5*2+1][i];
3873  }
3874  s->y_dc_scale_table= y;
3875  s->c_dc_scale_table= c;
3876  s->intra_matrix[0] = 13;
3877  s->chroma_intra_matrix[0] = 14;
3879  s->intra_matrix, s->intra_quant_bias, 8, 8, 1);
3881  s->chroma_intra_matrix, s->intra_quant_bias, 8, 8, 1);
3882  s->qscale= 8;
3883  }
3884 
3885  //FIXME var duplication
3887  s->current_picture.f->key_frame = s->pict_type == AV_PICTURE_TYPE_I; //FIXME pic_ptr
3890 
3891  if (s->current_picture.f->key_frame)
3892  s->picture_in_gop_number=0;
3893 
3894  s->mb_x = s->mb_y = 0;
3895  s->last_bits= put_bits_count(&s->pb);
3896  switch(s->out_format) {
3897  case FMT_MJPEG:
3898  if (CONFIG_MJPEG_ENCODER && s->huffman != HUFFMAN_TABLE_OPTIMAL)
3901  break;
3902  case FMT_H261:
3903  if (CONFIG_H261_ENCODER)
3904  ff_h261_encode_picture_header(s, picture_number);
3905  break;
3906  case FMT_H263:
3907  if (CONFIG_WMV2_ENCODER && s->codec_id == AV_CODEC_ID_WMV2)
3908  ff_wmv2_encode_picture_header(s, picture_number);
3909  else if (CONFIG_MSMPEG4_ENCODER && s->msmpeg4_version)
3910  ff_msmpeg4_encode_picture_header(s, picture_number);
3911  else if (CONFIG_MPEG4_ENCODER && s->h263_pred) {
3912  ret = ff_mpeg4_encode_picture_header(s, picture_number);
3913  if (ret < 0)
3914  return ret;
3915  } else if (CONFIG_RV10_ENCODER && s->codec_id == AV_CODEC_ID_RV10) {
3916  ret = ff_rv10_encode_picture_header(s, picture_number);
3917  if (ret < 0)
3918  return ret;
3919  }
3920  else if (CONFIG_RV20_ENCODER && s->codec_id == AV_CODEC_ID_RV20)
3921  ff_rv20_encode_picture_header(s, picture_number);
3922  else if (CONFIG_FLV_ENCODER && s->codec_id == AV_CODEC_ID_FLV1)
3923  ff_flv_encode_picture_header(s, picture_number);
3924  else if (CONFIG_H263_ENCODER)
3925  ff_h263_encode_picture_header(s, picture_number);
3926  break;
3927  case FMT_MPEG1:
3928  if (CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER)
3929  ff_mpeg1_encode_picture_header(s, picture_number);
3930  break;
3931  default:
3932  av_assert0(0);
3933  }
3934  bits= put_bits_count(&s->pb);
3935  s->header_bits= bits - s->last_bits;
3936 
3937  for(i=1; i<context_count; i++){
3939  }
3940  s->avctx->execute(s->avctx, encode_thread, &s->thread_context[0], NULL, context_count, sizeof(void*));
3941  for(i=1; i<context_count; i++){
3942  if (s->pb.buf_end == s->thread_context[i]->pb.buf)
3943  set_put_bits_buffer_size(&s->pb, FFMIN(s->thread_context[i]->pb.buf_end - s->pb.buf, INT_MAX/8-32));
3945  }
3946  emms_c();
3947  return 0;
3948 }
3949 
3950 static void denoise_dct_c(MpegEncContext *s, int16_t *block){
3951  const int intra= s->mb_intra;
3952  int i;
3953 
3954  s->dct_count[intra]++;
3955 
3956  for(i=0; i<64; i++){
3957  int level= block[i];
3958 
3959  if(level){
3960  if(level>0){
3961  s->dct_error_sum[intra][i] += level;
3962  level -= s->dct_offset[intra][i];
3963  if(level<0) level=0;
3964  }else{
3965  s->dct_error_sum[intra][i] -= level;
3966  level += s->dct_offset[intra][i];
3967  if(level>0) level=0;
3968  }
3969  block[i]= level;
3970  }
3971  }
3972 }
3973 
3975  int16_t *block, int n,
3976  int qscale, int *overflow){
3977  const int *qmat;
3978  const uint16_t *matrix;
3979  const uint8_t *scantable;
3980  const uint8_t *perm_scantable;
3981  int max=0;
3982  unsigned int threshold1, threshold2;
3983  int bias=0;
3984  int run_tab[65];
3985  int level_tab[65];
3986  int score_tab[65];
3987  int survivor[65];
3988  int survivor_count;
3989  int last_run=0;
3990  int last_level=0;
3991  int last_score= 0;
3992  int last_i;
3993  int coeff[2][64];
3994  int coeff_count[64];
3995  int qmul, qadd, start_i, last_non_zero, i, dc;
3996  const int esc_length= s->ac_esc_length;
3997  uint8_t * length;
3998  uint8_t * last_length;
3999  const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6);
4000  int mpeg2_qscale;
4001 
4002  s->fdsp.fdct(block);
4003 
4004  if(s->dct_error_sum)
4005  s->denoise_dct(s, block);
4006  qmul= qscale*16;
4007  qadd= ((qscale-1)|1)*8;
4008 
4009  if (s->q_scale_type) mpeg2_qscale = ff_mpeg2_non_linear_qscale[qscale];
4010  else mpeg2_qscale = qscale << 1;
4011 
4012  if (s->mb_intra) {
4013  int q;
4014  scantable= s->intra_scantable.scantable;
4015  perm_scantable= s->intra_scantable.permutated;
4016  if (!s->h263_aic) {
4017  if (n < 4)
4018  q = s->y_dc_scale;
4019  else
4020  q = s->c_dc_scale;
4021  q = q << 3;
4022  } else{
4023  /* For AIC we skip quant/dequant of INTRADC */
4024  q = 1 << 3;
4025  qadd=0;
4026  }
4027 
4028  /* note: block[0] is assumed to be positive */
4029  block[0] = (block[0] + (q >> 1)) / q;
4030  start_i = 1;
4031  last_non_zero = 0;
4032  qmat = n < 4 ? s->q_intra_matrix[qscale] : s->q_chroma_intra_matrix[qscale];
4033  matrix = n < 4 ? s->intra_matrix : s->chroma_intra_matrix;
4034  if(s->mpeg_quant || s->out_format == FMT_MPEG1 || s->out_format == FMT_MJPEG)
4035  bias= 1<<(QMAT_SHIFT-1);
4036 
4037  if (n > 3 && s->intra_chroma_ac_vlc_length) {
4038  length = s->intra_chroma_ac_vlc_length;
4039  last_length= s->intra_chroma_ac_vlc_last_length;
4040  } else {
4041  length = s->intra_ac_vlc_length;
4042  last_length= s->intra_ac_vlc_last_length;
4043  }
4044  } else {
4045  scantable= s->inter_scantable.scantable;
4046  perm_scantable= s->inter_scantable.permutated;
4047  start_i = 0;
4048  last_non_zero = -1;
4049  qmat = s->q_inter_matrix[qscale];
4050  matrix = s->inter_matrix;
4051  length = s->inter_ac_vlc_length;
4052  last_length= s->inter_ac_vlc_last_length;
4053  }
4054  last_i= start_i;
4055 
4056  threshold1= (1<<QMAT_SHIFT) - bias - 1;
4057  threshold2= (threshold1<<1);
4058 
4059  for(i=63; i>=start_i; i--) {
4060  const int j = scantable[i];
4061  int level = block[j] * qmat[j];
4062 
4063  if(((unsigned)(level+threshold1))>threshold2){
4064  last_non_zero = i;
4065  break;
4066  }
4067  }
4068 
4069  for(i=start_i; i<=last_non_zero; i++) {
4070  const int j = scantable[i];
4071  int level = block[j] * qmat[j];
4072 
4073 // if( bias+level >= (1<<(QMAT_SHIFT - 3))
4074 // || bias-level >= (1<<(QMAT_SHIFT - 3))){
4075  if(((unsigned)(level+threshold1))>threshold2){
4076  if(level>0){
4077  level= (bias + level)>>QMAT_SHIFT;
4078  coeff[0][i]= level;
4079  coeff[1][i]= level-1;
4080 // coeff[2][k]= level-2;
4081  }else{
4082  level= (bias - level)>>QMAT_SHIFT;
4083  coeff[0][i]= -level;
4084  coeff[1][i]= -level+1;
4085 // coeff[2][k]= -level+2;
4086  }
4087  coeff_count[i]= FFMIN(level, 2);
4088  av_assert2(coeff_count[i]);
4089  max |=level;
4090  }else{
4091  coeff[0][i]= (level>>31)|1;
4092  coeff_count[i]= 1;
4093  }
4094  }
4095 
4096  *overflow= s->max_qcoeff < max; //overflow might have happened
4097 
4098  if(last_non_zero < start_i){
4099  memset(block + start_i, 0, (64-start_i)*sizeof(int16_t));
4100  return last_non_zero;
4101  }
4102 
4103  score_tab[start_i]= 0;
4104  survivor[0]= start_i;
4105  survivor_count= 1;
4106 
4107  for(i=start_i; i<=last_non_zero; i++){
4108  int level_index, j, zero_distortion;
4109  int dct_coeff= FFABS(block[ scantable[i] ]);
4110  int best_score=256*256*256*120;
4111 
4112  if (s->fdsp.fdct == ff_fdct_ifast)
4113  dct_coeff= (dct_coeff*ff_inv_aanscales[ scantable[i] ]) >> 12;
4114  zero_distortion= dct_coeff*dct_coeff;
4115 
4116  for(level_index=0; level_index < coeff_count[i]; level_index++){
4117  int distortion;
4118  int level= coeff[level_index][i];
4119  const int alevel= FFABS(level);
4120  int unquant_coeff;
4121 
4122  av_assert2(level);
4123 
4124  if(s->out_format == FMT_H263 || s->out_format == FMT_H261){
4125  unquant_coeff= alevel*qmul + qadd;
4126  } else if(s->out_format == FMT_MJPEG) {
4127  j = s->idsp.idct_permutation[scantable[i]];
4128  unquant_coeff = alevel * matrix[j] * 8;
4129  }else{ // MPEG-1
4130  j = s->idsp.idct_permutation[scantable[i]]; // FIXME: optimize
4131  if(s->mb_intra){
4132  unquant_coeff = (int)( alevel * mpeg2_qscale * matrix[j]) >> 4;
4133  unquant_coeff = (unquant_coeff - 1) | 1;
4134  }else{
4135  unquant_coeff = ((( alevel << 1) + 1) * mpeg2_qscale * ((int) matrix[j])) >> 5;
4136  unquant_coeff = (unquant_coeff - 1) | 1;
4137  }
4138  unquant_coeff<<= 3;
4139  }
4140 
4141  distortion= (unquant_coeff - dct_coeff) * (unquant_coeff - dct_coeff) - zero_distortion;
4142  level+=64;
4143  if((level&(~127)) == 0){
4144  for(j=survivor_count-1; j>=0; j--){
4145  int run= i - survivor[j];
4146  int score= distortion + length[UNI_AC_ENC_INDEX(run, level)]*lambda;
4147  score += score_tab[i-run];
4148 
4149  if(score < best_score){
4150  best_score= score;
4151  run_tab[i+1]= run;
4152  level_tab[i+1]= level-64;
4153  }
4154  }
4155 
4156  if(s->out_format == FMT_H263 || s->out_format == FMT_H261){
4157  for(j=survivor_count-1; j>=0; j--){
4158  int run= i - survivor[j];
4159  int score= distortion + last_length[UNI_AC_ENC_INDEX(run, level)]*lambda;
4160  score += score_tab[i-run];
4161  if(score < last_score){
4162  last_score= score;
4163  last_run= run;
4164  last_level= level-64;
4165  last_i= i+1;
4166  }
4167  }
4168  }
4169  }else{
4170  distortion += esc_length*lambda;
4171  for(j=survivor_count-1; j>=0; j--){
4172  int run= i - survivor[j];
4173  int score= distortion + score_tab[i-run];
4174 
4175  if(score < best_score){
4176  best_score= score;
4177  run_tab[i+1]= run;
4178  level_tab[i+1]= level-64;
4179  }
4180  }
4181 
4182  if(s->out_format == FMT_H263 || s->out_format == FMT_H261){
4183  for(j=survivor_count-1; j>=0; j--){
4184  int run= i - survivor[j];
4185  int score= distortion + score_tab[i-run];
4186  if(score < last_score){
4187  last_score= score;
4188  last_run= run;
4189  last_level= level-64;
4190  last_i= i+1;
4191  }
4192  }
4193  }
4194  }
4195  }
4196 
4197  score_tab[i+1]= best_score;
4198 
4199  // Note: there is a vlc code in MPEG-4 which is 1 bit shorter then another one with a shorter run and the same level
4200  if(last_non_zero <= 27){
4201  for(; survivor_count; survivor_count--){
4202  if(score_tab[ survivor[survivor_count-1] ] <= best_score)
4203  break;
4204  }
4205  }else{
4206  for(; survivor_count; survivor_count--){
4207  if(score_tab[ survivor[survivor_count-1] ] <= best_score + lambda)
4208  break;
4209  }
4210  }
4211 
4212  survivor[ survivor_count++ ]= i+1;
4213  }
4214 
4215  if(s->out_format != FMT_H263 && s->out_format != FMT_H261){
4216  last_score= 256*256*256*120;
4217  for(i= survivor[0]; i<=last_non_zero + 1; i++){
4218  int score= score_tab[i];
4219  if (i)
4220  score += lambda * 2; // FIXME more exact?
4221 
4222  if(score < last_score){
4223  last_score= score;
4224  last_i= i;
4225  last_level= level_tab[i];
4226  last_run= run_tab[i];
4227  }
4228  }
4229  }
4230 
4231  s->coded_score[n] = last_score;
4232 
4233  dc= FFABS(block[0]);
4234  last_non_zero= last_i - 1;
4235  memset(block + start_i, 0, (64-start_i)*sizeof(int16_t));
4236 
4237  if(last_non_zero < start_i)
4238  return last_non_zero;
4239 
4240  if(last_non_zero == 0 && start_i == 0){
4241  int best_level= 0;
4242  int best_score= dc * dc;
4243 
4244  for(i=0; i<coeff_count[0]; i++){
4245  int level= coeff[i][0];
4246  int alevel= FFABS(level);
4247  int unquant_coeff, score, distortion;
4248 
4249  if(s->out_format == FMT_H263 || s->out_format == FMT_H261){
4250  unquant_coeff= (alevel*qmul + qadd)>>3;
4251  } else{ // MPEG-1
4252  unquant_coeff = ((( alevel << 1) + 1) * mpeg2_qscale * ((int) matrix[0])) >> 5;
4253  unquant_coeff = (unquant_coeff - 1) | 1;
4254  }
4255  unquant_coeff = (unquant_coeff + 4) >> 3;
4256  unquant_coeff<<= 3 + 3;
4257 
4258  distortion= (unquant_coeff - dc) * (unquant_coeff - dc);
4259  level+=64;
4260  if((level&(~127)) == 0) score= distortion + last_length[UNI_AC_ENC_INDEX(0, level)]*lambda;
4261  else score= distortion + esc_length*lambda;
4262 
4263  if(score < best_score){
4264  best_score= score;
4265  best_level= level - 64;
4266  }
4267  }
4268  block[0]= best_level;
4269  s->coded_score[n] = best_score - dc*dc;
4270  if(best_level == 0) return -1;
4271  else return last_non_zero;
4272  }
4273 
4274  i= last_i;
4275  av_assert2(last_level);
4276 
4277  block[ perm_scantable[last_non_zero] ]= last_level;
4278  i -= last_run + 1;
4279 
4280  for(; i>start_i; i -= run_tab[i] + 1){
4281  block[ perm_scantable[i-1] ]= level_tab[i];
4282  }
4283 
4284  return last_non_zero;
4285 }
4286 
4287 //#define REFINE_STATS 1
4288 static int16_t basis[64][64];
4289 
4290 static void build_basis(uint8_t *perm){
4291  int i, j, x, y;
4292  emms_c();
4293  for(i=0; i<8; i++){
4294  for(j=0; j<8; j++){
4295  for(y=0; y<8; y++){
4296  for(x=0; x<8; x++){
4297  double s= 0.25*(1<<BASIS_SHIFT);
4298  int index= 8*i + j;
4299  int perm_index= perm[index];
4300  if(i==0) s*= sqrt(0.5);
4301  if(j==0) s*= sqrt(0.5);
4302  basis[perm_index][8*x + y]= lrintf(s * cos((M_PI/8.0)*i*(x+0.5)) * cos((M_PI/8.0)*j*(y+0.5)));
4303  }
4304  }
4305  }
4306  }
4307 }
4308 
4309 static int dct_quantize_refine(MpegEncContext *s, //FIXME breaks denoise?
4310  int16_t *block, int16_t *weight, int16_t *orig,
4311  int n, int qscale){
4312  int16_t rem[64];
4313  LOCAL_ALIGNED_16(int16_t, d1, [64]);
4314  const uint8_t *scantable;
4315  const uint8_t *perm_scantable;
4316 // unsigned int threshold1, threshold2;
4317 // int bias=0;
4318  int run_tab[65];
4319  int prev_run=0;
4320  int prev_level=0;
4321  int qmul, qadd, start_i, last_non_zero, i, dc;
4322  uint8_t * length;
4323  uint8_t * last_length;
4324  int lambda;
4325  int rle_index, run, q = 1, sum; //q is only used when s->mb_intra is true
4326 #ifdef REFINE_STATS
4327 static int count=0;
4328 static int after_last=0;
4329 static int to_zero=0;
4330 static int from_zero=0;
4331 static int raise=0;
4332 static int lower=0;
4333 static int messed_sign=0;
4334 #endif
4335 
4336  if(basis[0][0] == 0)
4338 
4339  qmul= qscale*2;
4340  qadd= (qscale-1)|1;
4341  if (s->mb_intra) {
4342  scantable= s->intra_scantable.scantable;
4343  perm_scantable= s->intra_scantable.permutated;
4344  if (!s->h263_aic) {
4345  if (n < 4)
4346  q = s->y_dc_scale;
4347  else
4348  q = s->c_dc_scale;
4349  } else{
4350  /* For AIC we skip quant/dequant of INTRADC */
4351  q = 1;
4352  qadd=0;
4353  }
4354  q <<= RECON_SHIFT-3;
4355  /* note: block[0] is assumed to be positive */
4356  dc= block[0]*q;
4357 // block[0] = (block[0] + (q >> 1)) / q;
4358  start_i = 1;
4359 // if(s->mpeg_quant || s->out_format == FMT_MPEG1)
4360 // bias= 1<<(QMAT_SHIFT-1);
4361  if (n > 3 && s->intra_chroma_ac_vlc_length) {
4362  length = s->intra_chroma_ac_vlc_length;
4363  last_length= s->intra_chroma_ac_vlc_last_length;
4364  } else {
4365  length = s->intra_ac_vlc_length;
4366  last_length= s->intra_ac_vlc_last_length;
4367  }
4368  } else {
4369  scantable= s->inter_scantable.scantable;
4370  perm_scantable= s->inter_scantable.permutated;
4371  dc= 0;
4372  start_i = 0;
4373  length = s->inter_ac_vlc_length;
4374  last_length= s->inter_ac_vlc_last_length;
4375  }
4376  last_non_zero = s->block_last_index[n];
4377 
4378 #ifdef REFINE_STATS
4379 {START_TIMER
4380 #endif
4381  dc += (1<<(RECON_SHIFT-1));
4382  for(i=0; i<64; i++){
4383  rem[i] = dc - (orig[i] << RECON_SHIFT); // FIXME use orig directly instead of copying to rem[]
4384  }
4385 #ifdef REFINE_STATS
4386 STOP_TIMER("memset rem[]")}
4387 #endif
4388  sum=0;
4389  for(i=0; i<64; i++){
4390  int one= 36;
4391  int qns=4;
4392  int w;
4393 
4394  w= FFABS(weight[i]) + qns*one;
4395  w= 15 + (48*qns*one + w/2)/w; // 16 .. 63
4396 
4397  weight[i] = w;
4398 // w=weight[i] = (63*qns + (w/2)) / w;
4399 
4400  av_assert2(w>0);
4401  av_assert2(w<(1<<6));
4402  sum += w*w;
4403  }
4404  lambda= sum*(uint64_t)s->lambda2 >> (FF_LAMBDA_SHIFT - 6 + 6 + 6 + 6);
4405 #ifdef REFINE_STATS
4406 {START_TIMER
4407 #endif
4408  run=0;
4409  rle_index=0;
4410  for(i=start_i; i<=last_non_zero; i++){
4411  int j= perm_scantable[i];
4412  const int level= block[j];
4413  int coeff;
4414 
4415  if(level){
4416  if(level<0) coeff= qmul*level - qadd;
4417  else coeff= qmul*level + qadd;
4418  run_tab[rle_index++]=run;
4419  run=0;
4420 
4421  s->mpvencdsp.add_8x8basis(rem, basis[j], coeff);
4422  }else{
4423  run++;
4424  }
4425  }
4426 #ifdef REFINE_STATS
4427 if(last_non_zero>0){
4428 STOP_TIMER("init rem[]")
4429 }
4430 }
4431 
4432 {START_TIMER
4433 #endif
4434  for(;;){
4435  int best_score = s->mpvencdsp.try_8x8basis(rem, weight, basis[0], 0);
4436  int best_coeff=0;
4437  int best_change=0;
4438  int run2, best_unquant_change=0, analyze_gradient;
4439 #ifdef REFINE_STATS
4440 {START_TIMER
4441 #endif
4442  analyze_gradient = last_non_zero > 2 || s->quantizer_noise_shaping >= 3;
4443 
4444  if(analyze_gradient){
4445 #ifdef REFINE_STATS
4446 {START_TIMER
4447 #endif
4448  for(i=0; i<64; i++){
4449  int w= weight[i];
4450 
4451  d1[i] = (rem[i]*w*w + (1<<(RECON_SHIFT+12-1)))>>(RECON_SHIFT+12);
4452  }
4453 #ifdef REFINE_STATS
4454 STOP_TIMER("rem*w*w")}
4455 {START_TIMER
4456 #endif
4457  s->fdsp.fdct(d1);
4458 #ifdef REFINE_STATS
4459 STOP_TIMER("dct")}
4460 #endif
4461  }
4462 
4463  if(start_i){
4464  const int level= block[0];
4465  int change, old_coeff;
4466 
4467  av_assert2(s->mb_intra);
4468 
4469  old_coeff= q*level;
4470 
4471  for(change=-1; change<=1; change+=2){
4472  int new_level= level + change;
4473  int score, new_coeff;
4474 
4475  new_coeff= q*new_level;
4476  if(new_coeff >= 2048 || new_coeff < 0)
4477  continue;
4478 
4479  score = s->mpvencdsp.try_8x8basis(rem, weight, basis[0],
4480  new_coeff - old_coeff);
4481  if(score<best_score){
4482  best_score= score;
4483  best_coeff= 0;
4484  best_change= change;
4485  best_unquant_change= new_coeff - old_coeff;
4486  }
4487  }
4488  }
4489 
4490  run=0;
4491  rle_index=0;
4492  run2= run_tab[rle_index++];
4493  prev_level=0;
4494  prev_run=0;
4495 
4496  for(i=start_i; i<64; i++){
4497  int j= perm_scantable[i];
4498  const int level= block[j];
4499  int change, old_coeff;
4500 
4501  if(s->quantizer_noise_shaping < 3 && i > last_non_zero + 1)
4502  break;
4503 
4504  if(level){
4505  if(level<0) old_coeff= qmul*level - qadd;
4506  else old_coeff= qmul*level + qadd;
4507  run2= run_tab[rle_index++]; //FIXME ! maybe after last
4508  }else{
4509  old_coeff=0;
4510  run2--;
4511  av_assert2(run2>=0 || i >= last_non_zero );
4512  }
4513 
4514  for(change=-1; change<=1; change+=2){
4515  int new_level= level + change;
4516  int score, new_coeff, unquant_change;
4517 
4518  score=0;
4519  if(s->quantizer_noise_shaping < 2 && FFABS(new_level) > FFABS(level))
4520  continue;
4521 
4522  if(new_level){
4523  if(new_level<0) new_coeff= qmul*new_level - qadd;
4524  else new_coeff= qmul*new_level + qadd;
4525  if(new_coeff >= 2048 || new_coeff <= -2048)
4526  continue;
4527  //FIXME check for overflow
4528 
4529  if(level){
4530  if(level < 63 && level > -63){
4531  if(i < last_non_zero)
4532  score += length[UNI_AC_ENC_INDEX(run, new_level+64)]
4533  - length[UNI_AC_ENC_INDEX(run, level+64)];
4534  else
4535  score += last_length[UNI_AC_ENC_INDEX(run, new_level+64)]
4536  - last_length[UNI_AC_ENC_INDEX(run, level+64)];
4537  }
4538  }else{
4539  av_assert2(FFABS(new_level)==1);
4540 
4541  if(analyze_gradient){
4542  int g= d1[ scantable[i] ];
4543  if(g && (g^new_level) >= 0)
4544  continue;
4545  }
4546 
4547  if(i < last_non_zero){
4548  int next_i= i + run2 + 1;
4549  int next_level= block[ perm_scantable[next_i] ] + 64;
4550 
4551  if(next_level&(~127))
4552  next_level= 0;
4553 
4554  if(next_i < last_non_zero)
4555  score += length[UNI_AC_ENC_INDEX(run, 65)]
4556  + length[UNI_AC_ENC_INDEX(run2, next_level)]
4557  - length[UNI_AC_ENC_INDEX(run + run2 + 1, next_level)];
4558  else
4559  score += length[UNI_AC_ENC_INDEX(run, 65)]
4560  + last_length[UNI_AC_ENC_INDEX(run2, next_level)]
4561  - last_length[UNI_AC_ENC_INDEX(run + run2 + 1, next_level)];
4562  }else{
4563  score += last_length[UNI_AC_ENC_INDEX(run, 65)];
4564  if(prev_level){
4565  score += length[UNI_AC_ENC_INDEX(prev_run, prev_level)]
4566  - last_length[UNI_AC_ENC_INDEX(prev_run, prev_level)];
4567  }
4568  }
4569  }
4570  }else{
4571  new_coeff=0;
4572  av_assert2(FFABS(level)==1);
4573 
4574  if(i < last_non_zero){
4575  int next_i= i + run2 + 1;
4576  int next_level= block[ perm_scantable[next_i] ] + 64;
4577 
4578  if(next_level&(~127))
4579  next_level= 0;
4580 
4581  if(next_i < last_non_zero)
4582  score += length[UNI_AC_ENC_INDEX(run + run2 + 1, next_level)]
4583  - length[UNI_AC_ENC_INDEX(run2, next_level)]
4584  - length[UNI_AC_ENC_INDEX(run, 65)];
4585  else
4586  score += last_length[UNI_AC_ENC_INDEX(run + run2 + 1, next_level)]
4587  - last_length[UNI_AC_ENC_INDEX(run2, next_level)]
4588  - length[UNI_AC_ENC_INDEX(run, 65)];
4589  }else{
4590  score += -last_length[UNI_AC_ENC_INDEX(run, 65)];
4591  if(prev_level){
4592  score += last_length[UNI_AC_ENC_INDEX(prev_run, prev_level)]
4593  - length[UNI_AC_ENC_INDEX(prev_run, prev_level)];
4594  }
4595  }
4596  }
4597 
4598  score *= lambda;
4599 
4600  unquant_change= new_coeff - old_coeff;
4601  av_assert2((score < 100*lambda && score > -100*lambda) || lambda==0);
4602 
4603  score += s->mpvencdsp.try_8x8basis(rem, weight, basis[j],
4604  unquant_change);
4605  if(score<best_score){
4606  best_score= score;
4607  best_coeff= i;
4608  best_change= change;
4609  best_unquant_change= unquant_change;
4610  }
4611  }
4612  if(level){
4613  prev_level= level + 64;
4614  if(prev_level&(~127))
4615  prev_level= 0;
4616  prev_run= run;
4617  run=0;
4618  }else{
4619  run++;
4620  }
4621  }
4622 #ifdef REFINE_STATS
4623 STOP_TIMER("iterative step")}
4624 #endif
4625 
4626  if(best_change){
4627  int j= perm_scantable[ best_coeff ];
4628 
4629  block[j] += best_change;
4630 
4631  if(best_coeff > last_non_zero){
4632  last_non_zero= best_coeff;
4633  av_assert2(block[j]);
4634 #ifdef REFINE_STATS
4635 after_last++;
4636 #endif
4637  }else{
4638 #ifdef REFINE_STATS
4639 if(block[j]){
4640  if(block[j] - best_change){
4641  if(FFABS(block[j]) > FFABS(block[j] - best_change)){
4642  raise++;
4643  }else{
4644  lower++;
4645  }
4646  }else{
4647  from_zero++;
4648  }
4649 }else{
4650  to_zero++;
4651 }
4652 #endif
4653  for(; last_non_zero>=start_i; last_non_zero--){
4654  if(block[perm_scantable[last_non_zero]])
4655  break;
4656  }
4657  }
4658 #ifdef REFINE_STATS
4659 count++;
4660 if(256*256*256*64 % count == 0){
4661  av_log(s->avctx, AV_LOG_DEBUG, "after_last:%d to_zero:%d from_zero:%d raise:%d lower:%d sign:%d xyp:%d/%d/%d\n", after_last, to_zero, from_zero, raise, lower, messed_sign, s->mb_x, s->mb_y, s->picture_number);
4662 }
4663 #endif
4664  run=0;
4665  rle_index=0;
4666  for(i=start_i; i<=last_non_zero; i++){
4667  int j= perm_scantable[i];
4668  const int level= block[j];
4669 
4670  if(level){
4671  run_tab[rle_index++]=run;
4672  run=0;
4673  }else{
4674  run++;
4675  }
4676  }
4677 
4678  s->mpvencdsp.add_8x8basis(rem, basis[j], best_unquant_change);
4679  }else{
4680  break;
4681  }
4682  }
4683 #ifdef REFINE_STATS
4684 if(last_non_zero>0){
4685 STOP_TIMER("iterative search")
4686 }
4687 }
4688 #endif
4689 
4690  return last_non_zero;
4691 }
4692 
4693 /**
4694  * Permute an 8x8 block according to permutation.
4695  * @param block the block which will be permuted according to
4696  * the given permutation vector
4697  * @param permutation the permutation vector
4698  * @param last the last non zero coefficient in scantable order, used to
4699  * speed the permutation up
4700  * @param scantable the used scantable, this is only used to speed the
4701  * permutation up, the block is not (inverse) permutated
4702  * to scantable order!
4703  */
4704 void ff_block_permute(int16_t *block, uint8_t *permutation,
4705  const uint8_t *scantable, int last)
4706 {
4707  int i;
4708  int16_t temp[64];
4709 
4710  if (last <= 0)
4711  return;
4712  //FIXME it is ok but not clean and might fail for some permutations
4713  // if (permutation[1] == 1)
4714  // return;
4715 
4716  for (i = 0; i <= last; i++) {
4717  const int j = scantable[i];
4718  temp[j] = block[j];
4719  block[j] = 0;
4720  }
4721 
4722  for (i = 0; i <= last; i++) {
4723  const int j = scantable[i];
4724  const int perm_j = permutation[j];
4725  block[perm_j] = temp[j];
4726  }
4727 }
4728 
4730  int16_t *block, int n,
4731  int qscale, int *overflow)
4732 {
4733  int i, j, level, last_non_zero, q, start_i;
4734  const int *qmat;
4735  const uint8_t *scantable;
4736  int bias;
4737  int max=0;
4738  unsigned int threshold1, threshold2;
4739 
4740  s->fdsp.fdct(block);
4741 
4742  if(s->dct_error_sum)
4743  s->denoise_dct(s, block);
4744 
4745  if (s->mb_intra) {
4746  scantable= s->intra_scantable.scantable;
4747  if (!s->h263_aic) {
4748  if (n < 4)
4749  q = s->y_dc_scale;
4750  else
4751  q = s->c_dc_scale;
4752  q = q << 3;
4753  } else
4754  /* For AIC we skip quant/dequant of INTRADC */
4755  q = 1 << 3;
4756 
4757  /* note: block[0] is assumed to be positive */
4758  block[0] = (block[0] + (q >> 1)) / q;
4759  start_i = 1;
4760  last_non_zero = 0;
4761  qmat = n < 4 ? s->q_intra_matrix[qscale] : s->q_chroma_intra_matrix[qscale];
4762  bias= s->intra_quant_bias*(1<<(QMAT_SHIFT - QUANT_BIAS_SHIFT));
4763  } else {
4764  scantable= s->inter_scantable.scantable;
4765  start_i = 0;
4766  last_non_zero = -1;
4767  qmat = s->q_inter_matrix[qscale];
4768  bias= s->inter_quant_bias*(1<<(QMAT_SHIFT - QUANT_BIAS_SHIFT));
4769  }
4770  threshold1= (1<<QMAT_SHIFT) - bias - 1;
4771  threshold2= (threshold1<<1);
4772  for(i=63;i>=start_i;i--) {
4773  j = scantable[i];
4774  level = block[j] * qmat[j];
4775 
4776  if(((unsigned)(level+threshold1))>threshold2){
4777  last_non_zero = i;
4778  break;
4779  }else{
4780  block[j]=0;
4781  }
4782  }
4783  for(i=start_i; i<=last_non_zero; i++) {
4784  j = scantable[i];
4785  level = block[j] * qmat[j];
4786 
4787 // if( bias+level >= (1<<QMAT_SHIFT)
4788 // || bias-level >= (1<<QMAT_SHIFT)){
4789  if(((unsigned)(level+threshold1))>threshold2){
4790  if(level>0){
4791  level= (bias + level)>>QMAT_SHIFT;
4792  block[j]= level;
4793  }else{
4794  level= (bias - level)>>QMAT_SHIFT;
4795  block[j]= -level;
4796  }
4797  max |=level;
4798  }else{
4799  block[j]=0;
4800  }
4801  }
4802  *overflow= s->max_qcoeff < max; //overflow might have happened
4803 
4804  /* we need this permutation so that we correct the IDCT, we only permute the !=0 elements */
4805  if (s->idsp.perm_type != FF_IDCT_PERM_NONE)
4807  scantable, last_non_zero);
4808 
4809  return last_non_zero;
4810 }
4811 
4812 #define OFFSET(x) offsetof(MpegEncContext, x)
4813 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
4814 static const AVOption h263_options[] = {
4815  { "obmc", "use overlapped block motion compensation.", OFFSET(obmc), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
4816  { "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 },
4818  { NULL },
4819 };
4820 
4821 static const AVClass h263_class = {
4822  .class_name = "H.263 encoder",
4823  .item_name = av_default_item_name,
4824  .option = h263_options,
4825  .version = LIBAVUTIL_VERSION_INT,
4826 };
4827 
4829  .name = "h263",
4830  .long_name = NULL_IF_CONFIG_SMALL("H.263 / H.263-1996"),
4831  .type = AVMEDIA_TYPE_VIDEO,
4832  .id = AV_CODEC_ID_H263,
4833  .priv_data_size = sizeof(MpegEncContext),
4835  .encode2 = ff_mpv_encode_picture,
4836  .close = ff_mpv_encode_end,
4838  .priv_class = &h263_class,
4839 };
4840 
4841 static const AVOption h263p_options[] = {
4842  { "umv", "Use unlimited motion vectors.", OFFSET(umvplus), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
4843  { "aiv", "Use alternative inter VLC.", OFFSET(alt_inter_vlc), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
4844  { "obmc", "use overlapped block motion compensation.", OFFSET(obmc), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
4845  { "structured_slices", "Write slice start position at every GOB header instead of just GOB number.", OFFSET(h263_slice_structured), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE},
4847  { NULL },
4848 };
4849 static const AVClass h263p_class = {
4850  .class_name = "H.263p encoder",
4851  .item_name = av_default_item_name,
4852  .option = h263p_options,
4853  .version = LIBAVUTIL_VERSION_INT,
4854 };
4855 
4857  .name = "h263p",
4858  .long_name = NULL_IF_CONFIG_SMALL("H.263+ / H.263-1998 / H.263 version 2"),
4859  .type = AVMEDIA_TYPE_VIDEO,
4860  .id = AV_CODEC_ID_H263P,
4861  .priv_data_size = sizeof(MpegEncContext),
4863  .encode2 = ff_mpv_encode_picture,
4864  .close = ff_mpv_encode_end,
4865  .capabilities = AV_CODEC_CAP_SLICE_THREADS,
4867  .priv_class = &h263p_class,
4868 };
4869 
4870 static const AVClass msmpeg4v2_class = {
4871  .class_name = "msmpeg4v2 encoder",
4872  .item_name = av_default_item_name,
4873  .option = ff_mpv_generic_options,
4874  .version = LIBAVUTIL_VERSION_INT,
4875 };
4876 
4878  .name = "msmpeg4v2",
4879  .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 2"),
4880  .type = AVMEDIA_TYPE_VIDEO,
4881  .id = AV_CODEC_ID_MSMPEG4V2,
4882  .priv_data_size = sizeof(MpegEncContext),
4884  .encode2 = ff_mpv_encode_picture,
4885  .close = ff_mpv_encode_end,
4887  .priv_class = &msmpeg4v2_class,
4888 };
4889 
4890 static const AVClass msmpeg4v3_class = {
4891  .class_name = "msmpeg4v3 encoder",
4892  .item_name = av_default_item_name,
4893  .option = ff_mpv_generic_options,
4894  .version = LIBAVUTIL_VERSION_INT,
4895 };
4896 
4898  .name = "msmpeg4",
4899  .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 3"),
4900  .type = AVMEDIA_TYPE_VIDEO,
4901  .id = AV_CODEC_ID_MSMPEG4V3,
4902  .priv_data_size = sizeof(MpegEncContext),
4904  .encode2 = ff_mpv_encode_picture,
4905  .close = ff_mpv_encode_end,
4907  .priv_class = &msmpeg4v3_class,
4908 };
4909 
4910 static const AVClass wmv1_class = {
4911  .class_name = "wmv1 encoder",
4912  .item_name = av_default_item_name,
4913  .option = ff_mpv_generic_options,
4914  .version = LIBAVUTIL_VERSION_INT,
4915 };
4916 
4918  .name = "wmv1",
4919  .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 7"),
4920  .type = AVMEDIA_TYPE_VIDEO,
4921  .id = AV_CODEC_ID_WMV1,
4922  .priv_data_size = sizeof(MpegEncContext),
4924  .encode2 = ff_mpv_encode_picture,
4925  .close = ff_mpv_encode_end,
4927  .priv_class = &wmv1_class,
4928 };
int last_time_base
Definition: mpegvideo.h:388
const uint16_t ff_mpeg1_default_non_intra_matrix[64]
Definition: mpeg12data.c:41
#define AV_CODEC_FLAG_INTERLACED_ME
interlaced motion estimation
Definition: avcodec.h:895
int plane
Definition: avisynth_c.h:422
#define FF_COMPLIANCE_EXPERIMENTAL
Allow nonstandardized experimental things.
Definition: avcodec.h:2581
av_cold void ff_me_cmp_init(MECmpContext *c, AVCodecContext *avctx)
Definition: me_cmp.c:1035
static const AVClass wmv1_class
void ff_h261_reorder_mb_index(MpegEncContext *s)
Definition: h261enc.c:108
int(* try_8x8basis)(int16_t rem[64], int16_t weight[64], int16_t basis[64], int scale)
int chroma_elim_threshold
Definition: mpegvideo.h:117
#define INPLACE_OFFSET
Definition: mpegutils.h:121
void ff_jpeg_fdct_islow_10(int16_t *data)
static const AVOption h263_options[]
int frame_bits
bits used for the current frame
Definition: mpegvideo.h:338
IDCTDSPContext idsp
Definition: mpegvideo.h:230
av_cold int ff_dct_encode_init(MpegEncContext *s)
#define NULL
Definition: coverity.c:32
RateControlContext rc_context
contains stuff only accessed in ratecontrol.c
Definition: mpegvideo.h:341
const struct AVCodec * codec
Definition: avcodec.h:1527
int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase)
av_cold void ff_rate_control_uninit(MpegEncContext *s)
Definition: ratecontrol.c:672
#define FF_MPV_FLAG_STRICT_GOP
Definition: mpegvideo.h:584
void ff_init_block_index(MpegEncContext *s)
Definition: mpegvideo.c:2231
void ff_estimate_b_frame_motion(MpegEncContext *s, int mb_x, int mb_y)
Definition: motion_est.c:1490
qpel_mc_func avg_qpel_pixels_tab[2][16]
Definition: qpeldsp.h:74
int picture_number
Definition: mpegvideo.h:127
const char * s
Definition: avisynth_c.h:768
#define RECON_SHIFT
me_cmp_func frame_skip_cmp[6]
Definition: me_cmp.h:76
#define CANDIDATE_MB_TYPE_SKIPPED
Definition: mpegutils.h:107
rate control context.
Definition: ratecontrol.h:63
static int shift(int a, int b)
Definition: sonic.c:82
S(GMC)-VOP MPEG-4.
Definition: avutil.h:277
void(* dct_unquantize_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
Definition: mpegvideo.h:532
void ff_mpeg1_encode_init(MpegEncContext *s)
Definition: mpeg12enc.c:1003
int esc3_level_length
Definition: mpegvideo.h:440
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2363
static void get_visual_weight(int16_t *weight, uint8_t *ptr, int stride)
int time_increment_bits
Definition: mpegvideo.h:387
void ff_h263_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: ituh263enc.c:103
This structure describes decoded (raw) audio or video data.
Definition: frame.h:218
AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
Definition: allcodecs.c:857
int16_t(* p_mv_table)[2]
MV table (1MV per MB) P-frame encoding.
Definition: mpegvideo.h:248
#define FF_CMP_DCTMAX
Definition: avcodec.h:1935
void ff_fdct_ifast(int16_t *data)
Definition: jfdctfst.c:208
#define FF_MB_DECISION_BITS
chooses the one which needs the fewest bits
Definition: avcodec.h:2007
AVOption.
Definition: opt.h:246
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
Definition: avpacket.c:710
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:101
uint8_t * fcode_tab
smallest fcode needed for each MV
Definition: mpegvideo.h:279
int start_mb_y
start mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) ...
Definition: mpegvideo.h:153
#define MV_TYPE_FIELD
2 vectors, one per field
Definition: mpegvideo.h:269
void ff_estimate_p_frame_motion(MpegEncContext *s, int mb_x, int mb_y)
Definition: motion_est.c:885
const uint8_t * y_dc_scale_table
qscale -> y_dc_scale table
Definition: mpegvideo.h:188
uint8_t * mb_mean
Table for MB luminance.
Definition: mpegpicture.h:74
uint64_t error[AV_NUM_DATA_POINTERS]
error
Definition: avcodec.h:2693
#define AV_CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
Definition: avcodec.h:874
int last_mv[2][2][2]
last MV, used for MV prediction in MPEG-1 & B-frame MPEG-4
Definition: mpegvideo.h:278
uint8_t * edge_emu_buffer
temporary buffer for if MVs point to out-of-frame data
Definition: mpegpicture.h:36
int pre_pass
= 1 for the pre pass
Definition: motion_est.h:72
#define AV_CODEC_FLAG_LOOP_FILTER
loop filter.
Definition: avcodec.h:857
op_pixels_func avg_pixels_tab[4][4]
Halfpel motion compensation with rounding (a+b+1)>>1.
Definition: hpeldsp.h:68
#define FF_MPV_FLAG_SKIP_RD
Definition: mpegvideo.h:583
AVFrame * tmp_frames[MAX_B_FRAMES+2]
Definition: mpegvideo.h:568
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:67
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
Definition: j2kenc.c:207
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
RateControlEntry * entry
Definition: ratecontrol.h:65
qpel_mc_func put_no_rnd_qpel_pixels_tab[2][16]
Definition: qpeldsp.h:75
void(* shrink[4])(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height)
#define CANDIDATE_MB_TYPE_INTER_I
Definition: mpegutils.h:114
int64_t bit_rate
the average bitrate
Definition: avcodec.h:1568
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
else temp
Definition: vf_mcdeint.c:256
attribute_deprecated void(* rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb)
Definition: avcodec.h:2489
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
Definition: frame.h:410
const char * g
Definition: vf_curves.c:112
void ff_h263_encode_init(MpegEncContext *s)
Definition: ituh263enc.c:761
const char * desc
Definition: nvenc.c:65
int end_mb_y
end mb_y of this thread (so current thread should process start_mb_y <= row < end_mb_y) ...
Definition: mpegvideo.h:154
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
void ff_init_qscale_tab(MpegEncContext *s)
init s->current_picture.qscale_table from s->lambda_table
#define OFFSET(x)
uint16_t * mb_var
Table for MB variances.
Definition: mpegpicture.h:65
uint16_t(* q_chroma_intra_matrix16)[2][64]
Definition: mpegvideo.h:328
uint16_t chroma_intra_matrix[64]
Definition: mpegvideo.h:301
static int estimate_qp(MpegEncContext *s, int dry_run)
#define MAX_MV
Definition: motion_est.h:35
int acc
Definition: yuv2rgb.c:554
int max_bitrate
Maximum bitrate of the stream, in bits per second.
Definition: avcodec.h:1104
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...
Definition: avcodec.h:1777
int16_t(*[3] ac_val)[16]
used for MPEG-4 AC prediction, all 3 arrays must be continuous
Definition: mpegvideo.h:194
MJPEG encoder.
void(* add_8x8basis)(int16_t rem[64], int16_t basis[64], int scale)
int v_edge_pos
horizontal / vertical position of the right/bottom edge (pixel replication)
Definition: mpegvideo.h:132
int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt)
Read encoded data from the encoder.
Definition: encode.c:420
attribute_deprecated int frame_skip_cmp
Definition: avcodec.h:2454
#define FF_MPV_COMMON_OPTS
Definition: mpegvideo.h:617
enum AVColorRange color_range
MPEG vs JPEG YUV range.
Definition: avcodec.h:2148
#define me
int frame_skip_cmp
Definition: mpegvideo.h:576
int msmpeg4_version
0=not msmpeg4, 1=mp41, 2=mp42, 3=mp43/divx3 4=wmv1/7 5=wmv2/8
Definition: mpegvideo.h:438
int b_frame_strategy
Definition: mpegvideo.h:569
#define CANDIDATE_MB_TYPE_BIDIR
Definition: mpegutils.h:112
int num
Numerator.
Definition: rational.h:59
av_cold void ff_h263dsp_init(H263DSPContext *ctx)
Definition: h263dsp.c:117
int size
Definition: avcodec.h:1431
enum AVCodecID codec_id
Definition: mpegvideo.h:112
const char * b
Definition: vf_curves.c:113
void ff_get_2pass_fcode(MpegEncContext *s)
Definition: ratecontrol.c:857
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
void avpriv_copy_bits(PutBitContext *pb, const uint8_t *src, int length)
Copy the content of src to the bitstream.
Definition: bitstream.c:64
int av_log2(unsigned v)
Definition: intmath.c:26
int obmc
overlapped block motion compensation
Definition: mpegvideo.h:366
void avpriv_align_put_bits(PutBitContext *s)
Pad the bitstream with zeros up to the next byte boundary.
Definition: bitstream.c:48
void ff_mpeg1_clean_buffers(MpegEncContext *s)
Definition: mpeg12.c:115
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
Definition: avcodec.h:1896
int frame_skip_exp
Definition: mpegvideo.h:575
int ff_h261_get_picture_format(int width, int height)
Definition: h261enc.c:40
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
Definition: avcodec.h:1727
int16_t(*[2][2] p_field_mv_table)[2]
MV table (2MV per MB) interlaced P-frame encoding.
Definition: mpegvideo.h:254
static int select_input_picture(MpegEncContext *s)
static const AVClass msmpeg4v3_class
int min_qcoeff
minimum encodable coefficient
Definition: mpegvideo.h:308
static int sse(MpegEncContext *s, uint8_t *src1, uint8_t *src2, int w, int h, int stride)
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
Same behaviour av_fast_malloc but the buffer has additional AV_INPUT_BUFFER_PADDING_SIZE at the end w...
Definition: utils.c:70
int out_size
Definition: movenc.c:55
int ildct_cmp
interlaced DCT comparison function
Definition: avcodec.h:1921
void(* qpel_mc_func)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)
Definition: qpeldsp.h:65
int coded_score[12]
Definition: mpegvideo.h:320
mpegvideo header.
const uint16_t ff_h263_format[8][2]
Definition: h263data.c:238
av_cold int ff_mjpeg_encode_init(MpegEncContext *s)
Definition: mjpegenc.c:70
int scene_change_score
Definition: motion_est.h:87
int mpv_flags
flags set by private options
Definition: mpegvideo.h:538
uint8_t permutated[64]
Definition: idctdsp.h:33
static const AVClass h263_class
uint8_t run
Definition: svq3.c:206
static AVPacket pkt
void ff_xvid_rate_control_uninit(struct MpegEncContext *s)
Definition: libxvid_rc.c:158
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:2741
uint8_t * intra_ac_vlc_length
Definition: mpegvideo.h:311
#define EDGE_TOP
int padding_bug_score
used to detect the VERY common padding bug in MPEG-4
Definition: mpegvideo.h:411
int ff_mpeg_ref_picture(AVCodecContext *avctx, Picture *dst, Picture *src)
Definition: mpegpicture.c:361
#define UNI_AC_ENC_INDEX(run, level)
Definition: mpegvideo.h:318
int mb_num
number of MBs of a picture
Definition: mpegvideo.h:133
av_cold void ff_fdctdsp_init(FDCTDSPContext *c, AVCodecContext *avctx)
Definition: fdctdsp.c:26
#define src
Definition: vp8dsp.c:254
#define FF_LAMBDA_SHIFT
Definition: avutil.h:225
static void clip_coeffs(MpegEncContext *s, int16_t *block, int last_index)
QpelDSPContext qdsp
Definition: mpegvideo.h:235
An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of structures with info about macroblo...
Definition: avcodec.h:1196
AVCodec.
Definition: avcodec.h:3408
#define MAX_FCODE
Definition: mpegutils.h:48
static void write_mb_info(MpegEncContext *s)
int time_base
time in seconds of last I,P,S Frame
Definition: mpegvideo.h:389
uint8_t(* mv_penalty)[MAX_DMV *2+1]
bit amount needed to encode a MV
Definition: motion_est.h:93
int qscale
QP.
Definition: mpegvideo.h:204
int h263_aic
Advanced INTRA Coding (AIC)
Definition: mpegvideo.h:87
int16_t(* b_back_mv_table)[2]
MV table (1MV per MB) backward mode B-frame encoding.
Definition: mpegvideo.h:250
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
Definition: pixdesc.h:92
int16_t * ff_h263_pred_motion(MpegEncContext *s, int block, int dir, int *px, int *py)
Definition: h263.c:307
int min_bitrate
Minimum bitrate of the stream, in bits per second.
Definition: avcodec.h:1109
int chroma_x_shift
Definition: mpegvideo.h:485
int encoding
true if we are encoding (vs decoding)
Definition: mpegvideo.h:114
void(* dct_unquantize_h263_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
Definition: mpegvideo.h:526
int field_select[2][2]
Definition: mpegvideo.h:277
void(* dct_unquantize_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
Definition: mpegvideo.h:530
attribute_deprecated int frame_skip_exp
Definition: avcodec.h:2450
int quant_precision
Definition: mpegvideo.h:400
void ff_mpeg4_merge_partitions(MpegEncContext *s)
static int mb_var_thread(AVCodecContext *c, void *arg)
void ff_clean_intra_table_entries(MpegEncContext *s)
Clean dc, ac, coded_block for the current non-intra MB.
Definition: mpegvideo.c:1900
void(* dct_unquantize_h263_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
Definition: mpegvideo.h:528
common functions for use with the Xvid wrappers
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
Definition: avcodec.h:1640
int modified_quant
Definition: mpegvideo.h:379
float ff_xvid_rate_estimate_qscale(struct MpegEncContext *s, int dry_run)
Definition: libxvid_rc.c:101
static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
#define FF_MPV_FLAG_CBP_RD
Definition: mpegvideo.h:586
int skipdct
skip dct and code zero residual
Definition: mpegvideo.h:220
int b_frame_score
Definition: mpegpicture.h:84
const uint8_t ff_mpeg2_non_linear_qscale[32]
Definition: mpegvideodata.c:27
uint64_t vbv_delay
The delay between the time the packet this structure is associated with is received and the time when...
Definition: avcodec.h:1129
static int16_t block[64]
Definition: dct.c:115
void ff_mpeg4_clean_buffers(MpegEncContext *s)
Definition: mpeg4video.c:45
attribute_deprecated int mv_bits
Definition: avcodec.h:2506
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:72
#define CANDIDATE_MB_TYPE_INTER
Definition: mpegutils.h:105
float p_masking
p block masking (0-> disabled)
Definition: avcodec.h:1857
int picture_in_gop_number
0-> first pic in gop, ...
Definition: mpegvideo.h:128
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
void(* emulated_edge_mc)(uint8_t *dst, const uint8_t *src, ptrdiff_t dst_linesize, ptrdiff_t src_linesize, int block_w, int block_h, int src_x, int src_y, int w, int h)
Copy a rectangular area of samples to a temporary buffer and replicate the border samples...
Definition: videodsp.h:63
int alt_inter_vlc
alternative inter vlc
Definition: mpegvideo.h:378
void ff_mpeg1_encode_slice_header(MpegEncContext *s)
Definition: mpeg12enc.c:408
int ff_dct_quantize_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
uint8_t * ptr_lastgob
Definition: mpegvideo.h:502
int64_t time
time of current frame
Definition: mpegvideo.h:390
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
Definition: encode.c:32
static int encode_picture(MpegEncContext *s, int picture_number)
av_cold void ff_mpegvideoencdsp_init(MpegvideoEncDSPContext *c, AVCodecContext *avctx)
int bit_rate_tolerance
number of bits the bitstream is allowed to diverge from the reference.
Definition: avcodec.h:1576
static const AVClass msmpeg4v2_class
#define MV_DIRECT
bidirectional mode where the difference equals the MV of the last P/S/I-Frame (MPEG-4) ...
Definition: mpegvideo.h:264
ScratchpadContext sc
Definition: mpegvideo.h:202
uint8_t
#define av_cold
Definition: attributes.h:82
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition: frame.c:189
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:64
Picture ** input_picture
next pictures on display order for encoding
Definition: mpegvideo.h:137
#define CANDIDATE_MB_TYPE_INTER4V
Definition: mpegutils.h:106
AVOptions.
void(* denoise_dct)(struct MpegEncContext *s, int16_t *block)
Definition: mpegvideo.h:536
PutBitContext pb2
used for data partitioned VOPs
Definition: mpegvideo.h:409
enum OutputFormat out_format
output format
Definition: mpegvideo.h:104
attribute_deprecated int i_count
Definition: avcodec.h:2514
#define CANDIDATE_MB_TYPE_FORWARD_I
Definition: mpegutils.h:115
uint16_t(* dct_offset)[64]
Definition: mpegvideo.h:334
int noise_reduction
Definition: mpegvideo.h:579
void ff_dct_encode_init_x86(MpegEncContext *s)
Definition: mpegvideoenc.c:213
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
uint16_t * chroma_intra_matrix
custom intra quantization matrix
Definition: avcodec.h:3139
void ff_mpv_motion(MpegEncContext *s, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int dir, uint8_t **ref_picture, op_pixels_func(*pix_op)[4], qpel_mc_func(*qpix_op)[16])
void ff_msmpeg4_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: msmpeg4enc.c:224
static void mpv_encode_defaults(MpegEncContext *s)
Set the given MpegEncContext to defaults for encoding.
Multithreading support functions.
const uint32_t ff_square_tab[512]
Definition: me_cmp.c:33
int pre_dia_size
ME prepass diamond size & shape.
Definition: avcodec.h:1972
AVCodec ff_h263_encoder
int frame_skip_threshold
Definition: mpegvideo.h:573
static const AVOption h263p_options[]
static int get_sae(uint8_t *src, int ref, int stride)
#define FF_CMP_VSSE
Definition: avcodec.h:1931
#define AV_CODEC_FLAG_LOW_DELAY
Force low delay.
Definition: avcodec.h:878
void ff_free_picture_tables(Picture *pic)
Definition: mpegpicture.c:460
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
Definition: frame.c:441
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition: frame.h:311
int misc_bits
cbp, mb_type
Definition: mpegvideo.h:352
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1618
int no_rounding
apply no rounding to motion compensation (MPEG-4, msmpeg4, ...) for B-frames rounding mode is always ...
Definition: mpegvideo.h:284
H.263 tables.
#define CANDIDATE_MB_TYPE_BACKWARD_I
Definition: mpegutils.h:116
int interlaced_dct
Definition: mpegvideo.h:490
int(* q_chroma_intra_matrix)[64]
Definition: mpegvideo.h:324
int me_cmp
motion estimation comparison function
Definition: avcodec.h:1903
#define QUANT_BIAS_SHIFT
Definition: mpegvideo_enc.c:71
void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
Picture current_picture
copy of the current picture structure.
Definition: mpegvideo.h:180
void(* diff_pixels)(int16_t *av_restrict block, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride)
Definition: pixblockdsp.h:32
#define CHROMA_420
Definition: mpegvideo.h:482
int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared)
Definition: mpegpicture.c:446
int intra_dc_precision
Definition: mpegvideo.h:463
int repeat_first_field
Definition: mpegvideo.h:479
static AVFrame * frame
quarterpel DSP functions
#define PICT_BOTTOM_FIELD
Definition: mpegutils.h:38
#define height
int16_t(* b_bidir_forw_mv_table)[2]
MV table (1MV per MB) bidir mode B-frame encoding.
Definition: mpegvideo.h:251
static void dct_single_coeff_elimination(MpegEncContext *s, int n, int threshold)
uint8_t * data
Definition: avcodec.h:1430
const uint16_t ff_aanscales[64]
Definition: aandcttab.c:26
static double av_q2d(AVRational a)
Convert an AVRational to a double.
Definition: rational.h:104
int ff_wmv2_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: wmv2enc.c:74
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
Definition: pixfmt.h:75
#define ff_dlog(a,...)
#define AVERROR_EOF
End of file.
Definition: error.h:55
uint16_t pp_time
time distance between the last 2 p,s,i frames
Definition: mpegvideo.h:392
me_cmp_func nsse[6]
Definition: me_cmp.h:65
#define AV_LOG_VERBOSE
Detailed information.
Definition: log.h:192
#define lrintf(x)
Definition: libm_mips.h:70
const uint8_t * scantable
Definition: idctdsp.h:32
av_cold void ff_mpv_idct_init(MpegEncContext *s)
Definition: mpegvideo.c:330
int mb_height
number of MBs horizontally & vertically
Definition: mpegvideo.h:129
static void rebase_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Rebase the bit writer onto a reallocated buffer.
Definition: put_bits.h:71
int buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
Definition: avcodec.h:1120
ptrdiff_t size
Definition: opengl_enc.c:101
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition: rational.c:35
float lumi_masking
luminance masking (0-> disabled)
Definition: avcodec.h:1836
char * stats_out
pass1 encoding statistics output buffer
Definition: avcodec.h:2532
int max_qcoeff
maximum encodable coefficient
Definition: mpegvideo.h:309
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
Definition: avcodec.h:861
high precision timer, useful to profile code
static void update_noise_reduction(MpegEncContext *s)
#define FF_MPV_FLAG_QP_RD
Definition: mpegvideo.h:585
int scenechange_threshold
Definition: mpegvideo.h:578
AVCPBProperties * av_cpb_properties_alloc(size_t *size)
Allocate a CPB properties structure and initialize its fields to default values.
Definition: utils.c:1922
void ff_mpeg1_encode_mb(MpegEncContext *s, int16_t block[8][64], int motion_x, int motion_y)
Definition: mpeg12enc.c:994
#define FFALIGN(x, a)
Definition: macros.h:48
attribute_deprecated uint64_t error[AV_NUM_DATA_POINTERS]
Definition: frame.h:353
#define MAX_LEVEL
Definition: rl.h:36
attribute_deprecated int frame_skip_threshold
Definition: avcodec.h:2442
void ff_h261_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: h261enc.c:53
int dquant
qscale difference to prev qscale
Definition: mpegvideo.h:210
int flipflop_rounding
Definition: mpegvideo.h:437
#define CHROMA_444
Definition: mpegvideo.h:484
int num_entries
number of RateControlEntries
Definition: ratecontrol.h:64
int gop_picture_number
index of the first picture of a GOP based on fake_pic_num & MPEG-1 specific
Definition: mpegvideo.h:451
uint8_t * mb_info_ptr
Definition: mpegvideo.h:369
#define av_log(a,...)
static void ff_update_block_index(MpegEncContext *s)
Definition: mpegvideo.h:739
#define ff_sqrt
Definition: mathops.h:206
void ff_set_qscale(MpegEncContext *s, int qscale)
set qscale and update qscale dependent variables.
Definition: mpegvideo.c:2295
#define ROUNDED_DIV(a, b)
Definition: common.h:56
int(* q_inter_matrix)[64]
Definition: mpegvideo.h:325
#define FF_COMPLIANCE_UNOFFICIAL
Allow unofficial extensions.
Definition: avcodec.h:2580
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: avcodec.h:1462
static int get_bits_diff(MpegEncContext *s)
Definition: mpegvideo.h:754
attribute_deprecated int skip_count
Definition: avcodec.h:2518
#define EDGE_WIDTH
Definition: mpegpicture.h:33
int(* q_intra_matrix)[64]
precomputed matrix (combine qscale and DCT renorm)
Definition: mpegvideo.h:323
int intra_only
if true, only intra pictures are generated
Definition: mpegvideo.h:102
av_cold int ff_mpv_encode_end(AVCodecContext *avctx)
int16_t * dc_val[3]
used for MPEG-4 DC prediction, all 3 arrays must be continuous
Definition: mpegvideo.h:187
enum AVCodecID id
Definition: avcodec.h:3422
int h263_plus
H.263+ headers.
Definition: mpegvideo.h:109
H263DSPContext h263dsp
Definition: mpegvideo.h:237
int slice_context_count
number of used thread_contexts
Definition: mpegvideo.h:156
#define MAX_DMV
Definition: motion_est.h:37
int last_non_b_pict_type
used for MPEG-4 gmc B-frames & ratecontrol
Definition: mpegvideo.h:215
int width
Definition: frame.h:276
void ff_block_permute(int16_t *block, uint8_t *permutation, const uint8_t *scantable, int last)
Permute an 8x8 block according to permutation.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
Definition: put_bits.h:324
int has_b_frames
Size of the frame reordering buffer in the decoder.
Definition: avcodec.h:1807
int last_dc[3]
last DC values for MPEG-1
Definition: mpegvideo.h:185
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Definition: pixdesc.h:101
uint8_t * inter_ac_vlc_last_length
Definition: mpegvideo.h:316
#define AV_CODEC_FLAG_4MV
4 MV per MB allowed / advanced prediction for H.263.
Definition: avcodec.h:837
#define MAX_MB_BYTES
Definition: mpegutils.h:47
int64_t total_bits
Definition: mpegvideo.h:337
#define PTRDIFF_SPECIFIER
Definition: internal.h:261
int mb_skipped
MUST BE SET only during DECODING.
Definition: mpegvideo.h:195
int chroma_y_shift
Definition: mpegvideo.h:486
int strict_std_compliance
strictly follow the std (MPEG-4, ...)
Definition: mpegvideo.h:118
int partitioned_frame
is current frame partitioned
Definition: mpegvideo.h:405
uint8_t * rd_scratchpad
scratchpad for rate distortion mb decision
Definition: mpegpicture.h:37
#define AVERROR(e)
Definition: error.h:43
uint64_t encoding_error[AV_NUM_DATA_POINTERS]
Definition: mpegpicture.h:90
#define MAX_PICTURE_COUNT
Definition: mpegpicture.h:32
av_cold int ff_rate_control_init(MpegEncContext *s)
Definition: ratecontrol.c:472
int me_sub_cmp
subpixel motion estimation comparison function
Definition: avcodec.h:1909
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition: frame.c:202
attribute_deprecated uint64_t vbv_delay
VBV delay coded in the last frame (in periods of a 27 MHz clock).
Definition: avcodec.h:2998
int qmax
maximum quantizer
Definition: avcodec.h:2362
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.
Definition: pixdesc.c:2391
static void update_mb_info(MpegEncContext *s, int startcode)
#define MERGE(field)
void ff_write_pass1_stats(MpegEncContext *s)
Definition: ratecontrol.c:38
int unrestricted_mv
mv can point outside of the coded picture
Definition: mpegvideo.h:223
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
ERContext er
Definition: mpegvideo.h:563
int active_thread_type
Which multithreading methods are in use by the codec.
Definition: avcodec.h:2788
int last_lambda_for[5]
last lambda for a specific pict type
Definition: mpegvideo.h:219
static int sse_mb(MpegEncContext *s)
int reference
Definition: mpegpicture.h:87
const char * r
Definition: vf_curves.c:111
int ff_xvid_rate_control_init(struct MpegEncContext *s)
Definition: libxvid_rc.c:42
void(* get_pixels)(int16_t *av_restrict block, const uint8_t *pixels, ptrdiff_t stride)
Definition: pixblockdsp.h:29
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:197
static int dct_quantize_trellis_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
void(* dct_unquantize_mpeg2_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
Definition: mpegvideo.h:524
PixblockDSPContext pdsp
Definition: mpegvideo.h:234
const char * arg
Definition: jacosubdec.c:66
uint8_t * intra_chroma_ac_vlc_length
Definition: mpegvideo.h:313
void(* dct_unquantize_mpeg1_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
Definition: mpegvideo.h:518
int h263_slice_structured
Definition: mpegvideo.h:377
int flags
AV_CODEC_FLAG_*.
Definition: avcodec.h:1598
uint8_t * buf
Definition: put_bits.h:38
uint16_t width
Definition: gdv.c:47
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
Definition: mathematics.c:37
GLsizei GLsizei * length
Definition: opengl_enc.c:115
MpegvideoEncDSPContext mpvencdsp
Definition: mpegvideo.h:233
const char * name
Name of the codec implementation.
Definition: avcodec.h:3415
int quarter_sample
1->qpel, 0->half pel ME/MC
Definition: mpegvideo.h:401
uint16_t * mb_type
Table for candidate MB types for encoding (defines in mpegutils.h)
Definition: mpegvideo.h:291
int me_pre
prepass for motion estimation
Definition: mpegvideo.h:260
void ff_mjpeg_encode_picture_trailer(PutBitContext *pb, int header_bits)
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Shrink the already allocated side data buffer.
Definition: avpacket.c:542
int low_delay
no reordering needed / has no B-frames
Definition: mpegvideo.h:406
qpel_mc_func put_qpel_pixels_tab[2][16]
Definition: qpeldsp.h:73
uint8_t *[2][2] b_field_select_table
Definition: mpegvideo.h:257
static const uint8_t offset[127][2]
Definition: vf_spp.c:92
GLsizei count
Definition: opengl_enc.c:109
void ff_mpv_common_end(MpegEncContext *s)
Definition: mpegvideo.c:1122
#define FFMAX(a, b)
Definition: common.h:94
av_cold void ff_pixblockdsp_init(PixblockDSPContext *c, AVCodecContext *avctx)
Definition: pixblockdsp.c:81
#define fail()
Definition: checkasm.h:116
int64_t mb_var_sum_temp
Definition: motion_est.h:86
attribute_deprecated int b_sensitivity
Definition: avcodec.h:2119
int flags
A combination of AV_PKT_FLAG values.
Definition: avcodec.h:1436
static int put_bits_count(PutBitContext *s)
Definition: put_bits.h:85
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:66
static void frame_end(MpegEncContext *s)
int resync_mb_x
x position of last resync marker
Definition: mpegvideo.h:356
int rc_buffer_size
decoder bitstream buffer size
Definition: avcodec.h:2376
void ff_clean_h263_qscales(MpegEncContext *s)
modify qscale so that encoding is actually possible in H.263 (limit difference to -2...
Definition: ituh263enc.c:266
int coded_picture_number
used to set pic->coded_picture_number, should not be used for/by anything else
Definition: mpegvideo.h:126
int * lambda_table
Definition: mpegvideo.h:208
static int estimate_best_b_count(MpegEncContext *s)
int intra_dc_precision
precision of the intra DC coefficient - 8
Definition: avcodec.h:2039
void ff_wmv2_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
Definition: wmv2enc.c:147
int64_t rc_min_rate
minimum bitrate
Definition: avcodec.h:2398
common internal API header
uint8_t * intra_ac_vlc_last_length
Definition: mpegvideo.h:312
static av_always_inline void encode_mb_internal(MpegEncContext *s, int motion_x, int motion_y, int mb_block_height, int mb_block_width, int mb_block_count)
const uint8_t *const ff_mpeg2_dc_scale_table[4]
Definition: mpegvideodata.c:82
void ff_h263_loop_filter(MpegEncContext *s)
Definition: h263.c:135
void(* op_pixels_func)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
Definition: hpeldsp.h:38
#define CHROMA_422
Definition: mpegvideo.h:483
float border_masking
Definition: mpegvideo.h:550
int progressive_frame
Definition: mpegvideo.h:488
enum AVPictureType pict_type
Picture type of the frame.
Definition: frame.h:301
const uint8_t ff_h263_chroma_qscale_table[32]
Definition: h263data.c:262
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:53
#define AV_CODEC_FLAG_QSCALE
Use fixed qscale.
Definition: avcodec.h:833
#define FFMIN(a, b)
Definition: common.h:96
int display_picture_number
picture number in display order
Definition: frame.h:336
uint16_t(* q_inter_matrix16)[2][64]
Definition: mpegvideo.h:329
uint8_t * vbv_delay_ptr
pointer to vbv_delay in the bitstream
Definition: mpegvideo.h:453
int fixed_qscale
fixed qscale if non zero
Definition: mpegvideo.h:113
void ff_clean_mpeg4_qscales(MpegEncContext *s)
modify mb_type & qscale so that encoding is actually possible in MPEG-4
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
Definition: pixfmt.h:74
#define AV_CODEC_FLAG_AC_PRED
H.263 advanced intra coding / MPEG-4 AC prediction.
Definition: avcodec.h:891
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
Definition: options.c:156
int umvplus
== H.263+ && unrestricted_mv
Definition: mpegvideo.h:375
Picture new_picture
copy of the source picture structure for encoding.
Definition: mpegvideo.h:174
int intra_quant_bias
bias for the quantizer
Definition: mpegvideo.h:306
int width
picture width / height.
Definition: avcodec.h:1690
uint8_t w
Definition: llviddspenc.c:38
int(* pix_sum)(uint8_t *pix, int line_size)
int16_t(*[2] motion_val)[2]
Definition: mpegpicture.h:53
Picture * current_picture_ptr
pointer to the current picture
Definition: mpegvideo.h:184
Picture.
Definition: mpegpicture.h:45
attribute_deprecated int noise_reduction
Definition: avcodec.h:2031
int alternate_scan
Definition: mpegvideo.h:470
float rc_max_available_vbv_use
Ratecontrol attempt to use, at maximum, of what can be used without an underflow. ...
Definition: avcodec.h:2405
int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: rv10enc.c:32
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
Definition: avcodec.h:865
float ff_rate_estimate_qscale(MpegEncContext *s, int dry_run)
Definition: ratecontrol.c:868
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
Definition: avcodec.h:849
uint16_t(* q_intra_matrix16)[2][64]
identical to the above but for MMX & these are not permutated, second 64 entries are bias ...
Definition: mpegvideo.h:327
attribute_deprecated int frame_skip_factor
Definition: avcodec.h:2446
#define FF_MB_DECISION_SIMPLE
uses mb_cmp
Definition: avcodec.h:2006
perm
Definition: f_perms.c:74
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Definition: common.h:72
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
Definition: avcodec.h:2781
int quality
quality (between 1 (good) and FF_LAMBDA_MAX (bad))
Definition: frame.h:341
int(* ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2]
[mb_intra][isChroma][level][run][last]
Definition: mpegvideo.h:443
int block_last_index[12]
last non zero coefficient in block
Definition: mpegvideo.h:86
MotionEstContext me
Definition: mpegvideo.h:282
int frame_skip_factor
Definition: mpegvideo.h:574
int n
Definition: avisynth_c.h:684
static int dct_quantize_refine(MpegEncContext *s, int16_t *block, int16_t *weight, int16_t *orig, int n, int qscale)
uint8_t idct_permutation[64]
IDCT input permutation.
Definition: idctdsp.h:96
const int16_t ff_mpeg4_default_non_intra_matrix[64]
Definition: mpeg4data.h:348
int mb_decision
macroblock decision mode
Definition: avcodec.h:2005
static int get_intra_count(MpegEncContext *s, uint8_t *src, uint8_t *ref, int stride)
uint8_t * mbintra_table
used to avoid setting {ac, dc, cbp}-pred stuff to zero on inter MB decoding
Definition: mpegvideo.h:198
#define MAX_B_FRAMES
Definition: mpegvideo.h:64
int ff_msmpeg4_encode_init(MpegEncContext *s)
Definition: msmpeg4enc.c:121
int ac_esc_length
num of bits needed to encode the longest esc
Definition: mpegvideo.h:310
preferred ID for MPEG-1/2 video decoding
Definition: avcodec.h:220
static void set_put_bits_buffer_size(PutBitContext *s, int size)
Change the end of the buffer.
Definition: put_bits.h:358
#define FF_ARRAY_ELEMS(a)
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
Definition: avcodec.h:2769
int block_index[6]
index to current MB in block based arrays with edges
Definition: mpegvideo.h:293
Compute and use optimal Huffman tables.
Definition: mjpegenc.h:97
the normal 2^n-1 "JPEG" YUV ranges
Definition: pixfmt.h:499
int * mb_index2xy
mb_index -> mb_x + mb_y*mb_stride
Definition: mpegvideo.h:297
static uint8_t default_fcode_tab[MAX_MV *2+1]
Definition: mpegvideo_enc.c:83
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:1019
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
Definition: frame.h:291
AVCodec ff_h263p_encoder
attribute_deprecated int i_tex_bits
Definition: avcodec.h:2510
static void build_basis(uint8_t *perm)
#define MV_TYPE_16X16
1 vector for the whole mb
Definition: mpegvideo.h:266
int first_slice_line
used in MPEG-4 too to handle resync markers
Definition: mpegvideo.h:436
int frame_pred_frame_dct
Definition: mpegvideo.h:464
attribute_deprecated int misc_bits
Definition: avcodec.h:2520
This structure describes the bitrate properties of an encoded bitstream.
Definition: avcodec.h:1099
uint16_t * mc_mb_var
Table for motion compensated MB variances.
Definition: mpegpicture.h:68
void ff_flv_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: flvenc.c:27
#define MV_DIR_BACKWARD
Definition: mpegvideo.h:263
int coded_picture_number
picture number in bitstream order
Definition: frame.h:332
#define src1
Definition: h264pred.c:139
#define AV_LOG_INFO
Standard information.
Definition: log.h:187
uint16_t inter_matrix[64]
Definition: mpegvideo.h:302
#define FF_LAMBDA_SCALE
Definition: avutil.h:226
void ff_jpeg_fdct_islow_8(int16_t *data)
int64_t last_non_b_time
Definition: mpegvideo.h:391
void ff_h261_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
Definition: h261enc.c:237
#define QMAT_SHIFT
Definition: mpegvideo_enc.c:74
struct MpegEncContext * thread_context[MAX_THREADS]
Definition: mpegvideo.h:155
#define CONFIG_MSMPEG4_ENCODER
Definition: msmpeg4.h:75
unsigned int lambda2
(lambda*lambda) >> FF_LAMBDA_SHIFT
Definition: mpegvideo.h:207
void ff_faandct(int16_t *data)
Definition: faandct.c:114
double buffer_index
amount of bits in the video/audio buffer
Definition: ratecontrol.h:66
Libavcodec external API header.
attribute_deprecated int mpeg_quant
Definition: avcodec.h:1812
void ff_h263_update_motion_val(MpegEncContext *s)
Definition: h263.c:42
int h263_flv
use flv H.263 header
Definition: mpegvideo.h:110
attribute_deprecated int scenechange_threshold
Definition: avcodec.h:2027
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer...
Definition: options.c:171
static const AVClass h263p_class
ptrdiff_t linesize
line size, in bytes, may be different from width
Definition: mpegvideo.h:134
enum AVCodecID codec_id
Definition: avcodec.h:1528
#define QMAT_SHIFT_MMX
Definition: mpegvideo_enc.c:73
attribute_deprecated int prediction_method
Definition: avcodec.h:1876
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
Definition: frame.h:249
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)
Definition: mpegvideo_enc.c:90
const uint16_t ff_inv_aanscales[64]
Definition: aandcttab.c:38
attribute_deprecated int b_frame_strategy
Definition: avcodec.h:1791
void ff_set_cmp(MECmpContext *c, me_cmp_func *cmp, int type)
Definition: me_cmp.c:474
#define START_TIMER
Definition: timer.h:137
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:81
uint8_t * intra_chroma_ac_vlc_last_length
Definition: mpegvideo.h:314
void(* fdct)(int16_t *block)
Definition: fdctdsp.h:27
main external API structure.
Definition: avcodec.h:1518
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.
Definition: mpegpicture.c:231
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: avpacket.c:592
ScanTable intra_scantable
Definition: mpegvideo.h:91
int qmin
minimum quantizer
Definition: avcodec.h:2355
int height
picture size. must be a multiple of 16
Definition: mpegvideo.h:100
#define FF_CMP_NSSE
Definition: avcodec.h:1932
static void write_slice_end(MpegEncContext *s)
int64_t dts_delta
pts difference between the first and second input frame, used for calculating dts of the first frame ...
Definition: mpegvideo.h:144
int64_t user_specified_pts
last non-zero pts from AVFrame which was passed into avcodec_encode_video2()
Definition: mpegvideo.h:140
FDCTDSPContext fdsp
Definition: mpegvideo.h:227
static void denoise_dct_c(MpegEncContext *s, int16_t *block)
op_pixels_func put_pixels_tab[4][4]
Halfpel motion compensation with rounding (a+b+1)>>1.
Definition: hpeldsp.h:56
int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame)
Supply a raw video or audio frame to the encoder.
Definition: encode.c:390
uint8_t * buf_end
Definition: put_bits.h:38
static int frame_start(MpegEncContext *s)
float spatial_cplx_masking
spatial complexity masking (0-> disabled)
Definition: avcodec.h:1850
int luma_elim_threshold
Definition: mpegvideo.h:116
attribute_deprecated int header_bits
Definition: avcodec.h:2508
GLint GLenum type
Definition: opengl_enc.c:105
void ff_fix_long_p_mvs(MpegEncContext *s)
Definition: motion_est.c:1651
Picture * picture
main picture buffer
Definition: mpegvideo.h:136
int data_partitioning
data partitioning flag from header
Definition: mpegvideo.h:404
uint8_t * inter_ac_vlc_length
Definition: mpegvideo.h:315
int progressive_sequence
Definition: mpegvideo.h:456
uint16_t * intra_matrix
custom intra quantization matrix
Definition: avcodec.h:2015
H.261 codec.
void ff_h263_encode_gob_header(MpegEncContext *s, int mb_line)
Encode a group of blocks header.
Definition: ituh263enc.c:240
uint8_t * buf_ptr
Definition: put_bits.h:38
Describe the class of an AVClass context structure.
Definition: log.h:67
int stuffing_bits
bits used for stuffing
Definition: mpegvideo.h:339
op_pixels_func put_no_rnd_pixels_tab[4][4]
Halfpel motion compensation with no rounding (a+b)>>1.
Definition: hpeldsp.h:82
int16_t(*[2][2][2] b_field_mv_table)[2]
MV table (4MV per MB) interlaced B-frame encoding.
Definition: mpegvideo.h:255
int(* pix_norm1)(uint8_t *pix, int line_size)
#define FF_COMPLIANCE_NORMAL
Definition: avcodec.h:2579
int64_t mc_mb_var_sum
motion compensated MB variance for current frame
Definition: mpegpicture.h:82
int index
Definition: gxfenc.c:89
#define CANDIDATE_MB_TYPE_DIRECT
Definition: mpegutils.h:109
struct AVFrame * f
Definition: mpegpicture.h:46
#define FF_MB_DECISION_RD
rate distortion
Definition: avcodec.h:2008
static void copy_context_after_encode(MpegEncContext *d, MpegEncContext *s, int type)
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.
Definition: avpacket.c:295
const uint16_t ff_mpeg1_default_intra_matrix[256]
Definition: mpeg12data.c:30
int input_picture_number
used to set pic->display_picture_number, should not be used for/by anything else
Definition: mpegvideo.h:125
AVCodec ff_wmv1_encoder
const uint8_t ff_zigzag_direct[64]
Definition: mathtables.c:98
ptrdiff_t uvlinesize
line size, for chroma in bytes, may be different from width
Definition: mpegvideo.h:135
int mb_info
interval for outputting info about mb offsets as side data
Definition: mpegvideo.h:367
void ff_set_mpeg4_time(MpegEncContext *s)
static void copy_context_before_encode(MpegEncContext *d, MpegEncContext *s, int type)
attribute_deprecated int brd_scale
Definition: avcodec.h:2086
#define STRIDE_ALIGN
Definition: internal.h:97
av_cold void ff_mjpeg_encode_close(MpegEncContext *s)
Definition: mjpegenc.c:125
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
Definition: utils.c:538
#define CANDIDATE_MB_TYPE_BIDIR_I
Definition: mpegutils.h:117
const int16_t ff_mpeg4_default_intra_matrix[64]
Definition: mpeg4data.h:337
int f_code
forward MV resolution
Definition: mpegvideo.h:238
int ff_pre_estimate_p_frame_motion(MpegEncContext *s, int mb_x, int mb_y)
Definition: motion_est.c:1061
#define CANDIDATE_MB_TYPE_DIRECT0
Definition: mpegutils.h:119
int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my)
Definition: mpeg4video.c:117
int ff_mjpeg_encode_stuffing(MpegEncContext *s)
Writes the complete JPEG frame when optimal huffman tables are enabled, otherwise writes the stuffing...
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])
attribute_deprecated int p_tex_bits
Definition: avcodec.h:2512
static int weight(int i, int blen, int offset)
Definition: diracdec.c:1523
#define MV_DIR_FORWARD
Definition: mpegvideo.h:262
uint16_t * inter_matrix
custom inter quantization matrix
Definition: avcodec.h:2022
int max_b_frames
max number of B-frames for encoding
Definition: mpegvideo.h:115
int pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
Definition: mpegvideo.h:212
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:266
void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix)
static av_always_inline void encode_mb(MpegEncContext *s, int motion_x, int motion_y)
int last_mv_dir
last mv_dir, used for B-frame encoding
Definition: mpegvideo.h:452
int av_frame_get_buffer(AVFrame *frame, int align)
Allocate new buffer(s) for audio or video data.
Definition: frame.c:322
int h263_pred
use MPEG-4/H.263 ac/dc predictions
Definition: mpegvideo.h:105
int16_t(* b_bidir_back_mv_table)[2]
MV table (1MV per MB) bidir mode B-frame encoding.
Definition: mpegvideo.h:252
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition: frame.c:551
float dark_masking
darkness masking (0-> disabled)
Definition: avcodec.h:1864
static int64_t pts
float temporal_cplx_masking
temporary complexity masking (0-> disabled)
Definition: avcodec.h:1843
int ff_init_me(MpegEncContext *s)
Definition: motion_est.c:306
uint8_t *[2] p_field_select_table
Definition: mpegvideo.h:256
int16_t(* b_direct_mv_table)[2]
MV table (1MV per MB) direct mode B-frame encoding.
Definition: mpegvideo.h:253
#define AV_CODEC_FLAG_QPEL
Use qpel MC.
Definition: avcodec.h:845
AAN (Arai, Agui and Nakajima) (I)DCT tables.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:232
const uint8_t * c_dc_scale_table
qscale -> c_dc_scale table
Definition: mpegvideo.h:189
uint8_t level
Definition: svq3.c:207
me_cmp_func sad[6]
Definition: me_cmp.h:56
int me_penalty_compensation
Definition: mpegvideo.h:259
int64_t mc_mb_var_sum_temp
Definition: motion_est.h:85
int mv[2][4][2]
motion vectors for a macroblock first coordinate : 0 = forward 1 = backward second " : depend...
Definition: mpegvideo.h:276
int16_t(* b_forw_mv_table)[2]
MV table (1MV per MB) forward mode B-frame encoding.
Definition: mpegvideo.h:249
int b8_stride
2*mb_width+1 used for some 8x8 block arrays to allow simple addressing
Definition: mpegvideo.h:131
me_cmp_func sse[6]
Definition: me_cmp.h:57
static int estimate_motion_thread(AVCodecContext *c, void *arg)
int vbv_ignore_qmax
Definition: mpegvideo.h:552
#define BASIS_SHIFT
MpegEncContext.
Definition: mpegvideo.h:81
Picture * next_picture_ptr
pointer to the next picture (for bidir pred)
Definition: mpegvideo.h:183
int8_t * qscale_table
Definition: mpegpicture.h:50
#define MAX_RUN
Definition: rl.h:35
struct AVCodecContext * avctx
Definition: mpegvideo.h:98
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
Definition: avcodec.h:1712
PutBitContext pb
bit output
Definition: mpegvideo.h:151
static int skip_check(MpegEncContext *s, Picture *p, Picture *ref)
void ff_mpeg_unref_picture(AVCodecContext *avctx, Picture *pic)
Deallocate a picture.
Definition: mpegpicture.c:294
av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
GLint GLenum GLboolean GLsizei stride
Definition: opengl_enc.c:105
int
static void update_qscale(MpegEncContext *s)
int mb_cmp
macroblock comparison function (not supported yet)
Definition: avcodec.h:1915
int quantizer_noise_shaping
Definition: mpegvideo.h:539
int(* dct_error_sum)[64]
Definition: mpegvideo.h:332
MECmpContext mecc
Definition: mpegvideo.h:231
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:62
void ff_msmpeg4_encode_ext_header(MpegEncContext *s)
Definition: msmpeg4enc.c:284
static int pre_estimate_motion_thread(AVCodecContext *c, void *arg)
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:84
static const int32_t qmat16[MAT_SIZE]
Definition: hq_hqadata.c:342
common internal api header.
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 ...
Definition: mpegvideo.h:130
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition: put_bits.h:101
if(ret< 0)
Definition: vf_mcdeint.c:279
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:107
#define CANDIDATE_MB_TYPE_FORWARD
Definition: mpegutils.h:110
attribute_deprecated int rtp_payload_size
Definition: avcodec.h:2495
uint8_t * dest[3]
Definition: mpegvideo.h:295
int shared
Definition: mpegpicture.h:88
static double c[64]
int last_pict_type
Definition: mpegvideo.h:214
#define COPY(a)
void ff_h263_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
Definition: ituh263enc.c:447
int adaptive_quant
use adaptive quantization
Definition: mpegvideo.h:209
static int16_t basis[64][64]
Picture last_picture
copy of the previous picture structure.
Definition: mpegvideo.h:162
Picture * last_picture_ptr
pointer to the previous picture.
Definition: mpegvideo.h:182
Bi-dir predicted.
Definition: avutil.h:276
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
Definition: pixfmt.h:76
int64_t reordered_pts
reordered pts to be used as dts for the next output frame when there's a delay
Definition: mpegvideo.h:148
attribute_deprecated AVFrame * coded_frame
the picture in the bitstream
Definition: avcodec.h:2760
int ff_vbv_update(MpegEncContext *s, int frame_size)
Definition: ratecontrol.c:681
#define H263_GOB_HEIGHT(h)
Definition: h263.h:42
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
Definition: avpacket.c:33
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
Definition: put_bits.h:48
int den
Denominator.
Definition: rational.h:60
const uint8_t * chroma_qscale_table
qscale -> chroma_qscale (H.263)
Definition: mpegvideo.h:190
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
Definition: error.h:71
AVCodec ff_msmpeg4v3_encoder
int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src)
Definition: mpegvideo.c:460
int trellis
trellis RD quantization
Definition: avcodec.h:2462
void(* dct_unquantize_mpeg1_inter)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
Definition: mpegvideo.h:520
AVCPBProperties * ff_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
Definition: utils.c:1936
static int alloc_picture(MpegEncContext *s, Picture *pic, int shared)
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:773
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
Definition: avcodec.h:853
void ff_mpeg1_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: mpeg12enc.c:422
void ff_mpeg4_stuffing(PutBitContext *pbc)
add MPEG-4 stuffing bits (01...1)
#define CANDIDATE_MB_TYPE_INTRA
Definition: mpegutils.h:104
int16_t(* blocks)[12][64]
Definition: mpegvideo.h:508
#define STOP_TIMER(id)
Definition: timer.h:138
int slices
Number of slices.
Definition: avcodec.h:2164
int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic_arg, int *got_packet)
void * priv_data
Definition: avcodec.h:1545
const AVOption ff_mpv_generic_options[]
Definition: mpegvideo_enc.c:85
#define PICT_FRAME
Definition: mpegutils.h:39
int last_bits
temp var used for calculating the above vars
Definition: mpegvideo.h:353
void ff_mpeg4_init_partitions(MpegEncContext *s)
av_cold int ff_mpv_common_init(MpegEncContext *s)
init common structure for both encoder and decoder.
Definition: mpegvideo.c:883
static av_always_inline int diff(const uint32_t a, const uint32_t b)
int picture_structure
Definition: mpegvideo.h:460
int dia_size
ME diamond size & shape.
Definition: avcodec.h:1945
#define av_free(p)
attribute_deprecated int frame_bits
Definition: avcodec.h:2524
int(* execute)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size)
The codec may call this to execute several independent things.
Definition: avcodec.h:2809
VideoDSPContext vdsp
Definition: mpegvideo.h:236
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:85
#define VE
static void merge_context_after_me(MpegEncContext *dst, MpegEncContext *src)
attribute_deprecated int me_penalty_compensation
Definition: avcodec.h:2074
void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64])
Definition: mpegvideo.c:2212
int avg_bitrate
Average bitrate of the stream, in bits per second.
Definition: avcodec.h:1114
void(* draw_edges)(uint8_t *buf, int wrap, int width, int height, int w, int h, int sides)
int ff_get_best_fcode(MpegEncContext *s, int16_t(*mv_table)[2], int type)
Definition: motion_est.c:1598
int resync_mb_y
y position of last resync marker
Definition: mpegvideo.h:357
struct AVCodecInternal * internal
Private context used for internal data.
Definition: avcodec.h:1553
int16_t(* block)[64]
points to one of the following blocks
Definition: mpegvideo.h:507
void ff_mjpeg_encode_mb(MpegEncContext *s, int16_t block[12][64])
Definition: mjpegenc.c:282
int64_t bit_rate
wanted bit rate
Definition: mpegvideo.h:103
This side data corresponds to the AVCPBProperties struct.
Definition: avcodec.h:1248
PutBitContext tex_pb
used for data partitioned VOPs
Definition: mpegvideo.h:408
Picture next_picture
copy of the next picture structure.
Definition: mpegvideo.h:168
attribute_deprecated int p_count
Definition: avcodec.h:2516
int key_frame
1 -> keyframe, 0-> not
Definition: frame.h:296
static void set_frame_distances(MpegEncContext *s)
static const double coeff[2][5]
Definition: vf_owdenoise.c:72
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:227
#define EDGE_BOTTOM
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)
Definition: motion_est.c:1700
Picture ** reordered_input_picture
pointer to the next pictures in coded order for encoding
Definition: mpegvideo.h:138
static const struct twinvq_data tab
unsigned int byte_buffer_size
Definition: internal.h:178
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> dc
atomic_int error_count
void ff_rv20_encode_picture_header(MpegEncContext *s, int picture_number)
Definition: rv20enc.c:35
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
Definition: avcodec.h:1429
void(* dct_unquantize_mpeg2_intra)(struct MpegEncContext *s, int16_t *block, int n, int qscale)
Definition: mpegvideo.h:522
static int encode_thread(AVCodecContext *c, void *arg)
void ff_mpv_common_defaults(MpegEncContext *s)
Set the given MpegEncContext to common defaults (same for encoding and decoding). ...
Definition: mpegvideo.c:639
int height
Definition: frame.h:276
int(* fast_dct_quantize)(struct MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
Definition: mpegvideo.h:535
void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
uint16_t intra_matrix[64]
matrix transmitted in the bitstream
Definition: mpegvideo.h:300
#define LOCAL_ALIGNED_16(t, v,...)
Definition: internal.h:131
static void merge_context_after_encode(MpegEncContext *dst, MpegEncContext *src)
#define av_freep(p)
static void update_duplicate_context_after_me(MpegEncContext *dst, MpegEncContext *src)
void INT64 start
Definition: avisynth_c.h:690
ScanTable inter_scantable
if inter == intra then intra should be used to reduce the cache usage
Definition: mpegvideo.h:90
#define av_always_inline
Definition: attributes.h:39
#define M_PI
Definition: mathematics.h:52
int ff_mpeg4_encode_picture_header(MpegEncContext *s, int picture_number)
int rtp_payload_size
Definition: mpegvideo.h:497
#define AV_CODEC_FLAG_CLOSED_GOP
Definition: avcodec.h:896
Floating point AAN DCT
static uint8_t default_mv_penalty[MAX_FCODE+1][MAX_DMV *2+1]
Definition: mpegvideo_enc.c:82
int inter_quant_bias
bias for the quantizer
Definition: mpegvideo.h:307
av_cold void ff_qpeldsp_init(QpelDSPContext *c)
Definition: qpeldsp.c:783
#define CANDIDATE_MB_TYPE_BACKWARD
Definition: mpegutils.h:111
#define stride
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet.
Definition: avpacket.c:329
int(* dct_quantize)(struct MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow)
Definition: mpegvideo.h:534
#define MV_TYPE_8X8
4 vectors (H.263, MPEG-4 4MV)
Definition: mpegvideo.h:267
int b_code
backward MV resolution for B-frames (MPEG-4)
Definition: mpegvideo.h:239
void ff_msmpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64], int motion_x, int motion_y)
Definition: msmpeg4enc.c:376
void ff_h261_encode_init(MpegEncContext *s)
Definition: h261enc.c:365
int dct_count[2]
Definition: mpegvideo.h:333
int64_t mb_var_sum
sum of MB variance for current frame
Definition: mpegpicture.h:81
static int encode_frame(AVCodecContext *c, AVFrame *frame)
AVPixelFormat
Pixel format.
Definition: pixfmt.h:60
This structure stores compressed data.
Definition: avcodec.h:1407
uint8_t * byte_buffer
temporary buffer used for encoders to store their bitstream
Definition: internal.h:177
int delay
Codec delay.
Definition: avcodec.h:1673
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
Definition: avcodec.h:2576
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Definition: avcodec.h:1423
int ff_check_alignment(void)
Definition: me_cmp.c:1014
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
Definition: frame.c:652
#define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)
Definition: internal.h:149
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.
Definition: utils.c:1740
me_cmp_func ildct_cmp[6]
Definition: me_cmp.h:75
#define FFMAX3(a, b, c)
Definition: common.h:95
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:248
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)
Predicted.
Definition: avutil.h:275
unsigned int lambda
Lagrange multiplier used in rate distortion.
Definition: mpegvideo.h:206
AVCodec ff_msmpeg4v2_encoder
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(constuint8_t *) pi-0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(constint16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(constint32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(constint64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64,*(constint64_t *) pi *(1.0f/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64,*(constint64_t *) pi *(1.0/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(constfloat *) pi *(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(constdouble *) pi *(INT64_C(1)<< 63)))#defineFMT_PAIR_FUNC(out, in) staticconv_func_type *constfmt_pair_to_conv_functions[AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64),};staticvoidcpy1(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, len);}staticvoidcpy2(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 2 *len);}staticvoidcpy4(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 4 *len);}staticvoidcpy8(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 8 *len);}AudioConvert *swri_audio_convert_alloc(enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, constint *ch_map, intflags){AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) returnNULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) returnNULL;if(channels==1){in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);}ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map){switch(av_get_bytes_per_sample(in_fmt)){case1:ctx->simd_f=cpy1;break;case2:ctx->simd_f=cpy2;break;case4:ctx->simd_f=cpy4;break;case8:ctx->simd_f=cpy8;break;}}if(HAVE_X86ASM &&1) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);if(ARCH_AARCH64) swri_audio_convert_init_aarch64(ctx, out_fmt, in_fmt, channels);returnctx;}voidswri_audio_convert_free(AudioConvert **ctx){av_freep(ctx);}intswri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, intlen){intch;intoff=0;constintos=(out->planar?1:out->ch_count)*out->bps;unsignedmisaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask){intplanes=in->planar?in->ch_count:1;unsignedm=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) in->ch[ch];misaligned|=m &ctx->in_simd_align_mask;}if(ctx->out_simd_align_mask){intplanes=out->planar?out->ch_count:1;unsignedm=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) out->ch[ch];misaligned|=m &ctx->out_simd_align_mask;}if(ctx->simd_f &&!ctx->ch_map &&!misaligned){off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){if(out->planar==in->planar){intplanes=out->planar?out->ch_count:1;for(ch=0;ch< planes;ch++){ctx->simd_f(out-> ch ch
Definition: audioconvert.c:56
int64_t rc_max_rate
maximum bitrate
Definition: avcodec.h:2391
uint16_t pb_time
time distance between the last b and p,s,i frame
Definition: mpegvideo.h:393
enum idct_permutation_type perm_type
Definition: idctdsp.h:97
attribute_deprecated int pre_me
Definition: avcodec.h:1957
HpelDSPContext hdsp
Definition: mpegvideo.h:229
static const uint8_t sp5x_quant_table[20][64]
Definition: sp5x.h:135
int next_lambda
next lambda used for retrying to encode a frame
Definition: mpegvideo.h:340