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

Commit 596a7564 authored by Dichen Zhang's avatar Dichen Zhang
Browse files

Minor changes

Changed data input/output types (add compressed/uncompressed struct).
Fixed typos in some places (jpeg_g to jpeg_r).

Bug: b/252835416
Change-Id: Ibc9d4c24108417a528052bda64c718e365421e28
parent 85b37566
Loading
Loading
Loading
Loading
+59 −20
Original line number Diff line number Diff line
@@ -16,61 +16,100 @@

namespace android::recoverymap {

/*
 * Holds information for uncompressed image or recovery map.
 */
struct jpeg_r_uncompressed_struct {
    // Pointer to the data location.
    void* data;
    // Width of the recovery map or image in pixels.
    int width;
    // Height of the recovery map or image in pixels.
    int height;
};

/*
 * Holds information for compressed image or recovery map.
 */
struct jpeg_r_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;

class RecoveryMap {
public:
    /*
     * This method is called in the decoding pipeline. It will decode the recovery map.
     *
     * input: compressed recovery map
     * output: uncompressed recovery map
     * @param compressed_recovery_map compressed recovery map
     * @param dest decoded recover map
     * @return true if decoding succeeds
     */
    void* decodeRecoveryMap(void* compressed_recovery_map);
    bool decodeRecoveryMap(j_r_compressed_ptr compressed_recovery_map,
                           j_r_uncompressed_ptr dest);

    /*
     * This method is called in the encoding pipeline. It will encode the recovery map.
     *
     * input: uncompressed recovery map
     * output: compressed recovery map
     * @param uncompressed_recovery_map uncompressed recovery map
     * @param dest encoded recover map
     * @return true if encoding succeeds
     */
    void* encodeRecoveryMap(void* uncompressed_recovery_map);
    bool encodeRecoveryMap(j_r_uncompressed_ptr uncompressed_recovery_map,
                           j_r_compressed_ptr dest);

    /*
     * This method is called in the encoding pipeline. It will take the uncompressed 8-bit and
     * 10-bit yuv images as input, and calculate the uncompressed recovery map.
     *
     * input: uncompressed yuv_420 image, uncompressed p010 image
     * output: uncompressed recovery map
     * @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
     */
    void* generateRecoveryMap(void* uncompressed_yuv_420_image, void* uncompressed_p010_image);
    bool generateRecoveryMap(j_r_uncompressed_ptr uncompressed_yuv_420_image,
                             j_r_uncompressed_ptr uncompressed_p010_image,
                             j_r_uncompressed_ptr dest);

    /*
     * This method is called in the decoding pipeline. It will take the uncompressed (decoded)
     * 8-bit yuv image and the uncompressed (decoded) recovery map as input, and calculate the
     * 10-bit recovered image (in p010 color format).
     *
     * input: uncompressed yuv_420 image, uncompressed recovery map
     * output: uncompress p010 image
     * @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
     */
    void* applyRecoveryMap(void* uncompressed_yuv_420_image, void* uncompressed_recovery_map);
    bool applyRecoveryMap(j_r_uncompressed_ptr uncompressed_yuv_420_image,
                          j_r_uncompressed_ptr uncompressed_recovery_map,
                          j_r_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.
     *
     * input: compressed JPEG-G image (8-bit JPEG + compressed recovery map)
     * output: compressed recovery map
     * @param compressed_jpeg_r_image compressed JPEG_R image
     * @return compressed recovery map
     */
    void* extractRecoveryMap(void* compressed_jpeg_g_image);
    j_r_compressed_ptr extractRecoveryMap(void* compressed_jpeg_r_image);

    /*
     * This method is called in the encoding pipeline. It will take the standard 8-bit JPEG image
     * and the compressed recovery map as input, and update the XMP metadata with the end of JPEG
     * marker, and append the compressed gian map after the JPEG.
     *
     * input: compressed 8-bit JPEG image (standard JPEG), compressed recovery map
     * output: compressed JPEG-G image (8-bit JPEG + compressed recovery map)
     * @param compressed_jpeg_image compressed 8-bit JPEG image
     * @param compress_recovery_map compressed recover map
     * @return compressed JPEG_R image
     */
    void* appendRecoveryMap(void* compressed_jpeg_image, void* compressed_recovery_map);
    void* appendRecoveryMap(void* compressed_jpeg_image,
                            j_r_compressed_ptr compressed_recovery_map);
};

} // namespace android::recoverymap
+30 −21
Original line number Diff line number Diff line
@@ -18,46 +18,54 @@

namespace android::recoverymap {

void* RecoveryMap::decodeRecoveryMap(void* compressed_recovery_map) {
  if (compressed_recovery_map == nullptr) {
    return nullptr;
bool RecoveryMap::decodeRecoveryMap(j_r_compressed_ptr compressed_recovery_map,
                                    j_r_uncompressed_ptr dest) {
  if (compressed_recovery_map == nullptr || dest == nullptr) {
    return false;
  }

  // TBD
  return nullptr;
  return true;
}

void* RecoveryMap::encodeRecoveryMap(void* uncompressed_recovery_map) {
  if (uncompressed_recovery_map == nullptr) {
    return nullptr;
bool RecoveryMap::encodeRecoveryMap(j_r_uncompressed_ptr uncompressed_recovery_map,
                                    j_r_compressed_ptr dest) {
  if (uncompressed_recovery_map == nullptr || dest == nullptr) {
    return false;
  }

  // TBD
  return nullptr;
  return true;
}

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

  // TBD
  return nullptr;
  return true;
}

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

  // TBD
  return nullptr;
  return true;
}

void* RecoveryMap::extractRecoveryMap(void* compressed_jpeg_g_image) {
  if (compressed_jpeg_g_image == nullptr) {
j_r_compressed_ptr RecoveryMap::extractRecoveryMap(void* compressed_jpeg_r_image) {
  if (compressed_jpeg_r_image == nullptr) {
    return nullptr;
  }

@@ -65,7 +73,8 @@ void* RecoveryMap::extractRecoveryMap(void* compressed_jpeg_g_image) {
  return nullptr;
}

void* RecoveryMap::appendRecoveryMap(void* compressed_jpeg_image, void* compressed_recovery_map) {
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;
  }