Fix mp3 and video-export (ffmpeg/ffprobe detection)
A call to `transcoder_exe (unused, unused)` passes the same string reference for `ffmpeg` and `ffprobe`. If this happens during the first call of this function, the path for the latter is cached for both external tools.
This commit is contained in:
parent
528cf92ed5
commit
9c06f693e9
@ -159,62 +159,67 @@ ArdourVideoToolPaths::transcoder_exe (std::string &ffmpeg_exe, std::string &ffpr
|
|||||||
std::string program_files = PBD::get_win_special_folder_path (CSIDL_PROGRAM_FILES);
|
std::string program_files = PBD::get_win_special_folder_path (CSIDL_PROGRAM_FILES);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* note: some callers pass the same reference "unused" to both &ffmpeg_exe, and &ffprobe_exe) */
|
||||||
|
|
||||||
ffmpeg_exe = X_("");
|
ffmpeg_exe = X_("");
|
||||||
ffprobe_exe = X_("");
|
ffprobe_exe = X_("");
|
||||||
|
|
||||||
|
_ffmpeg_exe = X_("");
|
||||||
|
_ffprobe_exe = X_("");
|
||||||
|
|
||||||
std::string ff_file_path;
|
std::string ff_file_path;
|
||||||
if (find_file (Searchpath(Glib::getenv("PATH")), X_("ffmpeg_harvid"), ff_file_path)) {
|
if (find_file (Searchpath(Glib::getenv("PATH")), X_("ffmpeg_harvid"), ff_file_path)) {
|
||||||
ffmpeg_exe = ff_file_path;
|
_ffmpeg_exe = ff_file_path;
|
||||||
}
|
}
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
else if (PBD::windows_query_registry ("Software\\" PROGRAM_NAME "\\v" PROGRAM_VERSION "\\video", "Install_Dir", reg))
|
else if (PBD::windows_query_registry ("Software\\" PROGRAM_NAME "\\v" PROGRAM_VERSION "\\video", "Install_Dir", reg))
|
||||||
{
|
{
|
||||||
ffmpeg_exe = g_build_filename(reg.c_str(), X_("harvid"), X_("ffmpeg.exe"), NULL);
|
_ffmpeg_exe = g_build_filename(reg.c_str(), X_("harvid"), X_("ffmpeg.exe"), NULL);
|
||||||
ffprobe_exe = g_build_filename(reg.c_str(), X_("harvid"), X_("ffprobe.exe"), NULL);
|
_ffprobe_exe = g_build_filename(reg.c_str(), X_("harvid"), X_("ffprobe.exe"), NULL);
|
||||||
}
|
}
|
||||||
else if (PBD::windows_query_registry ("Software\\RSS\\harvid", "Install_Dir", reg))
|
else if (PBD::windows_query_registry ("Software\\RSS\\harvid", "Install_Dir", reg))
|
||||||
{
|
{
|
||||||
ffmpeg_exe = g_build_filename(reg.c_str(), X_("ffmpeg.exe"), NULL);
|
_ffmpeg_exe = g_build_filename(reg.c_str(), X_("ffmpeg.exe"), NULL);
|
||||||
ffprobe_exe = g_build_filename(reg.c_str(), X_("ffprobe.exe"), NULL);
|
_ffprobe_exe = g_build_filename(reg.c_str(), X_("ffprobe.exe"), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Glib::file_test(ffmpeg_exe, Glib::FILE_TEST_EXISTS)) {
|
if (Glib::file_test(_ffmpeg_exe, Glib::FILE_TEST_EXISTS)) {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
else if (!program_files.empty() && Glib::file_test(g_build_filename(program_files.c_str(), "harvid", "ffmpeg.exe", NULL), Glib::FILE_TEST_EXISTS)) {
|
else if (!program_files.empty() && Glib::file_test(g_build_filename(program_files.c_str(), "harvid", "ffmpeg.exe", NULL), Glib::FILE_TEST_EXISTS)) {
|
||||||
ffmpeg_exe = g_build_filename(program_files.c_str(), "harvid", "ffmpeg.exe", NULL);
|
_ffmpeg_exe = g_build_filename(program_files.c_str(), "harvid", "ffmpeg.exe", NULL);
|
||||||
}
|
}
|
||||||
else if (Glib::file_test(X_("C:\\Program Files\\ffmpeg\\ffmpeg.exe"), Glib::FILE_TEST_EXISTS)) {
|
else if (Glib::file_test(X_("C:\\Program Files\\ffmpeg\\ffmpeg.exe"), Glib::FILE_TEST_EXISTS)) {
|
||||||
ffmpeg_exe = X_("C:\\Program Files\\ffmpeg\\ffmpeg.exe");
|
_ffmpeg_exe = X_("C:\\Program Files\\ffmpeg\\ffmpeg.exe");
|
||||||
} else {
|
} else {
|
||||||
ffmpeg_exe = X_("");
|
_ffmpeg_exe = X_("");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (find_file (Searchpath(Glib::getenv("PATH")), X_("ffprobe_harvid"), ff_file_path)) {
|
if (find_file (Searchpath(Glib::getenv("PATH")), X_("ffprobe_harvid"), ff_file_path)) {
|
||||||
ffprobe_exe = ff_file_path;
|
_ffprobe_exe = ff_file_path;
|
||||||
}
|
}
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
if (Glib::file_test(ffprobe_exe, Glib::FILE_TEST_EXISTS)) {
|
if (Glib::file_test(_ffprobe_exe, Glib::FILE_TEST_EXISTS)) {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
else if (!program_files.empty() && Glib::file_test(g_build_filename(program_files.c_str(), "harvid", "ffprobe.exe", NULL), Glib::FILE_TEST_EXISTS)) {
|
else if (!program_files.empty() && Glib::file_test(g_build_filename(program_files.c_str(), "harvid", "ffprobe.exe", NULL), Glib::FILE_TEST_EXISTS)) {
|
||||||
ffprobe_exe = g_build_filename(program_files.c_str(), "harvid", "ffprobe.exe", NULL);
|
_ffprobe_exe = g_build_filename(program_files.c_str(), "harvid", "ffprobe.exe", NULL);
|
||||||
}
|
}
|
||||||
else if (Glib::file_test(X_("C:\\Program Files\\ffmpeg\\ffprobe.exe"), Glib::FILE_TEST_EXISTS)) {
|
else if (Glib::file_test(X_("C:\\Program Files\\ffmpeg\\ffprobe.exe"), Glib::FILE_TEST_EXISTS)) {
|
||||||
ffprobe_exe = X_("C:\\Program Files\\ffmpeg\\ffprobe.exe");
|
_ffprobe_exe = X_("C:\\Program Files\\ffmpeg\\ffprobe.exe");
|
||||||
} else {
|
} else {
|
||||||
ffprobe_exe = X_("");
|
_ffprobe_exe = X_("");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ffmpeg_exe.empty() || ffprobe_exe.empty()) {
|
if (_ffmpeg_exe.empty() || _ffprobe_exe.empty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_cached = true;
|
_cached = true;
|
||||||
_ffmpeg_exe = ffmpeg_exe;
|
ffmpeg_exe = _ffmpeg_exe;
|
||||||
_ffprobe_exe = ffprobe_exe;
|
ffprobe_exe = _ffprobe_exe;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user