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) V4 == * Resolved merge conflict * Fixed build on MinGW (missing include due to WIN32_LEAN_AND_MEAN being defined) (thanks, Michael) V5 == * Applied changes as per review from Stefano (thanks!) * Introduced AVTextFormatOptions struct for options in avtext_context_open() V6 == * Fix "new warning" in 2nd last commit * Squash patches 04 and 05 (they weren't truely independent) * Applied changes as per review from Stefano (thanks!) V7 == * Bitten by OOT builds once again (thanks, Michael) V8 == * New commit Remove void (*print_rational) from AVTextFormatter (unused) * New commit fftools/textformat: Rename name param to key for API consistency * print_int Extend existing function instead of adding print_int_flags * Fix registered_formatters[] array size * avtextwriters.h: Remove unused includes * graphprint.c: Make BPrint inits consistent * tf_json: Check nesting level for value printing * And other review suggestions by Stefano (thanks!) V9 == * Handle cases where no zlib is available (thanks, Michael) and provide configure switch (--disable-resource-compression) V10 === * Fix shared build by not using private URL API from avformat (thanks, Michael) V11 === * Resubmit because Patchwork was broken V12 === * Apply requested changes from review (thanks, Stefano) . softworkz (15): fftools/textformat: Apply formatting and whitespace changes fftools/textformat: Apply quality improvements fftools/textformat: Remove unused print_rational() pointer from AVTextFormatter fftools/textformat: Rename name param to key for API consistency fftools/avtextformat: Re-use BPrint in loop fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() fftools/textformat: Introduce common header and deduplicate code fftools/tf_internal: Use av_default_item_name fftools/textformat: Add flags param to function avtext_print_integer() 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 with build-time compression fftools/ffmpeg_mux: Make ms_from_ost() inline fftools/graphprint: Add execution graph printing fftools/graphprint: Now, make it a Killer-Feature! configure | 5 + doc/APIchanges | 3 + doc/ffmpeg.texi | 14 + ffbuild/common.mak | 43 +- 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/ffprobe.c | 15 +- fftools/graph/filelauncher.c | 205 +++++ fftools/graph/graphprint.c | 1153 ++++++++++++++++++++++++++++ fftools/graph/graphprint.h | 62 ++ fftools/resources/.gitignore | 4 + fftools/resources/Makefile | 13 + fftools/resources/graph.css | 353 +++++++++ fftools/resources/graph.html | 86 +++ fftools/resources/resman.c | 231 ++++++ fftools/resources/resman.h | 50 ++ fftools/textformat/avtextformat.c | 239 +++--- fftools/textformat/avtextformat.h | 78 +- fftools/textformat/avtextwriters.h | 16 +- fftools/textformat/tf_compact.c | 117 +-- 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 | 64 +- fftools/textformat/tf_mermaid.c | 658 ++++++++++++++++ fftools/textformat/tf_mermaid.h | 41 + fftools/textformat/tf_xml.c | 68 +- fftools/textformat/tw_avio.c | 18 +- fftools/textformat/tw_buffer.c | 9 +- fftools/textformat/tw_stdout.c | 10 +- libavfilter/avfilter.c | 9 + libavfilter/avfilter.h | 12 + 38 files changed, 3724 insertions(+), 579 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: 1b643e3f65d75a4e6a25986466254bdd4fc1a01a Published-As: https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-66%2Fsoftworkz%2Fsubmit_print_execution_graph-v12 Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-66/softworkz/submit_print_execution_graph-v12 Pull-Request: https://github.com/ffstaging/FFmpeg/pull/66 Range-diff vs v11: 1: 7e8fddd1b8 ! 1: 52f1c392b3 fftools/textformat: Formatting and whitespace changes @@ Metadata Author: softworkz <softwo...@hotmail.com> ## Commit message ## - fftools/textformat: Formatting and whitespace changes + fftools/textformat: Apply formatting and whitespace changes Reviewed-by: Stefano Sabatini <stefa...@gmail.com> Signed-off-by: softworkz <softwo...@hotmail.com> @@ fftools/textformat/avtextformat.c: void avtext_context_close(AVTextFormatContext int use_value_prefix, int use_byte_value_binary_prefix, @@ fftools/textformat/avtextformat.c: int avtext_context_open(AVTextFormatContext **ptctx, const AVTextFormatter *form - av_dict_free(&opts); - } - -- if (show_data_hash) { -+ if (show_data_hash) - if ((ret = av_hash_alloc(&tctx->hash, show_data_hash)) < 0) { - if (ret == AVERROR(EINVAL)) { - const char *n; -@@ fftools/textformat/avtextformat.c: int avtext_context_open(AVTextFormatContext **ptctx, const AVTextFormatter *form + av_log(NULL, AV_LOG_ERROR, " %s", n); + av_log(NULL, AV_LOG_ERROR, "\n"); } - return ret; +- return ret; ++ goto fail; } -- } + } - /* validate replace string */ - { @@ fftools/textformat/avtextformat.c: int avtext_context_open(AVTextFormatContext **ptctx, const AVTextFormatter *form if (ret < 0) { AVBPrint bp; @@ fftools/textformat/avtextformat.c: fail: { tctx->level++; av_assert0(tctx->level < SECTION_MAX_NB_LEVELS); -@@ fftools/textformat/avtextformat.c: void avtext_print_section_header(AVTextFormatContext *tctx, - void avtext_print_section_footer(AVTextFormatContext *tctx) +@@ fftools/textformat/avtextformat.c: void avtext_print_section_footer(AVTextFormatContext *tctx) { int section_id = tctx->section[tctx->level]->id; -- int parent_section_id = tctx->level ? + int parent_section_id = tctx->level ? - tctx->section[tctx->level-1]->id : SECTION_ID_NONE; -+ int parent_section_id = tctx->level -+ ? tctx->section[tctx->level - 1]->id -+ : SECTION_ID_NONE; ++ tctx->section[tctx->level - 1]->id : SECTION_ID_NONE; if (parent_section_id != SECTION_ID_NONE) { tctx->nb_item[tctx->level - 1]++; @@ fftools/textformat/tf_compact.c: static void compact_print_section_header(AVText if (section->flags & AV_TEXTFORMAT_SECTION_FLAG_HAS_TYPE) { // add /TYPE to prefix @@ fftools/textformat/tf_compact.c: static void compact_print_section_header(AVTextFormatContext *wctx, const void * - char c = - (*p >= '0' && *p <= '9') || - (*p >= 'a' && *p <= 'z') || -- (*p >= 'A' && *p <= 'Z') ? av_tolower(*p) : '_'; -+ (*p >= 'A' && *p <= 'Z') -+ ? (char)(char)av_tolower(*p) -+ : '_'; - av_bprint_chars(section_pbuf, c, 1); - } } av_bprint_chars(section_pbuf, ':', 1); 2: 86ea1c4df5 ! 2: 0499b73c87 fftools/textformat: Apply quality improvements @@ fftools/textformat/avtextformat.c: int avtext_context_open(AVTextFormatContext * ret = AVERROR(ENOMEM); goto fail; @@ fftools/textformat/avtextformat.c: int avtext_context_open(AVTextFormatContext **ptctx, const AVTextFormatter *form - av_log(NULL, AV_LOG_ERROR, " %s", n); - av_log(NULL, AV_LOG_ERROR, "\n"); - } -- return ret; -+ goto fail; - } /* validate replace string */ { @@ fftools/textformat/avtextformat.c: void avtext_print_section_header(AVTextFormat + } + int section_id = tctx->section[tctx->level]->id; - int parent_section_id = tctx->level - ? tctx->section[tctx->level - 1]->id + int parent_section_id = tctx->level ? + tctx->section[tctx->level - 1]->id : SECTION_ID_NONE; @@ fftools/textformat/avtextformat.c: void avtext_print_section_footer(AVTextFormatContext *tctx) void avtext_print_integer(AVTextFormatContext *tctx, const char *key, int64_t val) 3: 455c13c6ff ! 3: 5b2106ad0d fftools/textformat: Remove unused print_rational() pointer from AVTextFormatter @@ Metadata ## Commit message ## fftools/textformat: Remove unused print_rational() pointer from AVTextFormatter + Reviewed-by: Stefano Sabatini <stefa...@gmail.com> Signed-off-by: softworkz <softwo...@hotmail.com> ## fftools/textformat/avtextformat.h ## 4: 624ac50f29 ! 4: e599979391 fftools/textformat: Rename name param to key for API consistency @@ Metadata ## Commit message ## fftools/textformat: Rename name param to key for API consistency + Reviewed-by: Stefano Sabatini <stefa...@gmail.com> Signed-off-by: softworkz <softwo...@hotmail.com> ## fftools/textformat/avtextformat.c ## 5: 26af65e6f2 ! 5: da6a27182d fftools/avtextformat: Re-use BPrint in loop @@ Metadata ## Commit message ## fftools/avtextformat: Re-use BPrint in loop - Instead of initializing a new BPrint in each iteration of - the loop, re-use the same BPrint struct and just clear it + Instead of initializing a new BPrint in case of UTF decode error, + re-use the same BPrint struct and just clear it for each iteration. + Reviewed-by: Stefano Sabatini <stefa...@gmail.com> Signed-off-by: softworkz <softwo...@hotmail.com> ## fftools/textformat/avtextformat.c ## @@ fftools/textformat/avtextformat.c: void avtext_print_integer(AVTextFormatContext - const uint8_t *p, *endp; + const uint8_t *p, *endp, *srcp = (const uint8_t *)src; AVBPrint dstbuf; -+ AVBPrint bp_invalid_seq; ++ AVBPrint invalid_seq; int invalid_chars_nb = 0, ret = 0; + *dstp = NULL; av_bprint_init(&dstbuf, 0, AV_BPRINT_SIZE_UNLIMITED); -+ av_bprint_init(&bp_invalid_seq, 0, AV_BPRINT_SIZE_UNLIMITED); ++ av_bprint_init(&invalid_seq, 0, AV_BPRINT_SIZE_UNLIMITED); - endp = src + strlen(src); - for (p = src; *p;) { @@ fftools/textformat/avtextformat.c: void avtext_print_integer(AVTextFormatContext - av_log(tctx, AV_LOG_DEBUG, - "Invalid UTF-8 sequence %s found in string '%s'\n", bp.str, src); + -+ av_bprint_clear(&bp_invalid_seq); ++ av_bprint_clear(&invalid_seq); + -+ bprint_bytes(&bp_invalid_seq, p0, p - p0); ++ bprint_bytes(&invalid_seq, p0, p - p0); + -+ av_log(tctx, AV_LOG_DEBUG, "Invalid UTF-8 sequence %s found in string '%s'\n", bp_invalid_seq.str, src); ++ av_log(tctx, AV_LOG_DEBUG, "Invalid UTF-8 sequence '%s' found in string '%s'\n", invalid_seq.str, src); invalid = 1; } @@ fftools/textformat/avtextformat.c: static inline int validate_string(AVTextForma end: av_bprint_finalize(&dstbuf, dstp); -+ av_bprint_finalize(&bp_invalid_seq, NULL); ++ av_bprint_finalize(&invalid_seq, NULL); return ret; } 6: 3aa16bc39f ! 6: 4c0452cff7 fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() @@ fftools/textformat/avtextformat.c: int avtext_context_open(AVTextFormatContext * if (nb_sections > SECTION_MAX_NB_SECTIONS) { av_log(tctx, AV_LOG_ERROR, "The number of section definitions (%d) is larger than the maximum allowed (%d)\n", nb_sections, SECTION_MAX_NB_SECTIONS); -@@ fftools/textformat/avtextformat.c: int avtext_context_open(AVTextFormatContext **ptctx, const AVTextFormatter *form - av_dict_free(&opts); - } - -- if (show_data_hash) -+ if (show_data_hash) { - if ((ret = av_hash_alloc(&tctx->hash, show_data_hash)) < 0) { - if (ret == AVERROR(EINVAL)) { - const char *n; -@@ fftools/textformat/avtextformat.c: int avtext_context_open(AVTextFormatContext **ptctx, const AVTextFormatter *form - } - goto fail; - } -+ } - - /* validate replace string */ - { ## fftools/textformat/avtextformat.h ## @@ fftools/textformat/avtextformat.h: struct AVTextFormatContext { 7: 10c5e71cd1 = 7: dfbcbfaef9 fftools/textformat: Introduce common header and deduplicate code 8: 4c1471f65c = 8: 43189acea0 fftools/tf_internal: Use av_default_item_name 9: 7d28b0f03c = 9: 4d4748bb4c fftools/textformat: Add flags param to function avtext_print_integer() 10: a0d38f429a = 10: 493ed24e9e fftools/ffmpeg_filter: Move some declaration to new header file 11: 53db985728 = 11: 997d93b0b4 avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() 12: 2405f535bf = 12: ed92ac7577 fftools/resources: Add resource manager files with build-time compression 13: a7576bbbfc = 13: 32887c68e8 fftools/ffmpeg_mux: Make ms_from_ost() inline 14: 1bdd305940 = 14: 2ba841ad80 fftools/graphprint: Add execution graph printing 15: 4e04962fb4 = 15: f1cfa5fc2a fftools/graphprint: Now, make it a Killer-Feature! -- ffmpeg-codebot _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".