diff options
author | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2012-08-15 21:03:23 +0200 |
---|---|---|
committer | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2012-11-14 00:52:12 +0100 |
commit | 8c3e7de7d76717e90658bfdf0c0411625454b8c5 (patch) | |
tree | ddddfd388b13083cad6398bbd206e99bea9a705e | |
parent | f5037ad1ebb04e99622af5e99aeac0c1b44090b7 (diff) |
frameworks/media: Fix aliasing violations
Change-Id: I0c3ad4d935abe6cf6df222f7d70381d868f15fe8
Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r-- | media/libmedia/Visualizer.cpp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/media/libmedia/Visualizer.cpp b/media/libmedia/Visualizer.cpp index 8196e107..6dec8f25 100644 --- a/media/libmedia/Visualizer.cpp +++ b/media/libmedia/Visualizer.cpp @@ -134,13 +134,17 @@ status_t Visualizer::setCaptureSize(uint32_t size) return INVALID_OPERATION; } - uint32_t buf32[sizeof(effect_param_t) / sizeof(uint32_t) + 2]; - effect_param_t *p = (effect_param_t *)buf32; + union { + uint32_t buf32[sizeof(effect_param_t) / sizeof(uint32_t) + 2]; + effect_param_t bufp; + }; + effect_param_t *p = &bufp; p->psize = sizeof(uint32_t); p->vsize = sizeof(uint32_t); - *(int32_t *)p->data = VISUALIZER_PARAM_CAPTURE_SIZE; - *((int32_t *)p->data + 1)= size; + int32_t const vpcs = VISUALIZER_PARAM_CAPTURE_SIZE; + memcpy(&p->data, &vpcs, sizeof(vpcs)); + memcpy(&p->data+sizeof(int32_t), &size, sizeof(size)); status_t status = setParameter(p); ALOGV("setCaptureSize size %d status %d p->status %d", size, status, p->status); @@ -168,8 +172,10 @@ status_t Visualizer::setScalingMode(uint32_t mode) { p->psize = sizeof(uint32_t); p->vsize = sizeof(uint32_t); - *(int32_t *)p->data = VISUALIZER_PARAM_SCALING_MODE; - *((int32_t *)p->data + 1)= mode; + + int32_t const vpsm = VISUALIZER_PARAM_SCALING_MODE; + memcpy(&p->data, &vpsm, sizeof(vpsm)); + memcpy(&p->data+sizeof(int32_t), &mode, sizeof(mode)); status_t status = setParameter(p); ALOGV("setScalingMode mode %d status %d p->status %d", mode, status, p->status); @@ -296,21 +302,24 @@ void Visualizer::periodicCapture() uint32_t Visualizer::initCaptureSize() { - uint32_t buf32[sizeof(effect_param_t) / sizeof(uint32_t) + 2]; - effect_param_t *p = (effect_param_t *)buf32; + union { + uint32_t buf32[sizeof(effect_param_t) / sizeof(uint32_t) + 2]; + effect_param_t p; + }; - p->psize = sizeof(uint32_t); - p->vsize = sizeof(uint32_t); - *(int32_t *)p->data = VISUALIZER_PARAM_CAPTURE_SIZE; - status_t status = getParameter(p); + p.psize = sizeof(uint32_t); + p.vsize = sizeof(uint32_t); + int32_t const vpcs = VISUALIZER_PARAM_CAPTURE_SIZE; + memcpy(&p.data, &vpcs, sizeof(vpcs)); + status_t status = getParameter(&p); if (status == NO_ERROR) { - status = p->status; + status = p.status; } uint32_t size = 0; if (status == NO_ERROR) { - size = *((int32_t *)p->data + 1); + memcpy(&size, &p.data+sizeof(int32_t), sizeof(int32_t)); } mCaptureSize = size; |