diff --git a/media/midi/midi_manager_alsa.cc b/media/midi/midi_manager_alsa.cc index dc33c29c66c5e..d57784415fcca 100644 --- a/media/midi/midi_manager_alsa.cc +++ b/media/midi/midi_manager_alsa.cc @@ -244,10 +244,7 @@ void MidiManagerAlsa::StartInitialization() { } // Initialize decoder. - snd_midi_event_t* tmp_decoder = nullptr; - snd_midi_event_new(0, &tmp_decoder); - ScopedSndMidiEventPtr decoder(tmp_decoder); - tmp_decoder = nullptr; + ScopedSndMidiEventPtr decoder = CreateScopedSndMidiEventPtr(0); snd_midi_event_no_status(decoder.get(), 1); // Initialize udev and monitor. @@ -856,11 +853,10 @@ std::string MidiManagerAlsa::AlsaCard::ExtractManufacturerString( void MidiManagerAlsa::SendMidiData(MidiManagerClient* client, uint32_t port_index, const std::vector& data) { - snd_midi_event_t* encoder; - snd_midi_event_new(kSendBufferSize, &encoder); + ScopedSndMidiEventPtr encoder = CreateScopedSndMidiEventPtr(kSendBufferSize); for (const auto datum : data) { snd_seq_event_t event; - int result = snd_midi_event_encode_byte(encoder, datum, &event); + int result = snd_midi_event_encode_byte(encoder.get(), datum, &event); if (result == 1) { // Full event, send it. base::AutoLock lock(out_ports_lock_); @@ -876,7 +872,6 @@ void MidiManagerAlsa::SendMidiData(MidiManagerClient* client, } } } - snd_midi_event_free(encoder); // Acknowledge send. AccumulateMidiBytesSent(client, data.size()); @@ -1389,6 +1384,13 @@ bool MidiManagerAlsa::Subscribe(uint32_t port_index, return true; } +MidiManagerAlsa::ScopedSndMidiEventPtr +MidiManagerAlsa::CreateScopedSndMidiEventPtr(size_t size) { + snd_midi_event_t* coder; + snd_midi_event_new(size, &coder); + return ScopedSndMidiEventPtr(coder); +} + #if !defined(OS_CHROMEOS) MidiManager* MidiManager::Create(MidiService* service) { return new MidiManagerAlsa(service); diff --git a/media/midi/midi_manager_alsa.h b/media/midi/midi_manager_alsa.h index c563584733fbf..c2e32807ffbd3 100644 --- a/media/midi/midi_manager_alsa.h +++ b/media/midi/midi_manager_alsa.h @@ -396,6 +396,10 @@ class MIDI_EXPORT MidiManagerAlsa final : public MidiManager { // Returns true if successful. bool Subscribe(uint32_t port_index, int client_id, int port_id); + // Allocates new snd_midi_event_t instance and wraps it to return as + // ScopedSndMidiEventPtr. + ScopedSndMidiEventPtr CreateScopedSndMidiEventPtr(size_t size); + // Members initialized in the constructor are below. // Our copies of the internal state of the ports of seq and udev. AlsaSeqState alsa_seq_state_;