openh264/test/encoder_binary_comparison/Scripts/run_BitStreamToYUV.sh

124 lines
3.8 KiB
Bash
Executable File

#!/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}