Skip to content

Commit

Permalink
Easy editing support
Browse files Browse the repository at this point in the history
crop, resize, mirror, rotate
  • Loading branch information
DichenZhang1 committed Feb 1, 2024
1 parent a5476d4 commit 622aa8f
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 35 deletions.
12 changes: 4 additions & 8 deletions lib/include/ultrahdr/editorhelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,17 @@ typedef enum {
} ultrahdr_mirroring_direction;

status_t crop(jr_uncompressed_ptr const in_img,
int left, int right, int top, int bottom, jr_uncompressed_ptr out_img,
ultrahdr_pixel_format pix_fmt = ultrahdr_pixel_format::ULTRAHDR_PIX_FMT_YUV420);
int left, int right, int top, int bottom, jr_uncompressed_ptr out_img);

status_t mirror(jr_uncompressed_ptr const in_img,
ultrahdr_mirroring_direction mirror_dir,
jr_uncompressed_ptr out_img,
ultrahdr_pixel_format pix_fmt = ultrahdr_pixel_format::ULTRAHDR_PIX_FMT_YUV420);
jr_uncompressed_ptr out_img);

status_t rotate(jr_uncompressed_ptr const in_img, int clockwise_degree,
jr_uncompressed_ptr out_img,
ultrahdr_pixel_format pix_fmt = ultrahdr_pixel_format::ULTRAHDR_PIX_FMT_YUV420);
jr_uncompressed_ptr out_img);

status_t resize(jr_uncompressed_ptr const in_img, int out_width, int out_height,
jr_uncompressed_ptr out_img,
ultrahdr_pixel_format pix_fmt = ultrahdr_pixel_format::ULTRAHDR_PIX_FMT_YUV420);
jr_uncompressed_ptr out_img);

} // namespace ultrahdr

