diff options
author | jvanverth <jvanverth@google.com> | 2015-02-13 12:02:22 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-13 12:02:23 -0800 |
commit | 0ff748ace6a53f05b52268f7a8786eeef611a839 (patch) | |
tree | 279ad46936f8475119a5e013af23c80bd1937126 /src/gpu/effects/GrYUVtoRGBEffect.cpp | |
parent | b5d0ce6bd4fef192a9908562b5a01bc01683c7bb (diff) |
Revert of YUV scale fix (patchset #2 id:20001 of https://codereview.chromium.org/922273002/)
Reason for revert:
Turning Windows compile bots red.
Original issue's description:
> YUV scale fix
>
> There was a scaling mistake visible in some JPEG images because the ratio between Y, U and V planes were assumed to be the same ratios as the ratio between texture sizes, which was wrong because texture have a minimum size of 16 and are rounded up to the next POT. Since the ratios between Y and UV planes are generally 1, 2 or 4, rounding up to the next POT would generally preserve this ratio, so that this bug was not very visible, apart from very small jpeg images of 8 or less pixels in either width or height.
>
> BUG=457954
>
> Committed: https://skia.googlesource.com/skia/+/e6eddf7dd85add7da41f22f2643bdd573ad1f1cf
TBR=bsalomon@google.com,sugoi@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=457954
Review URL: https://codereview.chromium.org/926123002
Diffstat (limited to 'src/gpu/effects/GrYUVtoRGBEffect.cpp')
-rw-r--r-- | src/gpu/effects/GrYUVtoRGBEffect.cpp | 43 |
1 files changed, 12 insertions, 31 deletions
diff --git a/src/gpu/effects/GrYUVtoRGBEffect.cpp b/src/gpu/effects/GrYUVtoRGBEffect.cpp index 8daf34829c..736135282c 100644 --- a/src/gpu/effects/GrYUVtoRGBEffect.cpp +++ b/src/gpu/effects/GrYUVtoRGBEffect.cpp @@ -18,22 +18,8 @@ namespace { class YUVtoRGBEffect : public GrFragmentProcessor { public: static GrFragmentProcessor* Create(GrTexture* yTexture, GrTexture* uTexture, - GrTexture* vTexture, SkISize sizes[3], - SkYUVColorSpace colorSpace) { - SkScalar w[3], h[3]; - w[0] = SkIntToScalar(sizes[0].fWidth) / SkIntToScalar(yTexture->width()); - h[0] = SkIntToScalar(sizes[0].fHeight) / SkIntToScalar(yTexture->height()); - w[1] = SkIntToScalar(sizes[1].fWidth) / SkIntToScalar(uTexture->width()); - h[1] = SkIntToScalar(sizes[1].fHeight) / SkIntToScalar(uTexture->height()); - w[2] = SkIntToScalar(sizes[2].fWidth) / SkIntToScalar(vTexture->width()); - h[2] = SkIntToScalar(sizes[2].fHeight) / SkIntToScalar(vTexture->height()); - SkMatrix yuvMatrix[3]; - yuvMatrix[0] = GrCoordTransform::MakeDivByTextureWHMatrix(yTexture); - yuvMatrix[1] = yuvMatrix[0]; - yuvMatrix[1].preScale(w[1] / w[0], h[1] / h[0]); - yuvMatrix[2] = yuvMatrix[0]; - yuvMatrix[2].preScale(w[2] / w[0], h[2] / h[0]); - return SkNEW_ARGS(YUVtoRGBEffect, (yTexture, uTexture, vTexture, yuvMatrix, colorSpace)); + GrTexture* vTexture, SkYUVColorSpace colorSpace) { + return SkNEW_ARGS(YUVtoRGBEffect, (yTexture, uTexture, vTexture, colorSpace)); } const char* name() const SK_OVERRIDE { return "YUV to RGB"; } @@ -67,9 +53,9 @@ public: fsBuilder->codeAppendf("\t%s = vec4(\n\t\t", outputColor); fsBuilder->appendTextureLookup(samplers[0], coords[0].c_str(), coords[0].getType()); fsBuilder->codeAppend(".r,\n\t\t"); - fsBuilder->appendTextureLookup(samplers[1], coords[1].c_str(), coords[1].getType()); + fsBuilder->appendTextureLookup(samplers[1], coords[0].c_str(), coords[0].getType()); fsBuilder->codeAppend(".r,\n\t\t"); - fsBuilder->appendTextureLookup(samplers[2], coords[2].c_str(), coords[2].getType()); + fsBuilder->appendTextureLookup(samplers[2], coords[0].c_str(), coords[0].getType()); fsBuilder->codeAppendf(".r,\n\t\t1.0) * %s;\n", yuvMatrix); } @@ -103,20 +89,18 @@ public: private: YUVtoRGBEffect(GrTexture* yTexture, GrTexture* uTexture, GrTexture* vTexture, - SkMatrix yuvMatrix[3], SkYUVColorSpace colorSpace) - : fYTransform(kLocal_GrCoordSet, yuvMatrix[0], yTexture, GrTextureParams::kNone_FilterMode) + SkYUVColorSpace colorSpace) + : fCoordTransform(kLocal_GrCoordSet, + GrCoordTransform::MakeDivByTextureWHMatrix(yTexture), + yTexture, GrTextureParams::kNone_FilterMode) , fYAccess(yTexture) - , fUTransform(kLocal_GrCoordSet, yuvMatrix[1], uTexture, GrTextureParams::kNone_FilterMode) , fUAccess(uTexture) - , fVTransform(kLocal_GrCoordSet, yuvMatrix[2], vTexture, GrTextureParams::kNone_FilterMode) , fVAccess(vTexture) , fColorSpace(colorSpace) { this->initClassID<YUVtoRGBEffect>(); - this->addCoordTransform(&fYTransform); + this->addCoordTransform(&fCoordTransform); this->addTextureAccess(&fYAccess); - this->addCoordTransform(&fUTransform); this->addTextureAccess(&fUAccess); - this->addCoordTransform(&fVTransform); this->addTextureAccess(&fVAccess); } @@ -131,11 +115,9 @@ private: GrInvariantOutput::kWillNot_ReadInput); } - GrCoordTransform fYTransform; + GrCoordTransform fCoordTransform; GrTextureAccess fYAccess; - GrCoordTransform fUTransform; GrTextureAccess fUAccess; - GrCoordTransform fVTransform; GrTextureAccess fVAccess; SkYUVColorSpace fColorSpace; @@ -158,7 +140,6 @@ const GrGLfloat YUVtoRGBEffect::GLProcessor::kRec601ConversionMatrix[16] = { GrFragmentProcessor* GrYUVtoRGBEffect::Create(GrTexture* yTexture, GrTexture* uTexture, GrTexture* vTexture, - SkISize sizes[3], SkYUVColorSpace colorSpace) { - SkASSERT(yTexture && uTexture && vTexture && sizes); - return YUVtoRGBEffect::Create(yTexture, uTexture, vTexture, sizes, colorSpace); + SkYUVColorSpace colorSpace) { + return YUVtoRGBEffect::Create(yTexture, uTexture, vTexture, colorSpace); } |