Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c127940 authored by Leon Scroggins's avatar Leon Scroggins Committed by Android (Google) Code Review
Browse files

Merge changes from topic "ndk_imagedecoder"

* changes:
  Implement new NDK image decoding apis
  Create AAssetStreamAdaptor, for reading from AAssets
parents e318548c 407b5449
Loading
Loading
Loading
Loading
+16 −25
Original line number Diff line number Diff line
@@ -52,42 +52,34 @@ jmethodID gBitmapConfig_nativeToConfigMethodID;

using namespace android;

jstring encodedFormatToString(JNIEnv* env, SkEncodedImageFormat format) {
    const char* mimeType;
const char* getMimeType(SkEncodedImageFormat format) {
    switch (format) {
        case SkEncodedImageFormat::kBMP:
            mimeType = "image/bmp";
            break;
            return "image/bmp";
        case SkEncodedImageFormat::kGIF:
            mimeType = "image/gif";
            break;
            return "image/gif";
        case SkEncodedImageFormat::kICO:
            mimeType = "image/x-ico";
            break;
            return "image/x-ico";
        case SkEncodedImageFormat::kJPEG:
            mimeType = "image/jpeg";
            break;
            return "image/jpeg";
        case SkEncodedImageFormat::kPNG:
            mimeType = "image/png";
            break;
            return "image/png";
        case SkEncodedImageFormat::kWEBP:
            mimeType = "image/webp";
            break;
            return "image/webp";
        case SkEncodedImageFormat::kHEIF:
            mimeType = "image/heif";
            break;
            return "image/heif";
        case SkEncodedImageFormat::kWBMP:
            mimeType = "image/vnd.wap.wbmp";
            break;
            return "image/vnd.wap.wbmp";
        case SkEncodedImageFormat::kDNG:
            mimeType = "image/x-adobe-dng";
            break;
            return "image/x-adobe-dng";
        default:
            mimeType = nullptr;
            break;
            return nullptr;
    }
}

jstring getMimeTypeAsJavaString(JNIEnv* env, SkEncodedImageFormat format) {
    jstring jstr = nullptr;
    const char* mimeType = getMimeType(format);
    if (mimeType) {
        // NOTE: Caller should env->ExceptionCheck() for OOM
        // (can't check for nullptr as it's a valid return value)
@@ -289,10 +281,9 @@ static jobject doDecode(JNIEnv* env, std::unique_ptr<SkStreamRewindable> stream,

    // Set the options and return if the client only wants the size.
    if (options != NULL) {
        jstring mimeType = encodedFormatToString(
                env, (SkEncodedImageFormat)codec->getEncodedFormat());
        jstring mimeType = getMimeTypeAsJavaString(env, codec->getEncodedFormat());
        if (env->ExceptionCheck()) {
            return nullObjectReturn("OOM in encodedFormatToString()");
            return nullObjectReturn("OOM in getMimeTypeAsJavaString()");
        }
        env->SetIntField(options, gOptions_widthFieldID, scaledWidth);
        env->SetIntField(options, gOptions_heightFieldID, scaledHeight);
+1 −1
Original line number Diff line number Diff line
@@ -26,6 +26,6 @@ extern jfieldID gOptions_bitmapFieldID;
extern jclass gBitmapConfig_class;
extern jmethodID gBitmapConfig_nativeToConfigMethodID;

jstring encodedFormatToString(JNIEnv* env, SkEncodedImageFormat format);
jstring getMimeTypeAsJavaString(JNIEnv*, SkEncodedImageFormat);

#endif  // _ANDROID_GRAPHICS_BITMAP_FACTORY_H_
+1 −1
Original line number Diff line number Diff line
@@ -197,7 +197,7 @@ static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle, jint in
        env->SetIntField(options, gOptions_heightFieldID, bitmap.height());

        env->SetObjectField(options, gOptions_mimeFieldID,
                encodedFormatToString(env, (SkEncodedImageFormat)brd->getEncodedFormat()));
                getMimeTypeAsJavaString(env, brd->getEncodedFormat()));
        if (env->ExceptionCheck()) {
            return nullObjectReturn("OOM in encodedFormatToString()");
        }
+1 −1
Original line number Diff line number Diff line
@@ -475,7 +475,7 @@ static void ImageDecoder_nClose(JNIEnv* /*env*/, jobject /*clazz*/, jlong native

static jstring ImageDecoder_nGetMimeType(JNIEnv* env, jobject /*clazz*/, jlong nativePtr) {
    auto* decoder = reinterpret_cast<ImageDecoder*>(nativePtr);
    return encodedFormatToString(env, decoder->mCodec->getEncodedFormat());
    return getMimeTypeAsJavaString(env, decoder->mCodec->getEncodedFormat());
}

static jobject ImageDecoder_nGetColorSpace(JNIEnv* env, jobject /*clazz*/, jlong nativePtr) {
+21 −0
Original line number Diff line number Diff line
/*
 * Copyright 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include "SkEncodedImageFormat.h"

const char* getMimeType(SkEncodedImageFormat);
Loading