summaryrefslogtreecommitdiff
path: root/libavcodec/cook.c
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2011-11-25 20:43:05 +0000
committerMans Rullgard <mans@mansr.com>2011-11-26 11:38:41 +0000
commitb7581b5c839d1e293bb9dc34352a76df9d3158a9 (patch)
tree0b825ad0e2727a54518f87f213ff8508ef94779e /libavcodec/cook.c
parent644bff6c9bf15b5ed723a893236dbc8c29579c93 (diff)
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>
Diffstat (limited to 'libavcodec/cook.c')
-rw-r--r--libavcodec/cook.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libavcodec/cook.c b/libavcodec/cook.c
index 186c3e70dd..8b0a351495 100644
--- a/libavcodec/cook.c
+++ b/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 const uint32_t tab[4] = {
+ AV_BE2NE32C(0x37c511f2), AV_BE2NE32C(0xf237c511),
+ AV_BE2NE32C(0x11f237c5), AV_BE2NE32C(0xc511f237),
+ };
int i, off;
uint32_t c;
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;
buf = (const uint32_t*) (inbuffer - off);
- c = av_be2ne32((0x37c511f2 >> (off*8)) | (0x37c511f2 << (32-(off*8))));
+ c = tab[off];
bytes += 3 + off;
for (i = 0; i < bytes/4; i++)
obuf[i] = c ^ buf[i];