blob: d97650c2943e9605323dc99b5ba8baa9f963ff8b [file] [log] [blame]
toyoshim@chromium.orga97eebf2014-01-03 07:52:39 +00001// Copyright 2014 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
dnicoara@chromium.org9f2a6f02014-01-03 21:25:00 +00005#ifndef MEDIA_MIDI_MIDI_MANAGER_ALSA_H_
6#define MEDIA_MIDI_MIDI_MANAGER_ALSA_H_
toyoshim@chromium.orga97eebf2014-01-03 07:52:39 +00007
toyoshim@chromium.org4a8657c2014-02-06 11:23:09 +00008#include <poll.h>
toyoshim@chromium.orga97eebf2014-01-03 07:52:39 +00009#include <vector>
10
11#include "base/basictypes.h"
12#include "base/memory/scoped_ptr.h"
13#include "base/threading/thread.h"
14#include "media/midi/midi_manager.h"
15
16namespace media {
17
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000018class MidiManagerAlsa : public MidiManager {
toyoshim@chromium.orga97eebf2014-01-03 07:52:39 +000019 public:
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000020 MidiManagerAlsa();
21 virtual ~MidiManagerAlsa();
toyoshim@chromium.orga97eebf2014-01-03 07:52:39 +000022
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000023 // MidiManager implementation.
toyoshim@chromium.orga97eebf2014-01-03 07:52:39 +000024 virtual bool Initialize() OVERRIDE;
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000025 virtual void DispatchSendMidiData(MidiManagerClient* client,
toyoshim@chromium.orga97eebf2014-01-03 07:52:39 +000026 uint32 port_index,
27 const std::vector<uint8>& data,
28 double timestamp) OVERRIDE;
29
30 private:
toyoshim@chromium.org4a8657c2014-02-06 11:23:09 +000031 void EventReset();
32 void EventLoop();
33
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000034 class MidiDeviceInfo;
35 std::vector<scoped_refptr<MidiDeviceInfo> > in_devices_;
36 std::vector<scoped_refptr<MidiDeviceInfo> > out_devices_;
toyoshim@chromium.orga97eebf2014-01-03 07:52:39 +000037 base::Thread send_thread_;
toyoshim@chromium.org4a8657c2014-02-06 11:23:09 +000038 base::Thread event_thread_;
39
40 // Used for shutting down the |event_thread_| safely.
41 int pipe_fd_[2];
42 // Used for polling input MIDI ports and |pipe_fd_| in |event_thread_|.
43 std::vector<struct pollfd> poll_fds_;
44
toyoshim@chromium.orgc82e66e2014-02-04 07:05:47 +000045 DISALLOW_COPY_AND_ASSIGN(MidiManagerAlsa);
toyoshim@chromium.orga97eebf2014-01-03 07:52:39 +000046};
47
48} // namespace media
49
dnicoara@chromium.org9f2a6f02014-01-03 21:25:00 +000050#endif // MEDIA_MIDI_MIDI_MANAGER_ALSA_H_