summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmds/screencap/screencap.cpp21
-rwxr-xr-xcore/jni/android/graphics/Bitmap.cpp24
-rw-r--r--core/jni/android/graphics/BitmapFactory.cpp21
-rw-r--r--core/jni/android/graphics/BitmapFactory.h4
-rw-r--r--core/jni/android/graphics/BitmapRegionDecoder.cpp2
-rw-r--r--core/jni/android/graphics/Movie_FactoryDefault.cpp1
-rw-r--r--libs/hwui/pipeline/skia/SkiaPipeline.cpp7
7 files changed, 42 insertions, 38 deletions
diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp
index a41f1224f9ec..377e29d99576 100644
--- a/cmds/screencap/screencap.cpp
+++ b/cmds/screencap/screencap.cpp
@@ -175,13 +175,20 @@ int main(int argc, char** argv)
if (base != NULL) {
if (png) {
- const SkImageInfo info = SkImageInfo::Make(w, h, flinger2skia(f),
- kPremul_SkAlphaType);
- sk_sp<SkData> data(SkImageEncoder::EncodeData(info, base, s*bytesPerPixel(f),
- SkImageEncoder::kPNG_Type, SkImageEncoder::kDefaultQuality));
- if (data.get()) {
- write(fd, data->data(), data->size());
- }
+ const SkImageInfo info =
+ SkImageInfo::Make(w, h, flinger2skia(f), kPremul_SkAlphaType);
+ SkPixmap pixmap(info, base, s * bytesPerPixel(f));
+ struct FDWStream final : public SkWStream {
+ size_t fBytesWritten = 0;
+ int fFd;
+ FDWStream(int f) : fFd(f) {}
+ size_t bytesWritten() const override { return fBytesWritten; }
+ bool write(const void* buffer, size_t size) override {
+ fBytesWritten += size;
+ return size == 0 || ::write(fFd, buffer, size) > 0;
+ }
+ } fdStream(fd);
+ (void)SkEncodeImage(&fdStream, pixmap, SkEncodedImageFormat::kPNG, 100);
if (fn != NULL) {
notifyMediaScanner(fn);
}
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index d9aa8f1f4a0a..178e07342555 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -668,42 +668,34 @@ enum JavaEncodeFormat {
static jboolean Bitmap_compress(JNIEnv* env, jobject clazz, jlong bitmapHandle,
jint format, jint quality,
jobject jstream, jbyteArray jstorage) {
-
- LocalScopedBitmap bitmap(bitmapHandle);
- SkImageEncoder::Type fm;
-
+ SkEncodedImageFormat fm;
switch (format) {
case kJPEG_JavaEncodeFormat:
- fm = SkImageEncoder::kJPEG_Type;
+ fm = SkEncodedImageFormat::kJPEG;
break;
case kPNG_JavaEncodeFormat:
- fm = SkImageEncoder::kPNG_Type;
+ fm = SkEncodedImageFormat::kPNG;
break;
case kWEBP_JavaEncodeFormat:
- fm = SkImageEncoder::kWEBP_Type;
+ fm = SkEncodedImageFormat::kWEBP;
break;
default:
return JNI_FALSE;
}
+ LocalScopedBitmap bitmap(bitmapHandle);
if (!bitmap.valid()) {
return JNI_FALSE;
}
- bool success = false;
-
std::unique_ptr<SkWStream> strm(CreateJavaOutputStreamAdaptor(env, jstream, jstorage));
if (!strm.get()) {
return JNI_FALSE;
}
- std::unique_ptr<SkImageEncoder> encoder(SkImageEncoder::Create(fm));
- if (encoder.get()) {
- SkBitmap skbitmap;
- bitmap->getSkBitmap(&skbitmap);
- success = encoder->encodeStream(strm.get(), skbitmap, quality);
- }
- return success ? JNI_TRUE : JNI_FALSE;
+ SkBitmap skbitmap;
+ bitmap->getSkBitmap(&skbitmap);
+ return SkEncodeImage(strm.get(), skbitmap, fm, quality) ? JNI_TRUE : JNI_FALSE;
}
static void Bitmap_erase(JNIEnv* env, jobject, jlong bitmapHandle, jint color) {
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index 2923f94fb7f7..e86acc4b200c 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -48,31 +48,31 @@ jmethodID gInsetStruct_constructorMethodID;
using namespace android;
-jstring encodedFormatToString(JNIEnv* env, SkEncodedFormat format) {
+jstring encodedFormatToString(JNIEnv* env, SkEncodedImageFormat format) {
const char* mimeType;
switch (format) {
- case SkEncodedFormat::kBMP_SkEncodedFormat:
+ case SkEncodedImageFormat::kBMP:
mimeType = "image/bmp";
break;
- case SkEncodedFormat::kGIF_SkEncodedFormat:
+ case SkEncodedImageFormat::kGIF:
mimeType = "image/gif";
break;
- case SkEncodedFormat::kICO_SkEncodedFormat:
+ case SkEncodedImageFormat::kICO:
mimeType = "image/x-ico";
break;
- case SkEncodedFormat::kJPEG_SkEncodedFormat:
+ case SkEncodedImageFormat::kJPEG:
mimeType = "image/jpeg";
break;
- case SkEncodedFormat::kPNG_SkEncodedFormat:
+ case SkEncodedImageFormat::kPNG:
mimeType = "image/png";
break;
- case SkEncodedFormat::kWEBP_SkEncodedFormat:
+ case SkEncodedImageFormat::kWEBP:
mimeType = "image/webp";
break;
- case SkEncodedFormat::kWBMP_SkEncodedFormat:
+ case SkEncodedImageFormat::kWBMP:
mimeType = "image/vnd.wap.wbmp";
break;
- case SkEncodedFormat::kDNG_SkEncodedFormat:
+ case SkEncodedImageFormat::kDNG:
mimeType = "image/x-adobe-dng";
break;
default:
@@ -309,7 +309,8 @@ static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding
// Set the options and return if the client only wants the size.
if (options != NULL) {
- jstring mimeType = encodedFormatToString(env, codec->getEncodedFormat());
+ jstring mimeType = encodedFormatToString(
+ env, (SkEncodedImageFormat)codec->getEncodedFormat());
if (env->ExceptionCheck()) {
return nullObjectReturn("OOM in encodedFormatToString()");
}
diff --git a/core/jni/android/graphics/BitmapFactory.h b/core/jni/android/graphics/BitmapFactory.h
index 07825dfe42ef..76db41dca53f 100644
--- a/core/jni/android/graphics/BitmapFactory.h
+++ b/core/jni/android/graphics/BitmapFactory.h
@@ -2,7 +2,7 @@
#define _ANDROID_GRAPHICS_BITMAP_FACTORY_H_
#include "GraphicsJNI.h"
-#include "SkEncodedFormat.h"
+#include "SkEncodedImageFormat.h"
extern jclass gOptions_class;
extern jfieldID gOptions_justBoundsFieldID;
@@ -20,7 +20,7 @@ extern jfieldID gOptions_mimeFieldID;
extern jfieldID gOptions_mCancelID;
extern jfieldID gOptions_bitmapFieldID;
-jstring encodedFormatToString(JNIEnv* env, SkEncodedFormat format);
+jstring encodedFormatToString(JNIEnv* env, SkEncodedImageFormat format);
jobject decodeBitmap(JNIEnv* env, void* data, size_t size);
diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/core/jni/android/graphics/BitmapRegionDecoder.cpp
index 3b2d5d2c4409..3247851a0ede 100644
--- a/core/jni/android/graphics/BitmapRegionDecoder.cpp
+++ b/core/jni/android/graphics/BitmapRegionDecoder.cpp
@@ -187,7 +187,7 @@ static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle, jint in
env->SetIntField(options, gOptions_widthFieldID, bitmap.width());
env->SetIntField(options, gOptions_heightFieldID, bitmap.height());
env->SetObjectField(options, gOptions_mimeFieldID,
- encodedFormatToString(env, brd->getEncodedFormat()));
+ encodedFormatToString(env, (SkEncodedImageFormat)brd->getEncodedFormat()));
if (env->ExceptionCheck()) {
return nullObjectReturn("OOM in encodedFormatToString()");
}
diff --git a/core/jni/android/graphics/Movie_FactoryDefault.cpp b/core/jni/android/graphics/Movie_FactoryDefault.cpp
index 175e0a64d05b..610f08f45c00 100644
--- a/core/jni/android/graphics/Movie_FactoryDefault.cpp
+++ b/core/jni/android/graphics/Movie_FactoryDefault.cpp
@@ -7,6 +7,7 @@
#include "Movie.h"
#include "SkStream.h"
+#include "SkTRegistry.h"
typedef SkTRegistry<Movie*(*)(SkStreamRewindable*)> MovieReg;
diff --git a/libs/hwui/pipeline/skia/SkiaPipeline.cpp b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
index 0f2d09d69bd7..c9432a17bb43 100644
--- a/libs/hwui/pipeline/skia/SkiaPipeline.cpp
+++ b/libs/hwui/pipeline/skia/SkiaPipeline.cpp
@@ -17,6 +17,7 @@
#include "SkiaPipeline.h"
#include "utils/TraceUtils.h"
+#include <SkImageEncoder.h>
#include <SkOSFile.h>
#include <SkOverdrawCanvas.h>
#include <SkOverdrawColorFilter.h>
@@ -166,8 +167,10 @@ class PngPixelSerializer : public SkPixelSerializer {
public:
bool onUseEncodedData(const void*, size_t) override { return true; }
SkData* onEncode(const SkPixmap& pixmap) override {
- return SkImageEncoder::EncodeData(pixmap.info(), pixmap.addr(), pixmap.rowBytes(),
- SkImageEncoder::kPNG_Type, 100);
+ SkDynamicMemoryWStream buf;
+ return SkEncodeImage(&buf, pixmap, SkEncodedImageFormat::kPNG, 100)
+ ? buf.detachAsData().release()
+ : nullptr;
}
};