libjpegrecoverymap: refactor

Add public functions for encode/decode APIs, and make the the rest
functions private.
Rename jpeg_r to jpegr, and j_r to jr

Test: build
Bug: b/252835416
Change-Id: Ia43fa75447ad6aa7154ef2e2207a3d7e8035f412
diff --git a/libs/jpegrecoverymap/Android.bp b/libs/jpegrecoverymap/Android.bp
index 285f8d5..b52c4c7 100644
--- a/libs/jpegrecoverymap/Android.bp
+++ b/libs/jpegrecoverymap/Android.bp
@@ -31,4 +31,8 @@
     srcs: [
         "recoverymap.cpp",
     ],
+
+    shared_libs: [
+        "libutils",
+    ],
 }
\ No newline at end of file
diff --git a/libs/jpegrecoverymap/include/jpegrecoverymap/recoverymap.h b/libs/jpegrecoverymap/include/jpegrecoverymap/recoverymap.h
index 6949f85..15eca1e 100644
--- a/libs/jpegrecoverymap/include/jpegrecoverymap/recoverymap.h
+++ b/libs/jpegrecoverymap/include/jpegrecoverymap/recoverymap.h
@@ -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 @@
 /*
  * 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 @@
      * @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 @@
      * @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 @@
      *
      * @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
diff --git a/libs/jpegrecoverymap/recoverymap.cpp b/libs/jpegrecoverymap/recoverymap.cpp
index bd92652..5d25722 100644
--- a/libs/jpegrecoverymap/recoverymap.cpp
+++ b/libs/jpegrecoverymap/recoverymap.cpp
@@ -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