fix ios ffprobe implementation
This commit is contained in:
parent
e3ea69a58e
commit
28612fce75
@ -103,7 +103,7 @@ volatile int handleSIGXCPU = 1;
|
|||||||
volatile int handleSIGPIPE = 1;
|
volatile int handleSIGPIPE = 1;
|
||||||
|
|
||||||
/** Holds the id of the current session */
|
/** Holds the id of the current session */
|
||||||
__thread volatile long sessionId = 0;
|
__thread volatile long globalSessionId = 0;
|
||||||
|
|
||||||
/** Holds the default log level */
|
/** Holds the default log level */
|
||||||
int configuredLogLevel = AV_LOG_INFO;
|
int configuredLogLevel = AV_LOG_INFO;
|
||||||
@ -275,7 +275,7 @@ void logCallbackDataAdd(int level, AVBPrint *data) {
|
|||||||
// CREATE DATA STRUCT FIRST
|
// CREATE DATA STRUCT FIRST
|
||||||
struct CallbackData *newData = (struct CallbackData*)av_malloc(sizeof(struct CallbackData));
|
struct CallbackData *newData = (struct CallbackData*)av_malloc(sizeof(struct CallbackData));
|
||||||
newData->type = LogType;
|
newData->type = LogType;
|
||||||
newData->sessionId = sessionId;
|
newData->sessionId = globalSessionId;
|
||||||
newData->logLevel = level;
|
newData->logLevel = level;
|
||||||
av_bprint_init(&newData->logData, 0, AV_BPRINT_SIZE_UNLIMITED);
|
av_bprint_init(&newData->logData, 0, AV_BPRINT_SIZE_UNLIMITED);
|
||||||
av_bprintf(&newData->logData, "%s", data->str);
|
av_bprintf(&newData->logData, "%s", data->str);
|
||||||
@ -303,7 +303,7 @@ void logCallbackDataAdd(int level, AVBPrint *data) {
|
|||||||
|
|
||||||
monitorNotify();
|
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
|
// CREATE DATA STRUCT FIRST
|
||||||
struct CallbackData *newData = (struct CallbackData*)av_malloc(sizeof(struct CallbackData));
|
struct CallbackData *newData = (struct CallbackData*)av_malloc(sizeof(struct CallbackData));
|
||||||
newData->type = StatisticsType;
|
newData->type = StatisticsType;
|
||||||
newData->sessionId = sessionId;
|
newData->sessionId = globalSessionId;
|
||||||
newData->statisticsFrameNumber = frameNumber;
|
newData->statisticsFrameNumber = frameNumber;
|
||||||
newData->statisticsFps = fps;
|
newData->statisticsFps = fps;
|
||||||
newData->statisticsQuality = quality;
|
newData->statisticsQuality = quality;
|
||||||
@ -347,7 +347,7 @@ void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_
|
|||||||
|
|
||||||
monitorNotify();
|
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
|
// REGISTER THE ID BEFORE STARTING THE SESSION
|
||||||
sessionId = (long) id;
|
globalSessionId = (long) id;
|
||||||
addSession((long) id);
|
addSession((long) id);
|
||||||
|
|
||||||
resetMessagesInTransmit(sessionId);
|
resetMessagesInTransmit(globalSessionId);
|
||||||
|
|
||||||
// RUN
|
// RUN
|
||||||
int returnCode = ffmpeg_execute(argumentCount, argv);
|
int returnCode = ffmpeg_execute(argumentCount, argv);
|
||||||
|
@ -30,10 +30,10 @@
|
|||||||
int ffprobe_execute(int argc, char **argv);
|
int ffprobe_execute(int argc, char **argv);
|
||||||
|
|
||||||
extern int configuredLogLevel;
|
extern int configuredLogLevel;
|
||||||
extern __thread volatile long sessionId;
|
extern __thread volatile long globalSessionId;
|
||||||
extern void addSession(long id);
|
extern void addSession(long sessionId);
|
||||||
extern void removeSession(long id);
|
extern void removeSession(long sessionId);
|
||||||
extern void resetMessagesInTransmit(long id);
|
extern void resetMessagesInTransmit(long sessionId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Synchronously executes FFprobe natively with arguments provided.
|
* 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
|
// REGISTER THE ID BEFORE STARTING THE SESSION
|
||||||
sessionId = (long) id;
|
globalSessionId = (long) id;
|
||||||
addSession((long) id);
|
addSession((long) id);
|
||||||
|
|
||||||
resetMessagesInTransmit(sessionId);
|
resetMessagesInTransmit(globalSessionId);
|
||||||
|
|
||||||
// RUN
|
// RUN
|
||||||
int returnCode = ffprobe_execute(argumentCount, argv);
|
int returnCode = ffprobe_execute(argumentCount, argv);
|
||||||
|
@ -260,9 +260,9 @@ extern volatile int handleSIGTERM;
|
|||||||
extern volatile int handleSIGXCPU;
|
extern volatile int handleSIGXCPU;
|
||||||
extern volatile int handleSIGPIPE;
|
extern volatile int handleSIGPIPE;
|
||||||
|
|
||||||
extern __thread volatile long sessionId;
|
extern __thread volatile long globalSessionId;
|
||||||
extern void cancelSession(long id);
|
extern void cancelSession(long sessionId);
|
||||||
extern int cancelRequested(long id);
|
extern int cancelRequested(long sessionId);
|
||||||
|
|
||||||
/* sub2video hack:
|
/* sub2video hack:
|
||||||
Convert subtitles to video with alpha to insert them in filter graphs.
|
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) {
|
if (received_sigterm) {
|
||||||
av_log(NULL, AV_LOG_INFO, "Exiting normally, received signal %d.\n",
|
av_log(NULL, AV_LOG_INFO, "Exiting normally, received signal %d.\n",
|
||||||
(int) received_sigterm);
|
(int) received_sigterm);
|
||||||
} else if (cancelRequested(sessionId)) {
|
} else if (cancelRequested(globalSessionId)) {
|
||||||
av_log(NULL, AV_LOG_INFO, "Exiting normally, received cancel request.\n");
|
av_log(NULL, AV_LOG_INFO, "Exiting normally, received cancel request.\n");
|
||||||
} else if (ret && atomic_load(&transcode_init_done)) {
|
} else if (ret && atomic_load(&transcode_init_done)) {
|
||||||
av_log(NULL, AV_LOG_INFO, "Conversion failed!\n");
|
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) {
|
if (ifilter->filter) {
|
||||||
|
|
||||||
/* THIS VALIDATION IS REQUIRED TO COMPLETE CANCELLATION */
|
/* 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);
|
ret = av_buffersrc_close(ifilter->filter, pts, AV_BUFFERSRC_FLAG_PUSH);
|
||||||
}
|
}
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -4989,7 +4989,7 @@ static int transcode(void)
|
|||||||
goto fail;
|
goto fail;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while (!received_sigterm && !cancelRequested(sessionId)) {
|
while (!received_sigterm && !cancelRequested(globalSessionId)) {
|
||||||
int64_t cur_time= av_gettime_relative();
|
int64_t cur_time= av_gettime_relative();
|
||||||
|
|
||||||
/* if 'q' pressed, exits */
|
/* 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])
|
if ((decode_error_stat[0] + decode_error_stat[1]) * max_error_rate < decode_error_stat[1])
|
||||||
exit_program(69);
|
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 {
|
} 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;
|
return main_ffmpeg_return_code;
|
||||||
|
@ -85,7 +85,7 @@ volatile int handleSIGXCPU = 1;
|
|||||||
volatile int handleSIGPIPE = 1;
|
volatile int handleSIGPIPE = 1;
|
||||||
|
|
||||||
/** Holds the id of the current execution */
|
/** Holds the id of the current execution */
|
||||||
__thread volatile long _sessionId = 0;
|
__thread volatile long globalSessionId = 0;
|
||||||
|
|
||||||
/** Holds the default log level */
|
/** Holds the default log level */
|
||||||
int configuredLogLevel = LevelAVLogInfo;
|
int configuredLogLevel = LevelAVLogInfo;
|
||||||
@ -254,7 +254,7 @@ void callbackNotify() {
|
|||||||
* @param logData log data
|
* @param logData log data
|
||||||
*/
|
*/
|
||||||
void logCallbackDataAdd(int level, NSString *logData) {
|
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];
|
[lock lock];
|
||||||
[callbackDataArray addObject:callbackData];
|
[callbackDataArray addObject:callbackData];
|
||||||
@ -262,14 +262,14 @@ void logCallbackDataAdd(int level, NSString *logData) {
|
|||||||
|
|
||||||
callbackNotify();
|
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.
|
* 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) {
|
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];
|
[lock lock];
|
||||||
[callbackDataArray addObject:callbackData];
|
[callbackDataArray addObject:callbackData];
|
||||||
@ -277,7 +277,7 @@ void statisticsCallbackDataAdd(int frameNumber, float fps, float quality, int64_
|
|||||||
|
|
||||||
callbackNotify();
|
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
|
// REGISTER THE ID BEFORE STARTING THE SESSION
|
||||||
_sessionId = sessionId;
|
globalSessionId = sessionId;
|
||||||
registerSessionId(sessionId);
|
registerSessionId(sessionId);
|
||||||
|
|
||||||
resetMessagesInTransmit(sessionId);
|
resetMessagesInTransmit(sessionId);
|
||||||
@ -621,7 +621,7 @@ int executeFFprobe(long sessionId, NSArray* arguments) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// REGISTER THE ID BEFORE STARTING THE SESSION
|
// REGISTER THE ID BEFORE STARTING THE SESSION
|
||||||
_sessionId = sessionId;
|
globalSessionId = sessionId;
|
||||||
registerSessionId(sessionId);
|
registerSessionId(sessionId);
|
||||||
|
|
||||||
resetMessagesInTransmit(sessionId);
|
resetMessagesInTransmit(sessionId);
|
||||||
|
@ -257,9 +257,9 @@ extern volatile int handleSIGTERM;
|
|||||||
extern volatile int handleSIGXCPU;
|
extern volatile int handleSIGXCPU;
|
||||||
extern volatile int handleSIGPIPE;
|
extern volatile int handleSIGPIPE;
|
||||||
|
|
||||||
extern __thread volatile long sessionId;
|
extern __thread volatile long globalSessionId;
|
||||||
extern void cancelSession(long id);
|
extern void cancelSession(long sessionId);
|
||||||
extern int cancelRequested(long id);
|
extern int cancelRequested(long sessionId);
|
||||||
|
|
||||||
/* sub2video hack:
|
/* sub2video hack:
|
||||||
Convert subtitles to video with alpha to insert them in filter graphs.
|
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) {
|
if (received_sigterm) {
|
||||||
av_log(NULL, AV_LOG_INFO, "Exiting normally, received signal %d.\n",
|
av_log(NULL, AV_LOG_INFO, "Exiting normally, received signal %d.\n",
|
||||||
(int) received_sigterm);
|
(int) received_sigterm);
|
||||||
} else if (cancelRequested(sessionId)) {
|
} else if (cancelRequested(globalSessionId)) {
|
||||||
av_log(NULL, AV_LOG_INFO, "Exiting normally, received cancel request.\n");
|
av_log(NULL, AV_LOG_INFO, "Exiting normally, received cancel request.\n");
|
||||||
} else if (ret && atomic_load(&transcode_init_done)) {
|
} else if (ret && atomic_load(&transcode_init_done)) {
|
||||||
av_log(NULL, AV_LOG_INFO, "Conversion failed!\n");
|
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) {
|
if (ifilter->filter) {
|
||||||
|
|
||||||
/* THIS VALIDATION IS REQUIRED TO COMPLETE CANCELLATION */
|
/* 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);
|
ret = av_buffersrc_close(ifilter->filter, pts, AV_BUFFERSRC_FLAG_PUSH);
|
||||||
}
|
}
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -4986,7 +4986,7 @@ static int transcode(void)
|
|||||||
goto fail;
|
goto fail;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while (!received_sigterm && !cancelRequested(sessionId)) {
|
while (!received_sigterm && !cancelRequested(globalSessionId)) {
|
||||||
int64_t cur_time= av_gettime_relative();
|
int64_t cur_time= av_gettime_relative();
|
||||||
|
|
||||||
/* if 'q' pressed, exits */
|
/* 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])
|
if ((decode_error_stat[0] + decode_error_stat[1]) * max_error_rate < decode_error_stat[1])
|
||||||
exit_program(69);
|
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 {
|
} 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;
|
return main_ffmpeg_return_code;
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
#include "libavutil/avassert.h"
|
#include "libavutil/avassert.h"
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "libavutil/bprint.h"
|
#include "libavutil/bprint.h"
|
||||||
|
#include "libavutil/channel_layout.h"
|
||||||
#include "libavutil/display.h"
|
#include "libavutil/display.h"
|
||||||
#include "libavutil/hash.h"
|
#include "libavutil/hash.h"
|
||||||
#include "libavutil/hdr_dynamic_metadata.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;
|
wctx->section[wctx->level-1] : NULL;
|
||||||
|
|
||||||
if (wctx->level == 0) {
|
if (wctx->level == 0) {
|
||||||
const char *qual = " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
|
const char *qual = " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
|
||||||
"xmlns:ffprobe='http://www.ffmpeg.org/schema/ffprobe' "
|
"xmlns:ffprobe=\"http://www.ffmpeg.org/schema/ffprobe\" "
|
||||||
"xsi:schemaLocation='http://www.ffmpeg.org/schema/ffprobe ffprobe.xsd'";
|
"xsi:schemaLocation=\"http://www.ffmpeg.org/schema/ffprobe ffprobe.xsd\"";
|
||||||
|
|
||||||
av_log(NULL, AV_LOG_STDERR, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
|
av_log(NULL, AV_LOG_STDERR, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
|
||||||
av_log(NULL, AV_LOG_STDERR, "<%sffprobe%s>\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);
|
print_int("dv_bl_signal_compatibility_id", dovi->dv_bl_signal_compatibility_id);
|
||||||
} else if (sd->type == AV_PKT_DATA_AUDIO_SERVICE_TYPE) {
|
} else if (sd->type == AV_PKT_DATA_AUDIO_SERVICE_TYPE) {
|
||||||
enum AVAudioServiceType *t = (enum AVAudioServiceType *)sd->data;
|
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) {
|
} else if (sd->type == AV_PKT_DATA_MPEGTS_STREAM_ID) {
|
||||||
print_int("id", *sd->data);
|
print_int("id", *sd->data);
|
||||||
} else if (sd->type == AV_PKT_DATA_CPB_PROPERTIES) {
|
} 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");
|
else print_str_opt("media_type", "unknown");
|
||||||
print_int("stream_index", stream->index);
|
print_int("stream_index", stream->index);
|
||||||
print_int("key_frame", frame->key_frame);
|
print_int("key_frame", frame->key_frame);
|
||||||
print_ts ("pkt_pts", frame->pts);
|
print_ts ("pts", frame->pts);
|
||||||
print_time("pkt_pts_time", frame->pts, &stream->time_base);
|
print_time("pts_time", frame->pts, &stream->time_base);
|
||||||
print_ts ("pkt_dts", frame->pkt_dts);
|
print_ts ("pkt_dts", frame->pkt_dts);
|
||||||
print_time("pkt_dts_time", frame->pkt_dts, &stream->time_base);
|
print_time("pkt_dts_time", frame->pkt_dts, &stream->time_base);
|
||||||
print_ts ("best_effort_timestamp", frame->best_effort_timestamp);
|
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 */
|
/* close decoder for each stream */
|
||||||
for (i = 0; i < ifile->nb_streams; i++)
|
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);
|
av_freep(&ifile->streams);
|
||||||
ifile->nb_streams = 0;
|
ifile->nb_streams = 0;
|
||||||
@ -3747,6 +3747,7 @@ int ffprobe_execute(int argc, char **argv)
|
|||||||
{ "report", 0, { .func_arg = opt_report }, "generate a report" },
|
{ "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" },
|
{ "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" },
|
{ "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" },
|
{ "hide_banner", OPT_BOOL | OPT_EXPERT, {&hide_banner}, "do not show program banner", "hide_banner" },
|
||||||
|
|
||||||
#if CONFIG_AVDEVICE
|
#if CONFIG_AVDEVICE
|
||||||
@ -3830,7 +3831,6 @@ int ffprobe_execute(int argc, char **argv)
|
|||||||
ffprobe_options = options;
|
ffprobe_options = options;
|
||||||
parse_loglevel(argc, argv, options);
|
parse_loglevel(argc, argv, options);
|
||||||
avformat_network_init();
|
avformat_network_init();
|
||||||
init_opts();
|
|
||||||
#if CONFIG_AVDEVICE
|
#if CONFIG_AVDEVICE
|
||||||
avdevice_register_all();
|
avdevice_register_all();
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user