From patchwork Sun Apr 28 07:26:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Rosca X-Patchwork-Id: 48328 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:1509:b0:1a9:af23:56c1 with SMTP id nq9csp1334882pzb; Sun, 28 Apr 2024 00:28:10 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX/jSIQV+QdcXml3DgzhGCRByxbmbMTSJuPHpX2w1bV6yX7a20OmLflLh78UN6aXl2vzZEHXwf7wplN0PLEW/6HgDwq6dHSXFIsyw== X-Google-Smtp-Source: AGHT+IHmL55ALuyoXHo/DIp9COwut1BRvydQ4MacHmzttCWkpBpD+r15Nq7HKVJkZeac/1cUd+hx X-Received: by 2002:a17:906:2a96:b0:a55:b2e9:413a with SMTP id l22-20020a1709062a9600b00a55b2e9413amr3627536eje.7.1714289290101; Sun, 28 Apr 2024 00:28:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1714289290; cv=none; d=google.com; s=arc-20160816; b=p4ozy4O515JtfSvpqAVflFkZhO18IfFqAzZ2XVJQ4fg8Rw6DkijFYHcYwjgJrRxsKJ D3ICSfJ2XKiB9hkjNvaQgwmVG0TbiQprkupZXT8yyFlG0E6KgYSqFAODQcpGEm+J9rgv zDi923hIVl49FqeDTF+m+LzlrrO4DNKG8EFO0kGO8G82wE41NYYWSGXJzJztAK2D1wdZ PHxvaCquauB7mX4Tyhy9xSnJSjDp+nLutORPm7/e0gv7mjWoVoDoVAd3wbFurCJ2pvjK JRkmefFXxVy/m+6RuR42tp/miJx97zaZFtDRn9eBOXDrNXNSdi2WxWzXnpoTW3XhlsKz ohwQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=5SIRjCntrhHfdsT1axuw9vlzMWpqRG3bq5+BOdJZUzA=; fh=mbb85L8FZ404unHdLI+iF4ZFmTMGr6nZHIcfO/oKEvw=; b=sb4ns+9PuYW4OvQEIY8Gab/ivcRWRbOtv25hSOYFGGlXjBu4yVPELj+ReB8Qo72Zon fPQPyvjvWOtCTK9twxIdTOdO/EoLiJhlj0cNYSviWU8hIq/vL22yylNbjxwkVyNSAx9P YKk6dL+dJGtftmv9lvti7tEmke1B7n/hqFjg5+ZzuZeiDSmm/OV2E5/baxdaKuuTBWxY cT6neqp+JeHwJIGQMtqKVCb8/AUaK/jNhAOJmEt5pyTyp2RjCONS0BBaNnXLcIa4koQa oANaWcGC3jnlfQI9kZFFrNn0hcgaJSwn8ylu1UwZ+BleFeElUQE+4FXoRRa3M72AnbMq IlIA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Yp9NyCto; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a17-20020a1709066d5100b00a58ed275918si1132976ejt.787.2024.04.28.00.28.09; Sun, 28 Apr 2024 00:28:10 -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=@gmail.com header.s=20230601 header.b=Yp9NyCto; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6266C68D3DC; Sun, 28 Apr 2024 10:28:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D5C9568D22E for ; Sun, 28 Apr 2024 10:27:53 +0300 (EEST) Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-a58872c07d8so804892766b.0 for ; Sun, 28 Apr 2024 00:27:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1714289273; x=1714894073; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7M1iHQoUbMNydDowVi7DDsNUy4h76nX1wrLWswAfFpY=; b=Yp9NyCtoYiBDsfPAV2OIIPUxn0K9oeZAVrLFsWt6H9bHyU7GPvSq9qpwHXfLy7T63B pmto/cbrwZY5GPj454DlawR5sOuTOycskKrMqrl6oB4DgzGffsu03BrBNS/t8XktqmEM iAm8WztRHL7wG8hZu2Gtnb6rmVUdlZ0fdPVIuIdxHQXRAhfZlNuv4MDlWs0Dr+DlR476 lj4x2C4Qw3Xadc5RvecqmopHWJvZkMWRQC+aIR9z5whPjG0/VOPtDQkeR3n85ss6tq1r cn+EWpjkArkYA5zsk2KMNdcFjiy5ELtFo1LIPbKJvJcXl/Nfqhgc8nnjMZnRG52e7TD3 CtGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714289273; x=1714894073; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7M1iHQoUbMNydDowVi7DDsNUy4h76nX1wrLWswAfFpY=; b=K2v+K+545SIuzYXFgW1DtUwmvR7eUmgM3+F39HvWWaCYj1wDeG01L7ctsjgG4tib+V aTCHmZL8RJbaXbRGhyOd9xf91crujMo2jwNPzscpL8tQBa7EvCkIgGuYDDZlIAI7ORc8 aYPJ9k8/BH6a8A6X0vJ6XhG6FBtPhdy9T6ezBTuVVOetdthX5gbflZj9gMnWZ4geaTkm KttCEOcqGd1qgPfLNluqNHbLLur2d7FoU17zy9LmVy84/KMHE4AewIOpoNddvhq9YLWN rUG44oQuUCGfSLkeMPzOh4Dz5Vyx4toIaY3SzP5ayuhMeeEXNSlPMfArfvfpvgOmFRKn Cjzg== X-Gm-Message-State: AOJu0YyvhPTS9EPhS/HwRsiTZtpeCbHTFs3LNqxeC8bVe8Hgockc+sPL 8s4FTXzcqPdxyrXSPHe8fQlrDXn2n+d7tMnwX5F/5eVME+mobEKgfohagw== X-Received: by 2002:a17:906:7cc2:b0:a55:b8b7:1971 with SMTP id h2-20020a1709067cc200b00a55b8b71971mr5328727ejp.32.1714289272906; Sun, 28 Apr 2024 00:27:52 -0700 (PDT) Received: from mitsuki.. (ip-78-45-35-87.bb.vodafone.cz. [78.45.35.87]) by smtp.gmail.com with ESMTPSA id ku2-20020a170907788200b00a58c0c48756sm3128911ejc.32.2024.04.28.00.27.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Apr 2024 00:27:52 -0700 (PDT) From: David Rosca To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Apr 2024 09:26:41 +0200 Message-ID: <20240428072650.168514-2-nowrep@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240428072650.168514-1-nowrep@gmail.com> References: <20240428072650.168514-1-nowrep@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] lavc/vaapi_av1: Avoid sending the same slice buffer multiple times X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Cc: David Rosca Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: TOr6B9jeZbpU When there are multiple tiles in one slice buffer, use multiple slice params to avoid sending the same slice buffer multiple times and thus increasing the bitstream size the driver will need to upload to hw. --- libavcodec/vaapi_av1.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c index 4a90db1e09..567f505fbd 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -19,6 +19,7 @@ */ #include "libavutil/frame.h" +#include "libavutil/mem.h" #include "hwaccel_internal.h" #include "vaapi_decode.h" #include "internal.h" @@ -393,13 +394,17 @@ static int vaapi_av1_decode_slice(AVCodecContext *avctx, { const AV1DecContext *s = avctx->priv_data; VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private; - VASliceParameterBufferAV1 slice_param; - int err = 0; + VASliceParameterBufferAV1 *slice_params; + int err = 0, nb_params = 0; - for (int i = s->tg_start; i <= s->tg_end; i++) { - memset(&slice_param, 0, sizeof(VASliceParameterBufferAV1)); + slice_params = av_calloc(s->tg_end - s->tg_start + 1, sizeof(*slice_params)); + if (!slice_params) { + err = AVERROR(ENOMEM); + goto fail; + } - slice_param = (VASliceParameterBufferAV1) { + for (int i = s->tg_start; i <= s->tg_end; i++) { + slice_params[nb_params++] = (VASliceParameterBufferAV1) { .slice_data_size = s->tile_group_info[i].tile_size, .slice_data_offset = s->tile_group_info[i].tile_offset, .slice_data_flag = VA_SLICE_DATA_FLAG_ALL, @@ -408,18 +413,22 @@ static int vaapi_av1_decode_slice(AVCodecContext *avctx, .tg_start = s->tg_start, .tg_end = s->tg_end, }; - - err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &slice_param, 1, - sizeof(VASliceParameterBufferAV1), - buffer, - size); - if (err) { - ff_vaapi_decode_cancel(avctx, pic); - return err; - } } + err = ff_vaapi_decode_make_slice_buffer(avctx, pic, slice_params, nb_params, + sizeof(VASliceParameterBufferAV1), + buffer, + size); + av_free(slice_params); + + if (err) + goto fail; + return 0; + +fail: + ff_vaapi_decode_cancel(avctx, pic); + return err; } const FFHWAccel ff_av1_vaapi_hwaccel = {