20240827让飞凌的OK3588-C核心板在Linux R4下通过rockit工具的VI功能获取SONY索尼8530机芯的YUV图

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~default~YuanLiJiHua~Ctr-1-138923252-blog-138996416.235^v43^pc_blog_bottom_relevance_base7\&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~YuanLiJiHua~Ctr-1-138923252-blog-138996416.235^v43^pc_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~default~BlogCommendFromBaidu~Rate-6-138996416-blog-137455250.235^v43^pc_blog_bottom_relevance_base7\&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-6-138996416-blog-137455250.235^v43^pc_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~default~CTRLIST~Ctr-17-136230392-blog-129932173.235^v43^pc_blog_bottom_relevance_base7\&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Ctr-17-136230392-blog-129932173.235^v43^pc_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

相关推荐
tan180°21 分钟前
C语言整型数据在内存中的存储(22)
c语言
异构算力老群群24 分钟前
CCF推荐C类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)
大数据·c语言·开发语言·体系结构
开心工作室_kaic1 小时前
基于Vue的兴趣活动推荐APP的设计与实现_kaic
java·c语言·开发语言·数据库·python·sqlite·php
Ajiang28247353045 小时前
贪吃蛇项目实现(C语言)——附源码
c语言·开发语言
Hadoop_Liang5 小时前
xshell密钥方式连接阿里云Linux
linux·阿里云·云计算
格林威7 小时前
Baumer工业相机堡盟工业相机如何通过BGAPISDK使用短曝光功能(曝光可设置1微秒)(C语言)
c语言·开发语言·人工智能·数码相机·计算机视觉
CS_素锦少年7 小时前
Linux_kernel驱动开发11
linux·运维·驱动开发
结衣结衣.8 小时前
Linux——进程状态
linux·运维·服务器·c语言·笔记·学习
li星野8 小时前
面试问题001
linux·开发语言·面试
blaizeer8 小时前
Linux 入门:简单的基础操作
linux·运维·服务器