Expand Down
2 changes: 2 additions & 0 deletions lib/include/ultrahdr/jpegr.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ struct jpegr_uncompressed_struct {
ultrahdr_color_gamut colorGamut;

// Values below are optional
// Pixel format.
ultrahdr_pixel_format pixelFormat = ULTRAHDR_PIX_FMT_UNSPECIFIED;
// Pointer to chroma data, if it's NULL, chroma plane is considered to be immediately
// after the luma plane.
void* chroma_data = nullptr;
Expand Down
34 changes: 20 additions & 14 deletions lib/src/editorhelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,21 @@ using namespace std;
namespace ultrahdr {
status_t crop(jr_uncompressed_ptr const in_img,
int left, int right, int top, int bottom,
jr_uncompressed_ptr out_img,
ultrahdr_pixel_format pix_fmt) {
jr_uncompressed_ptr out_img) {
if (in_img == nullptr || in_img->data == nullptr ||
out_img == nullptr || out_img->data == nullptr) {
return ERROR_JPEGR_BAD_PTR;
}
if (left < 0 || right >= in_img->width || top < 0 || bottom >= in_img->height) {
return ERROR_JPEGR_INVALID_CROPPING_PARAMETERS;
}
if (pix_fmt != ULTRAHDR_PIX_FMT_YUV420 && pix_fmt != ULTRAHDR_PIX_FMT_MONOCHROME) {
if (in_img->pixelFormat != ULTRAHDR_PIX_FMT_YUV420 &&
in_img->pixelFormat != ULTRAHDR_PIX_FMT_MONOCHROME) {
return ERROR_JPEGR_UNSUPPORTED_FEATURE;
}

out_img->colorGamut = in_img->colorGamut;
out_img->pixelFormat = in_img->pixelFormat;

int in_luma_stride = in_img->luma_stride != 0 ? in_img->luma_stride : in_img->width;
out_img->width = right - left + 1;
Expand All @@ -54,7 +55,7 @@ status_t crop(jr_uncompressed_ptr const in_img,
memcpy(dest + i * out_img->luma_stride, src + i * in_luma_stride, out_img->width);
}

if (pix_fmt == ULTRAHDR_PIX_FMT_MONOCHROME) {
if (in_img->pixelFormat == ULTRAHDR_PIX_FMT_MONOCHROME) {
return JPEGR_NO_ERROR;
}

Expand All @@ -79,17 +80,18 @@ status_t crop(jr_uncompressed_ptr const in_img,

status_t mirror(jr_uncompressed_ptr const in_img,
ultrahdr_mirroring_direction mirror_dir,
jr_uncompressed_ptr out_img,
ultrahdr_pixel_format pix_fmt) {
jr_uncompressed_ptr out_img) {
if (in_img == nullptr || in_img->data == nullptr ||
out_img == nullptr || out_img->data == nullptr) {
return ERROR_JPEGR_BAD_PTR;
}
if (pix_fmt != ULTRAHDR_PIX_FMT_YUV420 && pix_fmt != ULTRAHDR_PIX_FMT_MONOCHROME) {
if (in_img->pixelFormat != ULTRAHDR_PIX_FMT_YUV420 &&
in_img->pixelFormat != ULTRAHDR_PIX_FMT_MONOCHROME) {
return ERROR_JPEGR_UNSUPPORTED_FEATURE;
}

out_img->colorGamut = in_img->colorGamut;
out_img->pixelFormat = in_img->pixelFormat;

int in_luma_stride = in_img->luma_stride != 0 ? in_img->luma_stride : in_img->width;
out_img->width = in_img->width;
Expand All @@ -113,7 +115,7 @@ status_t mirror(jr_uncompressed_ptr const in_img,
}
}

if (pix_fmt == ULTRAHDR_PIX_FMT_MONOCHROME) {
if (in_img->pixelFormat == ULTRAHDR_PIX_FMT_MONOCHROME) {
return JPEGR_NO_ERROR;
}

Expand Down Expand Up @@ -171,19 +173,21 @@ status_t mirror(jr_uncompressed_ptr const in_img,
}

status_t rotate(jr_uncompressed_ptr const in_img, int clockwise_degree,
jr_uncompressed_ptr out_img, ultrahdr_pixel_format pix_fmt) {
jr_uncompressed_ptr out_img) {
if (in_img == nullptr || in_img->data == nullptr ||
out_img == nullptr || out_img->data == nullptr) {
return ERROR_JPEGR_BAD_PTR;
}
if (clockwise_degree != 90 && clockwise_degree != 180 && clockwise_degree != 270) {
return ERROR_JPEGR_INVALID_CROPPING_PARAMETERS;
}
if (pix_fmt != ULTRAHDR_PIX_FMT_YUV420 && pix_fmt != ULTRAHDR_PIX_FMT_MONOCHROME) {
if (in_img->pixelFormat != ULTRAHDR_PIX_FMT_YUV420 &&
in_img->pixelFormat != ULTRAHDR_PIX_FMT_MONOCHROME) {
return ERROR_JPEGR_UNSUPPORTED_FEATURE;
}

out_img->colorGamut = in_img->colorGamut;
out_img->pixelFormat = in_img->pixelFormat;

int in_luma_stride = in_img->luma_stride != 0 ? in_img->luma_stride : in_img->width;
if (clockwise_degree == 90) {
Expand Down Expand Up @@ -221,7 +225,7 @@ status_t rotate(jr_uncompressed_ptr const in_img, int clockwise_degree,
}
}

if (pix_fmt == ULTRAHDR_PIX_FMT_MONOCHROME) {
if (in_img->pixelFormat == ULTRAHDR_PIX_FMT_MONOCHROME) {
return JPEGR_NO_ERROR;
}

Expand Down Expand Up @@ -305,16 +309,18 @@ status_t rotate(jr_uncompressed_ptr const in_img, int clockwise_degree,
}

status_t resize(jr_uncompressed_ptr const in_img, int out_width, int out_height,
jr_uncompressed_ptr out_img, ultrahdr_pixel_format pix_fmt) {
jr_uncompressed_ptr out_img) {
if (in_img == nullptr || in_img->data == nullptr ||
out_img == nullptr || out_img->data == nullptr) {
return ERROR_JPEGR_BAD_PTR;
}
if (pix_fmt != ULTRAHDR_PIX_FMT_YUV420 && pix_fmt != ULTRAHDR_PIX_FMT_MONOCHROME) {
if (in_img->pixelFormat != ULTRAHDR_PIX_FMT_YUV420 &&
in_img->pixelFormat != ULTRAHDR_PIX_FMT_MONOCHROME) {
return ERROR_JPEGR_UNSUPPORTED_FEATURE;
}

out_img->colorGamut = in_img->colorGamut;
out_img->pixelFormat = in_img->pixelFormat;

int in_luma_stride = in_img->luma_stride != 0 ? in_img->luma_stride : in_img->width;
out_img->width = out_width;
Expand All @@ -330,7 +336,7 @@ status_t resize(jr_uncompressed_ptr const in_img, int out_width, int out_height,
}
}

if (pix_fmt == ULTRAHDR_PIX_FMT_MONOCHROME) {
if (in_img->pixelFormat == ULTRAHDR_PIX_FMT_MONOCHROME) {
return JPEGR_NO_ERROR;
}

Expand Down
Loading

0 comments on commit 622aa8f

Please sign in to comment.