Loading libs/ultrahdr/include/ultrahdr/ultrahdr.h +2 −0 Original line number Diff line number Diff line Loading @@ -39,10 +39,12 @@ typedef enum { // Target output formats for decoder typedef enum { ULTRAHDR_OUTPUT_UNSPECIFIED = -1, ULTRAHDR_OUTPUT_SDR, // SDR in RGBA_8888 color format ULTRAHDR_OUTPUT_HDR_LINEAR, // HDR in F16 color format (linear) ULTRAHDR_OUTPUT_HDR_PQ, // HDR in RGBA_1010102 color format (PQ transfer function) ULTRAHDR_OUTPUT_HDR_HLG, // HDR in RGBA_1010102 color format (HLG transfer function) ULTRAHDR_OUTPUT_MAX = ULTRAHDR_OUTPUT_HDR_HLG, } ultrahdr_output_format; /* Loading libs/ultrahdr/jpegr.cpp +24 −2 Original line number Diff line number Diff line Loading @@ -476,11 +476,33 @@ status_t JpegR::decodeJPEGR(jr_compressed_ptr compressed_jpegr_image, ultrahdr_output_format output_format, jr_uncompressed_ptr gain_map, ultrahdr_metadata_ptr metadata) { if (compressed_jpegr_image == nullptr || dest == nullptr) { if (compressed_jpegr_image == nullptr || compressed_jpegr_image->data == nullptr) { ALOGE("received nullptr for compressed jpegr image"); return ERROR_JPEGR_INVALID_NULL_PTR; } if (dest == nullptr || dest->data == nullptr) { ALOGE("received nullptr for dest image"); return ERROR_JPEGR_INVALID_NULL_PTR; } if (max_display_boost < 1.0f) { ALOGE("received bad value for max_display_boost %f", max_display_boost); return ERROR_JPEGR_INVALID_INPUT_TYPE; } if (exif != nullptr && exif->data == nullptr) { ALOGE("received nullptr address for exif data"); return ERROR_JPEGR_INVALID_INPUT_TYPE; } if (output_format <= ULTRAHDR_OUTPUT_UNSPECIFIED || output_format > ULTRAHDR_OUTPUT_MAX) { ALOGE("received bad value for output format %d", output_format); return ERROR_JPEGR_INVALID_INPUT_TYPE; } if (gain_map != nullptr && gain_map->data == nullptr) { ALOGE("received nullptr address for gain map data"); return ERROR_JPEGR_INVALID_INPUT_TYPE; } Loading libs/ultrahdr/tests/jpegr_test.cpp +39 −0 Original line number Diff line number Diff line Loading @@ -769,6 +769,45 @@ TEST_F(JpegRTest, encodeAPI4ForInvalidArgs) { free(jpegR.data); } /* Test Decode API invalid arguments */ TEST_F(JpegRTest, decodeAPIForInvalidArgs) { int ret; // we are not really compressing anything so lets keep allocs to a minimum jpegr_compressed_struct jpegR; jpegR.maxLength = 16 * sizeof(uint8_t); jpegR.data = malloc(jpegR.maxLength); // we are not really decoding anything so lets keep allocs to a minimum mRawP010Image.data = malloc(16); JpegR jpegRCodec; // test jpegr image EXPECT_NE(OK, jpegRCodec.decodeJPEGR( nullptr, &mRawP010Image)) << "fail, API allows nullptr for jpegr img"; // test dest image EXPECT_NE(OK, jpegRCodec.decodeJPEGR( &jpegR, nullptr)) << "fail, API allows nullptr for dest"; // test max display boost EXPECT_NE(OK, jpegRCodec.decodeJPEGR( &jpegR, &mRawP010Image, 0.5)) << "fail, API allows invalid max display boost"; // test output format EXPECT_NE(OK, jpegRCodec.decodeJPEGR( &jpegR, &mRawP010Image, 0.5, nullptr, static_cast<ultrahdr_output_format>(-1))) << "fail, API allows invalid output format"; EXPECT_NE(OK, jpegRCodec.decodeJPEGR( &jpegR, &mRawP010Image, 0.5, nullptr, static_cast<ultrahdr_output_format>(ULTRAHDR_OUTPUT_MAX + 1))) << "fail, API allows invalid output format"; free(jpegR.data); } TEST_F(JpegRTest, writeXmpThenRead) { ultrahdr_metadata_struct metadata_expected; metadata_expected.version = "1.0"; Loading Loading
libs/ultrahdr/include/ultrahdr/ultrahdr.h +2 −0 Original line number Diff line number Diff line Loading @@ -39,10 +39,12 @@ typedef enum { // Target output formats for decoder typedef enum { ULTRAHDR_OUTPUT_UNSPECIFIED = -1, ULTRAHDR_OUTPUT_SDR, // SDR in RGBA_8888 color format ULTRAHDR_OUTPUT_HDR_LINEAR, // HDR in F16 color format (linear) ULTRAHDR_OUTPUT_HDR_PQ, // HDR in RGBA_1010102 color format (PQ transfer function) ULTRAHDR_OUTPUT_HDR_HLG, // HDR in RGBA_1010102 color format (HLG transfer function) ULTRAHDR_OUTPUT_MAX = ULTRAHDR_OUTPUT_HDR_HLG, } ultrahdr_output_format; /* Loading
libs/ultrahdr/jpegr.cpp +24 −2 Original line number Diff line number Diff line Loading @@ -476,11 +476,33 @@ status_t JpegR::decodeJPEGR(jr_compressed_ptr compressed_jpegr_image, ultrahdr_output_format output_format, jr_uncompressed_ptr gain_map, ultrahdr_metadata_ptr metadata) { if (compressed_jpegr_image == nullptr || dest == nullptr) { if (compressed_jpegr_image == nullptr || compressed_jpegr_image->data == nullptr) { ALOGE("received nullptr for compressed jpegr image"); return ERROR_JPEGR_INVALID_NULL_PTR; } if (dest == nullptr || dest->data == nullptr) { ALOGE("received nullptr for dest image"); return ERROR_JPEGR_INVALID_NULL_PTR; } if (max_display_boost < 1.0f) { ALOGE("received bad value for max_display_boost %f", max_display_boost); return ERROR_JPEGR_INVALID_INPUT_TYPE; } if (exif != nullptr && exif->data == nullptr) { ALOGE("received nullptr address for exif data"); return ERROR_JPEGR_INVALID_INPUT_TYPE; } if (output_format <= ULTRAHDR_OUTPUT_UNSPECIFIED || output_format > ULTRAHDR_OUTPUT_MAX) { ALOGE("received bad value for output format %d", output_format); return ERROR_JPEGR_INVALID_INPUT_TYPE; } if (gain_map != nullptr && gain_map->data == nullptr) { ALOGE("received nullptr address for gain map data"); return ERROR_JPEGR_INVALID_INPUT_TYPE; } Loading
libs/ultrahdr/tests/jpegr_test.cpp +39 −0 Original line number Diff line number Diff line Loading @@ -769,6 +769,45 @@ TEST_F(JpegRTest, encodeAPI4ForInvalidArgs) { free(jpegR.data); } /* Test Decode API invalid arguments */ TEST_F(JpegRTest, decodeAPIForInvalidArgs) { int ret; // we are not really compressing anything so lets keep allocs to a minimum jpegr_compressed_struct jpegR; jpegR.maxLength = 16 * sizeof(uint8_t); jpegR.data = malloc(jpegR.maxLength); // we are not really decoding anything so lets keep allocs to a minimum mRawP010Image.data = malloc(16); JpegR jpegRCodec; // test jpegr image EXPECT_NE(OK, jpegRCodec.decodeJPEGR( nullptr, &mRawP010Image)) << "fail, API allows nullptr for jpegr img"; // test dest image EXPECT_NE(OK, jpegRCodec.decodeJPEGR( &jpegR, nullptr)) << "fail, API allows nullptr for dest"; // test max display boost EXPECT_NE(OK, jpegRCodec.decodeJPEGR( &jpegR, &mRawP010Image, 0.5)) << "fail, API allows invalid max display boost"; // test output format EXPECT_NE(OK, jpegRCodec.decodeJPEGR( &jpegR, &mRawP010Image, 0.5, nullptr, static_cast<ultrahdr_output_format>(-1))) << "fail, API allows invalid output format"; EXPECT_NE(OK, jpegRCodec.decodeJPEGR( &jpegR, &mRawP010Image, 0.5, nullptr, static_cast<ultrahdr_output_format>(ULTRAHDR_OUTPUT_MAX + 1))) << "fail, API allows invalid output format"; free(jpegR.data); } TEST_F(JpegRTest, writeXmpThenRead) { ultrahdr_metadata_struct metadata_expected; metadata_expected.version = "1.0"; Loading