20240827让飞凌的OK3588-C核心板在Linux R4下通过rockit工具的VI功能获取SONY索尼8530机芯的YUV图
2024/8/27 19:40
缘起,我司使用飞凌的OK3588-C的核心板,系统是Linux R4版本。
机芯选用SONY索尼的HDMI OUT接口的8530,输出格式有BGR3/NV16。
我司选用NV16格式了。
由于代理商不给力,让我们直接找Rockchip原厂了。
当然,他们也怕在转达信息的过程中丢失了信息/失真导致更大的问题呀!^_
打深圳前台077586690899,转工程师,问题号#501046
然后Rockchip原厂的深圳办竟然没有HDMI OUT的机芯。
不过回复说Rockchip原厂什么样的场景都见过,HDMI OUT的相机肯定对接过。
让他们先用笔记本电脑的HDMI OUT模拟机芯测试,实在不行,我这里打车送过去了。
都在科技园,不太远的!
Z:\repo_RK3588_Buildroot20240508\external\rockit\mpi\example\mod\test_mpi_vi.cpp
千辛万苦编译了Rockit/VI,但是运行有问题。
Rockchip原厂提供了Demo.c,但是运行也有问题!
Rockchip原厂给人有点不是那么靠谱的感觉!
#if 1
#include <stdio.h>
#include <sys/poll.h>
#include <errno.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#include <time.h>
#include <cstring>
#include <cstdlib>
#include "rk_defines.h"
#include "rk_debug.h"
#include "rk_mpi_vi.h"
#include "rk_mpi_mb.h"
#include "rk_mpi_sys.h"
#include "rk_mpi_venc.h"
#include "rk_mpi_vpss.h"
#include "rk_mpi_vo.h"
#include "rk_mpi_rgn.h"
#include "rk_common.h"
#include "rk_comm_rgn.h"
#include "rk_comm_vi.h"
#include "rk_comm_vo.h"
#include "test_common.h"
#include "test_comm_utils.h"
#include "test_comm_argparse.h"
#include "rk_mpi_cal.h"
#include "rk_mpi_mmz.h"
static RK_S32 g_s32FrameCnt = -1;
static bool quit = false;
static void sigterm_handler(int sig) {
fprintf(stderr, "signal %d\n", sig);
quit = true;
}
RK_U64 TEST_COMM_GetNowUs() {
struct timespec time = {0, 0};
clock_gettime(CLOCK_MONOTONIC, &time);
return (RK_U64)time.tv_sec * 1000000 + (RK_U64)time.tv_nsec / 1000; /* microseconds */
}
static void *GetMediaBuffer0(void *arg) {
printf("========%s========\n", __func__);
int loopCount = 0;
int s32Ret;
RK_S32 waitTime = 330;
int pipeId = 0;
int channelId = 0;
channelId = *(int *)arg;
VIDEO_FRAME_INFO_S stViFrame;
VI_CHN_STATUS_S stChnStatus;
while (!quit) {
s32Ret = RK_MPI_VI_GetChnFrame(pipeId, channelId, &stViFrame, waitTime);
if (s32Ret == RK_SUCCESS) {
RK_U64 nowUs = TEST_COMM_GetNowUs();
void *data = RK_MPI_MB_Handle2VirAddr(stViFrame.stVFrame.pMbBlk);
RK_LOGD("RK_MPI_VI_GetChnFrame ok:data %p loop:%d seq:%d pts:%lld ms len=%d", data, loopCount,
stViFrame.stVFrame.u32TimeRef, stViFrame.stVFrame.u64PTS / 1000, stViFrame.stVFrame.u64PrivateData);
// 6.get the channel status
s32Ret = RK_MPI_VI_QueryChnStatus(pipeId, channelId, &stChnStatus);
RK_LOGD("RK_MPI_VI_QueryChnStatus ret %x, w:%d,h:%d,enable:%d," \
"current frame id:%d,input lost:%d,output lost:%d," \
"framerate:%d,vbfail:%d delay=%lldus",
s32Ret,
stChnStatus.stSize.u32Width,
stChnStatus.stSize.u32Height,
stChnStatus.bEnable,
stChnStatus.u32CurFrameID,
stChnStatus.u32InputLostFrame,
stChnStatus.u32OutputLostFrame,
stChnStatus.u32FrameRate,
stChnStatus.u32VbFail,
nowUs - stViFrame.stVFrame.u64PTS);
// 7.release the frame
s32Ret = RK_MPI_VI_ReleaseChnFrame(pipeId, channelId, &stViFrame);
if (s32Ret != RK_SUCCESS) {
RK_LOGE("RK_MPI_VI_ReleaseChnFrame fail %x", s32Ret);
}
loopCount++;
} else {
RK_LOGE("RK_MPI_VI_GetChnFrame timeout %x", s32Ret);
}
if ((g_s32FrameCnt >= 0) && (loopCount > g_s32FrameCnt))
{
quit = true;
break;
}
}
return NULL;
}
//demo板dev默认都是0,根据不同的channel 来选择不同的vi节点
int vi_dev_init() {
printf("%s\n", __func__);
int ret = 0;
int devId=0;
int pipeId = devId;
VI_DEV_ATTR_S stDevAttr;
VI_DEV_BIND_PIPE_S stBindPipe;
memset(&stDevAttr, 0, sizeof(stDevAttr));
memset(&stBindPipe, 0, sizeof(stBindPipe));
// 0. get dev config status
ret = RK_MPI_VI_GetDevAttr(devId, &stDevAttr);
if (ret == RK_ERR_VI_NOT_CONFIG) {
// 0-1.config dev
ret = RK_MPI_VI_SetDevAttr(devId, &stDevAttr);
if (ret != RK_SUCCESS) {
printf("RK_MPI_VI_SetDevAttr %x\n", ret);
return -1;
}
} else {
printf("RK_MPI_VI_SetDevAttr already\n");
}
// 1.get dev enable status
ret = RK_MPI_VI_GetDevIsEnable(devId);
if (ret != RK_SUCCESS) {
// 1-2.enable dev
ret = RK_MPI_VI_EnableDev(devId);
if (ret != RK_SUCCESS) {
printf("RK_MPI_VI_EnableDev %x\n", ret);
return -1;
}
// 1-3.bind dev/pipe
stBindPipe.u32Num = pipeId;
stBindPipe.PipeId[0] = pipeId;
ret = RK_MPI_VI_SetDevBindPipe(devId, &stBindPipe);
if (ret != RK_SUCCESS) {
printf("RK_MPI_VI_SetDevBindPipe %x\n", ret);
return -1;
}
} else {
printf("RK_MPI_VI_EnableDev already\n");
}
return 0;
}
int vi_chn_init(int channelId, int width, int height) {
int ret;
//int buf_cnt = 2;
int buf_cnt = 5;
// VI init
VI_CHN_ATTR_S vi_chn_attr;
memset(&vi_chn_attr, 0, sizeof(vi_chn_attr));
vi_chn_attr.stIspOpt.u32BufCount = buf_cnt;
// timeout
vi_chn_attr.enAllocBufType = VI_ALLOC_BUF_TYPE_EXTERNAL;
vi_chn_attr.stIspOpt.enMemoryType = VI_V4L2_MEMORY_TYPE_MMAP;//VI_V4L2_MEMORY_TYPE_MMAP;
//vi_chn_attr.stIspOpt.bNoUseLibV4L2 = TRUE;
vi_chn_attr.stSize.u32Width = width;
vi_chn_attr.stSize.u32Height = height;
//vi_chn_attr.enPixelFormat = RK_FMT_BGR888;
vi_chn_attr.enPixelFormat = RK_FMT_YUV422SP;
vi_chn_attr.enCompressMode = COMPRESS_MODE_NONE; // COMPRESS_AFBC_16x16;
vi_chn_attr.u32Depth = 2;
memcpy(vi_chn_attr.stIspOpt.aEntityName, "/dev/video8", strlen("/dev/video8"));
ret = RK_MPI_VI_SetChnAttr(0, channelId, &vi_chn_attr);
ret |= RK_MPI_VI_EnableChn(0, channelId);
if (ret) {
printf("ERROR: create VI error! ret=%d\n", ret);
return ret;
}
return ret;
}
static RK_CHAR optstr[] = "?::w:h:c:I:o:";
static void print_usage(const RK_CHAR *name) {
printf("usage example:\n");
printf("\t%s -I 0 -w 1920 -h 1080 -o /tmp/ \n", name);
printf("\t-w | --width: VI width, Default:1920\n");
printf("\t-h | --heght: VI height, Default:1080\n");
printf("\t-c | --frame_cnt: frame number of output, Default:-1\n");
printf("\t-I | --camid: camera ctx id, Default 0. 0:rkisp_mainpath,1:rkisp_selfpath,2:rkisp_bypasspath\n");
printf("\t-o | --output path, Default:NULL (folder path:/tmp)\n");
}
int main(int argc, char *argv[])
{
RK_S32 s32Ret = RK_FAILURE;
RK_U32 u32Width = 1920;
RK_U32 u32Height = 1080;
RK_S32 s32chnlId = 0;
int c;
VI_SAVE_FILE_INFO_S stDebugFile;
RK_CHAR *pOutPath = NULL;
while ((c = getopt(argc, argv, optstr)) != -1) {
switch (c) {
case 'w':
u32Width = atoi(optarg);
break;
case 'h':
u32Height = atoi(optarg);
break;
case 'I':
s32chnlId = atoi(optarg);
break;
case 'c':
g_s32FrameCnt = atoi(optarg);
break;
case 'o':
pOutPath = optarg;
break;
case '?':
default:
print_usage(argv[0]);
return 0;
}
}
printf("#Resolution: %dx%d\n", u32Width, u32Height);
printf("#Output Path: %s\n", pOutPath);
printf("#CameraIdx: %d\n\n", s32chnlId);
printf("#Frame Count to save: %d\n", g_s32FrameCnt);
signal(SIGINT, sigterm_handler);
if (RK_MPI_SYS_Init() != RK_SUCCESS) {
RK_LOGE("rk mpi sys init fail!");
goto __FAILED;
}
vi_dev_init();
vi_chn_init(s32chnlId, u32Width, u32Height);
if (pOutPath) {
stDebugFile.bCfg = RK_TRUE;
strcpy(stDebugFile.aFilePath, pOutPath);
snprintf(stDebugFile.aFileName, sizeof(stDebugFile.aFileName), "test_%d.yuv",s32chnlId);
RK_MPI_VI_ChnSaveFile(0, s32chnlId, &stDebugFile);
}
pthread_t main_thread;
pthread_create(&main_thread, NULL, GetMediaBuffer0, &s32chnlId);
while (!quit) {
usleep(50000);
}
s32Ret = RK_MPI_VI_DisableChn(0, s32chnlId);
RK_LOGE("RK_MPI_VI_DisableChn %x", s32Ret);
s32Ret = RK_MPI_VI_DisableDev(0);
RK_LOGE("RK_MPI_VI_DisableDev %x", s32Ret);
__FAILED:
RK_LOGE("test running exit:%d", s32Ret);
RK_MPI_SYS_Exit();
return 0;
}
#endif
【增加的文件】
Z:\repo_RK3588_Buildroot20240508\external\rockit\cross.cmake
cmake_minimum_required(VERSION 3.5.1)
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER "/home/forlinx/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-gcc")
SET(CMAKE_CXX_COMPILER "/home/forlinx/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-g++")
set(CMAKE_SYSTEM_PROCESSOR aarch64)
编译指令:
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$ cmake -DCMAKE_TOOLCHAIN_FILE=../cross.cmake ..
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$ make
提议:
原厂VI有更新吗?领导 想让我 送HDMI OUT的机芯去RK。万利达大厦?
1、Rockchip原厂是否在RK3588开发板上接HDMI OUT的机芯测试这个demo?
2、Rockchip有HDMI OUT的机芯吗?
把笔记本电脑的HDMI OUT接到RK3588的HDMI IN上。使用 这种方式也可以测试吧?
微调之后,程序终于可以取图了。
测试步骤:
1、给飞凌的OK3588-C核心板刷最新的Linux R4的固件。
2、替换/更新/补全Linux R4缺少/过时的so库文件。
3、将推送到/目录,准备执行。
so.bat
adb push libgraphic_lsf.so /usr/lib
adb push libpanoStitchApp.so /usr/lib
adb push librkgfx_avs.so /usr/lib
adb push libRkSwCac.so /usr/lib
adb push librockit.so /usr/lib
adb push librkAlgoDis.so /usr/lib
adb shell mkdir -p /app
adb push rk_mpi_vi_test /
adb shell chmod 777 rk_mpi_vi_test
库文件在Z:\repo_RK3588_Buildroot20240508\external\rockit\lib\lib64目录。
简单起见,可以使用adb将全部的文件都push到/usr/lib目录中。^_
执行:
root@ok3588:/#
root@ok3588:/# ./rk_mpi_vi_test -w 3840 -h 2160 -I 0 -c 2 -o /app
#Resolution: 3840x2160
#Output Path: /app
#CameraIdx: 0
#Frame Count to save: 2
rk-debug -----------------------Graphics so version=4.25.11-----------------------------
rk-debug init version=4.25.11,args[16,16,0], threadId=548256207104
arm_release_ver of this libmali is 'g6p0-01eac0', rk_so_ver is '6'.
GL Version = OpenGL ES 3.2 v1.g6p0-01eac0.ba52c908d926792b8f5fe28f383a2b03
GL Vendor = ARM
GL Renderer = Mali-LODX
rk-debug setupGraphicsRenderInRGB1555YUVTarget [6,1,0,0]
rk-debug setupGraphicsRenderInRGB888YUVTarget [9,1,0,-1]
rk-debug os_memory_size=7
rk-debug -----------------------Graphics so version=4.25.11-----------------------------
rk-debug init version=4.25.11,args[16,16,0], threadId=548136743168
GL Version = OpenGL ES 3.2 v1.g6p0-01eac0.ba52c908d926792b8f5fe28f383a2b03
GL Vendor = ARM
GL Renderer = Mali-LODX
rk-debug setupGraphicsRenderInRGB1555YUVTarget [6,1,0,0]
rk-debug setupGraphicsRenderInRGB888YUVTarget [9,1,0,-1]
rk-debug os_memory_size=7
vi_dev_init
rockit log path (null), log_size = 0
log_file = (nil)
RTVersion 00:28:06-097 {dump :064} ---------------------------------------------------------
RTVersion 00:28:06-097 {dump :065} rockit version: git-e5c70ee41 Fri Sep 15 09:17:17 2023 +0800
RTVersion 00:28:06-097 {dump :066} rockit building: built-Chu 2023-09-15 11:40:17
RTVersion 00:28:06-097 {dump :067} ---------------------------------------------------------
RKViChn 00:28:06-098 {setFrameRate :621} [vi] dev(0) ch(0) illegal param s32SrcFrameRate(0) s32DstFrameRate(0)
Using mplane plugin for capture
Using mplane plugin for capture
RTDeviceV4L2 00:28:06-111 {commitMmapBuffer :767} buf.type(1) buf.index(0) buf.memory(1) buf.m.planes(0) buf.length(16588800) mmapLength(16588800)
Using mplane plugin for capture
RTDeviceV4L2 00:28:06-112 {commitMmapBuffer :767} buf.type(1) buf.index(1) buf.memory(1) buf.m.planes(16588800) buf.length(16588800) mmapLength(16588800)
RTDeviceV4L2 00:28:06-113 {commitMmapBuffer :767} buf.type(1) buf.index(2) buf.memory(1) buf.m.planes(33177600) buf.length(16588800) mmapLength(16588800)
RTDeviceV4L2 00:28:06-114 {commitMmapBuffer :767} buf.type(1) buf.index(3) buf.memory(1) buf.m.planes(49766400) buf.length(16588800) mmapLength(16588800)
RTDeviceV4L2 00:28:06-115 {commitMmapBuffer :767} buf.type(1) buf.index(4) buf.memory(1) buf.m.planes(66355200) buf.length(16588800) mmapLength(16588800)
RKALG-I: InsertExtraBackendCreator 3
RKALG-I: --s-- rk_swcac_loglevl_set()
========GetMediaBuffer0========
RTDeviceV4L2 00:28:06-376 {read :295} tracebuffer(id=0, len=16588800, fd=0(18), pts=1686376 ms, time=1686376 ms) is received from isp
RTDeviceV4L2 00:28:06-376 {read :297} Isp Frame Info:
CamId:0, Seq:0, pts:(1686.488s)
RTIsp3x 00:28:06-497 {getIspStreamInfo :342} request RKISP_CMD_GET_STREAM_INFO, err -1 : Invalid argument
RTIsp3x 00:28:06-532 {getIspStreamInfo :342} request RKISP_CMD_GET_STREAM_INFO, err -1 : Invalid argument
RTIsp3x 00:28:06-565 {getIspStreamInfo :342} request RKISP_CMD_GET_STREAM_INFO, err -1 : Invalid argument
RTDeviceV4L2 00:28:06-577 {invoke :1057} unsupport command interrupt
RTDeviceV4L2 00:28:06-610 {invoke :1057} unsupport command interrupt
cmpi 00:28:06-745 {main :253} RK_MPI_VI_DisableChn 0
cmpi 00:28:06-745 {main :256} RK_MPI_VI_DisableDev 0
cmpi 00:28:06-745 {main :259} test running exit:0
rk-debug call distortionByGpuDeinit mInitSucee=1,threadId=548256207104
rk-debug GpuManage.refcnt=2
rk-debug call distortionByGpuDeinit mInitSucee=1,threadId=548136743168
rk-debug GpuManage.refcnt=1
rk-debug call destroyEGL
root@ok3588:/# cd app
root@ok3588:/app# ls -l
total 48600
-rw-r--r-- 1 root root 49766400 Jan 1 08:28 test_0.yuv
root@ok3588:/app#
通过adb pull拉去YUV文件到WIN11上。
D:\hdmi\20240508>adb pull /app/test_0.yuv
/app/test_0.yuv: 1 file pulled, 0 skipped. 10.8 MB/s (49766400 bytes in 4.403s)
D:\hdmi\20240508>
使用7YUV预览YUV图。
由于没有NV16这个选项,使用最接近的NV12选项,偏色了!
编译LOG:
[BEGIN] 2024/8/27 20:06:01
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$ cmake -DCMAKE_TOOLCHAIN_FILE=../cross.cmake ..
-- The C compiler identification is GNU 10.3.0
-- The CXX compiler identification is GNU 10.3.0
-- Check for working C compiler: /home/forlinx/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-gcc
-- Check for working C compiler: /home/forlinx/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /home/forlinx/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-g++
-- Check for working CXX compiler: /home/forlinx/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-buildroot-linux-gnu-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build rockit mpi
-- Build WITH linker libs for Linux
-- Configuring done
-- Generating done
-- Build files have been written to: /home/forlinx/RK3588_LV198_repo20240508/external/rockit/build
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$ make
Scanning dependencies of target rt_test_comm
[ 3%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/test_comm_argparse.cpp.o
[ 6%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/test_comm_utils.cpp.o
[ 9%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/test_comm_bmp.cpp.o
[ 12%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/test_comm_imgproc.cpp.o
[ 16%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/test_comm_sys.cpp.o
[ 19%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/test_comm_vdec.cpp.o
[ 22%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/test_comm_vo.cpp.o
[ 25%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/test_comm_ao.cpp.o
[ 29%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/tmedia/test_comm_tmd.cpp.o
[ 32%] Building CXX object mpi/example/common/CMakeFiles/rt_test_comm.dir/test_mod_vpss.cpp.o
[ 35%] Linking CXX static library librt_test_comm.a
[ 35%] Built target rt_test_comm
Scanning dependencies of target rk_mpi_adec_test
[ 38%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_adec_test.dir/test_mpi_adec.cpp.o
[ 41%] Linking CXX executable rk_mpi_adec_test
[ 41%] Built target rk_mpi_adec_test
Scanning dependencies of target rk_mpi_mb_test
[ 45%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_mb_test.dir/test_mpi_mb.cpp.o
[ 48%] Linking CXX executable rk_mpi_mb_test
[ 48%] Built target rk_mpi_mb_test
Scanning dependencies of target rk_mpi_vdec_test
[ 51%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_vdec_test.dir/test_mpi_vdec.cpp.o
[ 54%] Linking CXX executable rk_mpi_vdec_test
[ 54%] Built target rk_mpi_vdec_test
Scanning dependencies of target rk_mpi_ai_test
[ 58%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_ai_test.dir/test_mpi_ai.cpp.o
[ 61%] Linking CXX executable rk_mpi_ai_test
[ 61%] Built target rk_mpi_ai_test
Scanning dependencies of target rk_mpi_aenc_test
[ 64%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_aenc_test.dir/test_mpi_aenc.cpp.o
[ 67%] Linking CXX executable rk_mpi_aenc_test
[ 67%] Built target rk_mpi_aenc_test
Scanning dependencies of target rk_mpi_vi_test
[ 70%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_vi_test.dir/test_mpi_vi.cpp.o
[ 74%] Linking CXX executable rk_mpi_vi_test
[ 74%] Built target rk_mpi_vi_test
Scanning dependencies of target rk_mpi_sys_test
[ 77%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_sys_test.dir/test_mpi_sys.cpp.o
[ 80%] Linking CXX executable rk_mpi_sys_test
[ 80%] Built target rk_mpi_sys_test
Scanning dependencies of target rk_mpi_vo_test
[ 83%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_vo_test.dir/test_mpi_vo.cpp.o
[ 87%] Linking CXX executable rk_mpi_vo_test
[ 87%] Built target rk_mpi_vo_test
Scanning dependencies of target rk_mpi_mmz_test
[ 90%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_mmz_test.dir/test_mpi_mmz.cpp.o
[ 93%] Linking CXX executable rk_mpi_mmz_test
[ 93%] Built target rk_mpi_mmz_test
Scanning dependencies of target rk_mpi_avio_test
[ 96%] Building CXX object mpi/example/mod/CMakeFiles/rk_mpi_avio_test.dir/sys/test_sys_avio.cpp.o
[100%] Linking CXX executable rk_mpi_avio_test
[100%] Built target rk_mpi_avio_test
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$
forlinx@ubuntu20:~/RK3588_LV198_repo20240508/external/rockit/build$
[END] 2024/8/27 20:06:45
参考资料:
https://blog.csdn.net/qq_36784503/article/details/130017082
rk3588 搭建交叉编译环境
https://blog.csdn.net/baoecit/article/details/139329587
瑞芯微 RK3588 环境搭建 SDK编译 编译指定模块
https://blog.csdn.net/zfenggo/article/details/138923252?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EYuanLiJiHua%7ECtr-1-138923252-blog-138996416.235%5Ev43%5Epc_blog_bottom_relevance_base7&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EYuanLiJiHua%7ECtr-1-138923252-blog-138996416.235%5Ev43%5Epc_blog_bottom_relevance_base7&utm_relevant_index=1
https://blog.csdn.net/zfenggo/article/details/138923252
rk3568 rockit编译测试
https://blog.csdn.net/Y1anH/article/details/138996416?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-138996416-blog-137455250.235%5Ev43%5Epc_blog_bottom_relevance_base7&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-138996416-blog-137455250.235%5Ev43%5Epc_blog_bottom_relevance_base7&utm_relevant_index=12
https://blog.csdn.net/Y1anH/article/details/138996416
RK3588S HDMI显示Camera ISP流方案
https://blog.csdn.net/Y1anH/article/details/137455250
RK356X rockit_mpi解析 (一)实现HDMI输出
https://blog.csdn.net/sinat_16643223/article/details/136230392?spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ECtr-17-136230392-blog-129932173.235%5Ev43%5Epc_blog_bottom_relevance_base7&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ECtr-17-136230392-blog-129932173.235%5Ev43%5Epc_blog_bottom_relevance_base7&utm_relevant_index=18
https://blog.csdn.net/sinat_16643223/article/details/136230392
RK3588S硬编码rtsp推流
https://huaweicloud.csdn.net/635639eed3efff3090b5b453.html
RK3588编译RKMPP库+编解码测试
https://blog.csdn.net/weixin_44710103/article/details/136626877
RK3588-hdmi in