Vapor: add additional options for ADM export
This commit is contained in:
parent
35017245d9
commit
682f4dafd3
|
@ -111,6 +111,8 @@ public:
|
||||||
/* XXX this is only for testing */
|
/* XXX this is only for testing */
|
||||||
void set_bed_mix (bool on, std::string const& ref, int* cmap = NULL);
|
void set_bed_mix (bool on, std::string const& ref, int* cmap = NULL);
|
||||||
void set_sync_and_align (bool on);
|
void set_sync_and_align (bool on);
|
||||||
|
void set_ffoa (float);
|
||||||
|
void set_with_all_metadata (bool);
|
||||||
|
|
||||||
int set_state (XMLNode const&, int version);
|
int set_state (XMLNode const&, int version);
|
||||||
|
|
||||||
|
@ -190,8 +192,10 @@ private:
|
||||||
samplepos_t _export_end;
|
samplepos_t _export_end;
|
||||||
bool _rolling;
|
bool _rolling;
|
||||||
bool _with_bed;
|
bool _with_bed;
|
||||||
std::string _export_reference;
|
|
||||||
bool _sync_and_align;
|
bool _sync_and_align;
|
||||||
|
bool _with_all_metadata;
|
||||||
|
float _ffoa;
|
||||||
|
std::string _export_reference;
|
||||||
FixedDelay _delaybuffers;
|
FixedDelay _delaybuffers;
|
||||||
std::atomic<int> _flush;
|
std::atomic<int> _flush;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1923,6 +1923,8 @@ LuaBindings::common (lua_State* L)
|
||||||
.deriveWSPtrClass <SurroundReturn, Processor> ("SurroundReturn")
|
.deriveWSPtrClass <SurroundReturn, Processor> ("SurroundReturn")
|
||||||
.addFunction ("set_bed_mix", &SurroundReturn::set_bed_mix)
|
.addFunction ("set_bed_mix", &SurroundReturn::set_bed_mix)
|
||||||
.addFunction ("set_sync_and_align", &SurroundReturn::set_sync_and_align)
|
.addFunction ("set_sync_and_align", &SurroundReturn::set_sync_and_align)
|
||||||
|
.addFunction ("set_ffoa", &SurroundReturn::set_ffoa)
|
||||||
|
.addFunction ("set_with_all_metadata", &SurroundReturn::set_with_all_metadata)
|
||||||
.addFunction ("have_au_renderer", &SurroundReturn::have_au_renderer)
|
.addFunction ("have_au_renderer", &SurroundReturn::have_au_renderer)
|
||||||
.addFunction ("load_au_preset", &SurroundReturn::load_au_preset)
|
.addFunction ("load_au_preset", &SurroundReturn::load_au_preset)
|
||||||
.addFunction ("set_au_param", &SurroundReturn::set_au_param)
|
.addFunction ("set_au_param", &SurroundReturn::set_au_param)
|
||||||
|
|
|
@ -92,6 +92,8 @@ SurroundReturn::SurroundReturn (Session& s, Route* r)
|
||||||
, _rolling (false)
|
, _rolling (false)
|
||||||
, _with_bed (false)
|
, _with_bed (false)
|
||||||
, _sync_and_align (false)
|
, _sync_and_align (false)
|
||||||
|
, _with_all_metadata (false)
|
||||||
|
, _ffoa (0)
|
||||||
{
|
{
|
||||||
#if !(defined(LV2_EXTENDED) && defined(HAVE_LV2_1_10_0))
|
#if !(defined(LV2_EXTENDED) && defined(HAVE_LV2_1_10_0))
|
||||||
throw failed_constructor ();
|
throw failed_constructor ();
|
||||||
|
@ -357,6 +359,7 @@ void
|
||||||
SurroundReturn::set_bed_mix (bool on, std::string const& ref, int* cmap)
|
SurroundReturn::set_bed_mix (bool on, std::string const& ref, int* cmap)
|
||||||
{
|
{
|
||||||
_with_bed = on;
|
_with_bed = on;
|
||||||
|
_with_all_metadata = on;
|
||||||
|
|
||||||
if (!_with_bed) {
|
if (!_with_bed) {
|
||||||
_export_reference.clear ();
|
_export_reference.clear ();
|
||||||
|
@ -385,6 +388,18 @@ SurroundReturn::set_sync_and_align (bool on)
|
||||||
_sync_and_align = on;
|
_sync_and_align = on;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SurroundReturn::set_ffoa (float ffoa)
|
||||||
|
{
|
||||||
|
_ffoa = ffoa;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SurroundReturn::set_with_all_metadata (bool on)
|
||||||
|
{
|
||||||
|
_with_all_metadata = on;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SurroundReturn::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sample, double speed, pframes_t nframes, bool)
|
SurroundReturn::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sample, double speed, pframes_t nframes, bool)
|
||||||
{
|
{
|
||||||
|
@ -425,7 +440,8 @@ SurroundReturn::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_
|
||||||
latency_changed ();
|
latency_changed ();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool with_bed = _with_bed;
|
bool with_bed = _with_bed;
|
||||||
|
bool with_all_metadata = _with_all_metadata;
|
||||||
|
|
||||||
samplecnt_t latency = effective_latency ();
|
samplecnt_t latency = effective_latency ();
|
||||||
|
|
||||||
|
@ -501,12 +517,18 @@ SurroundReturn::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
samplecnt_t pos = std::min (timepos_t (start).distance (next_event.when).samples (), (samplecnt_t)nframes - 1);
|
samplecnt_t pos = std::min (timepos_t (start).distance (next_event.when).samples (), (samplecnt_t)nframes - 1);
|
||||||
evaluate (id, p, next_event.when, pos, with_bed);
|
evaluate (id, p, next_event.when, pos, with_all_metadata);
|
||||||
next = next_event.when;
|
next = next_event.when;
|
||||||
}
|
}
|
||||||
/* inform live renderer */
|
/* inform live renderer */
|
||||||
if (!found_event && !_exporting) {
|
if (!found_event) {
|
||||||
evaluate (id, p, start, 0);
|
if (p->pan_pos_x->list ()->interpolation () != Evoral::ControlList::Discrete || !_exporting) {
|
||||||
|
evaluate (id, p, start, 0, with_all_metadata);
|
||||||
|
/* send event at export end */
|
||||||
|
if (_exporting && _export_end - 1 >= start_sample && _export_end - 1 < end_sample) {
|
||||||
|
evaluate (id, p, timepos_t (_export_end + latency - 1), _export_end - start_sample - 1, with_all_metadata);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -714,7 +736,7 @@ void
|
||||||
SurroundReturn::maybe_send_metadata (size_t id, pframes_t sample, pan_t const v[num_pan_parameters], bool force)
|
SurroundReturn::maybe_send_metadata (size_t id, pframes_t sample, pan_t const v[num_pan_parameters], bool force)
|
||||||
{
|
{
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
for (size_t i = 0; i < (_with_bed ? num_pan_parameters : 5); ++i) {
|
for (size_t i = 0; i < (_with_all_metadata ? num_pan_parameters : 5); ++i) {
|
||||||
if (_current_value[id][i] != v[i]) {
|
if (_current_value[id][i] != v[i]) {
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
@ -745,7 +767,7 @@ SurroundReturn::maybe_send_metadata (size_t id, pframes_t sample, pan_t const v[
|
||||||
lv2_atom_forge_key (&_forge, urids.surr_Snap);
|
lv2_atom_forge_key (&_forge, urids.surr_Snap);
|
||||||
lv2_atom_forge_bool (&_forge, v[4] > 0 ? true : false);
|
lv2_atom_forge_bool (&_forge, v[4] > 0 ? true : false);
|
||||||
|
|
||||||
if (_with_bed) {
|
if (_with_all_metadata) {
|
||||||
lv2_atom_forge_key (&_forge, urids.surr_ElevEn);
|
lv2_atom_forge_key (&_forge, urids.surr_ElevEn);
|
||||||
lv2_atom_forge_bool (&_forge, v[5] > 0 ? true : false);
|
lv2_atom_forge_bool (&_forge, v[5] > 0 ? true : false);
|
||||||
lv2_atom_forge_key (&_forge, urids.surr_Ramp);
|
lv2_atom_forge_key (&_forge, urids.surr_Ramp);
|
||||||
|
@ -807,7 +829,7 @@ SurroundReturn::setup_export (std::string const& fn, samplepos_t ss, samplepos_t
|
||||||
bool have_ref = !_export_reference.empty () && Glib::file_test (_export_reference, Glib::FileTest (Glib::FILE_TEST_EXISTS | Glib::FILE_TEST_IS_REGULAR));
|
bool have_ref = !_export_reference.empty () && Glib::file_test (_export_reference, Glib::FileTest (Glib::FILE_TEST_EXISTS | Glib::FILE_TEST_IS_REGULAR));
|
||||||
|
|
||||||
float content_start = ss / (float) _session.nominal_sample_rate ();
|
float content_start = ss / (float) _session.nominal_sample_rate ();
|
||||||
float content_ffoa = 0;
|
float content_ffoa = _ffoa;
|
||||||
float content_fps = 30;
|
float content_fps = 30;
|
||||||
|
|
||||||
switch (_session.config.get_timecode_format()) {
|
switch (_session.config.get_timecode_format()) {
|
||||||
|
|
Loading…
Reference in New Issue