summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-09-15 16:30:39 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-09-15 16:30:39 +0000
commitd46f568fb4af861b0bac8d9f76d538cf052c724d (patch)
treec1ceba3532ad720898387bca2c7309e21e561b30 /libmpcodecs
parent544a3061472e1a3590a26fbcc2de72ecb03134fb (diff)
downloadmpv-d46f568fb4af861b0bac8d9f76d538cf052c724d.tar.bz2
mpv-d46f568fb4af861b0bac8d9f76d538cf052c724d.tar.xz
Handle swab when input length is odd (treat it as if there was an additional
0 byte) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24528 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/ad_hwac3.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/libmpcodecs/ad_hwac3.c b/libmpcodecs/ad_hwac3.c
index 6cfc4e1485..48e16f135d 100644
--- a/libmpcodecs/ad_hwac3.c
+++ b/libmpcodecs/ad_hwac3.c
@@ -168,6 +168,11 @@ static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int m
memcpy(buf + 8, sh_audio->a_in_buffer, len);
#else
swab(sh_audio->a_in_buffer, buf + 8, len);
+ if (len & 1) {
+ buf[8+len-1] = 0;
+ buf[8+len] = sh_audio->a_in_buffer[len-1];
+ len++;
+ }
#endif
memset(buf + 8 + len, 0, 6144 - 8 - len);
@@ -361,8 +366,11 @@ static int decode_audio_dts(unsigned char *indata_ptr, int len, unsigned char *b
memcpy(&buf[8], indata_ptr, fsize);
#else
swab(indata_ptr, &buf[8], fsize);
- if (fsize & 1)
- buf[8+fsize-1] = indata_ptr[fsize-1];
+ if (fsize & 1) {
+ buf[8+fsize-1] = 0;
+ buf[8+fsize] = indata_ptr[fsize-1];
+ fsize++;
+ }
#endif
memset(&buf[fsize + 8], 0, nr_samples * 2 * 2 - (fsize + 8));