libx264.c
Go to the documentation of this file.
1 /*
2  * H.264 encoding using the x264 library
3  * Copyright (C) 2005 Mans Rullgard <mans@mansr.com>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include "libavutil/internal.h"
23 #include "libavutil/opt.h"
24 #include "libavutil/mem.h"
25 #include "libavutil/pixdesc.h"
26 #include "avcodec.h"
27 #include "internal.h"
28 #include <x264.h>
29 #include <float.h>
30 #include <math.h>
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34 
35 typedef struct X264Context {
36  AVClass *class;
37  x264_param_t params;
38  x264_t *enc;
39  x264_picture_t pic;
41  int sei_size;
43  char *preset;
44  char *tune;
45  char *profile;
46  char *level;
48  char *wpredp;
49  char *x264opts;
50  float crf;
51  float crf_max;
52  int cqp;
53  int aq_mode;
54  float aq_strength;
55  char *psy_rd;
56  int psy;
58  int weightp;
59  int weightb;
60  int ssim;
62  int b_bias;
63  int b_pyramid;
65  int dct8x8;
67  int aud;
68  int mbtree;
69  char *deblock;
70  float cplxblur;
71  char *partitions;
74  char *stats;
75  int nal_hrd;
76  char *x264_params;
77 } X264Context;
78 
79 static void X264_log(void *p, int level, const char *fmt, va_list args)
80 {
81  static const int level_map[] = {
82  [X264_LOG_ERROR] = AV_LOG_ERROR,
83  [X264_LOG_WARNING] = AV_LOG_WARNING,
84  [X264_LOG_INFO] = AV_LOG_INFO,
85  [X264_LOG_DEBUG] = AV_LOG_DEBUG
86  };
87 
88  if (level < 0 || level > X264_LOG_DEBUG)
89  return;
90 
91  av_vlog(p, level_map[level], fmt, args);
92 }
93 
94 
96  x264_nal_t *nals, int nnal)
97 {
98  X264Context *x4 = ctx->priv_data;
99  uint8_t *p;
100  int i, size = x4->sei_size, ret;
101 
102  if (!nnal)
103  return 0;
104 
105  for (i = 0; i < nnal; i++)
106  size += nals[i].i_payload;
107 
108  if ((ret = ff_alloc_packet2(ctx, pkt, size)) < 0)
109  return ret;
110 
111  p = pkt->data;
112 
113  /* Write the SEI as part of the first frame. */
114  if (x4->sei_size > 0 && nnal > 0) {
115  if (x4->sei_size > size) {
116  av_log(ctx, AV_LOG_ERROR, "Error: nal buffer is too small\n");
117  return -1;
118  }
119  memcpy(p, x4->sei, x4->sei_size);
120  p += x4->sei_size;
121  x4->sei_size = 0;
122  av_freep(&x4->sei);
123  }
124 
125  for (i = 0; i < nnal; i++){
126  memcpy(p, nals[i].p_payload, nals[i].i_payload);
127  p += nals[i].i_payload;
128  }
129 
130  return 1;
131 }
132 
133 static int avfmt2_num_planes(int avfmt)
134 {
135  switch (avfmt) {
136  case AV_PIX_FMT_YUV420P:
137  case AV_PIX_FMT_YUVJ420P:
138  case AV_PIX_FMT_YUV420P9:
140  case AV_PIX_FMT_YUV444P:
141  return 3;
142 
143  case AV_PIX_FMT_BGR24:
144  case AV_PIX_FMT_RGB24:
145  return 1;
146 
147  default:
148  return 3;
149  }
150 }
151 
152 static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame,
153  int *got_packet)
154 {
155  X264Context *x4 = ctx->priv_data;
156  x264_nal_t *nal;
157  int nnal, i, ret;
158  x264_picture_t pic_out;
159 
160  x264_picture_init( &x4->pic );
161  x4->pic.img.i_csp = x4->params.i_csp;
162  if (x264_bit_depth > 8)
163  x4->pic.img.i_csp |= X264_CSP_HIGH_DEPTH;
164  x4->pic.img.i_plane = avfmt2_num_planes(ctx->pix_fmt);
165 
166  if (frame) {
167  for (i = 0; i < x4->pic.img.i_plane; i++) {
168  x4->pic.img.plane[i] = frame->data[i];
169  x4->pic.img.i_stride[i] = frame->linesize[i];
170  }
171 
172  x4->pic.i_pts = frame->pts;
173  x4->pic.i_type =
174  frame->pict_type == AV_PICTURE_TYPE_I ? X264_TYPE_KEYFRAME :
175  frame->pict_type == AV_PICTURE_TYPE_P ? X264_TYPE_P :
176  frame->pict_type == AV_PICTURE_TYPE_B ? X264_TYPE_B :
177  X264_TYPE_AUTO;
178  if (x4->params.b_interlaced && x4->params.b_tff != frame->top_field_first) {
179  x4->params.b_tff = frame->top_field_first;
180  x264_encoder_reconfig(x4->enc, &x4->params);
181  }
182  if (x4->params.vui.i_sar_height != ctx->sample_aspect_ratio.den ||
183  x4->params.vui.i_sar_width != ctx->sample_aspect_ratio.num) {
184  x4->params.vui.i_sar_height = ctx->sample_aspect_ratio.den;
185  x4->params.vui.i_sar_width = ctx->sample_aspect_ratio.num;
186  x264_encoder_reconfig(x4->enc, &x4->params);
187  }
188  }
189 
190  do {
191  if (x264_encoder_encode(x4->enc, &nal, &nnal, frame? &x4->pic: NULL, &pic_out) < 0)
192  return -1;
193 
194  ret = encode_nals(ctx, pkt, nal, nnal);
195  if (ret < 0)
196  return -1;
197  } while (!ret && !frame && x264_encoder_delayed_frames(x4->enc));
198 
199  pkt->pts = pic_out.i_pts;
200  pkt->dts = pic_out.i_dts;
201 
202  switch (pic_out.i_type) {
203  case X264_TYPE_IDR:
204  case X264_TYPE_I:
206  break;
207  case X264_TYPE_P:
209  break;
210  case X264_TYPE_B:
211  case X264_TYPE_BREF:
213  break;
214  }
215 
216  pkt->flags |= AV_PKT_FLAG_KEY*pic_out.b_keyframe;
217  if (ret)
218  x4->out_pic.quality = (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA;
219 
220  *got_packet = ret;
221  return 0;
222 }
223 
225 {
226  X264Context *x4 = avctx->priv_data;
227 
228  av_freep(&avctx->extradata);
229  av_free(x4->sei);
230 
231  if (x4->enc)
232  x264_encoder_close(x4->enc);
233 
234  return 0;
235 }
236 
237 #define OPT_STR(opt, param) \
238  do { \
239  int ret; \
240  if (param && (ret = x264_param_parse(&x4->params, opt, param)) < 0) { \
241  if(ret == X264_PARAM_BAD_NAME) \
242  av_log(avctx, AV_LOG_ERROR, \
243  "bad option '%s': '%s'\n", opt, param); \
244  else \
245  av_log(avctx, AV_LOG_ERROR, \
246  "bad value for '%s': '%s'\n", opt, param); \
247  return -1; \
248  } \
249  } while (0)
250 
252 {
253  switch (pix_fmt) {
254  case AV_PIX_FMT_YUV420P:
255  case AV_PIX_FMT_YUVJ420P:
256  case AV_PIX_FMT_YUV420P9:
257  case AV_PIX_FMT_YUV420P10: return X264_CSP_I420;
258  case AV_PIX_FMT_YUV422P:
259  case AV_PIX_FMT_YUV422P10: return X264_CSP_I422;
260  case AV_PIX_FMT_YUV444P:
261  case AV_PIX_FMT_YUV444P9:
262  case AV_PIX_FMT_YUV444P10: return X264_CSP_I444;
263 #ifdef X264_CSP_BGR
264  case AV_PIX_FMT_BGR24:
265  return X264_CSP_BGR;
266 
267  case AV_PIX_FMT_RGB24:
268  return X264_CSP_RGB;
269 #endif
270  };
271  return 0;
272 }
273 
274 #define PARSE_X264_OPT(name, var)\
275  if (x4->var && x264_param_parse(&x4->params, name, x4->var) < 0) {\
276  av_log(avctx, AV_LOG_ERROR, "Error parsing option '%s' with value '%s'.\n", name, x4->var);\
277  return AVERROR(EINVAL);\
278  }
279 
280 static av_cold int X264_init(AVCodecContext *avctx)
281 {
282  X264Context *x4 = avctx->priv_data;
283  int sw,sh;
284 
285  x264_param_default(&x4->params);
286 
287  x4->params.b_deblocking_filter = avctx->flags & CODEC_FLAG_LOOP_FILTER;
288 
289  x4->params.rc.f_pb_factor = avctx->b_quant_factor;
290  x4->params.analyse.i_chroma_qp_offset = avctx->chromaoffset;
291  if (x4->preset || x4->tune)
292  if (x264_param_default_preset(&x4->params, x4->preset, x4->tune) < 0) {
293  int i;
294  av_log(avctx, AV_LOG_ERROR, "Error setting preset/tune %s/%s.\n", x4->preset, x4->tune);
295  av_log(avctx, AV_LOG_INFO, "Possible presets:");
296  for (i = 0; x264_preset_names[i]; i++)
297  av_log(avctx, AV_LOG_INFO, " %s", x264_preset_names[i]);
298  av_log(avctx, AV_LOG_INFO, "\n");
299  av_log(avctx, AV_LOG_INFO, "Possible tunes:");
300  for (i = 0; x264_tune_names[i]; i++)
301  av_log(avctx, AV_LOG_INFO, " %s", x264_tune_names[i]);
302  av_log(avctx, AV_LOG_INFO, "\n");
303  return AVERROR(EINVAL);
304  }
305 
306  if (avctx->level > 0)
307  x4->params.i_level_idc = avctx->level;
308 
309  x4->params.pf_log = X264_log;
310  x4->params.p_log_private = avctx;
311  x4->params.i_log_level = X264_LOG_DEBUG;
312  x4->params.i_csp = convert_pix_fmt(avctx->pix_fmt);
313 
314  OPT_STR("weightp", x4->wpredp);
315 
316  if (avctx->bit_rate) {
317  x4->params.rc.i_bitrate = avctx->bit_rate / 1000;
318  x4->params.rc.i_rc_method = X264_RC_ABR;
319  }
320  x4->params.rc.i_vbv_buffer_size = avctx->rc_buffer_size / 1000;
321  x4->params.rc.i_vbv_max_bitrate = avctx->rc_max_rate / 1000;
322  x4->params.rc.b_stat_write = avctx->flags & CODEC_FLAG_PASS1;
323  if (avctx->flags & CODEC_FLAG_PASS2) {
324  x4->params.rc.b_stat_read = 1;
325  } else {
326  if (x4->crf >= 0) {
327  x4->params.rc.i_rc_method = X264_RC_CRF;
328  x4->params.rc.f_rf_constant = x4->crf;
329  } else if (x4->cqp >= 0) {
330  x4->params.rc.i_rc_method = X264_RC_CQP;
331  x4->params.rc.i_qp_constant = x4->cqp;
332  }
333 
334  if (x4->crf_max >= 0)
335  x4->params.rc.f_rf_constant_max = x4->crf_max;
336  }
337 
338  if (avctx->rc_buffer_size && avctx->rc_initial_buffer_occupancy > 0 &&
339  (avctx->rc_initial_buffer_occupancy <= avctx->rc_buffer_size)) {
340  x4->params.rc.f_vbv_buffer_init =
341  (float)avctx->rc_initial_buffer_occupancy / avctx->rc_buffer_size;
342  }
343 
344  OPT_STR("level", x4->level);
345 
346  if(x4->x264opts){
347  const char *p= x4->x264opts;
348  while(p){
349  char param[256]={0}, val[256]={0};
350  if(sscanf(p, "%255[^:=]=%255[^:]", param, val) == 1){
351  OPT_STR(param, "1");
352  }else
353  OPT_STR(param, val);
354  p= strchr(p, ':');
355  p+=!!p;
356  }
357  }
358 
359  if (avctx->i_quant_factor > 0)
360  x4->params.rc.f_ip_factor = 1 / fabs(avctx->i_quant_factor);
361 
362  if (avctx->me_method == ME_EPZS)
363  x4->params.analyse.i_me_method = X264_ME_DIA;
364  else if (avctx->me_method == ME_HEX)
365  x4->params.analyse.i_me_method = X264_ME_HEX;
366  else if (avctx->me_method == ME_UMH)
367  x4->params.analyse.i_me_method = X264_ME_UMH;
368  else if (avctx->me_method == ME_FULL)
369  x4->params.analyse.i_me_method = X264_ME_ESA;
370  else if (avctx->me_method == ME_TESA)
371  x4->params.analyse.i_me_method = X264_ME_TESA;
372 
373  if (avctx->gop_size >= 0)
374  x4->params.i_keyint_max = avctx->gop_size;
375  if (avctx->max_b_frames >= 0)
376  x4->params.i_bframe = avctx->max_b_frames;
377  if (avctx->scenechange_threshold >= 0)
378  x4->params.i_scenecut_threshold = avctx->scenechange_threshold;
379  if (avctx->qmin >= 0)
380  x4->params.rc.i_qp_min = avctx->qmin;
381  if (avctx->qmax >= 0)
382  x4->params.rc.i_qp_max = avctx->qmax;
383  if (avctx->max_qdiff >= 0)
384  x4->params.rc.i_qp_step = avctx->max_qdiff;
385  if (avctx->qblur >= 0)
386  x4->params.rc.f_qblur = avctx->qblur; /* temporally blur quants */
387  if (avctx->qcompress >= 0)
388  x4->params.rc.f_qcompress = avctx->qcompress; /* 0.0 => cbr, 1.0 => constant qp */
389  if (avctx->refs >= 0)
390  x4->params.i_frame_reference = avctx->refs;
391  if (avctx->trellis >= 0)
392  x4->params.analyse.i_trellis = avctx->trellis;
393  if (avctx->me_range >= 0)
394  x4->params.analyse.i_me_range = avctx->me_range;
395  if (avctx->noise_reduction >= 0)
396  x4->params.analyse.i_noise_reduction = avctx->noise_reduction;
397  if (avctx->me_subpel_quality >= 0)
398  x4->params.analyse.i_subpel_refine = avctx->me_subpel_quality;
399  if (avctx->b_frame_strategy >= 0)
400  x4->params.i_bframe_adaptive = avctx->b_frame_strategy;
401  if (avctx->keyint_min >= 0)
402  x4->params.i_keyint_min = avctx->keyint_min;
403  if (avctx->coder_type >= 0)
404  x4->params.b_cabac = avctx->coder_type == FF_CODER_TYPE_AC;
405  if (avctx->me_cmp >= 0)
406  x4->params.analyse.b_chroma_me = avctx->me_cmp & FF_CMP_CHROMA;
407 
408  if (x4->aq_mode >= 0)
409  x4->params.rc.i_aq_mode = x4->aq_mode;
410  if (x4->aq_strength >= 0)
411  x4->params.rc.f_aq_strength = x4->aq_strength;
412  PARSE_X264_OPT("psy-rd", psy_rd);
413  PARSE_X264_OPT("deblock", deblock);
414  PARSE_X264_OPT("partitions", partitions);
415  PARSE_X264_OPT("stats", stats);
416  if (x4->psy >= 0)
417  x4->params.analyse.b_psy = x4->psy;
418  if (x4->rc_lookahead >= 0)
419  x4->params.rc.i_lookahead = x4->rc_lookahead;
420  if (x4->weightp >= 0)
421  x4->params.analyse.i_weighted_pred = x4->weightp;
422  if (x4->weightb >= 0)
423  x4->params.analyse.b_weighted_bipred = x4->weightb;
424  if (x4->cplxblur >= 0)
425  x4->params.rc.f_complexity_blur = x4->cplxblur;
426 
427  if (x4->ssim >= 0)
428  x4->params.analyse.b_ssim = x4->ssim;
429  if (x4->intra_refresh >= 0)
430  x4->params.b_intra_refresh = x4->intra_refresh;
431  if (x4->b_bias != INT_MIN)
432  x4->params.i_bframe_bias = x4->b_bias;
433  if (x4->b_pyramid >= 0)
434  x4->params.i_bframe_pyramid = x4->b_pyramid;
435  if (x4->mixed_refs >= 0)
436  x4->params.analyse.b_mixed_references = x4->mixed_refs;
437  if (x4->dct8x8 >= 0)
438  x4->params.analyse.b_transform_8x8 = x4->dct8x8;
439  if (x4->fast_pskip >= 0)
440  x4->params.analyse.b_fast_pskip = x4->fast_pskip;
441  if (x4->aud >= 0)
442  x4->params.b_aud = x4->aud;
443  if (x4->mbtree >= 0)
444  x4->params.rc.b_mb_tree = x4->mbtree;
445  if (x4->direct_pred >= 0)
446  x4->params.analyse.i_direct_mv_pred = x4->direct_pred;
447 
448  if (x4->slice_max_size >= 0)
449  x4->params.i_slice_max_size = x4->slice_max_size;
450  else {
451  /*
452  * Allow x264 to be instructed through AVCodecContext about the maximum
453  * size of the RTP payload. For example, this enables the production of
454  * payload suitable for the H.264 RTP packetization-mode 0 i.e. single
455  * NAL unit per RTP packet.
456  */
457  if (avctx->rtp_payload_size)
458  x4->params.i_slice_max_size = avctx->rtp_payload_size;
459  }
460 
461  if (x4->fastfirstpass)
462  x264_param_apply_fastfirstpass(&x4->params);
463 
464  /* Allow specifying the x264 profile through AVCodecContext. */
465  if (!x4->profile)
466  switch (avctx->profile) {
468  x4->profile = av_strdup("baseline");
469  break;
471  x4->profile = av_strdup("high");
472  break;
474  x4->profile = av_strdup("high10");
475  break;
477  x4->profile = av_strdup("high422");
478  break;
480  x4->profile = av_strdup("high444");
481  break;
483  x4->profile = av_strdup("main");
484  break;
485  default:
486  break;
487  }
488 
489  if (x4->nal_hrd >= 0)
490  x4->params.i_nal_hrd = x4->nal_hrd;
491 
492  if (x4->profile)
493  if (x264_param_apply_profile(&x4->params, x4->profile) < 0) {
494  int i;
495  av_log(avctx, AV_LOG_ERROR, "Error setting profile %s.\n", x4->profile);
496  av_log(avctx, AV_LOG_INFO, "Possible profiles:");
497  for (i = 0; x264_profile_names[i]; i++)
498  av_log(avctx, AV_LOG_INFO, " %s", x264_profile_names[i]);
499  av_log(avctx, AV_LOG_INFO, "\n");
500  return AVERROR(EINVAL);
501  }
502 
503  x4->params.i_width = avctx->width;
504  x4->params.i_height = avctx->height;
505  av_reduce(&sw, &sh, avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den, 4096);
506  x4->params.vui.i_sar_width = sw;
507  x4->params.vui.i_sar_height = sh;
508  x4->params.i_fps_num = x4->params.i_timebase_den = avctx->time_base.den;
509  x4->params.i_fps_den = x4->params.i_timebase_num = avctx->time_base.num;
510 
511  x4->params.analyse.b_psnr = avctx->flags & CODEC_FLAG_PSNR;
512 
513  x4->params.i_threads = avctx->thread_count;
514  if (avctx->thread_type)
515  x4->params.b_sliced_threads = avctx->thread_type == FF_THREAD_SLICE;
516 
517  x4->params.b_interlaced = avctx->flags & CODEC_FLAG_INTERLACED_DCT;
518 
519  x4->params.b_open_gop = !(avctx->flags & CODEC_FLAG_CLOSED_GOP);
520 
521  x4->params.i_slice_count = avctx->slices;
522 
523  x4->params.vui.b_fullrange = avctx->pix_fmt == AV_PIX_FMT_YUVJ420P;
524 
525  if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER)
526  x4->params.b_repeat_headers = 0;
527 
528  if (x4->x264_params) {
529  AVDictionary *dict = NULL;
530  AVDictionaryEntry *en = NULL;
531 
532  if (!av_dict_parse_string(&dict, x4->x264_params, "=", ":", 0)) {
533  while ((en = av_dict_get(dict, "", en, AV_DICT_IGNORE_SUFFIX))) {
534  if (x264_param_parse(&x4->params, en->key, en->value) < 0)
535  av_log(avctx, AV_LOG_WARNING,
536  "Error parsing option '%s = %s'.\n",
537  en->key, en->value);
538  }
539 
540  av_dict_free(&dict);
541  }
542  }
543 
544  // update AVCodecContext with x264 parameters
545  avctx->has_b_frames = x4->params.i_bframe ?
546  x4->params.i_bframe_pyramid ? 2 : 1 : 0;
547  if (avctx->max_b_frames < 0)
548  avctx->max_b_frames = 0;
549 
550  avctx->bit_rate = x4->params.rc.i_bitrate*1000;
551 
552  x4->enc = x264_encoder_open(&x4->params);
553  if (!x4->enc)
554  return -1;
555 
556  avctx->coded_frame = &x4->out_pic;
557 
558  if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER) {
559  x264_nal_t *nal;
560  uint8_t *p;
561  int nnal, s, i;
562 
563  s = x264_encoder_headers(x4->enc, &nal, &nnal);
564  avctx->extradata = p = av_malloc(s);
565 
566  for (i = 0; i < nnal; i++) {
567  /* Don't put the SEI in extradata. */
568  if (nal[i].i_type == NAL_SEI) {
569  av_log(avctx, AV_LOG_INFO, "%s\n", nal[i].p_payload+25);
570  x4->sei_size = nal[i].i_payload;
571  x4->sei = av_malloc(x4->sei_size);
572  memcpy(x4->sei, nal[i].p_payload, nal[i].i_payload);
573  continue;
574  }
575  memcpy(p, nal[i].p_payload, nal[i].i_payload);
576  p += nal[i].i_payload;
577  }
578  avctx->extradata_size = p - avctx->extradata;
579  }
580 
581  return 0;
582 }
583 
584 static const enum AVPixelFormat pix_fmts_8bit[] = {
590 };
591 static const enum AVPixelFormat pix_fmts_9bit[] = {
595 };
596 static const enum AVPixelFormat pix_fmts_10bit[] = {
601 };
602 static const enum AVPixelFormat pix_fmts_8bit_rgb[] = {
603 #ifdef X264_CSP_BGR
606 #endif
608 };
609 
610 static av_cold void X264_init_static(AVCodec *codec)
611 {
612  if (x264_bit_depth == 8)
613  codec->pix_fmts = pix_fmts_8bit;
614  else if (x264_bit_depth == 9)
615  codec->pix_fmts = pix_fmts_9bit;
616  else if (x264_bit_depth == 10)
617  codec->pix_fmts = pix_fmts_10bit;
618 }
619 
620 #define OFFSET(x) offsetof(X264Context, x)
621 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
622 static const AVOption options[] = {
623  { "preset", "Set the encoding preset (cf. x264 --fullhelp)", OFFSET(preset), AV_OPT_TYPE_STRING, { .str = "medium" }, 0, 0, VE},
624  { "tune", "Tune the encoding params (cf. x264 --fullhelp)", OFFSET(tune), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
625  { "profile", "Set profile restrictions (cf. x264 --fullhelp) ", OFFSET(profile), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
626  { "fastfirstpass", "Use fast settings when encoding first pass", OFFSET(fastfirstpass), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, VE},
627  {"level", "Specify level (as defined by Annex A)", OFFSET(level), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
628  {"passlogfile", "Filename for 2 pass stats", OFFSET(stats), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
629  {"wpredp", "Weighted prediction for P-frames", OFFSET(wpredp), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
630  {"x264opts", "x264 options", OFFSET(x264opts), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
631  { "crf", "Select the quality for constant quality mode", OFFSET(crf), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE },
632  { "crf_max", "In CRF mode, prevents VBV from lowering quality beyond this point.",OFFSET(crf_max), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE },
633  { "qp", "Constant quantization parameter rate control method",OFFSET(cqp), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
634  { "aq-mode", "AQ method", OFFSET(aq_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "aq_mode"},
635  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_NONE}, INT_MIN, INT_MAX, VE, "aq_mode" },
636  { "variance", "Variance AQ (complexity mask)", 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_VARIANCE}, INT_MIN, INT_MAX, VE, "aq_mode" },
637  { "autovariance", "Auto-variance AQ (experimental)", 0, AV_OPT_TYPE_CONST, {.i64 = X264_AQ_AUTOVARIANCE}, INT_MIN, INT_MAX, VE, "aq_mode" },
638  { "aq-strength", "AQ strength. Reduces blocking and blurring in flat and textured areas.", OFFSET(aq_strength), AV_OPT_TYPE_FLOAT, {.dbl = -1}, -1, FLT_MAX, VE},
639  { "psy", "Use psychovisual optimizations.", OFFSET(psy), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
640  { "psy-rd", "Strength of psychovisual optimization, in <psy-rd>:<psy-trellis> format.", OFFSET(psy_rd), AV_OPT_TYPE_STRING, {0 }, 0, 0, VE},
641  { "rc-lookahead", "Number of frames to look ahead for frametype and ratecontrol", OFFSET(rc_lookahead), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
642  { "weightb", "Weighted prediction for B-frames.", OFFSET(weightb), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
643  { "weightp", "Weighted prediction analysis method.", OFFSET(weightp), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "weightp" },
644  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_WEIGHTP_NONE}, INT_MIN, INT_MAX, VE, "weightp" },
645  { "simple", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_WEIGHTP_SIMPLE}, INT_MIN, INT_MAX, VE, "weightp" },
646  { "smart", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_WEIGHTP_SMART}, INT_MIN, INT_MAX, VE, "weightp" },
647  { "ssim", "Calculate and print SSIM stats.", OFFSET(ssim), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
648  { "intra-refresh", "Use Periodic Intra Refresh instead of IDR frames.",OFFSET(intra_refresh),AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE },
649  { "b-bias", "Influences how often B-frames are used", OFFSET(b_bias), AV_OPT_TYPE_INT, { .i64 = INT_MIN}, INT_MIN, INT_MAX, VE },
650  { "b-pyramid", "Keep some B-frames as references.", OFFSET(b_pyramid), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "b_pyramid" },
651  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_NONE}, INT_MIN, INT_MAX, VE, "b_pyramid" },
652  { "strict", "Strictly hierarchical pyramid", 0, AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_STRICT}, INT_MIN, INT_MAX, VE, "b_pyramid" },
653  { "normal", "Non-strict (not Blu-ray compatible)", 0, AV_OPT_TYPE_CONST, {.i64 = X264_B_PYRAMID_NORMAL}, INT_MIN, INT_MAX, VE, "b_pyramid" },
654  { "mixed-refs", "One reference per partition, as opposed to one reference per macroblock", OFFSET(mixed_refs), AV_OPT_TYPE_INT, { .i64 = -1}, -1, 1, VE },
655  { "8x8dct", "High profile 8x8 transform.", OFFSET(dct8x8), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE},
656  { "fast-pskip", NULL, OFFSET(fast_pskip), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE},
657  { "aud", "Use access unit delimiters.", OFFSET(aud), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE},
658  { "mbtree", "Use macroblock tree ratecontrol.", OFFSET(mbtree), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE},
659  { "deblock", "Loop filter parameters, in <alpha:beta> form.", OFFSET(deblock), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
660  { "cplxblur", "Reduce fluctuations in QP (before curve compression)", OFFSET(cplxblur), AV_OPT_TYPE_FLOAT, {.dbl = -1 }, -1, FLT_MAX, VE},
661  { "partitions", "A comma-separated list of partitions to consider. "
662  "Possible values: p8x8, p4x4, b8x8, i8x8, i4x4, none, all", OFFSET(partitions), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE},
663  { "direct-pred", "Direct MV prediction mode", OFFSET(direct_pred), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "direct-pred" },
664  { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_NONE }, 0, 0, VE, "direct-pred" },
665  { "spatial", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_SPATIAL }, 0, 0, VE, "direct-pred" },
666  { "temporal", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_TEMPORAL }, 0, 0, VE, "direct-pred" },
667  { "auto", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_DIRECT_PRED_AUTO }, 0, 0, VE, "direct-pred" },
668  { "slice-max-size","Limit the size of each slice in bytes", OFFSET(slice_max_size),AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE },
669  { "stats", "Filename for 2 pass stats", OFFSET(stats), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
670  { "nal-hrd", "Signal HRD information (requires vbv-bufsize; "
671  "cbr not allowed in .mp4)", OFFSET(nal_hrd), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, VE, "nal-hrd" },
672  { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_NAL_HRD_NONE}, INT_MIN, INT_MAX, VE, "nal-hrd" },
673  { "vbr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_NAL_HRD_VBR}, INT_MIN, INT_MAX, VE, "nal-hrd" },
674  { "cbr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = X264_NAL_HRD_CBR}, INT_MIN, INT_MAX, VE, "nal-hrd" },
675  { "x264-params", "Override the x264 configuration using a :-separated list of key=value parameters", OFFSET(x264_params), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE },
676  { NULL },
677 };
678 
679 static const AVClass class = {
680  .class_name = "libx264",
681  .item_name = av_default_item_name,
682  .option = options,
684 };
685 
686 static const AVClass rgbclass = {
687  .class_name = "libx264rgb",
688  .item_name = av_default_item_name,
689  .option = options,
690  .version = LIBAVUTIL_VERSION_INT,
691 };
692 
693 static const AVCodecDefault x264_defaults[] = {
694  { "b", "0" },
695  { "bf", "-1" },
696  { "flags2", "0" },
697  { "g", "-1" },
698  { "i_qfactor", "-1" },
699  { "qmin", "-1" },
700  { "qmax", "-1" },
701  { "qdiff", "-1" },
702  { "qblur", "-1" },
703  { "qcomp", "-1" },
704 // { "rc_lookahead", "-1" },
705  { "refs", "-1" },
706  { "sc_threshold", "-1" },
707  { "trellis", "-1" },
708  { "nr", "-1" },
709  { "me_range", "-1" },
710  { "me_method", "-1" },
711  { "subq", "-1" },
712  { "b_strategy", "-1" },
713  { "keyint_min", "-1" },
714  { "coder", "-1" },
715  { "cmp", "-1" },
716  { "threads", AV_STRINGIFY(X264_THREADS_AUTO) },
717  { "thread_type", "0" },
718  { "flags", "+cgop" },
719  { "rc_init_occupancy","-1" },
720  { NULL },
721 };
722 
724  .name = "libx264",
725  .type = AVMEDIA_TYPE_VIDEO,
726  .id = AV_CODEC_ID_H264,
727  .priv_data_size = sizeof(X264Context),
728  .init = X264_init,
729  .encode2 = X264_frame,
730  .close = X264_close,
731  .capabilities = CODEC_CAP_DELAY | CODEC_CAP_AUTO_THREADS,
732  .long_name = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
733  .priv_class = &class,
734  .defaults = x264_defaults,
735  .init_static_data = X264_init_static,
736 };
737 
739  .name = "libx264rgb",
740  .type = AVMEDIA_TYPE_VIDEO,
741  .id = AV_CODEC_ID_H264,
742  .priv_data_size = sizeof(X264Context),
743  .init = X264_init,
744  .encode2 = X264_frame,
745  .close = X264_close,
746  .capabilities = CODEC_CAP_DELAY,
747  .long_name = NULL_IF_CONFIG_SMALL("libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB"),
748  .priv_class = &rgbclass,
749  .defaults = x264_defaults,
750  .pix_fmts = pix_fmts_8bit_rgb,
751 };
static int convert_pix_fmt(enum AVPixelFormat pix_fmt)
Definition: libx264.c:251
#define FF_PROFILE_H264_HIGH_10
const char * s
Definition: avisynth_c.h:668
static int avfmt2_num_planes(int avfmt)
Definition: libx264.c:133
char * partitions
Definition: libx264.c:71
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
int dct8x8
Definition: libx264.c:65
AVOption.
Definition: opt.h:251
#define CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
#define FF_PROFILE_H264_HIGH_444
av_default_item_name
const char * fmt
Definition: avisynth_c.h:669
AVCodec ff_libx264_encoder
Definition: libx264.c:723
float qblur
amount of qscale smoothing over time (0.0-1.0)
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:73
packed RGB 8:8:8, 24bpp, RGBRGB...
Definition: pixfmt.h:70
memory handling functions
#define CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
AVFrame * coded_frame
the picture in the bitstream
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
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...
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:154
int rc_initial_buffer_occupancy
Number of bits which should be loaded into the rc buffer before decoding starts.
int num
numerator
Definition: rational.h:44
static enum AVPixelFormat pix_fmts_8bit_rgb[]
Definition: libx264.c:602
enhanced predictive zonal search
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel...
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
char * wpredp
Definition: libx264.c:48
static void X264_log(void *p, int level, const char *fmt, va_list args)
Definition: libx264.c:79
#define FF_PROFILE_H264_MAIN
AVDictionaryEntry * av_dict_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:39
static av_cold int X264_init(AVCodecContext *avctx)
Definition: libx264.c:280
int scenechange_threshold
scene change detection threshold 0 is default, larger means fewer detected scene changes.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
Definition: mem.c:198
x264_param_t params
Definition: libx264.c:37
char * x264opts
Definition: libx264.c:49
#define CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
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:55
static const AVClass rgbclass
Definition: libx264.c:686
uint8_t
#define av_cold
Definition: attributes.h:78
AVOptions.
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
#define CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
static AVPacket pkt
Definition: demuxing.c:56
float b_quant_factor
qscale factor between IP and B-frames If > 0 then the last P-frame quantizer will be used (q= lastp_q...
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
Definition: frame.h:159
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
int me_cmp
motion estimation comparison function
#define FF_CMP_CHROMA
int coder_type
coder type
uint8_t * data
int b_pyramid
Definition: libx264.c:63
x264_picture_t pic
Definition: libx264.c:39
enum AVPixelFormat pix_fmt
Definition: v4l.c:63
float cplxblur
Definition: libx264.c:70
char * stats
Definition: libx264.c:74
int intra_refresh
Definition: libx264.c:61
int rc_lookahead
Definition: libx264.c:57
hexagon based search
void av_vlog(void *avcl, int level, const char *fmt, va_list vl)
Definition: log.c:258
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
int chromaoffset
chroma qp offset from luma
frame
Definition: stft.m:14
#define CODEC_FLAG_LOOP_FILTER
loop filter
static enum AVPixelFormat pix_fmts_10bit[]
Definition: libx264.c:596
int has_b_frames
Size of the frame reordering buffer in the decoder.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
Definition: mem.c:183
#define CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
int qmax
maximum quantizer
char * profile
Definition: libx264.c:45
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
int fastfirstpass
Definition: libx264.c:47
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
Definition: dict.c:162
int flags
CODEC_FLAG_*.
int rc_max_rate
maximum bitrate
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
int mbtree
Definition: libx264.c:68
const char * name
Name of the codec implementation.
float i_quant_factor
qscale factor between P and I-frames If > 0 then the last p frame quantizer will be used (q= lastp_q*...
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:281
char * deblock
Definition: libx264.c:69
transformed exhaustive search algorithm
external API header
int size
int flags
A combination of AV_PKT_FLAG values.
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:72
int rc_buffer_size
decoder bitstream buffer size
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition: rational.c:36
common internal API header
char * psy_rd
Definition: libx264.c:55
int refs
number of reference frames
static enum AVPixelFormat pix_fmts_9bit[]
Definition: libx264.c:591
#define PARSE_X264_OPT(name, var)
Definition: libx264.c:274
int bit_rate
the average bitrate
enum AVPixelFormat * pix_fmts
array of supported pixel formats, or NULL if unknown, array is terminated by -1
enum AVPictureType pict_type
Picture type of the frame.
Definition: frame.h:144
#define OPT_STR(opt, param)
Definition: libx264.c:237
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_...
Definition: pixfmt.h:80
ret
Definition: avfilter.c:821
int width
picture width / height.
int cqp
Definition: libx264.c:52
x264_t * enc
Definition: libx264.c:38
#define CODEC_CAP_AUTO_THREADS
Codec supports avctx->thread_count == 0 (auto).
int quality
quality (between 1 (good) and FF_LAMBDA_MAX (bad))
Definition: frame.h:185
#define CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
int slice_max_size
Definition: libx264.c:73
packed RGB 8:8:8, 24bpp, BGRBGR...
Definition: pixfmt.h:71
int nal_hrd
Definition: libx264.c:75
int max_qdiff
maximum quantizer difference between frames
int weightp
Definition: libx264.c:58
#define AV_PIX_FMT_YUV444P9
Definition: pixfmt.h:278
LIBAVUTIL_VERSION_INT
Definition: eval.c:55
char * x264_params
Definition: libx264.c:76
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int size)
Check AVPacket size and/or allocate data.
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
static enum AVPixelFormat pix_fmts_8bit[]
Definition: libx264.c:584
static const AVCodecDefault x264_defaults[]
Definition: libx264.c:693
int av_dict_parse_string(AVDictionary **pm, const char *str, const char *key_val_sep, const char *pairs_sep, int flags)
Parse the key/value pairs list and add to a dictionary.
Definition: dict.c:139
Definition: h264.h:110
NULL
Definition: eval.c:55
char * level
Definition: libx264.c:46
AVFrame out_pic
Definition: libx264.c:42
static av_cold int X264_close(AVCodecContext *avctx)
Definition: libx264.c:224
#define FF_THREAD_SLICE
Decode more than one part of a single frame at once.
char * av_strdup(const char *s)
Duplicate the string s.
Definition: mem.c:220
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
Definition: frame.h:101
normalize analysis window sw
main external API structure.
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
static const AVOption options[]
Definition: libx264.c:622
int qmin
minimum quantizer
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:279
float crf
Definition: libx264.c:50
int aq_mode
Definition: libx264.c:53
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:73
int aud
Definition: libx264.c:67
#define AV_STRINGIFY(s)
Describe the class of an AVClass context structure.
Definition: log.h:50
synthesis window for stochastic i
uint8_t * sei
Definition: libx264.c:40
int psy
Definition: libx264.c:56
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:276
#define FF_CODER_TYPE_AC
struct X264Context X264Context
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Buffer references ownership and permissions
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
int sei_size
Definition: libx264.c:41
#define CODEC_FLAG_CLOSED_GOP
char * preset
Definition: libx264.c:43
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:280
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:87
int b_bias
Definition: libx264.c:62
int fast_pskip
Definition: libx264.c:66
int noise_reduction
noise reduction strength
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
static av_cold void X264_init_static(AVCodec *codec)
Definition: libx264.c:610
int mixed_refs
Definition: libx264.c:64
preset
Definition: vf_curves.c:39
#define FF_PROFILE_H264_HIGH
char * tune
Definition: libx264.c:44
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:68
#define VE
Definition: libx264.c:621
int weightb
Definition: libx264.c:59
float aq_strength
Definition: libx264.c:54
common internal api header.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
Bi-dir predicted.
Definition: avutil.h:218
char * key
Definition: dict.h:81
int den
denominator
Definition: rational.h:45
int trellis
trellis RD quantization
int slices
Number of slices.
char * value
Definition: dict.h:82
int top_field_first
If the content is interlaced, is top field displayed first.
Definition: frame.h:275
uneven multi-hexagon search
AVCodec ff_libx264rgb_encoder
Definition: libx264.c:738
#define FF_PROFILE_H264_BASELINE
int ssim
Definition: libx264.c:60
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
Definition: avutil.h:169
#define FF_PROFILE_H264_HIGH_422
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
float crf_max
Definition: libx264.c:51
#define AV_LOG_INFO
Definition: log.h:156
#define OFFSET(x)
Definition: libx264.c:620
int direct_pred
Definition: libx264.c:72
#define AV_DICT_IGNORE_SUFFIX
Definition: dict.h:68
static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: libx264.c:152
x4
Definition: Lab2 1d.m:1
int me_method
Motion estimation algorithm used for video coding.
AVPixelFormat
Pixel format.
Definition: pixfmt.h:66
This structure stores compressed data.
int me_subpel_quality
subpel ME quality
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
Predicted.
Definition: avutil.h:217
int thread_type
Which multithreading methods to use.
int keyint_min
minimum GOP size
static int encode_nals(AVCodecContext *ctx, AVPacket *pkt, x264_nal_t *nals, int nnal)
Definition: libx264.c:95