summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Pfeffer <zach.pfeffer@linaro.org>2011-12-20 03:03:57 +0000
committerGerrit Code Review <gerrit@betelgeuse.canonical.com>2011-12-20 03:03:57 +0000
commit5a62d68c952f8abcf8642bad2f9c044aeb1e1b8c (patch)
tree0ad9a27b238f78728134d2d30c99d6c55ac1e1af
parent6d0dd5c72e90c23c1a433ec1643ff653231dbdbf (diff)
parent84c99565a89489021048f7ea69a827e71028ceea (diff)
downloadbase-5a62d68c952f8abcf8642bad2f9c044aeb1e1b8c.tar.gz
Merge "Revert "Revert "libstagefright: Fix aliasing violations""" into linaro_android_4.0.1
-rw-r--r--media/libstagefright/codecs/avc/enc/src/motion_comp.cpp8
-rw-r--r--media/libstagefright/httplive/LiveSession.cpp5
-rw-r--r--media/libstagefright/rtsp/ARTPConnection.cpp24
-rw-r--r--media/libstagefright/rtsp/ARTSPConnection.cpp7
-rw-r--r--media/libstagefright/rtsp/MyHandler.h16
5 files changed, 44 insertions, 16 deletions
diff --git a/media/libstagefright/codecs/avc/enc/src/motion_comp.cpp b/media/libstagefright/codecs/avc/enc/src/motion_comp.cpp
index ac62d782c83d..fff65ebab0dc 100644
--- a/media/libstagefright/codecs/avc/enc/src/motion_comp.cpp
+++ b/media/libstagefright/codecs/avc/enc/src/motion_comp.cpp
@@ -1315,7 +1315,11 @@ void eDiagonalInterpMC(uint8 *in1, uint8 *in2, int inpitch,
int result;
uint8 *p_cur, *p_ref, *p_tmp8;
int curr_offset, ref_offset;
- uint8 tmp_res[24][24], tmp_in[24][24];
+ union {
+ uint8 tmp_res[24][24];
+ uint32 tmp_res32[24][24/4];
+ };
+ uint8 tmp_in[24][24];
uint32 *p_tmp;
uint32 tmp, pkres, tmp_result;
int32 r0, r1, r2, r3, r4, r5;
@@ -1333,7 +1337,7 @@ void eDiagonalInterpMC(uint8 *in1, uint8 *in2, int inpitch,
ref_offset = 24-blkwidth;
}*/
- p_tmp = (uint32*) & (tmp_res[0][0]);
+ p_tmp = & (tmp_res32[0][0]);
for (j = blkheight; j > 0; j--)
{
r13 = 0;
diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp
index f67cdace819c..a13ee0b35a0e 100644
--- a/media/libstagefright/httplive/LiveSession.cpp
+++ b/media/libstagefright/httplive/LiveSession.cpp
@@ -192,8 +192,9 @@ void LiveSession::onConnect(const sp<AMessage> &msg) {
sp<AMessage> meta;
playlist->itemAt(i, &item.mURI, &meta);
- unsigned long bandwidth;
- CHECK(meta->findInt32("bandwidth", (int32_t *)&item.mBandwidth));
+ int32_t bandwidth;
+ CHECK(meta->findInt32("bandwidth", &bandwidth));
+ item.mBandwidth = bandwidth;
mBandwidthItems.push(item);
}
diff --git a/media/libstagefright/rtsp/ARTPConnection.cpp b/media/libstagefright/rtsp/ARTPConnection.cpp
index 47de4e0938d0..a77878b3d5fa 100644
--- a/media/libstagefright/rtsp/ARTPConnection.cpp
+++ b/media/libstagefright/rtsp/ARTPConnection.cpp
@@ -120,21 +120,24 @@ void ARTPConnection::MakePortPair(
start &= ~1;
for (unsigned port = start; port < 65536; port += 2) {
- struct sockaddr_in addr;
+ union {
+ struct sockaddr_in addr;
+ struct sockaddr addr_generic;
+ };
memset(addr.sin_zero, 0, sizeof(addr.sin_zero));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(port);
if (bind(*rtpSocket,
- (const struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ &addr_generic, sizeof(addr)) < 0) {
continue;
}
addr.sin_port = htons(port + 1);
if (bind(*rtcpSocket,
- (const struct sockaddr *)&addr, sizeof(addr)) == 0) {
+ &addr_generic, sizeof(addr)) == 0) {
*rtpPort = port;
return;
}
@@ -327,9 +330,14 @@ void ARTPConnection::onPollStreams() {
if (buffer->size() > 0) {
LOGV("Sending RR...");
+ union {
+ sockaddr_in *sa_in;
+ sockaddr *sa;
+ };
+ sa_in = &s->mRemoteRTCPAddr;
ssize_t n = sendto(
s->mRTCPSocket, buffer->data(), buffer->size(), 0,
- (const struct sockaddr *)&s->mRemoteRTCPAddr,
+ sa,
sizeof(s->mRemoteRTCPAddr));
CHECK_EQ(n, (ssize_t)buffer->size());
@@ -350,12 +358,18 @@ status_t ARTPConnection::receive(StreamInfo *s, bool receiveRTP) {
(!receiveRTP && s->mNumRTCPPacketsReceived == 0)
? sizeof(s->mRemoteRTCPAddr) : 0;
+ union {
+ sockaddr_in *sa_in;
+ sockaddr *sa;
+ };
+ sa_in = &s->mRemoteRTCPAddr;
+
ssize_t nbytes = recvfrom(
receiveRTP ? s->mRTPSocket : s->mRTCPSocket,
buffer->data(),
buffer->capacity(),
0,
- remoteAddrLen > 0 ? (struct sockaddr *)&s->mRemoteRTCPAddr : NULL,
+ remoteAddrLen > 0 ? sa : NULL,
remoteAddrLen > 0 ? &remoteAddrLen : NULL);
if (nbytes < 0) {
diff --git a/media/libstagefright/rtsp/ARTSPConnection.cpp b/media/libstagefright/rtsp/ARTSPConnection.cpp
index bd0e49158633..3deb9023ac5a 100644
--- a/media/libstagefright/rtsp/ARTSPConnection.cpp
+++ b/media/libstagefright/rtsp/ARTSPConnection.cpp
@@ -263,14 +263,17 @@ void ARTSPConnection::onConnect(const sp<AMessage> &msg) {
MakeSocketBlocking(mSocket, false);
- struct sockaddr_in remote;
+ union {
+ struct sockaddr_in remote;
+ struct sockaddr remote_generic;
+ };
memset(remote.sin_zero, 0, sizeof(remote.sin_zero));
remote.sin_family = AF_INET;
remote.sin_addr.s_addr = *(in_addr_t *)ent->h_addr;
remote.sin_port = htons(port);
int err = ::connect(
- mSocket, (const struct sockaddr *)&remote, sizeof(remote));
+ mSocket, &remote_generic, sizeof(remote));
reply->setInt32("server-ip", ntohl(remote.sin_addr.s_addr));
diff --git a/media/libstagefright/rtsp/MyHandler.h b/media/libstagefright/rtsp/MyHandler.h
index 812881305787..e144b7a9a422 100644
--- a/media/libstagefright/rtsp/MyHandler.h
+++ b/media/libstagefright/rtsp/MyHandler.h
@@ -201,9 +201,12 @@ struct MyHandler : public AHandler {
}
static void addSDES(int s, const sp<ABuffer> &buffer) {
- struct sockaddr_in addr;
+ union {
+ struct sockaddr_in addr;
+ struct sockaddr addr_generic;
+ };
socklen_t addrSize = sizeof(addr);
- CHECK_EQ(0, getsockname(s, (sockaddr *)&addr, &addrSize));
+ CHECK_EQ(0, getsockname(s, &addr_generic, &addrSize));
uint8_t *data = buffer->data() + buffer->size();
data[0] = 0x80 | 1;
@@ -259,7 +262,10 @@ struct MyHandler : public AHandler {
// rtp/rtcp ports to poke a hole into the firewall for future incoming
// packets. We're going to send an RR/SDES RTCP packet to both of them.
bool pokeAHole(int rtpSocket, int rtcpSocket, const AString &transport) {
- struct sockaddr_in addr;
+ union {
+ struct sockaddr_in addr;
+ struct sockaddr addr_generic;
+ };
memset(addr.sin_zero, 0, sizeof(addr.sin_zero));
addr.sin_family = AF_INET;
@@ -328,7 +334,7 @@ struct MyHandler : public AHandler {
ssize_t n = sendto(
rtpSocket, buf->data(), buf->size(), 0,
- (const sockaddr *)&addr, sizeof(addr));
+ &addr_generic, sizeof(addr));
if (n < (ssize_t)buf->size()) {
LOGE("failed to poke a hole for RTP packets");
@@ -339,7 +345,7 @@ struct MyHandler : public AHandler {
n = sendto(
rtcpSocket, buf->data(), buf->size(), 0,
- (const sockaddr *)&addr, sizeof(addr));
+ &addr_generic, sizeof(addr));
if (n < (ssize_t)buf->size()) {
LOGE("failed to poke a hole for RTCP packets");