24 #define X265_API_IMPORTS 1
54 case NAL_UNIT_CODED_SLICE_BLA_W_LP:
55 case NAL_UNIT_CODED_SLICE_BLA_W_RADL:
56 case NAL_UNIT_CODED_SLICE_BLA_N_LP:
57 case NAL_UNIT_CODED_SLICE_IDR_W_RADL:
58 case NAL_UNIT_CODED_SLICE_IDR_N_LP:
59 case NAL_UNIT_CODED_SLICE_CRA:
84 ctx->
api = x265_api_get(0);
97 for (i = 0; x265_preset_names[i]; i++)
102 for (i = 0; x265_tune_names[i]; i++)
124 ctx->
params->vui.bEnableVideoSignalTypePresentFlag = 1;
125 ctx->
params->vui.bEnableColorDescriptionPresentFlag = 1;
135 int sar_num, sar_den;
140 snprintf(sar,
sizeof(sar),
"%d:%d", sar_num, sar_den);
141 if (ctx->
api->param_parse(ctx->
params,
"sar", sar) == X265_PARAM_BAD_VALUE) {
151 ctx->
params->internalCsp = X265_CSP_I420;
156 ctx->
params->internalCsp = X265_CSP_I422;
162 ctx->
params->vui.bEnableVideoSignalTypePresentFlag = 1;
163 ctx->
params->vui.bEnableColorDescriptionPresentFlag = 1;
167 ctx->
params->internalCsp = X265_CSP_I444;
172 if (ctx->
api->api_build_number < 85) {
174 "libx265 version is %d, must be at least 85 for gray encoding.\n",
175 ctx->
api->api_build_number);
178 ctx->
params->internalCsp = X265_CSP_I400;
186 if (ctx->
api->param_parse(ctx->
params,
"crf", crf) == X265_PARAM_BAD_VALUE) {
192 ctx->
params->rc.rateControlMode = X265_RC_ABR;
196 ctx->
params->bRepeatHeaders = 1;
207 case X265_PARAM_BAD_NAME:
209 "Unknown option: %s.\n", en->
key);
211 case X265_PARAM_BAD_VALUE:
213 "Invalid value for %s: %s.\n", en->
key, en->
value);
244 "Cannot allocate HEVC header of size %d.\n", avctx->
extradata_size);
256 const AVFrame *pic,
int *got_packet)
259 x265_picture x265pic;
260 x265_picture x265pic_out = { 0 };
268 ctx->
api->picture_init(ctx->
params, &x265pic);
271 for (i = 0; i < 3; i++) {
272 x265pic.planes[i] = pic->
data[i];
273 x265pic.stride[i] = pic->
linesize[i];
276 x265pic.pts = pic->
pts;
280 (ctx->
forced_idr ? X265_TYPE_IDR : X265_TYPE_I) :
286 ret = ctx->
api->encoder_encode(ctx->
encoder, &nal, &nnal,
287 pic ? &x265pic :
NULL, &x265pic_out);
294 for (i = 0; i < nnal; i++)
295 payload += nal[i].sizeBytes;
304 for (i = 0; i < nnal; i++) {
305 memcpy(dst, nal[i].payload, nal[i].sizeBytes);
306 dst += nal[i].sizeBytes;
312 pkt->
pts = x265pic_out.pts;
313 pkt->
dts = x265pic_out.dts;
315 #if FF_API_CODED_FRAME
317 switch (x265pic_out.sliceType) {
380 if (x265_api_get(12))
382 else if (x265_api_get(10))
384 else if (x265_api_get(8))
388 #define OFFSET(x) offsetof(libx265Context, x)
389 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
392 {
"forced-idr",
"if forcing keyframes, force them as IDR frames",
OFFSET(forced_idr),
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1,
VE },
395 {
"x265-params",
"set the x265 configuration using a :-separated list of key=value parameters",
OFFSET(x265_opts),
AV_OPT_TYPE_STRING, { 0 }, 0, 0,
VE },
421 .priv_class = &
class,
ITU-R BT2020 for 12-bit system.
static const AVOption options[]
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
This structure describes decoded (raw) audio or video data.
static int is_keyframe(NalUnitType naltype)
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
#define AV_LOG_WARNING
Something somehow does not look correct.
int64_t bit_rate
the average bitrate
#define LIBAVUTIL_VERSION_INT
#define AV_PIX_FMT_GBRP10
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.
#define AV_PIX_FMT_YUV420P12
#define AV_CODEC_CAP_AUTO_THREADS
Codec supports avctx->thread_count == 0 (auto).
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB)
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
#define AV_PIX_FMT_GRAY10
#define AV_PIX_FMT_GRAY12
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
#define AV_PIX_FMT_YUV422P12
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pic, int *got_packet)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
int flags
AV_CODEC_FLAG_*.
const char * name
Name of the codec implementation.
#define AV_PIX_FMT_YUV444P10
int ff_alloc_packet(AVPacket *avpkt, 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)
common internal API header
static av_cold void libx265_encode_init_csp(AVCodec *codec)
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.
AVCodec ff_libx265_encoder
static av_cold int libx265_encode_init(AVCodecContext *avctx)
int width
picture width / height.
#define AV_CODEC_FLAG_PSNR
error[?] variables will be set during encoding.
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
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 the parsed entries to a dictionary.
#define AV_LOG_INFO
Standard information.
Libavcodec external API header.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
main external API structure.
#define AV_PIX_FMT_YUV420P10
Describe the class of an AVClass context structure.
enum AVColorSpace colorspace
YUV colorspace type.
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
static enum AVPixelFormat x265_csp_ten[]
#define AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV444P12
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define AV_CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
ITU-R BT2020 constant luminance system.
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
#define FF_DISABLE_DEPRECATION_WARNINGS
common internal api header.
common internal and external API header
static enum AVPixelFormat x265_csp_twelve[]
attribute_deprecated AVFrame * coded_frame
the picture in the bitstream
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
static const AVCodecDefault x265_defaults[]
#define FF_ENABLE_DEPRECATION_WARNINGS
static av_cold int libx265_encode_close(AVCodecContext *avctx)
static enum AVPixelFormat x265_csp_eight[]
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key, ignoring the suffix of the found key string.
static const AVCodecDefault defaults[]
int depth
Number of bits in the component.
#define AVERROR_EXTERNAL
Generic error in an external library.
AVPixelFormat
Pixel format.
This structure stores compressed data.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...