adapt AudioEngine to new AudioBackend API
This commit is contained in:
parent
589ef168c1
commit
fdda8127ef
@ -83,8 +83,8 @@ public:
|
||||
* just forward to a backend implementation.
|
||||
*/
|
||||
|
||||
int start ();
|
||||
int stop ();
|
||||
int start (bool for_latency_measurement=false);
|
||||
int stop (bool for_latency_measurement=false);
|
||||
int pause ();
|
||||
int freewheel (bool start_stop);
|
||||
float get_cpu_load() const ;
|
||||
@ -194,7 +194,7 @@ public:
|
||||
|
||||
MTDM* mtdm();
|
||||
int prepare_for_latency_measurement ();
|
||||
void start_latency_detection ();
|
||||
int start_latency_detection ();
|
||||
void stop_latency_detection ();
|
||||
void set_latency_input_port (const std::string&);
|
||||
void set_latency_output_port (const std::string&);
|
||||
@ -229,6 +229,7 @@ public:
|
||||
std::string _latency_input_name;
|
||||
std::string _latency_output_name;
|
||||
framecnt_t _latency_signal_latency;
|
||||
bool _stopped_for_latency;
|
||||
bool _started_for_latency;
|
||||
bool _in_destructor;
|
||||
|
||||
|
@ -80,7 +80,7 @@ AudioEngine::AudioEngine ()
|
||||
, _latency_output_port (0)
|
||||
, _latency_flush_frames (0)
|
||||
, _latency_signal_latency (0)
|
||||
, _started_for_latency (false)
|
||||
, _stopped_for_latency (false)
|
||||
, _in_destructor (false)
|
||||
{
|
||||
g_atomic_int_set (&m_meter_exit, 0);
|
||||
@ -596,7 +596,7 @@ AudioEngine::set_backend (const std::string& name, const std::string& arg1, cons
|
||||
/* BACKEND PROXY WRAPPERS */
|
||||
|
||||
int
|
||||
AudioEngine::start ()
|
||||
AudioEngine::start (bool for_latency)
|
||||
{
|
||||
if (!_backend) {
|
||||
return -1;
|
||||
@ -609,7 +609,7 @@ AudioEngine::start ()
|
||||
_processed_frames = 0;
|
||||
last_monitor_check = 0;
|
||||
|
||||
if (_backend->start()) {
|
||||
if (_backend->start (for_latency)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -625,7 +625,7 @@ AudioEngine::start ()
|
||||
|
||||
start_metering_thread ();
|
||||
|
||||
if (!_started_for_latency) {
|
||||
if (!for_latency) {
|
||||
Running(); /* EMIT SIGNAL */
|
||||
}
|
||||
|
||||
@ -633,7 +633,7 @@ AudioEngine::start ()
|
||||
}
|
||||
|
||||
int
|
||||
AudioEngine::stop ()
|
||||
AudioEngine::stop (bool for_latency)
|
||||
{
|
||||
if (!_backend) {
|
||||
return 0;
|
||||
@ -654,7 +654,10 @@ AudioEngine::stop ()
|
||||
stop_metering_thread ();
|
||||
|
||||
Port::PortDrop ();
|
||||
Stopped (); /* EMIT SIGNAL */
|
||||
|
||||
if (!for_latency) {
|
||||
Stopped (); /* EMIT SIGNAL */
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1018,7 +1021,10 @@ AudioEngine::halted_callback (const char* why)
|
||||
_running = false;
|
||||
|
||||
Port::PortDrop (); /* EMIT SIGNAL */
|
||||
Halted (why); /* EMIT SIGNAL */
|
||||
|
||||
if (!_started_for_latency) {
|
||||
Halted (why); /* EMIT SIGNAL */
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
@ -1047,23 +1053,26 @@ AudioEngine::mtdm()
|
||||
int
|
||||
AudioEngine::prepare_for_latency_measurement ()
|
||||
{
|
||||
if (!running()) {
|
||||
_started_for_latency = true;
|
||||
if (running()) {
|
||||
_stopped_for_latency = true;
|
||||
stop (true);
|
||||
}
|
||||
|
||||
if (start()) {
|
||||
_started_for_latency = false;
|
||||
return -1;
|
||||
}
|
||||
if (start (true)) {
|
||||
_started_for_latency = true;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
int
|
||||
AudioEngine::start_latency_detection ()
|
||||
{
|
||||
if (prepare_for_latency_measurement ()) {
|
||||
return;
|
||||
if (!running()) {
|
||||
if (prepare_for_latency_measurement ()) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
PortEngine& pe (port_engine());
|
||||
@ -1077,27 +1086,32 @@ AudioEngine::start_latency_detection ()
|
||||
PortEngine::PortHandle* in = pe.get_port_by_name (_latency_input_name);
|
||||
|
||||
if (!out || !in) {
|
||||
return;
|
||||
stop (true);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* create the ports we will use to read/write data */
|
||||
|
||||
if ((_latency_output_port = pe.register_port ("latency_out", DataType::AUDIO, IsOutput)) == 0) {
|
||||
return;
|
||||
stop (true);
|
||||
return -1;
|
||||
}
|
||||
if (pe.connect (_latency_output_port, _latency_output_name)) {
|
||||
pe.unregister_port (_latency_output_port);
|
||||
return;
|
||||
stop (true);
|
||||
return -1;
|
||||
}
|
||||
|
||||
const string portname ("latency_in");
|
||||
if ((_latency_input_port = pe.register_port (portname, DataType::AUDIO, IsInput)) == 0) {
|
||||
pe.unregister_port (_latency_output_port);
|
||||
return;
|
||||
stop (true);
|
||||
return -1;
|
||||
}
|
||||
if (pe.connect (_latency_input_name, make_port_name_non_relative (portname))) {
|
||||
pe.unregister_port (_latency_output_port);
|
||||
return;
|
||||
stop (true);
|
||||
return -1;
|
||||
}
|
||||
|
||||
LatencyRange lr;
|
||||
@ -1113,6 +1127,7 @@ AudioEngine::start_latency_detection ()
|
||||
_measuring_latency = true;
|
||||
_latency_flush_frames = samples_per_cycle();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
@ -1128,9 +1143,15 @@ AudioEngine::stop_latency_detection ()
|
||||
port_engine().unregister_port (_latency_input_port);
|
||||
_latency_input_port = 0;
|
||||
}
|
||||
if (_started_for_latency) {
|
||||
stop ();
|
||||
|
||||
stop (true);
|
||||
|
||||
if (_stopped_for_latency) {
|
||||
start ();
|
||||
}
|
||||
|
||||
_stopped_for_latency = false;
|
||||
_started_for_latency = false;
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user