From 12d1625e27e2150fa78799567ddfa4602d229b5f Mon Sep 17 00:00:00 2001 From: "reed@android.com" Date: Mon, 19 Oct 2009 15:51:15 +0000 Subject: [PATCH] add android-specific tweaks to vary the amount of tmp ram allocated git-svn-id: http://skia.googlecode.com/svn/trunk@390 2bbb7eff-a529-9590-31e7-b0007b416f81 --- src/images/SkImageDecoder_libjpeg.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/images/SkImageDecoder_libjpeg.cpp b/src/images/SkImageDecoder_libjpeg.cpp index cc0f8a9d7c..2bb922a8e4 100644 --- a/src/images/SkImageDecoder_libjpeg.cpp +++ b/src/images/SkImageDecoder_libjpeg.cpp @@ -29,6 +29,13 @@ extern "C" { #include "jerror.h" } +#ifdef ANDROID +#include + +// Key to lookup the size of memory buffer set in system property +static const char KEY_MEM_CAP[] = "ro.media.dec.jpeg.memcap"; +#endif + // this enables timing code to report milliseconds for an encode //#define TIME_ENCODE //#define TIME_DECODE @@ -191,6 +198,22 @@ static boolean skmem_resync_to_restart(j_decompress_ptr cinfo, int desired) { static void skmem_term_source(j_decompress_ptr /*cinfo*/) {} +#ifdef ANDROID +/* Check if the memory cap property is set. + If so, use the memory size for jpeg decode. +*/ +static void overwrite_mem_buffer_size(j_decompress_ptr cinfo) { + int len = 0; + char value[PROPERTY_VALUE_MAX]; + int memCap; + + len = property_get(KEY_MEM_CAP, value, ""); + if (len > 0 && sscanf(value, "%d", &memCap) == 1) { + cinfo->mem->max_memory_to_use = memCap; + } +} +#endif + /////////////////////////////////////////////////////////////////////////////// sk_source_mgr::sk_source_mgr(SkStream* stream, SkImageDecoder* decoder) : fStream(stream) { @@ -286,6 +309,10 @@ bool SkJPEGImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, jpeg_create_decompress(&cinfo); autoClean.set(&cinfo); +#ifdef ANDROID + overwrite_mem_buffer_size(&cinfo); +#endif + //jpeg_stdio_src(&cinfo, file); cinfo.src = &sk_stream; -- 2.34.1