зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1575638 - Perform the hard-right panning on macbook pros in Gecko and not in cubeb. r=kinetik
Panning support in cubeb was removed in 8c3e32bd24
Differential Revision: https://phabricator.services.mozilla.com/D43058
--HG--
extra : moz-landing-system : lando
This commit is contained in:
Родитель
b0a6955511
Коммит
8fa26945d0
|
@ -898,6 +898,18 @@ long AudioCallbackDriver::DataCallback(const AudioDataValue* aInputBuffer,
|
|||
GraphImpl()->NotifyOutputData(aOutputBuffer, static_cast<size_t>(aFrames),
|
||||
mSampleRate, mOutputChannels);
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
// This only happens when the output is on a macbookpro's external speaker,
|
||||
// that are stereo, but let's just be safe.
|
||||
if (mNeedsPanning && mOutputChannels == 2) {
|
||||
// hard pan to the right
|
||||
for (uint32_t i = 0; i < aFrames * 2; i += 2) {
|
||||
aOutputBuffer[i + 1] += aOutputBuffer[i];
|
||||
aOutputBuffer[i] = 0.0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!stillProcessing) {
|
||||
// About to hand over control of the graph. Do not start a new driver if
|
||||
// StateCallback() receives an error for this stream while the main thread
|
||||
|
@ -1013,19 +1025,12 @@ void AudioCallbackDriver::PanOutputIfNeeded(bool aMicrophoneActive) {
|
|||
// Check if we are currently outputing sound on external speakers.
|
||||
if (!strcmp(out->output_name, "ispk")) {
|
||||
// Pan everything to the right speaker.
|
||||
if (aMicrophoneActive) {
|
||||
if (cubeb_stream_set_panning(mAudioStream, 1.0) != CUBEB_OK) {
|
||||
NS_WARNING("Could not pan audio output to the right.");
|
||||
}
|
||||
} else {
|
||||
if (cubeb_stream_set_panning(mAudioStream, 0.0) != CUBEB_OK) {
|
||||
NS_WARNING("Could not pan audio output to the center.");
|
||||
}
|
||||
}
|
||||
LOG(LogLevel::Debug, ("Using the built-in speakers, with%s audio input",
|
||||
aMicrophoneActive ? "" : "out"));
|
||||
mNeedsPanning = aMicrophoneActive;
|
||||
} else {
|
||||
if (cubeb_stream_set_panning(mAudioStream, 0.0) != CUBEB_OK) {
|
||||
NS_WARNING("Could not pan audio output to the center.");
|
||||
}
|
||||
LOG(LogLevel::Debug, ("Using an external output device"));
|
||||
mNeedsPanning = false;
|
||||
}
|
||||
cubeb_stream_device_destroy(mAudioStream, out);
|
||||
}
|
||||
|
|
|
@ -534,6 +534,12 @@ class AudioCallbackDriver : public GraphDriver,
|
|||
/* True if this driver was created from a driver created because of a previous
|
||||
* AudioCallbackDriver failure. */
|
||||
bool mFromFallback;
|
||||
#ifdef XP_MACOSX
|
||||
/* When using the built-in speakers on macbook pro (13 and 15, all models),
|
||||
* it's best to hard pan the audio on the right, to avoid feedback into the
|
||||
* microphone that is located next to the left speaker. */
|
||||
bool mNeedsPanning;
|
||||
#endif
|
||||
};
|
||||
|
||||
class AsyncCubebTask : public Runnable {
|
||||
|
|
Загрузка…
Ссылка в новой задаче