/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "include/core/SkYUVASizeInfo.h" #include "include/private/SkTemplates.h" #include "src/core/SkSafeMath.h" size_t SkYUVASizeInfo::computeTotalBytes() const { SkSafeMath safe; size_t totalBytes = 0; for (int i = 0; i < kMaxCount; ++i) { SkASSERT((!fSizes[i].isEmpty() && fWidthBytes[i]) || (fSizes[i].isEmpty() && !fWidthBytes[i])); totalBytes = safe.add(totalBytes, safe.mul(fWidthBytes[i], fSizes[i].height())); } return safe.ok() ? totalBytes : SIZE_MAX; } void SkYUVASizeInfo::computePlanes(void* base, void* planes[SkYUVASizeInfo::kMaxCount]) const { planes[0] = base; int i = 1; for (; i < SkYUVASizeInfo::kMaxCount; ++i) { if (fSizes[i].isEmpty()) { break; } planes[i] = SkTAddOffset(planes[i - 1], fWidthBytes[i - 1] * fSizes[i - 1].height()); } for (; i < SkYUVASizeInfo::kMaxCount; ++i) { planes[i] = nullptr; } }