[FFmpeg-cvslog] cook: use a table for xor key rotation

Mans Rullgard git at videolan.org
Sun Nov 27 00:39:12 CET 2011


ffmpeg | branch: master | Mans Rullgard <mans at mansr.com> | Fri Nov 25 20:43:05 2011 +0000| [b7581b5c839d1e293bb9dc34352a76df9d3158a9] | committer: Mans Rullgard

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 at mansr.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b7581b5c839d1e293bb9dc34352a76df9d3158a9
---

 libavcodec/cook.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/libavcodec/cook.c b/libavcodec/cook.c
index 186c3e7..8b0a351 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];



More information about the ffmpeg-cvslog mailing list