summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@digia.com>2013-10-21 19:02:31 +0200
committerEirik Aavitsland <eirik.aavitsland@digia.com>2013-10-25 15:11:39 +0300
commit663c9851fe367e8c2bdf8bc37e64b9e1668e3fe2 (patch)
tree0a59b4122374532b06eda06ca4fb3a201e9213ac /src
parentbfc709b616320dc2a68f7ddb866d77aa8a503d68 (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>
Diffstat (limited to 'src')
-rw-r--r--src/qt_hw_init/main.cpp23
-rw-r--r--src/utils/qdroidutils.cpp22
-rw-r--r--src/utils/qdroidutils.h9
-rw-r--r--src/utils/utils.pro2
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