diff options
Diffstat (limited to 'devel/electron32/files/patch-media_audio_sndio_sndio__output.cc')
| -rw-r--r-- | devel/electron32/files/patch-media_audio_sndio_sndio__output.cc | 190 | 
1 files changed, 0 insertions, 190 deletions
| diff --git a/devel/electron32/files/patch-media_audio_sndio_sndio__output.cc b/devel/electron32/files/patch-media_audio_sndio_sndio__output.cc deleted file mode 100644 index 2672bf645702..000000000000 --- a/devel/electron32/files/patch-media_audio_sndio_sndio__output.cc +++ /dev/null @@ -1,190 +0,0 @@ ---- media/audio/sndio/sndio_output.cc.orig	2023-02-15 13:09:00 UTC -+++ media/audio/sndio/sndio_output.cc -@@ -0,0 +1,187 @@ -+// Copyright (c) 2012 The Chromium Authors. All rights reserved. -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+#include "base/logging.h" -+#include "base/time/time.h" -+#include "base/time/default_tick_clock.h" -+#include "media/audio/audio_manager_base.h" -+#include "media/base/audio_timestamp_helper.h" -+#include "media/audio/sndio/sndio_output.h" -+ -+namespace media { -+ -+static const SampleFormat kSampleFormat = kSampleFormatS16; -+ -+void SndioAudioOutputStream::OnMoveCallback(void *arg, int delta) { -+  SndioAudioOutputStream* self = static_cast<SndioAudioOutputStream*>(arg); -+ -+  self->hw_delay -= delta; -+} -+ -+void SndioAudioOutputStream::OnVolCallback(void *arg, unsigned int vol) { -+  SndioAudioOutputStream* self = static_cast<SndioAudioOutputStream*>(arg); -+ -+  self->vol = vol; -+} -+ -+void *SndioAudioOutputStream::ThreadEntry(void *arg) { -+  SndioAudioOutputStream* self = static_cast<SndioAudioOutputStream*>(arg); -+ -+  self->ThreadLoop(); -+  return NULL; -+} -+ -+SndioAudioOutputStream::SndioAudioOutputStream(const AudioParameters& params, -+                                               AudioManagerBase* manager) -+    : manager(manager), -+      params(params), -+      audio_bus(AudioBus::Create(params)), -+      state(kClosed), -+      mutex(PTHREAD_MUTEX_INITIALIZER) { -+} -+ -+SndioAudioOutputStream::~SndioAudioOutputStream() { -+  if (state != kClosed) -+    Close(); -+} -+ -+bool SndioAudioOutputStream::Open() { -+  if (params.format() != AudioParameters::AUDIO_PCM_LINEAR && -+      params.format() != AudioParameters::AUDIO_PCM_LOW_LATENCY) { -+    LOG(WARNING) << "Unsupported audio format."; -+    return false; -+  } -+  state = kStopped; -+  volpending = 0; -+  vol = SIO_MAXVOL; -+  buffer = new char[audio_bus->frames() * params.GetBytesPerFrame(kSampleFormat)]; -+  return true; -+} -+ -+void SndioAudioOutputStream::Close() { -+  if (state == kClosed) -+    goto release; -+  if (state == kRunning) -+    Stop(); -+  state = kClosed; -+  delete [] buffer; -+release: -+  manager->ReleaseOutputStream(this);  // Calls the destructor -+} -+ -+void SndioAudioOutputStream::Start(AudioSourceCallback* callback) { -+  struct sio_par par; -+  int sig; -+ -+  sio_initpar(&par); -+  par.rate = params.sample_rate(); -+  par.pchan = params.channels(); -+  par.bits = SampleFormatToBitsPerChannel(kSampleFormat); -+  par.bps = par.bits / 8; -+  par.sig = sig = par.bits != 8 ? 1 : 0; -+  par.le = SIO_LE_NATIVE; -+  par.appbufsz = params.frames_per_buffer(); -+ -+  hdl = sio_open(SIO_DEVANY, SIO_PLAY, 0); -+  if (hdl == NULL) { -+    LOG(ERROR) << "Couldn't open audio device."; -+    return; -+  } -+  if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) { -+    LOG(ERROR) << "Couldn't set audio parameters."; -+    sio_close(hdl); -+    return; -+  } -+  if (par.rate  != (unsigned int)params.sample_rate() || -+      par.pchan != (unsigned int)params.channels() || -+      par.bits  != (unsigned int)SampleFormatToBitsPerChannel(kSampleFormat) || -+      par.sig   != (unsigned int)sig || -+      (par.bps > 1 && par.le != SIO_LE_NATIVE) || -+      (par.bits != par.bps * 8)) { -+    LOG(ERROR) << "Unsupported audio parameters."; -+    sio_close(hdl); -+    return; -+  } -+ -+  sio_onmove(hdl, &OnMoveCallback, this); -+  sio_onvol(hdl, &OnVolCallback, this); -+ -+  state = kRunning; -+  hw_delay = 0; -+  source = callback; -+  sio_start(hdl); -+ -+  if (pthread_create(&thread, NULL, &ThreadEntry, this) != 0) { -+    LOG(ERROR) << "Failed to create real-time thread."; -+    sio_stop(hdl); -+    sio_close(hdl); -+    state = kStopped; -+  } -+} -+ -+void SndioAudioOutputStream::Stop() { -+  if (state == kStopped) -+    return; -+  state = kStopWait; -+  pthread_join(thread, NULL); -+  sio_stop(hdl); -+  sio_close(hdl); -+  state = kStopped; -+} -+ -+void SndioAudioOutputStream::SetVolume(double v) { -+  pthread_mutex_lock(&mutex); -+  vol = v * SIO_MAXVOL; -+  volpending = 1; -+  pthread_mutex_unlock(&mutex); -+} -+ -+void SndioAudioOutputStream::GetVolume(double* v) { -+  pthread_mutex_lock(&mutex); -+  *v = vol * (1. / SIO_MAXVOL); -+  pthread_mutex_unlock(&mutex); -+} -+ -+// This stream is always used with sub second buffer sizes, where it's -+// sufficient to simply always flush upon Start(). -+void SndioAudioOutputStream::Flush() {} -+ -+void SndioAudioOutputStream::ThreadLoop(void) { -+  int avail, count, result; -+ -+  while (state == kRunning) { -+    // Update volume if needed -+    pthread_mutex_lock(&mutex); -+    if (volpending) { -+      volpending = 0; -+      sio_setvol(hdl, vol); -+    } -+    pthread_mutex_unlock(&mutex); -+ -+    // Get data to play -+    const base::TimeDelta delay = AudioTimestampHelper::FramesToTime(hw_delay, -+	params.sample_rate()); -+    count = source->OnMoreData(delay, base::TimeTicks::Now(), {}, audio_bus.get()); -+    audio_bus->ToInterleaved<SignedInt16SampleTypeTraits>(count, reinterpret_cast<int16_t*>(buffer)); -+    if (count == 0) { -+      // We have to submit something to the device -+      count = audio_bus->frames(); -+      memset(buffer, 0, count * params.GetBytesPerFrame(kSampleFormat)); -+      LOG(WARNING) << "No data to play, running empty cycle."; -+    } -+ -+    // Submit data to the device -+    avail = count * params.GetBytesPerFrame(kSampleFormat); -+    result = sio_write(hdl, buffer, avail); -+    if (result == 0) { -+      LOG(WARNING) << "Audio device disconnected."; -+      break; -+    } -+ -+    // Update hardware pointer -+    hw_delay += count; -+  } -+} -+ -+}  // namespace media | 
