 Chromium Code Reviews
 Chromium Code Reviews Issue 1395183003:
  Add scaled subset API to SkCodec  (Closed) 
  Base URL: https://skia.googlesource.com/skia.git@split0
    
  
    Issue 1395183003:
  Add scaled subset API to SkCodec  (Closed) 
  Base URL: https://skia.googlesource.com/skia.git@split0| Index: src/codec/SkCodecPriv.h | 
| diff --git a/src/codec/SkCodecPriv.h b/src/codec/SkCodecPriv.h | 
| index 0442625dd20b858ee7e9cd84877f3417124fcbd1..766b222e6bee2976f05aa0f923f19df7692735ae 100644 | 
| --- a/src/codec/SkCodecPriv.h | 
| +++ b/src/codec/SkCodecPriv.h | 
| @@ -31,6 +31,10 @@ | 
| #define COMPUTE_RESULT_ALPHA \ | 
| SkSwizzler::GetResult(zeroAlpha, maxAlpha); | 
| +inline bool is_valid_subset(const SkIRect& subset, const SkISize& imageDims) { | 
| + return SkIRect::MakeSize(imageDims).contains(subset); | 
| +} | 
| + | 
| /* | 
| * returns a scaled dimension based on the original dimension and the sampleSize | 
| * NOTE: we round down here for scaled dimension to match the behavior of SkImageDecoder | 
| @@ -64,21 +68,28 @@ inline int get_dst_coord(int srcCoord, int sampleFactor) { return srcCoord / sam | 
| * When scaling, we will discard certain y-coordinates (rows) and | 
| * x-coordinates (columns). This function returns true if we should keep the | 
| * coordinate and false otherwise. | 
| - * The inputs may be x-coordinates or y-coordinates. | 
| + * | 
| + * The inputs may be x-coordinates or y-coordinates, but for clarity, it helps | 
| + * to name variables using y-coordinate naming conventions. | 
| 
scroggo
2015/10/12 20:47:07
Was y picked arbitrarily over x? I understand it m
 | 
| * | 
| * This does not need to be called and is not called when sampleFactor == 1. | 
| + * | 
| + * @param srcY Unscaled, original y-coordinate | 
| + * @param sampleY Sampling factor used in the y-dimension | 
| + * @param scaledSubsetHeight Height of the final output, after any scaling or subsetting | 
| + * @param subsetY Top of the subset as an unscaled, original y-coordinate | 
| */ | 
| -inline bool is_coord_necessary(int srcCoord, int sampleFactor, int scaledDim) { | 
| +inline bool is_coord_necessary(int srcY, int sampleY, int scaledSubsetHeight, int subsetY) { | 
| // Get the first coordinate that we want to keep | 
| - int startCoord = get_start_coord(sampleFactor); | 
| + int startY = get_start_coord(sampleY) + subsetY; | 
| // Return false on edge cases | 
| - if (srcCoord < startCoord || get_dst_coord(srcCoord, sampleFactor) >= scaledDim) { | 
| + if (srcY < startY || get_dst_coord(srcY - subsetY, sampleY) >= scaledSubsetHeight) { | 
| return false; | 
| } | 
| - // Every sampleFactor rows are necessary | 
| - return ((srcCoord - startCoord) % sampleFactor) == 0; | 
| + // Every sampleY rows are necessary | 
| + return ((srcY - startY) % sampleY) == 0; | 
| } | 
| inline bool valid_alpha(SkAlphaType dstAlpha, SkAlphaType srcAlpha) { |