Sample & Test - Add rocdecDecode to the ctest and decouple the rocdecode-host from it (#685)
* Add rocdecDecode to the ctest and decouple the rocdecode-host from it * clean up
This commit is contained in:
gecommit door
GitHub
bovenliggende
5784f8cffe
commit
158f7fd2ba
@@ -237,6 +237,7 @@ if(HIP_FOUND AND Libva_FOUND AND Libdrm_amdgpu_FOUND)
|
||||
install(FILES samples/videoDecodePerf/CMakeLists.txt samples/videoDecodePerf/README.md samples/videoDecodePerf/videodecodeperf.cpp DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/samples/videoDecodePerf COMPONENT dev)
|
||||
install(FILES samples/videoDecodeRGB/CMakeLists.txt samples/videoDecodeRGB/README.md samples/videoDecodeRGB/videodecrgb.cpp DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/samples/videoDecodeRGB COMPONENT dev)
|
||||
install(FILES samples/videoDecodeBatch/CMakeLists.txt samples/videoDecodeBatch/README.md samples/videoDecodeBatch/videodecodebatch.cpp DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/samples/videoDecodeBatch COMPONENT dev)
|
||||
install(FILES samples/rocdecDecode/CMakeLists.txt samples/rocdecDecode/README.md samples/rocdecDecode/rocdecdecode.cpp DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/samples/rocdecDecode COMPONENT dev)
|
||||
install(FILES samples/common.h DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/samples COMPONENT dev)
|
||||
install(FILES utils/md5.h DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/utils COMPONENT dev)
|
||||
install(FILES utils/video_demuxer.h DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/utils COMPONENT dev)
|
||||
@@ -246,6 +247,7 @@ if(HIP_FOUND AND Libva_FOUND AND Libdrm_amdgpu_FOUND)
|
||||
install(FILES utils/resize_kernels.h DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/utils COMPONENT dev)
|
||||
install(FILES utils/video_post_process.h DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/utils COMPONENT dev)
|
||||
install(FILES data/videos/AMD_driving_virtual_20-H265.mp4 data/videos/AMD_driving_virtual_20-H265.265 data/videos/AMD_driving_virtual_20-H264.mp4 data/videos/AMD_driving_virtual_20-H264.264 data/videos/AMD_driving_virtual_20-AV1.mp4 data/videos/AMD_driving_virtual_20-AV1.ivf data/videos/AMD_driving_virtual_20-VP9.ivf DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/video COMPONENT dev)
|
||||
install(DIRECTORY data/frames/ DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/frames COMPONENT dev)
|
||||
# install license information - {ROCM_PATH}/share/doc/rocdecode
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
||||
install(FILES ${CPACK_RESOURCE_FILE_LICENSE} DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT runtime)
|
||||
|
||||
@@ -67,25 +67,36 @@ find_package(FFmpeg QUIET)
|
||||
find_package(rocdecode QUIET)
|
||||
find_package(rocdecode-host 1.0.0 QUIET)
|
||||
|
||||
if(HIP_FOUND AND FFMPEG_FOUND AND rocdecode_FOUND AND rocdecode-host_FOUND)
|
||||
if(HIP_FOUND AND rocdecode_FOUND)
|
||||
# HIP
|
||||
set(LINK_LIBRARY_LIST ${LINK_LIBRARY_LIST} hip::host)
|
||||
# FFMPEG
|
||||
include_directories(${AVUTIL_INCLUDE_DIR} ${AVCODEC_INCLUDE_DIR}
|
||||
${AVFORMAT_INCLUDE_DIR})
|
||||
set(LINK_LIBRARY_LIST ${LINK_LIBRARY_LIST} ${FFMPEG_LIBRARIES})
|
||||
|
||||
if(FFMPEG_FOUND)
|
||||
# FFMPEG
|
||||
include_directories(${AVUTIL_INCLUDE_DIR} ${AVCODEC_INCLUDE_DIR}
|
||||
${AVFORMAT_INCLUDE_DIR})
|
||||
set(LINK_LIBRARY_LIST ${LINK_LIBRARY_LIST} ${FFMPEG_LIBRARIES})
|
||||
endif()
|
||||
if(rocdecode-host_FOUND)
|
||||
# rocdecode-host
|
||||
include_directories(${rocdecode-host_INCLUDE_DIR})
|
||||
set(LINK_LIBRARY_LIST ${LINK_LIBRARY_LIST} rocdecode::rocdecode-host)
|
||||
endif()
|
||||
|
||||
# rocdecode and utils
|
||||
include_directories(${rocdecode_INCLUDE_DIR} ${ROCM_PATH}/lib)
|
||||
set(LINK_LIBRARY_LIST ${LINK_LIBRARY_LIST} rocdecode::rocdecode)
|
||||
# rocdecode-host
|
||||
include_directories(${rocdecode-host_INCLUDE_DIR})
|
||||
set(LINK_LIBRARY_LIST ${LINK_LIBRARY_LIST} rocdecode::rocdecode-host)
|
||||
|
||||
# rocdecode
|
||||
# sample app exe
|
||||
list(APPEND SOURCES ${PROJECT_SOURCE_DIR} rocdecdecode.cpp)
|
||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++17")
|
||||
if(FFMPEG_FOUND AND rocdecode-host_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PUBLIC ENABLE_HOST_DECODE=1)
|
||||
else()
|
||||
target_compile_definitions(${PROJECT_NAME} PUBLIC ENABLE_HOST_DECODE=0)
|
||||
endif()
|
||||
target_link_libraries(${PROJECT_NAME} ${LINK_LIBRARY_LIST})
|
||||
else()
|
||||
message("-- ERROR!: ${PROJECT_NAME} excluded! please install all the dependencies and try again!")
|
||||
|
||||
@@ -28,7 +28,10 @@ THE SOFTWARE.
|
||||
#include <filesystem>
|
||||
#include <hip/hip_runtime.h>
|
||||
#include <rocdecode/rocdecode.h>
|
||||
#include <rocdecode/rocdecode_host.h>
|
||||
#include <rocdecode/rocparser.h>
|
||||
#if ENABLE_HOST_DECODE
|
||||
#include <rocdecode/rocdecode_host.h>
|
||||
#endif
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
@@ -364,6 +367,7 @@ void create_decoder(DecoderInfo& dec_info) {
|
||||
CHECK(rocDecCreateDecoder(&dec_info.decoder, &create_info));
|
||||
}
|
||||
|
||||
#if ENABLE_HOST_DECODE
|
||||
int ROCDECAPI handle_video_sequence_host(void* user_data, RocdecVideoFormatHost* format_host) {
|
||||
DecoderInfo *p_dec_info = static_cast<DecoderInfo *>(user_data);
|
||||
RocdecVideoFormat *format = &format_host->video_format;
|
||||
@@ -451,6 +455,7 @@ void create_decoder_host(DecoderInfo& dec_info) {
|
||||
CHECK(rocDecCreateDecoderHost(&dec_info.decoder, &create_info));
|
||||
dec_info.backend = DECODER_BACKEND_HOST;
|
||||
}
|
||||
#endif
|
||||
|
||||
int ROCDECAPI handle_video_sequence(void* user_data, RocdecVideoFormat* format) {
|
||||
DecoderInfo *p_dec_info = static_cast<DecoderInfo *>(user_data);
|
||||
@@ -551,7 +556,9 @@ void decode_frames(DecoderInfo& dec_info, const std::vector<std::vector<uint8_t>
|
||||
}
|
||||
CHECK(rocDecParseVideoData(dec_info.parser, &packet));
|
||||
}
|
||||
} else if (dec_info.backend == DECODER_BACKEND_HOST) {
|
||||
}
|
||||
#if ENABLE_HOST_DECODE
|
||||
else if (dec_info.backend == DECODER_BACKEND_HOST) {
|
||||
for (int i=0; i < static_cast<int>(frames.size()); ++i) {
|
||||
RocdecPicParamsHost pic_params = {};
|
||||
pic_params.bitstream_data_len = frames[i].size();
|
||||
@@ -562,14 +569,18 @@ void decode_frames(DecoderInfo& dec_info, const std::vector<std::vector<uint8_t>
|
||||
CHECK(rocDecDecodeFrameHost(dec_info.decoder, &pic_params));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void destroy_decoder(DecoderInfo& dec_info) {
|
||||
if (dec_info.backend == DECODER_BACKEND_DEVICE)
|
||||
if (dec_info.backend == DECODER_BACKEND_DEVICE) {
|
||||
CHECK(rocDecDestroyDecoder(dec_info.decoder));
|
||||
}
|
||||
#if ENABLE_HOST_DECODE
|
||||
else if (dec_info.backend == DECODER_BACKEND_HOST) {
|
||||
CHECK(rocDecDestroyDecoderHost(dec_info.decoder));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void destroy_parser(DecoderInfo& dec_info) {
|
||||
@@ -582,7 +593,11 @@ void ShowHelpAndExit(const char *option = NULL) {
|
||||
<< "-i Input File Path - required" << std::endl
|
||||
<< "-o Output File Path - dumps output if requested; optional" << std::endl
|
||||
<< "-d GPU device ID (0 for the first device, 1 for the second, etc.); optional; default: 0" << std::endl
|
||||
#if ENABLE_HOST_DECODE
|
||||
<< "-b backend (0 for GPU, 1 CPU-FFMpeg); optional; default: 0" << std::endl
|
||||
#else
|
||||
<< "-b backend (0 for GPU); optional; default: 0" << std::endl
|
||||
#endif
|
||||
<< "-c codec (0 : HEVC, 1 : H264, 2: AV1, 4: VP9, 5: VP8 ); optional; default: 0" << std::endl
|
||||
<< "-n Number of iteration - specify the number of iterations for performance evaluation; optional; default: 1" << std::endl
|
||||
<< "-m output_surface_memory_type - decoded surface memory; optional; default - 0"
|
||||
@@ -725,9 +740,12 @@ int main(int argc, char** argv) {
|
||||
if (backend == DECODER_BACKEND_DEVICE) {
|
||||
create_parser(dec_info);
|
||||
create_decoder(dec_info);
|
||||
} else {
|
||||
}
|
||||
#if ENABLE_HOST_DECODE
|
||||
else {
|
||||
create_decoder_host(dec_info);
|
||||
}
|
||||
#endif
|
||||
dec_info.dump_decoded_frames = dump_output_frames;
|
||||
auto input_frames = read_frames(input_file_names);
|
||||
auto start = std::chrono::high_resolution_clock::now();
|
||||
|
||||
@@ -30,6 +30,11 @@ elseif(ROCM_PATH)
|
||||
else()
|
||||
set(ROCM_PATH /opt/rocm CACHE PATH "Default ROCm installation path")
|
||||
endif()
|
||||
# Check if lib/rocm_sysdeps/lib exists in the ROCm path which indicates ROCm installation via TheRock
|
||||
set(USING_THE_ROCK OFF)
|
||||
if(EXISTS "${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
set(USING_THE_ROCK ON)
|
||||
endif()
|
||||
# Set AMD Clang as default compiler
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED On)
|
||||
@@ -88,6 +93,10 @@ if(HIP_FOUND AND Threads_FOUND AND FFMPEG_FOUND)
|
||||
endif() #FFMpeg version >= 7.1
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
if(USING_THE_ROCK)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN;$ORIGIN/rocm_sysdeps/lib" BUILD_WITH_INSTALL_RPATH TRUE)
|
||||
endif()
|
||||
|
||||
message("-- ${White}AMD ROCm ${PROJECT_NAME} -- CMAKE_CXX_FLAGS:${CMAKE_CXX_FLAGS}${ColourReset}")
|
||||
message("-- ${White}AMD ROCm ${PROJECT_NAME} -- Link Libraries: ${LINK_LIBRARY_LIST}${ColourReset}")
|
||||
|
||||
|
||||
+27
-11
@@ -163,7 +163,23 @@ if(USING_THE_ROCK)
|
||||
set_property(TEST video_decodeRaw-VP9 PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 5 - rocDecodeNegativeApiTests
|
||||
# 5 - rocdecDecode
|
||||
add_test(
|
||||
NAME
|
||||
rocdec_Decode-HEVC
|
||||
COMMAND
|
||||
"${CMAKE_CTEST_COMMAND}"
|
||||
--build-and-test "${ROCM_PATH}/share/rocdecode/samples/rocdecDecode"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/rocdecDecode"
|
||||
--build-generator "${CMAKE_GENERATOR}"
|
||||
--test-command "rocdecdecode"
|
||||
-i ${ROCM_PATH}/share/rocdecode/frames
|
||||
)
|
||||
if(USING_THE_ROCK)
|
||||
set_property(TEST rocdec_Decode-HEVC PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 6 - rocDecodeNegativeApiTests
|
||||
add_test(
|
||||
NAME
|
||||
rocDecode_Negative_API_Tests
|
||||
@@ -180,7 +196,7 @@ endif()
|
||||
|
||||
if(FFMPEG_FOUND)
|
||||
message("-- ${Green}${PROJECT_NAME} FFmpeg found - rocdecode tests requiring FFmpeg added")
|
||||
# 6 - videoDecode HEVC
|
||||
# 7 - videoDecode HEVC
|
||||
add_test(
|
||||
NAME
|
||||
video_decode-HEVC
|
||||
@@ -196,7 +212,7 @@ if(FFMPEG_FOUND)
|
||||
set_property(TEST video_decode-HEVC PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 7 - videoDecode AVC
|
||||
# 8 - videoDecode AVC
|
||||
add_test(
|
||||
NAME
|
||||
video_decode-AVC
|
||||
@@ -212,7 +228,7 @@ if(FFMPEG_FOUND)
|
||||
set_property(TEST video_decode-AVC PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 8 - videoDecode AV1
|
||||
# 9 - videoDecode AV1
|
||||
add_test(
|
||||
NAME
|
||||
video_decode-AV1
|
||||
@@ -228,7 +244,7 @@ if(FFMPEG_FOUND)
|
||||
set_property(TEST video_decode-AV1 PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 9 - videoDecode VP9
|
||||
# 10 - videoDecode VP9
|
||||
add_test(
|
||||
NAME
|
||||
video_decode-VP9
|
||||
@@ -244,7 +260,7 @@ if(FFMPEG_FOUND)
|
||||
set_property(TEST video_decode-VP9 PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 10 - videoDecodePerf
|
||||
# 11 - videoDecodePerf
|
||||
add_test(
|
||||
NAME
|
||||
video_decodePerf-HEVC
|
||||
@@ -260,7 +276,7 @@ if(FFMPEG_FOUND)
|
||||
set_property(TEST video_decodePerf-HEVC PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 11 - videoDecodeBatch
|
||||
# 12 - videoDecodeBatch
|
||||
add_test(
|
||||
NAME
|
||||
video_decodeBatch
|
||||
@@ -276,7 +292,7 @@ if(FFMPEG_FOUND)
|
||||
set_property(TEST video_decodeBatch PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 12 - videoDecodeRGB
|
||||
# 13 - videoDecodeRGB
|
||||
add_test(
|
||||
NAME
|
||||
video_decodeRGB-HEVC
|
||||
@@ -292,7 +308,7 @@ if(FFMPEG_FOUND)
|
||||
set_property(TEST video_decodeRGB-HEVC PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 13 - videoDecodeMem
|
||||
# 14 - videoDecodeMem
|
||||
add_test(
|
||||
NAME
|
||||
video_decodeMem-HEVC
|
||||
@@ -308,7 +324,7 @@ if(FFMPEG_FOUND)
|
||||
set_property(TEST video_decodeMem-HEVC PROPERTY ENVIRONMENT "LIBVA_DRIVERS_PATH=${ROCM_PATH}/lib/rocm_sysdeps/lib")
|
||||
endif()
|
||||
|
||||
# 14 - videoDecodeRGBResize
|
||||
# 15 - videoDecodeRGBResize
|
||||
add_test(
|
||||
NAME
|
||||
video_decodeRGB-Resize
|
||||
@@ -325,7 +341,7 @@ if(FFMPEG_FOUND)
|
||||
endif()
|
||||
|
||||
if(rocdecode-host_FOUND)
|
||||
# 15 - videoDecode Host backend
|
||||
# 16 - videoDecode Host backend
|
||||
add_test(
|
||||
NAME
|
||||
video_decode-Host-Backend
|
||||
|
||||
Verwijs in nieuw issue
Block a user