#!/bin/sh
#
# Copyright (c) the JPEG XL Project Authors. All rights reserved.
#
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
#
# Bisects JPEG XL encoding quality parameter to reach a given
# target byte-size.
# (To be used directly, or as a template for tailored processing.)
#
# Usage: cjxl_bisect_size {input_filename} {output_filename} {target_size}

#
# We take the `bisector` tool from $PATH, or, if not available,
# try to locate it in the same directory as the current script.
#

self=$(realpath "$0")
mydir=$(dirname "${self}")

input_filename=$1
output_filename=$2
target_size=$3

bisect_tool=$(which bisector)
if [ -z $bisect_tool ] ; then
  bisect_tool="${mydir}/bisector"
fi

# If $CJXL_BIN is set, we use this instead of looking for `cjxl` on $PATH.

cjxl_bin=${CJXL_BIN}
if [-z $cjxl_bin ] ; then
  cjxl_bin="cjxl"
fi

# Allow 0.5% tolerance in size (--rtol=0.005).
exec $bisect_tool --var=BISECT --range=0.01,10.0 --target=$target_size \
  --rtol_val=0.005 \
  --cmd="$cjxl_bin --distance=\$BISECT ${input_filename} ${output_filename}_bisect_\$BISECT.jxl && wc -c ${output_filename}_bisect_\$BISECT.jxl" \
  --final="mv ${output_filename}_bisect_\$BISECT.jxl ${output_filename}; rm -f ${output_filename}_bisect_*.jxl" \
  --verbosity=1
