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 1EAE34659F for ; Wed, 21 Jun 2023 21:44:31 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C192668BE2D; Thu, 22 Jun 2023 00:44:29 +0300 (EEST) Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0DA6968BE2D for ; Thu, 22 Jun 2023 00:44:23 +0300 (EEST) Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-1b52bf6e66aso32072415ad.3 for ; Wed, 21 Jun 2023 14:44:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687383861; x=1689975861; 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=MgpyjN8Nxhr7shOLyuczeZjS2JBJBx37tdvMQuaFGzo=; b=ddzloZmHBnJ97agcJPVSI7qibJ++VRm12diJHOHZ3urfTmZQ/61Udt7OFaNHYQM4BQ BrUeP7GIrQr22vjaF7+yu0vi2c+Tdr1qwujTZVr6gT04/fZ51XFBb+9WX0Lwn93IpPWp A+Hx0k98Uor6RVK+AB6C9LAthp+TYNNckueTDJIcugmMZ7BbMVL06UI4CA8yHsuIn0wW UZF1v5mxcRhDKRPP7pUtO+ER5zB16+dxa8Dw5O/f/1gf32ch7uF/er1yLkuNw0eDtO+M ElwYXMhnIrA+DtPyfsxTTgKAVy3vLiXv2w2hZNXTYY6hjYmrNdCBpdPH+iuzSeTRTzlt 5baw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687383861; x=1689975861; 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=MgpyjN8Nxhr7shOLyuczeZjS2JBJBx37tdvMQuaFGzo=; b=I8n1HeqZ0TonYUqCkO+tGITkWy5XSuo8aLHeHNM4cMVBrvsHTCO4u38xomPeCf+19y RPD5nGcWwgR0gd/dFulb5h00CSbIPjsKCvw7idR6pvWrS4eoyY3iYLnoamFkJCFL/kVb 4dXzH5KyRoQlPnCKXZIJGvfwMqpqi7BD91bNJbkbDOKJy4BbFCM/Yq6e8b5s4LD1QhC9 580VLDXIQC3JM7SysvfE1t9TQV6fIvl9KP03A/hgQrenwJrdACN1WcQyQbvyUuO3BMnG 8iWjEJftgsxhfY+Jc2lyn0F6DkWxjWLp5Lb6grsnQd250YZtQ6uc5CA9HiKjHT4gxUXt G3QQ== X-Gm-Message-State: AC+VfDxmqMwZzxdxtqIYFBbKAAPQfoqaY+8JZf9dypCzsKDtoI8kQVas 1VyGh1b69JUTaMq0ToLa8eRmlStdaYw= X-Google-Smtp-Source: ACHHUZ70piowBk95ZLemtVB1Vi26+1EILCvPmXBgLJUk250uVSD/1GdL3yjH2sJEH/s6dsHyoFuFVg== X-Received: by 2002:a17:902:988f:b0:1b3:c3ca:1513 with SMTP id s15-20020a170902988f00b001b3c3ca1513mr5918941plp.65.1687383860899; Wed, 21 Jun 2023 14:44:20 -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 p5-20020a170902eac500b001b55f00bb9dsm3926780pld.256.2023.06.21.14.44.20 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 21 Jun 2023 14:44:20 -0700 (PDT) Message-ID: <46d452ce-f84e-9701-3e3d-a2fe8afa550b@gmail.com> Date: Wed, 21 Jun 2023 18:44:33 -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> <2ed28b2f-f425-f139-5489-aac02040214b@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:42 PM, Dave Airlie wrote: > On Thu, 22 Jun 2023 at 07:36, James Almer wrote: >> >> 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? > > It doesn't seem to be in vulkan specific code: > > av1dec.c:set_context_with_sequence > int width = seq->max_frame_width_minus_1 + 1; > int height = seq->max_frame_height_minus_1 + 1; > > is where it sets the values later used to allocate the frames. > > Dave. I see a call to ff_set_dimensions() in update_context_with_frame_header() which uses frame header 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".