| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. |    2  * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 
|    3  * |    3  * | 
|    4  *  This library is free software; you can redistribute it and/or |    4  *  This library is free software; you can redistribute it and/or | 
|    5  *  modify it under the terms of the GNU Library General Public |    5  *  modify it under the terms of the GNU Library General Public | 
|    6  *  License as published by the Free Software Foundation; either |    6  *  License as published by the Free Software Foundation; either | 
|    7  *  version 2 of the License, or (at your option) any later version. |    7  *  version 2 of the License, or (at your option) any later version. | 
|    8  * |    8  * | 
|    9  *  This library is distributed in the hope that it will be useful, |    9  *  This library is distributed in the hope that it will be useful, | 
|   10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of |   10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   73 inline bool matchesCURSignature(const char* contents) |   73 inline bool matchesCURSignature(const char* contents) | 
|   74 { |   74 { | 
|   75     return !memcmp(contents, "\x00\x00\x02\x00", 4); |   75     return !memcmp(contents, "\x00\x00\x02\x00", 4); | 
|   76 } |   76 } | 
|   77  |   77  | 
|   78 inline bool matchesBMPSignature(const char* contents) |   78 inline bool matchesBMPSignature(const char* contents) | 
|   79 { |   79 { | 
|   80     return !memcmp(contents, "BM", 2); |   80     return !memcmp(contents, "BM", 2); | 
|   81 } |   81 } | 
|   82  |   82  | 
|   83 std::unique_ptr<ImageDecoder> ImageDecoder::create(const char* contents, size_t 
     length, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions) |   83 std::unique_ptr<ImageDecoder> ImageDecoder::create(SniffResult sniffResult, Alph
     aOption alphaOption, GammaAndColorProfileOption colorOptions) | 
|   84 { |   84 { | 
|   85     const size_t longestSignatureLength = sizeof("RIFF????WEBPVP") - 1; |  | 
|   86     ASSERT(longestSignatureLength == 14); |  | 
|   87  |  | 
|   88     if (length < longestSignatureLength) |  | 
|   89         return nullptr; |  | 
|   90  |  | 
|   91     size_t maxDecodedBytes = Platform::current() ? Platform::current()->maxDecod
     edImageBytes() : noDecodedImageByteLimit; |   85     size_t maxDecodedBytes = Platform::current() ? Platform::current()->maxDecod
     edImageBytes() : noDecodedImageByteLimit; | 
|   92  |   86  | 
|   93     if (matchesJPEGSignature(contents)) |   87     switch (sniffResult) { | 
 |   88     case SniffResult::JPEG: | 
|   94         return wrapUnique(new JPEGImageDecoder(alphaOption, colorOptions, maxDec
     odedBytes)); |   89         return wrapUnique(new JPEGImageDecoder(alphaOption, colorOptions, maxDec
     odedBytes)); | 
|   95  |   90     case SniffResult::PNG: | 
|   96     if (matchesPNGSignature(contents)) |  | 
|   97         return wrapUnique(new PNGImageDecoder(alphaOption, colorOptions, maxDeco
     dedBytes)); |   91         return wrapUnique(new PNGImageDecoder(alphaOption, colorOptions, maxDeco
     dedBytes)); | 
|   98  |   92     case SniffResult::GIF: | 
|   99     if (matchesGIFSignature(contents)) |  | 
|  100         return wrapUnique(new GIFImageDecoder(alphaOption, colorOptions, maxDeco
     dedBytes)); |   93         return wrapUnique(new GIFImageDecoder(alphaOption, colorOptions, maxDeco
     dedBytes)); | 
|  101  |   94     case SniffResult::WEBP: | 
|  102     if (matchesWebPSignature(contents)) |  | 
|  103         return wrapUnique(new WEBPImageDecoder(alphaOption, colorOptions, maxDec
     odedBytes)); |   95         return wrapUnique(new WEBPImageDecoder(alphaOption, colorOptions, maxDec
     odedBytes)); | 
|  104  |   96     case SniffResult::ICO: | 
|  105     if (matchesICOSignature(contents) || matchesCURSignature(contents)) |  | 
|  106         return wrapUnique(new ICOImageDecoder(alphaOption, colorOptions, maxDeco
     dedBytes)); |   97         return wrapUnique(new ICOImageDecoder(alphaOption, colorOptions, maxDeco
     dedBytes)); | 
|  107  |   98     case SniffResult::BMP: | 
|  108     if (matchesBMPSignature(contents)) |  | 
|  109         return wrapUnique(new BMPImageDecoder(alphaOption, colorOptions, maxDeco
     dedBytes)); |   99         return wrapUnique(new BMPImageDecoder(alphaOption, colorOptions, maxDeco
     dedBytes)); | 
|  110  |  100     case SniffResult::InsufficientData: | 
 |  101     case SniffResult::Invalid: | 
 |  102         return nullptr; | 
 |  103     } | 
 |  104     NOTREACHED(); | 
|  111     return nullptr; |  105     return nullptr; | 
|  112 } |  106 } | 
|  113  |  107  | 
|  114 std::unique_ptr<ImageDecoder> ImageDecoder::create(const SharedBuffer& data, Alp
     haOption alphaOption, GammaAndColorProfileOption colorOptions) |  108 ImageDecoder::SniffResult ImageDecoder::determineImageType(const char* contents,
      size_t length) | 
 |  109 { | 
 |  110     const size_t longestSignatureLength = sizeof("RIFF????WEBPVP") - 1; | 
 |  111     DCHECK_EQ(14u, longestSignatureLength); | 
 |  112  | 
 |  113     if (length < longestSignatureLength) | 
 |  114         return SniffResult::InsufficientData; | 
 |  115     if (matchesJPEGSignature(contents)) | 
 |  116         return SniffResult::JPEG; | 
 |  117     if (matchesPNGSignature(contents)) | 
 |  118         return SniffResult::PNG; | 
 |  119     if (matchesGIFSignature(contents)) | 
 |  120         return SniffResult::GIF; | 
 |  121     if (matchesWebPSignature(contents)) | 
 |  122         return SniffResult::WEBP; | 
 |  123     if (matchesICOSignature(contents) || matchesCURSignature(contents)) | 
 |  124         return SniffResult::ICO; | 
 |  125     if (matchesBMPSignature(contents)) | 
 |  126         return SniffResult::BMP; | 
 |  127     return SniffResult::Invalid; | 
 |  128 } | 
 |  129  | 
 |  130 ImageDecoder::SniffResult ImageDecoder::determineImageType(const SharedBuffer& d
     ata) | 
