aboutsummaryrefslogtreecommitdiffstats
path: root/fftools/textformat/tf_internal.h
diff options
context:
space:
mode:
authorsoftworkz <softworkz@hotmail.com>2025-04-29 01:35:50 +0200
committersoftworkz <softworkz@hotmail.com>2025-05-15 23:04:44 +0200
commitcee7b8a051739d9fa6b41f961ecec480cdaa02bd (patch)
treee6e29b87d6ec9aa4b45a77988ce81e750109bbb4 /fftools/textformat/tf_internal.h
parente4830b8c5e589ae77d4e1c9dc68a1a6240cfc3c3 (diff)
downloadffmpeg-cee7b8a051739d9fa6b41f961ecec480cdaa02bd.tar.gz
fftools/textformat: Introduce common header and deduplicate code
Also change writer_printf signature in AVTextWriter to use va_list, so that it can be called by the new function writer_printf() in tf_internal.h. Reviewed-by: Stefano Sabatini <stefasab@gmail.com> Signed-off-by: softworkz <softworkz@hotmail.com>
Diffstat (limited to 'fftools/textformat/tf_internal.h')
-rw-r--r--fftools/textformat/tf_internal.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/fftools/textformat/tf_internal.h b/fftools/textformat/tf_internal.h
new file mode 100644
index 0000000000..362a4cbc38
--- /dev/null
+++ b/fftools/textformat/tf_internal.h
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) The FFmpeg developers
+ *
+ * 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
+ */
+
+/**
+ * @file
+ * Internal utilities for text formatters.
+ */
+
+#ifndef FFTOOLS_TEXTFORMAT_TF_INTERNAL_H
+#define FFTOOLS_TEXTFORMAT_TF_INTERNAL_H
+
+#include "avtextformat.h"
+
+#define DEFINE_FORMATTER_CLASS(name) \
+static const char *name##_get_name(void *ctx) \
+{ \
+ return #name ; \
+} \
+static const AVClass name##_class = { \
+ .class_name = #name, \
+ .item_name = name##_get_name, \
+ .option = name##_options \
+}
+
+
+/**
+ * Safely validate and access a section at a given level
+ */
+static inline const AVTextFormatSection *tf_get_section(AVTextFormatContext *tfc, int level)
+{
+ if (!tfc || level < 0 || level >= SECTION_MAX_NB_LEVELS || !tfc->section[level]) {
+ if (tfc)
+ av_log(tfc, AV_LOG_ERROR, "Invalid section access at level %d\n", level);
+ return NULL;
+ }
+ return tfc->section[level];
+}
+
+/**
+ * Safely access the parent section
+ */
+static inline const AVTextFormatSection *tf_get_parent_section(AVTextFormatContext *tfc, int level)
+{
+ if (level <= 0)
+ return NULL;
+
+ return tf_get_section(tfc, level - 1);
+}
+
+static inline void writer_w8(AVTextFormatContext *wctx, int b)
+{
+ wctx->writer->writer->writer_w8(wctx->writer, b);
+}
+
+static inline void writer_put_str(AVTextFormatContext *wctx, const char *str)
+{
+ wctx->writer->writer->writer_put_str(wctx->writer, str);
+}
+
+static inline void writer_printf(AVTextFormatContext *wctx, const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ wctx->writer->writer->writer_vprintf(wctx->writer, fmt, args);
+ va_end(args);
+}
+
+#endif /* FFTOOLS_TEXTFORMAT_TF_INTERNAL_H */