[FFmpeg-cvslog] Merge commit '6d5a6dde5301c81e221a37b3f39bb03149492b98'

Mark Thompson git at videolan.org
Thu Feb 22 00:58:10 EET 2018


ffmpeg | branch: master | Mark Thompson <sw at jkqxz.net> | Wed Feb 21 22:54:07 2018 +0000| [ecb3d6edc3b756cc1d40b1073f244b581ef5bcfb] | committer: Mark Thompson

Merge commit '6d5a6dde5301c81e221a37b3f39bb03149492b98'

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

Fixes #6899.

Merged-by: Mark Thompson <sw at jkqxz.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ecb3d6edc3b756cc1d40b1073f244b581ef5bcfb
---

 libavcodec/h264_metadata_bsf.c | 43 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/libavcodec/h264_metadata_bsf.c b/libavcodec/h264_metadata_bsf.c
index 81cdcac5cf..89bdedfc69 100644
--- a/libavcodec/h264_metadata_bsf.c
+++ b/libavcodec/h264_metadata_bsf.c
@@ -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 }
 };
 


======================================================================




More information about the ffmpeg-cvslog mailing list