diff options
author | Yoann Lopes <yoann.lopes@digia.com> | 2013-10-21 19:02:31 +0200 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@digia.com> | 2013-10-25 15:11:39 +0300 |
commit | 663c9851fe367e8c2bdf8bc37e64b9e1668e3fe2 (patch) | |
tree | 0a59b4122374532b06eda06ca4fb3a201e9213ac | |
parent | bfc709b616320dc2a68f7ddb866d77aa8a503d68 (diff) |
Fix sound on Nexus 7.
A behavior change in the HW audio driver for 4.2.2 causes the audio
routing to never be set up automatically.
Set the audio orientation to force the HW driver to set up audio
routing.
Task-number: QTRD-2472
Change-Id: I6f76aa299d0bc89c7061c7074dc5780e62045f0a
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@digia.com>
-rw-r--r-- | src/qt_hw_init/main.cpp | 23 | ||||
-rw-r--r-- | src/utils/qdroidutils.cpp | 22 | ||||
-rw-r--r-- | src/utils/qdroidutils.h | 9 | ||||
-rw-r--r-- | src/utils/utils.pro | 2 |
4 files changed, 35 insertions, 21 deletions
diff --git a/src/qt_hw_init/main.cpp b/src/qt_hw_init/main.cpp index 9fb810a..3419c21 100644 --- a/src/qt_hw_init/main.cpp +++ b/src/qt_hw_init/main.cpp @@ -3,6 +3,9 @@ static void setMaxVolume(QDroidUtils *utils) { + // Set the audio orientation to something to force the HW driver to reconfigure + // audio routing (workaround for bug on Nexus 7) + utils->setOrientationForAudioSystem(QDroidUtils::LandscapeAudioOrientation); utils->setMasterVolume(100); utils->setMasterMute(false); utils->setStreamVolume(QDroidUtils::SystemAudioStream, 100); @@ -16,32 +19,12 @@ static void setDisplayBrightness(QDroidUtils *utils) utils->setDisplayBrightness(255); } -static void showValues(QDroidUtils *utils) -{ - qDebug() << "Master volume:" << utils->masterVolume(); - qDebug() << "Master mute:" << utils->masterMute(); - qDebug() << "System audio volume:" << utils->streamVolume(QDroidUtils::SystemAudioStream); - qDebug() << "System audio mute:" << utils->streamMute(QDroidUtils::SystemAudioStream); - qDebug() << "Music audio volume:" << utils->streamVolume(QDroidUtils::MusicAudioStream); - qDebug() << "Music audio mute:" << utils->streamMute(QDroidUtils::MusicAudioStream); - qDebug() << "Notification audio volume:" << utils->streamVolume(QDroidUtils::NotificationAudioStream); - qDebug() << "Notification audio mute:" << utils->streamMute(QDroidUtils::NotificationAudioStream); - qDebug() << "EnforcedAudible audio volume:" << utils->streamVolume(QDroidUtils::EnforcedAudibleAudioStream); - qDebug() << "EnforcedAudible audio mute:" << utils->streamMute(QDroidUtils::EnforcedAudibleAudioStream); -} - int main(int, char *[]) { QDroidUtils utils; - qDebug() << "Audio settings before change:"; - showValues(&utils); - setMaxVolume(&utils); setDisplayBrightness(&utils); - qDebug() << "Audio settings after change:"; - showValues(&utils); - return 0; } diff --git a/src/utils/qdroidutils.cpp b/src/utils/qdroidutils.cpp index f2194c4..da443c9 100644 --- a/src/utils/qdroidutils.cpp +++ b/src/utils/qdroidutils.cpp @@ -45,6 +45,28 @@ void QDroidUtils::powerOffSystem() qWarning("powerOff returned"); } +void QDroidUtils::setOrientationForAudioSystem(AudioOrientation orientation) +{ +#ifdef Q_OS_ANDROID_NO_SDK + QString orientationString = QStringLiteral("undefined"); + switch (orientation) { + case LandscapeAudioOrientation: + orientationString = QStringLiteral("landscape"); + break; + case PortraitAudioOrientation: + orientationString = QStringLiteral("portrait"); + break; + case SquareAudioOrientation: + orientationString = QStringLiteral("square"); + break; + default: + break; + } + android::AudioSystem::setParameters(0, android::String8(QStringLiteral("orientation=%2") + .arg(orientationString).toLatin1().constData())); +#endif +} + /*! * Sets the master volume to \a volume. * The volume can range from 0 to 100 and is linear. diff --git a/src/utils/qdroidutils.h b/src/utils/qdroidutils.h index 339a529..b0f9061 100644 --- a/src/utils/qdroidutils.h +++ b/src/utils/qdroidutils.h @@ -8,6 +8,13 @@ class Q_DECL_EXPORT QDroidUtils : public QObject Q_OBJECT Q_ENUMS(AudioStreamType) public: + enum AudioOrientation { + LandscapeAudioOrientation, + PortraitAudioOrientation, + SquareAudioOrientation, + UndefinedAudioOrientation, + }; + enum AudioStreamType { DefaultAudioStream = -1, VoiceCallAudioStream = 0, @@ -36,6 +43,8 @@ public Q_SLOTS: void rebootSystem(); void powerOffSystem(); + void setOrientationForAudioSystem(AudioOrientation orientation); + void setMasterVolume(int volume); void setMasterMute(bool mute); void setStreamVolume(AudioStreamType stream, int volume); diff --git a/src/utils/utils.pro b/src/utils/utils.pro index 5711337..a15231f 100644 --- a/src/utils/utils.pro +++ b/src/utils/utils.pro @@ -11,7 +11,7 @@ QT = core network MODULE = droidutils load(qt_module) -android: LIBS += -lmedia -lhardware -lcutils +android: LIBS += -lmedia -lhardware -lcutils -lutils HEADERS += \ $$PWD/qdroidutils.h |