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

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

Issue 23379002: Web MIDI: fix multi-threading problem around message buffer handling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: s/CHECK/DCHECK/ Created 7 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 | Annotate | Revision Log
« media/midi/midi_manager_mac.h ('K') | « media/midi/midi_manager_mac.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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_mac.h" 5 #include "media/midi/midi_manager_mac.h"
6 6
7 #include <iostream> 7 #include <iostream>
8 #include <string> 8 #include <string>
9 9
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 140
141 ReceiveMIDIData( 141 ReceiveMIDIData(
142 port_index, 142 port_index,
143 packet.data, 143 packet.data,
144 packet.length, 144 packet.length,
145 timestamp_seconds); 145 timestamp_seconds);
146 } 146 }
147 } 147 }
148 148
149 void MIDIManagerMac::SendMIDIData(MIDIManagerClient* client, 149 void MIDIManagerMac::SendMIDIData(MIDIManagerClient* client,
150 int port_index, 150 unsigned int port_index,
151 const uint8* data, 151 const std::vector<uint8>& data,
152 size_t length,
153 double timestamp) { 152 double timestamp) {
153 DCHECK(CurrentlyOnMIDISendThread());
154
154 // System Exclusive has already been filtered. 155 // System Exclusive has already been filtered.
155 MIDITimeStamp coremidi_timestamp = SecondsToMIDITimeStamp(timestamp); 156 MIDITimeStamp coremidi_timestamp = SecondsToMIDITimeStamp(timestamp);
156 157
157 midi_packet_ = MIDIPacketListAdd( 158 midi_packet_ = MIDIPacketListAdd(
158 packet_list_, 159 packet_list_,
159 kMaxPacketListSize, 160 kMaxPacketListSize,
160 midi_packet_, 161 midi_packet_,
161 coremidi_timestamp, 162 coremidi_timestamp,
162 length, 163 data.size(),
163 data); 164 &data[0]);
164 165
165 // Lookup the destination based on the port index. 166 // Lookup the destination based on the port index.
166 // TODO(crogers): re-factor |port_index| to use unsigned 167 if (static_cast<size_t>(port_index) >= destinations_.size())
scherkus (not reviewing) 2013/08/21 17:46:29 if you make port_index size_t, you can remove the
Takashi Toyoshima 2013/08/22 05:47:45 Done.
167 // to avoid the need for this check.
168 if (port_index < 0 ||
169 static_cast<size_t>(port_index) >= destinations_.size())
170 return; 168 return;
171 169
172 MIDIEndpointRef destination = destinations_[port_index]; 170 MIDIEndpointRef destination = destinations_[port_index];
173 171
174 MIDISend(coremidi_output_, destination, packet_list_); 172 MIDISend(coremidi_output_, destination, packet_list_);
175 173
176 // Re-initialize for next time. 174 // Re-initialize for next time.
177 midi_packet_ = MIDIPacketListInit(packet_list_); 175 midi_packet_ = MIDIPacketListInit(packet_list_);
178 176
179 client->AccumulateMIDIBytesSent(length); 177 client->AccumulateMIDIBytesSent(data.size());
180 } 178 }
181 179
182 MIDIPortInfo MIDIManagerMac::GetPortInfoFromEndpoint( 180 MIDIPortInfo MIDIManagerMac::GetPortInfoFromEndpoint(
183 MIDIEndpointRef endpoint) { 181 MIDIEndpointRef endpoint) {
184 SInt32 id_number = 0; 182 SInt32 id_number = 0;
185 MIDIObjectGetIntegerProperty(endpoint, kMIDIPropertyUniqueID, &id_number); 183 MIDIObjectGetIntegerProperty(endpoint, kMIDIPropertyUniqueID, &id_number);
186 string id = IntToString(id_number); 184 string id = IntToString(id_number);
187 185
188 CFStringRef manufacturer_ref = NULL; 186 CFStringRef manufacturer_ref = NULL;
189 MIDIObjectGetStringProperty( 187 MIDIObjectGetStringProperty(
(...skipping 16 matching lines...) Expand all
206 UInt64 nanoseconds = AudioConvertHostTimeToNanos(timestamp); 204 UInt64 nanoseconds = AudioConvertHostTimeToNanos(timestamp);
207 return static_cast<double>(nanoseconds) / 1.0e9; 205 return static_cast<double>(nanoseconds) / 1.0e9;
208 } 206 }
209 207
210 MIDITimeStamp MIDIManagerMac::SecondsToMIDITimeStamp(double seconds) { 208 MIDITimeStamp MIDIManagerMac::SecondsToMIDITimeStamp(double seconds) {
211 UInt64 nanos = UInt64(seconds * 1.0e9); 209 UInt64 nanos = UInt64(seconds * 1.0e9);
212 return AudioConvertNanosToHostTime(nanos); 210 return AudioConvertNanosToHostTime(nanos);
213 } 211 }
214 212
215 } // namespace media 213 } // namespace media
OLDNEW
« media/midi/midi_manager_mac.h ('K') | « media/midi/midi_manager_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698