Allow forcing maximum number of frames per segment
This commit is contained in:
parent
247a1ba33a
commit
1e0d57b503
4 changed files with 20 additions and 2 deletions
|
@ -18,6 +18,7 @@ namespace
|
|||
numeric_setting dbb("default-bottom-border", 0, 8191, 0);
|
||||
numeric_setting dlb("default-left-border", 0, 8191, 0);
|
||||
numeric_setting drb("default-right-border", 0, 8191, 0);
|
||||
numeric_setting max_frames_per_segment("max-frames-per-segment", 0, 999999999, 0);
|
||||
|
||||
class avi_avsnoop : public av_snooper
|
||||
{
|
||||
|
@ -128,6 +129,7 @@ namespace
|
|||
parameters.compression_level = (level2 > 9) ? (level2 - 9) : level2;
|
||||
parameters.audio_sampling_rate = 32000;
|
||||
parameters.keyframe_interval = (level2 > 9) ? 300 : 1;
|
||||
parameters.max_frames_per_segment = max_frames_per_segment;
|
||||
try {
|
||||
vid_dumper = new avi_avsnoop(prefix, parameters);
|
||||
} catch(std::bad_alloc& e) {
|
||||
|
|
|
@ -78,6 +78,7 @@ avidumper::avidumper(const std::string& _prefix, struct avi_info parameters)
|
|||
compression_level = parameters.compression_level;
|
||||
audio_sampling_rate = parameters.audio_sampling_rate;
|
||||
keyframe_interval = parameters.keyframe_interval;
|
||||
maxframes = parameters.max_frames_per_segment;
|
||||
|
||||
avi_open = false;
|
||||
capture_error = false;
|
||||
|
@ -215,7 +216,7 @@ void avidumper::on_frame_threaded(const uint32_t* data, uint16_t width, uint16_t
|
|||
else
|
||||
audio_get_ptr = commit_to;
|
||||
|
||||
if(segment_movi_ptr > AVI_CUTOFF - 16 * segment_chunks.size())
|
||||
if(segment_movi_ptr > AVI_CUTOFF - 16 * segment_chunks.size() || (maxframes && segment_frames > maxframes))
|
||||
fixup_avi_header_and_close();
|
||||
|
||||
uint16_t rheight = (height + 3) / 4 * 4;
|
||||
|
|
|
@ -151,6 +151,10 @@ struct avi_info
|
|||
* Interval of keyframes (WARNING: >1 gives non-keyframes which AVISource() doesn't like).
|
||||
*/
|
||||
uint32_t keyframe_interval;
|
||||
/**
|
||||
* Maximum number of frames per segement (0 => infinite)
|
||||
*/
|
||||
uint32_t max_frames_per_segment;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -197,7 +201,7 @@ public:
|
|||
* throws std::bad_alloc: Not enough memory.
|
||||
* throws std::runtime_error: Error closing dump.
|
||||
*/
|
||||
void on_end() throw(std::bad_alloc, std::runtime_error);
|
||||
void on_end() throw(std::bad_alloc, std::runtime_error);
|
||||
|
||||
/**
|
||||
* Causes current thread to become encode thread. Do not call this, the code internally uses it.
|
||||
|
@ -227,6 +231,7 @@ private:
|
|||
unsigned compression_level;
|
||||
uint32_t audio_sampling_rate;
|
||||
uint32_t keyframe_interval;
|
||||
uint32_t maxframes;
|
||||
//Previous frame.
|
||||
uint16_t pwidth;
|
||||
uint16_t pheight;
|
||||
|
|
10
manual.lyx
10
manual.lyx
|
@ -1061,6 +1061,16 @@ Set the default bottom border thickness (unless lua overrides) for dumps.
|
|||
Default is 0.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Subsection
|
||||
max-frames-per-segment
|
||||
\end_layout
|
||||
|
||||
\begin_layout Standard
|
||||
Maximum number of frames per dump segment (0 => unlimited).
|
||||
Range 0-999999999.
|
||||
Default is 0.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Section
|
||||
Lua functions
|
||||
\end_layout
|
||||
|
|
Loading…
Add table
Reference in a new issue