From patchwork Mon Jan 29 18:42:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 45889 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:8786:b0:199:de12:6fa6 with SMTP id ph6csp1714551pzb; Mon, 29 Jan 2024 10:42:27 -0800 (PST) X-Google-Smtp-Source: AGHT+IGFv/16U63i+vNjIT3tK33MbblwbBBp6MiilVUhNhqKly9ajlxHOfnia/fl1iP21z+N6GJN X-Received: by 2002:a2e:2e03:0:b0:2cd:8138:428d with SMTP id u3-20020a2e2e03000000b002cd8138428dmr3820003lju.6.1706553747143; Mon, 29 Jan 2024 10:42:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1706553747; cv=none; d=google.com; s=arc-20160816; b=yrA73+OiQLrd6suSq5o414i5wefhimwlfjIPXVbkLRkKzyJJmuTqBMuD6pZ6Yc1Lct CaHEGoIzMHr3I/oHYun4XB4ppl2mPAT1i27pY1Ccva255t0FoPR3o5PZPrS6/ngiBEUq ZlUQsTJHCFEowAvNiyK2hsFo6tpOlN/JVv5xbhLlIPZCYfj84bIEGLAQwTNWGytzo3wg fbNYwpvObHlsb2MxxTW8fr+3LLioTwrNCE3/YMN+zrnIykFZaQR3ikiAzHMQWqX49sLx RhfH96+BUzOaHhXH0lPl2zNAuUAq0bAHPF3KP2F+v7iqfhpawXPlRyUKt40V5u7+WMaK KLuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=yQukfUw/taJX6oUC2TQlbZuj6qiDXgrtCAIRLf7/ENM=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=H2tdFO4ZxOBODz1B/5DPl5jiYu7my9YY4iT3CF4PFcPqjPTE133yFDPbrKDUITbG+a rg2sYckHQffMP3S4ZpYenL/K+XylzgqNHXIg6YHbm0IRpnLaLn42yYI0vx1JsuJEH7yR Opobp9GaKAigOPd+Z/U68pU9oJI5bg3LHmmE67IjTJY3oFyRlI60gtP+TqFCDVlbTxFr f0dxqpITbLB1sl6XEnXZWPA3Cp717Ls4UWlmbS2FujW1uwe+RSOf2zDFWDMgogDaPkck FitsrEqlZsxCCXMTaOvpainYjI6r6WAMDS7SaQumvFFX5eBk8dL2yxF3ozXDvDS2xV5G Zo+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=an8ofSOi; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c7-20020a0564021f8700b0055d0b093217si3826176edc.251.2024.01.29.10.42.26; Mon, 29 Jan 2024 10:42:27 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=an8ofSOi; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5360D68D1DF; Mon, 29 Jan 2024 20:42:24 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 45B3468D1EC for ; Mon, 29 Jan 2024 20:42:17 +0200 (EET) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=an8ofSOi; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id DACC319DB for ; Mon, 29 Jan 2024 19:42:16 +0100 (CET) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id s66ai2oyvLCx for ; Mon, 29 Jan 2024 19:42:16 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1706553736; bh=9xClKdOh63+fQK12fwGPlV3MIwJOKpJN42SjC8RcBdU=; h=From:To:Subject:Date:From; b=an8ofSOimRb9qiFYZtEMshkpArUAW8O1gzZmdt9Q0Aov5DLLmEz0klzLK2iHHVkMV HE8wRCK5hswd0jldm5CYOAz6eL+GO2vhFGAPW6L2rM7zifI1iCulVLJnYivMZAwemN quU50luz0fZF32jXW9kAsK/rzmwvA5lNmX3hbwCW4NzYCQMo0FOTmQMCvBTEuXHtOI ElVZ1INUSJlEVYGbFAhNZvdiTiM7r6PkiIdGn1xQv5kEIOwXve8QTkCvKe5RJDMVIw IkBTnI3mftbs0/N+TT/wAJ7FS9jGkNm1STxErIj0jz3jsU6zzej4HRytMLjt5vxP7x vUNb4dEJYufeg== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id 4B8EAEEB for ; Mon, 29 Jan 2024 19:42:16 +0100 (CET) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 2816E3A02A0 for ; Mon, 29 Jan 2024 19:42:16 +0100 (CET) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Jan 2024 19:42:15 +0100 Message-ID: <20240129184215.16685-1-anton@khirnov.net> X-Mailer: git-send-email 2.42.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] lavc/bsf: add a showinfo filter 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: wO0Or8G7+FYf Analogous to the (a)showinfo lavfi filters, logs basic packet information. Mainly useful for debugging/testing/development. --- Changelog | 1 + doc/bitstream_filters.texi | 4 +++ libavcodec/bitstream_filters.c | 1 + libavcodec/bsf/Makefile | 1 + libavcodec/bsf/showinfo.c | 66 ++++++++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+) create mode 100644 libavcodec/bsf/showinfo.c diff --git a/Changelog b/Changelog index c1fd66b4bd..c5fb21d198 100644 --- a/Changelog +++ b/Changelog @@ -23,6 +23,7 @@ version : - ffmpeg CLI -bsf option may now be used for input as well as output - ffmpeg CLI options may now be used as -/opt , which is equivalent to -opt > +- showinfo bitstream filter version 6.1: - libaribcaption decoder diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi index dc4f85bac0..d5bac105ff 100644 --- a/doc/bitstream_filters.texi +++ b/doc/bitstream_filters.texi @@ -887,6 +887,10 @@ For example, to set PTS equal to DTS (not recommended if B-frames are involved): ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv @end example +@section showinfo +Log basic packet information. Mainly useful for testing, debugging, +and development. + @anchor{text2movsub} @section text2movsub diff --git a/libavcodec/bitstream_filters.c b/libavcodec/bitstream_filters.c index 1e9a676a3d..1bae113d92 100644 --- a/libavcodec/bitstream_filters.c +++ b/libavcodec/bitstream_filters.c @@ -58,6 +58,7 @@ extern const FFBitStreamFilter ff_pgs_frame_merge_bsf; extern const FFBitStreamFilter ff_prores_metadata_bsf; extern const FFBitStreamFilter ff_remove_extradata_bsf; extern const FFBitStreamFilter ff_setts_bsf; +extern const FFBitStreamFilter ff_showinfo_bsf; extern const FFBitStreamFilter ff_text2movsub_bsf; extern const FFBitStreamFilter ff_trace_headers_bsf; extern const FFBitStreamFilter ff_truehd_core_bsf; diff --git a/libavcodec/bsf/Makefile b/libavcodec/bsf/Makefile index 7831b0f2aa..62609eb24e 100644 --- a/libavcodec/bsf/Makefile +++ b/libavcodec/bsf/Makefile @@ -36,6 +36,7 @@ OBJS-$(CONFIG_PGS_FRAME_MERGE_BSF) += bsf/pgs_frame_merge.o OBJS-$(CONFIG_PRORES_METADATA_BSF) += bsf/prores_metadata.o OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF) += bsf/remove_extradata.o OBJS-$(CONFIG_SETTS_BSF) += bsf/setts.o +OBJS-$(CONFIG_SHOWINFO_BSF) += bsf/showinfo.o OBJS-$(CONFIG_TEXT2MOVSUB_BSF) += bsf/movsub.o OBJS-$(CONFIG_TRACE_HEADERS_BSF) += bsf/trace_headers.o OBJS-$(CONFIG_TRUEHD_CORE_BSF) += bsf/truehd_core.o diff --git a/libavcodec/bsf/showinfo.c b/libavcodec/bsf/showinfo.c new file mode 100644 index 0000000000..dc1ac8ceb6 --- /dev/null +++ b/libavcodec/bsf/showinfo.c @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2024 Anton Khirnov + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include "bsf.h" +#include "bsf_internal.h" + +#include "libavutil/log.h" +#include "libavutil/timestamp.h" + +typedef struct ShowinfoContext { + uint64_t nb_packets; +} ShowinfoContext; + +static int showinfo_filter(AVBSFContext *ctx, AVPacket *pkt) +{ + ShowinfoContext *priv = ctx->priv_data; + + while (1) { + int ret; + + ret = ff_bsf_get_packet_ref(ctx, pkt); + if (ret < 0) + return ret; + + av_log(ctx, AV_LOG_INFO, + "n:%7"PRIu64" " + "size:%7d " + "pts:%s pt:%s " + "dts:%s dt:%s " + "ds:%"PRId64" d:%s " + "\n", + priv->nb_packets, pkt->size, + av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ctx->time_base_in), + av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &ctx->time_base_in), + pkt->duration, av_ts2timestr(pkt->duration, &ctx->time_base_in)); + + priv->nb_packets++; + + return 0; + } +} + +const FFBitStreamFilter ff_showinfo_bsf = { + .p.name = "showinfo", + .filter = showinfo_filter, + .priv_data_size = sizeof(ShowinfoContext), +};