From patchwork Tue Sep 18 22:31:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 10386 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:12c4:0:0:0:0:0 with SMTP id 65-v6csp14385jap; Tue, 18 Sep 2018 15:36:01 -0700 (PDT) X-Google-Smtp-Source: ANB0Vdar6xB/woz/bMAVqqxw1/1xdiG4cjjtGuCBBBeZVooX1ogyMLM+dHlm7oCtlSNyZcfT/kpX X-Received: by 2002:a1c:2905:: with SMTP id p5-v6mr13749906wmp.1.1537310161353; Tue, 18 Sep 2018 15:36:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537310161; cv=none; d=google.com; s=arc-20160816; b=ZQbrYDJGVxE6rtHJ7qZoXKAXrdVXm8TSLlmvJi3LCXy34JyD8Aco5wEhBgg2D5YDNH NM4wu7NWxwl6dpyUteYOKyudZZ7PMUUtp4/bphpdsJ9xvI93gIWYVnix8A+lqKKgk8pT 0KcVn5r/uzuBmEKjG9R6PoluDhfVIh27vM3daNF9h6FD8BgKJWzELdux7zWJJPnX5/TK wjt9CyJXQ9qMM8P0J3hKDO+TigyYr+ylvqo076H1k4hxMI4XgaRWS5k2hPh+YT36jZsq Q3458gW/xO36CQrZ01kdqRs42UzQAX31W2yRoGrIty5M2Hk7KsKk95BnVTS8BPW7Hcg+ sLCw== 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=oEsJwhDVNiJ5D2WjC6WC58AMWIN3qFxFUGjGdcTB1E3jDDBDZtB4MIXZm9gVlBwPmt 2SO0nDe+AL+ZXW5Op6GBIwNUivL1fzxJG4FyoP97ikMyo34tddR0cz4QMi6H+XC40juL af2VnXmcNh3/hp3gv113HzKYwq2awnUnl1v46FKNFbTZwHom3A7cvfROckwB8l20VY6O Zbek7+CkjC31x8Xl71xF6wEhZjuzZ/9o4jB0AgMn6lWJ6CG/oyr+hNKXetyqOn8DHPrZ 0iyk7Z3uP7ndqgVVVUTdWbJZOwxFPTgri5n3HSyHt+nH14ff0a882j1BI5ywV4H3/r1t /4ow== 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=Z6RjCPft; 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 g188-v6si10847331wma.92.2018.09.18.15.36.00; Tue, 18 Sep 2018 15:36:01 -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=Z6RjCPft; 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 88E5C68A6AD; Wed, 19 Sep 2018 01:31:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9B2AA68A67C for ; Wed, 19 Sep 2018 01:31:41 +0300 (EEST) Received: by mail-wm1-f46.google.com with SMTP id r1-v6so7970900wmh.0 for ; Tue, 18 Sep 2018 15:31:54 -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=Z6RjCPftpiwJWm1sdlAe5O6MZScUM/DLgjtirsjzWz6XtKVTKWQIwblMPGTrtUC8PQ 2tKBXNPwP0MmXv7HV5YSEUFKwWotsXBf2MB2lNGv/hmi3OyQ99b4ecOWaFrYxlxzdlnQ 1Cqo4EM3gFWB5UpZU2ym7xAHTkgfAQsjS7HgV9jDS1KwaviOxfNqWZM+k3NyNzA5zBSJ E94EsJbFCkOJLRxrTgqbefYiWSxjoN+Z+onteCBgWoyCXgZFCij4eEoeAGP8xcI4FpWx 5qFQccFouL6VnkfHGskQ/YLNp4Sx/21KnCqcfjQejcNxm/iBk5uUGWxIwykurtL1gPz+ jeHg== 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=T7+6hrmDoUVNJ9w6EE/RCExPuJgfCRPwlzJNjsvG9XXfw3CQHpBzF7w6kHc209BIrM PSsX5o4A43qmbd49q0pbdT9cKEDmss0QY1TT51QDZE2luv9I1n/W9EcQaulHU+5Fr0iC 5w0IUbCzV+q5dTRpuJ/4q9VrkafUE/JLji+0ccUAbE3XFG7c/tQU/DnZETNlQgnuwi41 cW2X71aBBKNgqLMJsNb6ZmGmsw4waKQpVZNzFU01q2qBYz6T6OujQZbFjtEM6+iuQ8Rq i7dKONNJa6ilGDm9TCmiE4/7zEkSU037zBZhJFk+7tupfIKTdkmwiuXHP7nBi4JUyMHm XZbA== X-Gm-Message-State: APzg51DF0nZxahOyuRMtYZU4edAnX3+fj0FDVaXmGsUlunGgmjsXiHHp YilaP8emrgey4/ba1z2lFM2P3zQn70I= X-Received: by 2002:a1c:2d54:: with SMTP id t81-v6mr18144486wmt.31.1537309913805; Tue, 18 Sep 2018 15:31:53 -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 e141-v6sm4863826wmd.32.2018.09.18.15.31.52 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 18 Sep 2018 15:31:53 -0700 (PDT) From: Mark Thompson To: ffmpeg-devel@ffmpeg.org Date: Tue, 18 Sep 2018 23:31:09 +0100 Message-Id: <20180918223116.14322-32-sw@jkqxz.net> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180918223116.14322-1-sw@jkqxz.net> References: <20180918223116.14322-1-sw@jkqxz.net> Subject: [FFmpeg-devel] [PATCH v4 31/38] 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); }