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

Unified Diff: media/midi/midi_manager_alsa.cc

Issue 1025163002: Rename AlsaRawmidi to AlsaCard and include the count of midi devices instead of duplicating (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@h4
Patch Set: Rebase Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/midi/midi_manager_alsa.h ('k') | media/midi/midi_manager_alsa_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/midi/midi_manager_alsa.cc
diff --git a/media/midi/midi_manager_alsa.cc b/media/midi/midi_manager_alsa.cc
index d80aa2b3a894e9b6eb2b92d5bcdf676727cf5553..89b0da8cb815aa605df8863cfb60a709cb6a7baa 100644
--- a/media/midi/midi_manager_alsa.cc
+++ b/media/midi/midi_manager_alsa.cc
@@ -243,14 +243,16 @@ void MidiManagerAlsa::DispatchSendMidiData(MidiManagerClient* client,
base::Unretained(client), data.size()));
}
-MidiManagerAlsa::AlsaRawmidi::AlsaRawmidi(const MidiManagerAlsa* outer,
- const std::string& alsa_name,
- const std::string& alsa_longname,
- const std::string& alsa_driver,
- int card_index)
+MidiManagerAlsa::AlsaCard::AlsaCard(const MidiManagerAlsa* outer,
+ const std::string& alsa_name,
+ const std::string& alsa_longname,
+ const std::string& alsa_driver,
+ int card_index,
+ int midi_count)
: alsa_name_(alsa_name),
alsa_longname_(alsa_longname),
- alsa_driver_(alsa_driver) {
+ alsa_driver_(alsa_driver),
+ midi_count_(midi_count) {
// Get udev properties if available.
std::string vendor;
std::string vendor_from_database;
@@ -297,38 +299,38 @@ MidiManagerAlsa::AlsaRawmidi::AlsaRawmidi(const MidiManagerAlsa* outer,
vendor, vendor_id_, vendor_from_database, alsa_name, alsa_longname);
}
-MidiManagerAlsa::AlsaRawmidi::~AlsaRawmidi() {
+MidiManagerAlsa::AlsaCard::~AlsaCard() {
}
-const std::string MidiManagerAlsa::AlsaRawmidi::alsa_name() const {
+const std::string MidiManagerAlsa::AlsaCard::alsa_name() const {
return alsa_name_;
}
-const std::string MidiManagerAlsa::AlsaRawmidi::alsa_longname() const {
+const std::string MidiManagerAlsa::AlsaCard::alsa_longname() const {
return alsa_longname_;
}
-const std::string MidiManagerAlsa::AlsaRawmidi::manufacturer() const {
+const std::string MidiManagerAlsa::AlsaCard::manufacturer() const {
return manufacturer_;
}
-const std::string MidiManagerAlsa::AlsaRawmidi::alsa_driver() const {
+const std::string MidiManagerAlsa::AlsaCard::alsa_driver() const {
return alsa_driver_;
}
-const std::string MidiManagerAlsa::AlsaRawmidi::path() const {
+const std::string MidiManagerAlsa::AlsaCard::path() const {
return path_;
}
-const std::string MidiManagerAlsa::AlsaRawmidi::bus() const {
+const std::string MidiManagerAlsa::AlsaCard::bus() const {
return bus_;
}
-const std::string MidiManagerAlsa::AlsaRawmidi::vendor_id() const {
+const std::string MidiManagerAlsa::AlsaCard::vendor_id() const {
return vendor_id_;
}
-const std::string MidiManagerAlsa::AlsaRawmidi::id() const {
+const std::string MidiManagerAlsa::AlsaCard::id() const {
std::string id = vendor_id_;
if (!model_id_.empty())
id += ":" + model_id_;
@@ -337,8 +339,12 @@ const std::string MidiManagerAlsa::AlsaRawmidi::id() const {
return id;
}
+const int MidiManagerAlsa::AlsaCard::midi_count() const {
+ return midi_count_;
+}
+
// static
-std::string MidiManagerAlsa::AlsaRawmidi::ExtractManufacturerString(
+std::string MidiManagerAlsa::AlsaCard::ExtractManufacturerString(
const std::string& udev_id_vendor,
const std::string& udev_id_vendor_id,
const std::string& udev_id_vendor_from_database,
@@ -445,13 +451,14 @@ std::string MidiManagerAlsa::AlsaPortMetadata::OpaqueKey() const {
// TODO(agoode): Add a client->card/rawmidi mapping to the kernel to avoid
// needing to probe in this way.
-ScopedVector<MidiManagerAlsa::AlsaRawmidi> MidiManagerAlsa::AllAlsaRawmidis() {
- ScopedVector<AlsaRawmidi> devices;
+ScopedVector<MidiManagerAlsa::AlsaCard> MidiManagerAlsa::AllMidiCards() {
+ ScopedVector<AlsaCard> devices;
snd_ctl_card_info_t* card;
snd_hwdep_info_t* hwdep;
snd_ctl_card_info_alloca(&card);
snd_hwdep_info_alloca(&hwdep);
for (int card_index = -1; !snd_card_next(&card_index) && card_index >= 0;) {
+ int midi_count = 0;
const std::string id = base::StringPrintf("hw:CARD=%i", card_index);
snd_ctl_t* handle;
int err = snd_ctl_open(&handle, id.c_str(), 0);
@@ -471,12 +478,10 @@ ScopedVector<MidiManagerAlsa::AlsaRawmidi> MidiManagerAlsa::AllAlsaRawmidis() {
// Count rawmidi devices (not subdevices).
for (int device = -1;
- !snd_ctl_rawmidi_next_device(handle, &device) && device >= 0;) {
- devices.push_back(
- new AlsaRawmidi(this, name, longname, driver, card_index));
- }
+ !snd_ctl_rawmidi_next_device(handle, &device) && device >= 0;)
+ ++midi_count;
- // Count any hwdep synths that become MIDI devices.
+ // Count any hwdep synths that become MIDI devices outside of rawmidi.
//
// Explanation:
// Any kernel driver can create an ALSA client (visible to us).
@@ -503,9 +508,12 @@ ScopedVector<MidiManagerAlsa::AlsaRawmidi> MidiManagerAlsa::AllAlsaRawmidis() {
snd_hwdep_iface_t iface = snd_hwdep_info_get_iface(hwdep);
if (iface == SND_HWDEP_IFACE_OPL2 || iface == SND_HWDEP_IFACE_OPL3 ||
iface == SND_HWDEP_IFACE_OPL4)
- devices.push_back(
- new AlsaRawmidi(this, name, longname, driver, card_index));
+ ++midi_count;
}
+
+ if (midi_count > 0)
+ devices.push_back(
+ new AlsaCard(this, name, longname, driver, card_index, midi_count));
snd_ctl_close(handle);
}
@@ -513,7 +521,13 @@ ScopedVector<MidiManagerAlsa::AlsaRawmidi> MidiManagerAlsa::AllAlsaRawmidis() {
}
void MidiManagerAlsa::EnumeratePorts() {
- ScopedVector<AlsaRawmidi> devices = AllAlsaRawmidis();
+ ScopedVector<AlsaCard> cards = AllMidiCards();
+ std::vector<const AlsaCard*> devices;
+ for (const auto* card : cards) {
+ // Insert 1 AlsaCard per number of MIDI devices.
+ for (int n = 0; n < card->midi_count(); ++n)
+ devices.push_back(card);
+ }
snd_seq_port_subscribe_t* subs;
snd_seq_port_subscribe_alloca(&subs);
@@ -551,14 +565,14 @@ void MidiManagerAlsa::EnumeratePorts() {
std::string card_name;
std::string card_longname;
- // Join kernel clients against the list of AlsaRawmidis.
+ // Join kernel clients against the list of AlsaCards.
// In the current ALSA kernel implementation, kernel clients match the
- // kernel devices in the same order, for devices with client_id over
+ // kernel devices in the same order, for clients with client_id over
// kMinimumClientIdForCards.
if ((snd_seq_client_info_get_type(client_info) == SND_SEQ_KERNEL_CLIENT) &&
(current_device < devices.size()) &&
(client_id >= kMinimumClientIdForCards)) {
- const AlsaRawmidi* device = devices[current_device];
+ const AlsaCard* device = devices[current_device];
manufacturer = device->manufacturer();
driver = device->alsa_driver();
path = device->path();
@@ -700,6 +714,10 @@ void MidiManagerAlsa::EventLoop() {
// TODO(agoode): rescan hardware devices.
break;
+ case SND_SEQ_EVENT_PORT_START:
+ // TODO(agoode): add port.
+ break;
+
case SND_SEQ_EVENT_CLIENT_EXIT:
// Check for disconnection of our "out" client. This means "shut down".
if (event->data.addr.client == out_client_id_)
@@ -708,26 +726,21 @@ void MidiManagerAlsa::EventLoop() {
// TODO(agoode): remove all ports for a client.
break;
- case SND_SEQ_EVENT_PORT_START:
- // TODO(agoode): add port.
- break;
-
case SND_SEQ_EVENT_PORT_EXIT:
// TODO(agoode): remove port.
break;
}
+ } else {
+ ProcessSingleEvent(event, timestamp);
}
- ProcessSingleEvent(event, timestamp);
-
// Do again.
ScheduleEventLoop();
}
void MidiManagerAlsa::ProcessSingleEvent(snd_seq_event_t* event,
double timestamp) {
- std::map<int, uint32>::iterator source_it =
- source_map_.find(AddrToInt(&event->source));
+ auto source_it = source_map_.find(AddrToInt(&event->source));
if (source_it != source_map_.end()) {
uint32 source = source_it->second;
if (event->type == SND_SEQ_EVENT_SYSEX) {
« no previous file with comments | « media/midi/midi_manager_alsa.h ('k') | media/midi/midi_manager_alsa_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698