Browse Source

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.
tags/n4.4
Jan Ekström 5 years ago
parent
commit
a66d1779bb
1 changed files with 34 additions and 0 deletions
  1. +34
    -0
      libavcodec/cbs_av1.c

+ 34
- 0
libavcodec/cbs_av1.c View File

@@ -758,6 +758,39 @@ static int cbs_av1_split_fragment(CodedBitstreamContext *ctx,
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) {
AV1RawOBUHeader header;
uint64_t obu_size;
@@ -803,6 +836,7 @@ static int cbs_av1_split_fragment(CodedBitstreamContext *ctx,
size -= obu_length;
}

success:
err = 0;
fail:
ctx->trace_enable = trace;


Loading…
Cancel
Save