mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec/cbs_av1: add support for standard MP4/Matroska extradata
This way API clients can just pass the AV1CodecConfigurationRecord as extradata as-is without further filtering.
This commit is contained in:
parent
7bacf60ae5
commit
a66d1779bb
@ -758,6 +758,39 @@ static int cbs_av1_split_fragment(CodedBitstreamContext *ctx,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (header && size && data[0] & 0x80) {
|
||||||
|
// first bit is nonzero, the extradata does not consist purely of
|
||||||
|
// OBUs. Expect MP4/Matroska AV1CodecConfigurationRecord
|
||||||
|
int config_record_version = data[0] & 0x7f;
|
||||||
|
|
||||||
|
if (config_record_version != 1) {
|
||||||
|
av_log(ctx->log_ctx, AV_LOG_ERROR,
|
||||||
|
"Unknown version %d of AV1CodecConfigurationRecord "
|
||||||
|
"found!\n",
|
||||||
|
config_record_version);
|
||||||
|
err = AVERROR_INVALIDDATA;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size <= 4) {
|
||||||
|
if (size < 4) {
|
||||||
|
av_log(ctx->log_ctx, AV_LOG_WARNING,
|
||||||
|
"Undersized AV1CodecConfigurationRecord v%d found!\n",
|
||||||
|
config_record_version);
|
||||||
|
err = AVERROR_INVALIDDATA;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
goto success;
|
||||||
|
}
|
||||||
|
|
||||||
|
// In AV1CodecConfigurationRecord v1, actual OBUs start after
|
||||||
|
// four bytes. Thus set the offset as required for properly
|
||||||
|
// parsing them.
|
||||||
|
data += 4;
|
||||||
|
size -= 4;
|
||||||
|
}
|
||||||
|
|
||||||
while (size > 0) {
|
while (size > 0) {
|
||||||
AV1RawOBUHeader header;
|
AV1RawOBUHeader header;
|
||||||
uint64_t obu_size;
|
uint64_t obu_size;
|
||||||
@ -803,6 +836,7 @@ static int cbs_av1_split_fragment(CodedBitstreamContext *ctx,
|
|||||||
size -= obu_length;
|
size -= obu_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
success:
|
||||||
err = 0;
|
err = 0;
|
||||||
fail:
|
fail:
|
||||||
ctx->trace_enable = trace;
|
ctx->trace_enable = trace;
|
||||||
|
Loading…
Reference in New Issue
Block a user