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 4C99843C8A for ; Sun, 28 Aug 2022 21:21:32 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E043168BA56; Mon, 29 Aug 2022 00:20:33 +0300 (EEST) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2094.outbound.protection.outlook.com [40.92.91.94]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9B77668B9DB for ; Mon, 29 Aug 2022 00:20:27 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Lw/tVWlyhINu7KEd1lUyP2bwt1/0g+Q63uy2Ff3N3PKVnfgjxF8CPEetwFuiDcs+vZK8FH8AfYXxwzd0HM+pjJslRfrvYCVexBaUCzwrWK8ohUlE0pwc9VQ80lVWYjkqft9pi8cPbSNwBjoywqMRnDf94nqHMPzPaxoESm/PODFiu1w2gVEC7XFUBfmOxT2VjCcsDyLirZP/+lQMxp2Xem22eurvj31w4B1H6Pfl6ES/lpae9En2sgWr54G1jQLcVOGXliKkcy7xhEYMH+l8nF3uZ5dVZ8pLySxyiLi0NVwGd9niII/rgT83UvylDU31WEu9MQEoPCZypOuj2Y/Gpw== 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=pZmMOcyD/b+wIlwPics7dGB5Dnh6EsjtamumpTX2mKw=; b=UvJ/YTf3mcF/qwISSqkxEJyN+oyb40M2KXwUNivhruPorxv04Titgglz/UiIiSsXaNozqccp5zohspTTlQqPPziuf05Eilu4binQXcYlyEuQ/bjS683PCLeDhWytrJzIw0QoixAnzbzNnF6ArpUK/HKXqNj87NQPWhPxW6+trsvnDA/GhLzxdoQhBMnEbJ+KYeJYH0WDM7IvzcEthXyIXUFust2YIqkcZywDfQXWEMdMoIiZXc1F9XmZxFaGhO8a3r1w/i3be5tVh7Nv5hwp+FRUucFraZXFqNwke1ltAB/lyAPEyGM9a4Me/0P8h/3hRN5ZsNp0ia7mv2plMhc2nQ== 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=pZmMOcyD/b+wIlwPics7dGB5Dnh6EsjtamumpTX2mKw=; b=mB3FbzeWlHd/j81yMA6TqivWGMTYIUY43rf6/OZIzILAeFV2glZ9bkbkR7xHLMNzHHVCVn/Rlpl9P9MwWxNo9/GXAHMF6PAyG/pfG8XmtD2MnX+Hh18NVkjy/+UhrXtDkgLOMwu/5+UMwock75Hy4TGtGu5/eA/O5pLFmyHwgjwRXPntgfkbdyWe+jxe8D+8hrjZACwhxjcICOW+f93fR6LuNBr+v1l4zeELiuvOdOlumX6rhTJesTtk+pEuPPDdBlW1S8xZSEk1+QqqyI/4xe+IKgrGiYmPZ3Ak753UgUsJ18hc5k7cJsf+VrgNi063rVo6AHSUspRgH1R98ED+VA== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DU0P250MB0747.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:3cb::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5566.15; Sun, 28 Aug 2022 21:20:22 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::7d2a:d9d8:f384:4cee]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::7d2a:d9d8:f384:4cee%9]) with mapi id 15.20.5566.021; Sun, 28 Aug 2022 21:20:22 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 28 Aug 2022 23:19:57 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [+Ck/VJ2supqicn33rioPwwPFEZkEKN3g] X-ClientProxiedBy: AS9PR06CA0114.eurprd06.prod.outlook.com (2603:10a6:20b:465::12) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20220828211957.472263-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d88b29bd-a202-45b0-48cf-08da893b1dd3 X-MS-Exchange-SLBlob-MailProps: EgT5Wr3QDKySlSM5rOKlGk6W0etq9ZOJYWRUJ7cq1GG645JYuETmTHKTgMXCXr+Uv1lmqIGUMpbyuTUEPAuMolgJkbRuvjRTRwtkuRcYPmynRVofFPUm6y8jh17jq/cFFt8Dc7NE2yK+9AKstFpS1CHLG8mLFUtalZrNNJcX3MFKA0ga4PQWnikLFK3Sh1+MFREKy3L2WNfyOPUdC1iWWmcrZFXCn7QIqqOc5q/yE2UKFCToXacQ8r5/uDG7XCyPvSaGQDiw9XVE+R9y9qotnOyh6GiOKBZSymlSrX7eGpKY2KfX5D5d5J13E1M1z/pldkwG1f8I17qhJ705GV8FQAMVe0Yfp0Rt+4ZBRZdrJgPHHwoSjywFMAR2JSAtVqDQFUXuGx7x1fD3BY6PAwnUfz+lBBYsfU2TwMiPoHjk++juuNv5ubYrWBd72cymEpdw6o/gXQ2EirYUoA6nCaTRJ7UstwnXN+uxlt5C9TkBTbfBqjYL0RVs+w8XxzIZi84qAyPGOYZWEWxKjI002H6gElsBJXc3P9FKHi4IEmf4CruM0yrk38iMQxSa4mo0OKfitpZybsTL4NUAR+fA3Ick+3cwvYthU0G2QsXDW6MRHK3s9C70aedmCG2NUnFXj0AdU7BQPA+tkRxO95abtOu4myBlaJEScKm5YrmYGM8HmOTMsh6/kamb/y6Bfr11c1IU0O4HYL9+Zx2axQcrs0psuCVWaYVZR5w4RJNuXJU8R0U= X-MS-TrafficTypeDiagnostic: DU0P250MB0747:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: p7okKz2VdCNjDKRcHx4wblwrjagKG/VLRlNmcAfxLBqfXEr9121U6MCobIGAYYu8k/IdvhPJRF7clkMu3P85Q8+oqOfhoJawvTYiHA7YsAtRvph2Fk4TxpGdRlDtKtWz2uCbfAP4kOOvDkkkHzF6lWyZlvhahod7KoE4P607zmJ9l1kEE+RJZypEZxbQBQRsPCpS4bpxSCd08PdCTqdJhO25qmzEPdd82rzuQnnD0yLCOc69M4D3rmwLw9KVX1RlHk0QrFgYI4gtyCMh6iayZk9KC4R8szt72jn4wGAsRaO/wZwtx9CDhRwmw9hHsx5HuyByZA8sPGP3Py2FbDyjrjP2zyVPMaINydSb0e00BeaaEjM9mxulzSGqbrXu4ML+F2agGprt1V1TxPH0sAEIX62XrXlt5HkJ2+zEVn0WC4xCFjTELMW2U+J8LHvHNWCey2zbfPpptOoMhUDshWUxwHCt1wNy9WENcbi7jll+U3ugu9bkooBtyOlcBaPPGulyfwegCb6XjmeymF7/YQq6vBa1Ir9EVQrTI+ZJwwsgHDkHiu8pqDHuviSsSUcUzNICxRDfPcU+qtbVx88NcjjPo62qxmhPHH2Fx9lxPRUAzVXC03LZ29ERX+LIjw32tznRlN/q4ppOpddok4cicbpFVQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?QgP0a+l+pMe4VBA08R0dL86ardYsyu/btHEt1NU5CBd6Yv3eXYAH/4FYYnBd?= =?us-ascii?Q?6bB/DBh/dqkhl4E3xAtBEWQVTrVzJ6kDL40f3xeB5RfJK/+ZbFqc0Q2WxIfT?= =?us-ascii?Q?VTq7DA8ExpN77ORSqRbWVXOJzfxNsxcTtzhLHKDQ1eu8423cVXbxQgW9n0XV?= =?us-ascii?Q?qM7sb9HB5dYIGh5l+yA/pRAyKiLQU5hzZw8YDye87P4SmDGfvYoQO1xf5d4A?= =?us-ascii?Q?SNO1jw8ZX3M//Ej5ICPZVVSps7vBGxcgZQIgpC85vVjpDR+syP27Qasg0Pq6?= =?us-ascii?Q?f0WUXNqs+huIUEQpX+rzxUpgqm3eKHI06fTk3j9ZrU6vH/7tFnTlIhRhOtmv?= =?us-ascii?Q?fHjhhzwvHaGnGFhR+83YtgRnhHWxdEx1Vu9lYgB7NuiBELLmrun2IwwENEyc?= =?us-ascii?Q?FhDs9G53gpe8p877bwzz0mlrBQ3VrAHzWUW+gN/b7v9om9iIDvEubbYx8y0r?= =?us-ascii?Q?fGlIeywK/tIcA5sgZBHNMnMPMX57ZKzYSri6kumVnLWs1XpmF0ozhQDTTKyt?= =?us-ascii?Q?sGmHQ+GbxRQ1iZV9bc+VLR1urNmx5x0sjwSouhs2Pwo484G+gKMTvMumq5EW?= =?us-ascii?Q?9dMGA8WO40NJdM0hI/pBoUV3JDUqzp8eR8IBLTeOnNwkb8bjU6iTLx98O/Dk?= =?us-ascii?Q?uuo+2I7wtOxYF+8A7tqfCw6d5YuY6g0EU7GuqWQrzDohSAepM0Za/U1Rga/K?= =?us-ascii?Q?5+MZPi9wRUGOyOOMWMVyOPoLFsLMvy68lHT/VlRgHu/XerHeiggZbBqRjBF+?= =?us-ascii?Q?5/QTdMPQmfQPQrhWP15exMNSNEPeqivchzt4KMVvvkFGfuaxNroTatezvnnI?= =?us-ascii?Q?AP/XAUyRm0vIf0GShAsoSmeERoXNwsgzpYJH7x7PS1TwjZgJIUPAX5k88HLJ?= =?us-ascii?Q?Tn4Zr1tF2VHftudBwFV7cSsR4Pn4Bs1wy4yfbPRBvTFm+R8yVKU/WobCtog8?= =?us-ascii?Q?DFmRqhr2Sd1dVv2bssvcgR1lsTH6OA2h6WY1SoH8DRmtDaLRJxJ8/IAQAHIP?= =?us-ascii?Q?dXgpUY3OgDeRbTxkIXI6039WXlvD8FSW6VYhI7iTClIHCZvkZZju7CFKzN9L?= =?us-ascii?Q?peTeq+nNfQYFbVbZBEX/rJGc7S8fcBJvtukx3koi2ndcpJfJAItageazN2b9?= =?us-ascii?Q?YfrlosiNM0NPQzrHnjlT3qTK0WtYnmvV28jTVd8vP1rTtY9C/AcI88UFHgKw?= =?us-ascii?Q?a1sgQ5vsclQQgDMg91SxuCaAGxezoc15/3iBfZc88xOKEIGM+jjKEL2AGAGQ?= =?us-ascii?Q?doIce37zNFfnR0I3qIMRBtNhfizeMOZZ3C/VlXrmgHxOIXbMSL90rwH7+uOe?= =?us-ascii?Q?TAU=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d88b29bd-a202-45b0-48cf-08da893b1dd3 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2022 21:20:22.4370 (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: DU0P250MB0747 Subject: [FFmpeg-devel] [PATCH 11/11] avcodec/frame_thread_encoder: Stop serializing unreferencing AVFrames 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 Cc: Andreas Rheinhardt 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: Currently, the frame-threaded decoding API still supports thread-unsafe callbacks. If one uses a thread-unsafe get_buffer2() callback, calls to av_frame_unref() by the decoder are serialized, because it is presumed that the underlying deallocator is thread-unsafe. The frame-threaded encoder seems to have been written with this restriction in mind: It always serializes unreferencing its AVFrames, although no documentation forces it to do so. This commit schedules to change this behaviour as soon as thread-unsafe callbacks are removed. For this reason, the FF_API_THREAD_SAFE_CALLBACKS define is reused. Signed-off-by: Andreas Rheinhardt --- libavcodec/encode.c | 8 +++++++- libavcodec/encode.h | 2 +- libavcodec/frame_thread_encoder.c | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/libavcodec/encode.c b/libavcodec/encode.c index 8c6d81286c..ade4d458e7 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -190,7 +190,7 @@ int ff_encode_get_frame(AVCodecContext *avctx, AVFrame *frame) } int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet) + AVFrame *frame, int *got_packet) { const FFCodec *const codec = ffcodec(avctx->codec); int ret; @@ -227,6 +227,10 @@ int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, unref: av_packet_unref(avpkt); } +#if !FF_API_THREAD_SAFE_CALLBACKS + if (frame) + av_frame_unref(frame); +#endif return ret; } @@ -267,8 +271,10 @@ static int encode_simple_internal(AVCodecContext *avctx, AVPacket *avpkt) ret = ff_thread_video_encode_frame(avctx, avpkt, frame, &got_packet); else { ret = ff_encode_encode_cb(avctx, avpkt, frame, &got_packet); +#if FF_API_THREAD_SAFE_CALLBACKS if (frame) av_frame_unref(frame); +#endif } if (avci->draining && !got_packet) diff --git a/libavcodec/encode.h b/libavcodec/encode.h index 296ffd312e..81d18d6ead 100644 --- a/libavcodec/encode.h +++ b/libavcodec/encode.h @@ -76,7 +76,7 @@ int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size); int ff_encode_preinit(AVCodecContext *avctx); int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, - const AVFrame *frame, int *got_packet); + AVFrame *frame, int *got_packet); /** * Rescale from sample rate to AVCodecContext.time_base. diff --git a/libavcodec/frame_thread_encoder.c b/libavcodec/frame_thread_encoder.c index 1faaef522e..35775ae823 100644 --- a/libavcodec/frame_thread_encoder.c +++ b/libavcodec/frame_thread_encoder.c @@ -48,7 +48,9 @@ typedef struct{ typedef struct{ AVCodecContext *parent_avctx; +#if FF_API_THREAD_SAFE_CALLBACKS pthread_mutex_t buffer_mutex; +#endif pthread_mutex_t task_fifo_mutex; /* Used to guard (next_)task_index */ pthread_cond_t task_fifo_cond; @@ -68,9 +70,15 @@ typedef struct{ } ThreadContext; #define OFF(member) offsetof(ThreadContext, member) +#if FF_API_THREAD_SAFE_CALLBACKS DEFINE_OFFSET_ARRAY(ThreadContext, thread_ctx, pthread_init_cnt, (OFF(buffer_mutex), OFF(task_fifo_mutex), OFF(finished_task_mutex)), (OFF(task_fifo_cond), OFF(finished_task_cond))); +#else +DEFINE_OFFSET_ARRAY(ThreadContext, thread_ctx, pthread_init_cnt, + (OFF(task_fifo_mutex), OFF(finished_task_mutex)), + (OFF(task_fifo_cond), OFF(finished_task_cond))); +#endif #undef OFF static void * attribute_align_arg worker(void *v){ @@ -104,9 +112,11 @@ static void * attribute_align_arg worker(void *v){ pkt = task->outdata; ret = ff_encode_encode_cb(avctx, pkt, frame, &task->got_packet); +#if FF_API_THREAD_SAFE_CALLBACKS pthread_mutex_lock(&c->buffer_mutex); av_frame_unref(frame); pthread_mutex_unlock(&c->buffer_mutex); +#endif pthread_mutex_lock(&c->finished_task_mutex); task->return_code = ret; task->finished = 1; @@ -114,9 +124,13 @@ static void * attribute_align_arg worker(void *v){ pthread_mutex_unlock(&c->finished_task_mutex); } end: +#if FF_API_THREAD_SAFE_CALLBACKS pthread_mutex_lock(&c->buffer_mutex); +#endif avcodec_close(avctx); +#if FF_API_THREAD_SAFE_CALLBACKS pthread_mutex_unlock(&c->buffer_mutex); +#endif av_freep(&avctx); return NULL; } -- 2.34.1 _______________________________________________ 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".