blob: 9df8e9cbe10aa69b748840626f2e836aec4727e5 [file] [log] [blame]
/*
* 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<void>(planes[i - 1], fWidthBytes[i - 1] * fSizes[i - 1].height());
}
for (; i < SkYUVASizeInfo::kMaxCount; ++i) {
planes[i] = nullptr;
}
}