Go to the documentation of this file.
   24 #include <EbSvtAv1ErrorCodes.h> 
   25 #include <EbSvtAv1Enc.h> 
   65 #if FF_API_SVTAV1_OPTS 
   85     { EB_ErrorNone,                             0,              
"success"                   },
 
   86     { EB_ErrorInsufficientResources,      
AVERROR(ENOMEM),      
"insufficient resources"    },
 
   87     { EB_ErrorUndefined,                  
AVERROR(EINVAL),      
"undefined error"           },
 
   88     { EB_ErrorInvalidComponent,           
AVERROR(EINVAL),      
"invalid component"         },
 
   89     { EB_ErrorBadParameter,               
AVERROR(EINVAL),      
"bad parameter"             },
 
   90     { EB_ErrorDestroyThreadFailed,        
AVERROR_EXTERNAL,     
"failed to destroy thread"  },
 
   91     { EB_ErrorSemaphoreUnresponsive,      
AVERROR_EXTERNAL,     
"semaphore unresponsive"    },
 
   92     { EB_ErrorDestroySemaphoreFailed,     
AVERROR_EXTERNAL,     
"failed to destroy semaphore"},
 
   96     { EB_NoErrorEmptyQueue,               
AVERROR(EAGAIN),      
"empty queue"               },
 
  110     *
desc = 
"unknown error";
 
  115                            const char *error_string)
 
  127     const size_t luma_size = 
config->source_width * 
config->source_height *
 
  128         (
config->encoder_bit_depth > 8 ? 2 : 1);
 
  130     EbSvtIOFormat *in_data;
 
  132     svt_enc->
raw_size = luma_size * 3 / 2;
 
  140     if (!svt_enc->
in_buf->p_buffer)
 
  157 #if FF_API_SVTAV1_OPTS 
  160     if (svt_enc->
tier >= 0)
 
  161         param->tier                   = svt_enc->
tier;
 
  162     if (svt_enc->
scd >= 0)
 
  163         param->scene_change_detection = svt_enc->
scd;
 
  170         param->look_ahead_distance    = svt_enc->
la_depth;
 
  174         param->enc_mode             = svt_enc->
enc_mode;
 
  177         param->target_bit_rate      = avctx->
bit_rate;
 
  179             param->rate_control_mode = 1;
 
  181             param->rate_control_mode = 2;
 
  183         param->max_qp_allowed       = avctx->
qmax;
 
  184         param->min_qp_allowed       = avctx->
qmin;
 
  188         param->maximum_buffer_size_ms =
 
  192     if (svt_enc->
crf > 0) {
 
  193         param->qp                   = svt_enc->
crf;
 
  194         param->rate_control_mode    = 0;
 
  195     } 
