Browse Source

Merge commit '6d5a6dde5301c81e221a37b3f39bb03149492b98'

* commit '6d5a6dde5301c81e221a37b3f39bb03149492b98':
  h264_metadata: Add option to delete filler data

Fixes #6899.

Merged-by: Mark Thompson <sw@jkqxz.net>
tags/n4.0
Mark Thompson 7 years ago
parent
commit
ecb3d6edc3
1 changed files with 43 additions and 0 deletions
  1. +43
    -0
      libavcodec/h264_metadata_bsf.c

+ 43
- 0
libavcodec/h264_metadata_bsf.c View File

@@ -63,6 +63,8 @@ typedef struct H264MetadataContext {

const char *sei_user_data;
int sei_first_au;

int delete_filler;
} H264MetadataContext;


@@ -346,6 +348,44 @@ static int h264_metadata_filter(AVBSFContext *bsf, AVPacket *out)
}
}

if (ctx->delete_filler) {
for (i = 0; i < au->nb_units; i++) {
if (au->units[i].type == H264_NAL_FILLER_DATA) {
// Filler NAL units.
err = ff_cbs_delete_unit(ctx->cbc, au, i);
if (err < 0) {
av_log(bsf, AV_LOG_ERROR, "Failed to delete "
"filler NAL.\n");
goto fail;
}
--i;
continue;
}

if (au->units[i].type == H264_NAL_SEI) {
// Filler SEI messages.
H264RawSEI *sei = au->units[i].content;

for (j = 0; j < sei->payload_count; j++) {
if (sei->payload[j].payload_type ==
H264_SEI_TYPE_FILLER_PAYLOAD) {
err = ff_cbs_h264_delete_sei_message(ctx->cbc, au,
&au->units[i], j);
if (err < 0) {
av_log(bsf, AV_LOG_ERROR, "Failed to delete "
"filler SEI message.\n");
goto fail;
}
// Renumbering might have happened, start again at
// the same NAL unit position.
--i;
break;
}
}
}
}
}

err = ff_cbs_write_packet(ctx->cbc, out, au);
if (err < 0) {
av_log(bsf, AV_LOG_ERROR, "Failed to write packet.\n");
@@ -465,6 +505,9 @@ static const AVOption h264_metadata_options[] = {
{ "sei_user_data", "Insert SEI user data (UUID+string)",
OFFSET(sei_user_data), AV_OPT_TYPE_STRING, { .str = NULL } },

{ "delete_filler", "Delete all filler (both NAL and SEI)",
OFFSET(delete_filler), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1 },

{ NULL }
};



Loading…
Cancel
Save