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 D139B465B5 for ; Wed, 21 Jun 2023 21:42:41 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BA33B68C077; Thu, 22 Jun 2023 00:42:39 +0300 (EEST) Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 822EC68BF4C for ; Thu, 22 Jun 2023 00:42:33 +0300 (EEST) Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-978863fb00fso966046666b.3 for ; Wed, 21 Jun 2023 14:42:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687383752; x=1689975752; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=9FhtgTmiSSilRH9JU12k9rWNngdIVHLbuSOVOCZppOo=; b=n7BYV7tShp/3hW1/IdYV8JUMxSAmwp+VyC11oY7FVN+rPvNm5xks3PflTY7EjlVjhR vQQDER5af9SaKClC9CZ1KwAyIARDlCgpzEUyRTad/2VhFho3Mi6KkzwmzeZv2Lk4nr1a ghzNT4rjk4T0f0/rPyufpcn2WJs0MzIaP7TuaLT75j8tzPX/LwsaqP+txSGc/nU7LpA+ XJFo3WOt721v+gisitIJEhNj4CErP1sEpa+4CE0T60s1c2pnrEEfQbIuA8nOe1PRJLUp JPjE64PpiyMT1+7VcewQEbC6aby14hgHBE5wkRYRlCPZ3s6yaBXp/NACRmSExGJiRdpy ePHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687383752; x=1689975752; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9FhtgTmiSSilRH9JU12k9rWNngdIVHLbuSOVOCZppOo=; b=VowYk50X+/xF4YWzb7V/hBr6lt8eqCgRUUp77aCfJR94TbFot2Dp9FBuz2Nr7PBgNP qtk0yxtaR5u7np1ZEvcJGqO14H8iylLdfMBSGViIRRGCokdwHbb2L2CFwXYL4/aaTpaV h1c1gu65ZvRET5glQItTFjO8FFeiWFK3gvJeZWsL0NpAQI4Nt/pYEgJtQnrkWC8DOY/D iIP31pDhnwJ2g4iAsSWG+yrz16UF9yYKjE2/tWLle0Oy47Vb0zUAo79RANNy826afl47 xrfQb3BAg8bdkuxgH2Ek7ArMuOorhKOSHTdTsskVIZJpQSMXJ5hXFjICUb/KhUHhi0S1 Oskw== X-Gm-Message-State: AC+VfDwkgaOlh9nAp3+lAYiov4PvhEAF7Zm7B8iRxOnex3RwL4GxEoPX jzy+o+YmG81e2i5WSOmQ413GcdJEPhhm3Zz9+PfQzM0u+vxmSw== X-Google-Smtp-Source: ACHHUZ7BxtaaVGMy/SGjEKJmW6hUIzE+2bZA9uZHF0hisp617bd8Zq9yvQ6Ob/zEfEC6BdUZJM7kdp2IWOTYqTqM0XA= X-Received: by 2002:a17:907:724a:b0:987:16f5:692f with SMTP id ds10-20020a170907724a00b0098716f5692fmr12407704ejc.44.1687383751988; Wed, 21 Jun 2023 14:42:31 -0700 (PDT) MIME-Version: 1.0 References: <20230620233601.1876939-1-airlied@gmail.com> <4d9f0d83-db4c-b0ea-cc9a-e3154c402a6e@gmail.com> <2ed28b2f-f425-f139-5489-aac02040214b@gmail.com> In-Reply-To: <2ed28b2f-f425-f139-5489-aac02040214b@gmail.com> From: Dave Airlie Date: Thu, 22 Jun 2023 07:42:19 +1000 Message-ID: To: FFmpeg development discussions and patches 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-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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. _______________________________________________ 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".