Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Unified Diff: src/codec/SkCodecPriv.h

Issue 1395183003: Add scaled subset API to SkCodec (Closed) Base URL: https://skia.googlesource.com/skia.git@split0
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698