Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(244)

Side by Side Diff: media/midi/midi_manager_usb.h

Issue 2262043002: MidiScheduler binds to task runner of constructing thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/midi/midi_manager_android.cc ('k') | media/midi/midi_manager_usb.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MEDIA_MIDI_MIDI_MANAGER_USB_H_ 5 #ifndef MEDIA_MIDI_MIDI_MANAGER_USB_H_
6 #define MEDIA_MIDI_MIDI_MANAGER_USB_H_ 6 #define MEDIA_MIDI_MIDI_MANAGER_USB_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
11 #include <memory> 11 #include <memory>
12 #include <utility> 12 #include <utility>
13 #include <vector> 13 #include <vector>
14 14
15 #include "base/bind.h" 15 #include "base/bind.h"
16 #include "base/callback.h" 16 #include "base/callback.h"
17 #include "base/compiler_specific.h" 17 #include "base/compiler_specific.h"
18 #include "base/containers/hash_tables.h" 18 #include "base/containers/hash_tables.h"
19 #include "base/macros.h" 19 #include "base/macros.h"
20 #include "base/synchronization/lock.h"
20 #include "base/time/time.h" 21 #include "base/time/time.h"
21 #include "media/midi/midi_manager.h" 22 #include "media/midi/midi_manager.h"
22 #include "media/midi/usb_midi_device.h" 23 #include "media/midi/usb_midi_device.h"
23 #include "media/midi/usb_midi_export.h" 24 #include "media/midi/usb_midi_export.h"
24 #include "media/midi/usb_midi_input_stream.h" 25 #include "media/midi/usb_midi_input_stream.h"
25 #include "media/midi/usb_midi_jack.h" 26 #include "media/midi/usb_midi_jack.h"
26 #include "media/midi/usb_midi_output_stream.h" 27 #include "media/midi/usb_midi_output_stream.h"
27 28
28 namespace media { 29 namespace media {
29 namespace midi { 30 namespace midi {
30 31
31 class MidiScheduler; 32 class MidiScheduler;
32 33
33 // MidiManager for USB-MIDI. 34 // MidiManager for USB-MIDI.
34 class USB_MIDI_EXPORT MidiManagerUsb 35 class USB_MIDI_EXPORT MidiManagerUsb
35 : public MidiManager, 36 : public MidiManager,
36 public UsbMidiDeviceDelegate, 37 public UsbMidiDeviceDelegate,
37 NON_EXPORTED_BASE(public UsbMidiInputStream::Delegate) { 38 NON_EXPORTED_BASE(public UsbMidiInputStream::Delegate) {
38 public: 39 public:
39 explicit MidiManagerUsb( 40 explicit MidiManagerUsb(
40 std::unique_ptr<UsbMidiDevice::Factory> device_factory); 41 std::unique_ptr<UsbMidiDevice::Factory> device_factory);
41 ~MidiManagerUsb() override; 42 ~MidiManagerUsb() override;
42 43
43 // MidiManager implementation. 44 // MidiManager implementation.
44 void StartInitialization() override; 45 void StartInitialization() override;
46 void Finalize() override;
45 void DispatchSendMidiData(MidiManagerClient* client, 47 void DispatchSendMidiData(MidiManagerClient* client,
46 uint32_t port_index, 48 uint32_t port_index,
47 const std::vector<uint8_t>& data, 49 const std::vector<uint8_t>& data,
48 double timestamp) override; 50 double timestamp) override;
49 51
50 // UsbMidiDeviceDelegate implementation. 52 // UsbMidiDeviceDelegate implementation.
51 void ReceiveUsbMidiData(UsbMidiDevice* device, 53 void ReceiveUsbMidiData(UsbMidiDevice* device,
52 int endpoint_number, 54 int endpoint_number,
53 const uint8_t* data, 55 const uint8_t* data,
54 size_t size, 56 size_t size,
(...skipping 28 matching lines...) Expand all
83 std::unique_ptr<UsbMidiDevice::Factory> device_factory_; 85 std::unique_ptr<UsbMidiDevice::Factory> device_factory_;
84 ScopedVector<UsbMidiDevice> devices_; 86 ScopedVector<UsbMidiDevice> devices_;
85 ScopedVector<UsbMidiOutputStream> output_streams_; 87 ScopedVector<UsbMidiOutputStream> output_streams_;
86 std::unique_ptr<UsbMidiInputStream> input_stream_; 88 std::unique_ptr<UsbMidiInputStream> input_stream_;
87 89
88 base::Callback<void(Result result)> initialize_callback_; 90 base::Callback<void(Result result)> initialize_callback_;
89 91
90 // A map from <endpoint_number, cable_number> to the index of input jacks. 92 // A map from <endpoint_number, cable_number> to the index of input jacks.
91 base::hash_map<std::pair<int, int>, size_t> input_jack_dictionary_; 93 base::hash_map<std::pair<int, int>, size_t> input_jack_dictionary_;
92 94
95 // Lock to ensure the MidiScheduler is being destructed only once in
96 // Finalize() on Chrome_IOThread.
97 base::Lock scheduler_lock_;
93 std::unique_ptr<MidiScheduler> scheduler_; 98 std::unique_ptr<MidiScheduler> scheduler_;
94 99
95 DISALLOW_COPY_AND_ASSIGN(MidiManagerUsb); 100 DISALLOW_COPY_AND_ASSIGN(MidiManagerUsb);
96 }; 101 };
97 102
98 } // namespace midi 103 } // namespace midi
99 } // namespace media 104 } // namespace media
100 105
101 #endif // MEDIA_MIDI_MIDI_MANAGER_USB_H_ 106 #endif // MEDIA_MIDI_MIDI_MANAGER_USB_H_
OLDNEW
« no previous file with comments | « media/midi/midi_manager_android.cc ('k') | media/midi/midi_manager_usb.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698