X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fcodec%2Faraw.c;h=30c7d15d561b86bf0c8763d73f78c276f3a978e8;hb=51fa8eeedfe5ff080dd59b3d7ca4a04f99892366;hp=9c2410c7608734ade989217c679eda4c352b9d65;hpb=55fcca5bff5b36a6c42301a98e1d31db66e421fd;p=vlc diff --git a/modules/codec/araw.c b/modules/codec/araw.c index 9c2410c760..30c7d15d56 100644 --- a/modules/codec/araw.c +++ b/modules/codec/araw.c @@ -424,15 +424,17 @@ static void DecodeS20B( void *outp, const uint8_t *in, unsigned samples ) while( samples >= 2 ) { - *(out++) = U32_AT(in) & ~0xFFF; - *(out++) = U32_AT(in + 1) << 12; - in += 5; + uint32_t dw = U32_AT(in); + in += 4; + *(out++) = dw & ~0xFFF; + *(out++) = (dw << 20) | (*in << 12); + in++; samples -= 2; } /* No U32_AT() for the last odd sample: avoid off-by-one overflow! */ if( samples ) - *(out++) = ((U16_AT(in) << 16) | (in[2] << 8)) & ~0xFFF; + *(out++) = (U16_AT(in) << 16) | ((in[2] & 0xF0) << 8); } static int16_t dat12tos16( uint16_t y )