From 6aab0c137566f84353e9c0d90b633214ece06d3a Mon Sep 17 00:00:00 2001 From: jeffqjiangNew <142832361+jeffqjiangNew@users.noreply.github.com> Date: Thu, 24 Apr 2025 10:46:17 -0400 Subject: [PATCH] CI: Added AVC and HEVC decode stability tests to CI. (#572) * * CI: Added AVC and HEVC decode stability tests to CI. * * CI: Do not run HEVC stability tests on MI2xx or MI1xx. --- .jenkins/common.groovy | 39 ++++++++++++++++++++++++ test/testScripts/run_rocDecodeSamples.py | 27 ++++++++++++---- 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/.jenkins/common.groovy b/.jenkins/common.groovy index 59db71a2f4..f1aff1dc99 100644 --- a/.jenkins/common.groovy +++ b/.jenkins/common.groovy @@ -30,6 +30,7 @@ def runTestCommand (platform, project) { String packageManager = 'apt -y' String toolsPackage = 'llvm-amdgpu-dev' String llvmLocation = '/opt/amdgpu/lib/x86_64-linux-gnu/llvm-20.1/bin' + boolean runHevcStability = true; if (platform.jenkinsLabel.contains('rhel')) { libLocation = ':/usr/local/lib' @@ -44,6 +45,10 @@ def runTestCommand (platform, project) { toolsPackage = 'llvm-amdgpu-devel' llvmLocation = '/opt/amdgpu/lib64/llvm-20.1/bin' } + + if (platform.jenkinsLabel.contains('gfx90a') || platform.jenkinsLabel.contains('gfx908')) { + runHevcStability = false; + } String commitSha String repoUrl @@ -90,6 +95,26 @@ def runTestCommand (platform, project) { wget http://math-ci.amd.com/userContent/computer-vision/HevcConformance/*zip*/HevcConformance.zip unzip HevcConformance.zip fi + FILE_COUNT=\$(find \${JENKINS_HOME_DIR}/rocDecode/AvcStability -type f | wc -l) + # Check if there are 22 files + if [ "\$FILE_COUNT" -ne 22 ]; then + echo "wrong file count" + ls + cd \${JENKINS_HOME_DIR}/rocDecode + wget http://math-ci.amd.com/userContent/computer-vision/rocDecodeStability/AvcStability.zip + unzip AvcStability.zip + fi + if ${runHevcStability}; then + FILE_COUNT=\$(find \${JENKINS_HOME_DIR}/rocDecode/HevcStability -type f | wc -l) + # Check if there are 44 files + if [ "\$FILE_COUNT" -ne 44 ]; then + echo "wrong file count" + ls + cd \${JENKINS_HOME_DIR}/rocDecode + wget http://math-ci.amd.com/userContent/computer-vision/rocDecodeStability/HevcStability.zip + unzip HevcStability.zip + fi + fi if [ ! -f \${JENKINS_HOME_DIR}/rocDecode/data1.img ]; then echo "File does not exist." cd \${JENKINS_HOME_DIR}/rocDecode @@ -104,10 +129,16 @@ def runTestCommand (platform, project) { wget http://math-ci.amd.com/userContent/computer-vision/rocDecodeConformance/Vp9Conformance.zip wget http://math-ci.amd.com/userContent/computer-vision/rocDecodeConformance/Av1Conformance_v1.0.zip wget http://math-ci.amd.com/userContent/computer-vision/rocDecodeConformance/AvcConformance.zip + wget http://math-ci.amd.com/userContent/computer-vision/rocDecodeStability/AvcStability.zip unzip HevcConformance.zip unzip Vp9Conformance.zip unzip Av1Conformance_v1.0.zip unzip AvcConformance.zip + unzip AvcStability.zip + if ${runHevcStability}; then + wget http://math-ci.amd.com/userContent/computer-vision/rocDecodeStability/HevcStability.zip + unzip HevcStability.zip + fi fi """ def command = """#!/usr/bin/env bash @@ -143,6 +174,14 @@ def runTestCommand (platform, project) { cd ../ mkdir av1-conformance && cd av1-conformance python3 /opt/rocm/share/rocdecode/test/testScripts/run_rocDecode_Conformance.py --videodecode_exe ./../../rocdecode-sample/videodecode --files_directory \${JENKINS_HOME_DIR}/rocDecode/Av1Conformance_v1.0 --results_directory . + echo rocdecode stability tests + cd ../../ && mkdir -p stability && cd stability + mkdir avc-stability && cd avc-stability + python3 /opt/rocm/share/rocdecode/test/testScripts/run_rocDecodeSamples.py --videodecode_exe ./../../rocdecode-sample/videodecode --files_directory \${JENKINS_HOME_DIR}/rocDecode/AvcStability --results_directory . --check_decode_status 1 + if ${runHevcStability}; then + cd ../ && mkdir hevc-stability && cd hevc-stability + python3 /opt/rocm/share/rocdecode/test/testScripts/run_rocDecodeSamples.py --videodecode_exe ./../../rocdecode-sample/videodecode --files_directory \${JENKINS_HOME_DIR}/rocDecode//HevcStability --results_directory . --check_decode_status 1 + fi cd ../../ echo rocdecode-sample - videoDecode with data1 video test cd rocdecode-sample diff --git a/test/testScripts/run_rocDecodeSamples.py b/test/testScripts/run_rocDecodeSamples.py index fcaad98da0..56080d62b5 100644 --- a/test/testScripts/run_rocDecodeSamples.py +++ b/test/testScripts/run_rocDecodeSamples.py @@ -76,6 +76,8 @@ def print_bitrate(current_file): parser = argparse.ArgumentParser() parser.add_argument('--rocDecode_directory', type=str, default='', help='The rocDecode Directory - required') +parser.add_argument('--videodecode_exe', type=str, default='', + help='Video decode sample app exe - optional') parser.add_argument('--gpu_device_id', type=int, default=0, help='The GPU device ID that will be used to run the test on it - optional (default:0 [range:0 - N-1] N = total number of available GPUs on a machine)') parser.add_argument('--files_directory', type=str, default='', @@ -86,6 +88,8 @@ parser.add_argument('--num_threads', type=int, default=1, help='The number of threads is only for the videoDecodePerf sample (sample_mode = 1) - optional (default:1)') parser.add_argument('--max_num_decoded_frames', type=int, default=0, help='The max number of decoded frames. Useful for partial decoding of a long stream. - optional (default:0, meaning no limit)') +parser.add_argument('--results_directory', type=str, default='', + help='The path to a dirctory to store results - optional') parser.add_argument('--check_decode_status', type=int, default=0, help='Report the number of streams that have completed decoding without abortion. For decoder stability check. - optional (default:0, meaning normal performance report)') @@ -95,6 +99,8 @@ rocDecodeDirectory = args.rocDecode_directory gpuDeviceID = args.gpu_device_id filesDir = args.files_directory filesDirPath = Path(filesDir) +videoDecodeEXE = args.videodecode_exe +resultsDir = args.results_directory sampleMode = args.sample_mode numThreads = args.num_threads maxNumFrames = args.max_num_decoded_frames @@ -106,12 +112,21 @@ print("\nrunrocDecodeTests V"+__version__+"\n") # rocDecode Application scriptPath = os.path.dirname(os.path.realpath(__file__)) -if sampleMode == 0: - rocDecode_exe = rocDecodeDirectory+'/samples/videoDecode/build/videodecode' - resultsPath = scriptPath+'/rocDecode_videoDecode_results' -elif sampleMode == 1: - rocDecode_exe = rocDecodeDirectory+'/samples/videoDecodePerf/build/videodecodeperf' - resultsPath = scriptPath+'/rocDecode_videoDecodePerf_results' +if videoDecodeEXE == '': + if sampleMode == 0: + rocDecode_exe = rocDecodeDirectory+'/samples/videoDecode/build/videodecode' + elif sampleMode == 1: + rocDecode_exe = rocDecodeDirectory+'/samples/videoDecodePerf/build/videodecodeperf' +else: + rocDecode_exe = videoDecodeEXE +if resultsDir == '': + if sampleMode == 0: + resultsPath = scriptPath+'/rocDecode_videoDecode_results' + elif sampleMode == 1: + resultsPath = scriptPath+'/rocDecode_videoDecodePerf_results' +else: + resultsPath = resultsDir+'/rocDecode_videoDecode_results' + run_rocDecode_app = os.path.abspath(rocDecode_exe) os.system('(mkdir -p ' + resultsPath + ')') if(os.path.isfile(run_rocDecode_app)):