1 /* 2 * Copyright 2018 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/core/SkYUVASizeInfo.h" 9 #include "include/private/SkTemplates.h" 10 #include "src/core/SkSafeMath.h" 11 computeTotalBytes() const12size_t SkYUVASizeInfo::computeTotalBytes() const { 13 SkSafeMath safe; 14 size_t totalBytes = 0; 15 16 for (int i = 0; i < kMaxCount; ++i) { 17 SkASSERT((!fSizes[i].isEmpty() && fWidthBytes[i]) || 18 (fSizes[i].isEmpty() && !fWidthBytes[i])); 19 totalBytes = safe.add(totalBytes, safe.mul(fWidthBytes[i], fSizes[i].height())); 20 } 21 22 return safe.ok() ? totalBytes : SIZE_MAX; 23 } 24 computePlanes(void * base,void * planes[SkYUVASizeInfo::kMaxCount]) const25void SkYUVASizeInfo::computePlanes(void* base, void* planes[SkYUVASizeInfo::kMaxCount]) const { 26 planes[0] = base; 27 int i = 1; 28 for (; i < SkYUVASizeInfo::kMaxCount; ++i) { 29 if (fSizes[i].isEmpty()) { 30 break; 31 } 32 planes[i] = SkTAddOffset<void>(planes[i - 1], fWidthBytes[i - 1] * fSizes[i - 1].height()); 33 } 34 for (; i < SkYUVASizeInfo::kMaxCount; ++i) { 35 planes[i] = nullptr; 36 } 37 } 38