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

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

Merge "Minor changes"

parents cc881584 596a7564
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;
  }