diff options
author | Zach Pfeffer <zach.pfeffer@linaro.org> | 2011-12-20 03:03:57 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@betelgeuse.canonical.com> | 2011-12-20 03:03:57 +0000 |
commit | 5a62d68c952f8abcf8642bad2f9c044aeb1e1b8c (patch) | |
tree | 0ad9a27b238f78728134d2d30c99d6c55ac1e1af | |
parent | 6d0dd5c72e90c23c1a433ec1643ff653231dbdbf (diff) | |
parent | 84c99565a89489021048f7ea69a827e71028ceea (diff) | |
download | base-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.cpp | 8 | ||||
-rw-r--r-- | media/libstagefright/httplive/LiveSession.cpp | 5 | ||||
-rw-r--r-- | media/libstagefright/rtsp/ARTPConnection.cpp | 24 | ||||
-rw-r--r-- | media/libstagefright/rtsp/ARTSPConnection.cpp | 7 | ||||
-rw-r--r-- | media/libstagefright/rtsp/MyHandler.h | 16 |
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"); |