|  115 { |  131 { | 
|  116     const char* contents; |  132     const char* contents; | 
|  117     const size_t length = data.getSomeData<size_t>(contents); |  133     const size_t length = data.getSomeData<size_t>(contents); | 
|  118     return create(contents, length, alphaOption, colorOptions); |  134     return determineImageType(contents, length); | 
|  119 } |  135 } | 
|  120  |  136  | 
|  121 std::unique_ptr<ImageDecoder> ImageDecoder::create(const SegmentReader& data, Al
     phaOption alphaOption, GammaAndColorProfileOption colorOptions) |  137 ImageDecoder::SniffResult ImageDecoder::determineImageType(const SegmentReader& 
     data) | 
|  122 { |  138 { | 
|  123     const char* contents; |  139     const char* contents; | 
|  124     const size_t length = data.getSomeData(contents, 0); |  140     const size_t length = data.getSomeData(contents, 0); | 
|  125     return create(contents, length, alphaOption, colorOptions); |  141     return determineImageType(contents, length); | 
|  126 } |  142 } | 
|  127  |  143  | 
|  128 size_t ImageDecoder::frameCount() |  144 size_t ImageDecoder::frameCount() | 
|  129 { |  145 { | 
|  130     const size_t oldSize = m_frameBufferCache.size(); |  146     const size_t oldSize = m_frameBufferCache.size(); | 
|  131     const size_t newSize = decodeFrameCount(); |  147     const size_t newSize = decodeFrameCount(); | 
|  132     if (oldSize != newSize) { |  148     if (oldSize != newSize) { | 
|  133         m_frameBufferCache.resize(newSize); |  149         m_frameBufferCache.resize(newSize); | 
|  134         for (size_t i = oldSize; i < newSize; ++i) { |  150         for (size_t i = oldSize; i < newSize; ++i) { | 
|  135             m_frameBufferCache[i].setPremultiplyAlpha(m_premultiplyAlpha); |  151             m_frameBufferCache[i].setPremultiplyAlpha(m_premultiplyAlpha); | 
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  383 } |  399 } | 
|  384  |  400  | 
|  385 bool ImageDecoder::hasColorProfile() const |  401 bool ImageDecoder::hasColorProfile() const | 
|  386 { |  402 { | 
|  387     return false; |  403     return false; | 
|  388 } |  404 } | 
|  389  |  405  | 
|  390 #endif // USE(QCMSLIB) |  406 #endif // USE(QCMSLIB) | 
|  391  |  407  | 
|  392 } // namespace blink |  408 } // namespace blink | 
| OLD | NEW |