cook: use a table for xor key rotation

This is simpler and avoids an invalid shift by 32 in the
aligned case.

Signed-off-by: Mans Rullgard <mans@mansr.com>
pull/2/head
Mans Rullgard 13 years ago
parent 644bff6c9b
commit b7581b5c83
  1. 6
      libavcodec/cook.c

@ -273,6 +273,10 @@ static av_cold void init_cplscales_table (COOKContext *q) {
*/ */
static inline int decode_bytes(const uint8_t* inbuffer, uint8_t* out, int bytes){ static inline int decode_bytes(const uint8_t* inbuffer, uint8_t* out, int bytes){
static const uint32_t tab[4] = {
AV_BE2NE32C(0x37c511f2), AV_BE2NE32C(0xf237c511),
AV_BE2NE32C(0x11f237c5), AV_BE2NE32C(0xc511f237),
};
int i, off; int i, off;
uint32_t c; uint32_t c;
const uint32_t* buf; const uint32_t* buf;
@ -285,7 +289,7 @@ static inline int decode_bytes(const uint8_t* inbuffer, uint8_t* out, int bytes)
off = (intptr_t)inbuffer & 3; off = (intptr_t)inbuffer & 3;
buf = (const uint32_t*) (inbuffer - off); buf = (const uint32_t*) (inbuffer - off);
c = av_be2ne32((0x37c511f2 >> (off*8)) | (0x37c511f2 << (32-(off*8)))); c = tab[off];
bytes += 3 + off; bytes += 3 + off;
for (i = 0; i < bytes/4; i++) for (i = 0; i < bytes/4; i++)
obuf[i] = c ^ buf[i]; obuf[i] = c ^ buf[i];

Loading…
Cancel
Save