1/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "include/codec/SkCodec.h"
9#include "src/codec/SkCodecPriv.h"
10#include "src/codec/SkSampler.h"
11#include "src/core/SkUtils.h"
12
13void SkSampler::Fill(const SkImageInfo& info, void* dst, size_t rowBytes,
14 SkCodec::ZeroInitialized zeroInit) {
15 SkASSERT(dst != nullptr);
16
17 if (SkCodec::kYes_ZeroInitialized == zeroInit) {
18 return;
19 }
20
21 const int width = info.width();
22 const int numRows = info.height();
23
24 // Use the proper memset routine to fill the remaining bytes
25 switch (info.colorType()) {
26 case kRGBA_8888_SkColorType:
27 case kBGRA_8888_SkColorType: {
28 uint32_t* dstRow = (uint32_t*) dst;
29 for (int row = 0; row < numRows; row++) {
30 sk_memset32(dstRow, 0, width);
31 dstRow = SkTAddOffset<uint32_t>(dstRow, rowBytes);
32 }
33 break;
34 }
35 case kRGB_565_SkColorType: {
36 uint16_t* dstRow = (uint16_t*) dst;
37 for (int row = 0; row < numRows; row++) {
38 sk_memset16(dstRow, 0, width);
39 dstRow = SkTAddOffset<uint16_t>(dstRow, rowBytes);
40 }
41 break;
42 }
43 case kGray_8_SkColorType: {
44 uint8_t* dstRow = (uint8_t*) dst;
45 for (int row = 0; row < numRows; row++) {
46 memset(dstRow, 0, width);
47 dstRow = SkTAddOffset<uint8_t>(dstRow, rowBytes);
48 }
49 break;
50 }
51 case kRGBA_F16_SkColorType: {
52 uint64_t* dstRow = (uint64_t*) dst;
53 for (int row = 0; row < numRows; row++) {
54 sk_memset64(dstRow, 0, width);
55 dstRow = SkTAddOffset<uint64_t>(dstRow, rowBytes);
56 }
57 break;
58 }
59 default:
60 SkCodecPrintf("Error: Unsupported dst color type for fill(). Doing nothing.\n");
61 SkASSERT(false);
62 break;
63 }
64}
65