diff --git a/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c b/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c index 0b7b54be..789da5fb 100644 --- a/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c +++ b/android/ffmpeg-kit-android-lib/src/main/cpp/ffmpegkit.c @@ -103,7 +103,7 @@ volatile int handleSIGXCPU = 1; volatile int handleSIGPIPE = 1; /** Holds the id of the current session */ -__thread volatile long sessionId = 0; +__thread volatile long globalSessionId = 0; /** Holds the default log level */ int configuredLogLevel = AV_LOG_INFO; @@ -275,7 +275,7 @@ void logCallbackDataAdd(int level, AVBPrint *data) { // CREATE DATA STRUCT FIRST struct CallbackData *newData = (struct CallbackData*)av_malloc(sizeof(struct CallbackData)); newData->type = LogType; - newData->sessionId = sessionId; + newData->sessionId = globalSessionId; newData->logLevel = level; av_bprint_init(&newData->logData, 0, AV_BPRINT_SIZE_UNLIMITED); av_bprintf(&newData->logData, "%s", data->str); @@ -303,7 +303,7 @@ void logCallbackDataAdd(int level, AVBPrint *data) { monitorNotify(); - atomic_fetch_add(&sessionInTransitMessageCountMap[sessionId % SESSION_MAP_SIZE], 1); + atomic_fetch_add(&sessionInTransitMessageCountMap[globalSessionId % SESSION_MAP_SIZE], 1); } /** @@ -314,7 +314,7 @@ void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_ // CREATE DATA STRUCT FIRST struct CallbackData *newData = (struct CallbackData*)av_malloc(sizeof(struct CallbackData)); newData->type = StatisticsType; - newData->sessionId = sessionId; + newData->sessionId = globalSessionId; newData->statisticsFrameNumber = frameNumber; newData->statisticsFps = fps; newData->statisticsQuality = quality; @@ -347,7 +347,7 @@ void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_ monitorNotify(); - atomic_fetch_add(&sessionInTransitMessageCountMap[sessionId % SESSION_MAP_SIZE], 1); + atomic_fetch_add(&sessionInTransitMessageCountMap[globalSessionId % SESSION_MAP_SIZE], 1); } /** @@ -787,10 +787,10 @@ JNIEXPORT jint JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFmpeg } // REGISTER THE ID BEFORE STARTING THE SESSION - sessionId = (long) id; + globalSessionId = (long) id; addSession((long) id); - resetMessagesInTransmit(sessionId); + resetMessagesInTransmit(globalSessionId); // RUN int returnCode = ffmpeg_execute(argumentCount, argv); diff --git a/android/ffmpeg-kit-android-lib/src/main/cpp/ffprobekit.c b/android/ffmpeg-kit-android-lib/src/main/cpp/ffprobekit.c index 57d6ee6c..d4a1103a 100644 --- a/android/ffmpeg-kit-android-lib/src/main/cpp/ffprobekit.c +++ b/android/ffmpeg-kit-android-lib/src/main/cpp/ffprobekit.c @@ -30,10 +30,10 @@ int ffprobe_execute(int argc, char **argv); extern int configuredLogLevel; -extern __thread volatile long sessionId; -extern void addSession(long id); -extern void removeSession(long id); -extern void resetMessagesInTransmit(long id); +extern __thread volatile long globalSessionId; +extern void addSession(long sessionId); +extern void removeSession(long sessionId); +extern void resetMessagesInTransmit(long sessionId); /** * Synchronously executes FFprobe natively with arguments provided. @@ -78,10 +78,10 @@ JNIEXPORT jint JNICALL Java_com_arthenica_ffmpegkit_FFmpegKitConfig_nativeFFprob } // REGISTER THE ID BEFORE STARTING THE SESSION - sessionId = (long) id; + globalSessionId = (long) id; addSession((long) id); - resetMessagesInTransmit(sessionId); + resetMessagesInTransmit(globalSessionId); // RUN int returnCode = ffprobe_execute(argumentCount, argv); diff --git a/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.c b/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.c index 3275f678..265f5627 100644 --- a/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.c +++ b/android/ffmpeg-kit-android-lib/src/main/cpp/fftools_ffmpeg.c @@ -260,9 +260,9 @@ extern volatile int handleSIGTERM; extern volatile int handleSIGXCPU; extern volatile int handleSIGPIPE; -extern __thread volatile long sessionId; -extern void cancelSession(long id); -extern int cancelRequested(long id); +extern __thread volatile long globalSessionId; +extern void cancelSession(long sessionId); +extern int cancelRequested(long sessionId); /* sub2video hack: Convert subtitles to video with alpha to insert them in filter graphs. @@ -772,7 +772,7 @@ static void ffmpeg_cleanup(int ret) if (received_sigterm) { av_log(NULL, AV_LOG_INFO, "Exiting normally, received signal %d.\n", (int) received_sigterm); - } else if (cancelRequested(sessionId)) { + } else if (cancelRequested(globalSessionId)) { av_log(NULL, AV_LOG_INFO, "Exiting normally, received cancel request.\n"); } else if (ret && atomic_load(&transcode_init_done)) { av_log(NULL, AV_LOG_INFO, "Conversion failed!\n"); @@ -2438,7 +2438,7 @@ static int ifilter_send_eof(InputFilter *ifilter, int64_t pts) if (ifilter->filter) { /* THIS VALIDATION IS REQUIRED TO COMPLETE CANCELLATION */ - if (!received_sigterm && !cancelRequested(sessionId)) { + if (!received_sigterm && !cancelRequested(globalSessionId)) { ret = av_buffersrc_close(ifilter->filter, pts, AV_BUFFERSRC_FLAG_PUSH); } if (ret < 0) @@ -4989,7 +4989,7 @@ static int transcode(void) goto fail; #endif - while (!received_sigterm && !cancelRequested(sessionId)) { + while (!received_sigterm && !cancelRequested(globalSessionId)) { int64_t cur_time= av_gettime_relative(); /* if 'q' pressed, exits */ @@ -5728,10 +5728,10 @@ int ffmpeg_execute(int argc, char **argv) if ((decode_error_stat[0] + decode_error_stat[1]) * max_error_rate < decode_error_stat[1]) exit_program(69); - exit_program((received_nb_signals || cancelRequested(sessionId))? 255 : main_ffmpeg_return_code); + exit_program((received_nb_signals || cancelRequested(globalSessionId))? 255 : main_ffmpeg_return_code); } else { - main_ffmpeg_return_code = (received_nb_signals || cancelRequested(sessionId)) ? 255 : longjmp_value; + main_ffmpeg_return_code = (received_nb_signals || cancelRequested(globalSessionId)) ? 255 : longjmp_value; } return main_ffmpeg_return_code; diff --git a/apple/src/FFmpegKitConfig.m b/apple/src/FFmpegKitConfig.m index a1f693fa..f313bd35 100644 --- a/apple/src/FFmpegKitConfig.m +++ b/apple/src/FFmpegKitConfig.m @@ -85,7 +85,7 @@ volatile int handleSIGPIPE = 1; /** Holds the id of the current execution */ -__thread volatile long _sessionId = 0; +__thread volatile long globalSessionId = 0; /** Holds the default log level */ int configuredLogLevel = LevelAVLogInfo; @@ -254,7 +254,7 @@ void callbackNotify() { * @param logData log data */ void logCallbackDataAdd(int level, NSString *logData) { - CallbackData* callbackData = [[CallbackData alloc] init:_sessionId logLevel:level data:logData]; + CallbackData* callbackData = [[CallbackData alloc] init:globalSessionId logLevel:level data:logData]; [lock lock]; [callbackDataArray addObject:callbackData]; @@ -262,14 +262,14 @@ void logCallbackDataAdd(int level, NSString *logData) { callbackNotify(); - atomic_fetch_add(&sessionInTransitMessageCountMap[_sessionId % SESSION_MAP_SIZE], 1); + atomic_fetch_add(&sessionInTransitMessageCountMap[globalSessionId % SESSION_MAP_SIZE], 1); } /** * Adds statistics data to the end of callback data list. */ void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_t size, int time, double bitrate, double speed) { - CallbackData *callbackData = [[CallbackData alloc] init:_sessionId videoFrameNumber:frameNumber fps:fps quality:quality size:size time:time bitrate:bitrate speed:speed]; + CallbackData *callbackData = [[CallbackData alloc] init:globalSessionId videoFrameNumber:frameNumber fps:fps quality:quality size:size time:time bitrate:bitrate speed:speed]; [lock lock]; [callbackDataArray addObject:callbackData]; @@ -277,7 +277,7 @@ void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_ callbackNotify(); - atomic_fetch_add(&sessionInTransitMessageCountMap[_sessionId % SESSION_MAP_SIZE], 1); + atomic_fetch_add(&sessionInTransitMessageCountMap[globalSessionId % SESSION_MAP_SIZE], 1); } /** @@ -581,7 +581,7 @@ int executeFFmpeg(long sessionId, NSArray* arguments) { } // REGISTER THE ID BEFORE STARTING THE SESSION - _sessionId = sessionId; + globalSessionId = sessionId; registerSessionId(sessionId); resetMessagesInTransmit(sessionId); @@ -621,7 +621,7 @@ int executeFFprobe(long sessionId, NSArray* arguments) { } // REGISTER THE ID BEFORE STARTING THE SESSION - _sessionId = sessionId; + globalSessionId = sessionId; registerSessionId(sessionId); resetMessagesInTransmit(sessionId); diff --git a/apple/src/fftools_ffmpeg.c b/apple/src/fftools_ffmpeg.c index 630708df..339c57ed 100644 --- a/apple/src/fftools_ffmpeg.c +++ b/apple/src/fftools_ffmpeg.c @@ -257,9 +257,9 @@ extern volatile int handleSIGTERM; extern volatile int handleSIGXCPU; extern volatile int handleSIGPIPE; -extern __thread volatile long sessionId; -extern void cancelSession(long id); -extern int cancelRequested(long id); +extern __thread volatile long globalSessionId; +extern void cancelSession(long sessionId); +extern int cancelRequested(long sessionId); /* sub2video hack: Convert subtitles to video with alpha to insert them in filter graphs. @@ -769,7 +769,7 @@ static void ffmpeg_cleanup(int ret) if (received_sigterm) { av_log(NULL, AV_LOG_INFO, "Exiting normally, received signal %d.\n", (int) received_sigterm); - } else if (cancelRequested(sessionId)) { + } else if (cancelRequested(globalSessionId)) { av_log(NULL, AV_LOG_INFO, "Exiting normally, received cancel request.\n"); } else if (ret && atomic_load(&transcode_init_done)) { av_log(NULL, AV_LOG_INFO, "Conversion failed!\n"); @@ -2435,7 +2435,7 @@ static int ifilter_send_eof(InputFilter *ifilter, int64_t pts) if (ifilter->filter) { /* THIS VALIDATION IS REQUIRED TO COMPLETE CANCELLATION */ - if (!received_sigterm && !cancelRequested(sessionId)) { + if (!received_sigterm && !cancelRequested(globalSessionId)) { ret = av_buffersrc_close(ifilter->filter, pts, AV_BUFFERSRC_FLAG_PUSH); } if (ret < 0) @@ -4986,7 +4986,7 @@ static int transcode(void) goto fail; #endif - while (!received_sigterm && !cancelRequested(sessionId)) { + while (!received_sigterm && !cancelRequested(globalSessionId)) { int64_t cur_time= av_gettime_relative(); /* if 'q' pressed, exits */ @@ -5725,10 +5725,10 @@ int ffmpeg_execute(int argc, char **argv) if ((decode_error_stat[0] + decode_error_stat[1]) * max_error_rate < decode_error_stat[1]) exit_program(69); - exit_program((received_nb_signals || cancelRequested(sessionId))? 255 : main_ffmpeg_return_code); + exit_program((received_nb_signals || cancelRequested(globalSessionId))? 255 : main_ffmpeg_return_code); } else { - main_ffmpeg_return_code = (received_nb_signals || cancelRequested(sessionId)) ? 255 : longjmp_value; + main_ffmpeg_return_code = (received_nb_signals || cancelRequested(globalSessionId)) ? 255 : longjmp_value; } return main_ffmpeg_return_code; diff --git a/apple/src/fftools_ffprobe.c b/apple/src/fftools_ffprobe.c index 051e9011..fbda4847 100644 --- a/apple/src/fftools_ffprobe.c +++ b/apple/src/fftools_ffprobe.c @@ -40,6 +40,7 @@ #include "libavutil/avassert.h" #include "libavutil/avstring.h" #include "libavutil/bprint.h" +#include "libavutil/channel_layout.h" #include "libavutil/display.h" #include "libavutil/hash.h" #include "libavutil/hdr_dynamic_metadata.h" @@ -1688,9 +1689,9 @@ static void xml_print_section_header(WriterContext *wctx) wctx->section[wctx->level-1] : NULL; if (wctx->level == 0) { - const char *qual = " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " - "xmlns:ffprobe='http://www.ffmpeg.org/schema/ffprobe' " - "xsi:schemaLocation='http://www.ffmpeg.org/schema/ffprobe ffprobe.xsd'"; + const char *qual = " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xmlns:ffprobe=\"http://www.ffmpeg.org/schema/ffprobe\" " + "xsi:schemaLocation=\"http://www.ffmpeg.org/schema/ffprobe ffprobe.xsd\""; av_log(NULL, AV_LOG_STDERR, "\n"); av_log(NULL, AV_LOG_STDERR, "<%sffprobe%s>\n", @@ -2032,7 +2033,7 @@ static void print_pkt_side_data(WriterContext *w, print_int("dv_bl_signal_compatibility_id", dovi->dv_bl_signal_compatibility_id); } else if (sd->type == AV_PKT_DATA_AUDIO_SERVICE_TYPE) { enum AVAudioServiceType *t = (enum AVAudioServiceType *)sd->data; - print_int("type", *t); + print_int("service_type", *t); } else if (sd->type == AV_PKT_DATA_MPEGTS_STREAM_ID) { print_int("id", *sd->data); } else if (sd->type == AV_PKT_DATA_CPB_PROPERTIES) { @@ -2248,8 +2249,8 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream, else print_str_opt("media_type", "unknown"); print_int("stream_index", stream->index); print_int("key_frame", frame->key_frame); - print_ts ("pkt_pts", frame->pts); - print_time("pkt_pts_time", frame->pts, &stream->time_base); + print_ts ("pts", frame->pts); + print_time("pts_time", frame->pts, &stream->time_base); print_ts ("pkt_dts", frame->pkt_dts); print_time("pkt_dts_time", frame->pkt_dts, &stream->time_base); print_ts ("best_effort_timestamp", frame->best_effort_timestamp); @@ -3081,8 +3082,7 @@ static void close_input_file(InputFile *ifile) /* close decoder for each stream */ for (i = 0; i < ifile->nb_streams; i++) - if (ifile->streams[i].st->codecpar->codec_id != AV_CODEC_ID_NONE) - avcodec_free_context(&ifile->streams[i].dec_ctx); + avcodec_free_context(&ifile->streams[i].dec_ctx); av_freep(&ifile->streams); ifile->nb_streams = 0; @@ -3747,6 +3747,7 @@ int ffprobe_execute(int argc, char **argv) { "report", 0, { .func_arg = opt_report }, "generate a report" }, { "max_alloc", HAS_ARG, { .func_arg = opt_max_alloc }, "set maximum size of a single allocated block", "bytes" }, { "cpuflags", HAS_ARG | OPT_EXPERT, { .func_arg = opt_cpuflags }, "force specific cpu flags", "flags" }, + { "cpucount", HAS_ARG | OPT_EXPERT, { .func_arg = opt_cpucount }, "force specific cpu count", "count" }, { "hide_banner", OPT_BOOL | OPT_EXPERT, {&hide_banner}, "do not show program banner", "hide_banner" }, #if CONFIG_AVDEVICE @@ -3830,7 +3831,6 @@ int ffprobe_execute(int argc, char **argv) ffprobe_options = options; parse_loglevel(argc, argv, options); avformat_network_init(); - init_opts(); #if CONFIG_AVDEVICE avdevice_register_all(); #endif