Index: libmpcodecs/ad_hwac3.c =================================================================== --- libmpcodecs/ad_hwac3.c (revision 24428) +++ libmpcodecs/ad_hwac3.c (working copy) @@ -159,6 +159,17 @@ } else if(isdts == 0) { +#ifdef WORDS_BIGENDIAN + buf[0] = 0xF8; + buf[1] = 0x72; + buf[2] = 0x4E; + buf[3] = 0x1F; + buf[4] = 0x00; + buf[5] = 0x01; //(length) ? data_type : 0; /* & 0x1F; */ + buf[6] = (len >> 5) & 0xFF; + buf[7] = (len << 3) & 0xFF; + memcpy(buf + 8, sh_audio->a_in_buffer, len); +#else buf[0] = 0x72; buf[1] = 0xF8; buf[2] = 0x1F; @@ -167,9 +178,6 @@ buf[5] = 0x00; buf[6] = (len << 3) & 0xFF; buf[7] = (len >> 5) & 0xFF; -#ifdef WORDS_BIGENDIAN - memcpy(buf + 8, sh_audio->a_in_buffer, len); // untested -#else swab(sh_audio->a_in_buffer, buf + 8, len); #endif memset(buf + 8 + len, 0, 6144 - 8 - len); @@ -335,8 +343,13 @@ burst_len = fsize * 8; nr_samples = nblks * 32; +#ifdef WORDS_BIGENDIAN + buf[0] = 0xf8; buf[1] = 0x72; /* iec 61937 */ + buf[2] = 0x4e; buf[3] = 0x1f; /* syncword */ +#else buf[0] = 0x72; buf[1] = 0xf8; /* iec 61937 */ buf[2] = 0x1f; buf[3] = 0x4e; /* syncword */ +#endif switch(nr_samples) { case 512: @@ -353,16 +366,24 @@ buf[4] = 0x00; break; } + +#ifdef WORDS_BIGENDIAN + buf[5] = buf[4]; + buf[4] = 0; + buf[6] = (burst_len >> 8) & 0xff; + buf[7] = (burst_len) & 0xff; +#else buf[5] = 0; /* ?? */ buf[6] = (burst_len) & 0xff; buf[7] = (burst_len >> 8) & 0xff; +#endif if(fsize + 8 > nr_samples * 2 * 2) { mp_msg(MSGT_DECAUDIO, MSGL_ERR, "DTS: more data than fits\n"); } #ifdef WORDS_BIGENDIAN - memcpy(&buf[8], indata_ptr, fsize); // untested + 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);