Merge commit '6d5a6dde5301c81e221a37b3f39bb03149492b98'
authorMark Thompson <sw@jkqxz.net>
Wed, 21 Feb 2018 22:54:07 +0000 (22:54 +0000)
committerMark Thompson <sw@jkqxz.net>
Wed, 21 Feb 2018 22:54:07 +0000 (22:54 +0000)
* commit '6d5a6dde5301c81e221a37b3f39bb03149492b98':
  h264_metadata: Add option to delete filler data

Fixes #6899.

Merged-by: Mark Thompson <sw@jkqxz.net>
1  2 
libavcodec/h264_metadata_bsf.c

index 81cdcac5cfb18eca1f9a8f59ffa50da69386ac4c,7b51e8ee8bb6610f63c85c0aed6d2ab7aa435e71..89bdedfc69d422830fa124053e628de9db0d984e
@@@ -1,18 -1,18 +1,18 @@@
  /*
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -63,6 -63,8 +63,8 @@@ typedef struct H264MetadataContext 
  
      const char *sei_user_data;
      int sei_first_au;
+     int delete_filler;
  } H264MetadataContext;
  
  
@@@ -346,6 -348,44 +348,44 @@@ static int h264_metadata_filter(AVBSFCo
          }
      }
  
+     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");
@@@ -420,7 -460,7 +460,7 @@@ static const AVOption h264_metadata_opt
  
      { "sample_aspect_ratio", "Set sample aspect ratio (table E-1)",
          OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL,
 -        { .i64 = 0 }, 0, 65535 },
 +        { .dbl = 0.0 }, 0, 65535 },
  
      { "video_format", "Set video format (table E-2)",
          OFFSET(video_format), AV_OPT_TYPE_INT,
  
      { "tick_rate", "Set VUI tick rate (num_units_in_tick / time_scale)",
          OFFSET(tick_rate), AV_OPT_TYPE_RATIONAL,
 -        { .i64 = 0 }, 0, UINT_MAX },
 +        { .dbl = 0.0 }, 0, UINT_MAX },
      { "fixed_frame_rate_flag", "Set VUI fixed frame rate flag",
          OFFSET(fixed_frame_rate_flag), AV_OPT_TYPE_INT,
          { .i64 = -1 }, -1, 1 },
      { "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 }
  };
  
@@@ -472,7 -515,7 +515,7 @@@ static const AVClass h264_metadata_clas
      .class_name = "h264_metadata_bsf",
      .item_name  = av_default_item_name,
      .option     = h264_metadata_options,
 -    .version    = LIBAVCODEC_VERSION_MAJOR,
 +    .version    = LIBAVUTIL_VERSION_INT,
  };
  
  static const enum AVCodecID h264_metadata_codec_ids[] = {