62 return RA_PIXEL_RANGE_FULL;
67 return RA_PIXEL_RANGE_FULL;
70 return RA_PIXEL_RANGE_LIMITED;
81 return RA_CHROMA_SAMPLING_CS420;
86 return RA_CHROMA_SAMPLING_CS422;
91 return RA_CHROMA_SAMPLING_CS444;
101 return RA_CHROMA_SAMPLE_POSITION_VERTICAL;
103 return RA_CHROMA_SAMPLE_POSITION_COLOCATED;
105 return RA_CHROMA_SAMPLE_POSITION_UNKNOWN;
112 RaData* buf = rav1e_twopass_out(
ctx->ctx);
118 ctx->pass_pos + buf->len);
120 rav1e_data_unref(buf);
125 memcpy(
ctx->pass_data +
ctx->pass_pos, buf->data, buf->len);
126 ctx->pass_pos += buf->len;
130 memcpy(
ctx->pass_data, buf->data, buf->len);
134 rav1e_data_unref(buf);
143 rav1e_data_unref(buf);
153 while (ret > 0 &&
ctx->pass_size -
ctx->pass_pos > 0) {
154 ret = rav1e_twopass_in(
ctx->ctx,
ctx->pass_data +
ctx->pass_pos,
ctx->pass_size);
157 ctx->pass_pos += ret;
168 rav1e_context_unref(
ctx->ctx);
172 rav1e_frame_unref(
ctx->rframe);
187 RaConfig *cfg =
NULL;
195 cfg = rav1e_config_default();
207 rav1e_config_set_time_base(cfg, (RaRational) {
211 rav1e_config_set_time_base(cfg, (RaRational) {
230 ctx->pass_size = (strlen(avctx->
stats_in) * 3) / 4;
232 if (!
ctx->pass_data) {
239 if (
ctx->pass_size < 0) {
252 "not found. This is a bug, please report it.\n");
279 int parse_ret = rav1e_config_parse(cfg, en->
key, en->
value);
285 rret = rav1e_config_parse_int(cfg,
"width", avctx->
width);
292 rret = rav1e_config_parse_int(cfg,
"height", avctx->
height);
299 rret = rav1e_config_parse_int(cfg,
"threads", avctx->
thread_count);
303 if (
ctx->speed >= 0) {
304 rret = rav1e_config_parse_int(cfg,
"speed",
ctx->speed);
313 if (
ctx->tiles > 0) {
314 rret = rav1e_config_parse_int(cfg,
"tiles",
ctx->tiles);
321 if (
ctx->tile_rows > 0) {
322 rret = rav1e_config_parse_int(cfg,
"tile_rows",
ctx->tile_rows);
329 if (
ctx->tile_cols > 0) {
330 rret = rav1e_config_parse_int(cfg,
"tile_cols",
ctx->tile_cols);
339 rret = rav1e_config_parse_int(cfg,
"key_frame_interval", avctx->
gop_size);
348 rret = rav1e_config_parse_int(cfg,
"min_key_frame_interval", avctx->
keyint_min);
357 int max_quantizer = avctx->
qmax >= 0 ? avctx->
qmax : 255;
359 rret = rav1e_config_parse_int(cfg,
"quantizer", max_quantizer);
366 if (avctx->
qmin >= 0) {
367 rret = rav1e_config_parse_int(cfg,
"min_quantizer", avctx->
qmin);
375 rret = rav1e_config_parse_int(cfg,
"bitrate", avctx->
bit_rate);
381 }
else if (
ctx->quantizer >= 0) {
385 rret = rav1e_config_parse_int(cfg,
"quantizer",
ctx->quantizer);
393 rret = rav1e_config_set_pixel_format(cfg,
desc->comp[0].depth,
404 rret = rav1e_config_set_color_description(cfg, (RaMatrixCoefficients) avctx->
colorspace,
406 (RaTransferCharacteristics) avctx->
color_trc);
415 ctx->ctx = rav1e_context_new(cfg);
426 rav1e_config_unref(cfg);
434 RaFrame *rframe =
ctx->rframe;
435 RaPacket *rpkt =
NULL;
455 rframe = rav1e_frame_new(
ctx->ctx);
463 for (
int i = 0;
i <
desc->nb_components;
i++) {
465 int bytes =
desc->comp[0].depth == 8 ? 1 : 2;
475 ret = rav1e_send_frame(
ctx->ctx, rframe);
477 if (ret == RA_ENCODER_STATUS_ENOUGH_DATA) {
478 ctx->rframe = rframe;
480 rav1e_frame_unref(rframe);
485 case RA_ENCODER_STATUS_SUCCESS:
486 case RA_ENCODER_STATUS_ENOUGH_DATA:
488 case RA_ENCODER_STATUS_FAILURE:
492 av_log(avctx,
AV_LOG_ERROR,
"Unknown return code %d from rav1e_send_frame: %s\n", ret, rav1e_status_to_str(ret));
508 ret = rav1e_receive_packet(
ctx->ctx, &rpkt);
510 case RA_ENCODER_STATUS_SUCCESS:
512 case RA_ENCODER_STATUS_LIMIT_REACHED:
519 case RA_ENCODER_STATUS_ENCODED:
521 case RA_ENCODER_STATUS_NEED_MORE_DATA:
527 case RA_ENCODER_STATUS_FAILURE:
528 av_log(avctx,
AV_LOG_ERROR,
"Could not encode frame: %s\n", rav1e_status_to_str(ret));
531 av_log(avctx,
AV_LOG_ERROR,
"Unknown return code %d from rav1e_receive_packet: %s\n", ret, rav1e_status_to_str(ret));
538 rav1e_packet_unref(rpkt);
542 memcpy(
pkt->
data, rpkt->data, rpkt->len);
544 if (rpkt->frame_type == RA_FRAME_TYPE_KEY)
549 rav1e_packet_unref(rpkt);
570 #define OFFSET(x) offsetof(librav1eContext, x)
571 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
579 {
"rav1e-params",
"set the rav1e configuration using a :-separated list of key=value parameters",
OFFSET(rav1e_opts),
AV_OPT_TYPE_DICT, { 0 }, 0, 0,
VE },
586 {
"keyint_min",
"0" },
624 .priv_class = &
class,
630 .wrapper_name =
"librav1e",
static const AVCodecDefault defaults[]
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Libavcodec external API header.
#define AV_EF_EXPLODE
abort decoding on minor error detection
static av_always_inline void filter(int16_t *output, ptrdiff_t out_stride, const int16_t *low, ptrdiff_t low_stride, const int16_t *high, ptrdiff_t high_stride, int len, int clip)
common internal and external API header
static enum AVPixelFormat pix_fmt
int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags)
Get a buffer for a packet.
int ff_encode_get_frame(AVCodecContext *avctx, AVFrame *frame)
Called by encoders to get the next frame for encoding.
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context.
#define AV_CODEC_FLAG_PASS2
Use internal 2pass ratecontrol in second pass mode.
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
#define AV_CODEC_CAP_OTHER_THREADS
Codec supports multithreading through a method other than slice- or frame-level multithreading.
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx)
Allocate a context for a given bitstream filter.
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
#define AV_CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
char * av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size)
Encode data to base64 and null-terminate.
#define AV_BASE64_SIZE(x)
Calculate the output size needed to base64-encode x bytes to a null-terminated string.
int av_base64_decode(uint8_t *out, const char *in_str, int out_size)
Decode a base64-encoded string.
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key,...
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
#define AVERROR_EXTERNAL
Generic error in an external library.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AVERROR_EOF
End of file.
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given buffer if it is not large enough, otherwise do nothing.
#define LIBAVUTIL_VERSION_INT
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
#define FF_CODEC_CAP_AUTO_THREADS
Codec handles avctx->thread_count == 0 (auto) internally.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static enum AVPixelFormat pix_fmts[]
static const AVCodecDefault librav1e_defaults[]
static int set_stats(AVCodecContext *avctx)
static const AVOption options[]
static RaChromaSampling pix_fmt_map(enum AVPixelFormat pix_fmt)
static RaChromaSamplePosition chroma_loc_map(enum AVChromaLocation chroma_loc)
static int librav1e_receive_packet(AVCodecContext *avctx, AVPacket *pkt)
static RaPixelRange range_map(enum AVPixelFormat pix_fmt, enum AVColorRange range)
AVCodec ff_librav1e_encoder
static av_cold int librav1e_encode_close(AVCodecContext *avctx)
enum AVPixelFormat librav1e_pix_fmts[]
static av_cold int librav1e_encode_init(AVCodecContext *avctx)
static int get_stats(AVCodecContext *avctx, int eos)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_YUV444P12
AVChromaLocation
Location of chroma samples.
@ AVCHROMA_LOC_TOPLEFT
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2.
@ AVCHROMA_LOC_LEFT
MPEG-2/4 4:2:0, H.264 default for 4:2:0.
#define AV_PIX_FMT_YUV420P10
AVColorRange
Visual content value range.
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
@ AVCOL_RANGE_JPEG
Full range content.
#define AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUV422P10
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
#define AV_PIX_FMT_YUV444P10
static int shift(int a, int b)
The bitstream filter state.
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
main external API structure.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int width
picture width / height.
char * stats_out
pass1 encoding statistics output buffer
enum AVColorRange color_range
MPEG vs JPEG YUV range.
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
int qmin
minimum quantizer
int keyint_min
minimum GOP size
char * stats_in
pass2 encoding statistics input buffer Concatenated stuff from stats_out of pass1 should be placed he...
int ticks_per_frame
For some codecs, the time base is closer to the field rate than the frame rate.
int64_t bit_rate
the average bitrate
enum AVColorSpace colorspace
YUV colorspace type.
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
int thread_count
thread count is used to decide how many independent tasks should be passed to execute()
int qmax
maximum quantizer
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
int flags
AV_CODEC_FLAG_*.
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
struct AVCodecInternal * internal
Private context used for internal data.
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
int draining
checks API usage: after codec draining, flush is required to resume operation
const char * name
Name of the codec implementation.
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).
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
AVBufferRef * buf[AV_NUM_DATA_POINTERS]
AVBuffer references backing the data for this frame.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
This structure stores compressed data.
int flags
A combination of AV_PKT_FLAG values.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
AVDictionary * rav1e_opts