summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothPacketEncoder.java9
1 files changed, 7 insertions, 2 deletions
diff --git a/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothPacketEncoder.java b/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothPacketEncoder.java
index 5fb162c09325..8ac6b5674256 100644
--- a/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothPacketEncoder.java
+++ b/media/packages/BluetoothMidiService/src/com/android/bluetoothmidiservice/BluetoothPacketEncoder.java
@@ -48,7 +48,7 @@ public class BluetoothPacketEncoder extends PacketEncoder {
private boolean mWritePending;
- private final Object mLock = new Object();
+ private final Object mLock = new Object();
// This receives normalized data from mMidiFramer and accumulates it into a packet buffer
private final MidiReceiver mFramedDataReceiver = new MidiReceiver() {
@@ -60,6 +60,8 @@ public class BluetoothPacketEncoder extends PacketEncoder {
int milliTimestamp = (int)(timestamp / MILLISECOND_NANOS) & MILLISECOND_MASK;
byte status = msg[offset];
boolean isSysExStart = (status == MidiConstants.STATUS_SYSTEM_EXCLUSIVE);
+ // Because of the MidiFramer, if it is not a status byte then it
+ // must be a continuation.
boolean isSysExContinuation = ((status & 0x80) == 0);
int bytesNeeded;
@@ -70,7 +72,9 @@ public class BluetoothPacketEncoder extends PacketEncoder {
bytesNeeded = count;
}
- boolean needsTimestamp = (milliTimestamp != mPacketTimestamp);
+ // Status bytes must be preceded by a timestamp
+ boolean needsTimestamp = (status != mRunningStatus)
+ || (milliTimestamp != mPacketTimestamp);
if (isSysExStart) {
// SysEx start byte must be preceded by a timestamp
needsTimestamp = true;
@@ -78,6 +82,7 @@ public class BluetoothPacketEncoder extends PacketEncoder {
// SysEx continuation packets must not have timestamp byte
needsTimestamp = false;
}
+
if (needsTimestamp) bytesNeeded++; // add one for timestamp byte
if (status == mRunningStatus) bytesNeeded--; // subtract one for status byte