summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-03-31 17:08:21 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-03-31 17:29:42 -0400
commit458fc3ad75bd55fa27befbd29b22d63eecf9347a (patch)
tree69e31978e756b4964c20d126005eca7c68ddb73b
parent83001e7e5251c33308d42786e71bbce4f34efb8c (diff)
manually merge current version of WavesMidiDevice::{open,close}()
-rw-r--r--libs/backends/wavesaudio/waves_midi_device.cc182
1 files changed, 120 insertions, 62 deletions
diff --git a/libs/backends/wavesaudio/waves_midi_device.cc b/libs/backends/wavesaudio/waves_midi_device.cc
index 342e1293a1..3819981327 100644
--- a/libs/backends/wavesaudio/waves_midi_device.cc
+++ b/libs/backends/wavesaudio/waves_midi_device.cc
@@ -68,74 +68,132 @@ WavesMidiDevice::~WavesMidiDevice ()
int
WavesMidiDevice::open (PmTimeProcPtr time_proc, void* time_info)
{
- DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::open (): %1", name ()));
-
- if (is_input () ) {
- std::cout << "WavesMidiDevice::open (): INPUT" << _pm_input_id << "-[" << name () << "]!" << std::endl;
- if (!_input_queue) {
- _input_queue = Pm_QueueCreate (QUEUE_LENGTH, sizeof (const WavesMidiEvent*));
- if (NULL == _input_queue) {
- std::cerr << "WavesMidiDevice::open (): _input_queue = Pm_QueueCreate () failed for " << _pm_input_id << "-[" << name () << "]!" << std::endl;
- return -1;
- }
- }
-
- if (!_input_pm_stream) {
- if (pmNoError != Pm_OpenInput (&_input_pm_stream,
- _pm_input_id,
- NULL,
- 1024,
- time_proc,
- time_info)) {
- char* err_msg = new char[256];
- Pm_GetHostErrorText(err_msg, 256);
- std::cerr << "WavesMidiDevice::open (): Pm_OpenInput () failed for " << _pm_input_id << "-[" << name () << "]!" << std::endl;
- std::cerr << "Error: " << err_msg << std::endl;
- _input_pm_stream = NULL;
- _pm_input_id = pmNoDevice;
- close ();
- return -1;
- }
- }
- }
+ DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::open (): %1", name ()));
+
+ if (is_input () ) {
+ // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::open (): INPUT" << _pm_input_id << "-[" << name () << "]" << std::endl;
+
+ if (!_input_pm_stream) {
+ // create queue
+ if (!_input_queue) {
+ // COMMENTED DBG LOGS */ std::cout << " going to Pm_QueueCreate for INPUT: " << std::endl;
+ _input_queue = Pm_QueueCreate (QUEUE_LENGTH, sizeof (const WavesMidiEvent*));
+ // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl;
+ if (NULL == _input_queue) {
+ std::cerr << "WavesMidiDevice::open (): _input_queue = Pm_QueueCreate () failed for " << _pm_input_id << "-[" << name () << "]!" << std::endl;
+ return -1;
+ }
+ }
+ // create stream
+ // COMMENTED DBG LOGS */ std::cout << " going to Pm_OpenInput : " << std::endl;
+ if (pmNoError != Pm_OpenInput (&_input_pm_stream,
+ _pm_input_id,
+ NULL,
+ 1024,
+ time_proc,
+ time_info)) {
+ // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl;
+ char* err_msg = new char[256];
+ Pm_GetHostErrorText(err_msg, 256);
+ std::cerr << "WavesMidiDevice::open (): Pm_OpenInput () failed for " << _pm_input_id << "-[" << name () << "]!" << std::endl;
+ std::cerr << " Port Midi Host Error: " << err_msg << std::endl;
+ close ();
+ return -1;
+ }
+ // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl;
+ }
+ }
- if (is_output () ) {
- std::cout << "WavesMidiDevice::open (): OUTPUT" << _pm_output_id << "-[" << name () << "]!" << std::endl;
-
- if (!_output_queue) {
- _output_queue = Pm_QueueCreate (QUEUE_LENGTH, sizeof (const WavesMidiEvent*));
- if (NULL == _output_queue) {
- std::cerr << "WavesMidiDevice::open (): _output_queue = Pm_QueueCreate () failed for " << _pm_output_id << "-[" << name () << "]!" << std::endl;
- return -1;
- }
- }
-
- if (!_output_pm_stream) {
- if (pmNoError != Pm_OpenOutput (&_output_pm_stream,
- _pm_output_id,
- NULL,
- 1024,
- time_proc,
- time_info,
- LATENCY)) {
- char* err_msg = new char[256];
- Pm_GetHostErrorText(err_msg, 256);
- std::cerr << "WavesMidiDevice::open (): Pm_OpenOutput () failed for " << _pm_output_id << "-[" << name () << "]!" << std::endl;
- std::cerr << "Error: " << err_msg << std::endl;
- _output_pm_stream = NULL;
- _pm_output_id = pmNoDevice;
- return -1;
- }
- }
- }
+ if (is_output () ) {
+ // COMMENTED DBG LOGS */ std::cout << "WavesMidiDevice::open (): OUTPUT" << _pm_output_id << "-[" << name () << "]" << std::endl;
- return 0;
+ if (!_output_pm_stream) {
+ // create queue
+ if (!_output_queue) {
+ // COMMENTED DBG LOGS */ std::cout << " going to Pm_QueueCreate for OUTPUT : " << std::endl;
+ _output_queue = Pm_QueueCreate (QUEUE_LENGTH, sizeof (const WavesMidiEvent*));
+ // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl;
+ if (NULL == _output_queue) {
+ std::cerr << "WavesMidiDevice::open (): _output_queue = Pm_QueueCreate () failed for " << _pm_output_id << "-[" << name () << "]!" << std::endl;
+ return -1;
+ }
+ }
+ // create stream
+ // COMMENTED DBG LOGS */ std::cout << " going to Pm_OpenOutput : " << std::endl;
+ if (pmNoError != Pm_OpenOutput (&_output_pm_stream,
+ _pm_output_id,
+ NULL,
+ 1024,
+ time_proc,
+ time_info,
+ LATENCY)) {
+ // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl;
+ char* err_msg = new char[256];
+ Pm_GetHostErrorText(err_msg, 256);
+ std::cerr << "WavesMidiDevice::open (): Pm_OpenOutput () failed for " << _pm_output_id << "-[" << name () << "]!" << std::endl;
+ std::cerr << " Port Midi Host Error: " << err_msg << std::endl;
+ close ();
+ return -1;
+ }
+ // COMMENTED DBG LOGS */ std::cout << " DONE : " << std::endl;
+ }
+ }
+ return 0;
}
-
-void
WavesMidiDevice::close ()
{
+ DEBUG_TRACE (DEBUG::WavesMIDI, string_compose ("WavesMidiDevice::close (): %1\n", name ()));
+ WavesMidiEvent *waves_midi_event;
+
+ // save _input_pm_stream and _output_pm_stream to local buf
+ PmStream* input_pm_stream = _input_pm_stream;
+ PmStream* output_pm_stream = _output_pm_stream;
+ _input_pm_stream = _output_pm_stream = NULL;
+
+//input
+ if (input_pm_stream) {
+ // close stream
+ PmError err = Pm_Close (input_pm_stream);
+ if (err != pmNoError) {
+ char* err_msg = new char[256];
+ Pm_GetHostErrorText(err_msg, 256);
+ std::cerr << "WavesMidiDevice::close (): Pm_Close (input_pm_stream) failed (" << err << ") for " << input_pm_stream << "-[" << name () << "]!" << std::endl;
+ std::cerr << " Port Midi Host Error: " << err_msg << std::endl;
+ }
+ _pm_input_id = pmNoDevice;
+ }
+
+ // close queue
+ if (_input_queue) {
+ while (1 == Pm_Dequeue (_input_queue, &waves_midi_event)) {
+ delete waves_midi_event; // XXX possible dup free in ~WavesMidiBuffer() (?)
+ }
+ Pm_QueueDestroy (_input_queue);
+ _input_queue = NULL;
+ }
+
+//output
+ if ( output_pm_stream ) {
+ // close stream
+ PmError err = Pm_Close (output_pm_stream);
+ if (err != pmNoError) {
+ char* err_msg = new char[256];
+ Pm_GetHostErrorText(err_msg, 256);
+ std::cerr << "WavesMidiDevice::close (): Pm_Close (output_pm_stream) failed (" << err << ") for " << output_pm_stream << "-[" << name () << "]!" << std::endl;
+ std::cerr << " Port Midi Host Error: " << err_msg << std::endl;
+ }
+ _pm_output_id = pmNoDevice;
+ }
+
+ // close queue
+ if (_output_queue) {
+ while (1 == Pm_Dequeue (_output_queue, &waves_midi_event)) {
+ delete waves_midi_event; // XXX possible dup free in ~WavesMidiBuffer() (?)
+ }
+ Pm_QueueDestroy (_output_queue);
+ _output_queue = NULL;
+ }
}
void