FFmpeg
Data Structures | Macros | Functions | Variables
libx264.c File Reference
#include "config_components.h"
#include "libavutil/buffer.h"
#include "libavutil/eval.h"
#include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "libavutil/mastering_display_metadata.h"
#include "libavutil/mem.h"
#include "libavutil/pixdesc.h"
#include "libavutil/stereo3d.h"
#include "libavutil/time.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/video_hint.h"
#include "avcodec.h"
#include "codec_internal.h"
#include "encode.h"
#include "internal.h"
#include "packet_internal.h"
#include "atsc_a53.h"
#include "sei.h"
#include "golomb.h"
#include <x264.h>
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Go to the source code of this file.

Data Structures

struct  X264Opaque
 
struct  X264Context
 

Macros

#define MB_SIZE   16
 
#define MB_LSIZE   4
 
#define MB_FLOOR(x)   ((x) >> (MB_LSIZE))
 
#define MB_CEIL(x)   MB_FLOOR((x) + (MB_SIZE - 1))
 
#define COMPUTE_MBINFO(mbinfo_filler_, mbinfo_marker_, compute_coords_fn_)
 
#define PARSE_X264_OPT(name, var)
 
#define OFFSET(x)   offsetof(X264Context, x)
 
#define VE   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 

Functions

static void X264_log (void *p, int level, const char *fmt, va_list args)
 
static void opaque_uninit (X264Opaque *o)
 
static int encode_nals (AVCodecContext *ctx, AVPacket *pkt, const x264_nal_t *nals, int nnal)
 
static void reconfig_encoder (AVCodecContext *ctx, const AVFrame *frame)
 
static void free_picture (x264_picture_t *pic)
 
static enum AVPixelFormat csp_to_pixfmt (int csp)
 
static void av_always_inline mbinfo_compute_changed_coords (const AVVideoRect *rect, int *min_x, int *max_x, int *min_y, int *max_y)
 
static void av_always_inline mbinfo_compute_constant_coords (const AVVideoRect *rect, int *min_x, int *max_x, int *min_y, int *max_y)
 
static int setup_mb_info (AVCodecContext *ctx, x264_picture_t *pic, const AVFrame *frame, const AVVideoHint *info)
 
static int setup_roi (AVCodecContext *ctx, x264_picture_t *pic, const AVFrame *frame, const uint8_t *data, size_t size)
 
static int setup_frame (AVCodecContext *ctx, const AVFrame *frame, x264_picture_t **ppic)
 
static int X264_frame (AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
 
static void X264_flush (AVCodecContext *avctx)
 
static av_cold int X264_close (AVCodecContext *avctx)
 
static int parse_opts (AVCodecContext *avctx, const char *opt, const char *param)
 
static int convert_pix_fmt (enum AVPixelFormat pix_fmt)
 
static int save_sei (AVCodecContext *avctx, x264_nal_t *nal)
 
static int set_extradata (AVCodecContext *avctx)
 
static void handle_side_data (AVCodecContext *avctx, x264_param_t *params)
 
static av_cold int X264_init (AVCodecContext *avctx)
 

Variables

static enum AVPixelFormat pix_fmts_8bit []
 
static enum AVPixelFormat pix_fmts_9bit []
 
static enum AVPixelFormat pix_fmts_10bit []
 
static enum AVPixelFormat pix_fmts_all []
 
static const AVOption options []
 
static const FFCodecDefault x264_defaults []
 

Macro Definition Documentation

◆ MB_SIZE

#define MB_SIZE   16

Definition at line 53 of file libx264.c.

◆ MB_LSIZE

#define MB_LSIZE   4

Definition at line 54 of file libx264.c.

◆ MB_FLOOR

#define MB_FLOOR (   x)    ((x) >> (MB_LSIZE))

Definition at line 55 of file libx264.c.

◆ MB_CEIL

#define MB_CEIL (   x)    MB_FLOOR((x) + (MB_SIZE - 1))

Definition at line 56 of file libx264.c.

◆ COMPUTE_MBINFO

#define COMPUTE_MBINFO (   mbinfo_filler_,
  mbinfo_marker_,
  compute_coords_fn_ 
)
Value:
memset(mbinfo, mbinfo_filler_, sizeof(*mbinfo) * mb_width * mb_height); \
for (int i = 0; i < nb_rects; i++) { \
int min_x, max_x, min_y, max_y; \
\
compute_coords_fn_(mbinfo_rects, &min_x, &max_x, &min_y, &max_y); \
for (int mb_y = min_y; mb_y < max_y; ++mb_y) { \
memset(mbinfo + mb_y * mb_width + min_x, mbinfo_marker_, max_x - min_x); \
} \
\
mbinfo_rects++; \
} \

