blob: 77b764f9d2426a8e2143de22b6b8549f03af2d70 [file] [log] [blame]
crogers@google.com27356e42013-06-22 04:03:03 +00001// 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
crogers@google.com542a43a2013-07-31 05:16:49 +00007#include "base/bind.h"
8#include "base/bind_helpers.h"
toyoshim@chromium.org2b058e82014-02-26 06:10:46 +00009#include "base/debug/trace_event.h"
crogers@google.com542a43a2013-07-31 05:16:49 +000010
crogers@google.com27356e42013-06-22 04:03:03 +000011namespace media {
12
yhirano@chromium.org881fec42014-02-12 08:23:48 +000013#if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(USE_ALSA) && \
toyoshim@chromium.org2b058e82014-02-26 06:10:46 +000014 !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000015MidiManager* MidiManager::Create() {
16 return new MidiManager;
crogers@google.com27356e42013-06-22 04:03:03 +000017}
18#endif
19
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000020MidiManager::MidiManager()
crogers@google.com27356e42013-06-22 04:03:03 +000021 : initialized_(false) {
22}
23
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000024MidiManager::~MidiManager() {
yukawa@chromium.orgdb7ad8b2013-12-04 15:42:41 +000025}
crogers@google.com27356e42013-06-22 04:03:03 +000026
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000027bool MidiManager::StartSession(MidiManagerClient* client) {
crogers@google.com27356e42013-06-22 04:03:03 +000028 // 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
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000040void MidiManager::EndSession(MidiManagerClient* client) {
crogers@google.com27356e42013-06-22 04:03:03 +000041 base::AutoLock auto_lock(clients_lock_);
42 ClientList::iterator i = clients_.find(client);
43 if (i != clients_.end())
44 clients_.erase(i);
45}
46
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000047void MidiManager::DispatchSendMidiData(MidiManagerClient* client,
yhirano@chromium.orgc6d5b7b2013-12-20 07:27:23 +000048 uint32 port_index,
49 const std::vector<uint8>& data,
50 double timestamp) {
51 NOTREACHED();
52}
53
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000054bool MidiManager::Initialize() {
toyoshim@chromium.org2b058e82014-02-26 06:10:46 +000055 TRACE_EVENT0("midi", "MidiManager::Initialize");
yhirano@chromium.orgc6d5b7b2013-12-20 07:27:23 +000056 return false;
57}
58
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000059void MidiManager::AddInputPort(const MidiPortInfo& info) {
crogers@google.com27356e42013-06-22 04:03:03 +000060 input_ports_.push_back(info);
61}
62
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000063void MidiManager::AddOutputPort(const MidiPortInfo& info) {
crogers@google.com27356e42013-06-22 04:03:03 +000064 output_ports_.push_back(info);
65}
66
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000067void MidiManager::ReceiveMidiData(
toyoshim@chromium.orgae6ad362013-08-27 15:30:20 +000068 uint32 port_index,
crogers@google.com27356e42013-06-22 04:03:03 +000069 const uint8* data,
70 size_t length,
71 double timestamp) {
72 base::AutoLock auto_lock(clients_lock_);
73
crogers@google.com27356e42013-06-22 04:03:03 +000074 for (ClientList::iterator i = clients_.begin(); i != clients_.end(); ++i)
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000075 (*i)->ReceiveMidiData(port_index, data, length, timestamp);
crogers@google.com542a43a2013-07-31 05:16:49 +000076}
77
crogers@google.com27356e42013-06-22 04:03:03 +000078} // namespace media