[FFmpeg-devel] [PATCH v3 00/11] Execution Graph Printing
ffmpegagent
ffmpegagent at gmail.com
Fri Apr 18 05:56:53 EEST 2025
Shortest cover letter for my longest-running FFmpeg patchset:
* Apply
* Build
* Add the "-sg" switch to any FFmpeg command line
* Press 'q' when you don't want to wait
SG = Show Graph
Documentation and examples can be found here:
https://github.com/softworkz/ffmpeg_output_apis/wiki
Version Updates
===============
V2
==
* Rebased on top of Andreas' improvements
* Applied changes from review (thanks, Andreas)
V3
==
* Fixed all "new warnings"
* Fixed out-of-tree building (thanks, Michael)
softworkz (11):
fftools/textformat: Formatting and whitespace changes
fftools/textformat: Quality improvements
fftools/textformat: Introduce common header and deduplicate code
fftools/tf_internal: Use ac_default_item_name
fftools/textformat: Add function avtext_print_integer_flags()
fftools/ffmpeg_filter: Move some declaration to new header file
avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx()
fftools/resources: Add resource manager files
fftools/ffmpeg_mux: Make ms_from_ost() inline
fftools/graphprint: Add execution graph printing
fftools/graphprint: Now, make it a Killer-Feature!
doc/APIchanges | 3 +
doc/ffmpeg.texi | 14 +
ffbuild/common.mak | 28 +-
fftools/Makefile | 22 +-
fftools/ffmpeg.c | 4 +
fftools/ffmpeg.h | 4 +
fftools/ffmpeg_filter.c | 195 +----
fftools/ffmpeg_filter.h | 234 ++++++
fftools/ffmpeg_mux.h | 2 +-
fftools/ffmpeg_opt.c | 17 +
fftools/graph/filelauncher.c | 204 +++++
fftools/graph/graphprint.c | 1146 ++++++++++++++++++++++++++++
fftools/graph/graphprint.h | 62 ++
fftools/resources/.gitignore | 4 +
fftools/resources/Makefile | 27 +
fftools/resources/graph.css | 353 +++++++++
fftools/resources/graph.html | 86 +++
fftools/resources/resman.c | 213 ++++++
fftools/resources/resman.h | 50 ++
fftools/textformat/avtextformat.c | 238 +++---
fftools/textformat/avtextformat.h | 53 +-
fftools/textformat/avtextwriters.h | 11 +-
fftools/textformat/tf_compact.c | 121 +--
fftools/textformat/tf_default.c | 55 +-
fftools/textformat/tf_flat.c | 51 +-
fftools/textformat/tf_ini.c | 62 +-
fftools/textformat/tf_internal.h | 81 ++
fftools/textformat/tf_json.c | 56 +-
fftools/textformat/tf_mermaid.c | 658 ++++++++++++++++
fftools/textformat/tf_mermaid.h | 41 +
fftools/textformat/tf_xml.c | 68 +-
fftools/textformat/tw_avio.c | 16 +-
fftools/textformat/tw_buffer.c | 7 +-
fftools/textformat/tw_stdout.c | 8 +-
libavfilter/avfilter.c | 9 +
libavfilter/avfilter.h | 12 +
36 files changed, 3669 insertions(+), 546 deletions(-)
create mode 100644 fftools/ffmpeg_filter.h
create mode 100644 fftools/graph/filelauncher.c
create mode 100644 fftools/graph/graphprint.c
create mode 100644 fftools/graph/graphprint.h
create mode 100644 fftools/resources/.gitignore
create mode 100644 fftools/resources/Makefile
create mode 100644 fftools/resources/graph.css
create mode 100644 fftools/resources/graph.html
create mode 100644 fftools/resources/resman.c
create mode 100644 fftools/resources/resman.h
create mode 100644 fftools/textformat/tf_internal.h
create mode 100644 fftools/textformat/tf_mermaid.c
create mode 100644 fftools/textformat/tf_mermaid.h
base-commit: 7684243fbe6e84fecb4a039195d5fda8a006a2a4
Published-As: https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-66%2Fsoftworkz%2Fsubmit_print_execution_graph-v3
Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-66/softworkz/submit_print_execution_graph-v3
Pull-Request: https://github.com/ffstaging/FFmpeg/pull/66
Range-diff vs v2:
1: b6468d1a30 = 1: 357859ee56 fftools/textformat: Formatting and whitespace changes
2: 6568269678 ! 2: 9279d2f53d fftools/textformat: Quality improvements
@@ fftools/textformat/tw_avio.c: const AVTextWriter avtextwriter_avio = {
int avtextwriter_create_file(AVTextWriterContext **pwctx, const char *output_filename)
{
-+ if (!pwctx || !output_filename || !output_filename[0])
++ if (!output_filename || !output_filename[0])
+ return AVERROR(EINVAL);
+
IOWriterContext *ctx;
3: 9e77a447b8 ! 3: d6734bd718 fftools/textformat: Introduce common header and deduplicate code
@@ fftools/textformat/tw_avio.c: static void io_put_str(AVTextWriterContext *wctx,
}
-@@ fftools/textformat/tw_avio.c: const AVTextWriter avtextwriter_avio = {
-
- int avtextwriter_create_file(AVTextWriterContext **pwctx, const char *output_filename)
- {
-- if (!pwctx || !output_filename || !output_filename[0])
-+ if (!output_filename || !output_filename[0])
- return AVERROR(EINVAL);
-
- IOWriterContext *ctx;
## fftools/textformat/tw_buffer.c ##
@@ fftools/textformat/tw_buffer.c: static void buffer_put_str(AVTextWriterContext *wctx, const char *str)
4: a1b358f5c5 = 4: 8289c0ebf8 fftools/tf_internal: Use ac_default_item_name
5: 4f6870ed4c = 5: a3fe7abcfe fftools/textformat: Add function avtext_print_integer_flags()
6: 9c03e66aea = 6: 5b0ac30814 fftools/ffmpeg_filter: Move some declaration to new header file
7: eb54476d00 ! 7: 5e3225c9df avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx()
@@ doc/APIchanges: The last version increases of all libraries were on 2025-03-28
+2025-02-xx - xxxxxxxxxx - lavfi 10.10.100 - avfilter.h
+ Add avfilter_link_get_hw_frames_ctx().
+
- 2025-04-07 - 19e9a203b7 - lavu 60.01.100 - dict.h
- Add AV_DICT_DEDUP.
+ 2025-04-16 - c818c67991 - libpostproc 59.1.100 - postprocess.h
+ Deprecate PP_CPU_CAPS_3DNOW.
## libavfilter/avfilter.c ##
8: dac301adba ! 8: 9881050f93 fftools/resources: Add resource manager files
@@ ffbuild/common.mak: else
+
+# 2) Gzip the minified CSS
+%.css.min.gz: %.css.min
-+ $(M)gzip -nc9 $< > $@
++ $(M)gzip -nc9 $(patsubst $(SRC_PATH)/%,$(SRC_LINK)/%,$<) >$@
+
+# 3) Convert the gzipped CSS to a .c array
+%.css.c: %.css.min.gz $(BIN2CEXE)
-+ $(BIN2C) $< $@ $(subst .,_,$(basename $(notdir $@)))
++ $(BIN2C) $(patsubst $(SRC_PATH)/%,$(SRC_LINK)/%,$<) $@ $(subst .,_,$(basename $(notdir $@)))
+
+# 4) Gzip the HTML file (no minification needed)
+%.html.gz: TAG = GZIP
@@ ffbuild/common.mak: else
+
+# 5) Convert the gzipped HTML to a .c array
+%.html.c: %.html.gz $(BIN2CEXE)
-+ $(BIN2C) $< $@ $(subst .,_,$(basename $(notdir $@)))
++ $(BIN2C) $(patsubst $(SRC_PATH)/%,$(SRC_LINK)/%,$<) $@ $(subst .,_,$(basename $(notdir $@)))
+
clean::
$(RM) $(BIN2CEXE) $(CLEANSUFFIXES:%=ffbuild/%)
@@ ffbuild/common.mak: $(TOOLOBJS): | tools
define RULES
+ ## fftools/Makefile ##
+@@ fftools/Makefile: ifdef HAVE_GNU_WINDRES
+ OBJS-$(1) += fftools/fftoolsres.o
+ endif
+ $(1)$(PROGSSUF)_g$(EXESUF): $$(OBJS-$(1))
+-$$(OBJS-$(1)): | fftools fftools/textformat
++$$(OBJS-$(1)): | fftools fftools/textformat fftools/resources
+ $$(OBJS-$(1)): CFLAGS += $(CFLAGS-$(1))
+ $(1)$(PROGSSUF)_g$(EXESUF): LDFLAGS += $(LDFLAGS-$(1))
+ $(1)$(PROGSSUF)_g$(EXESUF): FF_EXTRALIBS += $(EXTRALIBS-$(1))
+@@ fftools/Makefile: all: $(AVPROGS)
+ fftools/ffprobe.o fftools/cmdutils.o: libavutil/ffversion.h | fftools
+ OUTDIRS += fftools
+ OUTDIRS += fftools/textformat
++OUTDIRS += fftools/resources
+
+ ifdef AVPROGS
+ install: install-progs install-data
+
## fftools/resources/.gitignore (new) ##
@@
+*.html.c
-: ---------- > 9: f639a2e9ff fftools/ffmpeg_mux: Make ms_from_ost() inline
9: 128ae47177 ! 10: 998d6a70c4 fftools/graphprint: Add execution graph printing
@@ fftools/Makefile: OBJS-ffprobe += \
OBJS-ffplay += fftools/ffplay_renderer.o
+@@ fftools/Makefile: ifdef HAVE_GNU_WINDRES
+ OBJS-$(1) += fftools/fftoolsres.o
+ endif
+ $(1)$(PROGSSUF)_g$(EXESUF): $$(OBJS-$(1))
+-$$(OBJS-$(1)): | fftools fftools/textformat fftools/resources
++$$(OBJS-$(1)): | fftools fftools/textformat fftools/resources fftools/graph
+ $$(OBJS-$(1)): CFLAGS += $(CFLAGS-$(1))
+ $(1)$(PROGSSUF)_g$(EXESUF): LDFLAGS += $(LDFLAGS-$(1))
+ $(1)$(PROGSSUF)_g$(EXESUF): FF_EXTRALIBS += $(EXTRALIBS-$(1))
+@@ fftools/Makefile: fftools/ffprobe.o fftools/cmdutils.o: libavutil/ffversion.h | fftools
+ OUTDIRS += fftools
+ OUTDIRS += fftools/textformat
+ OUTDIRS += fftools/resources
++OUTDIRS += fftools/graph
+
+ ifdef AVPROGS
+ install: install-progs install-data
## fftools/ffmpeg.c ##
@@
@@ fftools/textformat/tf_mermaid.c (new)
+ AVBPrint css_buf;
+ const char *diag_directive = mmc->diagram_config->diagram_type == AV_DIAGRAMTYPE_ENTITYRELATIONSHIP ? init_directive_er : init_directive;
+ char *single_line_css = av_strireplace(mmc->diagram_config->diagram_css, "\n", " ");
++ (void)theme_css_er;
+ ////char *single_line_css = av_strireplace(theme_css_er, "\n", " ");
+ av_bprint_init(&css_buf, 0, AV_BPRINT_SIZE_UNLIMITED);
+ av_bprint_escape(&css_buf, single_line_css, "'\\", AV_ESCAPE_MODE_BACKSLASH, AV_ESCAPE_FLAG_STRICT);
@@ fftools/textformat/tf_mermaid.c (new)
+
+ break;
+ case AV_DIAGRAMTYPE_ENTITYRELATIONSHIP:
++
++ if (!is_int && str)
+ {
-+ char *col_type;
++ const char *col_type;
+
+ if (key[0] == '_')
+ return;
10: 0f6fd80b25 = 11: 8817dd0991 fftools/graphprint: Now, make it a Killer-Feature!
--
ffmpeg-codebot
More information about the ffmpeg-devel
mailing list