cvm-rs: allow setting JPEG quality from JS
This commit is contained in:
2
cvm-rs/index.d.ts
vendored
2
cvm-rs/index.d.ts
vendored
@@ -9,6 +9,7 @@ interface JpegInputArgs {
|
|||||||
height: number;
|
height: number;
|
||||||
stride: number; // The width of your input framebuffer OR your image width (if encoding a full image)
|
stride: number; // The width of your input framebuffer OR your image width (if encoding a full image)
|
||||||
buffer: Buffer;
|
buffer: Buffer;
|
||||||
|
quality: number;
|
||||||
|
|
||||||
// TODO: Allow different formats, or export a boxed ffi object which can store a format
|
// TODO: Allow different formats, or export a boxed ffi object which can store a format
|
||||||
// (i.e: new JpegEncoder(FORMAT_xxx)).
|
// (i.e: new JpegEncoder(FORMAT_xxx)).
|
||||||
@@ -20,6 +21,7 @@ interface JpegResizeInputArgs {
|
|||||||
desiredWidth: number; // dest width
|
desiredWidth: number; // dest width
|
||||||
desiredHeight: number; // dest height
|
desiredHeight: number; // dest height
|
||||||
buffer: Buffer; // source raw pixel buffer
|
buffer: Buffer; // source raw pixel buffer
|
||||||
|
quality: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Performs JPEG encoding.
|
/// Performs JPEG encoding.
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ pub struct JpegInputArgs {
|
|||||||
pub height: u32,
|
pub height: u32,
|
||||||
pub stride: u32,
|
pub stride: u32,
|
||||||
pub buffer: napi::JsBuffer,
|
pub buffer: napi::JsBuffer,
|
||||||
|
pub quality: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[napi(js_name = "jpegEncode")]
|
#[napi(js_name = "jpegEncode")]
|
||||||
@@ -69,7 +70,7 @@ pub fn jpeg_encode(env: Env, input: JpegInputArgs) -> napi::Result<napi::JsObjec
|
|||||||
|
|
||||||
let vec = COMPRESSOR.with(|lazy| {
|
let vec = COMPRESSOR.with(|lazy| {
|
||||||
let mut b = lazy.borrow_mut();
|
let mut b = lazy.borrow_mut();
|
||||||
b.set_quality(35);
|
b.set_quality(input.quality);
|
||||||
b.set_subsamp(turbojpeg_sys::TJSAMP_TJSAMP_420);
|
b.set_subsamp(turbojpeg_sys::TJSAMP_TJSAMP_420);
|
||||||
b.compress_buffer(&image)
|
b.compress_buffer(&image)
|
||||||
});
|
});
|
||||||
@@ -94,6 +95,7 @@ pub struct JpegResizeInputArgs {
|
|||||||
pub desired_width: u32,
|
pub desired_width: u32,
|
||||||
pub desired_height: u32,
|
pub desired_height: u32,
|
||||||
pub buffer: napi::JsBuffer,
|
pub buffer: napi::JsBuffer,
|
||||||
|
pub quality: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[napi(js_name = "jpegResizeEncode")]
|
#[napi(js_name = "jpegResizeEncode")]
|
||||||
@@ -136,7 +138,7 @@ pub fn jpeg_resize_and_encode(
|
|||||||
|
|
||||||
let vec = COMPRESSOR.with(|lazy| {
|
let vec = COMPRESSOR.with(|lazy| {
|
||||||
let mut b = lazy.borrow_mut();
|
let mut b = lazy.borrow_mut();
|
||||||
b.set_quality(35);
|
b.set_quality(input.quality);
|
||||||
b.set_subsamp(turbojpeg_sys::TJSAMP_TJSAMP_420);
|
b.set_subsamp(turbojpeg_sys::TJSAMP_TJSAMP_420);
|
||||||
b.compress_buffer(&image)
|
b.compress_buffer(&image)
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ export class JPEGEncoder {
|
|||||||
width: rect.width,
|
width: rect.width,
|
||||||
height: rect.height,
|
height: rect.height,
|
||||||
stride: displaySize.width,
|
stride: displaySize.width,
|
||||||
buffer: canvas.subarray(offset)
|
buffer: canvas.subarray(offset),
|
||||||
|
quality: gJpegQuality
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +31,8 @@ export class JPEGEncoder {
|
|||||||
height: size.height,
|
height: size.height,
|
||||||
desiredWidth: kThumbnailSize.width,
|
desiredWidth: kThumbnailSize.width,
|
||||||
desiredHeight: kThumbnailSize.height,
|
desiredHeight: kThumbnailSize.height,
|
||||||
buffer: buffer
|
buffer: buffer,
|
||||||
|
quality: Math.floor(gJpegQuality / 1.5)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user