Index: media/midi/midi_manager_android.h |
diff --git a/media/midi/midi_manager_android.h b/media/midi/midi_manager_android.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b3f9aecc566870f53a2edb1fb0f525792661078c |
--- /dev/null |
+++ b/media/midi/midi_manager_android.h |
@@ -0,0 +1,82 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef MEDIA_MIDI_MIDI_MANAGER_ANDROID_H_ |
+#define MEDIA_MIDI_MIDI_MANAGER_ANDROID_H_ |
+ |
+#include <jni.h> |
+#include <vector> |
+ |
+#include "base/android/scoped_java_ref.h" |
+#include "base/basictypes.h" |
+#include "base/containers/hash_tables.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/memory/scoped_vector.h" |
+#include "base/time/time.h" |
+#include "media/midi/midi_input_port_android.h" |
+#include "media/midi/midi_manager.h" |
+#include "media/midi/midi_scheduler.h" |
+ |
+namespace media { |
+namespace midi { |
+ |
+class MidiDeviceAndroid; |
+class MidiOutputPortAndroid; |
+ |
+// MidiManagerAndroid is a midi manager subclass for Android M or newer. For |
Takashi Toyoshima
2015/09/07 16:42:20
a MidiManager subclass?
yhirano
2015/09/10 11:43:50
Done.
|
+// older android OSes, we use MidiManagerUsb. |
+class MidiManagerAndroid final : public MidiManager, |
+ public MidiInputPortAndroid::Delegate { |
+ public: |
+ MidiManagerAndroid(); |
+ ~MidiManagerAndroid() override; |
+ |
+ // MidiManager implementation. |
+ void StartInitialization() override; |
+ void DispatchSendMidiData(MidiManagerClient* client, |
+ uint32 port_index, |
+ const std::vector<uint8>& data, |
+ double timestamp) override; |
+ |
+ // MidiInputPortAndroid::Delegate implementation. |
+ void OnReceivedData(MidiInputPortAndroid*, |
+ const uint8* data, |
+ size_t size, |
+ base::TimeTicks timestamp) override; |
+ |
+ // Called from the Java world. |
+ void OnInitialized(JNIEnv* env, jobject caller, jobjectArray devices); |
+ void OnAttached(JNIEnv* env, jobject caller, jobject device); |
+ void OnDetached(JNIEnv* env, jobject caller, jobject device); |
+ |
+ static bool Register(JNIEnv* env); |
+ |
+ private: |
+ void AddDevice(scoped_ptr<MidiDeviceAndroid> device); |
+ void AddInputPortAndroid(MidiInputPortAndroid* port, |
+ MidiDeviceAndroid* device); |
+ void AddOutputPortAndroid(MidiOutputPortAndroid* port, |
+ MidiDeviceAndroid* device); |
+ |
+ ScopedVector<MidiDeviceAndroid> devices_; |
+ // All ports held in |devices_|. Each device has ownership of ports, but we |
+ // can store pointers here because a device will keep its ports while it is |
+ // alive. |
+ std::vector<MidiInputPortAndroid*> all_input_ports_; |
+ // A dictionary from a port to its index. |
+ // input_port_to_index_[all_input_ports_[i]] == i for each valid |i|. |
+ base::hash_map<MidiInputPortAndroid*, size_t> input_port_to_index_; |
+ |
+ // Ditto for output ports. |
+ std::vector<MidiOutputPortAndroid*> all_output_ports_; |
+ base::hash_map<MidiOutputPortAndroid*, size_t> output_port_to_index_; |
+ |
+ base::android::ScopedJavaGlobalRef<jobject> raw_manager_; |
+ scoped_ptr<MidiScheduler> scheduler_; |
+}; |
+ |
+} // namespace midi |
+} // namespace media |
+ |
+#endif // MEDIA_MIDI_MIDI_MANAGER_ANDROID_H_ |