Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 427a90c5 authored by Mike Lockwood's avatar Mike Lockwood Committed by Android (Google) Code Review
Browse files

Merge "Add support for flushing MIDI all scheduled MIDI events on a port"

parents 64985063 b6f50d35
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -16842,6 +16842,7 @@ package android.media.midi {
  public abstract class MidiReceiver {
    ctor public MidiReceiver();
    method public void flush() throws java.io.IOException;
    method public int getMaxMessageSize();
    method public abstract void onReceive(byte[], int, int, long) throws java.io.IOException;
    method public void send(byte[], int, int) throws java.io.IOException;
+1 −0
Original line number Diff line number Diff line
@@ -18118,6 +18118,7 @@ package android.media.midi {
  public abstract class MidiReceiver {
    ctor public MidiReceiver();
    method public void flush() throws java.io.IOException;
    method public int getMaxMessageSize();
    method public abstract void onReceive(byte[], int, int, long) throws java.io.IOException;
    method public void send(byte[], int, int) throws java.io.IOException;
+9 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.midi;

import java.util.Iterator;
import java.util.SortedMap;
import java.util.TreeMap;

@@ -28,7 +29,7 @@ public class EventScheduler {
    private static final long NANOS_PER_MILLI = 1000000;

    private final Object mLock = new Object();
    private SortedMap<Long, FastEventQueue> mEventBuffer;
    volatile private SortedMap<Long, FastEventQueue> mEventBuffer;
    private FastEventQueue mEventPool = null;
    private int mMaxPoolSize = 200;
    private boolean mClosed;
@@ -68,6 +69,7 @@ public class EventScheduler {
            mEventsRemoved++;
            SchedulableEvent event = mFirst;
            mFirst = event.mNext;
            event.mNext = null;
            return event;
        }

@@ -87,7 +89,7 @@ public class EventScheduler {
     */
    public static class SchedulableEvent {
        private long mTimestamp;
        private SchedulableEvent mNext = null;
        volatile private SchedulableEvent mNext = null;

        /**
         * @param timestamp
@@ -235,6 +237,11 @@ public class EventScheduler {
        return event;
    }

    protected void flush() {
        // Replace our event buffer with a fresh empty one
        mEventBuffer = new TreeMap<Long, FastEventQueue>();
    }

    public void close() {
        synchronized (mLock) {
            mClosed = true;
+7 −0
Original line number Diff line number Diff line
@@ -83,4 +83,11 @@ public final class MidiDispatcher extends MidiReceiver {
            }
        }
    }

    @Override
    public void flush() throws IOException {
       for (MidiReceiver receiver : mReceivers) {
            receiver.flush();
       }
    }
}
+7 −30
Original line number Diff line number Diff line
@@ -28,16 +28,9 @@ public class MidiEventScheduler extends EventScheduler {
    // Maintain a pool of scheduled events to reduce memory allocation.
    // This pool increases performance by about 14%.
    private final static int POOL_EVENT_SIZE = 16;

    private final MidiReceiver[] mReceivers;
    private MidiReceiver mReceiver = new SchedulingReceiver();

    private class SchedulingReceiver extends MidiReceiver {
        private final int mPortNumber;

        public SchedulingReceiver(int portNumber) {
            mPortNumber = portNumber;
        }

        /**
         * Store these bytes in the EventScheduler to be delivered at the specified
         * time.
@@ -47,14 +40,17 @@ public class MidiEventScheduler extends EventScheduler {
                throws IOException {
            MidiEvent event = createScheduledEvent(msg, offset, count, timestamp);
            if (event != null) {
                event.portNumber = mPortNumber;
                add(event);
            }
        }

        @Override
        public void flush() {
            MidiEventScheduler.this.flush();
        }
    }

    public static class MidiEvent extends SchedulableEvent {
        public int portNumber;
        public int count = 0;
        public byte[] data;

@@ -80,17 +76,6 @@ public class MidiEventScheduler extends EventScheduler {
        }
    }

    public MidiEventScheduler() {
        this(0);
    }

    public MidiEventScheduler(int portCount) {
        mReceivers = new MidiReceiver[portCount];
        for (int i = 0; i < portCount; i++) {
            mReceivers[i] = new SchedulingReceiver(i);
        }
    }

    /**
     * Create an event that contains the message.
     */
@@ -132,15 +117,7 @@ public class MidiEventScheduler extends EventScheduler {
     * @return the MidiReceiver
     */
    public MidiReceiver getReceiver() {
        return mReceivers[0];
    }

    /**
     * This MidiReceiver will write date to the scheduling buffer.
     * @return the MidiReceiver
     */
    public MidiReceiver getReceiver(int portNumber) {
        return mReceivers[portNumber];
        return mReceiver;
    }

}
Loading