mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-18 03:29:17 +00:00
Add skeleton for sharp downsampling param
This commit is contained in:
@@ -26,10 +26,13 @@ ENVIRONMENT = worker
|
||||
|
||||
HELPER_MAKEFLAGS := -f helper.Makefile
|
||||
|
||||
.PHONY: all clean
|
||||
.PHONY: buildsharp all clean
|
||||
|
||||
all: $(OUT_ENC_JS) $(OUT_DEC_JS) $(OUT_ENC_MT_JS) $(OUT_NODE_ENC_JS) $(OUT_NODE_ENC_MT_JS) $(OUT_NODE_DEC_JS)
|
||||
|
||||
buildsharp:
|
||||
echo "*** Stuff here"
|
||||
|
||||
$(OUT_NODE_ENC_JS) $(OUT_NODE_ENC_MT_JS): ENVIRONMENT=node
|
||||
$(OUT_NODE_ENC_JS) $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
|
||||
$(MAKE) \
|
||||
@@ -42,7 +45,7 @@ $(OUT_NODE_ENC_JS) $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(L
|
||||
-DCONFIG_AV1_HIGHBITDEPTH=0 \
|
||||
" \
|
||||
ENVIRONMENT=$(ENVIRONMENT) \
|
||||
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0"
|
||||
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0 -DAVIF_LOCAL_LIBSHARPYUV=ON"
|
||||
|
||||
$(OUT_ENC_MT_JS) $(OUT_NODE_ENC_MT_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
|
||||
$(MAKE) \
|
||||
@@ -54,7 +57,7 @@ $(OUT_ENC_MT_JS) $(OUT_NODE_ENC_MT_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.t
|
||||
-DCONFIG_AV1_HIGHBITDEPTH=0 \
|
||||
" \
|
||||
ENVIRONMENT=$(ENVIRONMENT) \
|
||||
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0" \
|
||||
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0 -DAVIF_LOCAL_LIBSHARPYUV=ON" \
|
||||
OUT_FLAGS="-pthread"
|
||||
|
||||
$(OUT_NODE_DEC_JS): ENVIRONMENT=node
|
||||
@@ -68,7 +71,7 @@ $(OUT_NODE_DEC_JS) $(OUT_DEC_JS): $(OUT_DEC_CPP) $(CODEC_DIR)/CMakeLists.txt $(L
|
||||
-DCONFIG_MULTITHREAD=0 \
|
||||
" \
|
||||
ENVIRONMENT=$(ENVIRONMENT) \
|
||||
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_ENCODE=0"
|
||||
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_ENCODE=0 -DAVIF_LOCAL_LIBSHARPYUV=ON"
|
||||
|
||||
$(CODEC_PACKAGE):
|
||||
mkdir -p $(@D)
|
||||
|
||||
@@ -42,6 +42,8 @@ struct AvifOptions {
|
||||
int tune;
|
||||
// 0-50
|
||||
int denoiseLevel;
|
||||
// toggles AVIF_CHROMA_DOWNSAMPLING_SHARP_YUV
|
||||
bool enableSharpDownsampling;
|
||||
};
|
||||
|
||||
thread_local const val Uint8Array = val::global("Uint8Array");
|
||||
@@ -86,7 +88,14 @@ val encode(std::string buffer, int width, int height, AvifOptions options) {
|
||||
avifRGBImageSetDefaults(&srcRGB, image);
|
||||
srcRGB.pixels = rgba;
|
||||
srcRGB.rowBytes = width * 4;
|
||||
if (options.enableSharpDownsampling) {
|
||||
printf("Enabling AVIF_CHROMA_DOWNSAMPLING_SHARP_YUV\n");
|
||||
srcRGB.chromaDownsampling = AVIF_CHROMA_DOWNSAMPLING_SHARP_YUV;
|
||||
}
|
||||
status = avifImageRGBToYUV(image, &srcRGB);
|
||||
if (status == AVIF_RESULT_NOT_IMPLEMENTED) {
|
||||
printf("libsharpyuv not implemented methinks\n");
|
||||
}
|
||||
RETURN_NULL_IF_NOT_EQUALS(status, AVIF_RESULT_OK);
|
||||
|
||||
avifEncoder* encoder = avifEncoderCreate();
|
||||
@@ -152,7 +161,8 @@ EMSCRIPTEN_BINDINGS(my_module) {
|
||||
.field("sharpness", &AvifOptions::sharpness)
|
||||
.field("tune", &AvifOptions::tune)
|
||||
.field("denoiseLevel", &AvifOptions::denoiseLevel)
|
||||
.field("subsample", &AvifOptions::subsample);
|
||||
.field("subsample", &AvifOptions::subsample)
|
||||
.field("enableSharpDownsampling", &AvifOptions::enableSharpDownsampling);
|
||||
|
||||
function("encode", &encode);
|
||||
}
|
||||
|
||||
1
codecs/avif/enc/avif_enc.d.ts
vendored
1
codecs/avif/enc/avif_enc.d.ts
vendored
@@ -14,6 +14,7 @@ export interface EncodeOptions {
|
||||
subsample: number;
|
||||
chromaDeltaQ: boolean;
|
||||
sharpness: number;
|
||||
enableSharpDownsampling: boolean;
|
||||
tune: AVIFTune;
|
||||
}
|
||||
|
||||
|
||||
2
codecs/avif/enc/avif_enc.js
generated
2
codecs/avif/enc/avif_enc.js
generated
File diff suppressed because one or more lines are too long
Binary file not shown.
2
codecs/avif/enc/avif_enc_mt.js
generated
2
codecs/avif/enc/avif_enc_mt.js
generated
File diff suppressed because one or more lines are too long
Binary file not shown.
2
codecs/avif/enc/avif_node_enc.js
generated
2
codecs/avif/enc/avif_node_enc.js
generated
File diff suppressed because one or more lines are too long
Binary file not shown.
2
codecs/avif/enc/avif_node_enc_mt.js
generated
2
codecs/avif/enc/avif_node_enc_mt.js
generated
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -38,6 +38,7 @@ interface State {
|
||||
denoiseLevel: number;
|
||||
aqMode: number;
|
||||
tune: AVIFTune;
|
||||
enableSharpDownsampling: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -86,6 +87,7 @@ export class Options extends Component<Props, State> {
|
||||
sharpness: options.sharpness,
|
||||
denoiseLevel: options.denoiseLevel,
|
||||
tune: options.tune,
|
||||
enableSharpDownsampling: options.enableSharpDownsampling,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -137,6 +139,7 @@ export class Options extends Component<Props, State> {
|
||||
sharpness: optionState.sharpness,
|
||||
denoiseLevel: optionState.denoiseLevel,
|
||||
tune: optionState.tune,
|
||||
enableSharpDownsampling: optionState.enableSharpDownsampling,
|
||||
};
|
||||
|
||||
// Updating options, so we don't recalculate in getDerivedStateFromProps.
|
||||
@@ -170,6 +173,7 @@ export class Options extends Component<Props, State> {
|
||||
sharpness,
|
||||
denoiseLevel,
|
||||
tune,
|
||||
enableSharpDownsampling,
|
||||
}: State,
|
||||
) {
|
||||
return (
|
||||
@@ -261,6 +265,16 @@ export class Options extends Component<Props, State> {
|
||||
Sharpness:
|
||||
</Range>
|
||||
</div>
|
||||
<label class={style.optionToggle}>
|
||||
Enable Sharp YUV Downsampling
|
||||
<Checkbox
|
||||
checked={enableSharpDownsampling}
|
||||
onChange={this._inputChange(
|
||||
'enableSharpDownsampling',
|
||||
'boolean',
|
||||
)}
|
||||
/>
|
||||
</label>
|
||||
<div class={style.optionOneCell}>
|
||||
<Range
|
||||
min="0"
|
||||
|
||||
@@ -28,4 +28,5 @@ export const defaultOptions: EncodeOptions = {
|
||||
chromaDeltaQ: false,
|
||||
sharpness: 0,
|
||||
tune: AVIFTune.auto,
|
||||
enableSharpDownsampling: false,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user