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
|
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)
|
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_NODE_ENC_MT_JS): ENVIRONMENT=node
|
||||||
$(OUT_NODE_ENC_JS) $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
|
$(OUT_NODE_ENC_JS) $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
|
||||||
$(MAKE) \
|
$(MAKE) \
|
||||||
@@ -42,7 +45,7 @@ $(OUT_NODE_ENC_JS) $(OUT_ENC_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(L
|
|||||||
-DCONFIG_AV1_HIGHBITDEPTH=0 \
|
-DCONFIG_AV1_HIGHBITDEPTH=0 \
|
||||||
" \
|
" \
|
||||||
ENVIRONMENT=$(ENVIRONMENT) \
|
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
|
$(OUT_ENC_MT_JS) $(OUT_NODE_ENC_MT_JS): $(OUT_ENC_CPP) $(CODEC_DIR)/CMakeLists.txt $(LIBAOM_DIR)/CMakeLists.txt
|
||||||
$(MAKE) \
|
$(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 \
|
-DCONFIG_AV1_HIGHBITDEPTH=0 \
|
||||||
" \
|
" \
|
||||||
ENVIRONMENT=$(ENVIRONMENT) \
|
ENVIRONMENT=$(ENVIRONMENT) \
|
||||||
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0" \
|
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_DECODE=0 -DAVIF_LOCAL_LIBSHARPYUV=ON" \
|
||||||
OUT_FLAGS="-pthread"
|
OUT_FLAGS="-pthread"
|
||||||
|
|
||||||
$(OUT_NODE_DEC_JS): ENVIRONMENT=node
|
$(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 \
|
-DCONFIG_MULTITHREAD=0 \
|
||||||
" \
|
" \
|
||||||
ENVIRONMENT=$(ENVIRONMENT) \
|
ENVIRONMENT=$(ENVIRONMENT) \
|
||||||
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_ENCODE=0"
|
LIBAVIF_FLAGS="-DAVIF_CODEC_AOM_ENCODE=0 -DAVIF_LOCAL_LIBSHARPYUV=ON"
|
||||||
|
|
||||||
$(CODEC_PACKAGE):
|
$(CODEC_PACKAGE):
|
||||||
mkdir -p $(@D)
|
mkdir -p $(@D)
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ struct AvifOptions {
|
|||||||
int tune;
|
int tune;
|
||||||
// 0-50
|
// 0-50
|
||||||
int denoiseLevel;
|
int denoiseLevel;
|
||||||
|
// toggles AVIF_CHROMA_DOWNSAMPLING_SHARP_YUV
|
||||||
|
bool enableSharpDownsampling;
|
||||||
};
|
};
|
||||||
|
|
||||||
thread_local const val Uint8Array = val::global("Uint8Array");
|
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);
|
avifRGBImageSetDefaults(&srcRGB, image);
|
||||||
srcRGB.pixels = rgba;
|
srcRGB.pixels = rgba;
|
||||||
srcRGB.rowBytes = width * 4;
|
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);
|
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);
|
RETURN_NULL_IF_NOT_EQUALS(status, AVIF_RESULT_OK);
|
||||||
|
|
||||||
avifEncoder* encoder = avifEncoderCreate();
|
avifEncoder* encoder = avifEncoderCreate();
|
||||||
@@ -152,7 +161,8 @@ EMSCRIPTEN_BINDINGS(my_module) {
|
|||||||
.field("sharpness", &AvifOptions::sharpness)
|
.field("sharpness", &AvifOptions::sharpness)
|
||||||
.field("tune", &AvifOptions::tune)
|
.field("tune", &AvifOptions::tune)
|
||||||
.field("denoiseLevel", &AvifOptions::denoiseLevel)
|
.field("denoiseLevel", &AvifOptions::denoiseLevel)
|
||||||
.field("subsample", &AvifOptions::subsample);
|
.field("subsample", &AvifOptions::subsample)
|
||||||
|
.field("enableSharpDownsampling", &AvifOptions::enableSharpDownsampling);
|
||||||
|
|
||||||
function("encode", &encode);
|
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;
|
subsample: number;
|
||||||
chromaDeltaQ: boolean;
|
chromaDeltaQ: boolean;
|
||||||
sharpness: number;
|
sharpness: number;
|
||||||
|
enableSharpDownsampling: boolean;
|
||||||
tune: AVIFTune;
|
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;
|
denoiseLevel: number;
|
||||||
aqMode: number;
|
aqMode: number;
|
||||||
tune: AVIFTune;
|
tune: AVIFTune;
|
||||||
|
enableSharpDownsampling: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -86,6 +87,7 @@ export class Options extends Component<Props, State> {
|
|||||||
sharpness: options.sharpness,
|
sharpness: options.sharpness,
|
||||||
denoiseLevel: options.denoiseLevel,
|
denoiseLevel: options.denoiseLevel,
|
||||||
tune: options.tune,
|
tune: options.tune,
|
||||||
|
enableSharpDownsampling: options.enableSharpDownsampling,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,6 +139,7 @@ export class Options extends Component<Props, State> {
|
|||||||
sharpness: optionState.sharpness,
|
sharpness: optionState.sharpness,
|
||||||
denoiseLevel: optionState.denoiseLevel,
|
denoiseLevel: optionState.denoiseLevel,
|
||||||
tune: optionState.tune,
|
tune: optionState.tune,
|
||||||
|
enableSharpDownsampling: optionState.enableSharpDownsampling,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Updating options, so we don't recalculate in getDerivedStateFromProps.
|
// Updating options, so we don't recalculate in getDerivedStateFromProps.
|
||||||
@@ -170,6 +173,7 @@ export class Options extends Component<Props, State> {
|
|||||||
sharpness,
|
sharpness,
|
||||||
denoiseLevel,
|
denoiseLevel,
|
||||||
tune,
|
tune,
|
||||||
|
enableSharpDownsampling,
|
||||||
}: State,
|
}: State,
|
||||||
) {
|
) {
|
||||||
return (
|
return (
|
||||||
@@ -261,6 +265,16 @@ export class Options extends Component<Props, State> {
|
|||||||
Sharpness:
|
Sharpness:
|
||||||
</Range>
|
</Range>
|
||||||
</div>
|
</div>
|
||||||
|
<label class={style.optionToggle}>
|
||||||
|
Enable Sharp YUV Downsampling
|
||||||
|
<Checkbox
|
||||||
|
checked={enableSharpDownsampling}
|
||||||
|
onChange={this._inputChange(
|
||||||
|
'enableSharpDownsampling',
|
||||||
|
'boolean',
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
<div class={style.optionOneCell}>
|
<div class={style.optionOneCell}>
|
||||||
<Range
|
<Range
|
||||||
min="0"
|
min="0"
|
||||||
|
|||||||
@@ -28,4 +28,5 @@ export const defaultOptions: EncodeOptions = {
|
|||||||
chromaDeltaQ: false,
|
chromaDeltaQ: false,
|
||||||
sharpness: 0,
|
sharpness: 0,
|
||||||
tune: AVIFTune.auto,
|
tune: AVIFTune.auto,
|
||||||
|
enableSharpDownsampling: false,
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user