From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 17B6A465B1 for ; Wed, 21 Jun 2023 21:36:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1E43968C066; Thu, 22 Jun 2023 00:36:09 +0300 (EEST) Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com [209.85.210.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7FAD268BFFD for ; Thu, 22 Jun 2023 00:36:03 +0300 (EEST) Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-6b586e564fcso2960969a34.1 for ; Wed, 21 Jun 2023 14:36:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687383361; x=1689975361; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=HTsRFDa8ZgKfTu0cjDbrrYnmPGiqePEITsrCkOcRyps=; b=SdqTfaeTi0fDXpkQ8LBPXXbtS5I8o4FW8IUJTeIfB8qj83Oldel4HDkWUNRD4rS7DG LcWXIvawL7JL3M09t28IgJtd0ZiHqX0Z6tEsFqMihpaOJJ9vglJ9f0VnYqsbX/n4EbWq RRPiEmUuw75hGxtFVSWdXLEyVtJw3LMuPEZqg/RdtXt51tTPL6CrAHmOP3X68n1MNZ/9 WEyTzhuN/suuPqsgFlZ+qCNtfNZP3y7Fm9viD9XrlzDd8CsWsH52Eqhm3NLuFP7XZZg0 0U4rPbQabSKfPZwZ+Tc2rNDlJPXBMX1adm+1uC74SvF7Jt+fHAUeOIHPtULgAhL4THDH SE3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687383361; x=1689975361; h=content-transfer-encoding:in-reply-to:from:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=HTsRFDa8ZgKfTu0cjDbrrYnmPGiqePEITsrCkOcRyps=; b=Ss2mTh9BSOzIDtYCTpQZGsx1mqoHGW2KUncFymuI0Kqb0lg2X5aQXAekkDN0qxcxHm WLeIgu57Iy3vQHXN8dn2r2BdVxfzPpIXefBHbOY8R6EUP9TTcAJhNBslvOkOLisD9uau 2++jTSMJeXomYqZ4VSZN6El4PVtSI6BQZWbWibjZkaZRl3JpxCTdIMlqeej/9utPVmce hSJmg1Hy3x3dijzk2saH8rGk8gN9GuqiTCtE8ZL0AhFFA1ZOu3e3JVxvBGsq4EFB3LmN W+71yNL63MeslfZ2EVxIR3Hmzm7/OacMuYUsm9P65lCTq39CayyuuZ5kC16xFDiTUEJt +RLg== X-Gm-Message-State: AC+VfDx++euPxfUljPetjkbRhOZrvyRAWAH8/5EFDHz5jVxd1Ub+H0IG Rnu+DOSzLVnF933dpKYaNiTxVVkmWK8= X-Google-Smtp-Source: ACHHUZ7ewGljIQPniOAlGBqBB6/X7k4AnEMnQlfUlK2aIbOure5a6tVW7cunBhE9L0XC1pUMsuZx4g== X-Received: by 2002:a05:6830:22f6:b0:6b5:8876:c891 with SMTP id t22-20020a05683022f600b006b58876c891mr8334172otc.18.1687383361316; Wed, 21 Jun 2023 14:36:01 -0700 (PDT) Received: from [192.168.0.12] (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id n19-20020a9d6f13000000b006b42a94bef3sm2291370otq.38.2023.06.21.14.36.00 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 21 Jun 2023 14:36:00 -0700 (PDT) Message-ID: <2ed28b2f-f425-f139-5489-aac02040214b@gmail.com> Date: Wed, 21 Jun 2023 18:36:14 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20230620233601.1876939-1-airlied@gmail.com> <4d9f0d83-db4c-b0ea-cc9a-e3154c402a6e@gmail.com> From: James Almer In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH] av1dec: handle dimension changes via get_format 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 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 6/21/2023 6:15 PM, Dave Airlie wrote: > On Thu, 22 Jun 2023 at 02:36, James Almer wrote: >> >> On 6/20/2023 8:36 PM, airlied@gmail.com wrote: >>> From: Dave Airlie >>> >>> av1-1-b8-03-sizeup.ivf on vulkan causes gpu hangs as none of the >>> images get resized when dimensions change, this detects the dim >>> change and calls the get_format to reinit the context. >>> --- >>> libavcodec/av1dec.c | 12 ++++++++---- >>> 1 file changed, 8 insertions(+), 4 deletions(-) >>> >>> diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c >>> index e7f98a6c81..1cec328563 100644 >>> --- a/libavcodec/av1dec.c >>> +++ b/libavcodec/av1dec.c >>> @@ -721,6 +721,7 @@ static av_cold int av1_decode_free(AVCodecContext *avctx) >>> } >>> >>> static int set_context_with_sequence(AVCodecContext *avctx, >>> + int *dim_change, >>> const AV1RawSequenceHeader *seq) >>> { >>> int width = seq->max_frame_width_minus_1 + 1; >>> @@ -753,6 +754,8 @@ static int set_context_with_sequence(AVCodecContext *avctx, >>> int ret = ff_set_dimensions(avctx, width, height); >>> if (ret < 0) >>> return ret; >>> + if (dim_change) >>> + *dim_change = 1; >>> } >>> avctx->sample_aspect_ratio = (AVRational) { 1, 1 }; >>> >>> @@ -859,7 +862,7 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) >>> goto end; >>> } >>> >>> - ret = set_context_with_sequence(avctx, seq); >>> + ret = set_context_with_sequence(avctx, NULL, seq); >>> if (ret < 0) { >>> av_log(avctx, AV_LOG_WARNING, "Failed to set decoder context.\n"); >>> goto end; >>> @@ -1202,7 +1205,7 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) >>> CodedBitstreamUnit *unit = &s->current_obu.units[i]; >>> AV1RawOBU *obu = unit->content; >>> const AV1RawOBUHeader *header; >>> - >>> + int dim_change = 0; >>> if (!obu) >>> continue; >>> >>> @@ -1220,7 +1223,8 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) >>> >>> s->raw_seq = &obu->obu.sequence_header; >>> >>> - ret = set_context_with_sequence(avctx, s->raw_seq); >>> + dim_change = 0; >>> + ret = set_context_with_sequence(avctx, &dim_change, s->raw_seq); >>> if (ret < 0) { >>> av_log(avctx, AV_LOG_ERROR, "Failed to set context.\n"); >>> s->raw_seq = NULL; >>> @@ -1229,7 +1233,7 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) >>> >>> s->operating_point_idc = s->raw_seq->operating_point_idc[s->operating_point]; >>> >>> - if (s->pix_fmt == AV_PIX_FMT_NONE) { >>> + if (s->pix_fmt == AV_PIX_FMT_NONE || dim_change) { >>> ret = get_pixel_format(avctx); >> >> Dimensions can change between frames without a seq header showing up to >> change the max_width/height values. get_pixel_format() would need to be >> called on frame headers instead. > > It can but my reading of the spec is that it is illegal to go beyond > the max in sequence header. > > 6.8 Frame header OBU semantics > 6.8.4 Frame size semantics > > " > It is a requirement of bitstream conformance that frame_width_minus_1 > is less than or equal to max_frame_width_minus_1. > It is a requirement of bitstream conformance that frame_height_minus_1 > is less than or equal to max_frame_height_minus_1. > " > > Dave. So Vulkan always allocates buffers for the max allowed dimensions and not for the current frame's dimensions? _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".