Simplify CPDF_DocRenderData::CreateTransferFunc().
Get rid of a redundant boolean and some redundant checks.
Change-Id: If21c3c6463c65a48295d40bca234cd0978d4ecbb
Reviewed-on: https://pdfium-review.googlesource.com/c/45350
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_docrenderdata.cpp b/core/fpdfapi/render/cpdf_docrenderdata.cpp
index 12325c4..ce4085a 100644
--- a/core/fpdfapi/render/cpdf_docrenderdata.cpp
+++ b/core/fpdfapi/render/cpdf_docrenderdata.cpp
@@ -69,10 +69,8 @@
RetainPtr<CPDF_TransferFunc> CPDF_DocRenderData::CreateTransferFunc(
const CPDF_Object* pObj) const {
std::unique_ptr<CPDF_Function> pFuncs[3];
- bool bUniTransfer = true;
- bool bIdentity = true;
- if (const CPDF_Array* pArray = pObj->AsArray()) {
- bUniTransfer = false;
+ const CPDF_Array* pArray = pObj->AsArray();
+ if (pArray) {
if (pArray->size() < 3)
return nullptr;
@@ -87,39 +85,39 @@
return nullptr;
}
- float input;
int noutput;
float output[kMaxOutputs];
memset(output, 0, sizeof(output));
+ bool bIdentity = true;
std::vector<uint8_t> samples_r(CPDF_TransferFunc::kChannelSampleSize);
std::vector<uint8_t> samples_g(CPDF_TransferFunc::kChannelSampleSize);
std::vector<uint8_t> samples_b(CPDF_TransferFunc::kChannelSampleSize);
std::array<pdfium::span<uint8_t>, 3> samples = {samples_r, samples_g,
samples_b};
for (size_t v = 0; v < CPDF_TransferFunc::kChannelSampleSize; ++v) {
- input = static_cast<float>(v) / 255.0f;
- if (bUniTransfer) {
- if (pFuncs[0] && pFuncs[0]->CountOutputs() <= kMaxOutputs)
- pFuncs[0]->Call(&input, 1, output, &noutput);
- size_t o = FXSYS_round(output[0] * 255);
- if (o != v)
- bIdentity = false;
- for (auto& channel : samples)
- channel[v] = o;
+ float input = static_cast<float>(v) / 255.0f;
+ if (pArray) {
+ for (int i = 0; i < 3; ++i) {
+ if (pFuncs[i]->CountOutputs() > kMaxOutputs) {
+ samples[i][v] = v;
+ continue;
+ }
+ pFuncs[i]->Call(&input, 1, output, &noutput);
+ size_t o = FXSYS_round(output[0] * 255);
+ if (o != v)
+ bIdentity = false;
+ samples[i][v] = o;
+ }
continue;
}
- for (int i = 0; i < 3; ++i) {
- if (!pFuncs[i] || pFuncs[i]->CountOutputs() > kMaxOutputs) {
- samples[i][v] = v;
- continue;
- }
- pFuncs[i]->Call(&input, 1, output, &noutput);
- size_t o = FXSYS_round(output[0] * 255);
- if (o != v)
- bIdentity = false;
- samples[i][v] = o;
- }
+ if (pFuncs[0]->CountOutputs() <= kMaxOutputs)
+ pFuncs[0]->Call(&input, 1, output, &noutput);
+ size_t o = FXSYS_round(output[0] * 255);
+ if (o != v)
+ bIdentity = false;
+ for (auto& channel : samples)
+ channel[v] = o;
}
return pdfium::MakeRetain<CPDF_TransferFunc>(