24 #define X265_API_IMPORTS 1
55 case NAL_UNIT_CODED_SLICE_BLA_W_LP:
56 case NAL_UNIT_CODED_SLICE_BLA_W_RADL:
57 case NAL_UNIT_CODED_SLICE_BLA_N_LP:
58 case NAL_UNIT_CODED_SLICE_IDR_W_RADL:
59 case NAL_UNIT_CODED_SLICE_IDR_N_LP:
60 case NAL_UNIT_CODED_SLICE_CRA:
85 ctx->
api = x265_api_get(0);
98 for (i = 0; x265_preset_names[i]; i++)
103 for (i = 0; x265_tune_names[i]; i++)
120 if (ctx->
params->sourceWidth < 64 || ctx->
params->sourceHeight < 64)
121 ctx->
params->maxCUSize = 32;
122 if (ctx->
params->sourceWidth < 32 || ctx->
params->sourceHeight < 32)
123 ctx->
params->maxCUSize = 16;
124 if (ctx->
params->sourceWidth < 16 || ctx->
params->sourceHeight < 16) {
137 ctx->
params->vui.bEnableVideoSignalTypePresentFlag = 1;
138 ctx->
params->vui.bEnableColorDescriptionPresentFlag = 1;
148 int sar_num, sar_den;
153 snprintf(sar,
sizeof(sar),
"%d:%d", sar_num, sar_den);
154 if (ctx->
api->param_parse(ctx->
params,
"sar", sar) == X265_PARAM_BAD_VALUE) {
164 ctx->
params->internalCsp = X265_CSP_I420;
169 ctx->
params->internalCsp = X265_CSP_I422;
175 ctx->
params->vui.bEnableVideoSignalTypePresentFlag = 1;
176 ctx->
params->vui.bEnableColorDescriptionPresentFlag = 1;
180 ctx->
params->internalCsp = X265_CSP_I444;
185 if (ctx->
api->api_build_number < 85) {
187 "libx265 version is %d, must be at least 85 for gray encoding.\n",
188 ctx->
api->api_build_number);
191 ctx->
params->internalCsp = X265_CSP_I400;
199 if (ctx->
api->param_parse(ctx->
params,
"crf", crf) == X265_PARAM_BAD_VALUE) {
205 ctx->
params->rc.rateControlMode = X265_RC_ABR;
212 ctx->
params->bRepeatHeaders = 1;
223 case X265_PARAM_BAD_NAME:
225 "Unknown option: %s.\n", en->
key);
227 case X265_PARAM_BAD_VALUE:
229 "Invalid value for %s: %s.\n", en->
key, en->
value);
240 ctx->
params->rc.vbvBufferInit == 0.9) {
249 for (i = 0; x265_profile_names[i]; i++)
277 "Cannot allocate HEVC header of size %d.\n", avctx->
extradata_size);
289 const AVFrame *pic,
int *got_packet)
292 x265_picture x265pic;
293 x265_picture x265pic_out = { 0 };
301 ctx->
api->picture_init(ctx->
params, &x265pic);
304 for (i = 0; i < 3; i++) {
305 x265pic.planes[i] = pic->
data[i];
306 x265pic.stride[i] = pic->
linesize[i];
309 x265pic.pts = pic->
pts;
313 (ctx->
forced_idr ? X265_TYPE_IDR : X265_TYPE_I) :
319 ret = ctx->
api->encoder_encode(ctx->
encoder, &nal, &nnal,
320 pic ? &x265pic :
NULL, &x265pic_out);
327 for (i = 0; i < nnal; i++)
328 payload += nal[i].sizeBytes;
337 for (i = 0; i < nnal; i++) {
338 memcpy(dst, nal[i].payload, nal[i].sizeBytes);
339 dst += nal[i].sizeBytes;
345 pkt->
pts = x265pic_out.pts;
346 pkt->
dts = x265pic_out.dts;
348 #if FF_API_CODED_FRAME
350 switch (x265pic_out.sliceType) {
365 #if X265_BUILD >= 130
366 if (x265pic_out.sliceType == X265_TYPE_B)
368 if (x265pic_out.frameData.sliceType ==
'b')
420 if (x265_api_get(12))
422 else if (x265_api_get(10))
424 else if (x265_api_get(8))
428 #define OFFSET(x) offsetof(libx265Context, x)
429 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
432 {
"forced-idr",
"if forcing keyframes, force them as IDR frames",
OFFSET(forced_idr),
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1,
VE },
436 {
"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 },
462 .priv_class = &
class,
465 .wrapper_name =
"libx265",
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
int rc_initial_buffer_occupancy
Number of bits which should be loaded into the rc buffer before decoding starts.
SMPTE ST 432-1 (2010) / P3 D65 / Display P3.
#define AV_PIX_FMT_GBRP10
const char * av_default_item_name(void *ptr)
Return the context name.
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)
#define AV_PKT_FLAG_DISPOSABLE
Flag is used to indicate packets that contain frames that can be discarded by the decoder...
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...
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
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
static const AVCodecDefault defaults[]
int flags
A combination of AV_PKT_FLAG values.
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
int rc_buffer_size
decoder bitstream buffer size
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.
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...
ARIB STD-B67, known as "Hybrid log-gamma".
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.
#define AV_CODEC_FLAG_CLOSED_GOP
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...
int64_t rc_max_rate
maximum bitrate