From 1d12a545ce828eaf4fb37295400008ea37635ab8 Mon Sep 17 00:00:00 2001 From: Mark Thompson Date: Thu, 9 Nov 2017 01:04:02 +0000 Subject: [PATCH] cbs: Add an explicit type for coded bitstream unit types Also fix conversion specifiers used for the unit type. --- libavcodec/cbs.c | 12 +++++++----- libavcodec/cbs.h | 19 +++++++++++++++---- libavcodec/cbs_h2645.c | 2 +- libavcodec/cbs_mpeg2.c | 4 ++-- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c index fd9baa2997..e5819afce3 100644 --- a/libavcodec/cbs.c +++ b/libavcodec/cbs.c @@ -137,10 +137,10 @@ static int cbs_read_fragment_content(CodedBitstreamContext *ctx, if (err == AVERROR(ENOSYS)) { av_log(ctx->log_ctx, AV_LOG_WARNING, "Decomposition unimplemented for unit %d " - "(type %d).\n", i, frag->units[i].type); + "(type %"PRIu32").\n", i, frag->units[i].type); } else if (err < 0) { av_log(ctx->log_ctx, AV_LOG_ERROR, "Failed to read unit %d " - "(type %d).\n", i, frag->units[i].type); + "(type %"PRIu32").\n", i, frag->units[i].type); return err; } } @@ -225,7 +225,7 @@ int ff_cbs_write_fragment_data(CodedBitstreamContext *ctx, err = ctx->codec->write_unit(ctx, &frag->units[i]); if (err < 0) { av_log(ctx->log_ctx, AV_LOG_ERROR, "Failed to write unit %d " - "(type %d).\n", i, frag->units[i].type); + "(type %"PRIu32").\n", i, frag->units[i].type); return err; } } @@ -421,7 +421,8 @@ static int cbs_insert_unit(CodedBitstreamContext *ctx, int ff_cbs_insert_unit_content(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, - int position, uint32_t type, + int position, + CodedBitstreamUnitType type, void *content) { int err; @@ -443,7 +444,8 @@ int ff_cbs_insert_unit_content(CodedBitstreamContext *ctx, int ff_cbs_insert_unit_data(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, - int position, uint32_t type, + int position, + CodedBitstreamUnitType type, uint8_t *data, size_t data_size) { int err; diff --git a/libavcodec/cbs.h b/libavcodec/cbs.h index 34ee78be32..85c7b55577 100644 --- a/libavcodec/cbs.h +++ b/libavcodec/cbs.h @@ -27,6 +27,15 @@ struct CodedBitstreamType; +/** + * The codec-specific type of a bitstream unit. + * + * H.264 / AVC: nal_unit_type + * H.265 / HEVC: nal_unit_type + * MPEG-2: start code value (without prefix) + */ +typedef uint32_t CodedBitstreamUnitType; + /** * Coded bitstream unit structure. * @@ -40,7 +49,7 @@ typedef struct CodedBitstreamUnit { /** * Codec-specific type of this unit. */ - uint32_t type; + CodedBitstreamUnitType type; /** * Pointer to the bitstream form of this unit. @@ -149,7 +158,7 @@ typedef struct CodedBitstreamContext { * Types not in this list will be available in bitstream form only. * If NULL, all supported types will be decomposed. */ - uint32_t *decompose_unit_types; + CodedBitstreamUnitType *decompose_unit_types; /** * Length of the decompose_unit_types array. */ @@ -250,7 +259,8 @@ void ff_cbs_fragment_uninit(CodedBitstreamContext *ctx, */ int ff_cbs_insert_unit_content(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, - int position, uint32_t type, + int position, + CodedBitstreamUnitType type, void *content); /** @@ -260,7 +270,8 @@ int ff_cbs_insert_unit_content(CodedBitstreamContext *ctx, */ int ff_cbs_insert_unit_data(CodedBitstreamContext *ctx, CodedBitstreamFragment *frag, - int position, uint32_t type, + int position, + CodedBitstreamUnitType type, uint8_t *data, size_t data_size); /** diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index 00eed0f283..e3b5bf618a 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -1213,7 +1213,7 @@ static int cbs_h265_write_nal_unit(CodedBitstreamContext *ctx, default: av_log(ctx->log_ctx, AV_LOG_ERROR, "Write unimplemented for " - "NAL unit type %d.\n", unit->type); + "NAL unit type %"PRIu32".\n", unit->type); return AVERROR_PATCHWELCOME; } diff --git a/libavcodec/cbs_mpeg2.c b/libavcodec/cbs_mpeg2.c index 54875c2e1c..5956f39335 100644 --- a/libavcodec/cbs_mpeg2.c +++ b/libavcodec/cbs_mpeg2.c @@ -220,7 +220,7 @@ static int cbs_mpeg2_read_unit(CodedBitstreamContext *ctx, START(0xb8, MPEG2RawGroupOfPicturesHeader, group_of_pictures_header); #undef START default: - av_log(ctx->log_ctx, AV_LOG_ERROR, "Unknown start code %02x.\n", + av_log(ctx->log_ctx, AV_LOG_ERROR, "Unknown start code %02"PRIx32".\n", unit->type); return AVERROR_INVALIDDATA; } @@ -248,7 +248,7 @@ static int cbs_mpeg2_write_header(CodedBitstreamContext *ctx, #undef START default: av_log(ctx->log_ctx, AV_LOG_ERROR, "Write unimplemented for start " - "code %02x.\n", unit->type); + "code %02"PRIx32".\n", unit->type); return AVERROR_PATCHWELCOME; }