summaryrefslogtreecommitdiffstats
path: root/media/libmedia/AudioEffect.cpp
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2010-09-24 11:52:04 -0700
committerEric Laurent <elaurent@google.com>2010-09-24 15:24:54 -0700
commit0fa449cc475580d995e9d56756c3da5507d2b6f6 (patch)
tree1e344eefa5847ad1e8ea3fc508e0d63ba5334c13 /media/libmedia/AudioEffect.cpp
parent76e2c7be04aeff55f3e6a473ff1cd6d9ec2d620c (diff)
downloadframeworks_av-0fa449cc475580d995e9d56756c3da5507d2b6f6.zip
frameworks_av-0fa449cc475580d995e9d56756c3da5507d2b6f6.tar.gz
frameworks_av-0fa449cc475580d995e9d56756c3da5507d2b6f6.tar.bz2
Fix error in AudioEffect command status reporting.
AudioEffect::command() should not interpret the status returned in pReplyData unless the command is ENABLE or DISABLE. Also fixed: - bug in Visualizer::getWAveForm() status reporting. - wrong initialization value for capture buffer in visualizer engine. Change-Id: I60fb0011f9dba96ee74661dec1e8ef441edcaf35
Diffstat (limited to 'media/libmedia/AudioEffect.cpp')
-rw-r--r--media/libmedia/AudioEffect.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/media/libmedia/AudioEffect.cpp b/media/libmedia/AudioEffect.cpp
index 0f3e245..88b8c86 100644
--- a/media/libmedia/AudioEffect.cpp
+++ b/media/libmedia/AudioEffect.cpp
@@ -228,24 +228,32 @@ status_t AudioEffect::command(uint32_t cmdCode,
void *replyData)
{
if (mStatus != NO_ERROR && mStatus != ALREADY_EXISTS) {
+ LOGV("command() bad status %d", mStatus);
return INVALID_OPERATION;
}
- status_t status = mIEffect->command(cmdCode, cmdSize, cmdData, replySize, replyData);
- if (status != NO_ERROR) {
- return status;
+ if ((cmdCode == EFFECT_CMD_ENABLE || cmdCode == EFFECT_CMD_DISABLE) &&
+ (replySize == NULL || *replySize != sizeof(status_t) || replyData == NULL)) {
+ return BAD_VALUE;
}
- status = *(status_t *)replyData;
+
+ status_t status = mIEffect->command(cmdCode, cmdSize, cmdData, replySize, replyData);
if (status != NO_ERROR) {
return status;
}
- if (cmdCode == EFFECT_CMD_ENABLE) {
- android_atomic_or(1, &mEnabled);
- }
- if (cmdCode == EFFECT_CMD_DISABLE) {
- android_atomic_and(~1, &mEnabled);
+ if (cmdCode == EFFECT_CMD_ENABLE || cmdCode == EFFECT_CMD_DISABLE) {
+ status = *(status_t *)replyData;
+ if (status != NO_ERROR) {
+ return status;
+ }
+ if (cmdCode == EFFECT_CMD_ENABLE) {
+ android_atomic_or(1, &mEnabled);
+ } else {
+ android_atomic_and(~1, &mEnabled);
+ }
}
+
return status;
}