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

Commit e59a9559 authored by Dichen Zhang's avatar Dichen Zhang Committed by Android (Google) Code Review
Browse files

Merge "JPEG/R refactory: rename jpegencoder and jpegdecoder"

parents 87602ee3 02dd059d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ cc_library {
    export_include_dirs: ["include"],

    srcs: [
        "jpegencoder.cpp",
        "jpegencoderhelper.cpp",
    ],
}

@@ -73,6 +73,6 @@ cc_library {
    export_include_dirs: ["include"],

    srcs: [
        "jpegdecoder.cpp",
        "jpegdecoderhelper.cpp",
    ],
}
+6 −7
Original line number Diff line number Diff line

/*
 * Copyright 2022 The Android Open Source Project
 *
@@ -15,8 +14,8 @@
 * limitations under the License.
 */

#ifndef ANDROID_JPEGRECOVERYMAP_JPEGDECODER_H
#define ANDROID_JPEGRECOVERYMAP_JPEGDECODER_H
#ifndef ANDROID_JPEGRECOVERYMAP_JPEGDECODERHELPER_H
#define ANDROID_JPEGRECOVERYMAP_JPEGDECODERHELPER_H

// We must include cstdio before jpeglib.h. It is a requirement of libjpeg.
#include <cstdio>
@@ -31,10 +30,10 @@ namespace android::recoverymap {
 * Encapsulates a converter from JPEG to raw image (YUV420planer or grey-scale) format.
 * This class is not thread-safe.
 */
class JpegDecoder {
class JpegDecoderHelper {
public:
    JpegDecoder();
    ~JpegDecoder();
    JpegDecoderHelper();
    ~JpegDecoderHelper();
    /*
     * Decompresses JPEG image to raw image (YUV420planer, grey-scale or RGBA) format. After
     * calling this method, call getDecompressedImage() to get the image.
@@ -118,4 +117,4 @@ private:
};
} /* namespace android  */

#endif // ANDROID_JPEGRECOVERYMAP_JPEGDECODER_H
#endif // ANDROID_JPEGRECOVERYMAP_JPEGDECODERHELPER_H
+6 −6
Original line number Diff line number Diff line
@@ -14,8 +14,8 @@
 * limitations under the License.
 */

#ifndef ANDROID_JPEGRECOVERYMAP_JPEGENCODER_H
#define ANDROID_JPEGRECOVERYMAP_JPEGENCODER_H
#ifndef ANDROID_JPEGRECOVERYMAP_JPEGENCODERHELPER_H
#define ANDROID_JPEGRECOVERYMAP_JPEGENCODERHELPER_H

// We must include cstdio before jpeglib.h. It is a requirement of libjpeg.
#include <cstdio>
@@ -34,10 +34,10 @@ namespace android::recoverymap {
 * Encapsulates a converter from raw image (YUV420planer or grey-scale) to JPEG format.
 * This class is not thread-safe.
 */
class JpegEncoder {
class JpegEncoderHelper {
public:
    JpegEncoder();
    ~JpegEncoder();
    JpegEncoderHelper();
    ~JpegEncoderHelper();

    /*
     * Compresses YUV420Planer image to JPEG format. After calling this method, call
@@ -92,4 +92,4 @@ private:

} /* namespace android  */

#endif // ANDROID_JPEGRECOVERYMAP_JPEGENCODER_H
#endif // ANDROID_JPEGRECOVERYMAP_JPEGENCODERHELPER_H
+18 −18
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

#include <jpegrecoverymap/jpegdecoder.h>
#include <jpegrecoverymap/jpegdecoderhelper.h>

#include <utils/Log.h>

@@ -90,14 +90,14 @@ static void jpegrerror_exit(j_common_ptr cinfo) {
    longjmp(err->setjmp_buffer, 1);
}

JpegDecoder::JpegDecoder() {
JpegDecoderHelper::JpegDecoderHelper() {
  mExifPos = 0;
}

JpegDecoder::~JpegDecoder() {
JpegDecoderHelper::~JpegDecoderHelper() {
}

bool JpegDecoder::decompressImage(const void* image, int length, bool decodeToRGBA) {
bool JpegDecoderHelper::decompressImage(const void* image, int length, bool decodeToRGBA) {
    if (image == nullptr || length <= 0) {
        ALOGE("Image size can not be handled: %d", length);
        return false;
@@ -112,39 +112,39 @@ bool JpegDecoder::decompressImage(const void* image, int length, bool decodeToRG
    return true;
}

void* JpegDecoder::getDecompressedImagePtr() {
void* JpegDecoderHelper::getDecompressedImagePtr() {
    return mResultBuffer.data();
}

size_t JpegDecoder::getDecompressedImageSize() {
size_t JpegDecoderHelper::getDecompressedImageSize() {
    return mResultBuffer.size();
}

void* JpegDecoder::getXMPPtr() {
void* JpegDecoderHelper::getXMPPtr() {
    return mXMPBuffer.data();
}

size_t JpegDecoder::getXMPSize() {
size_t JpegDecoderHelper::getXMPSize() {
    return mXMPBuffer.size();
}

void* JpegDecoder::getEXIFPtr() {
void* JpegDecoderHelper::getEXIFPtr() {
    return mEXIFBuffer.data();
}

size_t JpegDecoder::getEXIFSize() {
size_t JpegDecoderHelper::getEXIFSize() {
    return mEXIFBuffer.size();
}

size_t JpegDecoder::getDecompressedImageWidth() {
size_t JpegDecoderHelper::getDecompressedImageWidth() {
    return mWidth;
}

size_t JpegDecoder::getDecompressedImageHeight() {
size_t JpegDecoderHelper::getDecompressedImageHeight() {
    return mHeight;
}

bool JpegDecoder::decode(const void* image, int length, bool decodeToRGBA) {
bool JpegDecoderHelper::decode(const void* image, int length, bool decodeToRGBA) {
    jpeg_decompress_struct cinfo;
    jpegr_source_mgr mgr(static_cast<const uint8_t*>(image), length);
    jpegrerror_mgr myerr;
@@ -248,7 +248,7 @@ bool JpegDecoder::decode(const void* image, int length, bool decodeToRGBA) {
    return true;
}

bool JpegDecoder::decompress(jpeg_decompress_struct* cinfo, const uint8_t* dest,
bool JpegDecoderHelper::decompress(jpeg_decompress_struct* cinfo, const uint8_t* dest,
        bool isSingleChannel) {
    if (isSingleChannel) {
        return decompressSingleChannel(cinfo, dest);
@@ -259,7 +259,7 @@ bool JpegDecoder::decompress(jpeg_decompress_struct* cinfo, const uint8_t* dest,
        return decompressYUV(cinfo, dest);
}

bool JpegDecoder::getCompressedImageParameters(const void* image, int length,
bool JpegDecoderHelper::getCompressedImageParameters(const void* image, int length,
                              size_t *pWidth, size_t *pHeight,
                              std::vector<uint8_t> *iccData , std::vector<uint8_t> *exifData) {
    jpeg_decompress_struct cinfo;
@@ -326,7 +326,7 @@ bool JpegDecoder::getCompressedImageParameters(const void* image, int length,
    return true;
}

bool JpegDecoder::decompressRGBA(jpeg_decompress_struct* cinfo, const uint8_t* dest) {
bool JpegDecoderHelper::decompressRGBA(jpeg_decompress_struct* cinfo, const uint8_t* dest) {
    JSAMPLE* decodeDst = (JSAMPLE*) dest;
    uint32_t lines = 0;
    // TODO: use batches for more effectiveness
@@ -341,7 +341,7 @@ bool JpegDecoder::decompressRGBA(jpeg_decompress_struct* cinfo, const uint8_t* d
    return lines == cinfo->image_height;
}

bool JpegDecoder::decompressYUV(jpeg_decompress_struct* cinfo, const uint8_t* dest) {
bool JpegDecoderHelper::decompressYUV(jpeg_decompress_struct* cinfo, const uint8_t* dest) {

    JSAMPROW y[kCompressBatchSize];
    JSAMPROW cb[kCompressBatchSize / 2];
@@ -386,7 +386,7 @@ bool JpegDecoder::decompressYUV(jpeg_decompress_struct* cinfo, const uint8_t* de
    return true;
}

bool JpegDecoder::decompressSingleChannel(jpeg_decompress_struct* cinfo, const uint8_t* dest) {
bool JpegDecoderHelper::decompressSingleChannel(jpeg_decompress_struct* cinfo, const uint8_t* dest) {
    JSAMPROW y[kCompressBatchSize];
    JSAMPARRAY planes[1] {y};

+18 −18
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

#include <jpegrecoverymap/jpegencoder.h>
#include <jpegrecoverymap/jpegencoderhelper.h>

#include <utils/Log.h>

@@ -22,20 +22,20 @@

namespace android::recoverymap {

// The destination manager that can access |mResultBuffer| in JpegEncoder.
// The destination manager that can access |mResultBuffer| in JpegEncoderHelper.
struct destination_mgr {
public:
    struct jpeg_destination_mgr mgr;
    JpegEncoder* encoder;
    JpegEncoderHelper* encoder;
};

JpegEncoder::JpegEncoder() {
JpegEncoderHelper::JpegEncoderHelper() {
}

JpegEncoder::~JpegEncoder() {
JpegEncoderHelper::~JpegEncoderHelper() {
}

bool JpegEncoder::compressImage(const void* image, int width, int height, int quality,
bool JpegEncoderHelper::compressImage(const void* image, int width, int height, int quality,
                                   const void* iccBuffer, unsigned int iccSize,
                                   bool isSingleChannel) {
    if (width % 8 != 0 || height % 2 != 0) {
@@ -52,15 +52,15 @@ bool JpegEncoder::compressImage(const void* image, int width, int height, int qu
    return true;
}

void* JpegEncoder::getCompressedImagePtr() {
void* JpegEncoderHelper::getCompressedImagePtr() {
    return mResultBuffer.data();
}

size_t JpegEncoder::getCompressedImageSize() {
size_t JpegEncoderHelper::getCompressedImageSize() {
    return mResultBuffer.size();
}

void JpegEncoder::initDestination(j_compress_ptr cinfo) {
void JpegEncoderHelper::initDestination(j_compress_ptr cinfo) {
    destination_mgr* dest = reinterpret_cast<destination_mgr*>(cinfo->dest);
    std::vector<JOCTET>& buffer = dest->encoder->mResultBuffer;
    buffer.resize(kBlockSize);
@@ -68,7 +68,7 @@ void JpegEncoder::initDestination(j_compress_ptr cinfo) {
    dest->mgr.free_in_buffer = buffer.size();
}

boolean JpegEncoder::emptyOutputBuffer(j_compress_ptr cinfo) {
boolean JpegEncoderHelper::emptyOutputBuffer(j_compress_ptr cinfo) {
    destination_mgr* dest = reinterpret_cast<destination_mgr*>(cinfo->dest);
    std::vector<JOCTET>& buffer = dest->encoder->mResultBuffer;
    size_t oldsize = buffer.size();
@@ -78,13 +78,13 @@ boolean JpegEncoder::emptyOutputBuffer(j_compress_ptr cinfo) {
    return true;
}

void JpegEncoder::terminateDestination(j_compress_ptr cinfo) {
void JpegEncoderHelper::terminateDestination(j_compress_ptr cinfo) {
    destination_mgr* dest = reinterpret_cast<destination_mgr*>(cinfo->dest);
    std::vector<JOCTET>& buffer = dest->encoder->mResultBuffer;
    buffer.resize(buffer.size() - dest->mgr.free_in_buffer);
}

void JpegEncoder::outputErrorMessage(j_common_ptr cinfo) {
void JpegEncoderHelper::outputErrorMessage(j_common_ptr cinfo) {
    char buffer[JMSG_LENGTH_MAX];

    /* Create the message */
@@ -92,7 +92,7 @@ void JpegEncoder::outputErrorMessage(j_common_ptr cinfo) {
    ALOGE("%s\n", buffer);
}

bool JpegEncoder::encode(const void* image, int width, int height, int jpegQuality,
bool JpegEncoderHelper::encode(const void* image, int width, int height, int jpegQuality,
                         const void* iccBuffer, unsigned int iccSize, bool isSingleChannel) {
    jpeg_compress_struct cinfo;
    jpeg_error_mgr jerr;
@@ -118,7 +118,7 @@ bool JpegEncoder::encode(const void* image, int width, int height, int jpegQuali
    return true;
}

void JpegEncoder::setJpegDestination(jpeg_compress_struct* cinfo) {
void JpegEncoderHelper::setJpegDestination(jpeg_compress_struct* cinfo) {
    destination_mgr* dest = static_cast<struct destination_mgr *>((*cinfo->mem->alloc_small) (
            (j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(destination_mgr)));
    dest->encoder = this;
@@ -128,7 +128,7 @@ void JpegEncoder::setJpegDestination(jpeg_compress_struct* cinfo) {
    cinfo->dest = reinterpret_cast<struct jpeg_destination_mgr*>(dest);
}

void JpegEncoder::setJpegCompressStruct(int width, int height, int quality,
void JpegEncoderHelper::setJpegCompressStruct(int width, int height, int quality,
                                        jpeg_compress_struct* cinfo, bool isSingleChannel) {
    cinfo->image_width = width;
    cinfo->image_height = height;
@@ -158,7 +158,7 @@ void JpegEncoder::setJpegCompressStruct(int width, int height, int quality,
    }
}

bool JpegEncoder::compress(
bool JpegEncoderHelper::compress(
        jpeg_compress_struct* cinfo, const uint8_t* image, bool isSingleChannel) {
    if (isSingleChannel) {
        return compressSingleChannel(cinfo, image);
@@ -166,7 +166,7 @@ bool JpegEncoder::compress(
    return compressYuv(cinfo, image);
}

bool JpegEncoder::compressYuv(jpeg_compress_struct* cinfo, const uint8_t* yuv) {
bool JpegEncoderHelper::compressYuv(jpeg_compress_struct* cinfo, const uint8_t* yuv) {
    JSAMPROW y[kCompressBatchSize];
    JSAMPROW cb[kCompressBatchSize / 2];
    JSAMPROW cr[kCompressBatchSize / 2];
@@ -210,7 +210,7 @@ bool JpegEncoder::compressYuv(jpeg_compress_struct* cinfo, const uint8_t* yuv) {
    return true;
}

bool JpegEncoder::compressSingleChannel(jpeg_compress_struct* cinfo, const uint8_t* image) {
bool JpegEncoderHelper::compressSingleChannel(jpeg_compress_struct* cinfo, const uint8_t* image) {
    JSAMPROW y[kCompressBatchSize];
    JSAMPARRAY planes[1] {y};

Loading