summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2012-08-15 21:03:23 +0200
committerBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2012-11-14 00:52:12 +0100
commit8c3e7de7d76717e90658bfdf0c0411625454b8c5 (patch)
treeddddfd388b13083cad6398bbd206e99bea9a705e
parentf5037ad1ebb04e99622af5e99aeac0c1b44090b7 (diff)
frameworks/media: Fix aliasing violations
Change-Id: I0c3ad4d935abe6cf6df222f7d70381d868f15fe8 Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r--media/libmedia/Visualizer.cpp37
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;