4447a0565777ce9faca9951118f9e53a4746e851
[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     !defined(OS_ANDROID)
14 // TODO(toyoshim): implement MidiManager for other platforms.
15 MidiManager* MidiManager::Create() {
16   return new MidiManager;
17 }
18 #endif
19
20 MidiManager::MidiManager()
21     : initialized_(false) {
22 }
23
24 MidiManager::~MidiManager() {
25 }
26
27 bool MidiManager::StartSession(MidiManagerClient* client) {
28   // Lazily initialize the MIDI back-end.
29   if (!initialized_)
30     initialized_ = Initialize();
31
32   if (initialized_) {
33     base::AutoLock auto_lock(clients_lock_);
34     clients_.insert(client);
35   }
36
37   return initialized_;
38 }
39
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())
44     clients_.erase(i);
45 }
46
47 void MidiManager::DispatchSendMidiData(MidiManagerClient* client,
48                                        uint32 port_index,
49                                        const std::vector<uint8>& data,
50                                        double timestamp) {
51   NOTREACHED();
52 }
53
54 bool MidiManager::Initialize() {
55   return false;
56 }
57
58 void MidiManager::AddInputPort(const MidiPortInfo& info) {
59   input_ports_.push_back(info);
60 }
61
62 void MidiManager::AddOutputPort(const MidiPortInfo& info) {
63   output_ports_.push_back(info);
64 }
65
66 void MidiManager::ReceiveMidiData(
67     uint32 port_index,
68     const uint8* data,
69     size_t length,
70     double timestamp) {
71   base::AutoLock auto_lock(clients_lock_);
72
73   for (ClientList::iterator i = clients_.begin(); i != clients_.end(); ++i)
74     (*i)->ReceiveMidiData(port_index, data, length, timestamp);
75 }
76
77 }  // namespace media