From patchwork Wed Apr 22 15:09:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 19171 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 2DF9E44B104 for ; Wed, 22 Apr 2020 20:46:31 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0880B68BCF5; Wed, 22 Apr 2020 20:46:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 96E3D68BBF9 for ; Wed, 22 Apr 2020 20:46:23 +0300 (EEST) Received: by mail-pl1-f196.google.com with SMTP id s10so1237680plr.1 for ; Wed, 22 Apr 2020 10:46:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=vWzUrkzmaColppuFbAcubwWohmgZJibUJ/9Zp3Ac2/U=; b=MYBPa+pCHwRhDOF0omRZvFt9SeUPf+uGNZZV6UNw3u9t/43ZBCOdeD1hvIC2h9psnc BI7Nz8CsZ5OPOnAlBaZVOIBu6MBERx0KbR9OVFCB3oVpGY3qVEJH3tml+ysN1FSyRa+C fPwfGzgmg49lBb5KTWV+F0+MbfJgps2sBtTOUISycIUKN+tr4QwEdHkcG8TpjgdLPiKY xLtcHD5bav9Jdd25ncL8b1ZBSFT/awtIgLXtTegMOmwTj4bZ1vegsj8WLn+Q7OkkWMo5 2dltGv7wCRJmHr6m85ifwgc9FPcjUzNM90dTacltCcheKpajS9HJmCXBljQyWaJkM/sG SKJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vWzUrkzmaColppuFbAcubwWohmgZJibUJ/9Zp3Ac2/U=; b=T3/r8iMfckQmxJwyIBAvi+BoCr22U9oMOK4+XdH9JQ3I9GQ7QcWSaMO5tQVkKBTyg5 58yPGKtF/zncfKia/zCl9SK2xOO0iVbr8xpNikNJJCEG3c4IE2F5hLRd1b02vmUksfcI Sp2mooiyWhzSQEKge8zGvCAl09WUgjfEkzZpmBXRdrKw/3FePcihgFyGavteImDmekGV Bi+wI84Jf9+osMeUgTA2Gs5jnxFhgA76H6yTiPfH8FxkvagW+D5jXObi9o5s5NqBFnzG 5IDK5ICkI7Xs8dYyWEHVZVnC5gcaIcSRCU8xdvVG8jzCZ3oIQeGDAGy4rz+Anvn6L+Pd MEGQ== X-Gm-Message-State: AGi0PuY2+M7EuFBJ5QMRtDTB8eATMVi8nIE5dpiUuUsK+2XKEjYXV3cs TrB0HR4+o5AZhtHs7l1HCJe5J/dI X-Google-Smtp-Source: APiQypLiINQcNig2VujmR+y3UcHQG8VAtwazXr/xneIIz6XdCvv63ehdyN6QvlpwZ7eRXOsXCPvDdA== X-Received: by 2002:a0c:fdc3:: with SMTP id g3mr25904775qvs.184.1587568204392; Wed, 22 Apr 2020 08:10:04 -0700 (PDT) Received: from localhost.localdomain ([191.83.214.64]) by smtp.gmail.com with ESMTPSA id c69sm4068775qkg.104.2020.04.22.08.10.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Apr 2020 08:10:03 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 22 Apr 2020 12:09:47 -0300 Message-Id: <20200422150947.850-3-jamrial@gmail.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200422150947.850-1-jamrial@gmail.com> References: <20200422150947.850-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] avcodec/h265_metadata: filter parameter sets in packet side data X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Extradata included in packet side data is meant to replace the codec context extradata. So when muxing for example to MP4 without this change and if extradata is present in a packet side data, the result will be that the parameter sets present in keyframes will be filtered, but the parameter sets ultimately included in the hvcC box will not. Signed-off-by: James Almer --- libavcodec/h265_metadata_bsf.c | 58 ++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/libavcodec/h265_metadata_bsf.c b/libavcodec/h265_metadata_bsf.c index 730f7ac28f..135ef05509 100644 --- a/libavcodec/h265_metadata_bsf.c +++ b/libavcodec/h265_metadata_bsf.c @@ -336,6 +336,60 @@ static int h265_metadata_update_sps(AVBSFContext *bsf, return 0; } +static int h265_metadata_update_side_data(AVBSFContext *bsf, AVPacket *pkt) +{ + H265MetadataContext *ctx = bsf->priv_data; + CodedBitstreamFragment *au = &ctx->access_unit; + uint8_t *side_data; + int side_data_size; + int err, i; + + side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, + &side_data_size); + if (!side_data_size) + return 0; + + err = ff_cbs_read(ctx->cbc, au, side_data, side_data_size); + if (err < 0) { + av_log(bsf, AV_LOG_ERROR, "Failed to read extradata from packet side data.\n"); + goto fail; + } + + if (ctx->level == LEVEL_AUTO && !ctx->level_guess) + h265_metadata_guess_level(bsf, au); + + for (i = 0; i < au->nb_units; i++) { + if (au->units[i].type == HEVC_NAL_VPS) { + err = h265_metadata_update_vps(bsf, au->units[i].content); + if (err < 0) + goto fail; + } + if (au->units[i].type == HEVC_NAL_SPS) { + err = h265_metadata_update_sps(bsf, au->units[i].content); + if (err < 0) + goto fail; + } + } + + err = ff_cbs_write_fragment_data(ctx->cbc, au); + if (err < 0) { + av_log(bsf, AV_LOG_ERROR, "Failed to write extradata into packet side data.\n"); + goto fail; + } + + side_data = av_packet_new_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, au->data_size); + if (!side_data) { + err = AVERROR(ENOMEM); + goto fail; + } + memcpy(side_data, au->data, au->data_size); + + err = 0; +fail: + ff_cbs_fragment_reset(ctx->cbc, au); + return err; +} + static int h265_metadata_filter(AVBSFContext *bsf, AVPacket *pkt) { H265MetadataContext *ctx = bsf->priv_data; @@ -346,6 +400,10 @@ static int h265_metadata_filter(AVBSFContext *bsf, AVPacket *pkt) if (err < 0) return err; + err = h265_metadata_update_side_data(bsf, pkt); + if (err < 0) + goto fail; + err = ff_cbs_read_packet(ctx->cbc, au, pkt); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Failed to read packet.\n");