diff options
author | davilla <davilla@4pi.com> | 2013-12-20 17:33:46 -0500 |
---|---|---|
committer | davilla <davilla@4pi.com> | 2013-12-29 21:02:25 -0500 |
commit | 63455194d17c50e12aead614e397d860e0b9b1ef (patch) | |
tree | c44675bc487a9ddffc48a9d3d27a28baac2d9753 | |
parent | f8aecbac4591a607ca9ba3ac5fb8944aacf14a80 (diff) |
fixed, arm alignemnet of am_sysinfo member under ICS
-rw-r--r-- | xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp | 43 |
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. |