From fd0bb25ec3965d9f61d17f59c5edf655d88ffb98 Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Mon, 12 Sep 2022 00:55:42 +0100 Subject: [PATCH] fix report file creation crash --- .../src/main/cpp/fftools_opt_common.c | 34 +++++++++---------- apple/src/fftools_opt_common.c | 4 +-- linux/src/fftools_opt_common.c | 34 +++++++++---------- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_opt_common.c b/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_opt_common.c index c1df381..f12ecf2 100644 --- a/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_opt_common.c +++ b/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_opt_common.c @@ -31,7 +31,7 @@ * - printf replaced with av_log statements * - libpostproc references dropped * - fftools_ prefix added to fftools headers - * - added __thread modifier to report_file variables + * - added __thread modifier to report_file variables and warned_cfg * - log_callback_report updated to forward logs via ffmpegkit_log_callback_function * - extern program_name declared */ @@ -84,7 +84,7 @@ enum show_muxdemuxers { SHOW_MUXERS, }; -static __thread FILE *report_file; +static __thread FILE *report_file = NULL; static __thread int report_file_level = AV_LOG_DEBUG; extern void ffmpegkit_log_callback_function(void *ptr, int level, const char* format, va_list vargs); @@ -94,12 +94,12 @@ extern __thread char *program_name; int show_license(void *optctx, const char *opt, const char *arg) { #if CONFIG_NONFREE - printf( + av_log(NULL, AV_LOG_ERROR, "This version of %s has nonfree parts compiled in.\n" "Therefore it is not legally redistributable.\n", program_name ); #elif CONFIG_GPLV3 - printf( + av_log(NULL, AV_LOG_ERROR, "%s is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 3 of the License, or\n" @@ -114,7 +114,7 @@ int show_license(void *optctx, const char *opt, const char *arg) "along with %s. If not, see .\n", program_name, program_name, program_name ); #elif CONFIG_GPL - printf( + av_log(NULL, AV_LOG_ERROR, "%s is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" @@ -130,7 +130,7 @@ int show_license(void *optctx, const char *opt, const char *arg) "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n", program_name, program_name, program_name ); #elif CONFIG_LGPLV3 - printf( + av_log(NULL, AV_LOG_ERROR, "%s is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU Lesser General Public License as published by\n" "the Free Software Foundation; either version 3 of the License, or\n" @@ -145,7 +145,7 @@ int show_license(void *optctx, const char *opt, const char *arg) "along with %s. If not, see .\n", program_name, program_name, program_name ); #else - printf( + av_log(NULL, AV_LOG_ERROR, "%s is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU Lesser General Public\n" "License as published by the Free Software Foundation; either\n" @@ -165,7 +165,7 @@ int show_license(void *optctx, const char *opt, const char *arg) return 0; } -static int warned_cfg = 0; +__thread int warned_cfg = 0; #define INDENT 1 #define SHOW_VERSION 2 @@ -717,9 +717,9 @@ int show_codecs(void *optctx, const char *opt, const char *arg) av_log(NULL, AV_LOG_ERROR, avcodec_find_encoder(desc->id) ? "E" : "."); av_log(NULL, AV_LOG_ERROR, "%c", get_media_type_char(desc->type)); - printf((desc->props & AV_CODEC_PROP_INTRA_ONLY) ? "I" : "."); - printf((desc->props & AV_CODEC_PROP_LOSSY) ? "L" : "."); - printf((desc->props & AV_CODEC_PROP_LOSSLESS) ? "S" : "."); + av_log(NULL, AV_LOG_ERROR, (desc->props & AV_CODEC_PROP_INTRA_ONLY) ? "I" : "."); + av_log(NULL, AV_LOG_ERROR, (desc->props & AV_CODEC_PROP_LOSSY) ? "L" : "."); + av_log(NULL, AV_LOG_ERROR, (desc->props & AV_CODEC_PROP_LOSSLESS) ? "S" : "."); av_log(NULL, AV_LOG_ERROR, " %-20s %s", desc->name, desc->long_name ? desc->long_name : ""); @@ -768,11 +768,11 @@ static void print_codecs(int encoder) while ((codec = next_codec_for_id(desc->id, &iter, encoder))) { av_log(NULL, AV_LOG_ERROR, " %c", get_media_type_char(desc->type)); - printf((codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) ? "F" : "."); - printf((codec->capabilities & AV_CODEC_CAP_SLICE_THREADS) ? "S" : "."); - printf((codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) ? "X" : "."); - printf((codec->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)?"B" : "."); - printf((codec->capabilities & AV_CODEC_CAP_DR1) ? "D" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) ? "F" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_SLICE_THREADS) ? "S" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) ? "X" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)?"B" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_DR1) ? "D" : "."); av_log(NULL, AV_LOG_ERROR, " %-20s %s", codec->name, codec->long_name ? codec->long_name : ""); if (strcmp(codec->name, desc->name)) @@ -1146,7 +1146,7 @@ static void log_callback_report(void *ptr, int level, const char *fmt, va_list v } av_log_format_line(ptr, level, fmt, vl2, line, sizeof(line), &print_prefix); va_end(vl2); - if (report_file_level >= level) { + if (report_file && report_file_level >= level) { fputs(line, report_file); fflush(report_file); } diff --git a/apple/src/fftools_opt_common.c b/apple/src/fftools_opt_common.c index 0a88b12..f12ecf2 100644 --- a/apple/src/fftools_opt_common.c +++ b/apple/src/fftools_opt_common.c @@ -84,7 +84,7 @@ enum show_muxdemuxers { SHOW_MUXERS, }; -static __thread FILE *report_file; +static __thread FILE *report_file = NULL; static __thread int report_file_level = AV_LOG_DEBUG; extern void ffmpegkit_log_callback_function(void *ptr, int level, const char* format, va_list vargs); @@ -1146,7 +1146,7 @@ static void log_callback_report(void *ptr, int level, const char *fmt, va_list v } av_log_format_line(ptr, level, fmt, vl2, line, sizeof(line), &print_prefix); va_end(vl2); - if (report_file_level >= level) { + if (report_file && report_file_level >= level) { fputs(line, report_file); fflush(report_file); } diff --git a/linux/src/fftools_opt_common.c b/linux/src/fftools_opt_common.c index c1df381..f12ecf2 100644 --- a/linux/src/fftools_opt_common.c +++ b/linux/src/fftools_opt_common.c @@ -31,7 +31,7 @@ * - printf replaced with av_log statements * - libpostproc references dropped * - fftools_ prefix added to fftools headers - * - added __thread modifier to report_file variables + * - added __thread modifier to report_file variables and warned_cfg * - log_callback_report updated to forward logs via ffmpegkit_log_callback_function * - extern program_name declared */ @@ -84,7 +84,7 @@ enum show_muxdemuxers { SHOW_MUXERS, }; -static __thread FILE *report_file; +static __thread FILE *report_file = NULL; static __thread int report_file_level = AV_LOG_DEBUG; extern void ffmpegkit_log_callback_function(void *ptr, int level, const char* format, va_list vargs); @@ -94,12 +94,12 @@ extern __thread char *program_name; int show_license(void *optctx, const char *opt, const char *arg) { #if CONFIG_NONFREE - printf( + av_log(NULL, AV_LOG_ERROR, "This version of %s has nonfree parts compiled in.\n" "Therefore it is not legally redistributable.\n", program_name ); #elif CONFIG_GPLV3 - printf( + av_log(NULL, AV_LOG_ERROR, "%s is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 3 of the License, or\n" @@ -114,7 +114,7 @@ int show_license(void *optctx, const char *opt, const char *arg) "along with %s. If not, see .\n", program_name, program_name, program_name ); #elif CONFIG_GPL - printf( + av_log(NULL, AV_LOG_ERROR, "%s is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 2 of the License, or\n" @@ -130,7 +130,7 @@ int show_license(void *optctx, const char *opt, const char *arg) "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n", program_name, program_name, program_name ); #elif CONFIG_LGPLV3 - printf( + av_log(NULL, AV_LOG_ERROR, "%s is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU Lesser General Public License as published by\n" "the Free Software Foundation; either version 3 of the License, or\n" @@ -145,7 +145,7 @@ int show_license(void *optctx, const char *opt, const char *arg) "along with %s. If not, see .\n", program_name, program_name, program_name ); #else - printf( + av_log(NULL, AV_LOG_ERROR, "%s is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU Lesser General Public\n" "License as published by the Free Software Foundation; either\n" @@ -165,7 +165,7 @@ int show_license(void *optctx, const char *opt, const char *arg) return 0; } -static int warned_cfg = 0; +__thread int warned_cfg = 0; #define INDENT 1 #define SHOW_VERSION 2 @@ -717,9 +717,9 @@ int show_codecs(void *optctx, const char *opt, const char *arg) av_log(NULL, AV_LOG_ERROR, avcodec_find_encoder(desc->id) ? "E" : "."); av_log(NULL, AV_LOG_ERROR, "%c", get_media_type_char(desc->type)); - printf((desc->props & AV_CODEC_PROP_INTRA_ONLY) ? "I" : "."); - printf((desc->props & AV_CODEC_PROP_LOSSY) ? "L" : "."); - printf((desc->props & AV_CODEC_PROP_LOSSLESS) ? "S" : "."); + av_log(NULL, AV_LOG_ERROR, (desc->props & AV_CODEC_PROP_INTRA_ONLY) ? "I" : "."); + av_log(NULL, AV_LOG_ERROR, (desc->props & AV_CODEC_PROP_LOSSY) ? "L" : "."); + av_log(NULL, AV_LOG_ERROR, (desc->props & AV_CODEC_PROP_LOSSLESS) ? "S" : "."); av_log(NULL, AV_LOG_ERROR, " %-20s %s", desc->name, desc->long_name ? desc->long_name : ""); @@ -768,11 +768,11 @@ static void print_codecs(int encoder) while ((codec = next_codec_for_id(desc->id, &iter, encoder))) { av_log(NULL, AV_LOG_ERROR, " %c", get_media_type_char(desc->type)); - printf((codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) ? "F" : "."); - printf((codec->capabilities & AV_CODEC_CAP_SLICE_THREADS) ? "S" : "."); - printf((codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) ? "X" : "."); - printf((codec->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)?"B" : "."); - printf((codec->capabilities & AV_CODEC_CAP_DR1) ? "D" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) ? "F" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_SLICE_THREADS) ? "S" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) ? "X" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)?"B" : "."); + av_log(NULL, AV_LOG_ERROR, (codec->capabilities & AV_CODEC_CAP_DR1) ? "D" : "."); av_log(NULL, AV_LOG_ERROR, " %-20s %s", codec->name, codec->long_name ? codec->long_name : ""); if (strcmp(codec->name, desc->name)) @@ -1146,7 +1146,7 @@ static void log_callback_report(void *ptr, int level, const char *fmt, va_list v } av_log_format_line(ptr, level, fmt, vl2, line, sizeof(line), &print_prefix); va_end(vl2); - if (report_file_level >= level) { + if (report_file && report_file_level >= level) { fputs(line, report_file); fflush(report_file); }