Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(506)

Unified Diff: media/midi/midi_manager_android.h

Issue 1177973003: [Web MIDI] Use Android MIDI API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/midi/midi_manager.h ('k') | media/midi/midi_manager_android.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..196643ed048dada0340df753612dab65f0729897
--- /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 MidiManager subclass for Android M or newer. For
+// 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_
« no previous file with comments | « media/midi/midi_manager.h ('k') | media/midi/midi_manager_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698