mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-09 07:56:24 -06:00
FIX: copy BambuSource.dll for camera use
Change-Id: If311e2827eda655bf7cd7294f9c0749f1dd7b545
This commit is contained in:
parent
d8f0749474
commit
e8d796211d
2 changed files with 59 additions and 33 deletions
|
@ -267,16 +267,9 @@ void MediaPlayCtrl::ToggleStream()
|
|||
std::string url;
|
||||
if (!get_stream_url(&url)) {
|
||||
// create stream pipeline
|
||||
#ifdef __WIN32__
|
||||
std::string file_source = data_dir() + "\\cameratools\\bambu_source.exe";
|
||||
std::string file_ffmpeg = data_dir() + "\\cameratools\\ffmpeg.exe";
|
||||
std::string file_ff_cfg = data_dir() + "\\cameratools\\ffmpeg.cfg";
|
||||
#else
|
||||
std::string file_source = data_dir() + "/cameratools/bambu_source";
|
||||
std::string file_ffmpeg = data_dir() + "/cameratools/ffmpeg";
|
||||
std::string file_ff_cfg = data_dir() + "/cameratools/ffmpeg.cfg";
|
||||
#endif
|
||||
if (!boost::filesystem::exists(file_source) || !boost::filesystem::exists(file_ffmpeg) || !boost::filesystem::exists(file_ff_cfg)) {
|
||||
bool need_install = false;
|
||||
if (!start_stream_service(&need_install)) {
|
||||
if (!need_install) return;
|
||||
auto res = MessageDialog(this->GetParent(), _L("Virtual Camera Tools is required for this task!\nDo you want to install them?"), _L("Info"),
|
||||
wxOK | wxCANCEL).ShowModal();
|
||||
if (res == wxID_OK) {
|
||||
|
@ -305,28 +298,6 @@ void MediaPlayCtrl::ToggleStream()
|
|||
}
|
||||
return;
|
||||
}
|
||||
wxString url = L"bambu:///camera/" + from_u8(file_url);
|
||||
url.Replace("\\", "/");
|
||||
url = wxURI(url).BuildURI();
|
||||
try {
|
||||
std::string configs;
|
||||
boost::filesystem::load_string_file(file_ff_cfg, configs);
|
||||
std::vector<std::string> configss;
|
||||
boost::algorithm::split(configss, configs, boost::algorithm::is_any_of("\r\n"));
|
||||
configss.erase(std::remove(configss.begin(), configss.end(), std::string()), configss.end());
|
||||
boost::process::pipe intermediate;
|
||||
#ifndef __WXMSW__
|
||||
boost::filesystem::permissions(file_source, boost::filesystem::owner_exe | boost::filesystem::add_perms);
|
||||
boost::filesystem::permissions(file_ffmpeg, boost::filesystem::owner_exe | boost::filesystem::add_perms);
|
||||
#endif
|
||||
boost::process::child process_source(file_source, url.data().AsInternal(), boost::process::std_out > intermediate, detach_process(),
|
||||
boost::process::start_dir(boost::filesystem::path(data_dir()) / "plugins"), boost::process::limit_handles);
|
||||
boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::std_in < intermediate, detach_process(), boost::process::limit_handles);
|
||||
process_source.detach();
|
||||
process_ffmpeg.detach();
|
||||
} catch (std::exception & e) {
|
||||
BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl failed to start camera stream: " << e.what();
|
||||
}
|
||||
}
|
||||
if (!url.empty() && wxGetApp().app_config->get("not_show_vcamera_stop_prev") != "1") {
|
||||
MessageDialog dlg(this->GetParent(), _L("Another virtual camera is running.\nBambu Studio supports only a single virtual camera.\nDo you want to stop this virtual camera?"), _L("Warning"),
|
||||
|
@ -421,6 +392,59 @@ void MediaPlayCtrl::media_proc()
|
|||
}
|
||||
}
|
||||
|
||||
bool MediaPlayCtrl::start_stream_service(bool *need_install)
|
||||
{
|
||||
#ifdef __WIN32__
|
||||
std::string file_source = data_dir() + "\\cameratools\\bambu_source.exe";
|
||||
std::string file_ffmpeg = data_dir() + "\\cameratools\\ffmpeg.exe";
|
||||
std::string file_ff_cfg = data_dir() + "\\cameratools\\ffmpeg.cfg";
|
||||
#else
|
||||
std::string file_source = data_dir() + "/cameratools/bambu_source";
|
||||
std::string file_ffmpeg = data_dir() + "/cameratools/ffmpeg";
|
||||
std::string file_ff_cfg = data_dir() + "/cameratools/ffmpeg.cfg";
|
||||
#endif
|
||||
if (!boost::filesystem::exists(file_source) || !boost::filesystem::exists(file_ffmpeg) || !boost::filesystem::exists(file_ff_cfg)) {
|
||||
if (need_install) *need_install = true;
|
||||
return false;
|
||||
}
|
||||
std::string file_url = data_dir() + "/cameratools/url.txt";
|
||||
if (!boost::filesystem::exists(file_url)) {
|
||||
boost::nowide::ofstream file(file_url);
|
||||
file.close();
|
||||
}
|
||||
wxString file_url2 = L"bambu:///camera/" + from_u8(file_url);
|
||||
file_url2.Replace("\\", "/");
|
||||
file_url2 = wxURI(file_url2).BuildURI();
|
||||
try {
|
||||
std::string configs;
|
||||
boost::filesystem::load_string_file(file_ff_cfg, configs);
|
||||
std::vector<std::string> configss;
|
||||
boost::algorithm::split(configss, configs, boost::algorithm::is_any_of("\r\n"));
|
||||
configss.erase(std::remove(configss.begin(), configss.end(), std::string()), configss.end());
|
||||
boost::process::pipe intermediate;
|
||||
boost::filesystem::path start_dir(boost::filesystem::path(data_dir()) / "plugins");
|
||||
#ifdef __WXMSW__
|
||||
start_dir = boost::filesystem::path(data_dir()) / "cameratools";
|
||||
std::string file_dll = data_dir() + "/cameratools/BambuSource.dll";
|
||||
std::string file_dll2 = data_dir() + "/plugins/BambuSource.dll";
|
||||
if (!boost::filesystem::exists(file_dll) || boost::filesystem::last_write_time(file_dll) != boost::filesystem::last_write_time(file_dll2))
|
||||
boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_option::overwrite_if_exists);
|
||||
#else
|
||||
boost::filesystem::permissions(file_source, boost::filesystem::owner_exe | boost::filesystem::add_perms);
|
||||
boost::filesystem::permissions(file_ffmpeg, boost::filesystem::owner_exe | boost::filesystem::add_perms);
|
||||
#endif
|
||||
boost::process::child process_source(file_source, file_url2.data().AsInternal(), boost::process::std_out > intermediate, detach_process(),
|
||||
boost::process::start_dir(start_dir), boost::process::limit_handles);
|
||||
boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::std_in < intermediate, detach_process(), boost::process::limit_handles);
|
||||
process_source.detach();
|
||||
process_ffmpeg.detach();
|
||||
} catch (std::exception &e) {
|
||||
BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl failed to start camera stream: " << e.what();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MediaPlayCtrl::get_stream_url(std::string *url)
|
||||
{
|
||||
#ifdef __WIN32__
|
||||
|
|
|
@ -55,7 +55,9 @@ private:
|
|||
|
||||
void media_proc();
|
||||
|
||||
bool get_stream_url(std::string * url = nullptr);
|
||||
static bool start_stream_service(bool *need_install = nullptr);
|
||||
|
||||
static bool get_stream_url(std::string *url = nullptr);
|
||||
|
||||
private:
|
||||
static constexpr wxMediaState MEDIASTATE_IDLE = (wxMediaState) 3;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue