#!/bin/bash

# Encode each .yuv file in the specified input directory to VP8 format,
# and compute the PSNR.

# Input Parameters:
#  $1=Input directory

tempyuvfile=$(mktemp ./tempXXXXX.yuv)

if [ ! -d encoded_clips ]; then
  mkdir encoded_clips
  mkdir encoded_clips/h264
  mkdir encoded_clips/vp8
fi

if [ ! -d logs ]; then
  mkdir logs
  mkdir logs/h264
  mkdir logs/vp8
fi

if [ ! -d stats ]; then
  mkdir stats
  mkdir stats/h264
  mkdir stats/vp8
fi

for filename in $1/*.yuv
do
  echo "Processing ${filename}"

  # filename format: <path>/<clip_name>_<width>_<height>_<frame_rate>.yuv
  pathless=$(basename ${filename})
  clip_stem=${pathless%.*}
  part=($(echo $clip_stem | tr "_" "\n"))
  width=${part[1]}
  height=${part[2]}
  frame_rate=${part[3]}

  # Reset previous run data
  rm -f ./stats/vp8/${clip_stem}.txt

  # Data-rate range depends on input format
  if [ ${width} -gt 640 ]; then
    rate_start=800
    rate_end=1500
    rate_step=100
  else
    rate_start=100
    rate_end=800
    rate_step=100
  fi

  for (( rate=rate_start; rate<=rate_end; rate+=rate_step ))
  do
    echo "Encoding for $rate"
    # Encode video into the following file:
    #  ./<clip_name>_<width>_<height>_<frame_rate>_<rate>kbps.yuv
    # Data-rate & PSNR will be output to the file "opsnr.stt"
    ./bin/vpxenc --lag-in-frames=0 --target-bitrate=${rate} --kf-min-dist=3000 \
      --kf-max-dist=3000 --cpu-used=0 --fps=${frame_rate}/1 --static-thresh=0 \
      --token-parts=1 --drop-frame=0 --end-usage=cbr --min-q=2 --max-q=56 \
      --undershoot-pct=100 --overshoot-pct=15 --buf-sz=1000 \
      --buf-initial-sz=800 --buf-optimal-sz=1000 --max-intra-rate=1200 \
      --resize-allowed=0 --drop-frame=0 --passes=1 --good --noise-sensitivity=0 \
      -w ${width} -h ${height} ${filename} --codec=vp8 \
      -o ./encoded_clips/vp8/${clip_stem}_${rate}kbps.webm \
      &>./logs/vp8/${clip_stem}_${rate}kbps.txt

    # Decode the clip to a temporary file in order to compute PSNR and extract
    # bitrate.
    rm -f $tempyuvfile
    encoded_rate=( `bin/ffmpeg -i ./encoded_clips/vp8/${clip_stem}_${rate}kbps.webm \
      $tempyuvfile 2>&1 | awk '/bitrate:/ { print $6 }'` )
    if expr $encoded_rate + 0 > /dev/null; then

      # Compute the global PSNR.
      psnr=$(./bin/psnr ${filename} $tempyuvfile ${width} ${height} 9999)

      # Rename the file to reflect the encoded datarate.
      if [ $rate -ne $encoded_rate ]; then
        mv -f ./encoded_clips/vp8/${clip_stem}_${rate}kbps.webm \
          ./encoded_clips/vp8/${clip_stem}_${encoded_rate}_kbps.webm
      fi
      echo "${encoded_rate} ${psnr}" >> ./stats/vp8/${clip_stem}.txt
    else
      echo "Non-numeric bitrate $encoded_rate"
      exit 1
    fi

    rm -f $tempyuvfile
  done

  rm -f opsnr.stt
done

