OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkBitmap.h" | 8 #include "SkBitmap.h" |
9 #include "SkCodec.h" | 9 #include "SkCodec.h" |
10 #include "SkData.h" | 10 #include "SkData.h" |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 const SkCodec::Result result = fullCodec->getPixels(info, frame.getPixel
s(), | 209 const SkCodec::Result result = fullCodec->getPixels(info, frame.getPixel
s(), |
210 frame.rowBytes(), &opts, nullptr, nullptr); | 210 frame.rowBytes(), &opts, nullptr, nullptr); |
211 | 211 |
212 if (result == SkCodec::kIncompleteInput) { | 212 if (result == SkCodec::kIncompleteInput) { |
213 frameByteCounts.push_back(stream->getPosition() - lastOffset); | 213 frameByteCounts.push_back(stream->getPosition() - lastOffset); |
214 | 214 |
215 // We need to distinguish between a partial frame and no more frames
. | 215 // We need to distinguish between a partial frame and no more frames
. |
216 // getFrameInfo lets us do this, since it tells the number of frames | 216 // getFrameInfo lets us do this, since it tells the number of frames |
217 // not considering whether they are complete. | 217 // not considering whether they are complete. |
218 // FIXME: Should we use a different Result? | 218 // FIXME: Should we use a different Result? |
219 if (fullCodec->getFrameInfo().size() > i) { | 219 const size_t frameCount = [&fullCodec]() -> size_t { |
| 220 std::vector<SkCodec::FrameInfo> frameInfos; |
| 221 if (!fullCodec->getFrameInfo(&frameInfos, nullptr)) { |
| 222 return 0; |
| 223 } |
| 224 return frameInfos.size(); |
| 225 }(); |
| 226 |
| 227 if (frameCount > i) { |
220 // This is a partial frame. | 228 // This is a partial frame. |
221 frames.push_back(frame); | 229 frames.push_back(frame); |
222 } | 230 } |
223 break; | 231 break; |
224 } | 232 } |
225 | 233 |
226 if (result != SkCodec::kSuccess) { | 234 if (result != SkCodec::kSuccess) { |
227 ERRORF(r, "Failed to decode frame %i from %s", i, path); | 235 ERRORF(r, "Failed to decode frame %i from %s", i, path); |
228 return; | 236 return; |
229 } | 237 } |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 // Now incremental decode will fail | 321 // Now incremental decode will fail |
314 result = partialCodec->incrementalDecode(); | 322 result = partialCodec->incrementalDecode(); |
315 REPORTER_ASSERT(r, result == SkCodec::kInvalidParameters); | 323 REPORTER_ASSERT(r, result == SkCodec::kInvalidParameters); |
316 } | 324 } |
317 | 325 |
318 DEF_TEST(Codec_rewind, r) { | 326 DEF_TEST(Codec_rewind, r) { |
319 test_interleaved(r, "plane.png"); | 327 test_interleaved(r, "plane.png"); |
320 test_interleaved(r, "plane_interlaced.png"); | 328 test_interleaved(r, "plane_interlaced.png"); |
321 test_interleaved(r, "box.gif"); | 329 test_interleaved(r, "box.gif"); |
322 } | 330 } |
OLD | NEW |