mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-13 10:44:59 +00:00
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>
This commit is contained in:
parent
644bff6c9b
commit
b7581b5c83
@ -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…
Reference in New Issue
Block a user