| OLD | NEW | 
|     1 /* |     1 /* | 
|     2  * Copyright (C) 2006 Apple Computer, Inc. |     2  * Copyright (C) 2006 Apple Computer, Inc. | 
|     3  * |     3  * | 
|     4  * Portions are Copyright (C) 2001-6 mozilla.org |     4  * Portions are Copyright (C) 2001-6 mozilla.org | 
|     5  * |     5  * | 
|     6  * Other contributors: |     6  * Other contributors: | 
|     7  *   Stuart Parmenter <stuart@mozilla.com> |     7  *   Stuart Parmenter <stuart@mozilla.com> | 
|     8  * |     8  * | 
|     9  * Copyright (C) 2007-2009 Torch Mobile, Inc. |     9  * Copyright (C) 2007-2009 Torch Mobile, Inc. | 
|    10  * |    10  * | 
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   292                 return YUV_410; |   292                 return YUV_410; | 
|   293             default: |   293             default: | 
|   294                 break; |   294                 break; | 
|   295             } |   295             } | 
|   296         } |   296         } | 
|   297     } |   297     } | 
|   298  |   298  | 
|   299     return YUV_UNKNOWN; |   299     return YUV_UNKNOWN; | 
|   300 } |   300 } | 
|   301  |   301  | 
 |   302 bool validateSubsampling(const jpeg_decompress_struct* cinfo) | 
 |   303 { | 
 |   304     ASSERT(cinfo->num_components); | 
 |   305  | 
 |   306     jpeg_component_info* component = cinfo->comp_info; | 
 |   307     for (int c = 0; c < cinfo->num_components; ++c, ++component) { | 
 |   308         if (component->h_samp_factor == 3) | 
 |   309             component->h_samp_factor = 1; | 
 |   310         if (component->v_samp_factor == 3) | 
 |   311             component->v_samp_factor = 1; | 
 |   312     } | 
 |   313  | 
 |   314     return true; | 
 |   315 } | 
 |   316  | 
|   302 class JPEGImageReader { |   317 class JPEGImageReader { | 
|   303     WTF_MAKE_FAST_ALLOCATED(JPEGImageReader); |   318     WTF_MAKE_FAST_ALLOCATED(JPEGImageReader); | 
|   304 public: |   319 public: | 
|   305     JPEGImageReader(JPEGImageDecoder* decoder) |   320     JPEGImageReader(JPEGImageDecoder* decoder) | 
|   306         : m_decoder(decoder) |   321         : m_decoder(decoder) | 
|   307         , m_bufferLength(0) |   322         , m_bufferLength(0) | 
|   308         , m_bytesToSkip(0) |   323         , m_bytesToSkip(0) | 
|   309         , m_state(JPEG_HEADER) |   324         , m_state(JPEG_HEADER) | 
|   310         , m_samples(0) |   325         , m_samples(0) | 
|   311 #if USE(QCMSLIB) |   326 #if USE(QCMSLIB) | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   389         if (m_bytesToSkip) |   404         if (m_bytesToSkip) | 
|   390             skipBytes(m_bytesToSkip); |   405             skipBytes(m_bytesToSkip); | 
|   391  |   406  | 
|   392         m_bufferLength = data.size(); |   407         m_bufferLength = data.size(); | 
|   393  |   408  | 
|   394         // We need to do the setjmp here. Otherwise bad things will happen |   409         // We need to do the setjmp here. Otherwise bad things will happen | 
|   395         if (setjmp(m_err.setjmp_buffer)) |   410         if (setjmp(m_err.setjmp_buffer)) | 
|   396             return m_decoder->setFailed(); |   411             return m_decoder->setFailed(); | 
|   397  |   412  | 
|   398         J_COLOR_SPACE overrideColorSpace = JCS_UNKNOWN; |   413         J_COLOR_SPACE overrideColorSpace = JCS_UNKNOWN; | 
 |   414  | 
|   399         switch (m_state) { |   415         switch (m_state) { | 
|   400         case JPEG_HEADER: |   416         case JPEG_HEADER: | 
|   401             // Read file parameters with jpeg_read_header(). |   417             // Read file parameters with jpeg_read_header(). | 
|   402             if (jpeg_read_header(&m_info, true) == JPEG_SUSPENDED) |   418             if (jpeg_read_header(&m_info, true) == JPEG_SUSPENDED) | 
|   403                 return false; // I/O suspension. |   419                 return false; // I/O suspension. | 
|   404  |   420  | 
|   405             switch (m_info.jpeg_color_space) { |   421             switch (m_info.jpeg_color_space) { | 
|   406             case JCS_YCbCr: |   422             case JCS_YCbCr: | 
|   407                 // libjpeg can convert YCbCr image pixels to RGB. |   423                 // libjpeg can convert YCbCr image pixels to RGB. | 
|   408                 m_info.out_color_space = rgbOutputColorSpace(); |   424                 m_info.out_color_space = rgbOutputColorSpace(); | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
|   425             case JCS_CMYK: |   441             case JCS_CMYK: | 
|   426             case JCS_YCCK: |   442             case JCS_YCCK: | 
|   427                 // libjpeg can convert YCCK to CMYK, but neither to RGB, so we |   443                 // libjpeg can convert YCCK to CMYK, but neither to RGB, so we | 
|   428                 // manually convert CMKY to RGB. |   444                 // manually convert CMKY to RGB. | 
|   429                 m_info.out_color_space = JCS_CMYK; |   445                 m_info.out_color_space = JCS_CMYK; | 
|   430                 break; |   446                 break; | 
|   431             default: |   447             default: | 
|   432                 return m_decoder->setFailed(); |   448                 return m_decoder->setFailed(); | 
|   433             } |   449             } | 
|   434  |   450  | 
 |   451             if (!validateSubsampling(&m_info)) | 
 |   452                 return m_decoder->setFailed(); | 
 |   453  | 
|   435             m_state = JPEG_START_DECOMPRESS; |   454             m_state = JPEG_START_DECOMPRESS; | 
|   436  |   455  | 
|   437             // We can fill in the size now that the header is available. |   456             // We can fill in the size now that the header is available. | 
|   438             if (!m_decoder->setSize(m_info.image_width, m_info.image_height)) |   457             if (!m_decoder->setSize(m_info.image_width, m_info.image_height)) | 
|   439                 return false; |   458                 return false; | 
|   440  |   459  | 
|   441             // Calculate and set decoded size. |   460             // Calculate and set decoded size. | 
|   442             m_info.scale_num = m_decoder->desiredScaleNumerator(); |   461             m_info.scale_num = m_decoder->desiredScaleNumerator(); | 
|   443             m_info.scale_denom = scaleDenominator; |   462             m_info.scale_denom = scaleDenominator; | 
|   444             // Scaling caused by running low on memory isn't supported by YUV de
      coding since |   463             // Scaling caused by running low on memory isn't supported by YUV de
      coding since | 
| (...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1002     // has failed. |  1021     // has failed. | 
|  1003     if (!m_reader->decode(*m_data, onlySize) && isAllDataReceived()) |  1022     if (!m_reader->decode(*m_data, onlySize) && isAllDataReceived()) | 
|  1004         setFailed(); |  1023         setFailed(); | 
|  1005     // If we're done decoding the image, we don't need the JPEGImageReader |  1024     // If we're done decoding the image, we don't need the JPEGImageReader | 
|  1006     // anymore.  (If we failed, |m_reader| has already been cleared.) |  1025     // anymore.  (If we failed, |m_reader| has already been cleared.) | 
|  1007     else if ((!m_frameBufferCache.isEmpty() && (m_frameBufferCache[0].status() =
      = ImageFrame::FrameComplete)) || (hasImagePlanes() && !onlySize)) |  1026     else if ((!m_frameBufferCache.isEmpty() && (m_frameBufferCache[0].status() =
      = ImageFrame::FrameComplete)) || (hasImagePlanes() && !onlySize)) | 
|  1008         m_reader.clear(); |  1027         m_reader.clear(); | 
|  1009 } |  1028 } | 
|  1010  |  1029  | 
|  1011 } |  1030 } | 
| OLD | NEW |