1d5838b2697a752853c86035cd43a93420f6c41d
[platform/framework/web/crosswalk.git] / src / media / midi / midi_manager.cc
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.
4
5 #include "media/midi/midi_manager.h"
6
7 #include "base/bind.h"
8 #include "base/bind_helpers.h"
9
10 namespace media {
11
12 #if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(USE_ALSA)
13 // TODO(toyoshim): implement MIDIManager for other platforms.
14 MIDIManager* MIDIManager::Create() {
15   return new MIDIManager;
16 }
17 #endif
18
19 MIDIManager::MIDIManager()
20     : initialized_(false) {
21 }
22
23 MIDIManager::~MIDIManager() {
24 }
25
26 bool MIDIManager::StartSession(MIDIManagerClient* client) {
27   // Lazily initialize the MIDI back-end.
28   if (!initialized_)
29     initialized_ = Initialize();
30
31   if (initialized_) {
32     base::AutoLock auto_lock(clients_lock_);
33     clients_.insert(client);
34   }
35
36   return initialized_;
37 }
38
39 void MIDIManager::EndSession(MIDIManagerClient* client) {
40   base::AutoLock auto_lock(clients_lock_);
41   ClientList::iterator i = clients_.find(client);
42   if (i != clients_.end())
43     clients_.erase(i);
44 }
45
46 void MIDIManager::DispatchSendMIDIData(MIDIManagerClient* client,
47                                        uint32 port_index,
48                                        const std::vector<uint8>& data,
49                                        double timestamp) {
50   NOTREACHED();
51 }
52
53 bool MIDIManager::Initialize() {
54   return false;
55 }
56
57 void MIDIManager::AddInputPort(const MIDIPortInfo& info) {
58   input_ports_.push_back(info);
59 }
60
61 void MIDIManager::AddOutputPort(const MIDIPortInfo& info) {
62   output_ports_.push_back(info);
63 }
64
65 void MIDIManager::ReceiveMIDIData(
66     uint32 port_index,
67     const uint8* data,
68     size_t length,
69     double timestamp) {
70   base::AutoLock auto_lock(clients_lock_);
71
72   for (ClientList::iterator i = clients_.begin(); i != clients_.end(); ++i)
73     (*i)->ReceiveMIDIData(port_index, data, length, timestamp);
74 }
75
76 }  // namespace media