aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavilla <davilla@4pi.com>2013-12-20 17:33:46 -0500
committerdavilla <davilla@4pi.com>2013-12-29 21:02:25 -0500
commit63455194d17c50e12aead614e397d860e0b9b1ef (patch)
treec44675bc487a9ddffc48a9d3d27a28baac2d9753
parentf8aecbac4591a607ca9ba3ac5fb8944aacf14a80 (diff)
fixed, arm alignemnet of am_sysinfo member under ICS
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp43
1 files changed, 26 insertions, 17 deletions
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp
index aae41acca3..4c1e31420d 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp
@@ -160,36 +160,45 @@ public:
// order matters, so pay attention
// to codec_para_t in codec_types.h
- CBitstreamConverter::skip_bits( &bs, 32); // CODEC_HANDLE handle
- CBitstreamConverter::skip_bits( &bs, 32); // CODEC_HANDLE cntl_handle
- CBitstreamConverter::skip_bits( &bs, 32); // CODEC_HANDLE sub_handle
+ CBitstreamConverter::write_bits(&bs, 32, 0); // CODEC_HANDLE handle
+ CBitstreamConverter::write_bits(&bs, 32, 0); // CODEC_HANDLE cntl_handle
+ CBitstreamConverter::write_bits(&bs, 32, 0); // CODEC_HANDLE sub_handle
// added in JellyBean 4.2
if (CAndroidFeatures::GetVersion() > 16)
- CBitstreamConverter::skip_bits(&bs, 32); // CODEC_HANDLE audio_utils_handle
+ CBitstreamConverter::write_bits(&bs, 32, 0); // CODEC_HANDLE audio_utils_handle
CBitstreamConverter::write_bits(&bs, 32, p_in->stream_type); // stream_type_t stream_type
// watch these, using bit fields (which is stupid)
CBitstreamConverter::write_bits(&bs, 1, 1); // unsigned int has_video:1
- CBitstreamConverter::skip_bits( &bs, 1); // unsigned int has_audio:1
- CBitstreamConverter::skip_bits( &bs, 1); // unsigned int has_sub:1
+ CBitstreamConverter::write_bits(&bs, 1, 0); // unsigned int has_audio:1
+ CBitstreamConverter::write_bits(&bs, 1, 0); // unsigned int has_sub:1
unsigned int value = p_in->noblock > 0 ? 1:0;
CBitstreamConverter::write_bits(&bs, 1, value); // unsigned int noblock:1
- CBitstreamConverter::skip_bits( &bs, 28); // align back to word boundary
+ CBitstreamConverter::write_bits(&bs, 28, 0); // align back to next word boundary
CBitstreamConverter::write_bits(&bs, 32, p_in->video_type); // int video_type
- CBitstreamConverter::skip_bits( &bs, 32); // int audio_type
- CBitstreamConverter::skip_bits( &bs, 32); // int sub_type
+ CBitstreamConverter::write_bits(&bs, 32, 0); // int audio_type
+ CBitstreamConverter::write_bits(&bs, 32, 0); // int sub_type
CBitstreamConverter::write_bits(&bs, 32, p_in->video_pid); // int video_pid
- CBitstreamConverter::skip_bits( &bs, 32); // int audio_pid
- CBitstreamConverter::skip_bits( &bs, 32); // int sub_pid
-
- CBitstreamConverter::skip_bits( &bs, 32); // int audio_channels
- CBitstreamConverter::skip_bits( &bs, 32); // int audio_samplerate
- CBitstreamConverter::skip_bits( &bs, 32); // int vbuf_size
- CBitstreamConverter::skip_bits( &bs, 32); // int abuf_size
+ CBitstreamConverter::write_bits(&bs, 32, 0); // int audio_pid
+ CBitstreamConverter::write_bits(&bs, 32, 0); // int sub_pid
+
+ CBitstreamConverter::write_bits(&bs, 32, 0); // int audio_channels
+ CBitstreamConverter::write_bits(&bs, 32, 0); // int audio_samplerate
+ CBitstreamConverter::write_bits(&bs, 32, 0); // int vbuf_size
+ CBitstreamConverter::write_bits(&bs, 32, 0); // int abuf_size
+
+ // ARM requires 8-byte alignment for 64-bit members (ratio64)
+ // and this will force am_sysinfo to be also have 8-byte alignment.
+ // Since the inclusion of audio_utils_handle for JellyBean 4.2
+ // 'naturally' aligns am_sysinfo to 8-byte, we need to compensate
+ // when we are NOT JellyBean 4.2. If these member values get changed,
+ // then make sure you check that am_sysinfo has 8-byte alignment.
+ if (CAndroidFeatures::GetVersion() < 17)
+ CBitstreamConverter::write_bits(&bs, 32, 0);
CBitstreamConverter::write_bits(&bs, 32, p_in->format); // am_sysinfo, unsigned int format
CBitstreamConverter::write_bits(&bs, 32, p_in->width); // am_sysinfo, unsigned int width
@@ -207,7 +216,7 @@ public:
// we do not care about the rest, flush and go.
// FYI there are 4.0 to 4.1 differences here.
CBitstreamConverter::flush_bits(&bs);
- //CLog::MemDump((char*)p_out, sizeof(codec_para_t));
+ //CLog::MemDump((char*)p_out, 0xFF);
#else
// direct struct usage, we do not know which flavor
// so just use what we get from headers and pray.