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 E5F624827F for ; Wed, 14 Feb 2024 17:24:43 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 27D6E68D221; Wed, 14 Feb 2024 19:24:17 +0200 (EET) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04olkn2100.outbound.protection.outlook.com [40.92.73.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6218668D213 for ; Wed, 14 Feb 2024 19:24:13 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CXPwFibjRx/h5h8pQBa4EMXb7mfqOngQi+ltjHNq6DQE/SzuSBjrn7yYIhN+PZgKB7jbpn7pir7fqOkFvt+LrbcC0PYNV9T/HX8WLg0iSOyj1Jx624PZ57MWIOeInwlkO3d6xD6giZK3BPDxhyIeAbSfABYeArmXn+SskfBIQXf3Bpq+LIudPQNMZgMrH4ULjbv5mtqOKNIJNod/r4LorVZPCFkpxKTIn8RwNjECTAEYoXTlYZ3deObnqNIT7AuDtmgRUHbXjGndsVu0VefFs+WjkQE+JhNjDc3XAYfoY2rDqd3NAmA4D/Rq7O64WZzascJsSHUDV/sqfwzhN53NWQ== 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=TYF0tjqhtCnKKKFGUTJMP2YCy0dchBAFOtVhr/XfhqY=; b=P8CLBpw6dAn1/JFZgdzKl4OyYrbmB9Rp9oSND/9q/j6XWN1l2X7tkFkWPeWrwuGsDHSbdEkTHqaVORcNlloH7YJAvmKwkj85psyg3t4RUdQnD1ztZdXzeiUUwpL9AAXeH4ehWummsNGCdW0ukY2RucrzelJs+XKfq2qAYfACa9uNIsMhmUkYAb5YMWqTqWSRq26A3VSZ4EAppQ4UteEvboeJmqw3TQItFkH5Nswx489/ESJfOH4Joa4Jm1BUb5JQiDxmAPZS6iQHgQ1p9KRzEkJ74VJicWw+WEwTytGtMkdARM9mnGbjosc7DEIrrwx9YmEOEc/+JDF+tiyG1EeKcA== 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=TYF0tjqhtCnKKKFGUTJMP2YCy0dchBAFOtVhr/XfhqY=; b=HRlhheQW9QzQIDJiDc55jgzJw/tmTtwZS6cwr7jtKUWNMXO4n0TiLrd9hXA0dAK5MZOL+mmjzksl6DiROjZsC84xeNbPgQRA7CwJkxjRUI1USPBXQPFoNVL9jQ443PvR1BW5TBTHaU5c+ol89B5hwj0aREDs10/iOpAq5ODWtBp2WCOFyP2efstBH4u03IxCcLcyMsRU7tbxKCHsO0tI+gGDJ8HHS0mGYNttFB/bWfxrPm9EEY9KMEDW5oncY34xxK2mBIdXzJMZFrVAnxf+bpCIbKdMk5zEYY7SkFL0ovPQD96PCNF0fnHj8hNw/NPSHpKAVbdQoFdV2b5wuT8WlA== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0374.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:329::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7270.39; Wed, 14 Feb 2024 17:23:55 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d%5]) with mapi id 15.20.7270.036; Wed, 14 Feb 2024 17:23:55 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 14 Feb 2024 18:25:36 +0100 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [lIgEqByu/W3emSarB0K828VtJa1vl4SwaxdTJFXXzz8=] X-ClientProxiedBy: ZR0P278CA0001.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::11) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20240214172537.1099404-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AM8P250MB0374:EE_ X-MS-Office365-Filtering-Correlation-Id: ef02c1c7-408b-441c-d820-08dc2d81b8cf X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UnfdMeywEno7bGZXH4RSvxKRegILbjaNq/oJvWdXYYlRRbCkNMkmZB4f7cYdKI//BqYDiHMut8LCJaXZsOay5NJzrK5/bOXAjUIf81D1zQwSzrXVDgF4jncwTJ4hxsIUlubyzWtjGq2fMXMjpaaKL/TAhiSo1V5ZmwUE6UMs+wYXmKSLRxko0i6EOhAzi0VA7mkg7voDc37WyzQmHAQp1GAw9AalpzdkoGtmBGWotJrOhjTkuNnHSjCr273AuKzt6485wyTxrEAf4LxH0rnS6Gnqr5PAvKsObtDynRbx6G45k40T27VA4ZI66+JovZxzXZa6K0S7uMKPbu2F8SMAv9K/kqNKsZLKok4WGKYu6/NSTNujFsF7dnioxbrEMCbn5TZQI6/gut0zowuDz7sTg/FtBWaafcBeLKNUePugLzJQsGzLCn7OnhWCVVmkopQGH5bGRj+r/oDPRzTW/RjZyv2mN00D703yzMfqr0xg/HtW9mUw1hWUNZIPac5iI4l7db1tmUmgnG29iBa8FL1XTstVpnseIDDjnnuox0uIi8oZPi/aZ5mMWn0zpD2uE6d1ND9hu2yZMC33I3gNMT8Gf9YiUzeXuReILjtqmusuduE= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?SWS1J3FTCJEUJVBWD62BalXZuC2SgV/SW+Mnm5ivqOnxM7a0fHRFVl9NWoVy?= =?us-ascii?Q?d/vV1rWmxceObHS5/7r+ri41K+ULqJNwgSUfqhbE0GqhgI2T5NgWUV9SrfMP?= =?us-ascii?Q?fPobcorB01IDvS3LI7d6BupE5LPoedtWecUWHXaFfEN7ikEMWNFNkdK1bxyS?= =?us-ascii?Q?vDfvjV6OHJ3Ne+ZfUVC+RaUPnYTTx1X/vdKRHvRvrAN6rU/8QG47lKs/zMy5?= =?us-ascii?Q?fvbkTjquyLFts82OwvRCUy5ocJHUEwH//ZMmlmHy8xTNd2Ipp4or6JnB19HU?= =?us-ascii?Q?fBDDwNgscbRDwybNkEMdPKxk2d1V8S7zMVw1Gd2Os0OTU0VZWN2Xf+D/6zTm?= =?us-ascii?Q?YwWFdU7z9eXuecEi/APWyoA0XRZ7p0QpduJFKN+Ns63qs32yDxz5uUMBRQUZ?= =?us-ascii?Q?PqTY/K5Ski8ASZkiVPmaF6U4YgtBUNpuM3+iJ/9eGR88drSN8yPW+bJAYtyw?= =?us-ascii?Q?EsnEsH/igtA6VJVbO01Q8nmx6pEzMHwxK1tZeiXp5JBuv51XfSnI8fnvb4t+?= =?us-ascii?Q?zWAa1YzFoqU7E/p4IJxHzZC4VJteW3CwowmBbnslQ2x2c4GwJNs2cLfe5IvC?= =?us-ascii?Q?eP0opGTD2xEQm9s0Ui0fMddBuW/a5h/0maOvjc2yef878DaQ3lWk+01BW/ug?= =?us-ascii?Q?uEdboJVRUhFllO12PbPfQSgWUJ141/t1r7FO3M1UNYBD3BqyRGtf6i6GK11S?= =?us-ascii?Q?ucaqFlOEKwz6nqLM6IcRXKJnSQojtwTb1gv5o9QIDD0Fsg/ysOGBlyOe4hqE?= =?us-ascii?Q?OIYsGLfJT219Tfgbo75iT7ZOtUUw0p1AyN9e2PEZ/6GaIs6ziWgCAnVGMXZY?= =?us-ascii?Q?rTiVlwFEjafnb/alr95OpmkftouLuI/ynQsE/fsQY7vgiE0ECwofCZ0h5M/F?= =?us-ascii?Q?kAagWg2X11SGDONnRfMabvK2ZtP0nhz3myRZpYrp/q41W/s9DWbK54PIPVxP?= =?us-ascii?Q?a9+o6PntHGYgJz7tIFJAPW2pWtcPXLUVRcPp/T569q4ChT93jjaOMhi4i7D7?= =?us-ascii?Q?L3pyeABQjwew5AvTRdgnWfeJLyHNYshg5TyZcupDTPEAyS9U55bpPBf7a735?= =?us-ascii?Q?/qFpzhC4lK14cOxuJ+buHTXsGO9632x9cO00o7CJOwbyZbkQaqPgbmvpGlnr?= =?us-ascii?Q?reA3P/PmbpYICz8IUI8jQpNx5YVRzoxeXS0H6iU7rtceibjKQ1IL0yQhY6Wb?= =?us-ascii?Q?Ff1ciU++B99oXRW2dUE2v0Q+20ZO4j8mP1WF706AAY6WAGQC1DkCy1ivOkqP?= =?us-ascii?Q?/wM3XkhmZpydtTSENOByOR+JgnsGYv2lkOajJjPT4w=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ef02c1c7-408b-441c-d820-08dc2d81b8cf X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Feb 2024 17:23:55.6278 (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: AM8P250MB0374 Subject: [FFmpeg-devel] [PATCH 7/8] avfilter/avfilter: Move age_index to FilterLinkInternal 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: Also make FFFilterGraph.sink_links a FilterLinkInternal** because sink_links is used to access FilterLinkInternal fields. Signed-off-by: Andreas Rheinhardt --- libavfilter/avfilter.c | 21 +++++++----- libavfilter/avfilter.h | 5 --- libavfilter/avfilter_internal.h | 5 +-- libavfilter/avfiltergraph.c | 61 +++++++++++++++++---------------- libavfilter/link_internal.h | 5 +++ 5 files changed, 52 insertions(+), 45 deletions(-) diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index a3f8c403c3..52ef5ca9a4 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -208,15 +208,17 @@ void avfilter_link_free(AVFilterLink **link) av_freep(link); } -static void update_link_current_pts(AVFilterLink *link, int64_t pts) +static void update_link_current_pts(FilterLinkInternal *li, int64_t pts) { + AVFilterLink *const link = &li->l; + if (pts == AV_NOPTS_VALUE) return; link->current_pts = pts; link->current_pts_us = av_rescale_q(pts, link->time_base, AV_TIME_BASE_Q); /* TODO use duration */ - if (link->graph && link->age_index >= 0) - ff_avfilter_graph_update_heap(link->graph, link); + if (link->graph && li->age_index >= 0) + ff_avfilter_graph_update_heap(link->graph, li); } void ff_filter_set_ready(AVFilterContext *filter, unsigned priority) @@ -266,7 +268,7 @@ static void link_set_out_status(AVFilterLink *link, int status, int64_t pts) av_assert0(!li->status_out); li->status_out = status; if (pts != AV_NOPTS_VALUE) - update_link_current_pts(link, pts); + update_link_current_pts(li, pts); filter_unblock(link->dst); ff_filter_set_ready(link->src, 200); } @@ -1393,7 +1395,7 @@ int ff_inlink_acknowledge_status(AVFilterLink *link, int *rstatus, int64_t *rpts if (!li->status_in) return *rstatus = 0; *rstatus = li->status_out = li->status_in; - update_link_current_pts(link, li->status_in_pts); + update_link_current_pts(li, li->status_in_pts); *rpts = link->current_pts; return 1; } @@ -1424,9 +1426,10 @@ int ff_inlink_check_available_samples(AVFilterLink *link, unsigned min) return samples >= min || (li->status_in && samples); } -static void consume_update(AVFilterLink *link, const AVFrame *frame) +static void consume_update(FilterLinkInternal *li, const AVFrame *frame) { - update_link_current_pts(link, frame->pts); + AVFilterLink *const link = &li->l; + update_link_current_pts(li, frame->pts); ff_inlink_process_commands(link, frame); link->dst->is_disabled = !ff_inlink_evaluate_timeline_at_frame(link, frame); link->frame_count_out++; @@ -1448,7 +1451,7 @@ int ff_inlink_consume_frame(AVFilterLink *link, AVFrame **rframe) } frame = ff_framequeue_take(&li->fifo); - consume_update(link, frame); + consume_update(li, frame); *rframe = frame; return 1; } @@ -1469,7 +1472,7 @@ int ff_inlink_consume_samples(AVFilterLink *link, unsigned min, unsigned max, ret = take_samples(li, min, max, &frame); if (ret < 0) return ret; - consume_update(link, frame); + consume_update(li, frame); *rframe = frame; return 1; } diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 5c6e34e8fc..9252713ae2 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -628,11 +628,6 @@ struct AVFilterLink { */ int64_t current_pts_us; - /** - * Index in the age array. - */ - int age_index; - /** * Frame rate of the stream on the link, or 1/0 if unknown or variable; * if left to 0/0, will be automatically copied from the first input diff --git a/libavfilter/avfilter_internal.h b/libavfilter/avfilter_internal.h index 72712608e7..5ad44ca866 100644 --- a/libavfilter/avfilter_internal.h +++ b/libavfilter/avfilter_internal.h @@ -42,7 +42,7 @@ typedef struct FFFilterGraph { */ AVFilterGraph p; - AVFilterLink **sink_links; + struct FilterLinkInternal **sink_links; int sink_links_count; unsigned disable_auto_convert; @@ -60,7 +60,8 @@ static inline FFFilterGraph *fffiltergraph(AVFilterGraph *graph) /** * Update the position of a link in the age heap. */ -void ff_avfilter_graph_update_heap(AVFilterGraph *graph, AVFilterLink *link); +void ff_avfilter_graph_update_heap(AVFilterGraph *graph, + struct FilterLinkInternal *li); /** * Allocate a new filter context and return it. diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index 5278cf2010..9c91953cc9 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -1286,17 +1286,17 @@ static int graph_config_pointers(AVFilterGraph *graph, void *log_ctx) unsigned i, j; int sink_links_count = 0, n = 0; AVFilterContext *f; - AVFilterLink **sinks; + FilterLinkInternal **sinks; for (i = 0; i < graph->nb_filters; i++) { f = graph->filters[i]; for (j = 0; j < f->nb_inputs; j++) { f->inputs[j]->graph = graph; - f->inputs[j]->age_index = -1; + ff_link_internal(f->inputs[j])->age_index = -1; } for (j = 0; j < f->nb_outputs; j++) { f->outputs[j]->graph = graph; - f->outputs[j]->age_index= -1; + ff_link_internal(f->outputs[j])->age_index = -1; } if (!f->nb_outputs) { if (f->nb_inputs > INT_MAX - sink_links_count) @@ -1311,8 +1311,9 @@ static int graph_config_pointers(AVFilterGraph *graph, void *log_ctx) f = graph->filters[i]; if (!f->nb_outputs) { for (j = 0; j < f->nb_inputs; j++) { - sinks[n] = f->inputs[j]; - f->inputs[j]->age_index = n++; + sinks[n] = ff_link_internal(f->inputs[j]); + sinks[n]->age_index = n; + n++; } } } @@ -1402,28 +1403,28 @@ int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const } static void heap_bubble_up(FFFilterGraph *graph, - AVFilterLink *link, int index) + FilterLinkInternal *li, int index) { - AVFilterLink **links = graph->sink_links; + FilterLinkInternal **links = graph->sink_links; av_assert0(index >= 0); while (index) { int parent = (index - 1) >> 1; - if (links[parent]->current_pts_us >= link->current_pts_us) + if (links[parent]->l.current_pts_us >= li->l.current_pts_us) break; links[index] = links[parent]; links[index]->age_index = index; index = parent; } - links[index] = link; - link->age_index = index; + links[index] = li; + li->age_index = index; } static void heap_bubble_down(FFFilterGraph *graph, - AVFilterLink *link, int index) + FilterLinkInternal *li, int index) { - AVFilterLink **links = graph->sink_links; + FilterLinkInternal **links = graph->sink_links; av_assert0(index >= 0); @@ -1432,34 +1433,37 @@ static void heap_bubble_down(FFFilterGraph *graph, if (child >= graph->sink_links_count) break; if (child + 1 < graph->sink_links_count && - links[child + 1]->current_pts_us < links[child]->current_pts_us) + links[child + 1]->l.current_pts_us < links[child]->l.current_pts_us) child++; - if (link->current_pts_us < links[child]->current_pts_us) + if (li->l.current_pts_us < links[child]->l.current_pts_us) break; links[index] = links[child]; links[index]->age_index = index; index = child; } - links[index] = link; - link->age_index = index; + links[index] = li; + li->age_index = index; } -void ff_avfilter_graph_update_heap(AVFilterGraph *graph, AVFilterLink *link) +void ff_avfilter_graph_update_heap(AVFilterGraph *graph, FilterLinkInternal *li) { - FFFilterGraph *graphi = fffiltergraph(graph); - heap_bubble_up (graphi, link, link->age_index); - heap_bubble_down(graphi, link, link->age_index); + FFFilterGraph *graphi = fffiltergraph(graph); + + heap_bubble_up (graphi, li, li->age_index); + heap_bubble_down(graphi, li, li->age_index); } int avfilter_graph_request_oldest(AVFilterGraph *graph) { FFFilterGraph *graphi = fffiltergraph(graph); - AVFilterLink *oldest = graphi->sink_links[0]; + FilterLinkInternal *oldesti = graphi->sink_links[0]; + AVFilterLink *oldest = &oldesti->l; int64_t frame_count; int r; while (graphi->sink_links_count) { - oldest = graphi->sink_links[0]; + oldesti = graphi->sink_links[0]; + oldest = &oldesti->l; if (oldest->dst->filter->activate) { r = av_buffersink_get_frame_flags(oldest->dst, NULL, AV_BUFFERSINK_FLAG_PEEK); @@ -1474,22 +1478,21 @@ int avfilter_graph_request_oldest(AVFilterGraph *graph) oldest->dst->name, oldest->dstpad->name); /* EOF: remove the link from the heap */ - if (oldest->age_index < --graphi->sink_links_count) + if (oldesti->age_index < --graphi->sink_links_count) heap_bubble_down(graphi, graphi->sink_links[graphi->sink_links_count], - oldest->age_index); - oldest->age_index = -1; + oldesti->age_index); + oldesti->age_index = -1; } if (!graphi->sink_links_count) return AVERROR_EOF; av_assert1(!oldest->dst->filter->activate); - av_assert1(oldest->age_index >= 0); + av_assert1(oldesti->age_index >= 0); frame_count = oldest->frame_count_out; while (frame_count == oldest->frame_count_out) { - FilterLinkInternal * const li = ff_link_internal(oldest); r = ff_filter_graph_run_once(graph); if (r == AVERROR(EAGAIN) && - !oldest->frame_wanted_out && !li->frame_blocked_in && - !li->status_in) + !oldest->frame_wanted_out && !oldesti->frame_blocked_in && + !oldesti->status_in) ff_request_frame(oldest); else if (r < 0) return r; diff --git a/libavfilter/link_internal.h b/libavfilter/link_internal.h index 030eb24765..57efd44a45 100644 --- a/libavfilter/link_internal.h +++ b/libavfilter/link_internal.h @@ -60,6 +60,11 @@ typedef struct FilterLinkInternal { */ int status_out; + /** + * Index in the age array. + */ + int age_index; + /** stage of the initialization of the link properties (dimensions, etc) */ enum { AVLINK_UNINIT = 0, ///< not started -- 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".