From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id CD9504D6AC for ; Mon, 29 Dec 2025 20:40:58 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'qHfdnffgfzd2awt9PAWRgEZ6EiCZqBMQSNNEcdgyG2M=', expected b'aV2ggQK/bSwpkgfcX0P7whjG1teAx7764868C1qWlbw=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1767040850; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=qHfdnffgfzd2awt9PAWRgEZ6EiCZqBMQSNNEcdgyG2M=; b=H9Y3SUw9fuA+mAmHPtV5L1lHJjGINsLOj7CfnLwZmO5DL8GQPy/coo3DYF6Y7h0ruc2uW SOyS9xqFe5K8WpwwXddS1293qwRf4MNCYpVgb7G66S5kTPnkUQzmqGXxSrAmrnTUroXrW5J S+XSuDQZ9F/IF6toO4jtchgkTZKHjazryHjSGIDqgxXgGynxRmx7WoN0D5cc9agwyRWhtkM +FbeqNWm72b2Kn5tbOsEd67Ibg5Snl9UnHLT9nb2dwUVzvQ+w6G+ZdXf5dfEsnXbrguirCA ubsmiuZnycvl2tZ4q0aIntDneZIwIfCc7GdlX3O26+F/SYZgBoixtyFcNOIQ== Received: from [172.20.0.4] (unknown [172.20.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 3A64D690C92; Mon, 29 Dec 2025 22:40:50 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1767040837; b=mflcZrhdGgZqH4Cuh52D0Exxd8eQULqR5i+8gELiejKzXzNSGxO0PqdoES1K1fPDdtqyz LLw0f0YAj1QVJiVJr1w85cqwM9aBdiC3Oza4F5AryEuPBkbgpqmWp4cdhYz/5D9N/ccw451 CM5jobqm/zbp0dFxnvrggUJ7o6OsscrvPScoyvEyOPdlaHt6mudvueYOZR+8h9VBuMu8zne Pi6LXXcAUwJQIRfuSz9XpY/JZZ1MO6tsGHSMqCV/DJssA9B6jcD9gJTqLbgFt5nQXgRpx2k tdjbO27Uu4jET3EWea8k6rciWkamakVuhnissdJt1G2GIpcSfYJudnQXIo/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1767040837; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=H3uS6Ho0nwr3gEPBKJUpXRs/mm6QCe60ock/jRwHGZk=; b=iQVPe9KEnUDMJX9gwOLGW+qKLPXWKEqyLWhbY+VLvOHzgEGlc00C2tD/YQ3FYbX1231Gt RQb0WSoQFh8J0Pq7g1mFsIwgLBxkTT5+4XGSm2SVsV+/GJyj91e9FRCFsKsFS1tcpKQvlZw MkeATpdnUpubIoUEPUbQP24xi5q9GEd+yViyGEUhn8655KYbpssHcQPz2tGrbNiRr17L6wU HnWG9WE3Hh6ogI5iVmarxDyShMSp2iCv/3+qxgVoER77W8T+YEZTG+8mGkSxJVYrRdV3WOI JQzFTV5nM6WojcaEXS3nR2KNz/fsmh7RKxwUrQKIMHaj1NU8P4wMinGgUu7Q== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1767040829; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=aV2ggQK/bSwpkgfcX0P7whjG1teAx7764868C1qWlbw=; b=028HfCLTT78sU/Uf6EfDvXiufLaMjmryMuVVz/Gf5Za5rCKMklyzVDSAUJmi4z1a/T5HW Qc+pOSYK/zlfFsy/FQD42dMCkE8yPVCV2fcjv49wQDoCyVba2MbMN6nzN/akWTr3BkLrY73 FWD4YeiCwXzexg63Jltk7CG23gZi5SB3bXtEx0LFrk2gHZK8LNScTAvc/vcOzpWS9/0L/lo cXIgRc4wLIO1jv4r8YVzQ4jJh2javw7+xno6KYt+AnVm5mVqUWvTrxMoKMrSjVA4UehYwcm SEbs2TNIb1L2yjjxL5uzJiMRpvVnaEVcuVXJyvswzKtHdVAC/vgYD07NUMQw== Received: from 55ca25703178 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id E6A95690BFC for ; Mon, 29 Dec 2025 22:40:28 +0200 (EET) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Dec 2025 20:40:28 -0000 Message-ID: <176704082911.25.15000903737930689869@4457048688e7> Message-ID-Hash: ZQBECOCJ2GNQKZ3GFYZ25V4GKPZ6IXDN X-Message-ID-Hash: ZQBECOCJ2GNQKZ3GFYZ25V4GKPZ6IXDN X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] avcodec/av1dec: fix handling of frame size and format changes (PR #21316) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: cgutman via ffmpeg-devel Cc: cgutman Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #21316 opened by cgutman URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21316 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21316.patch `ff_get_format()` must be called to reinitialize the hwaccel when the pixel format or frame size changes. This also fixes a bug where `ff_get_format()` was never called when `AVCodecContext.pix_fmt` was initialized by the user. This PR supersedes #20720 and fixes a regression introduced by 194414f. >>From 87ac3d092472db9676a8075a681194308554fb37 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 29 Dec 2025 14:19:37 -0600 Subject: [PATCH] avcodec/av1dec: fix handling of frame size and format changes ff_get_format() must be called to reinitialize the hwaccel when the pixel format or frame size changes. This also fixes a bug where ff_get_format() was never called when AVCodecContext.pix_fmt was initialized by the user. Signed-off-by: Cameron Gutman --- libavcodec/av1dec.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index 1dffc7c1b9..6b278dc958 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -656,12 +656,6 @@ static int get_pixel_format(AVCodecContext *avctx) *fmtp++ = pix_fmt; *fmtp = AV_PIX_FMT_NONE; - for (int i = 0; pix_fmts[i] != pix_fmt; i++) - if (pix_fmts[i] == avctx->pix_fmt) { - s->pix_fmt = pix_fmt; - return 1; - } - ret = ff_get_format(avctx, pix_fmts); /** @@ -768,6 +762,7 @@ static av_cold int av1_decode_free(AVCodecContext *avctx) static int set_context_with_sequence(AVCodecContext *avctx, const AV1RawSequenceHeader *seq) { + AV1DecContext *s = avctx->priv_data; int width = seq->max_frame_width_minus_1 + 1; int height = seq->max_frame_height_minus_1 + 1; @@ -804,7 +799,9 @@ FF_ENABLE_DEPRECATION_WARNINGS int ret = ff_set_dimensions(avctx, width, height); if (ret < 0) return ret; - } + s->pix_fmt = AV_PIX_FMT_NONE; + } else if (s->pix_fmt != get_sw_pixel_format(avctx, seq)) + s->pix_fmt = AV_PIX_FMT_NONE; if (seq->timing_info_present_flag) avctx->framerate = ff_av1_framerate(1LL + seq->timing_info.num_ticks_per_picture_minus_1, @@ -820,6 +817,7 @@ FF_ENABLE_DEPRECATION_WARNINGS static int update_context_with_frame_header(AVCodecContext *avctx, const AV1RawFrameHeader *header) { + AV1DecContext *s = avctx->priv_data; AVRational aspect_ratio; int width = header->frame_width_minus_1 + 1; int height = header->frame_height_minus_1 + 1; @@ -831,6 +829,7 @@ static int update_context_with_frame_header(AVCodecContext *avctx, ret = ff_set_dimensions(avctx, width, height); if (ret < 0) return ret; + s->pix_fmt = AV_PIX_FMT_NONE; } av_reduce(&aspect_ratio.num, &aspect_ratio.den, @@ -924,12 +923,6 @@ static int av1_frame_alloc(AVCodecContext *avctx, AV1Frame *f) AVFrame *frame; int ret; - ret = update_context_with_frame_header(avctx, header); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Failed to update context with frame header\n"); - return ret; - } - ret = ff_progress_frame_get_buffer(avctx, &f->pf, AV_GET_BUFFER_FLAG_REF); if (ret < 0) goto fail; @@ -1234,6 +1227,12 @@ static int get_current_frame(AVCodecContext *avctx) avctx->skip_frame >= AVDISCARD_ALL) return 0; + ret = update_context_with_frame_header(avctx, s->raw_frame_header); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "Failed to update context with frame header\n"); + return ret; + } + if (s->pix_fmt == AV_PIX_FMT_NONE) { ret = get_pixel_format(avctx); if (ret < 0) { @@ -1317,8 +1316,6 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) s->operating_point_idc = s->raw_seq->operating_point_idc[s->operating_point]; - s->pix_fmt = AV_PIX_FMT_NONE; - if (FF_HW_HAS_CB(avctx, decode_params)) { ret = FF_HW_CALL(avctx, decode_params, AV1_OBU_SEQUENCE_HEADER, s->seq_data_ref->data, s->seq_data_ref->size); -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org