Index: libmpcodecs/ad_hwac3.c =================================================================== --- libmpcodecs/ad_hwac3.c (revision 24442) +++ libmpcodecs/ad_hwac3.c (working copy) @@ -147,6 +147,7 @@ static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen) { int len = sh_audio->a_in_buffer_len; + int i; if(len <= 0) if((len = ac3dts_fillbuff(sh_audio)) <= 0) @@ -168,7 +169,9 @@ buf[6] = (len << 3) & 0xFF; buf[7] = (len >> 5) & 0xFF; #ifdef WORDS_BIGENDIAN - memcpy(buf + 8, sh_audio->a_in_buffer, len); // untested + for (i = 0; i < 4; ++i) + ((uint16_t *)buf)[i] = bswap_16(((uint16_t *)buf)[i]); + memcpy(buf + 8, sh_audio->a_in_buffer, len); #else swab(sh_audio->a_in_buffer, buf + 8, len); #endif @@ -327,6 +330,7 @@ int sfreq; int burst_len; int nr_samples; + int i; fsize = dts_decode_header(indata_ptr, &rate, &nblks, &sfreq); if(fsize < 0) @@ -362,7 +366,9 @@ mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: more data than fits\n"); } #ifdef WORDS_BIGENDIAN - memcpy(&buf[8], indata_ptr, fsize); // untested + for (i = 0; i < 4; ++i) + ((uint16_t *)buf)[i] = bswap_16(((uint16_t *)buf)[i]); + memcpy(&buf[8], indata_ptr, fsize); #else //TODO if fzise is odd, swab doesn't copy the last byte swab(indata_ptr, &buf[8], fsize);