check in the code for do codec performance testing on mobile
This commit is contained in:
parent
9ac7cd2816
commit
a555639dd2
138
autotest/performaceTest/android/run_AutoTest_android.sh
Normal file
138
autotest/performaceTest/android/run_AutoTest_android.sh
Normal file
@ -0,0 +1,138 @@
|
||||
#!/bin/bash
|
||||
|
||||
AUTO_TEST_ANDROID_PATH=`pwd`
|
||||
AUTO_TEST_SRC_PATH="../../../"
|
||||
AUTO_TEST_RES_PATH="${AUTO_TEST_ANDROID_PATH}/report"
|
||||
mkdir -p ${AUTO_TEST_RES_PATH}
|
||||
#Prepare android build enviroment
|
||||
echo please set the enviroment variable as:
|
||||
echo export ANDROID_HOME="path of android sdk"
|
||||
echo export ANDROID_NDK_HOME="path of android ndk"
|
||||
ANDROID_SDK_PATH=${ANDROID_HOME}
|
||||
ANDROID_NDK_PATH=${ANDROID_NDK_HOME}
|
||||
ANDROID_MAKE_PARAMS="OS=android NDKROOT=${ANDROID_NDK_PATH} TARGET=android-19"
|
||||
|
||||
if [ "#${ANDROID_SDK_PATH}" = "#" ]
|
||||
then
|
||||
echo Please set ANDROID_HOME with the path of Android SDK
|
||||
exit 1
|
||||
fi
|
||||
if [ "#${ANDROID_NDK_PATH}" = "#" ]
|
||||
then
|
||||
echo Please set ANDROID_NDK_HOME with the path of Android NDK
|
||||
exit 1
|
||||
fi
|
||||
#make build
|
||||
cd ${AUTO_TEST_SRC_PATH}
|
||||
find ./ -name *.o -exec rm -f {} \;
|
||||
find ./ -name *.d -exec rm -f {} \;
|
||||
make $ANDROID_MAKE_PARAMS
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo Build error,check with the trace of make
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ENCDEC=$1
|
||||
#find apk
|
||||
if [ ${ENCDEC} = "enc" ]
|
||||
then
|
||||
echo Start to find enc apk
|
||||
apk_name=`find ./ -name WelsEncTest-debug.apk`
|
||||
if [ "#${apk_name}" = "#" ]
|
||||
then
|
||||
echo Fail to find encoder APK.
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo Start to find dec apk
|
||||
apk_name=`find ./ -name WelsDecTest-debug.apk`
|
||||
if [ "#${apk_name}" = "#" ]
|
||||
then
|
||||
echo Fail to find decoder APK.
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
#prepare devices
|
||||
ADB=${ANDROID_SDK_PATH}/platform-tools/adb
|
||||
|
||||
#get devices
|
||||
devices=`$ADB devices | awk -F" " '/\tdevice/{print $1}'`
|
||||
if [ "#$devices" = "#" ];then
|
||||
echo "Have not any android devices."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#run apk
|
||||
run_apk() {
|
||||
local apk=$1;
|
||||
local rand=` date +%s`
|
||||
|
||||
if [[ "${apk}" =~ "WelsDecTest-debug.apk" ]]
|
||||
then
|
||||
apk_id="com.wels.dec"
|
||||
apk_main="com.wels.dec/.WelsDecTest"
|
||||
test_path="/sdcard/welsdec"
|
||||
log_grep_params="welsdec"
|
||||
test_res=${AUTO_TEST_ANDROID_PATH}/../DecoderPerfTestRes
|
||||
report_file=${AUTO_TEST_RES_PATH}/decPerf_${rand}
|
||||
|
||||
fi
|
||||
if [[ "${apk}" =~ "WelsEncTest-debug.apk" ]]
|
||||
then
|
||||
apk_id="com.wels.enc"
|
||||
apk_main="com.wels.enc/.WelsEncTest"
|
||||
test_path="/sdcard/welsenc"
|
||||
log_grep_params="welsenc"
|
||||
test_res=${AUTO_TEST_ANDROID_PATH}/../EncoderPerfTestRes
|
||||
report_file=${AUTO_TEST_RES_PATH}/encPerf_${rand}
|
||||
fi
|
||||
|
||||
for dev in $devices; do
|
||||
dev_info_file=${AUTO_TEST_RES_PATH}/${dev}.log
|
||||
$ADB -s $dev uninstall ${apk_id}
|
||||
$ADB -s $dev install -r ${apk}
|
||||
#TODO: output more info about android device such as name,cpu,memory,and also power comsumption.
|
||||
echo `$ADB -s $dev shell cat /system/build.prop |grep ro.product.model | awk -F"=" '{print $2}'`>${dev_info_file}
|
||||
#push resources
|
||||
$ADB -s $dev push ${test_res} ${test_path}
|
||||
#before start logcat,kill logcat
|
||||
pid=`$ADB -s $dev shell ps | grep logcat | awk '{print $2;}'`
|
||||
[ "#$pid" != "#" ] && $ADB -s $dev shell kill $pid >/dev/null
|
||||
$ADB -s $dev logcat -c
|
||||
$ADB -s $dev logcat |grep ${log_grep_params} >${report_file}_${dev}.log &
|
||||
$ADB -s $dev shell am start -n ${apk_main}
|
||||
# check whetehr the app is finished every 2 sec
|
||||
for (( ; ; )); do
|
||||
$ADB -s $dev shell ps | grep ${apk_id}
|
||||
if [ $? -ne 0 ]; then
|
||||
sleep 2
|
||||
$ADB -s $dev shell ps | grep ${apk_id}
|
||||
[ $? -ne 0 ] && break
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# kill logcat
|
||||
pid=`$ADB -s $dev shell ps | grep logcat | awk '{print $2;}'`
|
||||
[ "#$pid" != "#" ] && $ADB -s $dev shell kill $pid >/dev/null
|
||||
|
||||
#delete the res
|
||||
$ADB -s $dev shell rm -rf ${test_path}
|
||||
done
|
||||
}
|
||||
for apk in ${apk_name};do
|
||||
run_apk $apk;
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo There is something wrong happened when run ${apk_name}
|
||||
exit 1
|
||||
else
|
||||
echo Finished $ENCDEC performance test on android
|
||||
echo The test result is at ./android/report/xxx.log
|
||||
echo xxxxxxxxxxxxxxxAndroid $ENCDEC Endxxxxxxxxxxxxxxxx
|
||||
fi
|
||||
done
|
||||
|
BIN
autotest/performaceTest/ios/fruitstrap
Executable file
BIN
autotest/performaceTest/ios/fruitstrap
Executable file
Binary file not shown.
BIN
autotest/performaceTest/ios/iFileTransfer
Executable file
BIN
autotest/performaceTest/ios/iFileTransfer
Executable file
Binary file not shown.
147
autotest/performaceTest/ios/run_AutoTest_ios.sh
Normal file
147
autotest/performaceTest/ios/run_AutoTest_ios.sh
Normal file
@ -0,0 +1,147 @@
|
||||
#!/bin/bash
|
||||
|
||||
##############################################################
|
||||
#Build ios test ref app
|
||||
|
||||
#set the default configuration
|
||||
CODEC_TEST_IOS_ARCH="armv7 armv7s arm64"
|
||||
CODEC_TEST_IOS_PLATFORM="iphoneos"
|
||||
CODEC_TEST_IOS_DEBUG_RELEASE="Release"
|
||||
CODEC_TEST_IOS_REPORT_SUBFOLDER="release"
|
||||
|
||||
|
||||
buildXcodeProject()
|
||||
{
|
||||
xcodebuild ARCHS="${CODEC_TEST_IOS_ARCH}" VALID_ARCHS="${CODEC_TEST_IOS_ARCH}" ONLY_ACTIVE_ARCH=YES -project $1 -target $2 -configuration $3 -sdk ${CODEC_TEST_IOS_PLATFORM} clean build
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "build $1 $3 successfully"
|
||||
else
|
||||
echo "build $1 $3 fail"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
iosPerformanceTest()
|
||||
{
|
||||
|
||||
if [ $# -gt 2 ]; then
|
||||
echo "Please use command $0 [enc/dec] [release/debug]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for PARAM in $*; do
|
||||
if [ "enc" = "${PARAM}" ]; then
|
||||
CODEC_TEST_XCODE_PROJECT_NAME="${AUTO_TEST_SRC_PATH}/codec/build/iOS/enc/encDemo/encDemo.xcodeproj"
|
||||
CODEC_TEST_IOS_PROJECT_NAME="encDemo"
|
||||
CODEC_TEST_IOS_PROJECT_PATH="${AUTO_TEST_SRC_PATH}/codec/build/iOS/enc/encDemo/build"
|
||||
CODEC_TEST_IOS_APP=${CODEC_TEST_IOS_PROJECT_PATH}/${CODEC_TEST_IOS_DEBUG_RELEASE}-iphoneos/${CODEC_TEST_IOS_PROJECT_NAME}.app
|
||||
CODEC_TEST_IOS_APP_ID="cisco.encDemo"
|
||||
CODEC_TEST_RES=${AUTO_TEST_IOS_PATH}/../EncoderPerfTestRes
|
||||
CODEC_TEST_LOG="encPerf"
|
||||
elif [ "dec" = "${PARAM}" ]; then
|
||||
CODEC_TEST_XCODE_PROJECT_NAME="${AUTO_TEST_SRC_PATH}/codec/build/iOS/dec/demo/demo.xcodeproj/"
|
||||
CODEC_TEST_IOS_PROJECT_NAME="demo"
|
||||
CODEC_TEST_IOS_PROJECT_PATH="${AUTO_TEST_SRC_PATH}/codec/build/iOS/dec/demo/build"
|
||||
CODEC_TEST_IOS_APP=${CODEC_TEST_IOS_PROJECT_PATH}/${CODEC_TEST_IOS_DEBUG_RELEASE}-iphoneos/${CODEC_TEST_IOS_PROJECT_NAME}.app
|
||||
CODEC_TEST_IOS_APP_ID="hf.cisco.demo"
|
||||
CODEC_TEST_RES=${AUTO_TEST_IOS_PATH}/../DecoderPerfTestRes
|
||||
CODEC_TEST_LOG="decPerf"
|
||||
elif [ "release" = "${PARAM}" ]; then
|
||||
CODEC_TEST_IOS_DEBUG_RELEASE="Release"
|
||||
CODEC_TEST_IOS_REPORT_SUBFOLDER="release"
|
||||
elif [ "debug" = "${PARAM}" ]; then
|
||||
CODEC_TEST_IOS_DEBUG_RELEASE="Debug"
|
||||
CODEC_TEST_IOS_REPORT_SUBFOLDER="debug"
|
||||
else
|
||||
echo parameters are illegal!!!, please have a check.
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Codec test will run on ${CODEC_TEST_IOS_PLATFORM} with ${CODEC_TEST_IOS_DEBUG_RELEASE}"
|
||||
buildXcodeProject ${CODEC_TEST_XCODE_PROJECT_NAME} ${CODEC_TEST_IOS_PROJECT_NAME} ${CODEC_TEST_IOS_DEBUG_RELEASE} ${CODEC_TEST_IOS_PLATFORM}
|
||||
|
||||
|
||||
|
||||
|
||||
##############run on ios devices#########################
|
||||
# for real device
|
||||
if [ ! -d ${CODEC_TEST_IOS_APP} ] ; then
|
||||
echo "${CODEC_TEST_IOS_APP} is not found"
|
||||
exit 1
|
||||
else
|
||||
echo "Find app ${CODEC_TEST_IOS_APP}"
|
||||
fi
|
||||
|
||||
#ensure instruments not runing
|
||||
echo "Try to kill the runing instruments"
|
||||
pids_str=`ps x -o pid,command | grep -v grep | grep "instruments" | awk '{printf "%s,", $1}'`
|
||||
instruments_pids="${pids_str//,/ }"
|
||||
for pid in ${instruments_pids}; do
|
||||
echo "Found instruments ${pid}. Killing..."
|
||||
kill -9 ${pid} && wait ${pid} &> /dev/null
|
||||
done
|
||||
|
||||
|
||||
|
||||
DEVICES=`system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'`
|
||||
if [ "${DEVICES}#" == "#" ]
|
||||
then
|
||||
echo "Can not find any connected device! please check device is connected to MAC!"
|
||||
exit 1
|
||||
else
|
||||
rand=`date +%s`
|
||||
for DEVICE_ID in ${DEVICES}
|
||||
do
|
||||
echo "Try to run on device:${DEVICE_ID}"
|
||||
|
||||
#uninstall the application from device to remove the last result
|
||||
./fruitstrap uninstall --bundle ${CODEC_TEST_IOS_APP_ID} --id ${DEVICE_ID}
|
||||
if [ $? -ne 0 ]; then
|
||||
echo uninstall application: ${CODEC_TEST_IOS_APP} from device: ${DEVICE_ID} is failed!
|
||||
fi
|
||||
#install the application
|
||||
./fruitstrap install --bundle ${CODEC_TEST_IOS_APP} --id ${DEVICE_ID}
|
||||
if [ $? -ne 0 ]; then
|
||||
echo install application: ${CODEC_TEST_IOS_APP} to device: ${DEVICE_ID} is failed!
|
||||
exit 1
|
||||
fi
|
||||
|
||||
./iFileTransfer -o copy -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from ${CODEC_TEST_RES}
|
||||
instruments -w ${DEVICE_ID} -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate ${CODEC_TEST_IOS_APP} -e UIASCRIPT ./uiascript.js -e UIARRESULTPATH /tmp/
|
||||
#copy to report folder
|
||||
./iFileTransfer -o download -id ${DEVICE_ID} -app ${CODEC_TEST_IOS_APP_ID} -from /Documents/${CODEC_TEST_LOG}.log -to ${CODEC_TEST_IOS_REPORT_PATH}/${CODEC_TEST_LOG}_${DEVICE_ID}_${rand}.log
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "download file: ${CODEC_TEST_LOG}.log from ${CODEC_TEST_IOS_APP_ID} is failed!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
AUTO_TEST_IOS_PATH=`pwd`
|
||||
AUTO_TEST_SRC_PATH="../../.."
|
||||
CODEC_TEST_IOS_REPORT_PATH="${AUTO_TEST_IOS_PATH}/report"
|
||||
if [ ! -d ${CODEC_TEST_IOS_REPORT_PATH} ]
|
||||
then
|
||||
mkdir -p ${CODEC_TEST_IOS_REPORT_PATH}
|
||||
fi
|
||||
|
||||
ENCDEC=$1
|
||||
#start to get encoder/decoder performance data,default run the xcode with release
|
||||
iosPerformanceTest $ENCDEC release
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Running $ENCDEC demo to get encoder performance is failed!"
|
||||
exit 1
|
||||
else
|
||||
echo Finished $ENCDEC performance test on ios devices
|
||||
echo the test result is generated at ./ios/report/xx.loGbash parsePerfData.sh
|
||||
echo xxxxxxxxxxxxxxxxxxxxxxxxxxxxIOS $ENCDEC Endxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
fi
|
||||
#TODO:according to the trace of instruments to do some analysis
|
||||
find .\ -name *.trace -exec rm -rf {} \;
|
19
autotest/performaceTest/ios/uiascript.js
Normal file
19
autotest/performaceTest/ios/uiascript.js
Normal file
@ -0,0 +1,19 @@
|
||||
UIATarget.onAlert = function onAlert(alert){
|
||||
|
||||
UIALogger.logMessage("In Alert!");
|
||||
title = alert.name();
|
||||
if (title && title.indexOf("Microphone") !== -1) {
|
||||
UIALogger.logMessage("Alert with title '" + title + "' encountered!");
|
||||
var buttons = alert.buttons();
|
||||
var buttonCount = buttons.length;
|
||||
|
||||
if (buttonCount > 0) {
|
||||
var acceptButton = buttons[buttonCount - 1];
|
||||
acceptButton.tap(); // last button is accept
|
||||
}
|
||||
return true; //forbid the default cancel processing
|
||||
}
|
||||
return false; //using the default cancel processing
|
||||
}
|
||||
var target = UIATarget.localTarget();
|
||||
target.delay(6000);
|
111
autotest/performaceTest/parsePerfData.sh
Executable file
111
autotest/performaceTest/parsePerfData.sh
Executable file
@ -0,0 +1,111 @@
|
||||
#!/bin/bash
|
||||
|
||||
#usage runGetPerformanceInfo ${PerformanceLogFile}
|
||||
runGetPerformanceInfo_openh264()
|
||||
{
|
||||
|
||||
if [ ! $# -eq 2 ]
|
||||
then
|
||||
echo "not enough parameters!"
|
||||
echo "usage: ${0} [android/ios] ${PerformanceLogFile}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local PerformanceLogFile=$2
|
||||
local FileName=""
|
||||
local Width=""
|
||||
local Height=""
|
||||
local Frames=""
|
||||
local FPS=""
|
||||
local EncodeTime=""
|
||||
if [ $1 = "android" ]
|
||||
then seperatorNum=3
|
||||
else
|
||||
seperatorNum=2
|
||||
fi
|
||||
|
||||
while read line
|
||||
do
|
||||
if [[ $line =~ "enc yuv file" ]]
|
||||
then
|
||||
|
||||
FileName=`echo $line | awk 'BEGIN {FS="enc yuv file"} {print $2}'`
|
||||
|
||||
FileName=`echo $FileName | awk 'BEGIN {FS=":"} {print $2}'`
|
||||
fi
|
||||
if [[ $line =~ "Width" ]]
|
||||
then
|
||||
Width=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
|
||||
fi
|
||||
if [[ $line =~ "Height" ]]
|
||||
then
|
||||
Height=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
|
||||
fi
|
||||
if [[ $line =~ "Frames" ]]
|
||||
then
|
||||
Frames=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
|
||||
fi
|
||||
if [[ $line =~ "FPS" ]]
|
||||
then
|
||||
FPS=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
|
||||
FPS=`echo $FPS | awk 'BEGIN {FS="fps"} {print $1}'`
|
||||
echo "${FileName},"${Width}x${Height}",${Frames},${FPS}"
|
||||
fi
|
||||
|
||||
if [[ $line =~ "encode time" ]]
|
||||
then
|
||||
EncodeTime=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
|
||||
fi
|
||||
if [[ $line =~ "height" ]]
|
||||
then
|
||||
Height=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
|
||||
fi
|
||||
if [[ $line =~ "H264 source file name" ]]
|
||||
then
|
||||
|
||||
FileName=`echo $line | awk 'BEGIN {FS=":"} {print $'${seperatorNum}'}'`
|
||||
if [ $1 = "ios" ]
|
||||
then
|
||||
FileName=`echo $FileName | awk -F"DecoderPerfTestRes" '{print $2}'`
|
||||
FileName=`echo $FileName | awk -F"/" '{print $2}'`
|
||||
else
|
||||
FileName=`echo $FileName | awk -F"/" '{print $4}'`
|
||||
fi
|
||||
fi
|
||||
|
||||
done <${PerformanceLogFile}
|
||||
|
||||
|
||||
}
|
||||
AUTO_TEST_RESULT_PATH="./TestResultCSV/"
|
||||
|
||||
|
||||
parseLogToCSV()
|
||||
{
|
||||
if [ $# -ne 1 ]
|
||||
then echo "Please input $0 [android/ios]"
|
||||
fi
|
||||
if [ $* = "android" ]
|
||||
then
|
||||
Result_log_path="./android/report/"
|
||||
suffix=android
|
||||
dos2unix ${Result_log_path}*.*
|
||||
else
|
||||
Result_log_path="./ios/report/"
|
||||
suffix=ios
|
||||
fi
|
||||
Result_log=`ls ${Result_log_path}`
|
||||
|
||||
for log in ${Result_log}
|
||||
do
|
||||
PerformFile=`echo $log |awk -F"." '{print $1}'`
|
||||
PerformFile=${PerformFile}_${suffix}.csv
|
||||
#inital perfermance file
|
||||
|
||||
echo "$log,,,">>${AUTO_TEST_RESULT_PATH}${PerformFile}
|
||||
echo "YUV,Resolution,Encodedframes,FPS">>${AUTO_TEST_RESULT_PATH}${PerformFile}
|
||||
runGetPerformanceInfo_openh264 ${suffix} ${Result_log_path}${log}>>${AUTO_TEST_RESULT_PATH}${PerformFile}
|
||||
done
|
||||
}
|
||||
parseLogToCSV android
|
||||
parseLogToCSV ios
|
123
autotest/performaceTest/run_perfTest.sh
Normal file
123
autotest/performaceTest/run_perfTest.sh
Normal file
@ -0,0 +1,123 @@
|
||||
#!bin/bash
|
||||
IOS=1
|
||||
ANDROID=1
|
||||
ENC=1
|
||||
DEC=1
|
||||
AUTO_TEST_PATH=`pwd`
|
||||
|
||||
#Judge to run the test on which kind of mobile
|
||||
if [ $# -eq 0 ];then
|
||||
echo Default testing will run on android and ios devices meanwhile
|
||||
else
|
||||
for params in $*; do
|
||||
if [ $params = "ios" ];then
|
||||
echo Running the test just on ios devices
|
||||
ANDROID=0
|
||||
elif [ $params = "android" ];then
|
||||
echo Running the test just on android devices
|
||||
IOS=0
|
||||
elif [ $params = "enc" ];then
|
||||
echo Running the encoder performance test
|
||||
DEC=0
|
||||
elif [ $params = "dec" ];then
|
||||
echo Running the decoder performance test
|
||||
ENC=0
|
||||
else
|
||||
echo parameters are illegal!!!, ${0} [ios/android] [enc/dec].
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
#Prepare encoder resources
|
||||
if [ ${ENC} = "1" ]
|
||||
then
|
||||
if [ ! -d ./EncoderPerTestRes ]
|
||||
then
|
||||
mkdir -p ./EncoderPerfTestRes
|
||||
fi
|
||||
|
||||
if [ "#`ls ./EncoderPerfTestRes`" = "#" ]
|
||||
then
|
||||
echo put yuv and cfg file into ./EncoderPerfTest folder as
|
||||
echo case_720p
|
||||
echo case_720p/welsenc.cfg
|
||||
echo case_720p/layer2.cfg
|
||||
echo case_720p/yuv
|
||||
echo case_720p/yuv/xxx1.yuv
|
||||
echo case_720p/yuv/xxx2.yuv
|
||||
echo case_360p
|
||||
echo case_360p/welsenc.cfg
|
||||
echo ......
|
||||
else
|
||||
#Run the encoder performance test
|
||||
if [ ${IOS} = "1" ]
|
||||
then
|
||||
echo xxxxxxxxxxxxxxxxIOS ENC Startxxxxxxxxxxxxxxxxxx
|
||||
echo Run the Encoder performance test on ios devices
|
||||
cd ./ios
|
||||
bash run_AutoTest_ios.sh enc
|
||||
cd ${AUTO_TEST_PATH}
|
||||
fi
|
||||
|
||||
if [ ${ANDROID} = "1" ]
|
||||
then
|
||||
echo xxxxxxxxxxxxxxAndroid ENC Startxxxxxxxxxxxxxxxxxxxx
|
||||
echo Run the Encoder performance test on android devices
|
||||
cd ./android
|
||||
bash run_AutoTest_android.sh enc
|
||||
cd ${AUTO_TEST_PATH}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
#Prepare decoder resources
|
||||
if [ ${DEC} = "1" ]
|
||||
then
|
||||
if [ ! -d ./DecoderPerfTestRes ]
|
||||
then
|
||||
mkdir -p ./DecoderPerfTestRes
|
||||
fi
|
||||
|
||||
if [ "#`ls ./DecoderPerfTestRes`" = "#" ]
|
||||
then
|
||||
echo put decoded bitstreams into such folder as
|
||||
echo xxx1.264
|
||||
echo xxx2.264
|
||||
echo ........
|
||||
else
|
||||
#Run the decoder performance test
|
||||
if [ ${IOS} = "1" ]
|
||||
then
|
||||
echo xxxxxxxxxxxxxxxxIOS DEC Startxxxxxxxxxxxxxxxxxx
|
||||
echo Run the Decoder performance test on ios devices
|
||||
cd ./ios
|
||||
bash run_AutoTest_ios.sh dec
|
||||
cd ${AUTO_TEST_PATH}
|
||||
fi
|
||||
|
||||
if [ ${ANDROID} = "1" ]
|
||||
then
|
||||
echo xxxxxxxxxxxxxxAndroid DEC Startxxxxxxxxxxxxxxxxxxxx
|
||||
echo Run the Decoder performance test on android devices
|
||||
cd ./android
|
||||
bash run_AutoTest_android.sh dec
|
||||
cd ${AUTO_TEST_PATH}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
#TODO:NOW just generate csv file to display performance data
|
||||
cd ${AUTO_TEST_PATH}
|
||||
if [[ "#`ls ./ios/report`" == "#" || "#`ls ./android/report`" == "#" ]]
|
||||
then
|
||||
echo There is nothing result log generated at ios or android devices
|
||||
else
|
||||
echo Start to generate test result csv file
|
||||
#Test result
|
||||
mkdir -p ./TestResultCSV
|
||||
bash parsePerfData.sh
|
||||
echo The csv file locate ./TestResultCSV/xxx.csv
|
||||
fi
|
||||
|
||||
|
@ -3,6 +3,7 @@ package com.wels.dec;
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Process;
|
||||
import android.util.Log;
|
||||
|
||||
import android.view.KeyEvent;
|
||||
@ -19,7 +20,7 @@ public class WelsDecTest extends Activity {
|
||||
private OnClickListener OnClickEvent;
|
||||
private Button mBtnLoad, mBtnStartSW;
|
||||
|
||||
final String mStreamPath = "/sdcard/wels-seq/";
|
||||
final String mStreamPath = "/sdcard/welsdec/";
|
||||
Vector<String> mStreamFiles = new Vector<String>();
|
||||
|
||||
@Override
|
||||
@ -81,6 +82,41 @@ public class WelsDecTest extends Activity {
|
||||
mBtnStartSW.setOnClickListener(OnClickEvent);
|
||||
|
||||
System.out.println("Done!");
|
||||
//if you want to run the demo manually, just comment following 2 lines
|
||||
runAutoDec();
|
||||
}
|
||||
public void runAutoDec()
|
||||
{
|
||||
Thread thread = new Thread() {
|
||||
|
||||
public void run()
|
||||
{
|
||||
Log.i(TAG,"decoder performance test begin");
|
||||
|
||||
File bitstreams = new File(mStreamPath);
|
||||
String[] list = bitstreams.list();
|
||||
if(list==null || list.length==0)
|
||||
{
|
||||
Log.i(TAG,"have not find any coder resourse");
|
||||
finish();
|
||||
}
|
||||
for(int i=0;i<list.length;i++)
|
||||
{
|
||||
|
||||
String inFile=list[i];
|
||||
inFile = mStreamPath + inFile;
|
||||
String outFile=inFile +".yuv";
|
||||
DoDecoderTest(inFile, outFile);
|
||||
|
||||
|
||||
}
|
||||
Log.i(TAG,"decoder performance test finish");
|
||||
finish();
|
||||
}
|
||||
|
||||
};
|
||||
thread.start();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -89,6 +125,16 @@ public class WelsDecTest extends Activity {
|
||||
Log.i("WSE_DEC","welsdecdemo onStart");
|
||||
super.onStart();
|
||||
}
|
||||
@Override
|
||||
public void onDestroy()
|
||||
{
|
||||
super.onDestroy();
|
||||
|
||||
Log.i(TAG,"OnDestroy");
|
||||
|
||||
Process.killProcess(Process.myPid());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
|
@ -8,6 +8,25 @@
|
||||
|
||||
extern "C" int EncMain (int argc, char* argv[]);
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL Java_com_wels_enc_WelsEncTest_DoEncoderAutoTest
|
||||
(JNIEnv* env, jobject thiz, jstring jsIncfgName, jstring jsInlayerName, jstring jsInyuvName, jstring jsOutbitName) {
|
||||
/**************** Add the native codes/API *****************/
|
||||
const char* argv[]={
|
||||
(char*)("encConsole.exe"),
|
||||
(char*) ((*env).GetStringUTFChars (jsIncfgName, NULL)),
|
||||
(char*)("-org"),
|
||||
(char*) ((*env).GetStringUTFChars (jsInyuvName, NULL)),
|
||||
(char*)("-bf"),
|
||||
(char*) ((*env).GetStringUTFChars (jsOutbitName, NULL)),
|
||||
(char*)("-numl"),
|
||||
(char*)("1"),
|
||||
(char*) ((*env).GetStringUTFChars (jsInlayerName, NULL))
|
||||
};
|
||||
LOGI ("Start to run JNI module!+++");
|
||||
EncMain(sizeof(argv)/sizeof(argv[0]),(char**)&argv[0]);
|
||||
LOGI ("End to run JNI module!+++");
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_wels_enc_WelsEncTest_DoEncoderTest
|
||||
(JNIEnv* env, jobject thiz, jstring jsFileNameIn) {
|
||||
/**************** Add the native codes/API *****************/
|
||||
|
@ -3,6 +3,7 @@ package com.wels.enc;
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.Process;
|
||||
import android.util.Log;
|
||||
|
||||
import android.view.KeyEvent;
|
||||
@ -19,7 +20,7 @@ public class WelsEncTest extends Activity {
|
||||
private OnClickListener OnClickEvent;
|
||||
private Button mBtnLoad, mBtnStartSW;
|
||||
|
||||
final String mStreamPath = "/sdcard/wels-seq/";
|
||||
final String mStreamPath = "/sdcard/welsenc/";
|
||||
Vector<String> mCfgFiles = new Vector<String>();
|
||||
|
||||
@Override
|
||||
@ -58,7 +59,7 @@ public class WelsEncTest extends Activity {
|
||||
break;
|
||||
case R.id.buttonSW:
|
||||
{
|
||||
System.out.println("decode sequence number = " + mCfgFiles.size());
|
||||
System.out.println("encode sequence number = " + mCfgFiles.size());
|
||||
Log.i(TAG,"after click");
|
||||
try {
|
||||
for (int k=0; k < mCfgFiles.size(); k++) {
|
||||
@ -69,7 +70,7 @@ public class WelsEncTest extends Activity {
|
||||
Log.e(TAG, e.getMessage());
|
||||
}
|
||||
mCfgFiles.clear();
|
||||
tv.setText( "Decoder is completed!" );
|
||||
tv.setText( "Encoder is completed!" );
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -80,15 +81,82 @@ public class WelsEncTest extends Activity {
|
||||
mBtnStartSW.setOnClickListener(OnClickEvent);
|
||||
|
||||
System.out.println("Done!");
|
||||
//run the test automatically,if you not want to autotest, just comment this line
|
||||
runAutoEnc();
|
||||
}
|
||||
|
||||
public void runAutoEnc()
|
||||
{
|
||||
Thread thread = new Thread() {
|
||||
|
||||
public void run()
|
||||
{
|
||||
Log.i(TAG,"encoder performance test begin");
|
||||
String inYuvfile=null,outBitfile=null,inOrgfile=null,inLayerfile = null;
|
||||
File encCase = new File(mStreamPath);
|
||||
String[] caseNum = encCase.list();
|
||||
if(caseNum==null || caseNum.length==0)
|
||||
{
|
||||
Log.i(TAG,"have not find any encoder resourse");
|
||||
finish();
|
||||
}
|
||||
|
||||
for(int i=0;i<caseNum.length;i++)
|
||||
{
|
||||
String[] yuvName = null;
|
||||
File yuvPath = null;
|
||||
File encCaseNo = new File(mStreamPath + caseNum[i]);
|
||||
String[] encFile = encCaseNo.list();
|
||||
|
||||
for(int k=0;k<encFile.length;k++)
|
||||
{
|
||||
if(encFile[k].compareToIgnoreCase("welsenc.cfg") == 0)
|
||||
|
||||
inOrgfile = encCaseNo + File.separator+encFile[k];
|
||||
|
||||
else if(encFile[k].compareToIgnoreCase("layer2.cfg") == 0)
|
||||
inLayerfile = encCaseNo + File.separator+encFile[k];
|
||||
else if(encFile[k].compareToIgnoreCase("yuv") == 0)
|
||||
{
|
||||
yuvPath = new File(encCaseNo + File.separator+encFile[k]);
|
||||
yuvName = yuvPath.list();
|
||||
}
|
||||
}
|
||||
for(int m=0; m<yuvName.length;m++)
|
||||
{
|
||||
inYuvfile = yuvPath +File.separator+yuvName[m];
|
||||
outBitfile = inYuvfile +".264";
|
||||
Log.i(TAG,"enc yuv file:" + yuvName[m]);
|
||||
DoEncoderAutoTest(inOrgfile,inLayerfile,inYuvfile,outBitfile);
|
||||
}
|
||||
}
|
||||
|
||||
Log.i(TAG,"encoder performance test finish");
|
||||
finish();
|
||||
}
|
||||
|
||||
};
|
||||
thread.start();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart()
|
||||
{
|
||||
Log.i(TAG,"welsdecdemo onStart");
|
||||
Log.i(TAG,"welsencdemo onStart");
|
||||
super.onStart();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy()
|
||||
{
|
||||
super.onDestroy();
|
||||
|
||||
Log.i(TAG,"OnDestroy");
|
||||
|
||||
Process.killProcess(Process.myPid());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
@ -101,6 +169,7 @@ public class WelsEncTest extends Activity {
|
||||
}
|
||||
|
||||
public native void DoEncoderTest(String cfgFileName);
|
||||
public native void DoEncoderAutoTest(String cfgFileName,String layerFileName,String yuvFileName,String outBitsName);
|
||||
private static final String TAG = "welsenc";
|
||||
static {
|
||||
try {
|
||||
@ -110,7 +179,7 @@ public class WelsEncTest extends Activity {
|
||||
Log.v(TAG, "Load libwelsencdemo.so successful");
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.e(TAG, "Failed to load welsdec"+e.getMessage());
|
||||
Log.e(TAG, "Failed to load welsenc"+e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
||||
F0E6634D1810EFA5000C888E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
||||
F0E663511810EFA5000C888E /* demo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "demo-Info.plist"; sourceTree = "<group>"; };
|
||||
F0E663531810EFA5000C888E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
F0E663551810EFA5000C888E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||
F0E663551810EFA5000C888E /* main.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; path = main.m; sourceTree = "<group>"; };
|
||||
F0E663581810EFA5000C888E /* DEMOAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DEMOAppDelegate.h; sourceTree = "<group>"; };
|
||||
F0E663591810EFA5000C888E /* DEMOAppDelegate.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp.preprocessed; path = DEMOAppDelegate.m; sourceTree = "<group>"; };
|
||||
F0E6635B1810EFA5000C888E /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
|
||||
|
@ -34,8 +34,95 @@
|
||||
|
||||
#import "DEMOAppDelegate.h"
|
||||
|
||||
extern int DecMain(int argc, char * argv[]);
|
||||
|
||||
//redirect NSLog and stdout to logfile
|
||||
void redirectLogToDocumentFile()
|
||||
{
|
||||
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
|
||||
NSString *document = [path objectAtIndex:0];
|
||||
NSString *fileName = [NSString stringWithFormat:@"decPerf.log"];
|
||||
NSString *logPath = [document stringByAppendingPathComponent:fileName];
|
||||
|
||||
NSFileManager *defaultManager = [NSFileManager defaultManager];
|
||||
[defaultManager removeItemAtPath:logPath error:nil];
|
||||
|
||||
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
|
||||
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
|
||||
}
|
||||
|
||||
|
||||
//run auto test to get encoder performance
|
||||
int AutoTestDec()
|
||||
{
|
||||
|
||||
|
||||
NSString* document= [[NSString alloc] init];
|
||||
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
|
||||
if([paths count] == 0)
|
||||
{
|
||||
NSLog(@"could not find document path");
|
||||
return 2;
|
||||
}
|
||||
document = [paths objectAtIndex:0];
|
||||
|
||||
|
||||
NSString* decFilePath =[document stringByAppendingString:@"/DecoderPerfTestRes"];
|
||||
NSFileManager* manage=[NSFileManager defaultManager];
|
||||
|
||||
NSString* outYuvPath=[decFilePath stringByAppendingString:@"/yuv"];
|
||||
[manage removeItemAtPath:outYuvPath error:nil];
|
||||
[manage createDirectoryAtPath:outYuvPath withIntermediateDirectories:YES attributes:nil error: nil];
|
||||
|
||||
|
||||
NSArray* bitstreams=[manage subpathsAtPath:decFilePath];
|
||||
if(bitstreams == nil)
|
||||
{
|
||||
NSLog(@"could not find any bitstream under decoderperfpath");
|
||||
return 1;
|
||||
}
|
||||
|
||||
redirectLogToDocumentFile(); //output to console, just comment this line
|
||||
|
||||
for (int caseNO=0; caseNO<[bitstreams count]; caseNO++)
|
||||
{
|
||||
|
||||
NSString* caseName = [bitstreams objectAtIndex:caseNO];
|
||||
if ([caseName isEqual: @"yuv"]) {
|
||||
break;
|
||||
}
|
||||
NSString* bitstream = [decFilePath stringByAppendingString:@"/"];
|
||||
bitstream = [bitstream stringByAppendingString:caseName];
|
||||
NSString* yuvFileName = [caseName stringByAppendingString:@".yuv"];
|
||||
NSString* tmpyuvFileName = [outYuvPath stringByAppendingString:@"/"];
|
||||
yuvFileName = [tmpyuvFileName stringByAppendingString:yuvFileName];
|
||||
|
||||
[manage createFileAtPath:yuvFileName contents:nil attributes:nil];
|
||||
|
||||
const char* argvv[]={
|
||||
"decConsole.exe",
|
||||
[bitstream UTF8String],
|
||||
[yuvFileName UTF8String]
|
||||
};
|
||||
DecMain(sizeof(argvv)/sizeof(argvv[0]), (char**)&argvv[0]);
|
||||
fflush(stdout);// flush the content of stdout instantly
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
//***For auto testing of decoder performance, call auto test here, if you not want to do auto test, you can comment it manualy
|
||||
|
||||
if(AutoTestDec() == 0)
|
||||
NSLog(@"Auto testing running sucessfully");
|
||||
else
|
||||
NSLog(@"Auto testing running failed");
|
||||
abort();
|
||||
//********
|
||||
|
||||
@autoreleasepool {
|
||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([DEMOAppDelegate class]));
|
||||
}
|
||||
|
@ -35,8 +35,148 @@
|
||||
|
||||
#import "AppDelegate.h"
|
||||
|
||||
extern int EncMain(int argc, char **argv);
|
||||
|
||||
//redirect NSLog and stdout to logfile
|
||||
void redirectLogToDocumentFile()
|
||||
{
|
||||
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
|
||||
NSString *document = [path objectAtIndex:0];
|
||||
NSString *fileName = [NSString stringWithFormat:@"encPerf.log"];
|
||||
NSString *logPath = [document stringByAppendingPathComponent:fileName];
|
||||
|
||||
NSFileManager *defaultManager = [NSFileManager defaultManager];
|
||||
[defaultManager removeItemAtPath:logPath error:nil];
|
||||
|
||||
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
|
||||
freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
|
||||
}
|
||||
|
||||
//to judge whether the path is needed case path
|
||||
bool IsOneDeptDir(NSString* path)
|
||||
{
|
||||
BOOL isDir = NO;
|
||||
BOOL isOneDeptDir = NO;
|
||||
NSFileManager* fileManager=[NSFileManager defaultManager];
|
||||
NSArray* dirPathArray=[fileManager subpathsAtPath:path];
|
||||
if([dirPathArray count]==0 || dirPathArray == nil)
|
||||
isOneDeptDir = NO;
|
||||
else
|
||||
{
|
||||
for (NSString* dirPath in dirPathArray){
|
||||
NSString* tmpPath = [path stringByAppendingString:@"/"];
|
||||
tmpPath = [tmpPath stringByAppendingString:dirPath];
|
||||
[fileManager fileExistsAtPath:tmpPath isDirectory:&isDir];
|
||||
if (isDir) {
|
||||
isOneDeptDir = YES;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return isOneDeptDir;
|
||||
}
|
||||
|
||||
//run auto test to get encoder performance
|
||||
int AutoTestEnc()
|
||||
{
|
||||
NSString* document= [[NSString alloc] init];
|
||||
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
|
||||
if([paths count] == 0)
|
||||
{
|
||||
NSLog(@"could not find document path");
|
||||
return 2;
|
||||
}
|
||||
document = [paths objectAtIndex:0];
|
||||
|
||||
NSString* encFilePath =[document stringByAppendingString:@"/EncoderPerfTestRes"];
|
||||
NSFileManager* manage=[NSFileManager defaultManager];
|
||||
|
||||
NSArray* cases=[manage subpathsAtPath:encFilePath];
|
||||
if(cases == nil)
|
||||
{
|
||||
NSLog(@"could not find any test case under encoderperftest");
|
||||
return 1;
|
||||
|
||||
}
|
||||
redirectLogToDocumentFile();
|
||||
NSMutableArray *dirArray = [[NSMutableArray alloc] init];
|
||||
for (NSString *casePath in cases) {
|
||||
|
||||
NSString *path = [encFilePath stringByAppendingPathComponent:casePath];
|
||||
if(IsOneDeptDir(path))
|
||||
{
|
||||
[dirArray addObject:casePath];
|
||||
}
|
||||
|
||||
}
|
||||
for (int caseNO=0; caseNO<[dirArray count]; caseNO++)
|
||||
{
|
||||
|
||||
NSString* caseName = [dirArray objectAtIndex:caseNO];
|
||||
NSString* caseFilePath = [encFilePath stringByAppendingString:@"/"];
|
||||
caseFilePath = [caseFilePath stringByAppendingString:caseName];
|
||||
[manage changeCurrentDirectoryPath:[caseFilePath stringByExpandingTildeInPath]];
|
||||
|
||||
NSString* welscfg = [caseFilePath stringByAppendingString:@"/welsenc.cfg"];
|
||||
NSString* layercfg = [caseFilePath stringByAppendingString:@"/layer2.cfg"];
|
||||
NSString* yuvFilePath = [caseFilePath stringByAppendingString:@"/yuv"];
|
||||
NSString* bitFilePath = [caseFilePath stringByAppendingString:@"/bit"];
|
||||
[manage removeItemAtPath:bitFilePath error:nil];
|
||||
[manage createDirectoryAtPath:bitFilePath withIntermediateDirectories:YES attributes:nil error:nil];
|
||||
|
||||
|
||||
NSArray* files=[manage subpathsAtPath:yuvFilePath];
|
||||
|
||||
[manage changeCurrentDirectoryPath:[bitFilePath stringByExpandingTildeInPath]];
|
||||
|
||||
for(int i=0;i<[files count];i++)
|
||||
{
|
||||
NSString* yuvFileName = [files objectAtIndex:i];
|
||||
NSString* bitFileName = [yuvFileName stringByAppendingString:@".264"];
|
||||
|
||||
NSString* bitFileNamePath = [bitFilePath stringByAppendingString:@"/"];
|
||||
bitFileName = [bitFileNamePath stringByAppendingString:bitFileName];
|
||||
|
||||
|
||||
[manage createFileAtPath:bitFileName contents:nil attributes:nil];
|
||||
[manage changeCurrentDirectoryPath:[yuvFilePath stringByExpandingTildeInPath]];
|
||||
const char* argvv[]={
|
||||
"dummy",
|
||||
[welscfg UTF8String],
|
||||
"-org",
|
||||
[yuvFileName UTF8String],
|
||||
"-bf",
|
||||
[bitFileName UTF8String],
|
||||
"-numl",
|
||||
"1",
|
||||
[layercfg UTF8String]
|
||||
};
|
||||
|
||||
NSLog(@"WELS_INFO: enc config file: %@", welscfg);
|
||||
NSLog(@"WELS_INFO: enc yuv file: %@", yuvFileName);
|
||||
EncMain(sizeof(argvv)/sizeof(argvv[0]), (char**)&argvv[0]);
|
||||
fflush(stdout);// flush the content of stdout instantly
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
|
||||
|
||||
//***For auto testing of encoder performance, call auto test here, if you not want to do auto test, you can comment it manualy
|
||||
|
||||
if(AutoTestEnc() == 0)
|
||||
NSLog(@"Auto testing running sucessfully");
|
||||
else
|
||||
NSLog(@"Auto testing running failed");
|
||||
abort();
|
||||
//************************
|
||||
@autoreleasepool {
|
||||
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user