From patchwork Sun Sep 23 21:52:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 10459 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:1286:0:0:0:0:0 with SMTP id 6-v6csp1851083jap; Sun, 23 Sep 2018 14:53:40 -0700 (PDT) X-Google-Smtp-Source: ACcGV60jY5IkozAbI+bMFTNavYjQqBdkreLaCI2LVgWFpeWBqF8pCOq8mZFD7nd9nlGhXJI3B+aT X-Received: by 2002:a5d:6782:: with SMTP id v2-v6mr6238581wru.245.1537739620033; Sun, 23 Sep 2018 14:53:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537739620; cv=none; d=google.com; s=arc-20160816; b=vprNhhPcAIt88i3YmTZXMcLDj1Ea7NIaaO/TbcNZTIMxqVZALGfhtiqJVF9y17FXHG 4oMI8eccQXxy6ik2d6pQYsppiuk4XeRZ7QCtzjlzcLjlTW9zoUXEoO/ZuNlCb1AXZMry nKpRzjfSXk8j9Txk5IfUJaK3ZOrlUXrYrngD4eVa457A7BHQtRjU3nT6KPGMY8dxBRE4 EKTVvkUpc2TLISyw3V+0nZ0U1gNLT2PFCRtOavhyLtx4tZL3m5afMYR1zAGf7S7Tow29 eQ10897ezykjD8uodvr9PLYwRkB6zuCLhomlMLZbkhGd1sev0INo/yXHNjuelzRLvzzz 6NAA== 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; bh=6W37rIef4r6hukQv5tN2geJ0O79yRMU8a6ShGNy87iA=; b=uLxroWNDtojxAidey8kBsL2X3JAEperzq3ge2gqQjctsE6mU6lel0IFb7CFjgadXXv j8AkwGovgylhX7me8pcpZ2jecNIkvTRl0I8d2TjPILlDVFVVEbMS/WwbUZjvTXlGw7z+ lCfjFe3hbgDRDyLOaij2Wn3/fhYDPwWEtx1Jlqk6XdZM3DySWznG+EI1/gdk0SSKn/Ds NyJafm3CJF3BRF5HZaJQRyrv4yt64K283sDaD94z7NINBNYU1tv2OR6tYmayvtFjatix 8ITirb3I2B1EiCdX0gjVCc78yYZSIbEePfHm/IrkyCSzNFcCBeyeS5bZe15JZ/ss+wtQ eXtw== 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=j6MaHEXf; 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 10-v6si11792306wme.112.2018.09.23.14.53.39; Sun, 23 Sep 2018 14:53:39 -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=j6MaHEXf; 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 AF45868A6BE; Mon, 24 Sep 2018 00:53:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F09D268A65C for ; Mon, 24 Sep 2018 00:52:53 +0300 (EEST) Received: by mail-wr1-f51.google.com with SMTP id b11-v6so1565597wru.9 for ; Sun, 23 Sep 2018 14:53:09 -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=6FNEh06kVi/2RXG4+AKSnv43md+RQa+KwmfqxJp+Dxg=; b=j6MaHEXfsLXwcxNqjackN/vfuJHMvSnX0ADN96ULJ4onOz9IMdcUgo0PSEUOyxfDdh 723Gabt1OPEirtGZjW0Ymux7IgwV3Y199AH99qNdOkbR0Eh5AyjE5ZC8fqg1/PbKEQVA EbIg0qmYKRf0Zqi9K73zmsWbQTd9BSo21unEGakSMPOHrq3JI6VyW3AWP8dYjEW0xgre PprHZ5Qc50WWzJDHq2947dFEOjjHtRovLqcsTEn9+J7eUPc44ZFi0yybY3HO+e0RJx2r wdgwAFCdNh9dnz5c6gY+6z8d4yYNZaA1FgC/I9reTnk/U9MypqBvvmXA4YJhViXsvPAd YWqA== 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=6FNEh06kVi/2RXG4+AKSnv43md+RQa+KwmfqxJp+Dxg=; b=O6Bc/G4CizTwuoRm0b4XBga4G1AboFJFs7LRGgSmO+/EXZMHaNLva1qp1XNGMMsJND BWTstd8kj5j73uVCqdtMuKsz6F/1JPfrZxw+qy758c1ZcPpeoXPjhLeB64qgXBRuuQYP DK3hEnbjLIuuzcKNnLRU6EPpqMrqZ9MmLrJj9lBmessXk5QHDCqBTZ9Udk0fAAAJ5+sC vprS0gdO+O7M3x4Pm8NQnY/ablAKsMNHwbvyXsdhww0nHAnHWjNvGBDlamMpNVaMNy4P olu/pjmQu6flL7E591m6UXtUJBahSuCk2QAoJMBE+tw1HbAQIZpsEGWLqW3jWWZV25NP 9Y+g== X-Gm-Message-State: ABuFfohEevQlQLEWWBxWzVKGKXctawCxE7PKm72TcaZ+yGW9UvvdOX/Q zhsZshkZGxMZ6B+hRgcBQW5/u1Hw1wU= X-Received: by 2002:adf:9a84:: with SMTP id a4-v6mr6034105wrc.78.1537739588624; Sun, 23 Sep 2018 14:53:08 -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 124-v6sm14960730wmk.20.2018.09.23.14.53.07 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Sep 2018 14:53:07 -0700 (PDT) From: Mark Thompson To: ffmpeg-devel@ffmpeg.org Date: Sun, 23 Sep 2018 22:52:59 +0100 Message-Id: <20180923215300.2077-4-sw@jkqxz.net> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180923215300.2077-1-sw@jkqxz.net> References: <20180923215300.2077-1-sw@jkqxz.net> Subject: [FFmpeg-devel] [PATCH v2 4/5] vaapi_encode_h265: Enable multiple-slice support 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" --- libavcodec/vaapi_encode_h265.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c index 1ada973dd3..ddda9165fa 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -54,9 +54,6 @@ typedef struct VAAPIEncodeH265Context { int sei; // Derived settings. - unsigned int ctu_width; - unsigned int ctu_height; - int fixed_qp_idr; int fixed_qp_p; int fixed_qp_b; @@ -849,8 +846,6 @@ static int vaapi_encode_h265_init_picture_params(AVCodecContext *avctx, av_assert0(0 && "invalid picture type"); } - pic->nb_slices = 1; - return 0; } @@ -875,9 +870,8 @@ static int vaapi_encode_h265_init_slice_params(AVCodecContext *avctx, sh->slice_pic_parameter_set_id = pps->pps_pic_parameter_set_id; - // Currently we only support one slice per frame. - sh->first_slice_segment_in_pic_flag = 1; - sh->slice_segment_address = 0; + sh->first_slice_segment_in_pic_flag = slice->index == 0; + sh->slice_segment_address = slice->block_start; sh->slice_type = priv->slice_type; @@ -967,7 +961,7 @@ static int vaapi_encode_h265_init_slice_params(AVCodecContext *avctx, *vslice = (VAEncSliceParameterBufferHEVC) { .slice_segment_address = sh->slice_segment_address, - .num_ctu_in_slice = priv->ctu_width * priv->ctu_height, + .num_ctu_in_slice = slice->block_size, .slice_type = sh->slice_type, .slice_pic_parameter_set_id = sh->slice_pic_parameter_set_id, @@ -988,7 +982,7 @@ static int vaapi_encode_h265_init_slice_params(AVCodecContext *avctx, .slice_tc_offset_div2 = sh->slice_tc_offset_div2, .slice_fields.bits = { - .last_slice_of_pic_flag = 1, + .last_slice_of_pic_flag = slice->index == pic->nb_slices - 1, .dependent_slice_segment_flag = sh->dependent_slice_segment_flag, .colour_plane_id = sh->colour_plane_id, .slice_temporal_mvp_enabled_flag = @@ -1040,13 +1034,6 @@ static av_cold int vaapi_encode_h265_configure(AVCodecContext *avctx) if (err < 0) return err; - priv->ctu_width = FFALIGN(ctx->surface_width, 32) / 32; - priv->ctu_height = FFALIGN(ctx->surface_height, 32) / 32; - - av_log(avctx, AV_LOG_VERBOSE, "Input %ux%u -> Surface %ux%u -> CTU %ux%u.\n", - avctx->width, avctx->height, ctx->surface_width, - ctx->surface_height, priv->ctu_width, priv->ctu_height); - if (ctx->va_rc_mode == VA_RC_CQP) { priv->fixed_qp_p = priv->qp; if (avctx->i_quant_factor > 0.0) @@ -1091,6 +1078,8 @@ static const VAAPIEncodeProfile vaapi_encode_h265_profiles[] = { static const VAAPIEncodeType vaapi_encode_type_h265 = { .profiles = vaapi_encode_h265_profiles, + .flags = FLAG_SLICE_CONTROL, + .configure = &vaapi_encode_h265_configure, .sequence_params_size = sizeof(VAEncSequenceParameterBufferHEVC), @@ -1137,6 +1126,9 @@ static av_cold int vaapi_encode_h265_init(AVCodecContext *avctx) ctx->surface_width = FFALIGN(avctx->width, 16); ctx->surface_height = FFALIGN(avctx->height, 16); + // CTU size is currently hard-coded to 32. + ctx->slice_block_width = ctx->slice_block_height = 32; + return ff_vaapi_encode_init(avctx); }