Skip to content

Commit

Permalink
manager: openDefaultInput/Output is now callable multiple times.
Browse files Browse the repository at this point in the history
  • Loading branch information
atsushieno committed Apr 27, 2024
1 parent d384428 commit e27bec4
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#include "aap/core/aap_midi2_helper.h"
#include "AAPMidiEventTranslator.h"

aap::AAPMidiEventTranslator::AAPMidiEventTranslator(RemotePluginInstance* instance, int32_t midiBufferSize, int32_t initialMidiProtocol) :
aap::AAPMidiEventTranslator::AAPMidiEventTranslator(RemotePluginInstance* instance, int32_t midiBufferSize, int32_t initialMidiTransportProtocol) :
instance(instance),
midi_buffer_size(midiBufferSize),
conversion_helper_buffer_size(AAP_MAX_EXTENSION_URI_SIZE + AAP_MAX_EXTENSION_DATA_SIZE + 16),
receiver_midi_protocol(initialMidiProtocol) {
receiver_midi_transport_protocol(initialMidiTransportProtocol) {
translation_buffer = (uint8_t*) calloc(1, midi_buffer_size);
conversion_helper_buffer = (uint8_t*) calloc(1, conversion_helper_buffer_size);
}
Expand Down Expand Up @@ -131,14 +131,14 @@ size_t aap::AAPMidiEventTranslator::translateMidiBufferIfNeeded(uint8_t* bytes,
// https://issuetracker.google.com/issues/227690391
auto protocol = detectEndpointConfigurationMessage(bytes, offset, length);
if (protocol != 0) {
receiver_midi_protocol = protocol;
receiver_midi_transport_protocol = protocol;
// Do not process the rest, it should contain only the Stream Configuration message
// (Not an official standard requirement, but the legacy Set New Protocol message was
// defined that there must be some rational wait time until the next messages.)
return 0;
}

if (receiver_midi_protocol != CMIDI2_PROTOCOL_TYPE_MIDI2) {
if (receiver_midi_transport_protocol != CMIDI2_PROTOCOL_TYPE_MIDI2) {
// It receives MIDI1 bytestream. We translate to MIDI2 UMPs.
cmidi2_midi_conversion_context context;
cmidi2_midi_conversion_context_initialize(&context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ namespace aap {
int32_t conversion_helper_buffer_size;

// MIDI protocol type of the messages it receives via JNI
int32_t receiver_midi_protocol;
int32_t receiver_midi_transport_protocol;
int32_t current_mapping_policy{AAP_PARAMETERS_MAPPING_POLICY_NONE};

int32_t detectEndpointConfigurationMessage(uint8_t* bytes, size_t offset, size_t length);

public:
explicit AAPMidiEventTranslator(RemotePluginInstance* instance, int32_t midiBufferSize = AAP_MANAGER_MIDI_BUFFER_SIZE, int32_t initialMidiProtocol = CMIDI2_PROTOCOL_TYPE_MIDI2);
explicit AAPMidiEventTranslator(RemotePluginInstance* instance, int32_t midiBufferSize = AAP_MANAGER_MIDI_BUFFER_SIZE, int32_t initialMidiTransportProtocol = CMIDI2_PROTOCOL_TYPE_MIDI2);
~AAPMidiEventTranslator();

void setPlugin(RemotePluginInstance* pluginInstance);
Expand Down
4 changes: 2 additions & 2 deletions androidaudioplugin-manager/src/main/cpp/AudioDeviceManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ namespace aap {
// This needs to be implemented for each platform
static AudioDeviceManager* getInstance();

virtual AudioDeviceIn* openDefaultInput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) = 0;
virtual AudioDeviceOut* openDefaultOutput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) = 0;
virtual AudioDeviceIn* ensureDefaultInputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) = 0;
virtual AudioDeviceOut* ensureDefaultOutputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) = 0;
};
}

Expand Down
8 changes: 6 additions & 2 deletions androidaudioplugin-manager/src/main/cpp/AudioGraph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,12 @@ void aap::SimpleLinearAudioGraph::pauseProcessing() {

aap::SimpleLinearAudioGraph::SimpleLinearAudioGraph(int32_t sampleRate, uint32_t framesPerCallback, int32_t channelsInAudioBus) :
AudioGraph(sampleRate, framesPerCallback, channelsInAudioBus),
input(this, AudioDeviceManager::getInstance()->openDefaultInput(sampleRate, framesPerCallback, channelsInAudioBus)),
output(this, AudioDeviceManager::getInstance()->openDefaultOutput(sampleRate, framesPerCallback, channelsInAudioBus)),
input(this, AudioDeviceManager::getInstance()->ensureDefaultInputOpened(sampleRate,
framesPerCallback,
channelsInAudioBus)),
output(this, AudioDeviceManager::getInstance()->ensureDefaultOutputOpened(sampleRate,
framesPerCallback,
channelsInAudioBus)),
plugin(this, nullptr),
audio_data(this),
midi_input(this, nullptr, sampleRate, framesPerCallback, CMIDI2_PROTOCOL_TYPE_MIDI2, AAP_PLUGIN_PLAYER_DEFAULT_MIDI_RING_BUFFER_SIZE),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,18 +87,16 @@ namespace aap {
//--------

aap::AudioDeviceIn *
aap::OboeAudioDeviceManager::openDefaultInput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) {
// FIXME: this should not be created twice
//assert(input == nullptr);
input = std::make_shared<OboeAudioDeviceIn>(sampleRate, framesPerCallback, numChannels);
aap::OboeAudioDeviceManager::ensureDefaultInputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) {
if (input == nullptr)
input = std::make_shared<OboeAudioDeviceIn>(sampleRate, framesPerCallback, numChannels);
return input.get();
}

aap::AudioDeviceOut *
aap::OboeAudioDeviceManager::openDefaultOutput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) {
// FIXME: this should not be created twice
//assert(output == nullptr);
output = std::make_shared<OboeAudioDeviceOut>(sampleRate, framesPerCallback, numChannels);
aap::OboeAudioDeviceManager::ensureDefaultOutputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) {
if (output == nullptr)
output = std::make_shared<OboeAudioDeviceOut>(sampleRate, framesPerCallback, numChannels);
return output.get();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ namespace aap {
class OboeAudioDeviceOut;

class OboeAudioDeviceManager : public AudioDeviceManager {
uint32_t frames_per_callback;
uint32_t frames_per_callback{};
std::shared_ptr<OboeAudioDeviceIn> input{nullptr};
std::shared_ptr<OboeAudioDeviceOut> output{nullptr};

public:
OboeAudioDeviceManager() {}
AudioDeviceIn * openDefaultInput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override;
OboeAudioDeviceManager() = default;
AudioDeviceIn * ensureDefaultInputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override;

AudioDeviceOut * openDefaultOutput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override;
AudioDeviceOut * ensureDefaultOutputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override;
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ namespace aap {
output(std::make_shared<VirtualAudioDeviceOut>()) {
}

AudioDeviceIn * openDefaultInput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override { return input.get(); }
AudioDeviceOut * openDefaultOutput(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override { return output.get(); }
AudioDeviceIn * ensureDefaultInputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override { return input.get(); }
AudioDeviceOut * ensureDefaultOutputOpened(int32_t sampleRate, int32_t framesPerCallback, int32_t numChannels) override { return output.get(); }
};

}
Expand Down

0 comments on commit e27bec4

Please sign in to comment.