#ifndef RAV1E_H
#define RAV1E_H
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
typedef enum {
RA_CHROMA_SAMPLE_POSITION_UNKNOWN,
RA_CHROMA_SAMPLE_POSITION_VERTICAL,
RA_CHROMA_SAMPLE_POSITION_COLOCATED,
} RaChromaSamplePosition;
typedef enum {
RA_CHROMA_SAMPLING_CS420,
RA_CHROMA_SAMPLING_CS422,
RA_CHROMA_SAMPLING_CS444,
RA_CHROMA_SAMPLING_CS400,
} RaChromaSampling;
typedef enum {
RA_COLOR_PRIMARIES_BT709 = 1,
RA_COLOR_PRIMARIES_UNSPECIFIED,
RA_COLOR_PRIMARIES_BT470_M = 4,
RA_COLOR_PRIMARIES_BT470_BG,
RA_COLOR_PRIMARIES_BT601,
RA_COLOR_PRIMARIES_SMPTE240,
RA_COLOR_PRIMARIES_GENERIC_FILM,
RA_COLOR_PRIMARIES_BT2020,
RA_COLOR_PRIMARIES_XYZ,
RA_COLOR_PRIMARIES_SMPTE431,
RA_COLOR_PRIMARIES_SMPTE432,
RA_COLOR_PRIMARIES_EBU3213 = 22,
} RaColorPrimaries;
typedef enum {
RA_ENCODER_STATUS_SUCCESS = 0,
RA_ENCODER_STATUS_NEED_MORE_DATA,
RA_ENCODER_STATUS_ENOUGH_DATA,
RA_ENCODER_STATUS_LIMIT_REACHED,
RA_ENCODER_STATUS_ENCODED,
RA_ENCODER_STATUS_FAILURE = -1,
RA_ENCODER_STATUS_NOT_READY = -2,
} RaEncoderStatus;
typedef enum {
RA_FRAME_TYPE_KEY,
RA_FRAME_TYPE_INTER,
RA_FRAME_TYPE_INTRA_ONLY,
RA_FRAME_TYPE_SWITCH,
} RaFrameType;
typedef enum {
RA_FRAME_TYPE_OVERRIDE_NO,
RA_FRAME_TYPE_OVERRIDE_KEY,
} RaFrameTypeOverride;
typedef enum {
RA_MATRIX_COEFFICIENTS_IDENTITY = 0,
RA_MATRIX_COEFFICIENTS_BT709,
RA_MATRIX_COEFFICIENTS_UNSPECIFIED,
RA_MATRIX_COEFFICIENTS_FCC = 4,
RA_MATRIX_COEFFICIENTS_BT470_BG,
RA_MATRIX_COEFFICIENTS_BT601,
RA_MATRIX_COEFFICIENTS_SMPTE240,
RA_MATRIX_COEFFICIENTS_YCG_CO,
RA_MATRIX_COEFFICIENTS_BT2020_NCL,
RA_MATRIX_COEFFICIENTS_BT2020_CL,
RA_MATRIX_COEFFICIENTS_SMPTE2085,
RA_MATRIX_COEFFICIENTS_CHROMAT_NCL,
RA_MATRIX_COEFFICIENTS_CHROMAT_CL,
RA_MATRIX_COEFFICIENTS_ICT_CP,
} RaMatrixCoefficients;
typedef enum {
RA_PIXEL_RANGE_LIMITED,
RA_PIXEL_RANGE_FULL,
} RaPixelRange;
typedef enum {
RA_TRANSFER_CHARACTERISTICS_BT709 = 1,
RA_TRANSFER_CHARACTERISTICS_UNSPECIFIED,
RA_TRANSFER_CHARACTERISTICS_BT470_M = 4,
RA_TRANSFER_CHARACTERISTICS_BT470_BG,
RA_TRANSFER_CHARACTERISTICS_BT601,
RA_TRANSFER_CHARACTERISTICS_SMPTE240,
RA_TRANSFER_CHARACTERISTICS_LINEAR,
RA_TRANSFER_CHARACTERISTICS_LOG100,
RA_TRANSFER_CHARACTERISTICS_LOG100_SQRT10,
RA_TRANSFER_CHARACTERISTICS_IEC61966,
RA_TRANSFER_CHARACTERISTICS_BT1361,
RA_TRANSFER_CHARACTERISTICS_SRGB,
RA_TRANSFER_CHARACTERISTICS_BT2020_10BIT,
RA_TRANSFER_CHARACTERISTICS_BT2020_12BIT,
RA_TRANSFER_CHARACTERISTICS_SMPTE2084,
RA_TRANSFER_CHARACTERISTICS_SMPTE428,
RA_TRANSFER_CHARACTERISTICS_HLG,
} RaTransferCharacteristics;
typedef struct RaConfig RaConfig;
typedef struct RaContext RaContext;
typedef struct RaFrame RaFrame;
typedef struct {
uint16_t x;
uint16_t y;
} RaChromaticityPoint;
typedef struct {
uint64_t num;
uint64_t den;
} RaRational;
typedef struct {
const uint8_t *data;
size_t len;
} RaData;
typedef struct {
const uint8_t *data;
size_t len;
uint64_t input_frameno;
RaFrameType frame_type;
} RaPacket;
#ifdef __cplusplus
extern "C" {
#endif
RaConfig *rav1e_config_default(void);
int rav1e_config_parse(RaConfig *cfg, const char *key, const char *value);
int rav1e_config_parse_int(RaConfig *cfg, const char *key, int value);
int rav1e_config_set_color_description(RaConfig *cfg,
RaMatrixCoefficients matrix,
RaColorPrimaries primaries,
RaTransferCharacteristics transfer);
int rav1e_config_set_content_light(RaConfig *cfg,
uint16_t max_content_light_level,
uint16_t max_frame_average_light_level);
int rav1e_config_set_mastering_display(RaConfig *cfg,
RaChromaticityPoint primaries[3],
RaChromaticityPoint white_point,
uint32_t max_luminance,
uint32_t min_luminance);
int rav1e_config_set_pixel_format(RaConfig *cfg,
uint8_t bit_depth,
RaChromaSampling subsampling,
RaChromaSamplePosition chroma_pos,
RaPixelRange pixel_range);
void rav1e_config_set_time_base(RaConfig *cfg, RaRational time_base);
void rav1e_config_unref(RaConfig *cfg);
RaData *rav1e_container_sequence_header(const RaContext *ctx);
RaContext *rav1e_context_new(const RaConfig *cfg);
void rav1e_context_unref(RaContext *ctx);
void rav1e_data_unref(RaData *data);
void rav1e_frame_fill_plane(RaFrame *frame,
int plane,
const uint8_t *data,
size_t data_len,
ptrdiff_t stride,
int bytewidth);
RaFrame *rav1e_frame_new(const RaContext *ctx);
int rav1e_frame_set_type(RaFrame *frame, RaFrameTypeOverride frame_type);
void rav1e_frame_unref(RaFrame *frame);
RaEncoderStatus rav1e_last_status(const RaContext *ctx);
void rav1e_packet_unref(RaPacket *pkt);
RaEncoderStatus rav1e_receive_packet(RaContext *ctx, RaPacket **pkt);
RaEncoderStatus rav1e_send_frame(RaContext *ctx, const RaFrame *frame);
const char *rav1e_status_to_str(RaEncoderStatus status);
size_t rav1e_twopass_bytes_needed(RaContext *ctx);
int rav1e_twopass_in(RaContext *ctx, uint8_t *buf, size_t buf_size);
RaData *rav1e_twopass_out(RaContext *ctx);
const char *rav1e_version_full(void);
const char *rav1e_version_short(void);
#ifdef __cplusplus
} #endif
#endif