Chromium Code Reviews| Index: media/midi/usb_midi_input_stream.h |
| diff --git a/media/midi/usb_midi_input_stream.h b/media/midi/usb_midi_input_stream.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..73dafee4341dea8ae45cc7c1986a2e9247241cab |
| --- /dev/null |
| +++ b/media/midi/usb_midi_input_stream.h |
| @@ -0,0 +1,83 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef MEDIA_MIDI_USB_MIDI_INPUT_STREAM_H_ |
| +#define MEDIA_MIDI_USB_MIDI_INPUT_STREAM_H_ |
| + |
| +#include <map> |
| +#include <vector> |
| + |
| +#include "base/basictypes.h" |
| +#include "base/containers/hash_tables.h" |
| +#include "media/base/media_export.h" |
| +#include "media/midi/usb_midi_jack.h" |
| + |
| +namespace media { |
| + |
| +class UsbMidiDevice; |
| + |
| +// UsbMidiInputStream converts USB-MIDI data to MIDI data. |
| +// See "USB Device Class Definition for MIDI Devices" Release 1.0, |
| +// Section 4 "USB-MIDI Event Packets" for details. |
| +class MEDIA_EXPORT UsbMidiInputStream { |
| + public: |
| + class Delegate { |
| + public: |
| + virtual ~Delegate() {} |
| + // This function is called when some data arrives to a USB-MIDI jack. |
| + // An input USB-MIDI jack corresponds to an input MIDIPortInfo. |
| + virtual void OnReceivedData(size_t jack_index, |
| + const uint8* data, |
| + size_t size, |
| + double timestamp) = 0; |
| + }; |
| + |
| + UsbMidiInputStream(const std::vector<UsbMidiJack>& jacks, |
| + Delegate* delegate); |
| + ~UsbMidiInputStream(); |
| + void OnReceivedData(UsbMidiDevice* device, |
|
scherkus (not reviewing)
2014/01/16 21:55:52
nit: add blank line to separate functions and need
yhirano
2014/01/20 09:12:19
Done.
|
| + int endpoint_number, |
| + const uint8* data, |
| + size_t size, |
| + double timestamp); |
| + const std::vector<UsbMidiJack>& jacks() const { return jacks_; } |
|
scherkus (not reviewing)
2014/01/16 21:55:52
don't see this being called anywhere -- remove?
yhirano
2014/01/20 09:12:19
Done.
|
| + |
| + private: |
| + static const size_t kPacketSize = 4; |
| + struct JackUniqueKey { |
| + JackUniqueKey(UsbMidiDevice* device, int endpoint_number, int cable_number); |
| + bool operator==(const JackUniqueKey& that) const; |
| + bool operator<(const JackUniqueKey& that) const; |
| + |
| + UsbMidiDevice* device; |
| + int endpoint_number; |
| + int cable_number; |
| + }; |
| + |
| + // |size| must be a multiple of |kPacketSize|. |
| + void OnReceivedData(size_t jack_index, |
|
scherkus (not reviewing)
2014/01/16 21:55:52
I'm not seeing this function in the .cc -- remove?
yhirano
2014/01/20 09:12:19
Done.
|
| + const uint8* data, |
| + size_t size, |
| + double timestamp); |
| + |
| + // Processes a USB-MIDI Event Packet. |
| + // The first |kPacketSize| bytes of |packet| must be accessible. |
| + void ProcessOnePacket(UsbMidiDevice* device, |
| + int endpoint_number, |
| + const uint8* packet, |
| + double timestamp); |
| + |
| + const std::vector<UsbMidiJack> jacks_; |
| + // A map from UsbMidiJack to its index in |jacks_|. |
| + std::map<JackUniqueKey, size_t> jack_dictionary_; |
| + |
| + // Not owned |
| + Delegate* delegate_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(UsbMidiInputStream); |
| +}; |
| + |
| +} // namespace media |
| + |
| +#endif // MEDIA_MIDI_USB_MIDI_INPUT_STREAM_H_ |