uint8_t use_128x128_superblock;
uint8_t enable_filter_intra;
uint8_t enable_intra_edge_filter;
- uint8_t enable_intraintra_compound;
+ uint8_t enable_interintra_compound;
uint8_t enable_masked_compound;
uint8_t enable_warped_motion;
uint8_t enable_dual_filter;
uint8_t film_grain_params_present;
} AV1RawSequenceHeader;
+typedef struct AV1RawFilmGrainParams {
+ uint8_t apply_grain;
+ uint16_t grain_seed;
+ uint8_t update_grain;
+ uint8_t film_grain_params_ref_idx;
+ uint8_t num_y_points;
+ uint8_t point_y_value[14];
+ uint8_t point_y_scaling[14];
+ uint8_t chroma_scaling_from_luma;
+ uint8_t num_cb_points;
+ uint8_t point_cb_value[10];
+ uint8_t point_cb_scaling[10];
+ uint8_t num_cr_points;
+ uint8_t point_cr_value[10];
+ uint8_t point_cr_scaling[10];
+ uint8_t grain_scaling_minus_8;
+ uint8_t ar_coeff_lag;
+ uint8_t ar_coeffs_y_plus_128[24];
+ uint8_t ar_coeffs_cb_plus_128[25];
+ uint8_t ar_coeffs_cr_plus_128[25];
+ uint8_t ar_coeff_shift_minus_6;
+ uint8_t grain_scale_shift;
+ uint8_t cb_mult;
+ uint8_t cb_luma_mult;
+ uint16_t cb_offset;
+ uint8_t cr_mult;
+ uint8_t cr_luma_mult;
+ uint16_t cr_offset;
+ uint8_t overlap_flag;
+ uint8_t clip_to_restricted_range;
+} AV1RawFilmGrainParams;
+
typedef struct AV1RawFrameHeader {
uint8_t show_existing_frame;
uint8_t frame_to_show_map_idx;
uint8_t use_superres;
uint8_t coded_denom;
uint8_t render_and_frame_size_different;
- uint8_t render_width_minus_1;
- uint8_t render_height_minus_1;
+ uint16_t render_width_minus_1;
+ uint16_t render_height_minus_1;
uint8_t found_ref[AV1_REFS_PER_FRAME];
uint8_t last_frame_idx;
uint8_t golden_frame_idx;
int8_t ref_frame_idx[AV1_REFS_PER_FRAME];
- uint8_t delta_frame_id_minus1;
+ uint32_t delta_frame_id_minus1[AV1_REFS_PER_FRAME];
uint8_t allow_high_precision_mv;
uint8_t is_filter_switchable;
uint8_t segmentation_temporal_update;
uint8_t segmentation_update_data;
uint8_t feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
- uint8_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
+ int16_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
uint8_t delta_q_present;
uint8_t delta_q_res;
//AV1RawSubexp gm_params[AV1_TOTAL_REFS_PER_FRAME][6];
uint32_t gm_params[AV1_TOTAL_REFS_PER_FRAME][6];
- uint8_t apply_grain;
- uint16_t grain_seed;
- uint8_t update_grain;
- uint8_t film_grain_params_ref_idx;
- uint8_t num_y_points;
- uint8_t point_y_value[16];
- uint8_t point_y_scaling[16];
- uint8_t chroma_scaling_from_luma;
- uint8_t num_cb_points;
- uint8_t point_cb_value[16];
- uint8_t point_cb_scaling[16];
- uint8_t num_cr_points;
- uint8_t point_cr_value[16];
- uint8_t point_cr_scaling[16];
- uint8_t grain_scaling_minus_8;
- uint8_t ar_coeff_lag;
- uint8_t ar_coeffs_y_plus_128[24];
- uint8_t ar_coeffs_cb_plus_128[24];
- uint8_t ar_coeffs_cr_plus_128[24];
- uint8_t ar_coeff_shift_minus_6;
- uint8_t grain_scale_shift;
- uint8_t cb_mult;
- uint8_t cb_luma_mult;
- uint16_t cb_offset;
- uint8_t cr_mult;
- uint8_t cr_luma_mult;
- uint16_t cr_offset;
- uint8_t overlap_flag;
- uint8_t clip_to_restricted_range;
+ AV1RawFilmGrainParams film_grain;
} AV1RawFrameHeader;
typedef struct AV1RawTileData {
uint8_t *data;
- size_t data_size;
AVBufferRef *data_ref;
+ size_t data_size;
} AV1RawTileData;
typedef struct AV1RawTileGroup {
typedef struct AV1RawMetadataScalability {
uint8_t scalability_mode_idc;
- // TODO: more stuff.
+ uint8_t spatial_layers_cnt_minus_1;
+ uint8_t spatial_layer_dimensions_present_flag;
+ uint8_t spatial_layer_description_present_flag;
+ uint8_t temporal_group_description_present_flag;
+ uint8_t scalability_structure_reserved_3bits;
+ uint16_t spatial_layer_max_width[4];
+ uint16_t spatial_layer_max_height[4];
+ uint8_t spatial_layer_ref_id[4];
+ uint8_t temporal_group_size;
+ uint8_t temporal_group_temporal_id[255];
+ uint8_t temporal_group_temporal_switching_up_point_flag[255];
+ uint8_t temporal_group_spatial_switching_up_point_flag[255];
+ uint8_t temporal_group_ref_cnt[255];
+ uint8_t temporal_group_ref_pic_diff[255][7];
} AV1RawMetadataScalability;
typedef struct AV1RawMetadataITUTT35 {
uint8_t itu_t_t35_country_code_extension_byte;
uint8_t *payload;
- size_t payload_size;
AVBufferRef *payload_ref;
+ size_t payload_size;
} AV1RawMetadataITUTT35;
typedef struct AV1RawMetadataTimecode {
} metadata;
} AV1RawMetadata;
+typedef struct AV1RawPadding {
+ uint8_t *payload;
+ AVBufferRef *payload_ref;
+ size_t payload_size;
+} AV1RawPadding;
+
typedef struct AV1RawOBU {
AV1RawOBUHeader header;
AV1RawTileGroup tile_group;
AV1RawTileList tile_list;
AV1RawMetadata metadata;
+ AV1RawPadding padding;
} obu;
} AV1RawOBU;
int subsampling_y; // RefSubsamplingY
int bit_depth; // RefBitDepth
int order_hint; // RefOrderHint
+
+ int8_t loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME];
+ int8_t loop_filter_mode_deltas[2];
+ uint8_t feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
+ int16_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
} AV1ReferenceFrameState;
typedef struct CodedBitstreamAV1Context {
+ const AVClass *class;
+
AV1RawSequenceHeader *sequence_header;
AVBufferRef *sequence_header_ref;
int operating_point_idc;
int bit_depth;
+ int order_hint;
int frame_width;
int frame_height;
int upscaled_width;
int all_lossless;
int tile_cols;
int tile_rows;
+ int tile_num;
AV1ReferenceFrameState ref[AV1_NUM_REF_FRAMES];
- // Write buffer.
- uint8_t *write_buffer;
- size_t write_buffer_size;
+ // AVOptions
+ int operating_point;
} CodedBitstreamAV1Context;