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 7835D46804 for ; Tue, 19 Sep 2023 15:30:22 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B356768C8C1; Tue, 19 Sep 2023 18:30:20 +0300 (EEST) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2010.outbound.protection.outlook.com [40.92.91.10]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 543A068C378 for ; Tue, 19 Sep 2023 18:30:14 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Sy6VJUtxH1nePnnKURinRB/mZOVHcMzoPitgUjQGMOFQ9zrVtb/klONBVr4dVFupqxRtVCxSCX0TQokoW/Jd4/L/RicDL0/tIWHBFYJC/lrQuqVpvO5HNtfmdJuBb41inuv1x2XX/E6JTLJNnQuixaItea7WzAczU1uRNZlw+NHVXLc5QR3U/cA2Oz+ncv2aMc9gN5gh3VTu5dfv4cF+AEtBPid7b3PFKN8s4rePbqLWYNfKqo9SeM/bI9cgX0AnOrGE8HMhZjmE/3zVyTOlcSr5a9n5DgmsZhy7dHcGdUKJ6ecr4xtERlmioVzqgtYSVJybTs2EX/48rWNePFT+yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fWFD4EIBwEPbU5cpw80B19h0+eGZJtvuonYahsnTDqk=; b=YGCXzv89jFcBME9rjxdt/IHD+6sVHwEAQfhVfV99Wycdhp+QiJjXA4CrxYV7HkLQ4hVudHYiUVCaDZNfjB34RAIH/oaBkISJ1Md2nZmOiBaCd7xNsbaW5T0kZgna2QSGB0CtMME35mfiCQJE/EWTRsBYaNY/UgYMPg4cnEJ9Rs9ICyHsf+XNZrk/qB4/jeBMvjPEQKEmoJKH4sgCr+lLCDoupBFUJtkLOSRI8jJH71TngdYwUfL0l9DAn8atZpEHpW9u46nPQmcuPV+OIQ7hLX+gC3+XcJVF+PxsebgYsnl7ABKHsI6//MhMd68VPx69yJuXZyJ8icnw2ygUoGXl4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fWFD4EIBwEPbU5cpw80B19h0+eGZJtvuonYahsnTDqk=; b=TaaUE0JLoJAt2uUGLr94IhMe+QCzTbZiTgCSbcm+rQRoX1zidnNClEc76OOzORyvjZ3Yw+8kLdJQUQN5lpoAwBaU9XGwHd0S0aAs5mZLFGRULIO6Qdl1/xWNUtcmO1dT+bPwSciDdYj/QupmwxBNWeZqEFB9NbYlD0f+Y2lw9KxUPaaSqk7z1woAQPucSdPoH8lFFZ/ELRSKl14SFF6RxL2qGTyWNkk3oGWz8L5VLK18DoTwNIJUXVdpOiF94LMhzWT0Sz6W4oNlxkeP99XdCSHrHMPCsh17FCzYRacawgOuTJZHHFaktjYXvFzFX59jbrKktJjPk2SkoEnlN3ulxg== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0211.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:17a::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.26; Tue, 19 Sep 2023 15:30:12 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6792.026; Tue, 19 Sep 2023 15:30:12 +0000 Message-ID: Date: Tue, 19 Sep 2023 17:31:26 +0200 To: ffmpeg-devel@ffmpeg.org References: Content-Language: en-US From: Andreas Rheinhardt In-Reply-To: X-TMN: [CILO/Av9WUn+iVGQxKxjK5iifnG8igUb] X-ClientProxiedBy: ZR0P278CA0177.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:45::11) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|PR3P250MB0211:EE_ X-MS-Office365-Filtering-Correlation-Id: 9fc4495b-108b-439a-8e26-08dbb92550f3 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VGe56vI+HJcUxNeAJ21SEJFmf/tjCwtFPMQGgql9OpXhNjDZpItZPdXsdTsuLM27Ld80zucxPbCITLGWGQrL7QAMe0anz5rEA7OdjUBuJKF/D4m6lkz/9OPiFw+qXPyJ2W8AsPj3C8UYRQvwep5ErgeDDvVeZ6OHs5MOG0F57hSzQJjvQYpYJHuH5bmtGdEKNJvBoGm9a/roBVjxOeKO5qv8x7vm1lwqjxlNQVUPyouiwC+/c1UPnZTTXuHybvdcAoys99GQx6kGZ9ToWd36KqJ104l7SC2j+8AgXlbDIq938R9KTrK1mM9FYAhB1p5Xuwef0JDD8D7WNvVSJQZVKCwecMo75SrDfVbXzIbhxP6MCC2CqLvuodONXueY8qRiIFEFPuz1PRK9aOX7qDwmGbW2/USwqGikSha2SosSru9GOiBSXIf3fR80oRmzTiD6o0vPJlrVOKMJZ9dykHKLCtEE6pPRr4ELkHimOZZMKHDNUWn0Sdvwlehgxt72sYyY71ycVuo+5zCo6FZp2A2G0pn66CdJ/B8G40USlsugfhmeWVRZHoJBm45bEHFHIQs3 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RFBlVkNpTllubmlFYzl4ajFIQm5ZNlNLSnpid0lXSVVndU9ObElJSWtIRU5x?= =?utf-8?B?T3lXbnZvVDV0UFlWUkFLaWRTTTV3dHEwdHFuZ0g5VHpRL3RWYWZYcmQ5OHFW?= =?utf-8?B?Z1k3MXBuRENHNlJ4OG9oWWQyM1NORmllYTFHYnJJN2drdS9LaWVEaUxab1JB?= =?utf-8?B?UkNmUUlHb3FBTjdVdUk0MVlOVzR1aWtMaS8rS3EvTGZzRG9JRTI1b3NpRnNN?= =?utf-8?B?MzhWNERKVkRXZkQ4dExRVisrZlcxN015REhiemdXcEVicXg2VSt3RUFTZFg5?= =?utf-8?B?dEpvaklPNnpxOWsxLzlpTTRXTk05U3o5My92TUtNQ0k4cTNxdjJadytDVG0z?= =?utf-8?B?aXNNYXB3K3IvSnFGK2U4cldidUhqQ1kzUkQyZlZnNnNRR1lsZFNlZ0c1UnIy?= =?utf-8?B?L2RZdHlMOXRKSEZtZHAxdWlVTnhxRW44VEpJUXFvaEpUVGFreVJsOEZEMDFT?= =?utf-8?B?M3IvbTBkNjhiVzk2MGs1U3lkajlzQk0vejJmZ3pHb2g2a0RQWWl6aXZTQTVJ?= =?utf-8?B?Z2h5QmNrRHdvUlNwajQ1TFJEeGt0cEdyRWhnMGJ6dEViN3lZSHFEOGFjWFZH?= =?utf-8?B?cXA4ODdVc1Y2cFk2RWpaM01wWHFEZzFVeCtEVElseUsyL1hVaFpqM3hVamNr?= =?utf-8?B?NWNWSHJGRTRmSUlsbTVyUDcyTVI3bm1wV25vRFhxTHZJTCtjeXZyc0xXRVAy?= =?utf-8?B?Rk03M1AvQjZEbFF1YTkwN0RtVVBhYlhndU4xR2FyVWJONzlyQkk0bGZ2OUNi?= =?utf-8?B?eGJiV0YvaGptVHNqWnpzNXF4NEQ4UG11Z0s3WFdsN0cyMnlkZU1aMnBYRmNn?= =?utf-8?B?TDlSc2NFb3JBWTNJZkdMS3ZGT0FXOVpsdHo1TEtvTnRoVGdFQVhERWg2UTQr?= =?utf-8?B?dzJVWGFVSWtYaGZ3YVhwbXJjZUJ1N2hrZThiN2szS3R6RndNNmVPc1JReTlR?= =?utf-8?B?SW5acEpJMldZM2lmbmZzekhncWJSN3RPMWVIeEJuYkVNWHVxdFJIV0N5b24y?= =?utf-8?B?SjZlbEpqMTFvcEEvajUrVDhuc2hXczBVSnV6YS8zQzBrN1FpdDg5cmQzK1lK?= =?utf-8?B?RW03SE9yRVZpd3BFSkxnSzdlbVN3OTJUVlhkM2VuK29mdTNPbENzbDEwYVVz?= =?utf-8?B?TTdPeGU5Nm9CYjF5bU1ES0paTnYzZ21OaGRZdG01Z3VsSmpxdk1FWnU3WnJ0?= =?utf-8?B?SXdoaExOUmtYZUNhbmhEVHdwQjZOc09naTRRRVl5K3YrNzlPeFI3UmdpWWdU?= =?utf-8?B?N2xyY29oV3Z6L3ZlS1c1Q0ZYeXQra2xzNHgrVzhCQ1ZxNFpZV2NndjlhTnQ5?= =?utf-8?B?c3VKQlJPRmQ3QlE3YlNmNW9IOElBMktiL0ZJV2gzamNjeS9wUEpTSXo5d3k3?= =?utf-8?B?S3E0dHg1ZERxYVc3SGpScUsyaUZFU084TzhxQjRmbWFCVFc1YTZqbUpqd09t?= =?utf-8?B?SHhvc2FFSm40S1ErYmx2dVBkK0FNaHprUXgrYUZQSERqR3NSRTVnMlBrM0d5?= =?utf-8?B?d1lReEVKVE81bVU0RGJjVDVZVXJad3dGWEN6OUVVMVQxTVl0UUNOM1hXeEw4?= =?utf-8?B?U0lTRzhQeFNEeUUwdlk5amkrdjRpd3dSdm15d1NoQVNRZEF3NW1CSmRKdncy?= =?utf-8?B?S1hoY2xuZFpyd05GMi9kUzRsRUZuYjFCOXZxSWFRVWthNTVNcXdEU0NXVS9r?= =?utf-8?Q?czN2ryyw2icbhtyjt55W?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9fc4495b-108b-439a-8e26-08dbb92550f3 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2023 15:30:12.8760 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3P250MB0211 Subject: Re: [FFmpeg-devel] [PATCH 1/2] avcodec/hevcdec: Check early whether film grain is supported, fix race 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: Andreas Rheinhardt: > Applying film grain happens after ff_thread_finish_setup(), > so the parameters synced in hevc_update_thread_context() must not > be modified. But this is exactly what happens in case applying > film grain fails. (The likely result is that in case of frame threading > an uninitialized frame is output.) > > Given that it is actually very easy to know in advance whether > ff_h274_apply_film_grain() supports a given set of parameters, > one can check for this before ff_thread_finish_setup() > and avoid allocating an unused buffer lateron. > > Signed-off-by: Andreas Rheinhardt > --- > libavcodec/h274.h | 15 +++++++++++++++ > libavcodec/hevcdec.c | 19 ++++++++++++------- > libavcodec/hevcdec.h | 2 ++ > 3 files changed, 29 insertions(+), 7 deletions(-) > > diff --git a/libavcodec/h274.h b/libavcodec/h274.h > index 920f6991fb..27a07e4a91 100644 > --- a/libavcodec/h274.h > +++ b/libavcodec/h274.h > @@ -40,11 +40,26 @@ typedef struct H274FilmGrainDatabase { > int16_t slice_tmp[64][64]; > } H274FilmGrainDatabase; > > +/** > + * Check whether ff_h274_apply_film_grain() supports the given parameter combination. > + * > + * @param model_id model_id from AVFilmGrainParams to be supplied > + * @param pix_fmt pixel format of the frames to be supplied > + */ > +static inline int ff_h274_film_grain_params_supported(int model_id, enum AVPixelFormat pix_fmt) > +{ > + return model_id == 1 && pix_fmt == AV_PIX_FMT_YUV420P; > +} > + > // Synthesizes film grain on top of `in` and stores the result to `out`. `out` > // must already have been allocated and set to the same size and format as > // `in`. > // > // Returns a negative error code on error, such as invalid params. > +// If ff_h274_film_grain_params_supported() indicated that the parameters > +// are supported, no error will be returned if the arguments given to > +// ff_h274_film_grain_params_supported() coincide with actual values > +// from the frames and params. > int ff_h274_apply_film_grain(AVFrame *out, const AVFrame *in, > H274FilmGrainDatabase *db, > const AVFilmGrainParams *params); > diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c > index 81b9c5e089..2be62ddfb2 100644 > --- a/libavcodec/hevcdec.c > +++ b/libavcodec/hevcdec.c > @@ -2884,6 +2884,14 @@ static int hevc_frame_start(HEVCContext *s) > !(s->avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && > !s->avctx->hwaccel; > > + if (s->ref->needs_fg && > + !ff_h274_film_grain_params_supported(s->sei.common.film_grain_characteristics.model_id, > + s->ref->frame->format)) { > + av_log_once(s->avctx, AV_LOG_WARNING, AV_LOG_DEBUG, &s->film_grain_warning_shown, > + "Unsupported film grain parameters. Ignoring film grain.\n"); > + s->ref->needs_fg = 0; > + } > + > if (s->ref->needs_fg) { > s->ref->frame_grain->format = s->ref->frame->format; > s->ref->frame_grain->width = s->ref->frame->width; > @@ -2922,19 +2930,14 @@ static int hevc_frame_end(HEVCContext *s) > { > HEVCFrame *out = s->ref; > const AVFrameSideData *sd; > - int ret; > + av_unused int ret; > > if (out->needs_fg) { > sd = av_frame_get_side_data(out->frame, AV_FRAME_DATA_FILM_GRAIN_PARAMS); > av_assert0(out->frame_grain->buf[0] && sd); > ret = ff_h274_apply_film_grain(out->frame_grain, out->frame, &s->h274db, > (AVFilmGrainParams *) sd->data); > - > - if (ret < 0) { > - av_log(s->avctx, AV_LOG_WARNING, "Failed synthesizing film " > - "grain, ignoring: %s\n", av_err2str(ret)); > - out->needs_fg = 0; > - } > + av_assert1(ret >= 0); > } > > return 0; > @@ -3574,6 +3577,8 @@ static int hevc_update_thread_context(AVCodecContext *dst, > s->threads_number = s0->threads_number; > s->threads_type = s0->threads_type; > > + s->film_grain_warning_shown = s0->film_grain_warning_shown; > + > if (s0->eos) { > s->seq_decode = (s->seq_decode + 1) & HEVC_SEQUENCE_COUNTER_MASK; > s->max_ra = INT_MAX; > diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h > index 94609e4699..9b232df68c 100644 > --- a/libavcodec/hevcdec.h > +++ b/libavcodec/hevcdec.h > @@ -596,6 +596,8 @@ typedef struct HEVCContext { > int nal_length_size; ///< Number of bytes used for nal length (1, 2 or 4) > int nuh_layer_id; > > + int film_grain_warning_shown; > + > AVBufferRef *rpu_buf; ///< 0 or 1 Dolby Vision RPUs. > DOVIContext dovi_ctx; ///< Dolby Vision decoding context > } HEVCContext; Will apply the HEVC patch tomorrow unless there are objections. - Andreas _______________________________________________ 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".