#ifndef MEDIA_MIDI_MIDI_MANAGER_ALSA_H_
#define MEDIA_MIDI_MIDI_MANAGER_ALSA_H_
+#include <poll.h>
#include <vector>
#include "base/basictypes.h"
namespace media {
-class MIDIManagerAlsa : public MIDIManager {
+class MidiManagerAlsa : public MidiManager {
public:
- MIDIManagerAlsa();
- virtual ~MIDIManagerAlsa();
+ MidiManagerAlsa();
+ virtual ~MidiManagerAlsa();
- // MIDIManager implementation.
+ // MidiManager implementation.
virtual bool Initialize() OVERRIDE;
- virtual void DispatchSendMIDIData(MIDIManagerClient* client,
+ virtual void DispatchSendMidiData(MidiManagerClient* client,
uint32 port_index,
const std::vector<uint8>& data,
double timestamp) OVERRIDE;
private:
- class MIDIDeviceInfo;
- std::vector<scoped_refptr<MIDIDeviceInfo> > in_devices_;
- std::vector<scoped_refptr<MIDIDeviceInfo> > out_devices_;
+ void EventReset();
+ void EventLoop();
+
+ class MidiDeviceInfo;
+ std::vector<scoped_refptr<MidiDeviceInfo> > in_devices_;
+ std::vector<scoped_refptr<MidiDeviceInfo> > out_devices_;
base::Thread send_thread_;
- DISALLOW_COPY_AND_ASSIGN(MIDIManagerAlsa);
+ base::Thread event_thread_;
+
+ // Used for shutting down the |event_thread_| safely.
+ int pipe_fd_[2];
+ // Used for polling input MIDI ports and |pipe_fd_| in |event_thread_|.
+ std::vector<struct pollfd> poll_fds_;
+
+ DISALLOW_COPY_AND_ASSIGN(MidiManagerAlsa);
};
} // namespace media