mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-18 21:45:10 +00: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;
|
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.
|
||||||
|
Loading…
Reference in New Issue
Block a user