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

Commit ec097a88 authored by Dichen Zhang's avatar Dichen Zhang Committed by Automerger Merge Worker
Browse files

Merge "ultrahdr: Add argument check for decoder api" into udc-dev am: 0748ac53

parents c0d30a91 0748ac53
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -39,10 +39,12 @@ typedef enum {


// Target output formats for decoder
// Target output formats for decoder
typedef enum {
typedef enum {
  ULTRAHDR_OUTPUT_UNSPECIFIED = -1,
  ULTRAHDR_OUTPUT_SDR,          // SDR in RGBA_8888 color format
  ULTRAHDR_OUTPUT_SDR,          // SDR in RGBA_8888 color format
  ULTRAHDR_OUTPUT_HDR_LINEAR,   // HDR in F16 color format (linear)
  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_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_HDR_HLG,      // HDR in RGBA_1010102 color format (HLG transfer function)
  ULTRAHDR_OUTPUT_MAX = ULTRAHDR_OUTPUT_HDR_HLG,
} ultrahdr_output_format;
} ultrahdr_output_format;


/*
/*
+24 −2
Original line number Original line Diff line number Diff line
@@ -476,11 +476,33 @@ status_t JpegR::decodeJPEGR(jr_compressed_ptr compressed_jpegr_image,
                            ultrahdr_output_format output_format,
                            ultrahdr_output_format output_format,
                            jr_uncompressed_ptr gain_map,
                            jr_uncompressed_ptr gain_map,
                            ultrahdr_metadata_ptr metadata) {
                            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;
    return ERROR_JPEGR_INVALID_NULL_PTR;
  }
  }


  if (max_display_boost < 1.0f) {
  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;
    return ERROR_JPEGR_INVALID_INPUT_TYPE;
  }
  }


+39 −0
Original line number Original line Diff line number Diff line
@@ -769,6 +769,45 @@ TEST_F(JpegRTest, encodeAPI4ForInvalidArgs) {
  free(jpegR.data);
  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) {
TEST_F(JpegRTest, writeXmpThenRead) {
  ultrahdr_metadata_struct metadata_expected;
  ultrahdr_metadata_struct metadata_expected;
  metadata_expected.version = "1.0";
  metadata_expected.version = "1.0";