summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2012-08-19 22:18:53 +0200
committerBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2012-11-14 13:08:20 +0100
commitddf144e4da3af0fc5bf4a985825dbbc778467764 (patch)
tree9bc64ba095d1a7a96df31c2830a297b95668cd99
parent0ec9bd5d7718acaf9cb2472526907144fafa876e (diff)
EffectVisualizer: Fix aliasing violations
Change-Id: I35532464df41a64ed920c34ad4bc1054cf6324b2 Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r--media/libeffects/visualizer/EffectVisualizer.cpp24
1 files changed, 17 insertions, 7 deletions
diff --git a/media/libeffects/visualizer/EffectVisualizer.cpp b/media/libeffects/visualizer/EffectVisualizer.cpp
index 44baf937..1eb3572c 100644
--- a/media/libeffects/visualizer/EffectVisualizer.cpp
+++ b/media/libeffects/visualizer/EffectVisualizer.cpp
@@ -421,22 +421,27 @@ int Visualizer_command(effect_handle_t self, uint32_t cmdCode, uint32_t cmdSize,
}
memcpy(pReplyData, pCmdData, sizeof(effect_param_t) + sizeof(uint32_t));
effect_param_t *p = (effect_param_t *)pReplyData;
+ union {
+ char *data;
+ uint32_t *data32;
+ };
+ data = p->data;
p->status = 0;
*replySize = sizeof(effect_param_t) + sizeof(uint32_t);
if (p->psize != sizeof(uint32_t)) {
p->status = -EINVAL;
break;
}
- switch (*(uint32_t *)p->data) {
+ switch (data32[0]) {
case VISUALIZER_PARAM_CAPTURE_SIZE:
ALOGV("get mCaptureSize = %d", pContext->mCaptureSize);
- *((uint32_t *)p->data + 1) = pContext->mCaptureSize;
+ data[1] = pContext->mCaptureSize;
p->vsize = sizeof(uint32_t);
*replySize += sizeof(uint32_t);
break;
case VISUALIZER_PARAM_SCALING_MODE:
ALOGV("get mScalingMode = %d", pContext->mScalingMode);
- *((uint32_t *)p->data + 1) = pContext->mScalingMode;
+ data[1] = pContext->mScalingMode;
p->vsize = sizeof(uint32_t);
*replySize += sizeof(uint32_t);
break;
@@ -452,21 +457,26 @@ int Visualizer_command(effect_handle_t self, uint32_t cmdCode, uint32_t cmdSize,
}
*(int32_t *)pReplyData = 0;
effect_param_t *p = (effect_param_t *)pCmdData;
+ union {
+ char *data;
+ uint32_t *data32;
+ };
+ data = p->data;
if (p->psize != sizeof(uint32_t) || p->vsize != sizeof(uint32_t)) {
*(int32_t *)pReplyData = -EINVAL;
break;
}
- switch (*(uint32_t *)p->data) {
+ switch (data32[0]) {
case VISUALIZER_PARAM_CAPTURE_SIZE:
- pContext->mCaptureSize = *((uint32_t *)p->data + 1);
+ pContext->mCaptureSize = data[1];
ALOGV("set mCaptureSize = %d", pContext->mCaptureSize);
break;
case VISUALIZER_PARAM_SCALING_MODE:
- pContext->mScalingMode = *((uint32_t *)p->data + 1);
+ pContext->mScalingMode = data[1];
ALOGV("set mScalingMode = %d", pContext->mScalingMode);
break;
case VISUALIZER_PARAM_LATENCY:
- pContext->mLatency = *((uint32_t *)p->data + 1);
+ pContext->mLatency = data[1];
ALOGV("set mLatency = %d", pContext->mLatency);
break;
default: