It will be used by the dash muxer Signed-off-by: James Almer <jamrial@gmail.com>tags/n4.3
| @@ -76,23 +76,6 @@ int ff_av1_filter_obus_buf(const uint8_t *buf, uint8_t **out, int *size) | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| typedef struct AV1SequenceParameters { | |||||
| uint8_t seq_profile; | |||||
| uint8_t seq_level_idx_0; | |||||
| uint8_t seq_tier_0; | |||||
| uint8_t high_bitdepth; | |||||
| uint8_t twelve_bit; | |||||
| uint8_t monochrome; | |||||
| uint8_t chroma_subsampling_x; | |||||
| uint8_t chroma_subsampling_y; | |||||
| uint8_t chroma_sample_position; | |||||
| uint8_t color_description_present_flag; | |||||
| uint8_t color_primaries; | |||||
| uint8_t transfer_characteristics; | |||||
| uint8_t matrix_coefficients; | |||||
| uint8_t color_range; | |||||
| } AV1SequenceParameters; | |||||
| static inline void uvlc(GetBitContext *gb) | static inline void uvlc(GetBitContext *gb) | ||||
| { | { | ||||
| int leading_zeros = 0; | int leading_zeros = 0; | ||||
| @@ -301,6 +284,36 @@ static int parse_sequence_header(AV1SequenceParameters *seq_params, const uint8_ | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| int ff_av1_parse_seq_header(AV1SequenceParameters *seq, const uint8_t *buf, int size) | |||||
| { | |||||
| int64_t obu_size; | |||||
| int start_pos, type, temporal_id, spatial_id; | |||||
| if (size <= 0) | |||||
| return AVERROR_INVALIDDATA; | |||||
| while (size > 0) { | |||||
| int len = parse_obu_header(buf, size, &obu_size, &start_pos, | |||||
| &type, &temporal_id, &spatial_id); | |||||
| if (len < 0) | |||||
| return len; | |||||
| switch (type) { | |||||
| case AV1_OBU_SEQUENCE_HEADER: | |||||
| if (!obu_size) | |||||
| return AVERROR_INVALIDDATA; | |||||
| return parse_sequence_header(seq, buf + start_pos, obu_size); | |||||
| default: | |||||
| break; | |||||
| } | |||||
| size -= len; | |||||
| buf += len; | |||||
| } | |||||
| return AVERROR_INVALIDDATA; | |||||
| } | |||||
| int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) | int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size) | ||||
| { | { | ||||
| AVIOContext *seq_pb = NULL, *meta_pb = NULL; | AVIOContext *seq_pb = NULL, *meta_pb = NULL; | ||||
| @@ -25,6 +25,23 @@ | |||||
| #include "avio.h" | #include "avio.h" | ||||
| typedef struct AV1SequenceParameters { | |||||
| uint8_t seq_profile; | |||||
| uint8_t seq_level_idx_0; | |||||
| uint8_t seq_tier_0; | |||||
| uint8_t high_bitdepth; | |||||
| uint8_t twelve_bit; | |||||
| uint8_t monochrome; | |||||
| uint8_t chroma_subsampling_x; | |||||
| uint8_t chroma_subsampling_y; | |||||
| uint8_t chroma_sample_position; | |||||
| uint8_t color_description_present_flag; | |||||
| uint8_t color_primaries; | |||||
| uint8_t transfer_characteristics; | |||||
| uint8_t matrix_coefficients; | |||||
| uint8_t color_range; | |||||
| } AV1SequenceParameters; | |||||
| /** | /** | ||||
| * Filter out AV1 OBUs not meant to be present in ISOBMFF sample data and write | * Filter out AV1 OBUs not meant to be present in ISOBMFF sample data and write | ||||
| * the resulting bitstream to the provided AVIOContext. | * the resulting bitstream to the provided AVIOContext. | ||||
| @@ -55,6 +72,18 @@ int ff_av1_filter_obus(AVIOContext *pb, const uint8_t *buf, int size); | |||||
| */ | */ | ||||
| int ff_av1_filter_obus_buf(const uint8_t *buf, uint8_t **out, int *size); | int ff_av1_filter_obus_buf(const uint8_t *buf, uint8_t **out, int *size); | ||||
| /** | |||||
| * Parses a Sequence Header from the the provided buffer. | |||||
| * | |||||
| * @param seq pointer to the AV1SequenceParameters where the parsed values will | |||||
| * be written | |||||
| * @param buf input data buffer | |||||
| * @param size size in bytes of the input data buffer | |||||
| * | |||||
| * @return >= 0 in case of success, a negative AVERROR code in case of failure | |||||
| */ | |||||
| int ff_av1_parse_seq_header(AV1SequenceParameters *seq, const uint8_t *buf, int size); | |||||
| /** | /** | ||||
| * Writes AV1 extradata (Sequence Header and Metadata OBUs) to the provided | * Writes AV1 extradata (Sequence Header and Metadata OBUs) to the provided | ||||
| * AVIOContext. | * AVIOContext. | ||||