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

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

Issue 943333006: MidiManagerUsb should be able to accept multiple devices. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 | « no previous file | media/midi/midi_manager_usb_unittest.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 #include "media/midi/midi_manager_usb.h" 5 #include "media/midi/midi_manager_usb.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 } 76 }
77 77
78 78
79 void MidiManagerUsb::OnEnumerateDevicesDone(bool result, 79 void MidiManagerUsb::OnEnumerateDevicesDone(bool result,
80 UsbMidiDevice::Devices* devices) { 80 UsbMidiDevice::Devices* devices) {
81 if (!result) { 81 if (!result) {
82 initialize_callback_.Run(MIDI_INITIALIZATION_ERROR); 82 initialize_callback_.Run(MIDI_INITIALIZATION_ERROR);
83 return; 83 return;
84 } 84 }
85 devices->swap(devices_); 85 devices->swap(devices_);
86 std::vector<UsbMidiJack> input_jacks;
86 for (size_t i = 0; i < devices_.size(); ++i) { 87 for (size_t i = 0; i < devices_.size(); ++i) {
87 UsbMidiDescriptorParser parser; 88 UsbMidiDescriptorParser parser;
88 std::vector<uint8> descriptor = devices_[i]->GetDescriptor(); 89 std::vector<uint8> descriptor = devices_[i]->GetDescriptor();
89 const uint8* data = descriptor.size() > 0 ? &descriptor[0] : NULL; 90 const uint8* data = descriptor.size() > 0 ? &descriptor[0] : NULL;
90 std::vector<UsbMidiJack> jacks; 91 std::vector<UsbMidiJack> jacks;
91 bool parse_result = parser.Parse(devices_[i], 92 bool parse_result = parser.Parse(devices_[i],
92 data, 93 data,
93 descriptor.size(), 94 descriptor.size(),
94 &jacks); 95 &jacks);
95 if (!parse_result) { 96 if (!parse_result) {
96 initialize_callback_.Run(MIDI_INITIALIZATION_ERROR); 97 initialize_callback_.Run(MIDI_INITIALIZATION_ERROR);
97 return; 98 return;
98 } 99 }
99 std::vector<UsbMidiJack> input_jacks;
100 for (size_t j = 0; j < jacks.size(); ++j) { 100 for (size_t j = 0; j < jacks.size(); ++j) {
101 if (jacks[j].direction() == UsbMidiJack::DIRECTION_OUT) { 101 if (jacks[j].direction() == UsbMidiJack::DIRECTION_OUT) {
102 output_streams_.push_back(new UsbMidiOutputStream(jacks[j])); 102 output_streams_.push_back(new UsbMidiOutputStream(jacks[j]));
103 // TODO(yhirano): Set appropriate properties. 103 // TODO(yhirano): Set appropriate properties.
104 // TODO(yhiran): Port ID should contain product ID / vendor ID. 104 // TODO(yhiran): Port ID should contain product ID / vendor ID.
105 // Port ID must be unique in a MIDI manager. This (and the below) ID 105 // Port ID must be unique in a MIDI manager. This (and the below) ID
106 // setting is sufficiently unique although there is no user-friendly 106 // setting is sufficiently unique although there is no user-friendly
107 // meaning. 107 // meaning.
108 MidiPortInfo port; 108 MidiPortInfo port;
109 port.id = base::StringPrintf("port-%ld-%ld", 109 port.id = base::StringPrintf("port-%ld-%ld",
110 static_cast<long>(i), 110 static_cast<long>(i),
111 static_cast<long>(j)); 111 static_cast<long>(j));
112 AddOutputPort(port); 112 AddOutputPort(port);
113 } else { 113 } else {
114 DCHECK_EQ(jacks[j].direction(), UsbMidiJack::DIRECTION_IN); 114 DCHECK_EQ(jacks[j].direction(), UsbMidiJack::DIRECTION_IN);
115 input_jacks.push_back(jacks[j]); 115 input_jacks.push_back(jacks[j]);
116 // TODO(yhirano): Set appropriate properties. 116 // TODO(yhirano): Set appropriate properties.
117 MidiPortInfo port; 117 MidiPortInfo port;
118 port.id = base::StringPrintf("port-%ld-%ld", 118 port.id = base::StringPrintf("port-%ld-%ld",
119 static_cast<long>(i), 119 static_cast<long>(i),
120 static_cast<long>(j)); 120 static_cast<long>(j));
121 AddInputPort(port); 121 AddInputPort(port);
122 } 122 }
123 } 123 }
124 input_stream_.reset(new UsbMidiInputStream(input_jacks, this));
125 } 124 }
125 input_stream_.reset(new UsbMidiInputStream(input_jacks, this));
126 initialize_callback_.Run(MIDI_OK); 126 initialize_callback_.Run(MIDI_OK);
127 } 127 }
128 128
129 } // namespace media 129 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | media/midi/midi_manager_usb_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698