#!/bin/bash
#*******************************************************************************
# Encoder binary comparison test model
#       -- Compared with benchmark version using SHA-1 string
#       -- Test bit stream under folder  openh264/res
#       -- SHA-1 string of benchmark version for  all cases  of all bit streams
#           under folder  openh264/test/encoder_binary_comparion/SHA1Table
#       -- For more detail,please refer to file AboutTest.
#
#brief:
#       -- Transform test bit stream into YUV as  test sequence,
#          1) Called by run_OneBitStream.sh  before testing  all cases
#          2) eg:
#              -- input:    ./run_BitStreamToYUV.sh   TestABC.264
#              -- output:   TestABC.264_382X288.yuv
#       -- Usage:  run_BitStreamToYUV.sh   ${BitStreamFile}
#
#
# date:  10/06/2014 Created
#*******************************************************************************
#usage:  run_ParseDecoderLog   $Decoder_LogFile
#eg:     input:    run_ParseDecoderLog   test.264.log
#        output    1024  720
run_ParseDecoderLog()
{
  if [ ! $# -eq 1 ]
  then
    echo "usage:  run_ParseDecoderLog  \$Decoder_LogFile"
    return 1
  fi
  local LogFile=$1
  local Width=""
  local Height=""
  while read line
  do
    if [[  $line =~  "iWidth"   ]]
    then
      Width=`echo $line | awk 'BEGIN  {FS="[:\n]"} {print $2}'`
    fi
    if [[  $line =~  "height"   ]]
    then
       Height=`echo $line | awk 'BEGIN  {FS="[:\n]"} {print $2}'`
    fi
  done < ${LogFile}
  echo "${Width}  ${Height}"
}
#usage: run_BitStream2YUV  $BitstreamName  $OutputYUVName $LogFile
run_BitStream2YUV()
{
  if [ ! $# -eq 3 ]
  then
    echo "usage: run_BitStream2YUV  \$BitstreamName \$OutputYUVName \$LogFile   "
    return 1
  fi
  local BitStreamName=$1
  local OutputYUVNAMe=$2
  local LogFile=$3

  if [ ! -f ${BitStreamName}  ]
  then
    echo "bit stream file does not exist!"
    echo "detected by run_BitStreamToYUV.sh"
    return 1
  fi
  #decode bitstream
  ./h264dec  ${BitStreamName}  ${OutputYUVNAMe} 2> ${LogFile}

  return 0
}
#usage: run_RegularizeYUVName $BitstreamName $OutputYUVName $LogFile
run_RegularizeYUVName()
{
  if [ ! $# -eq 3 ]
  then
    echo "usage: run_RegularizeYUVName  \$BitstreamName  \$OutputYUVName \$LogFile "
    return 1
  fi
  local BitStreamName=$1
  local OrignName=$2
  local LogFile=$3
  local RegularizedYUVName=""

  declare -a aDecodedYUVInfo

  aDecodedYUVInfo=(`run_ParseDecoderLog  ${LogFile}`)

  BitStreamName=`echo ${BitStreamName} | awk 'BEGIN {FS="/"} {print $NF}'`
  RegularizedYUVName="${BitStreamName}_${aDecodedYUVInfo[0]}x${aDecodedYUVInfo[1]}.yuv"
  mv -f  ${OrignName}   ${RegularizedYUVName}
  echo ""
  echo "file :  ${OrignName}   has been renamed as :${RegularizedYUVName}"
  echo ""

  return 0
}
#usage: runMain  ${BitStreamName}
runMain()
{
  if [ ! $# -eq 1 ]
  then
    echo "usage: runMain  ${BitStreamName} "
    return 1
  fi

  local BitStreameFile=$1
  local BitSteamName=`echo ${BitStreameFile} | awk 'BEGIN {FS="/"} {print $NF}'`
  local DecoderLogFile="${BitSteamName}_h264dec.log"
  local DecodedYUVName="${BitSteamName}_dec.yuv"
  local RegularizedName=""

  #**********************
  #decoded test bit stream
  run_BitStream2YUV  ${BitStreameFile}  ${DecodedYUVName}  ${DecoderLogFile}
  if [  ! $?  -eq 0  ]
  then
      echo "bit stream decoded  failed!"
    return 1
  fi


  #*********************
  #regularized  YUV name
  run_RegularizeYUVName  ${BitStreameFile}  ${DecodedYUVName}  ${DecoderLogFile}

  return 0
}
BitStreamFile=$1
runMain  ${BitStreamFile}



