Add skeleton for sharp downsampling param

This commit is contained in:
robo-mop
2023-10-23 16:02:51 +05:30
parent 625eee2df3
commit 1b3f791723
13 changed files with 38 additions and 9 deletions

View File

@@ -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)

View File

@@ -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);
}

View File

@@ -14,6 +14,7 @@ export interface EncodeOptions {
subsample: number;
chromaDeltaQ: boolean;
sharpness: number;
enableSharpDownsampling: boolean;
tune: AVIFTune;
}

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -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"

View File

@@ -28,4 +28,5 @@ export const defaultOptions: EncodeOptions = {
chromaDeltaQ: false,
sharpness: 0,
tune: AVIFTune.auto,
enableSharpDownsampling: false,
};