◆ PARSE_X264_OPT

#define PARSE_X264_OPT (   name,
  var 
)
Value:
if (x4->var && x264_param_parse(&x4->params, name, x4->var) < 0) {\
av_log(avctx, AV_LOG_ERROR, "Error parsing option '%s' with value '%s'.\n", name, x4->var);\
return AVERROR(EINVAL);\
}

Definition at line 984 of file libx264.c.

◆ OFFSET

#define OFFSET (   x)    offsetof(X264Context, x)

Definition at line 1501 of file libx264.c.

◆ VE

Definition at line 1502 of file libx264.c.

Function Documentation

◆ X264_log()

static void X264_log ( void *  p,
int  level,
const char *  fmt,
va_list  args 
)
static

Definition at line 133 of file libx264.c.

Referenced by X264_init().

◆ opaque_uninit()

static void opaque_uninit ( X264Opaque o)
static

Definition at line 148 of file libx264.c.

Referenced by setup_frame(), X264_close(), X264_flush(), and X264_frame().

◆ encode_nals()

static int encode_nals ( AVCodecContext ctx,
AVPacket pkt,
const x264_nal_t *  nals,
int  nnal 
)
static

Definition at line 154 of file libx264.c.

Referenced by X264_frame().

◆ reconfig_encoder()

static void reconfig_encoder ( AVCodecContext ctx,
const AVFrame frame 
)
static

Definition at line 197 of file libx264.c.

Referenced by setup_frame().

◆ free_picture()

static void free_picture ( x264_picture_t *  pic)
static

Definition at line 295 of file libx264.c.

Referenced by setup_frame().

◆ csp_to_pixfmt()

static enum AVPixelFormat csp_to_pixfmt ( int  csp)
static

Definition at line 305 of file libx264.c.

Referenced by X264_frame().

◆ mbinfo_compute_changed_coords()

static void av_always_inline mbinfo_compute_changed_coords ( const AVVideoRect rect,
int *  min_x,
int *  max_x,
int *  min_y,
int *  max_y 
)
static

Definition at line 327 of file libx264.c.

Referenced by setup_mb_info().

◆ mbinfo_compute_constant_coords()

static void av_always_inline mbinfo_compute_constant_coords ( const AVVideoRect rect,
int *  min_x,
int *  max_x,
int *  min_y,
int *  max_y 
)
static

Definition at line 339 of file libx264.c.

Referenced by setup_mb_info().

◆ setup_mb_info()

static int setup_mb_info ( AVCodecContext ctx,
x264_picture_t *  pic,
const AVFrame frame,
const AVVideoHint info 
)
static

Definition at line 351 of file libx264.c.

Referenced by setup_frame().

◆ setup_roi()

static int setup_roi ( AVCodecContext ctx,
x264_picture_t *  pic,
const AVFrame frame,
const uint8_t *  data,
size_t  size 
)
static

Definition at line 395 of file libx264.c.

Referenced by setup_frame().

◆ setup_frame()

static int setup_frame ( AVCodecContext ctx,
const AVFrame frame,
x264_picture_t **  ppic 
)
static

Definition at line 468 of file libx264.c.

Referenced by X264_frame().

◆ X264_frame()

