| Index: src/core/SkImageGenerator.cpp | 
| diff --git a/src/core/SkImageGenerator.cpp b/src/core/SkImageGenerator.cpp | 
| index 0f63db50f637e82633caf9bd6f611979c941ffcb..d7818fdd7e231ca588a914501a712273effb7900 100644 | 
| --- a/src/core/SkImageGenerator.cpp | 
| +++ b/src/core/SkImageGenerator.cpp | 
| @@ -55,6 +55,7 @@ bool SkImageGenerator::getPixels(const SkImageInfo& info, void* pixels, size_t r | 
| return this->getPixels(info, pixels, rowBytes, NULL, NULL); | 
| } | 
|  | 
| +#ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API | 
| bool SkImageGenerator::getYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3], | 
| SkYUVColorSpace* colorSpace) { | 
| #ifdef SK_DEBUG | 
| @@ -90,21 +91,38 @@ bool SkImageGenerator::getYUV8Planes(SkISize sizes[3], void* planes[3], size_t r | 
|  | 
| return this->onGetYUV8Planes(sizes, planes, rowBytes, colorSpace); | 
| } | 
| +#endif | 
|  | 
| -bool SkImageGenerator::onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3]) { | 
| -    return false; | 
| +bool SkImageGenerator::queryYUV8(SkISize logicalSizes[3], SkISize optimalAllocationSizes[3]) { | 
| +    SkISize logicalStorage[3], optimalStorage[3]; | 
| +    if (!logicalSizes) { | 
| +        logicalSizes = logicalStorage; | 
| +    } | 
| +    if (!optimalAllocationSizes) { | 
| +        optimalAllocationSizes = optimalStorage; | 
| +    } | 
| +    return this->onQueryYUV8(logicalSizes, optimalAllocationSizes); | 
| } | 
|  | 
| -bool SkImageGenerator::onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3], | 
| -                                       SkYUVColorSpace* colorSpace) { | 
| -    // In order to maintain compatibility with clients that implemented the original | 
| -    // onGetYUV8Planes interface, we assume that the color space is JPEG. | 
| -    // TODO(rileya): remove this and the old onGetYUV8Planes once clients switch over to | 
| -    // the new interface. | 
| -    if (colorSpace) { | 
| -        *colorSpace = kJPEG_SkYUVColorSpace; | 
| +bool SkImageGenerator::getYUV8(const SkISize allocationSizes[3], void* planes[3], | 
| +                               SkYUVColorSpace* colorSpace) { | 
| +    SkASSERT(allocationSizes); | 
| +    SkASSERT(planes); | 
| + | 
| +    for (int i = 0; i < 3; ++i) { | 
| +        if (allocationSizes[i].width() <= 0 || allocationSizes[i].height() <= 0) { | 
| +            return false; | 
| +        } | 
| +        if (!planes[i]) { | 
| +            return false; | 
| +        } | 
| } | 
| -    return this->onGetYUV8Planes(sizes, planes, rowBytes); | 
| + | 
| +    SkYUVColorSpace colorSpaceStorage; | 
| +    if (!colorSpace) { | 
| +        colorSpace = &colorSpaceStorage; | 
| +    } | 
| +    return this->onGetYUV8(allocationSizes, planes, colorSpace); | 
| } | 
|  | 
| ///////////////////////////////////////////////////////////////////////////////////////////// | 
| @@ -120,3 +138,48 @@ bool SkImageGenerator::onGetInfo(SkImageInfo*) { | 
| bool SkImageGenerator::onGetPixels(const SkImageInfo&, void*, size_t, SkPMColor*, int*) { | 
| return false; | 
| } | 
| + | 
| +bool SkImageGenerator::onQueryYUV8(SkISize logicalSizes[3], SkISize optimalAllocationSizes[3]) { | 
| +#ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API | 
| +    if (this->getYUV8Planes(logicalSizes, NULL, NULL, NULL)) { | 
| +        memcpy(optimalAllocationSizes, logicalSizes, sizeof(SkISize) * 3); | 
| +        return true; | 
| +    } | 
| +#endif | 
| +    return false; | 
| +} | 
| + | 
| +bool SkImageGenerator::onGetYUV8(const SkISize allocationSizes[3], void* planes[3], | 
| +                                 SkYUVColorSpace* colorSpace) { | 
| +#ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API | 
| +    SkISize tmpSizes[3]; | 
| +    size_t rowBytes[3]; | 
| +    for (int i = 0; i < 3; ++i) { | 
| +        tmpSizes[i] = allocationSizes[i]; | 
| +        rowBytes[i] = allocationSizes[i].width(); | 
| +    } | 
| +    if (this->getYUV8Planes(tmpSizes, planes, rowBytes, colorSpace)) { | 
| +        return true; | 
| +    } | 
| +#endif | 
| +    return false; | 
| +} | 
| + | 
| +#ifdef SK_SUPPORT_LEGACY_IMAGEGENERATOR_YUV_API | 
| +bool SkImageGenerator::onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3]) { | 
| +    return false; | 
| +} | 
| + | 
| +bool SkImageGenerator::onGetYUV8Planes(SkISize sizes[3], void* planes[3], size_t rowBytes[3], | 
| +                                       SkYUVColorSpace* colorSpace) { | 
| +    // In order to maintain compatibility with clients that implemented the original | 
| +    // onGetYUV8Planes interface, we assume that the color space is JPEG. | 
| +    // TODO(rileya): remove this and the old onGetYUV8Planes once clients switch over to | 
| +    // the new interface. | 
| +    if (colorSpace) { | 
| +        *colorSpace = kJPEG_SkYUVColorSpace; | 
| +    } | 
| +    return this->onGetYUV8Planes(sizes, planes, rowBytes); | 
| +} | 
| +#endif | 
| + | 
|  |