Merge changes from topic "presubmit-am-3d6bc7b759b74a9f86eef12738149b12" into tm-mainline-prod

* changes:
  [automerge] USB MIDI: Create encoder per output port 2p: d338c3c8f8
  USB MIDI: Create encoder per output port
This commit is contained in:
Robert Wu
2022-03-24 22:23:24 +00:00
committed by Android (Google) Code Review
2 changed files with 20 additions and 5 deletions

View File

@@ -84,7 +84,7 @@ public final class UsbDirectMidiDevice implements Closeable {
private final Object mLock = new Object();
private boolean mIsOpen;
private final UsbMidiPacketConverter mUsbMidiPacketConverter = new UsbMidiPacketConverter();
private UsbMidiPacketConverter mUsbMidiPacketConverter;
private final MidiDeviceServer.Callback mCallback = new MidiDeviceServer.Callback() {
@@ -264,6 +264,11 @@ public final class UsbDirectMidiDevice implements Closeable {
Log.d(TAG, "openLocked()");
UsbManager manager = mContext.getSystemService(UsbManager.class);
// Converting from raw MIDI to USB MIDI is not thread-safe.
// UsbMidiPacketConverter creates a converter from raw MIDI
// to USB MIDI for each USB output.
mUsbMidiPacketConverter = new UsbMidiPacketConverter(mNumOutputs);
mUsbDeviceConnections = new ArrayList<UsbDeviceConnection>(mUsbInterfaces.size());
mInputUsbEndpoints = new ArrayList<ArrayList<UsbEndpoint>>(mUsbInterfaces.size());
mOutputUsbEndpoints = new ArrayList<ArrayList<UsbEndpoint>>(mUsbInterfaces.size());
@@ -415,7 +420,7 @@ public final class UsbDirectMidiDevice implements Closeable {
} else {
convertedArray =
mUsbMidiPacketConverter.rawMidiToUsbMidi(
event.data, event.count);
event.data, event.count, portFinal);
}
if (DEBUG) {
@@ -518,6 +523,8 @@ public final class UsbDirectMidiDevice implements Closeable {
mInputUsbEndpoints = null;
mOutputUsbEndpoints = null;
mUsbMidiPacketConverter = null;
mIsOpen = false;
}

View File

@@ -74,8 +74,15 @@ public class UsbMidiPacketConverter {
private static final byte SYSEX_START_EXCLUSIVE = (byte) 0xF0;
private static final byte SYSEX_END_EXCLUSIVE = (byte) 0xF7;
private UsbMidiEncoder mUsbMidiEncoder = new UsbMidiEncoder();
private UsbMidiDecoder mUsbMidiDecoder = new UsbMidiDecoder();
private UsbMidiEncoder[] mUsbMidiEncoders;
public UsbMidiPacketConverter(int numEncoders) {
mUsbMidiEncoders = new UsbMidiEncoder[numEncoders];
for (int i = 0; i < numEncoders; i++) {
mUsbMidiEncoders[i] = new UsbMidiEncoder();
}
}
/**
* Converts a USB MIDI array into a raw MIDI array.
@@ -93,10 +100,11 @@ public class UsbMidiPacketConverter {
*
* @param midiBytes the raw MIDI bytes to convert
* @param size the size of usbMidiBytes
* @param encoderId which encoder to use
* @return byte array of USB MIDI packets
*/
public byte[] rawMidiToUsbMidi(byte[] midiBytes, int size) {
return mUsbMidiEncoder.encode(midiBytes, size);
public byte[] rawMidiToUsbMidi(byte[] midiBytes, int size, int encoderId) {
return mUsbMidiEncoders[encoderId].encode(midiBytes, size);
}
private class UsbMidiDecoder {