mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
avformat/av1: split off sequence header parsing from the av1C writing function
It will be used by the dash muxer Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
0c7cfd2c19
commit
68e48e5d97
@ -76,23 +76,6 @@ int ff_av1_filter_obus_buf(const uint8_t *buf, uint8_t **out, int *size)
|
||||
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)
|
||||
{
|
||||
int leading_zeros = 0;
|
||||
@ -301,6 +284,36 @@ static int parse_sequence_header(AV1SequenceParameters *seq_params, const uint8_
|
||||
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)
|
||||
{
|
||||
AVIOContext *seq_pb = NULL, *meta_pb = NULL;
|
||||
|
@ -25,6 +25,23 @@
|
||||
|
||||
#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
|
||||
* 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);
|
||||
|
||||
/**
|
||||
* 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
|
||||
* AVIOContext.
|
||||
|
Loading…
Reference in New Issue
Block a user