diff options
author | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2012-08-19 22:18:53 +0200 |
---|---|---|
committer | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2012-11-14 13:08:20 +0100 |
commit | ddf144e4da3af0fc5bf4a985825dbbc778467764 (patch) | |
tree | 9bc64ba095d1a7a96df31c2830a297b95668cd99 | |
parent | 0ec9bd5d7718acaf9cb2472526907144fafa876e (diff) |
EffectVisualizer: Fix aliasing violations
Change-Id: I35532464df41a64ed920c34ad4bc1054cf6324b2
Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r-- | media/libeffects/visualizer/EffectVisualizer.cpp | 24 |
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: |