1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "media/midi/midi_manager.h"
8 #include "base/bind_helpers.h"
9 #include "base/debug/trace_event.h"
13 #if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(USE_ALSA) && \
14 !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
15 MidiManager
* MidiManager::Create() {
16 return new MidiManager
;
20 MidiManager::MidiManager()
21 : initialized_(false) {
24 MidiManager::~MidiManager() {
27 bool MidiManager::StartSession(MidiManagerClient
* client
) {
28 // Lazily initialize the MIDI back-end.
30 initialized_
= Initialize();
33 base::AutoLock
auto_lock(clients_lock_
);
34 clients_
.insert(client
);
40 void MidiManager::EndSession(MidiManagerClient
* client
) {
41 base::AutoLock
auto_lock(clients_lock_
);
42 ClientList::iterator i
= clients_
.find(client
);
43 if (i
!= clients_
.end())
47 void MidiManager::DispatchSendMidiData(MidiManagerClient
* client
,
49 const std::vector
<uint8
>& data
,
54 bool MidiManager::Initialize() {
55 TRACE_EVENT0("midi", "MidiManager::Initialize");
59 void MidiManager::AddInputPort(const MidiPortInfo
& info
) {
60 input_ports_
.push_back(info
);
63 void MidiManager::AddOutputPort(const MidiPortInfo
& info
) {
64 output_ports_
.push_back(info
);
67 void MidiManager::ReceiveMidiData(
72 base::AutoLock
auto_lock(clients_lock_
);
74 for (ClientList::iterator i
= clients_
.begin(); i
!= clients_
.end(); ++i
)
75 (*i
)->ReceiveMidiData(port_index
, data
, length
, timestamp
);