]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/cook.c
Support transparency in 32bit bmp files.
[ffmpeg] / libavcodec / cook.c
index 4c750134d06ff70bfd72837acbabc97336737092..6a076d931039fd942059f37bcc9d378d4a53d11d 100644 (file)
@@ -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];
@@ -1075,7 +1079,7 @@ static av_cold int cook_decode_init(AVCodecContext *avctx)
             q->subpacket[s].subbands = bytestream_get_be16(&edata_ptr);
             extradata_size -= 8;
         }
-        if (extradata_size >= 8){
+        if (extradata_size >= 8) {
             bytestream_get_be32(&edata_ptr);    //Unknown unused
             q->subpacket[s].js_subband_start = bytestream_get_be16(&edata_ptr);
             q->subpacket[s].js_vlc_bits = bytestream_get_be16(&edata_ptr);