else if (svt_enc->
qp > 0) {
 
  196         param->qp                   = svt_enc->
qp;
 
  197         param->rate_control_mode    = 0;
 
  198         param->enable_adaptive_quantization = 0;
 
  205     param->transfer_characteristics = avctx->
color_trc;
 
  212 #if SVT_AV1_CHECK_VERSION(1, 0, 0) 
  219             param->chroma_sample_position = EB_CSP_VERTICAL;
 
  222             param->chroma_sample_position = EB_CSP_COLOCATED;
 
  229                    "Specified chroma sample location %s is unsupported " 
  230                    "on the AV1 bit stream level. Usage of a container that " 
  231                    "allows passing this information - such as Matroska - " 
  240         param->profile = avctx->
profile;
 
  243         param->level = avctx->
level;
 
  251         param->intra_period_length  = avctx->
gop_size - 1;
 
  253 #if SVT_AV1_CHECK_VERSION(1, 1, 0) 
  263         param->force_key_frames = 1;
 
  273 #if FF_API_TICKS_PER_FRAME 
  283 #if SVT_AV1_CHECK_VERSION(0, 9, 1) 
  285         EbErrorType 
ret = svt_av1_enc_parse_parameter(param, en->
key, en->
value);
 
  286         if (
ret != EB_ErrorNone) {
 
  296         av_log(avctx, 
level, 
"svt-params needs libavcodec to be compiled with SVT-AV1 " 
  297                              "headers >= 0.9.1.\n");
 
  303     param->source_width     = avctx->
width;
 
  304     param->source_height    = avctx->
height;
 
  306     param->encoder_bit_depth = 
desc->comp[0].depth;
 
  308     if (
desc->log2_chroma_w == 1 && 
desc->log2_chroma_h == 1)
 
  309         param->encoder_color_format   = EB_YUV420;
 
  310     else if (
desc->log2_chroma_w == 1 && 
desc->log2_chroma_h == 0)
 
  311         param->encoder_color_format   = EB_YUV422;
 
  312     else if (!
desc->log2_chroma_w && !
desc->log2_chroma_h)
 
  313         param->encoder_color_format   = EB_YUV444;
 
  319     if ((param->encoder_color_format == EB_YUV422 || param->encoder_bit_depth > 10)
 
  323     } 
else if (param->encoder_color_format == EB_YUV444 && param->profile != 
AV_PROFILE_AV1_HIGH) {
 
  328     avctx->
bit_rate       = param->rate_control_mode > 0 ?
 
  329                             param->target_bit_rate : 0;
 
  348                          EbBufferHeaderType *header_ptr)
 
  350     EbSvtIOFormat *in_data = (EbSvtIOFormat *)header_ptr->p_buffer;
 
  351     ptrdiff_t linesizes[4];
 
  353     int bytes_shift = param->encoder_bit_depth > 8 ? 1 : 0;
 
  356     for (
int i = 0; 
i < 4; 
i++)
 
  365     for (
int i = 0; 
i < 4; 
i++) {
 
  393     if (svt_ret != EB_ErrorNone) {
 
  394         return svt_print_error(avctx, svt_ret, 
"Error initializing encoder handle");
 
  404     if (svt_ret != EB_ErrorNone) {
 
  405         return svt_print_error(avctx, svt_ret, 
"Error setting encoder parameters");
 
  408     svt_ret = svt_av1_enc_init(svt_enc->
svt_handle);
 
  409     if (svt_ret != EB_ErrorNone) {
 
  414         EbBufferHeaderType *headerPtr = 
NULL;
 
  416         svt_ret = svt_av1_enc_stream_header(svt_enc->
svt_handle, &headerPtr);
 
  417         if (svt_ret != EB_ErrorNone) {
 
  418             return svt_print_error(avctx, svt_ret, 
"Error building stream header");
 
  425                    "Cannot allocate AV1 header of size %d.\n", avctx->
extradata_size);
 
  431         svt_ret = svt_av1_enc_stream_header_release(headerPtr);
 
  432         if (svt_ret != EB_ErrorNone) {
 
  447     EbBufferHeaderType  *headerPtr = svt_enc->
in_buf;
 
  451         EbBufferHeaderType headerPtrLast;
 
  456         memset(&headerPtrLast, 0, 
sizeof(headerPtrLast));
 
  457         headerPtrLast.pic_type      = EB_AV1_INVALID_PICTURE;
 
  458         headerPtrLast.flags         = EB_BUFFERFLAG_EOS;
 
  460         svt_av1_enc_send_picture(svt_enc->
svt_handle, &headerPtrLast);
 
  469     headerPtr->flags         = 0;
 
  470     headerPtr->p_app_private = 
NULL;
 
  475         headerPtr->pic_type = EB_AV1_KEY_PICTURE;
 
  479         headerPtr->pic_type = EB_AV1_INVALID_PICTURE;
 
  484         headerPtr->pic_type = EB_AV1_KEY_PICTURE;
 
  486     svt_av1_enc_send_picture(svt_enc->
svt_handle, headerPtr);
 
  494         const int max_frames = 8;
 
  497         if (filled_len > svt_enc->
raw_size * max_frames) {
 
  518     EbBufferHeaderType *headerPtr;
 
  522     int ret = 0, pict_type;
 
  539     if (svt_ret == EB_NoErrorEmptyQueue)
 
  542 #if SVT_AV1_CHECK_VERSION(2, 0, 0) 
  543     if (headerPtr->flags & EB_BUFFERFLAG_EOS) {
 
  545          svt_av1_enc_release_out_buffer(&headerPtr);
 
  553         svt_av1_enc_release_out_buffer(&headerPtr);
 
  559     memcpy(
pkt->
data, headerPtr->p_buffer, headerPtr->n_filled_len);
 
  562     pkt->
size = headerPtr->n_filled_len;
 
  563     pkt->
pts  = headerPtr->pts;
 
  564     pkt->
dts  = headerPtr->dts;
 
  566     switch (headerPtr->pic_type) {
 
  567     case EB_AV1_KEY_PICTURE:
 
  570     case EB_AV1_INTRA_ONLY_PICTURE:
 
  573     case EB_AV1_INVALID_PICTURE:
 
  581     if (headerPtr->pic_type == EB_AV1_NON_REF_PICTURE)
 
  584 #if !(SVT_AV1_CHECK_VERSION(2, 0, 0)) 
  585     if (headerPtr->flags & EB_BUFFERFLAG_EOS)
 
  591     svt_av1_enc_release_out_buffer(&headerPtr);
 
  602         svt_av1_enc_deinit_handle(svt_enc->
svt_handle);
 
  615 #define OFFSET(x) offsetof(SvtContext, x) 
  616 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM 
  618 #if FF_API_SVTAV1_OPTS 
  619     { 
"hielevel", 
"Hierarchical prediction levels setting (Deprecated, use svtav1-params)", 
OFFSET(hierarchical_level),
 
  624     { 
"la_depth", 
"Look ahead distance [0, 120] (Deprecated, use svtav1-params)", 
OFFSET(la_depth),
 
  627     { 
"tier", 
"Set operating point tier (Deprecated, use svtav1-params)", 
OFFSET(
tier),
 
  632     { 
"preset", 
"Encoding preset",
 
  637 #define LEVEL(name, value) name, NULL, 0, AV_OPT_TYPE_CONST, \ 
  638       { .i64 = value }, 0, 0, VE, "avctx.level" 
  639         { 
LEVEL(
"2.0", 20) },
 
  640         { 
LEVEL(
"2.1", 21) },
 
  641         { 
LEVEL(
"2.2", 22) },
 
  642         { 
LEVEL(
"2.3", 23) },
 
  643         { 
LEVEL(
"3.0", 30) },
 
  644         { 
LEVEL(
"3.1", 31) },
 
  645         { 
LEVEL(
"3.2", 32) },
 
  646         { 
LEVEL(
"3.3", 33) },
 
  647         { 
LEVEL(
"4.0", 40) },
 
  648         { 
LEVEL(
"4.1", 41) },
 
  649         { 
LEVEL(
"4.2", 42) },
 
  650         { 
LEVEL(
"4.3", 43) },
 
  651         { 
LEVEL(
"5.0", 50) },
 
  652         { 
LEVEL(
"5.1", 51) },
 
  653         { 
LEVEL(
"5.2", 52) },
 
  654         { 
LEVEL(
"5.3", 53) },
 
  655         { 
LEVEL(
"6.0", 60) },
 
  656         { 
LEVEL(
"6.1", 61) },
 
  657         { 
LEVEL(
"6.2", 62) },
 
  658         { 
LEVEL(
"6.3", 63) },
 
  659         { 
LEVEL(
"7.0", 70) },
 
  660         { 
LEVEL(
"7.1", 71) },
 
  661         { 
LEVEL(
"7.2", 72) },
 
  662         { 
LEVEL(
"7.3", 73) },
 
  665     { 
"crf", 
"Constant Rate Factor value", 
OFFSET(crf),
 
  667     { 
"qp", 
"Initial Quantizer level value", 
OFFSET(qp),
 
  669 #if FF_API_SVTAV1_OPTS 
  670     { 
"sc_detection", 
"Scene change detection (Deprecated, use svtav1-params)", 
OFFSET(scd),
 
  677     { 
"svtav1-params", 
"Set the SVT-AV1 configuration using a :-separated list of key=value parameters", 
OFFSET(svtav1_opts), 
AV_OPT_TYPE_DICT, { 0 }, 0, 0, 
VE },
 
  691     { 
"flags",     
"+cgop" },
 
  699     .
p.
name         = 
"libsvtav1",
 
  713     .p.priv_class   = &
class,
 
  715     .p.wrapper_name = 
"libsvtav1",
 
  
#define FF_ENABLE_DEPRECATION_WARNINGS
AVBufferPool * av_buffer_pool_init(size_t size, AVBufferRef *(*alloc)(size_t size))
Allocate and initialize a buffer pool.
#define AV_LOG_WARNING
Something somehow does not look correct.
AVPixelFormat
Pixel format.
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
#define AV_EF_EXPLODE
abort decoding on minor error detection
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
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
enum AVColorSpace colorspace
YUV colorspace type.
static const FFCodecDefault eb_enc_defaults[]
static AVBufferRef * get_output_ref(AVCodecContext *avctx, SvtContext *svt_enc, int filled_len)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AVERROR_EOF
End of file.
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
#define FF_AV1_PROFILE_OPTS
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
This structure describes decoded (raw) audio or video data.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
@ AVCOL_RANGE_JPEG
Full range content.
#define AV_PIX_FMT_YUV420P10
static int eb_receive_packet(AVCodecContext *avctx, AVPacket *pkt)
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key,...
#define FF_CODEC_CAP_NOT_INIT_THREADSAFE
The codec is not known to be init-threadsafe (i.e.
static av_cold int eb_enc_init(AVCodecContext *avctx)
@ AVCOL_SPC_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1
static av_cold int eb_enc_close(AVCodecContext *avctx)
#define AV_PKT_FLAG_DISPOSABLE
Flag is used to indicate packets that contain frames that can be discarded by the decoder.
#define AV_PROFILE_AV1_PROFESSIONAL
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
int qmax
maximum quantizer
static const struct @104 svt_errors[]
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
const char * av_chroma_location_name(enum AVChromaLocation location)
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.
AVCodec p
The public AVCodec.
static int eb_send_frame(AVCodecContext *avctx, const AVFrame *frame)
int flags
AV_CODEC_FLAG_*.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FF_ARRAY_ELEMS(a)
#define AV_PROFILE_UNKNOWN
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
AVBufferRef * av_buffer_pool_get(AVBufferPool *pool)
Allocate a new AVBuffer, reusing an old buffer from the pool when available.
#define AV_CEIL_RSHIFT(a, b)
#define AV_CODEC_CAP_OTHER_THREADS
Codec supports multithreading through a method other than slice- or frame-level multithreading.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
int64_t rc_max_rate
maximum bitrate
This structure describes the bitrate properties of an encoded bitstream.
#define CODEC_LONG_NAME(str)
int rc_buffer_size
decoder bitstream buffer size
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
static const int sizes[][2]
enum AVColorRange color_range
MPEG vs JPEG YUV range.
@ AVCHROMA_LOC_LEFT
MPEG-2/4 4:2:0, H.264 default for 4:2:0.
int av_image_fill_plane_sizes(size_t sizes[4], enum AVPixelFormat pix_fmt, int height, const ptrdiff_t linesizes[4])
Fill plane sizes for an image with pixel format pix_fmt and height height.
@ AVCHROMA_LOC_TOPLEFT
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2.
#define FF_CODEC_RECEIVE_PACKET_CB(func)
int64_t bit_rate
the average bitrate
const char * av_default_item_name(void *ptr)
Return the context name.
@ AV_PICTURE_TYPE_I
Intra.
void av_buffer_pool_uninit(AVBufferPool **ppool)
Mark the pool as being available for freeing.
int level
Encoding level descriptor.
const FFCodec ff_libsvtav1_encoder
@ AVCOL_RANGE_UNSPECIFIED
#define LEVEL(name, value)
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
enum AVPictureType pict_type
Picture type of the frame.
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
static int config_enc_params(EbSvtAv1EncConfiguration *param, AVCodecContext *avctx)
EbComponentType * svt_handle
AVDictionary * svtav1_opts
@ AVCHROMA_LOC_UNSPECIFIED
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
@ AV_PICTURE_TYPE_NONE
Undefined.
static int alloc_buffer(EbSvtAv1EncConfiguration *config, SvtContext *svt_enc)
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
static const AVOption options[]
#define AVERROR_EXTERNAL
Generic error in an external library.
#define AV_PROFILE_AV1_HIGH
int flags
A combination of AV_PKT_FLAG values.
static int svt_map_error(EbErrorType eb_err, const char **desc)
int64_t avg_bitrate
Average bitrate of the stream, in bits per second.
#define i(width, name, range_min, range_max)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
int64_t max_bitrate
Maximum bitrate of the stream, in bits per second.
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
const char * name
Name of the codec implementation.
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
EbSvtAv1EncConfiguration enc_params
#define AV_CODEC_FLAG_CLOSED_GOP
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
int64_t buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
#define AV_INPUT_BUFFER_PADDING_SIZE
static int svt_print_error(void *log_ctx, EbErrorType err, const char *error_string)
main external API structure.
int qmin
minimum quantizer
static int ref[MAX_W *MAX_W]
attribute_deprecated int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
EbBufferHeaderType * in_buf
#define FF_DISABLE_DEPRECATION_WARNINGS
@ AV_PICTURE_TYPE_P
Predicted.
int ff_encode_get_frame(AVCodecContext *avctx, AVFrame *frame)
Called by encoders to get the next frame for encoding.
A reference to a data buffer.
#define FF_CODEC_CAP_AUTO_THREADS
Codec handles avctx->thread_count == 0 (auto) internally.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
This structure stores compressed data.
int width
picture width / height.
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
AVCPBProperties * ff_encode_add_cpb_side_data(AVCodecContext *avctx)
Add a CPB properties side data to an encoding context.
#define FF_QP2LAMBDA
factor to convert from H.263 QP to lambda
static int read_in_data(EbSvtAv1EncConfiguration *param, const AVFrame *frame, EbBufferHeaderType *header_ptr)
#define AV_OPT_FLAG_DEPRECATED
set if option is deprecated, users should refer to AVOption.help text for more information