Closed
Bug 1218629
Opened 9 years ago
Closed 9 years ago
Save audio volume for each device to setting db
Categories
(Firefox OS Graveyard :: AudioChannel, defect)
Tracking
(firefox46 fixed)
RESOLVED
FIXED
Tracking | Status | |
---|---|---|
firefox46 | --- | fixed |
People
(Reporter: sotaro, Assigned: sotaro)
References
Details
(Whiteboard: permafail)
Attachments
(1 file, 7 obsolete files)
28.41 KB,
patch
|
sotaro
:
review+
|
Details | Diff | Splinter Review |
+++ This bug was initially created as a clone of Bug #1196724 +++
Bug 1196724 does not update how to hold volume. This bug should update it as to hold audio volume for each device to setting db.
Assignee | ||
Updated•9 years ago
|
Assignee | ||
Updated•9 years ago
|
Summary: Hold audio volume for each device in setting db → Save audio volume for each device to setting db
Assignee | ||
Updated•9 years ago
|
Assignee: nobody → sotaro.ikeda.g
Assignee | ||
Updated•9 years ago
|
Keywords: dev-doc-needed
Assignee | ||
Comment 1•9 years ago
|
||
Assignee | ||
Comment 2•9 years ago
|
||
Fix build failure on gonk KK.
Attachment #8689975 -
Attachment is obsolete: true
Assignee | ||
Comment 3•9 years ago
|
||
Fix build failure on ICS.
Attachment #8693423 -
Attachment is obsolete: true
Assignee | ||
Comment 4•9 years ago
|
||
Fixed db save problems.
Attachment #8693425 -
Attachment is obsolete: true
Assignee | ||
Comment 6•9 years ago
|
||
attachment 8694031 [details] [diff] [review] seems to work well on nexus-5-l and aries. But it caused the problem on ics hamachi. AudioPolicyManager's different seems to affect to it.
Assignee | ||
Comment 7•9 years ago
|
||
On hamachi, AudioSystem::getDevicesForStream() is not provided yet. Instead AudioManager uses AUDIO_DEVICE_OUT_DEFAULT.
Assignee | ||
Comment 8•9 years ago
|
||
(In reply to Sotaro Ikeda [:sotaro] from comment #7)
> On hamachi, AudioSystem::getDevicesForStream() is not provided yet. Instead
> AudioManager uses AUDIO_DEVICE_OUT_DEFAULT.
And there is not way to specify a device to out put in AudioSystem::setStreamVolumeIndex().
In ics, it seems reasonable to handle as if it supports only one audio device out.
Assignee | ||
Comment 9•9 years ago
|
||
fix ics gonk problem.
Attachment #8694031 -
Attachment is obsolete: true
Assignee | ||
Updated•9 years ago
|
Attachment #8694077 -
Flags: review?(alwu)
Comment 10•9 years ago
|
||
Comment on attachment 8694077 [details] [diff] [review]
patch - Save audio volume of each device to setting db
Review of attachment 8694077 [details] [diff] [review]:
-----------------------------------------------------------------
LGTM, but here are still some questions.
Thanks!
::: dom/system/gonk/AudioManager.cpp
@@ +125,5 @@
> AUDIO_STREAM_SYSTEM, // AudioChannel::System
> };
>
> +
> +struct AudioDeviceTable {
I think "AudioDeviceInfo" would be better.
@@ +138,5 @@
> + { "earpiece", AUDIO_DEVICE_OUT_EARPIECE },
> + { "speaker", AUDIO_DEVICE_OUT_SPEAKER },
> + { "wired_headset", AUDIO_DEVICE_OUT_WIRED_HEADSET },
> + { "wired_headphone", AUDIO_DEVICE_OUT_WIRED_HEADPHONE },
> + { "bt_scoheadser", AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET },
s/bt_scoheadser/bt_scoheadset
@@ +1007,5 @@
> }
>
> int32_t streamAlias = sStreamVolumeAliasTbl[aStream];
> + VolumeStreamState* streamState = mStreamStates[streamAlias].get();
> + return streamState->SetVolumeIndexToAliasStreams(aIndex, aDevice);
We already found the alias stream in InitVolumeForDevice(), why we need to set alias streams again?
I think we can call SetVolumeIndex() here, instead of InitVolumeForDevice()?
@@ +1116,2 @@
> {
> + // Default volume of AUDIO_DEVICE_OUT_DEFAULT is already set.
Why remove initialization here?
Here is to set the default volume to all devices, not just for AUDIO_DEVICE_OUT_DEFAULT.
Here is case,
In the first time we enable this patch, the new device info (audio.[volume_type].[device]) doesn't be stored in the DB yet. Therefore, we might get the init-error (value undefined), then we need to set the default volume for all devices.
@@ +1190,4 @@
> }
>
> void
> +AudioManager::InitVolumeForDevice(int32_t aStreamType,
Change function name to "InitVolumeForAliasStreams".
@@ +1440,5 @@
> aDevice);
> return rv ? NS_ERROR_FAILURE : NS_OK;
> #else
> if (aUpdateCache) {
> + mVolumeIndexes.Put(AUDIO_DEVICE_OUT_SPEAKER, aIndex);
why AUDIO_DEVICE_OUT_SPEAKER here?
@@ +1445,2 @@
> mIsVolumeIndexesChanged = true;
> + mManager.AudioOutDeviceUpdated(AUDIO_DEVICE_OUT_SPEAKER);
ditto.
::: dom/system/gonk/AudioManager.h
@@ +103,5 @@
> int32_t mPhoneState;
>
> bool mIsVolumeInited;
>
> + // A bitwise variable for volume update of audio output devices
nit,
// A bitwise variable for volume update of audio output devices, clear it after store the value into database.
Attachment #8694077 -
Flags: review?(alwu)
Assignee | ||
Comment 11•9 years ago
|
||
(In reply to Alastor Wu [:alwu] from comment #10)
> Comment on attachment 8694077 [details] [diff] [review]
> patch - Save audio volume of each device to setting db
>
> Review of attachment 8694077 [details] [diff] [review]:
> -----------------------------------------------------------------
>
> LGTM, but here are still some questions.
> Thanks!
>
> ::: dom/system/gonk/AudioManager.cpp
> @@ +125,5 @@
> > AUDIO_STREAM_SYSTEM, // AudioChannel::System
> > };
> >
> > +
> > +struct AudioDeviceTable {
>
> I think "AudioDeviceInfo" would be better.
I'll update it in a next patch.
>
> @@ +138,5 @@
> > + { "earpiece", AUDIO_DEVICE_OUT_EARPIECE },
> > + { "speaker", AUDIO_DEVICE_OUT_SPEAKER },
> > + { "wired_headset", AUDIO_DEVICE_OUT_WIRED_HEADSET },
> > + { "wired_headphone", AUDIO_DEVICE_OUT_WIRED_HEADPHONE },
> > + { "bt_scoheadser", AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET },
>
> s/bt_scoheadser/bt_scoheadset
I'll update it in a next patch
>
> @@ +1007,5 @@
> > }
> >
> > int32_t streamAlias = sStreamVolumeAliasTbl[aStream];
> > + VolumeStreamState* streamState = mStreamStates[streamAlias].get();
> > + return streamState->SetVolumeIndexToAliasStreams(aIndex, aDevice);
>
> We already found the alias stream in InitVolumeForDevice(), why we need to
> set alias streams again?
InitVolumeForDevice() became unnecessary. I'll remove it in a next patch.
>
> I think we can call SetVolumeIndex() here, instead of InitVolumeForDevice()?
InitVolumeForDevice() became unnecessary. I'll remove it in a next patch.
> @@ +1116,2 @@
> > {
> > + // Default volume of AUDIO_DEVICE_OUT_DEFAULT is already set.
>
> Why remove initialization here?
> Here is to set the default volume to all devices, not just for
> AUDIO_DEVICE_OUT_DEFAULT.
Initialization only to AUDIO_DEVICE_OUT_DEFAULT is enough for default volume setting.
> Here is case,
> In the first time we enable this patch, the new device info
> (audio.[volume_type].[device]) doesn't be stored in the DB yet. Therefore,
> we might get the init-error (value undefined), then we need to set the
> default volume for all devices.
We do not need to set default volume for all devices since each device does not have different volume setting by default.
>
> @@ +1190,4 @@
> > }
> >
> > void
> > +AudioManager::InitVolumeForDevice(int32_t aStreamType,
>
> Change function name to "InitVolumeForAliasStreams".
InitVolumeForDevice is going to be removed in a next patch.
>
> @@ +1440,5 @@
> > aDevice);
> > return rv ? NS_ERROR_FAILURE : NS_OK;
> > #else
> > if (aUpdateCache) {
> > + mVolumeIndexes.Put(AUDIO_DEVICE_OUT_SPEAKER, aIndex);
>
> why AUDIO_DEVICE_OUT_SPEAKER here?
ICS does not support per device volume setting and AudioManager does not store AUDIO_DEVICE_OUT_DEFAULT. Just use AUDIO_DEVICE_OUT_SPEAKER for storing volume to DB. I am going to add a comment in a next patch.
> @@ +1445,2 @@
> > mIsVolumeIndexesChanged = true;
> > + mManager.AudioOutDeviceUpdated(AUDIO_DEVICE_OUT_SPEAKER);
>
> ditto.
ditto.
>
> ::: dom/system/gonk/AudioManager.h
> @@ +103,5 @@
> > int32_t mPhoneState;
> >
> > bool mIsVolumeInited;
> >
> > + // A bitwise variable for volume update of audio output devices
>
> nit,
> // A bitwise variable for volume update of audio output devices, clear it
> after store the value into database.
I will update the comment in a next patch.
Assignee | ||
Comment 12•9 years ago
|
||
> > Here is case,
> > In the first time we enable this patch, the new device info
> > (audio.[volume_type].[device]) doesn't be stored in the DB yet. Therefore,
> > we might get the init-error (value undefined), then we need to set the
> > default volume for all devices.
>
> We do not need to set default volume for all devices since each device does
> not have different volume setting by default.
Per device volume is necessary only when the volume is different from the default volume.
Assignee | ||
Comment 13•9 years ago
|
||
(In reply to Alastor Wu [:alwu] from comment #10)
>
> Here is case,
> In the first time we enable this patch, the new device info
> (audio.[volume_type].[device]) doesn't be stored in the DB yet. Therefore,
> we might get the init-error (value undefined), then we need to set the
> default volume for all devices.
I did not see error. It just failed "if (aResult.isInt32())".
Assignee | ||
Comment 14•9 years ago
|
||
Apply the comment.
Attachment #8694077 -
Attachment is obsolete: true
Assignee | ||
Updated•9 years ago
|
Attachment #8700556 -
Flags: review?(alwu)
Assignee | ||
Comment 15•9 years ago
|
||
(In reply to Sotaro Ikeda [:sotaro] from comment #13)
> (In reply to Alastor Wu [:alwu] from comment #10)
> >
> > Here is case,
> > In the first time we enable this patch, the new device info
> > (audio.[volume_type].[device]) doesn't be stored in the DB yet. Therefore,
> > we might get the init-error (value undefined), then we need to set the
> > default volume for all devices.
>
> I did not see error. It just failed "if (aResult.isInt32())".
In settings api implementation, undefined seems also a valid value.
https://dxr.mozilla.org/mozilla-central/source/dom/settings/SettingsDB.jsm#203
Comment 16•9 years ago
|
||
Comment on attachment 8700556 [details] [diff] [review]
patch - Save audio volume of each device to setting db
Review of attachment 8700556 [details] [diff] [review]:
-----------------------------------------------------------------
LGTM, little nits and one question.
Thanks!
::: dom/system/gonk/AudioManager.cpp
@@ +140,5 @@
> + { "speaker", AUDIO_DEVICE_OUT_SPEAKER },
> + { "wired_headset", AUDIO_DEVICE_OUT_WIRED_HEADSET },
> + { "wired_headphone", AUDIO_DEVICE_OUT_WIRED_HEADPHONE },
> + { "bt_scoheadset", AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET },
> + { "bt_a2dp", AUDIO_DEVICE_OUT_BLUETOOTH_A2DP },
nit : align all AUDIO_DEVICE_OUT_XXX.
@@ +1390,5 @@
> bool exist = mVolumeIndexes.Get(aDevice, &oldVolumeIndex);
> if (exist && aIndex == oldVolumeIndex) {
> // No update
> return NS_OK;
> }
nit : add one space line.
@@ +1401,5 @@
> if ((streamType != mStreamType) &&
> sStreamVolumeAliasTbl[streamType] == mStreamType) {
> // Rescaling of index is not necessary.
> rv = mManager.mStreamStates[streamType]->
> SetVolumeIndexToAliasStreams(aIndex, aDevice);
One question, although it's not include in this changeset.
When we achieve this line, means that we already find the alias stream, so why we don't just call "SetVolumeIndex()"?
---
One more idea, if above suggestion is workable, maybe we can move line#1389~1394 into SetVolumeIndex().
IMMO, these codes are more appropriate within that function.
Attachment #8700556 -
Flags: review?(alwu) → review+
Assignee | ||
Comment 17•9 years ago
|
||
(In reply to Alastor Wu [:alwu] from comment #16)
>
> @@ +1401,5 @@
> > if ((streamType != mStreamType) &&
> > sStreamVolumeAliasTbl[streamType] == mStreamType) {
> > // Rescaling of index is not necessary.
> > rv = mManager.mStreamStates[streamType]->
> > SetVolumeIndexToAliasStreams(aIndex, aDevice);
>
> One question, although it's not include in this changeset.
>
> When we achieve this line, means that we already find the alias stream, so
> why we don't just call "SetVolumeIndex()"?
Yes, it could be reasonable clean up. The function originally mimics android's VolumeStreamState.setIndex().
http://androidxref.com/6.0.0_r1/xref/frameworks/base/services/core/java/com/android/server/audio/AudioService.java#3809
But the current VolumeStreamState::SetVolumeIndexToAliasStreams()'s role is a bit different from VolumeStreamState.setIndex().
>
> ---
>
> One more idea, if above suggestion is workable, maybe we can move
> line#1389~1394 into SetVolumeIndex().
> IMMO, these codes are more appropriate within that function.
Yea, it is reasonable change. Since by the patch, VolumeStreamState::SetVolumeIndexToAliasDevices() is removed.
Assignee | ||
Comment 18•9 years ago
|
||
(In reply to Sotaro Ikeda [:sotaro PTO 28/Dec - 4/Jan] from comment #17)
> >
> > ---
> >
> > One more idea, if above suggestion is workable, maybe we can move
> > line#1389~1394 into SetVolumeIndex().
> > IMMO, these codes are more appropriate within that function.
>
> Yea, it is reasonable change. Since by the patch,
> VolumeStreamState::SetVolumeIndexToAliasDevices() is removed.
In current implementation, it is reasonable. But Bug 1197800 prefers current way of implementation.
Assignee | ||
Comment 19•9 years ago
|
||
Apply the comments. Carry "r=alwu".
Attachment #8700556 -
Attachment is obsolete: true
Attachment #8701669 -
Flags: review+
Assignee | ||
Comment 20•9 years ago
|
||
Comment 21•9 years ago
|
||
Comment 22•9 years ago
|
||
bugherder |
You need to log in
before you can comment on or make changes to this bug.
Description
•