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 AF81C44CA4 for ; Thu, 14 Sep 2023 10:34:28 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BA4DF68C76C; Thu, 14 Sep 2023 13:34:26 +0300 (EEST) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2098.outbound.protection.outlook.com [40.92.90.98]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BD67D68BF84 for ; Thu, 14 Sep 2023 13:34:20 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HTQ/7NbarEG/LbR+0Kr2x34qN4EFGqWEj9yDvSiAFl0tVj3OprrWT1wii7MjEIUwAGEf4VVjDgtspySP+iFhjh/sK2e4Ek7pm6pQEpwq70s8eTyJcL/qZq9P1mRG66D7nQ6o3Mq/+LNUelqHjanyhBq6RQfSBlgkIf7DSV6npOtHf0sD5qrYvCLWdcXOP3R2Ktpht96QZn3xvY0gtRXMrH+F3Kr4f1/2vsQI5ccTKFr8qFSq93E3oGozv6yT23rZEobLVWWmY3ZaBz/ge6JguNaKOr8xjc8/JKhwrU/DhpsNiyZIMrg5F6YF4V0akKyes1ilUwBz3UcISKZOjH0RSg== 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=2RqLkZM5qa1svCLFgFfoIzDEDSTkv312jZp1LmzEaI0=; b=XSd2iem++R5R88zouZK28SSPYUw7G9yfi9d4lytdTTYFzCvGVmHlLxDr5Y6Us796bza9+5UDfOC65dDwSXUZlVwoBgpmfJFGU5mAOXYIJdykYpfM5e9liX3BBJ3HE9PJjt771HnurICEonr1OhtqUioH6eJ0RYs9VJNkKBTrgNsO2qBN3Aauy01xxebgZvGwWUUays2kK4BGo+HBZRH8niWxTDw34ln8KB9iRsfjVtKz+etv9Sk+XNTNLntVPj2cJ558sf8n2fLqwyyqti2rcnPZYGiLMdHRgoKwkh5LkR9nI9fu0gLNnu/xT4r9j+y8CistKkkEo7PUHdqAdlMnUQ== 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=2RqLkZM5qa1svCLFgFfoIzDEDSTkv312jZp1LmzEaI0=; b=N20GSKbuWvLM6wBo1N0lIXoG5Q8vSjqsz17AV11StdaLTd5BJ82Br3q65dTPci+c9oGKjQhT4g1TGIwk9rua85vh5yIqij4Ue+7nwM//9t7PQkf1Rlni2phDVIHjl5Clr9wToCDWmdNbwcddVlL822cECnOlXyej+3+3vSY9PAD8ev/x1NAI8IexkY640qPCxLT9nggZcxCPuf/1NeL+tyKUK4FOcvXPBDgS8/0x9lWpAAB1HzxQ80SoBuXSW6ZOMzom+cNtt3zs90DNmnV68X4scR1xFP5SEyCx1HKN8uiRIMrDLyPBzz6SmtAFD2Bech4GrfejV/b/MQFC5Qqctg== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0364.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:37f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.20; Thu, 14 Sep 2023 10:34:19 +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.6768.029; Thu, 14 Sep 2023 10:34:19 +0000 Message-ID: Date: Thu, 14 Sep 2023 12:35:36 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: From: Andreas Rheinhardt In-Reply-To: X-TMN: [ob6fw9RrU6ID+f27Xi0qKhQ446qnwb8F] X-ClientProxiedBy: FR0P281CA0241.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:af::19) 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_|AS8P250MB0364:EE_ X-MS-Office365-Filtering-Correlation-Id: a7199c68-0704-4faa-dc71-08dbb50e26d7 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Vg0qwugPkgu7ePTiJQdb8zjp1Anc4H4oQg3pmVouJkemlSI0+N/B4eo/9XPwaTeCCOBppiJwBy/PjZXjkBJiamwZAn2sVvHBZhPUsVjtWpW3EcuOuVTd50yLZPbPpwgPKtATHC5jK4h4I5uz3Ipq7JsK+PPttrS3AV0KLhCwmV+GrPiBzS2sXxwcG+kvat+XhWsbcGM0bfA5oUPhSl6CQQa1ttFphv4Yp7QFiqJcdED85ijogmjG8f00IupuInPmIh4Jyh/NBdlJVcC2B4pbePgtuJyo7bUmL66mV/eWqysYXRPlQ3z38570IMHeJxI2yFOgaro9LC9QNxa57pRC0mKYzmfbOMGXyRQEZ3FslPZVJEkjU1tfnRJOSYsuRahZKWsxValS5ErdSK3m+CZ0Bcx1X7t5WRR+Tmazh5kUSQJpwPMwLTE/0K9fsLdc4GqmDm1rNIVYdRooz9udxukZXoT2LxcR+7fgukyw1/A7QuNGx8i4wrdqrhBLsjbV6Lts2QdZRTEhWxq4drMSILTPZ3LjLikXE7FQAtfDFRmqCKw67WidejS7+pdnP8o4Jpn9 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VEt0WGlJVjlHZlc5T1pZeCtVTkoybVJaR3ZtMjczRjlxNnZMTGpHclJKRmhm?= =?utf-8?B?MTVROG9vS0RSWUxXQ1VIT2o3ekZjS2FDLzd0TGxha2lSUjBnSlVHVXFFbGRm?= =?utf-8?B?SzZpcHZzWVROOGxHelVFenpubkdzUjlhc1FuZ1hnZ1U3TnJiZmhDMit1aXA2?= =?utf-8?B?Z2FZVC82OVFIYlZyell1akpSaEJoaVRDNmswMGwrUk8xOUJoWTduK09CblBl?= =?utf-8?B?UmtselV1dmtDU3lyRXlqYU5VVVZBUmIwODJxRmRiV0tZZHA0L0JXbHduUmRT?= =?utf-8?B?NTk0Z05uR3hZM1RiR0tVR3ZsM0ZFOTA0MEpCMjNVWWh0T3ZLNTZRbmhvT25U?= =?utf-8?B?dkMraU9vbnlWd2dCMFAvMlpYYmduSk1LU2Z3TjNEVGs2Q0FXdjB4SnFZZnAw?= =?utf-8?B?WmN6M1hTRmVDbXRlcC9QYndhanpuakZndTBXYTIxTEFTbVF6bDhLM3czVCth?= =?utf-8?B?ZjJxZXdyZFd5WFR3R0YvYlZxWWVnSnFnK05sblRiYXNwLzg3UldaTDFZM3B0?= =?utf-8?B?eUZWYTRsdlJWL2lVM240a3RKMmZwY2lOTElWY09ERTEveDBXeW5Rd2hUMXBP?= =?utf-8?B?eGJ0MW9QclAwbTBaQ2o5VlRMeDlqMDRIbGJhZ2s3RWM2bWg2dGhTSjZSL2xH?= =?utf-8?B?U3MrMDl4ZjNjZ1Z2eEQvcEhlZW1XazVwTDd2Vk55TlMwckVLYWlqYVBYRzJh?= =?utf-8?B?M0xuQXA0V29KZG5VZ0QvaDNKNVkyd0IvZkJLSXpGcmxpenVUVWRMczVTVEU5?= =?utf-8?B?YmoyNWFCRG5VeldYUjRRY0pHY01SdEZYSEVNZW5Yb0JYWHJMTlBLSDI4VjNO?= =?utf-8?B?ZjduVGMxczBPTTdOMTFrejRsRmpla2pEODRWU252dmNFMG85RVZFYkIxV1JP?= =?utf-8?B?N0ZJMkRTSmJHYUNNNU5lRHZiSE50bisrU29xa3hscFNVN24wSUYxdzQ2MXZE?= =?utf-8?B?cUl4V3lrZ2RCbEVGb29jRTNUMHRkMlg1Q2dPb29LUG8vQjRtYnQ3TzRJWG8z?= =?utf-8?B?VG80Skp3eUZ5WHpYb2ZlZTh0bHBXdmhWV0pBVkRjZ2xwTldiRzNPbWgzdVpZ?= =?utf-8?B?bUJnSTJSUUhINnc2Tkk1ZXc4QUoxQ3N6K2FIQmFQMGpRbnhDNC9FMEFhMmZk?= =?utf-8?B?dlozb2MxSWVDZVlsOXVjZUtvS0M5ZktZckdwZnoyOFFNVW1lbXRSUU96SEFI?= =?utf-8?B?NVhxc1UrVURDekpEbDduTEZaVGgyNnVtSTRHU1V0K1AvZktITmV4MVpGbVox?= =?utf-8?B?R3lBSklYK05xV2orSlZLbnpMQ2ZEZnliMkxpSlNsVkU0Q2FabE96WXhaZE11?= =?utf-8?B?Vy8rWDJsQ0NaU25hSUwzd2lOYUZNMnJScjdFNFFaQjhWVXFObEF0UnNJNWlS?= =?utf-8?B?Wlo2RjViRHhYK3B1TlhLTlBiQWlaQnc1Q1BlQ2Jia2dXRWVoL0dQeXpoOVBH?= =?utf-8?B?Q1o1SGl4ZEM0aWFHcGVoWDkwcjlqeTN3VzNHNmI0eDJqNFZ0T0M0Q0dxeTR0?= =?utf-8?B?eVZwQy9CMVZUVG1HWEsvSXRsbGVDMnROeDV3ZzF5RWttSU5oS2ZhWkc2MS9D?= =?utf-8?B?SW80OHRGVXVvS0s0RExBT1lJdE1sWkRRdndOcXhRZ2tUVUdmNHM2Z0JWQlNo?= =?utf-8?B?VG9iQ0hYeUNpeGp3L0tVelB3MUhjK0NjZkFFVUwyME5iQVRBUjRZREhVbTFC?= =?utf-8?Q?vfVnc8bx5tS7QJkHyGyz?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a7199c68-0704-4faa-dc71-08dbb50e26d7 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Sep 2023 10:34:19.1186 (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: AS8P250MB0364 Subject: Re: [FFmpeg-devel] [PATCH 1/2] avcodec/error_resilience: Make applying decode_error_flags optional 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: > Add a pointer parameter that if supplied will be used to return > the updated decode_error_flags. This will allow to fix several > races when using frame-threading; these resulted from AVFrame > that the earlier code updated concurrently being used as source > in an av_frame_ref() call in the decoder's update_thread_context. > > Signed-off-by: Andreas Rheinhardt > --- > libavcodec/error_resilience.c | 7 +++++-- > libavcodec/error_resilience.h | 12 +++++++++++- > libavcodec/h263dec.c | 2 +- > libavcodec/h264dec.c | 2 +- > libavcodec/mpeg12dec.c | 2 +- > libavcodec/mss2.c | 2 +- > libavcodec/rv10.c | 4 ++-- > libavcodec/rv34.c | 6 +++--- > libavcodec/vc1dec.c | 2 +- > 9 files changed, 26 insertions(+), 13 deletions(-) > > diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c > index 68e20925e0..880aea6f30 100644 > --- a/libavcodec/error_resilience.c > +++ b/libavcodec/error_resilience.c > @@ -889,7 +889,7 @@ void ff_er_add_slice(ERContext *s, int startx, int starty, > } > } > > -void ff_er_frame_end(ERContext *s) > +void ff_er_frame_end(ERContext *s, int *decode_error_flags) > { > int *linesize = NULL; > int i, mb_x, mb_y, error, error_type, dc_error, mv_error, ac_error; > @@ -1114,7 +1114,10 @@ void ff_er_frame_end(ERContext *s) > av_log(s->avctx, AV_LOG_INFO, "concealing %d DC, %d AC, %d MV errors in %c frame\n", > dc_error, ac_error, mv_error, av_get_picture_type_char(s->cur_pic.f->pict_type)); > > - s->cur_pic.f->decode_error_flags |= FF_DECODE_ERROR_CONCEALMENT_ACTIVE; > + if (decode_error_flags) > + *decode_error_flags |= FF_DECODE_ERROR_CONCEALMENT_ACTIVE; > + else > + s->cur_pic.f->decode_error_flags |= FF_DECODE_ERROR_CONCEALMENT_ACTIVE; > > is_intra_likely = is_intra_more_likely(s); > > diff --git a/libavcodec/error_resilience.h b/libavcodec/error_resilience.h > index 47cc8a4fc6..b03f8ec896 100644 > --- a/libavcodec/error_resilience.h > +++ b/libavcodec/error_resilience.h > @@ -90,7 +90,17 @@ typedef struct ERContext { > } ERContext; > > void ff_er_frame_start(ERContext *s); > -void ff_er_frame_end(ERContext *s); > + > +/** > + * Indicate that a frame has finished decoding and perform error concealment > + * in case it has been enabled and is necessary and supported. > + * > + * @param s ERContext in use > + * @param decode_error_flags pointer where updated decode_error_flags are written > + * if supplied; if not, the new flags are directly > + * applied to the AVFrame whose errors are concealed > + */ > +void ff_er_frame_end(ERContext *s, int *decode_error_flags); > void ff_er_add_slice(ERContext *s, int startx, int starty, int endx, int endy, > int status); > > diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c > index 52e51dd489..9f63f1a7cb 100644 > --- a/libavcodec/h263dec.c > +++ b/libavcodec/h263dec.c > @@ -622,7 +622,7 @@ retry: > av_assert1(s->bitstream_buffer_size == 0); > frame_end: > if (!s->studio_profile) > - ff_er_frame_end(&s->er); > + ff_er_frame_end(&s->er, NULL); > > if (avctx->hwaccel) { > ret = FF_HW_SIMPLE_CALL(avctx, end_frame); > diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c > index f13b1081fc..8e90678125 100644 > --- a/libavcodec/h264dec.c > +++ b/libavcodec/h264dec.c > @@ -779,7 +779,7 @@ end: > if (sl->ref_count[1]) > ff_h264_set_erpic(&h->er.next_pic, sl->ref_list[1][0].parent); > > - ff_er_frame_end(&h->er); > + ff_er_frame_end(&h->er, NULL); > if (use_last_pic) > memset(&sl->ref_list[0][0], 0, sizeof(sl->ref_list[0][0])); > } > diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c > index 1accd07e9e..4b5341b914 100644 > --- a/libavcodec/mpeg12dec.c > +++ b/libavcodec/mpeg12dec.c > @@ -2033,7 +2033,7 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict) > if (/* s->mb_y << field_pic == s->mb_height && */ !s->first_field && !s1->first_slice) { > /* end of image */ > > - ff_er_frame_end(&s->er); > + ff_er_frame_end(&s->er, NULL); > > ff_mpv_frame_end(s); > > diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c > index 70aa56cb84..2237cc8bb1 100644 > --- a/libavcodec/mss2.c > +++ b/libavcodec/mss2.c > @@ -422,7 +422,7 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, > ff_vc1_decode_blocks(v); > > if (v->end_mb_x == s->mb_width && s->end_mb_y == s->mb_height) { > - ff_er_frame_end(&s->er); > + ff_er_frame_end(&s->er, NULL); > } else { > av_log(v->s.avctx, AV_LOG_WARNING, > "disabling error correction due to block count mismatch %dx%d != %dx%d\n", > diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c > index 5edd934f82..6abceade4e 100644 > --- a/libavcodec/rv10.c > +++ b/libavcodec/rv10.c > @@ -477,7 +477,7 @@ static int rv10_decode_packet(AVCodecContext *avctx, const uint8_t *buf, > if ((s->mb_x == 0 && s->mb_y == 0) || !s->current_picture_ptr) { > // FIXME write parser so we always have complete frames? > if (s->current_picture_ptr) { > - ff_er_frame_end(&s->er); > + ff_er_frame_end(&s->er, NULL); > ff_mpv_frame_end(s); > s->mb_x = s->mb_y = s->resync_mb_x = s->resync_mb_y = 0; > } > @@ -649,7 +649,7 @@ static int rv10_decode_frame(AVCodecContext *avctx, AVFrame *pict, > } > > if (s->current_picture_ptr && s->mb_y >= s->mb_height) { > - ff_er_frame_end(&s->er); > + ff_er_frame_end(&s->er, NULL); > ff_mpv_frame_end(s); > > if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) { > diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c > index af4d6a3400..e9660bb457 100644 > --- a/libavcodec/rv34.c > +++ b/libavcodec/rv34.c > @@ -1560,7 +1560,7 @@ static int finish_frame(AVCodecContext *avctx, AVFrame *pict) > MpegEncContext *s = &r->s; > int got_picture = 0, ret; > > - ff_er_frame_end(&s->er); > + ff_er_frame_end(&s->er, NULL); > ff_mpv_frame_end(s); > s->mb_num_left = 0; > > @@ -1655,7 +1655,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx, AVFrame *pict, > av_log(avctx, AV_LOG_ERROR, "New frame but still %d MB left.\n", > s->mb_num_left); > if (!s->context_reinit) > - ff_er_frame_end(&s->er); > + ff_er_frame_end(&s->er, NULL); > ff_mpv_frame_end(s); > } > > @@ -1790,7 +1790,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx, AVFrame *pict, > av_log(avctx, AV_LOG_INFO, "marking unfished frame as finished\n"); > /* always mark the current frame as finished, frame-mt supports > * only complete frames */ > - ff_er_frame_end(&s->er); > + ff_er_frame_end(&s->er, NULL); > ff_mpv_frame_end(s); > s->mb_num_left = 0; > ff_thread_report_progress(&s->current_picture_ptr->tf, INT_MAX, 0); > diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c > index b8663aaf98..449d2fea5e 100644 > --- a/libavcodec/vc1dec.c > +++ b/libavcodec/vc1dec.c > @@ -1348,7 +1348,7 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, > if ( !v->field_mode > && avctx->codec_id != AV_CODEC_ID_WMV3IMAGE > && avctx->codec_id != AV_CODEC_ID_VC1IMAGE) > - ff_er_frame_end(&s->er); > + ff_er_frame_end(&s->er, NULL); > } > > ff_mpv_frame_end(s); Will apply this patchset 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".