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

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

Merge "libjpegrecoverymap: refactor"

parents f71cf3ba 6947d535
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -31,4 +31,8 @@ cc_library_static {
    srcs: [
        "recoverymap.cpp",
    ],

    shared_libs: [
        "libutils",
    ],
}
 No newline at end of file
+82 −24
Original line number Diff line number Diff line
@@ -14,12 +14,14 @@
 * limitations under the License.
 */

 #include <utils/Errors.h>

namespace android::recoverymap {

/*
 * Holds information for uncompressed image or recovery map.
 */
struct jpeg_r_uncompressed_struct {
struct jpegr_uncompressed_struct {
    // Pointer to the data location.
    void* data;
    // Width of the recovery map or image in pixels.
@@ -31,37 +33,90 @@ struct jpeg_r_uncompressed_struct {
/*
 * Holds information for compressed image or recovery map.
 */
struct jpeg_r_compressed_struct {
struct jpegr_compressed_struct {
    // Pointer to the data location.
    void* data;
    // Data length;
    int length;
};

typedef struct jpeg_r_uncompressed_struct* j_r_uncompressed_ptr;
typedef struct jpeg_r_compressed_struct* j_r_compressed_ptr;
typedef struct jpegr_uncompressed_struct* jr_uncompressed_ptr;
typedef struct jpegr_compressed_struct* jr_compressed_ptr;

class RecoveryMap {
public:
    /*
     * Compress JPEGR image from 10-bit HDR YUV and 8-bit SDR YUV.
     *
     * Generate recovery map from the HDR and SDR inputs, compress SDR YUV to 8-bit JPEG and append
     * the recovery map to the end of the compressed JPEG.
     * @param uncompressed_p010_image uncompressed HDR image in P010 color format
     * @param uncompressed_yuv_420_image uncompressed SDR image in YUV_420 color format
     * @param dest destination of the compressed JPEGR image
     * @return NO_ERROR if encoding succeeds, error code if error occurs.
     */
    status_t encodeJPEGR(jr_uncompressed_ptr uncompressed_p010_image,
                         jr_uncompressed_ptr uncompressed_yuv_420_image,
                         void* dest);

    /*
     * Compress JPEGR image from 10-bit HDR YUV and 8-bit SDR YUV.
     *
     * Generate recovery map from the HDR and SDR inputs, append the recovery map to the end of the
     * compressed JPEG.
     * @param uncompressed_p010_image uncompressed HDR image in P010 color format
     * @param uncompressed_yuv_420_image uncompressed SDR image in YUV_420 color format
     * @param compressed_jpeg_image compressed 8-bit JPEG image
     * @param dest destination of the compressed JPEGR image
     * @return NO_ERROR if encoding succeeds, error code if error occurs.
     */
    status_t encodeJPEGR(jr_uncompressed_ptr uncompressed_p010_image,
                         jr_uncompressed_ptr uncompressed_yuv_420_image,
                         void* compressed_jpeg_image,
                         void* dest);

    /*
     * Compress JPEGR image from 10-bit HDR YUV and 8-bit SDR YUV.
     *
     * Decode the compressed 8-bit JPEG image to YUV SDR, generate recovery map from the HDR input
     * and the decoded SDR result, append the recovery map to the end of the compressed JPEG.
     * @param uncompressed_p010_image uncompressed HDR image in P010 color format
     * @param compressed_jpeg_image compressed 8-bit JPEG image
     * @param dest destination of the compressed JPEGR image
     * @return NO_ERROR if encoding succeeds, error code if error occurs.
     */
    status_t encodeJPEGR(jr_uncompressed_ptr uncompressed_p010_image,
                         void* compressed_jpeg_image,
                         void* dest);

    /*
     * Decompress JPEGR image.
     *
     * @param compressed_jpegr_image compressed JPEGR image
     * @param dest destination of the uncompressed JPEGR image
     * @return NO_ERROR if decoding succeeds, error code if error occurs.
     */
    status_t decodeJPEGR(void* compressed_jpegr_image, jr_uncompressed_ptr dest);
private:
    /*
     * This method is called in the decoding pipeline. It will decode the recovery map.
     *
     * @param compressed_recovery_map compressed recovery map
     * @param dest decoded recover map
     * @return true if decoding succeeds
     * @return NO_ERROR if decoding succeeds, error code if error occurs.
     */
    bool decodeRecoveryMap(j_r_compressed_ptr compressed_recovery_map,
                           j_r_uncompressed_ptr dest);
    status_t decodeRecoveryMap(jr_compressed_ptr compressed_recovery_map,
                               jr_uncompressed_ptr dest);

    /*
     * This method is called in the encoding pipeline. It will encode the recovery map.
     *
     * @param uncompressed_recovery_map uncompressed recovery map
     * @param dest encoded recover map
     * @return true if encoding succeeds
     * @return NO_ERROR if encoding succeeds, error code if error occurs.
     */
    bool encodeRecoveryMap(j_r_uncompressed_ptr uncompressed_recovery_map,
                           j_r_compressed_ptr dest);
    status_t encodeRecoveryMap(jr_uncompressed_ptr uncompressed_recovery_map,
                               jr_compressed_ptr dest);

    /*
     * This method is called in the encoding pipeline. It will take the uncompressed 8-bit and
@@ -70,11 +125,11 @@ public:
     * @param uncompressed_yuv_420_image uncompressed SDR image in YUV_420 color format
     * @param uncompressed_p010_image uncompressed HDR image in P010 color format
     * @param dest recover map
     * @return true if calculation succeeds
     * @return NO_ERROR if calculation succeeds, error code if error occurs.
     */
    bool generateRecoveryMap(j_r_uncompressed_ptr uncompressed_yuv_420_image,
                             j_r_uncompressed_ptr uncompressed_p010_image,
                             j_r_uncompressed_ptr dest);
    status_t generateRecoveryMap(jr_uncompressed_ptr uncompressed_yuv_420_image,
                                 jr_uncompressed_ptr uncompressed_p010_image,
                                 jr_uncompressed_ptr dest);

    /*
     * This method is called in the decoding pipeline. It will take the uncompressed (decoded)
@@ -84,20 +139,21 @@ public:
     * @param uncompressed_yuv_420_image uncompressed SDR image in YUV_420 color format
     * @param uncompressed_recovery_map uncompressed recovery map
     * @param dest reconstructed HDR image
     * @return true if calculation succeeds
     * @return NO_ERROR if calculation succeeds, error code if error occurs.
     */
    bool applyRecoveryMap(j_r_uncompressed_ptr uncompressed_yuv_420_image,
                          j_r_uncompressed_ptr uncompressed_recovery_map,
                          j_r_uncompressed_ptr dest);
    status_t applyRecoveryMap(jr_uncompressed_ptr uncompressed_yuv_420_image,
                              jr_uncompressed_ptr uncompressed_recovery_map,
                              jr_uncompressed_ptr dest);

    /*
     * This method is called in the decoding pipeline. It will read XMP metadata to find the start
     * position of the compressed recovery map, and will extract the compressed recovery map.
     *
     * @param compressed_jpeg_r_image compressed JPEG_R image
     * @return compressed recovery map
     * @param compressed_jpegr_image compressed JPEGR image
     * @param dest destination of compressed recovery map
     * @return NO_ERROR if calculation succeeds, error code if error occurs.
     */
    j_r_compressed_ptr extractRecoveryMap(void* compressed_jpeg_r_image);
    status_t extractRecoveryMap(void* compressed_jpegr_image, jr_compressed_ptr dest);

    /*
     * This method is called in the encoding pipeline. It will take the standard 8-bit JPEG image
@@ -106,10 +162,12 @@ public:
     *
     * @param compressed_jpeg_image compressed 8-bit JPEG image
     * @param compress_recovery_map compressed recover map
     * @return compressed JPEG_R image
     * @param dest compressed JPEGR image
     * @return NO_ERROR if calculation succeeds, error code if error occurs.
     */
    void* appendRecoveryMap(void* compressed_jpeg_image,
                            j_r_compressed_ptr compressed_recovery_map);
    status_t appendRecoveryMap(void* compressed_jpeg_image,
                               jr_compressed_ptr compressed_recovery_map,
                               void* dest);
};

} // namespace android::recoverymap
+81 −27
Original line number Diff line number Diff line
@@ -18,69 +18,123 @@

namespace android::recoverymap {

bool RecoveryMap::decodeRecoveryMap(j_r_compressed_ptr compressed_recovery_map,
                                    j_r_uncompressed_ptr dest) {
status_t RecoveryMap::encodeJPEGR(jr_uncompressed_ptr uncompressed_p010_image,
                                  jr_uncompressed_ptr uncompressed_yuv_420_image,
                                  void* dest) {
  if (uncompressed_p010_image == nullptr
   || uncompressed_yuv_420_image == nullptr
   || dest == nullptr) {
    return BAD_VALUE;
  }

  // TBD
  return NO_ERROR;
}

status_t RecoveryMap::encodeJPEGR(jr_uncompressed_ptr uncompressed_p010_image,
                                  jr_uncompressed_ptr uncompressed_yuv_420_image,
                                  void* compressed_jpeg_image,
                                  void* dest) {

  if (uncompressed_p010_image == nullptr
   || uncompressed_yuv_420_image == nullptr
   || compressed_jpeg_image == nullptr
   || dest == nullptr) {
    return BAD_VALUE;
  }

  // TBD
  return NO_ERROR;
}

status_t RecoveryMap::encodeJPEGR(jr_uncompressed_ptr uncompressed_p010_image,
                                  void* compressed_jpeg_image,
                                  void* dest) {
  if (uncompressed_p010_image == nullptr
   || compressed_jpeg_image == nullptr
   || dest == nullptr) {
    return BAD_VALUE;
  }

  // TBD
  return NO_ERROR;
}

status_t RecoveryMap::decodeJPEGR(void* compressed_jpegr_image, jr_uncompressed_ptr dest) {
  if (compressed_jpegr_image == nullptr || dest == nullptr) {
    return BAD_VALUE;
  }

  // TBD
  return NO_ERROR;
}

status_t RecoveryMap::decodeRecoveryMap(jr_compressed_ptr compressed_recovery_map,
                                        jr_uncompressed_ptr dest) {
  if (compressed_recovery_map == nullptr || dest == nullptr) {
    return false;
    return BAD_VALUE;
  }

  // TBD
  return true;
  return NO_ERROR;
}

bool RecoveryMap::encodeRecoveryMap(j_r_uncompressed_ptr uncompressed_recovery_map,
                                    j_r_compressed_ptr dest) {
status_t RecoveryMap::encodeRecoveryMap(jr_uncompressed_ptr uncompressed_recovery_map,
                                        jr_compressed_ptr dest) {
  if (uncompressed_recovery_map == nullptr || dest == nullptr) {
    return false;
    return BAD_VALUE;
  }

  // TBD
  return true;
  return NO_ERROR;
}

bool RecoveryMap::generateRecoveryMap(j_r_uncompressed_ptr uncompressed_yuv_420_image,
                                      j_r_uncompressed_ptr uncompressed_p010_image,
                                      j_r_uncompressed_ptr dest) {
status_t RecoveryMap::generateRecoveryMap(jr_uncompressed_ptr uncompressed_yuv_420_image,
                                          jr_uncompressed_ptr uncompressed_p010_image,
                                          jr_uncompressed_ptr dest) {
  if (uncompressed_yuv_420_image == nullptr
   || uncompressed_p010_image == nullptr
   || dest == nullptr) {
    return false;
    return BAD_VALUE;
  }

  // TBD
  return true;
  return NO_ERROR;
}

bool RecoveryMap::applyRecoveryMap(j_r_uncompressed_ptr uncompressed_yuv_420_image,
                                   j_r_uncompressed_ptr uncompressed_recovery_map,
                                   j_r_uncompressed_ptr dest) {
status_t RecoveryMap::applyRecoveryMap(jr_uncompressed_ptr uncompressed_yuv_420_image,
                                       jr_uncompressed_ptr uncompressed_recovery_map,
                                       jr_uncompressed_ptr dest) {
  if (uncompressed_yuv_420_image == nullptr
   || uncompressed_recovery_map == nullptr
   || dest == nullptr) {
    return false;
    return BAD_VALUE;
  }

  // TBD
  return true;
  return NO_ERROR;
}

j_r_compressed_ptr RecoveryMap::extractRecoveryMap(void* compressed_jpeg_r_image) {
  if (compressed_jpeg_r_image == nullptr) {
    return nullptr;
status_t RecoveryMap::extractRecoveryMap(void* compressed_jpegr_image, jr_compressed_ptr dest) {
  if (compressed_jpegr_image == nullptr || dest == nullptr) {
    return BAD_VALUE;
  }

  // TBD
  return nullptr;
  return NO_ERROR;
}

void* RecoveryMap::appendRecoveryMap(void* compressed_jpeg_image,
                                     j_r_compressed_ptr compressed_recovery_map) {
  if (compressed_jpeg_image == nullptr || compressed_recovery_map == nullptr) {
    return nullptr;
status_t RecoveryMap::appendRecoveryMap(void* compressed_jpeg_image,
                                     jr_compressed_ptr compressed_recovery_map,
                                     void* dest) {
  if (compressed_jpeg_image == nullptr
   || compressed_recovery_map == nullptr
   || dest == nullptr) {
    return BAD_VALUE;
  }

  // TBD
  return nullptr;
  return NO_ERROR;
}

} // namespace android::recoverymap