src/: fail --load-tape-create-video if video encoding fails.
Also fail video encoding if output file already exists.
This commit is contained in:
parent
dd7cbf56cc
commit
dd9f4ac890
3 changed files with 45 additions and 18 deletions
|
@ -1783,13 +1783,15 @@ bool loadTapeContinuous(
|
||||||
{
|
{
|
||||||
continuous->m_replay_fixed_dt_prev = -1;
|
continuous->m_replay_fixed_dt_prev = -1;
|
||||||
}
|
}
|
||||||
if (continuous->m_replay_create_video)
|
|
||||||
|
bool ok = true;
|
||||||
|
if (ok && continuous->m_replay_create_video)
|
||||||
{
|
{
|
||||||
SG_LOG(SG_GENERAL, SG_ALERT, "Replaying with create-video");
|
SG_LOG(SG_GENERAL, SG_ALERT, "Replaying with create-video");
|
||||||
auto view_mgr = globals->get_subsystem<FGViewMgr>();
|
auto view_mgr = globals->get_subsystem<FGViewMgr>();
|
||||||
if (view_mgr)
|
if (view_mgr)
|
||||||
{
|
{
|
||||||
view_mgr->video_start(
|
ok = view_mgr->video_start(
|
||||||
"" /*name*/,
|
"" /*name*/,
|
||||||
"" /*codec*/,
|
"" /*codec*/,
|
||||||
-1 /*quality*/,
|
-1 /*quality*/,
|
||||||
|
@ -1797,9 +1799,14 @@ bool loadTapeContinuous(
|
||||||
0 /*bitrate*/
|
0 /*bitrate*/
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SG_LOG(SG_GENERAL, SG_ALERT, "Cannot handle create_video=true because FGViewMgr not available");
|
||||||
|
ok = false;
|
||||||
}
|
}
|
||||||
replay_internal.start(true /*new_tape*/);
|
}
|
||||||
return true;
|
if (ok) ok = replay_internal.start(true /*new_tape*/);
|
||||||
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Read a flight recorder tape with given filename from disk.
|
/** Read a flight recorder tape with given filename from disk.
|
||||||
|
|
|
@ -366,7 +366,7 @@ FGViewMgr::add_view( flightgear::View * v )
|
||||||
v->init();
|
v->init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void FGViewMgr::video_start(
|
bool FGViewMgr::video_start(
|
||||||
const std::string& name_in,
|
const std::string& name_in,
|
||||||
const std::string& codec_in,
|
const std::string& codec_in,
|
||||||
double quality,
|
double quality,
|
||||||
|
@ -413,6 +413,11 @@ void FGViewMgr::video_start(
|
||||||
SGPath path = SGPath(fgGetString("/sim/video/directory"));
|
SGPath path = SGPath(fgGetString("/sim/video/directory"));
|
||||||
SGPath path_link = path;
|
SGPath path_link = path;
|
||||||
path.append(name);
|
path.append(name);
|
||||||
|
if (path.exists())
|
||||||
|
{
|
||||||
|
videoEncodingError("Video encoding failure, output file already exists: " + path.str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
path_link.append(name_link);
|
path_link.append(name_link);
|
||||||
path_link.remove();
|
path_link.remove();
|
||||||
bool ok = path_link.makeLink(path.file());
|
bool ok = path_link.makeLink(path.file());
|
||||||
|
@ -464,7 +469,9 @@ void FGViewMgr::video_start(
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
videoEncodingError(e.what());
|
videoEncodingError(e.what());
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FGViewMgr::video_stop()
|
void FGViewMgr::video_stop()
|
||||||
|
|
|
@ -94,25 +94,38 @@ public:
|
||||||
|
|
||||||
void add_view( flightgear::View * v );
|
void add_view( flightgear::View * v );
|
||||||
|
|
||||||
// Start video encoding to <path>.
|
// Start video encoding of main window.
|
||||||
//
|
//
|
||||||
// If <name> is "" we generate a name containing current date and time.
|
// name
|
||||||
//
|
// Name of output file or "" to generate a name containing current
|
||||||
// If <codec> is "" we use /sim/video/codec.
|
// date and time and /sim/video/container. List of supported
|
||||||
//
|
// containers can be found with 'ffmpeg -formats'.
|
||||||
// If quality is -1 we use /sim/video/quality; similarly for speed. If
|
// codec_name
|
||||||
// bitrate is 0 we use /sim/video/bitrate.
|
// Name of codec or "" to use /sim/video/codec. Passed to
|
||||||
|
// avcodec_find_encoder_by_name(). List of supported codecs can be
|
||||||
|
// found with 'ffmpeg -codecs'.
|
||||||
|
// quality
|
||||||
|
// Encoding quality in range 0..1 or -1 to use /sim/video/quality.
|
||||||
|
// speed:
|
||||||
|
// Encoding speed in range 0..1 or -1 to use /sim/video/speed.
|
||||||
|
// bitrate
|
||||||
|
// Target bitratae in bits/sec or -1 to use /sim/video/bitrate.
|
||||||
//
|
//
|
||||||
// We show popup warning if values are out of range - quality and speed
|
// We show popup warning if values are out of range - quality and speed
|
||||||
// must be -1 or 0-1, bitrate must be >= 0.
|
// must be -1 or 0-1, bitrate must be >= 0.
|
||||||
//
|
//
|
||||||
void video_start(
|
// Returns false if we fail to start video encoding.
|
||||||
const std::string& name,
|
//
|
||||||
const std::string& codec,
|
bool video_start(
|
||||||
double quality,
|
const std::string& name="",
|
||||||
double speed,
|
const std::string& codec="",
|
||||||
int bitrate
|
double quality=-1,
|
||||||
|
double speed=-1,
|
||||||
|
int bitrate=0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Stop video encoding of main window.
|
||||||
|
//
|
||||||
void video_stop();
|
void video_stop();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in a new issue