summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-11-26 19:01:34 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-11-26 19:01:34 +0000
commita4533bdb84c0740960a75df20d2aa6ea62f55f5e (patch)
tree51cc2d1a20297565ad1ffe624dc671271722ee2e /libmpcodecs
parent84170d0b249aaaecba2d123045fd5469123b030c (diff)
downloadmpv-a4533bdb84c0740960a75df20d2aa6ea62f55f5e.tar.bz2
mpv-a4533bdb84c0740960a75df20d2aa6ea62f55f5e.tar.xz
Simplify convert_14bits_to_16bits function in ad_hwac3
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25167 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/ad_hwac3.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/libmpcodecs/ad_hwac3.c b/libmpcodecs/ad_hwac3.c
index 9db51b04a6..fbf7147057 100644
--- a/libmpcodecs/ad_hwac3.c
+++ b/libmpcodecs/ad_hwac3.c
@@ -424,35 +424,27 @@ static int convert_14bits_to_16bits(const unsigned char *src,
int is_le)
{
uint16_t *p = (uint16_t *)dest;
+ uint16_t buf = 0;
int spacebits = 16;
- int leftbits;
+ if (len <= 0) return 0;
while (len > 0) {
uint16_t v;
if (len == 1)
v = is_le ? src[0] : src[0] << 8;
else
v = is_le ? src[1] << 8 | src[0] : src[0] << 8 | src[1];
- leftbits = 14;
+ v <<= 2;
src += 2;
len -= 2;
- if (spacebits == 0) {
- ++p;
- spacebits = 16;
+ buf |= v >> (16 - spacebits);
+ spacebits -= 14;
+ if (spacebits < 0) {
+ *p++ = buf;
+ spacebits += 16;
+ buf = v << (spacebits - 2);
}
- if (spacebits == 16)
- *p = 0;
- if (spacebits < leftbits) {
- leftbits -= spacebits;
- *p |= (v & 0x3FFF) >> leftbits;
- ++p;
- *p = 0;
- spacebits = 16;
- }
- *p |= ((v << (16 - leftbits)) & 0xFFFF) >> (16 - spacebits);
- spacebits -= leftbits;
}
- if (spacebits < 16)
- ++p;
+ *p++ = buf;
return (unsigned char *)p - dest;
}