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. | ||||