From patchwork Sun Aug 20 22:41:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 4774 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.37.132 with SMTP id g126csp2343971jag; Sun, 20 Aug 2017 15:44:20 -0700 (PDT) X-Received: by 10.28.232.29 with SMTP id f29mr4741044wmh.181.1503269060666; Sun, 20 Aug 2017 15:44:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1503269060; cv=none; d=google.com; s=arc-20160816; b=gnMLhkhi7WTeIuD8ivH6tgNQKbuGHyYcUkjiUaQqxUZlBbxm1ZoKdaagYUgsDZ/zKS AzAiqS84MQZyO/4/Thg++8JpOTLKjKwLyvGWoxOdUxRKFB8pcS3KljBjuhU4pCpy2ST8 gWoT4gO990lv0p+aPoFsss5HhbZ4vT8d3Nd58pedTYiSIEB43zRSfa3UNeXrpk42Z9pT eYsDPnHLRlNbuQOPd/yTKKuavEUBxsnTGH6P2u3CxGeW2lyrtVXzBlZJZIE+O2Bya3ef PTeOW9UK0vxWSTYsni0OIQ9vJ19VD03y08xNtOjAwvwnn0h8bbWCZGoB9Z666q5YJCZe DtcQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=asggm/RPUp01kdtB4sYtOI2G2b4jyfA9j0IatbZNF/E=; b=wNVtBlzPJ/4w8pK3VtREOGIPx0wIDABbD/aOmst09v/PP4+9BOgkKyjVWyN2pVypcR h6CQ13IRbgh89U0toKfWlkXO+UcBhLW/fzpvB+LRauiTmwzZgDLnfvhP2dvThRq2Ys58 JinIEruym3isb4LHSiT+h1QoT6mzPBaIlqwv66GvCLC06vwZzvRGk/f9pxj61nM8WX1l obNqxHGVHqHFBuqBzoTnkoDHNsoGCqKDb817CRNvyIBAtt+88eCJPX92h++I5Xcu0WiI tT029F8+TwkAKiVdwVKMjD7eke8EPXYMr8Gcy8SdKPlwJNdx6gZShxDyhQfkUnJvfJwQ i1yw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=RM+uCrRM; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id z9si8249258wra.119.2017.08.20.15.44.20; Sun, 20 Aug 2017 15:44:20 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=RM+uCrRM; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 71BEC689B23; Mon, 21 Aug 2017 01:42:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f169.google.com (mail-wr0-f169.google.com [209.85.128.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 02667689AA9 for ; Mon, 21 Aug 2017 01:42:07 +0300 (EEST) Received: by mail-wr0-f169.google.com with SMTP id z91so82974952wrc.4 for ; Sun, 20 Aug 2017 15:42:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=A9fiX8KTqachBEvofu+gKH42U06rme+/3o0N16lqZZ0=; b=RM+uCrRMwFQi9n5u5x9bidKWFSqp1tI64hfizi4u1m8QhcbAcuItF7W1gzHDXKwmoe 2XkwW/C8MW46h4vmVoThpODr20iPTnAwzpK5Q5FASidT532vCElm6mBiW39jwySJ3Ylf A1FfTCFPIYiEnS1GHudAQDspqjmtzOvNqN7YrzsAfZ7f9YPNLC9lpi/FLiURGuMN2Lmi BPAGte6bNrkIKQfYUQkOpR/8plY9bXlHqexhAvB7uXPrSkj65snEp4g5De/mqHIN+PQp KYZHe+rGw9gkTTp5akre8ithjsE+DMjv/OHRjjHFYr2aH5QIXEvL4osQOvOt9Z1LypYq ewyQ== 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; bh=A9fiX8KTqachBEvofu+gKH42U06rme+/3o0N16lqZZ0=; b=TR5F8yMTzomyoM/phvsPc4qoc2zu6LwWLaT8e/xsqedFEDGW9qGirJwz49hlIH2Ndg neUluDP6mxxy7X857Tz2LTsg+w8QRmcS3VTQlpoldXevZcm9TVA2/yBloUzPNth+X6Vp Drms/T5oV+ycvmZVLyv8h/y+oPbqxnECrDgi1E0xHH2E/Li6fJM8H46zo9q9T9xvHILM ohxpgEgISNGS8ld/DnfOeQSFYR1IDB7cdJplDhmFmjSkBGRidCPUw+Z08N5SEc4tCTCL F9IWt51rkEQzpZ9T38g6Es/DL2r9gCPpc+2FORm/CLzHpJbWRHFer0WUj1Q5gOtwXudg FgiQ== X-Gm-Message-State: AHYfb5jlkJdDoOCY7ge6f9ZPWRRUhF4avNLefUofWYubU+qGNrQonJiP UBLvmU7zOZJQlsk5jgk= X-Received: by 10.223.157.30 with SMTP id k30mr10645288wre.270.1503268934197; Sun, 20 Aug 2017 15:42:14 -0700 (PDT) Received: from rywe.jkqxz.net (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id f9sm5391116wmf.18.2017.08.20.15.42.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 20 Aug 2017 15:42:13 -0700 (PDT) From: Mark Thompson To: ffmpeg-devel@ffmpeg.org Date: Sun, 20 Aug 2017 23:41:43 +0100 Message-Id: <20170820224146.21289-16-sw@jkqxz.net> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170820224146.21289-1-sw@jkqxz.net> References: <20170820224146.21289-1-sw@jkqxz.net> Subject: [FFmpeg-devel] [PATCH 15/18] vaapi_h264: Add support for AUD NAL units 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Adds a new private option to enable them (off by default). (cherry picked from commit 820a4483af13cf6fd51f13638e57bcd1c3f629d4) --- libavcodec/vaapi_encode_h264.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index d5fbc54c0b..56e10074c8 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -53,6 +53,7 @@ typedef struct VAAPIEncodeH264Context { int fixed_qp_p; int fixed_qp_b; + H264RawAUD aud; H264RawSPS sps; H264RawPPS pps; H264RawSEI sei; @@ -77,6 +78,7 @@ typedef struct VAAPIEncodeH264Context { CodedBitstreamContext cbc; CodedBitstreamFragment current_access_unit; + int aud_needed; int sei_needed; } VAAPIEncodeH264Context; @@ -86,6 +88,7 @@ typedef struct VAAPIEncodeH264Options { int low_power; // Entropy encoder type. int coder; + int aud; int sei; } VAAPIEncodeH264Options; @@ -145,6 +148,13 @@ static int vaapi_encode_h264_write_sequence_header(AVCodecContext *avctx, CodedBitstreamFragment *au = &priv->current_access_unit; int err; + if (priv->aud_needed) { + err = vaapi_encode_h264_add_nal(avctx, au, &priv->aud); + if (err < 0) + goto fail; + priv->aud_needed = 0; + } + err = vaapi_encode_h264_add_nal(avctx, au, &priv->sps); if (err < 0) goto fail; @@ -169,6 +179,13 @@ static int vaapi_encode_h264_write_slice_header(AVCodecContext *avctx, CodedBitstreamFragment *au = &priv->current_access_unit; int err; + if (priv->aud_needed) { + err = vaapi_encode_h264_add_nal(avctx, au, &priv->aud); + if (err < 0) + goto fail; + priv->aud_needed = 0; + } + err = vaapi_encode_h264_add_nal(avctx, au, &priv->slice); if (err < 0) goto fail; @@ -191,6 +208,11 @@ static int vaapi_encode_h264_write_extra_header(AVCodecContext *avctx, int err, i; if (priv->sei_needed) { + if (priv->aud_needed) { + vaapi_encode_h264_add_nal(avctx, au, &priv->aud); + priv->aud_needed = 0; + } + memset(&priv->sei, 0, sizeof(priv->sei)); priv->sei.nal_unit_header.nal_unit_type = H264_NAL_SEI; @@ -573,6 +595,14 @@ static int vaapi_encode_h264_init_picture_params(AVCodecContext *avctx, priv->pic_order_cnt = pic->display_order - priv->last_idr_frame; priv->dpb_delay = pic->display_order - pic->encode_order + 1; + if (opt->aud) { + priv->aud_needed = 1; + priv->aud.nal_unit_header.nal_unit_type = H264_NAL_AUD; + priv->aud.primary_pic_type = priv->primary_pic_type; + } else { + priv->aud_needed = 0; + } + if (opt->sei & SEI_IDENTIFIER && pic->encode_order == 0) priv->sei_needed = 1; @@ -935,6 +965,9 @@ static const AVOption vaapi_encode_h264_options[] = { { "vlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, FLAGS, "coder" }, { "ac", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, FLAGS, "coder" }, + { "aud", "Include AUD", + OFFSET(aud), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, FLAGS }, + { "sei", "Set SEI to include", OFFSET(sei), AV_OPT_TYPE_FLAGS, { .i64 = SEI_IDENTIFIER | SEI_TIMING },