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

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

Issue 17617004: Fix MIDI code for 64 bit build. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix 32? Created 7 years, 5 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
« no previous file with comments | « no previous file | 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"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/sys_string_conversions.h" 12 #include "base/strings/sys_string_conversions.h"
13 #include <CoreAudio/HostTime.h> 13 #include <CoreAudio/HostTime.h>
14 14
15 using base::IntToString; 15 using base::IntToString;
16 using base::SysCFStringRefToUTF8; 16 using base::SysCFStringRefToUTF8;
17 using std::string; 17 using std::string;
18 18
19 // NB: System MIDI types are pointer types in 32-bit and integer types in
20 // 64-bit. Therefore, the initialization is the simplest one that satisfies both
21 // (if possible).
22
19 namespace media { 23 namespace media {
20 24
21 MIDIManager* MIDIManager::Create() { 25 MIDIManager* MIDIManager::Create() {
22 return new MIDIManagerMac(); 26 return new MIDIManagerMac();
23 } 27 }
24 28
25 MIDIManagerMac::MIDIManagerMac() 29 MIDIManagerMac::MIDIManagerMac()
26 : midi_client_(NULL), 30 : midi_client_(0),
27 coremidi_input_(NULL), 31 coremidi_input_(0),
28 coremidi_output_(NULL), 32 coremidi_output_(0),
29 packet_list_(NULL), 33 packet_list_(NULL),
30 midi_packet_(NULL) { 34 midi_packet_(NULL) {
31 } 35 }
32 36
33 bool MIDIManagerMac::Initialize() { 37 bool MIDIManagerMac::Initialize() {
34 TRACE_EVENT0("midi", "MIDIManagerMac::Initialize"); 38 TRACE_EVENT0("midi", "MIDIManagerMac::Initialize");
35 39
36 // CoreMIDI registration. 40 // CoreMIDI registration.
37 midi_client_ = NULL; 41 midi_client_ = 0;
38 OSStatus result = MIDIClientCreate( 42 OSStatus result = MIDIClientCreate(
39 CFSTR("Google Chrome"), 43 CFSTR("Google Chrome"),
40 NULL, 44 NULL,
41 NULL, 45 NULL,
42 &midi_client_); 46 &midi_client_);
43 47
44 if (result != noErr) 48 if (result != noErr)
45 return false; 49 return false;
46 50
47 coremidi_input_ = NULL; 51 coremidi_input_ = 0;
48 52
49 // Create input and output port. 53 // Create input and output port.
50 result = MIDIInputPortCreate( 54 result = MIDIInputPortCreate(
51 midi_client_, 55 midi_client_,
52 CFSTR("MIDI Input"), 56 CFSTR("MIDI Input"),
53 ReadMidiDispatch, 57 ReadMidiDispatch,
54 this, 58 this,
55 &coremidi_input_); 59 &coremidi_input_);
56 if (result != noErr) 60 if (result != noErr)
57 return false; 61 return false;
(...skipping 18 matching lines...) Expand all
76 MIDIPortInfo info = GetPortInfoFromEndpoint(destination); 80 MIDIPortInfo info = GetPortInfoFromEndpoint(destination);
77 AddOutputPort(info); 81 AddOutputPort(info);
78 } 82 }
79 83
80 // Open connections from all sources. 84 // Open connections from all sources.
81 int source_count = MIDIGetNumberOfSources(); 85 int source_count = MIDIGetNumberOfSources();
82 86
83 for (int i = 0; i < source_count; ++i) { 87 for (int i = 0; i < source_count; ++i) {
84 // Receive from all sources. 88 // Receive from all sources.
85 MIDIEndpointRef src = MIDIGetSource(i); 89 MIDIEndpointRef src = MIDIGetSource(i);
86 MIDIPortConnectSource(coremidi_input_, src, src); 90 MIDIPortConnectSource(coremidi_input_, src, reinterpret_cast<void*>(src));
87 91
88 // Keep track of all sources (known as inputs in Web MIDI API terminology). 92 // Keep track of all sources (known as inputs in Web MIDI API terminology).
89 source_map_[src] = i; 93 source_map_[src] = i;
90 94
91 MIDIPortInfo info = GetPortInfoFromEndpoint(src); 95 MIDIPortInfo info = GetPortInfoFromEndpoint(src);
92 AddInputPort(info); 96 AddInputPort(info);
93 } 97 }
94 98
95 // TODO(crogers): Fix the memory management here! 99 // TODO(crogers): Fix the memory management here!
96 packet_list_ = reinterpret_cast<MIDIPacketList*>(midi_buffer_); 100 packet_list_ = reinterpret_cast<MIDIPacketList*>(midi_buffer_);
97 midi_packet_ = MIDIPacketListInit(packet_list_); 101 midi_packet_ = MIDIPacketListInit(packet_list_);
98 102
99 return true; 103 return true;
100 } 104 }
101 105
102 MIDIManagerMac::~MIDIManagerMac() { 106 MIDIManagerMac::~MIDIManagerMac() {
103 if (coremidi_input_) 107 if (coremidi_input_)
104 MIDIPortDispose(coremidi_input_); 108 MIDIPortDispose(coremidi_input_);
105 if (coremidi_output_) 109 if (coremidi_output_)
106 MIDIPortDispose(coremidi_output_); 110 MIDIPortDispose(coremidi_output_);
107 } 111 }
108 112
109 void MIDIManagerMac::ReadMidiDispatch(const MIDIPacketList* packet_list, 113 void MIDIManagerMac::ReadMidiDispatch(const MIDIPacketList* packet_list,
110 void* read_proc_refcon, 114 void* read_proc_refcon,
111 void* src_conn_refcon) { 115 void* src_conn_refcon) {
112 MIDIManagerMac* manager = static_cast<MIDIManagerMac*>(read_proc_refcon); 116 MIDIManagerMac* manager = static_cast<MIDIManagerMac*>(read_proc_refcon);
117 #if __LP64__
118 MIDIEndpointRef source = reinterpret_cast<uintptr_t>(src_conn_refcon);
119 #else
113 MIDIEndpointRef source = static_cast<MIDIEndpointRef>(src_conn_refcon); 120 MIDIEndpointRef source = static_cast<MIDIEndpointRef>(src_conn_refcon);
121 #endif
114 122
115 // Dispatch to class method. 123 // Dispatch to class method.
116 manager->ReadMidi(source, packet_list); 124 manager->ReadMidi(source, packet_list);
117 } 125 }
118 126
119 void MIDIManagerMac::ReadMidi(MIDIEndpointRef source, 127 void MIDIManagerMac::ReadMidi(MIDIEndpointRef source,
120 const MIDIPacketList* packet_list) { 128 const MIDIPacketList* packet_list) {
121 // Lookup the port index based on the source. 129 // Lookup the port index based on the source.
122 SourceMap::iterator j = source_map_.find(source); 130 SourceMap::iterator j = source_map_.find(source);
123 if (j == source_map_.end()) 131 if (j == source_map_.end())
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 UInt64 nanoseconds = AudioConvertHostTimeToNanos(timestamp); 204 UInt64 nanoseconds = AudioConvertHostTimeToNanos(timestamp);
197 return static_cast<double>(nanoseconds) / 1.0e9; 205 return static_cast<double>(nanoseconds) / 1.0e9;
198 } 206 }
199 207
200 MIDITimeStamp MIDIManagerMac::SecondsToMIDITimeStamp(double seconds) { 208 MIDITimeStamp MIDIManagerMac::SecondsToMIDITimeStamp(double seconds) {
201 UInt64 nanos = UInt64(seconds * 1.0e9); 209 UInt64 nanos = UInt64(seconds * 1.0e9);
202 return AudioConvertNanosToHostTime(nanos); 210 return AudioConvertNanosToHostTime(nanos);
203 } 211 }
204 212
205 } // namespace media 213 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698