diff options
author | crogers@google.com <crogers@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-22 00:55:52 +0000 |
---|---|---|
committer | crogers@google.com <crogers@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-22 00:55:52 +0000 |
commit | 3940e87eaee6fb59800cffba475a294e3fa5c72c (patch) | |
tree | 615fe36029f356c946c1374ba604967741bd4912 /media/midi/midi_manager_mac.h | |
parent | 8fce311668977b966f21d61220dcdb2091375a16 (diff) | |
download | chromium_src-3940e87eaee6fb59800cffba475a294e3fa5c72c.zip chromium_src-3940e87eaee6fb59800cffba475a294e3fa5c72c.tar.gz chromium_src-3940e87eaee6fb59800cffba475a294e3fa5c72c.tar.bz2 |
Implement Web MIDI API back-end
This involves browser-side support and IPC for sending and receiving
MIDI messages. Initially support for OSX is included.
BUG=163795
R=palmer@chromium.org, piman@chromium.org, scherkus@chromium.org
Review URL: https://codereview.chromium.org/16025005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207983 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/midi/midi_manager_mac.h')
-rw-r--r-- | media/midi/midi_manager_mac.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/media/midi/midi_manager_mac.h b/media/midi/midi_manager_mac.h new file mode 100644 index 0000000..f513e11 --- /dev/null +++ b/media/midi/midi_manager_mac.h @@ -0,0 +1,69 @@ +// Copyright (c) 2013 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_MAC_H_ +#define MEDIA_MIDI_MIDI_MANAGER_MAC_H_ + +#include <CoreMIDI/MIDIServices.h> +#include <map> +#include <string> + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "media/midi/midi_manager.h" +#include "media/midi/midi_port_info.h" + +namespace media { + +class MEDIA_EXPORT MIDIManagerMac : public MIDIManager { + public: + MIDIManagerMac(); + virtual ~MIDIManagerMac(); + + // MIDIManager implementation. + virtual bool Initialize() OVERRIDE; + virtual void SendMIDIData(int port_index, + const uint8* data, + size_t length, + double timestamp) OVERRIDE; + + private: + // CoreMIDI callback for MIDI data. + // Each callback can contain multiple packets, each of which can contain + // multiple MIDI messages. + static void ReadMidiDispatch( + const MIDIPacketList *pktlist, + void *read_proc_refcon, + void *src_conn_refcon); + virtual void ReadMidi(MIDIEndpointRef source, const MIDIPacketList *pktlist); + + // Helper + static media::MIDIPortInfo GetPortInfoFromEndpoint(MIDIEndpointRef endpoint); + static double MIDITimeStampToSeconds(MIDITimeStamp timestamp); + static MIDITimeStamp SecondsToMIDITimeStamp(double seconds); + + // CoreMIDI + MIDIClientRef midi_client_; + MIDIPortRef coremidi_input_; + MIDIPortRef coremidi_output_; + + enum{ kMaxPacketListSize = 512 }; + char midi_buffer_[kMaxPacketListSize]; + MIDIPacketList* packet_list_; + MIDIPacket* midi_packet_; + + typedef std::map<MIDIEndpointRef, int> SourceMap; + + // Keeps track of the index (0-based) for each of our sources. + SourceMap source_map_; + + // Keeps track of all destinations. + std::vector<MIDIEndpointRef> destinations_; + + DISALLOW_COPY_AND_ASSIGN(MIDIManagerMac); +}; + +} // namespace media + +#endif // MEDIA_MIDI_MIDI_MANAGER_MAC_H_ |