diff options
author | 2013-12-11 18:19:10 +0000 | |
---|---|---|
committer | 2013-12-11 18:19:10 +0000 | |
commit | 6a32add491cc736aab95561d137909cd7c5d65ef (patch) | |
tree | 4812c0d9561ba12a8460ac2e63fe81bde7819581 /src/image/SkSurface_Raster.cpp | |
parent | 6965a0a2df9d35cd0a25e1738f0388272d03f399 (diff) |
Revert "PixelRef now returns (nearly) everything that is currently in SkBitmap. The goal is to refactor bitmap later to remove redundancy, and more interestingly, remove the chance for a disconnect between the actual (pixelref) rowbytes and config, and the one claimed by the bitmap."""""
This reverts commit d08eca87a0bef10112a211de540f89656a80b86a.
BUG=
Review URL: https://codereview.chromium.org/108303003
git-svn-id: http://skia.googlecode.com/svn/trunk@12623 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/image/SkSurface_Raster.cpp')
-rw-r--r-- | src/image/SkSurface_Raster.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp index 61ade6f46c..27db504df6 100644 --- a/src/image/SkSurface_Raster.cpp +++ b/src/image/SkSurface_Raster.cpp @@ -155,9 +155,19 @@ SkSurface* SkSurface::NewRaster(const SkImageInfo& info) { return NULL; } - SkAutoTUnref<SkPixelRef> pr(SkMallocPixelRef::NewAllocate(info, 0, NULL)); - if (NULL == pr.get()) { + static const size_t kMaxTotalSize = SK_MaxS32; + size_t rowBytes = SkImageMinRowBytes(info); + uint64_t size64 = (uint64_t)info.fHeight * rowBytes; + if (size64 > kMaxTotalSize) { + return NULL; + } + + size_t size = (size_t)size64; + void* pixels = sk_malloc_throw(size); + if (NULL == pixels) { return NULL; } - return SkNEW_ARGS(SkSurface_Raster, (info, pr, info.minRowBytes())); + + SkAutoTUnref<SkPixelRef> pr(SkNEW_ARGS(SkMallocPixelRef, (pixels, size, NULL, true))); + return SkNEW_ARGS(SkSurface_Raster, (info, pr, rowBytes)); } |