static int X264_frame ( AVCodecContext ctx,
AVPacket pkt,
const AVFrame frame,
int *  got_packet 
)
static

Definition at line 611 of file libx264.c.

◆ X264_flush()

static void X264_flush ( AVCodecContext avctx)
static

Definition at line 744 of file libx264.c.

◆ X264_close()

static av_cold int X264_close ( AVCodecContext avctx)
static

Definition at line 762 of file libx264.c.

◆ parse_opts()

static int parse_opts ( AVCodecContext avctx,
const char *  opt,
const char *  param 
)
static

Definition at line 784 of file libx264.c.

Referenced by X264_init().

◆ convert_pix_fmt()

static int convert_pix_fmt ( enum AVPixelFormat  pix_fmt)
static

Definition at line 810 of file libx264.c.

Referenced by X264_init().

◆ save_sei()

static int save_sei ( AVCodecContext avctx,
x264_nal_t *  nal 
)
static

Definition at line 845 of file libx264.c.

Referenced by set_extradata().

◆ set_extradata()

static int set_extradata ( AVCodecContext avctx)
static

Definition at line 948 of file libx264.c.

Referenced by X264_init().

◆ handle_side_data()

static void handle_side_data ( AVCodecContext avctx,
x264_param_t *  params 
)
static

Definition at line 1038 of file libx264.c.

Referenced by X264_init().

◆ X264_init()

static av_cold int X264_init ( AVCodecContext avctx)
static

Definition at line 1065 of file libx264.c.

Variable Documentation

◆ pix_fmts_8bit

enum AVPixelFormat pix_fmts_8bit[]
static

◆ pix_fmts_9bit

enum AVPixelFormat pix_fmts_9bit[]
static
Initial value:

Definition at line 1458 of file libx264.c.

◆ pix_fmts_10bit

enum AVPixelFormat pix_fmts_10bit[]
static

◆ pix_fmts_all

enum AVPixelFormat pix_fmts_all[]
static

◆ options

const AVOption options[]
static

Definition at line 1503 of file libx264.c.

◆ x264_defaults

const FFCodecDefault x264_defaults[]
static
Initial value:
= {
{ "b", "0" },
{ "bf", "-1" },
{ "flags2", "0" },
{ "g", "-1" },
{ "i_qfactor", "-1" },
{ "b_qfactor", "-1" },
{ "qmin", "-1" },
{ "qmax", "-1" },
{ "qdiff", "-1" },
{ "qblur", "-1" },
{ "qcomp", "-1" },
{ "refs", "-1" },
{ "trellis", "-1" },
{ "me_range", "-1" },
{ "subq", "-1" },
{ "keyint_min", "-1" },
{ "cmp", "-1" },
{ "threads", AV_STRINGIFY(X264_THREADS_AUTO) },
{ "thread_type", "0" },
{ "flags", "+cgop" },
{ "rc_init_occupancy","-1" },
{ NULL },
}

Definition at line 1584 of file libx264.c.

name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:478
AV_PIX_FMT_NV20
#define AV_PIX_FMT_NV20
Definition: pixfmt.h:526
AV_PIX_FMT_YUV444P10
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:481
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:209
AV_PIX_FMT_YUVJ422P
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
Definition: pixfmt.h:86
AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUV420P9
Definition: pixfmt.h:475
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
AV_PIX_FMT_YUVJ444P
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
Definition: pixfmt.h:87
NULL
#define NULL
Definition: coverity.c:32
AV_PIX_FMT_YUVJ420P
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
Definition: pixfmt.h:85
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:479
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:425
AV_PIX_FMT_NV16
@ AV_PIX_FMT_NV16
interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:198
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AV_STRINGIFY
#define AV_STRINGIFY(s)
Definition: macros.h:66
AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV444P9
Definition: pixfmt.h:477
AV_PIX_FMT_NV12
@ AV_PIX_FMT_NV12
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
Definition: pixfmt.h:96
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition: pixfmt.h:72
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:78
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:77