| OLD | NEW |
| 1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | 1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
| 2 /* ***** BEGIN LICENSE BLOCK ***** | 2 /* ***** BEGIN LICENSE BLOCK ***** |
| 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 | 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| 4 * | 4 * |
| 5 * The contents of this file are subject to the Mozilla Public License Version | 5 * The contents of this file are subject to the Mozilla Public License Version |
| 6 * 1.1 (the "License"); you may not use this file except in compliance with | 6 * 1.1 (the "License"); you may not use this file except in compliance with |
| 7 * the License. You may obtain a copy of the License at | 7 * the License. You may obtain a copy of the License at |
| 8 * http://www.mozilla.org/MPL/ | 8 * http://www.mozilla.org/MPL/ |
| 9 * | 9 * |
| 10 * Software distributed under the License is distributed on an "AS IS" basis, | 10 * Software distributed under the License is distributed on an "AS IS" basis, |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 drowStart = 0; | 139 drowStart = 0; |
| 140 | 140 |
| 141 if ((unsigned)drowEnd >= m_frameContext->height()) | 141 if ((unsigned)drowEnd >= m_frameContext->height()) |
| 142 drowEnd = m_frameContext->height() - 1; | 142 drowEnd = m_frameContext->height() - 1; |
| 143 } | 143 } |
| 144 | 144 |
| 145 // Protect against too much image data. | 145 // Protect against too much image data. |
| 146 if ((unsigned)drowStart >= m_frameContext->height()) | 146 if ((unsigned)drowStart >= m_frameContext->height()) |
| 147 return true; | 147 return true; |
| 148 | 148 |
| 149 bool writeTransparentPixels = alwaysWriteTransparentPixels || |
| 150 (m_frameContext->progressiveDisplay() && m_frameContext->interlaced(
) && ipass > 1); |
| 149 // CALLBACK: Let the client know we have decoded a row. | 151 // CALLBACK: Let the client know we have decoded a row. |
| 150 if (!m_client->haveDecodedRow(m_frameContext->frameId(), rowBegin, | 152 if (!m_client->haveDecodedRow(m_frameContext->frameId(), rowBegin, |
| 151 drowStart, drowEnd - drowStart + 1, m_frameContext->progressiveDisplay()
&& m_frameContext->interlaced() && ipass > 1)) | 153 drowStart, drowEnd - drowStart + 1, writeTransparentPixels)) |
| 152 return false; | 154 return false; |
| 153 | 155 |
| 154 if (!m_frameContext->interlaced()) | 156 if (!m_frameContext->interlaced()) |
| 155 irow++; | 157 irow++; |
| 156 else { | 158 else { |
| 157 do { | 159 do { |
| 158 switch (ipass) { | 160 switch (ipass) { |
| 159 case 1: | 161 case 1: |
| 160 irow += 8; | 162 irow += 8; |
| 161 if (irow >= m_frameContext->height()) { | 163 if (irow >= m_frameContext->height()) { |
| (...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 897 if (m_frameContext->dataSize() >= SK_MAX_DICTIONARY_ENTRY_BITS) | 899 if (m_frameContext->dataSize() >= SK_MAX_DICTIONARY_ENTRY_BITS) |
| 898 return false; | 900 return false; |
| 899 clearCode = 1 << m_frameContext->dataSize(); | 901 clearCode = 1 << m_frameContext->dataSize(); |
| 900 avail = clearCode + 2; | 902 avail = clearCode + 2; |
| 901 oldcode = -1; | 903 oldcode = -1; |
| 902 codesize = m_frameContext->dataSize() + 1; | 904 codesize = m_frameContext->dataSize() + 1; |
| 903 codemask = (1 << codesize) - 1; | 905 codemask = (1 << codesize) - 1; |
| 904 datum = bits = 0; | 906 datum = bits = 0; |
| 905 ipass = m_frameContext->interlaced() ? 1 : 0; | 907 ipass = m_frameContext->interlaced() ? 1 : 0; |
| 906 irow = 0; | 908 irow = 0; |
| 909 alwaysWriteTransparentPixels = !m_frameContext->interlaced() |
| 910 && m_frameContext->getRequiredFrame() == SkCodec::kNone; |
| 907 | 911 |
| 908 // We want to know the longest sequence encodable by a dictionary with | 912 // We want to know the longest sequence encodable by a dictionary with |
| 909 // SK_MAX_DICTIONARY_ENTRIES entries. If we ignore the need to encode the ba
se | 913 // SK_MAX_DICTIONARY_ENTRIES entries. If we ignore the need to encode the ba
se |
| 910 // values themselves at the beginning of the dictionary, as well as the need | 914 // values themselves at the beginning of the dictionary, as well as the need |
| 911 // for a clear code or a termination code, we could use every entry to | 915 // for a clear code or a termination code, we could use every entry to |
| 912 // encode a series of multiple values. If the input value stream looked | 916 // encode a series of multiple values. If the input value stream looked |
| 913 // like "AAAAA..." (a long string of just one value), the first dictionary | 917 // like "AAAAA..." (a long string of just one value), the first dictionary |
| 914 // entry would encode AA, the next AAA, the next AAAA, and so forth. Thus | 918 // entry would encode AA, the next AAA, the next AAAA, and so forth. Thus |
| 915 // the longest sequence would be SK_MAX_DICTIONARY_ENTRIES + 1 values. | 919 // the longest sequence would be SK_MAX_DICTIONARY_ENTRIES + 1 values. |
| 916 // | 920 // |
| (...skipping 15 matching lines...) Expand all Loading... |
| 932 rowsRemaining = m_frameContext->height(); | 936 rowsRemaining = m_frameContext->height(); |
| 933 | 937 |
| 934 // Clearing the whole suffix table lets us be more tolerant of bad data. | 938 // Clearing the whole suffix table lets us be more tolerant of bad data. |
| 935 for (int i = 0; i < clearCode; ++i) { | 939 for (int i = 0; i < clearCode; ++i) { |
| 936 suffix[i] = i; | 940 suffix[i] = i; |
| 937 suffixLength[i] = 1; | 941 suffixLength[i] = 1; |
| 938 } | 942 } |
| 939 return true; | 943 return true; |
| 940 } | 944 } |
| 941 | 945 |
| OLD | NEW |