Tool/software:
I want to stream an NV12 video from Linux to DPI with video output on DPI in BT.656 format.
I prepared an OpenVX script to stream video to DPI Display from Linux:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <cstring>
#include <vector>
#include <string>
#include <TI/tivx_img_proc_kernels.h>
#include <TI/j7_display.h>
#include <app.h>
void BGR2YUV(const cv::Mat &imageBGR, cv::Mat &imageY, cv::Mat &imageUV) {
cv::Mat yuvi420;
cv::cvtColor(imageBGR, yuvi420, cv::COLOR_BGR2YUV_I420);
imageY = yuvi420(cv::Range(0, imageBGR.rows), cv::Range::all());
imageUV = yuvi420(cv::Range(yuvi420.rows * 2 / 3, yuvi420.rows), cv::Range::all())
.reshape(1, 2)
.t();
imageUV = imageUV.reshape(2, imageBGR.rows / 2);
imageUV = imageUV.clone();
}
void YUV2BGR(const cv::Mat &imageY, const cv::Mat &imageUV, cv::Mat &imageBGR) {
cv::cvtColorTwoPlane(imageY, imageUV, imageBGR, cv::COLOR_YUV2BGR_NV12);
}
vx_context createVxContext() {
// https://github.com/TexasInstruments/edgeai-tiovx-modules/blob/main/test/main.c#L116
ERROR_CHECK_STATUS(appCommonInit());
tivxInit();
tivxHostInit();
vx_context context = vxCreateContext();
ERROR_CHECK_OBJECT(context);
tivxHwaLoadKernels(context);
vxRegisterLogCallback(context, log_callback, vx_false_e);
vxAddLogEntry((vx_reference) context, VX_SUCCESS, "Initialized OpenVX logging!\n");
return context;
}
void dsi_stream(const std::string &video_path) {
/**
* Initialize the VideoCapture object
*/
std::cout << "DSI stream video: " << video_path << std::endl;
cv::VideoCapture capture(video_path);
cv::Mat currFrame, currFrameY, currFrameUV;
int width = static_cast<int>(capture.get(cv::CAP_PROP_FRAME_WIDTH));
int height = static_cast<int>(capture.get(cv::CAP_PROP_FRAME_HEIGHT));
auto frame_pos = capture.get(cv::CAP_PROP_POS_FRAMES);
auto frame_count = capture.get(cv::CAP_PROP_FRAME_COUNT);
std::cout << "Video '" << video_path << "': res [" << width << 'x' << height << "] frames " << frame_count
<< std::endl;
/**********************************************
* Initialize OpenVX
**********************************************/
auto context = createVxContext();
auto graph = vxCreateGraph(context);
ERROR_CHECK_OBJECT(graph);
// Input node
auto displayImage = vxCreateImage(context, width, height, VX_DF_IMAGE_NV12);
ERROR_CHECK_OBJECT(displayImage);
/**********************************************
* Display initialization
**********************************************/
tivx_display_params_t display_params{};
memset(&display_params, 0, sizeof(tivx_display_params_t));
// Operation Mode of display kernel. Refer \ref Display_opMode for values
display_params.opMode = TIVX_KERNEL_DISPLAY_ZERO_BUFFER_COPY_MODE;
// 0:VID1, 1:VIDL1, 2:VID2 and 3:VIDL2
display_params.pipeId = 2;
// Horizontal Size of picture at display output
display_params.outWidth = 1080;
// Vertical Size of picture at display output
display_params.outHeight = 1920;
// X position of the video buffer
display_params.posX = 0;
// Y position of the video buffer
display_params.posY = 0;
// Flag to enable cropping
// display_params.enableCropping = 0;
// Crop parameters
// display_params.cropPrms = {0, 0, 0, 0};
auto display_param_obj = vxCreateUserDataObject(context, "tivx_display_params_t",
sizeof(tivx_display_params_t), &display_params);
// Output node
auto displayNode = tivxDisplayNode(graph, display_param_obj, displayImage);
ERROR_CHECK_OBJECT(displayNode);
ERROR_CHECK_STATUS(vxSetNodeTarget(displayNode, VX_TARGET_STRING, TIVX_TARGET_DISPLAY2));
std::cout << "Display Set Target -> DONE" << std::endl;
ERROR_CHECK_STATUS(vxVerifyGraph(graph));
std::cout << "Verified OpenVX graph -- Success" << std::endl;
/*********************************************
* Process Video
*********************************************/
int frameIndex = 0;
std::cout << "Start streaming\n" << std::endl;
while (capture.isOpened()) {
capture >> currFrame;
if (currFrame.empty() || currFrame.data == nullptr) {
break;
}
BGR2YUV(currFrame, currFrameY, currFrameUV);
loadVxNV12(displayImage, currFrameY, currFrameUV);
frame_pos = capture.get(cv::CAP_PROP_POS_FRAMES);
std::cout << "\r "
<< "\rProgress: " << frame_pos << "/" << frame_count << std::flush;
ERROR_CHECK_STATUS(vxProcessGraph(graph));
frameIndex++;
}
std::cout << "End streaming" << std::endl;
/**********************************************
* DeInitialize OpenVX END
**********************************************/
ERROR_CHECK_STATUS(vxReleaseImage(&displayImage));
ERROR_CHECK_STATUS(vxReleaseUserDataObject(&display_param_obj));
ERROR_CHECK_STATUS(vxReleaseGraph(&graph));
releaseVxContext(context);
}
int main(int argc, char *argv[]) {
if (argc != 2) {
std::cerr << "Enter input file path as parameter" << std::endl;
exit(1);
}
dsi_stream(argv[1]);
return 0;
}
Logs from vision apps init:
/opt/edgeai-gst-apps# . /opt/vision_apps/apps/basic_demos/app_linux_fs_files/vision_apps_init.sh
[MCU2_0] 24.150341 s: CIO: Init ... Done !!!
[MCU2_0] 24.150391 s: ### CPU Frequency = 1000000000 Hz
[MCU2_0] 24.150422 s: CPU is running FreeRTOS
[MCU2_0] 24.150443 s: APP: Init ... !!!
[MCU2_0] 24.150463 s: SCICLIENT: Init ... !!!
[MCU2_0] 24.150580 s: SCICLIENT: DMSC FW version [9.0.6--v09.00.06 (Kool Koala)]
[MCU2_0] 24.150611 s: SCICLIENT: DMSC FW revision 0x9
[MCU2_0] 24.150638 s: SCICLIENT: DMSC FW ABI revision 3.1
[MCU2_0] 24.150670 s: SCICLIENT: Init ... Done !!!
[MCU2_0] 24.150693 s: UDMA: Init ... !!!
[MCU2_0] 24.151481 s: UDMA: Init ... Done !!!
[MCU2_0] 24.151513 s: UDMA: Init ... !!!
[MCU2_0] 24.151956 s: UDMA: Init for CSITX/CSIRX ... Done !!!
[MCU2_0] 24.152010 s: MEM: Init ... !!!
[MCU2_0] 24.152046 s: MEM: Created heap (DDR_LOCAL_MEM, id=0, flags=0x00000004) @ d9000000 of size 16777216 bytes !!!
[MCU2_0] 24.152105 s: MEM: Created heap (L3_MEM, id=1, flags=0x00000000) @ 60000000 of size 524288 bytes !!!
[MCU2_0] 24.152161 s: MEM: Init ... Done !!!
[MCU2_0] 24.152184 s: IPC: Init ... !!!
[MCU2_0] 24.152232 s: IPC: 5 CPUs participating in IPC !!!
[MCU2_0] 24.152266 s: IPC: Waiting for HLOS to be ready ... !!!
[MCU2_0] 24.152296 s: IPC: HLOS is ready !!!
[MCU2_0] 24.161601 s: IPC: Init ... Done !!!
[MCU2_0] 24.161641 s: APP: Syncing with 4 CPUs ... !!!
[MCU2_0] 24.325563 s: APP: Syncing with 4 CPUs ... Done !!!
[MCU2_0] 24.325598 s: REMOTE_SERVICE: Init ... !!!
[MCU2_0] 24.327033 s: REMOTE_SERVICE: Init ... Done !!!
[MCU2_0] 24.327067 s: FVID2: Init ... !!!
[MCU2_0] 24.327124 s: FVID2: Init ... Done !!!
[MCU2_0] 24.327149 s: VHWA: VPAC Init ... !!!
[MCU2_0] 24.327172 s: SCICLIENT: Sciclient_pmSetModuleState module=361 state=2
[MCU2_0] 24.327284 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_0] 24.327352 s: VHWA: LDC Init ... !!!
[MCU2_0] 24.330034 s: VHWA: LDC Init ... Done !!!
[MCU2_0] 24.330071 s: VHWA: MSC Init ... !!!
[MCU2_0] 24.338563 s: VHWA: MSC Init ... Done !!!
[MCU2_0] 24.338598 s: VHWA: NF Init ... !!!
[MCU2_0] 24.339483 s: VHWA: NF Init ... Done !!!
[MCU2_0] 24.339514 s: VHWA: VISS Init ... !!!
[MCU2_0] 24.346228 s: VHWA: VISS Init ... Done !!!
[MCU2_0] 24.346270 s: VHWA: VPAC Init ... Done !!!
[MCU2_0] 24.346306 s: VX_ZONE_INIT:Enabled
[MCU2_0] 24.346331 s: VX_ZONE_ERROR:Enabled
[MCU2_0] 24.346354 s: VX_ZONE_WARNING:Enabled
[MCU2_0] 24.347383 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target MCU2-0
[MCU2_0] 24.347582 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_NF
[MCU2_0] 24.347769 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_LDC1
[MCU2_0] 24.347951 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_MSC1
[MCU2_0] 24.348146 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_MSC2
[MCU2_0] 24.348377 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target VPAC_VISS1
[MCU2_0] 24.348572 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE1
[MCU2_0] 24.348765 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE2
[MCU2_0] 24.348960 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DISPLAY1
[MCU2_0] 24.349160 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DISPLAY2
[MCU2_0] 24.349351 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CSITX
[MCU2_0] 24.349552 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE3
[MCU2_0] 24.349755 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE4
[MCU2_0] 24.349951 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE5
[MCU2_0] 24.350164 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE6
[MCU2_0] 24.350358 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE7
[MCU2_0] 24.350557 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CAPTURE8
[MCU2_0] 24.350734 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DSS_M2M1
[MCU2_0] 24.350903 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DSS_M2M2
[MCU2_0] 24.351089 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DSS_M2M3
[MCU2_0] 24.351263 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DSS_M2M4
[MCU2_0] 24.351428 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target CSITX2
[MCU2_0] 24.351468 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!
[MCU2_0] 24.351497 s: APP: OpenVX Target kernel init ... !!!
[MCU2_0] 24.377526 s: APP: OpenVX Target kernel init ... Done !!!
[MCU2_0] 24.377559 s: VISS REMOTE SERVICE: Init ... !!!
[MCU2_0] 24.377620 s: VISS REMOTE SERVICE: Init ... Done !!!
[MCU2_0] 24.377647 s: UDMA Copy: Init ... !!!
[MCU2_0] 24.378465 s: UDMA Copy: Init ... Done !!!
[MCU2_0] 24.378530 s: APP: Init ... Done !!!
[MCU2_0] 24.378556 s: APP: Run ... !!!
[MCU2_0] 24.378577 s: IPC: Starting echo test ...
[MCU2_0] 24.380984 s: APP: Run ... Done !!!
[MCU2_0] 24.381641 s: IPC: Echo status: mpu1_0[x] mcu2_0[s] mcu2_1[P] C7X_1[.] C7X_2[.]
[MCU2_0] 24.381717 s: IPC: Echo status: mpu1_0[x] mcu2_0[s] mcu2_1[P] C7X_1[P] C7X_2[.]
[MCU2_0] 24.381785 s: IPC: Echo status: mpu1_0[x] mcu2_0[s] mcu2_1[P] C7X_1[P] C7X_2[P]
[MCU2_1] 24.314827 s: CIO: Init ... Done !!!
[MCU2_1] 24.314877 s: ### CPU Frequency = 1000000000 Hz
[MCU2_1] 24.314908 s: CPU is running FreeRTOS
[MCU2_1] 24.314928 s: APP: Init ... !!!
[MCU2_1] 24.314948 s: SCICLIENT: Init ... !!!
[MCU2_1] 24.315062 s: SCICLIENT: DMSC FW version [9.0.6--v09.00.06 (Kool Koala)]
[MCU2_1] 24.315095 s: SCICLIENT: DMSC FW revision 0x9
[MCU2_1] 24.315122 s: SCICLIENT: DMSC FW ABI revision 3.1
[MCU2_1] 24.315152 s: SCICLIENT: Init ... Done !!!
[MCU2_1] 24.315176 s: UDMA: Init ... !!!
[MCU2_1] 24.315997 s: UDMA: Init ... Done !!!
[MCU2_1] 24.316045 s: MEM: Init ... !!!
[MCU2_1] 24.316081 s: MEM: Created heap (DDR_LOCAL_MEM, id=0, flags=0x00000004) @ da000000 of size 16777216 bytes !!!
[MCU2_1] 24.316138 s: MEM: Created heap (L3_MEM, id=1, flags=0x00000001) @ 60080000 of size 524288 bytes !!!
[MCU2_1] 24.316188 s: MEM: Init ... Done !!!
[MCU2_1] 24.316210 s: IPC: Init ... !!!
[MCU2_1] 24.316256 s: IPC: 5 CPUs participating in IPC !!!
[MCU2_1] 24.316290 s: IPC: Waiting for HLOS to be ready ... !!!
[MCU2_1] 24.316317 s: IPC: HLOS is ready !!!
[MCU2_1] 24.325490 s: IPC: Init ... Done !!!
[MCU2_1] 24.325529 s: APP: Syncing with 4 CPUs ... !!!
[MCU2_1] 24.325563 s: APP: Syncing with 4 CPUs ... Done !!!
[MCU2_1] 24.325590 s: REMOTE_SERVICE: Init ... !!!
[MCU2_1] 24.326880 s: REMOTE_SERVICE: Init ... Done !!!
[MCU2_1] 24.326917 s: FVID2: Init ... !!!
[MCU2_1] 24.326969 s: FVID2: Init ... Done !!!
[MCU2_1] 24.326991 s: VHWA: DMPAC: Init ... !!!
[MCU2_1] 24.327012 s: SCICLIENT: Sciclient_pmSetModuleState module=58 state=2
[MCU2_1] 24.327173 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_1] 24.327203 s: SCICLIENT: Sciclient_pmSetModuleState module=62 state=2
[MCU2_1] 24.327309 s: SCICLIENT: Sciclient_pmSetModuleState success
[MCU2_1] 24.327378 s: VHWA: DOF Init ... !!!
[MCU2_1] 24.331481 s: VHWA: DOF Init ... Done !!!
[MCU2_1] 24.331514 s: VHWA: SDE Init ... !!!
[MCU2_1] 24.332754 s: VHWA: SDE Init ... Done !!!
[MCU2_1] 24.332785 s: VHWA: DMPAC: Init ... Done !!!
[MCU2_1] 24.332819 s: VX_ZONE_INIT:Enabled
[MCU2_1] 24.332844 s: VX_ZONE_ERROR:Enabled
[MCU2_1] 24.332867 s: VX_ZONE_WARNING:Enabled
[MCU2_1] 24.333875 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target MCU2-1
[MCU2_1] 24.334053 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DMPAC_SDE
[MCU2_1] 24.334218 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:66] Added target DMPAC_DOF
[MCU2_1] 24.334258 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!
[MCU2_1] 24.334286 s: APP: OpenVX Target kernel init ... !!!
[MCU2_1] 24.334524 s: APP: OpenVX Target kernel init ... Done !!!
[MCU2_1] 24.334554 s: UDMA Copy: Init ... !!!
[MCU2_1] 24.335824 s: UDMA Copy: Init ... Done !!!
[MCU2_1] 24.335861 s: APP: Init ... Done !!!
[MCU2_1] 24.335884 s: APP: Run ... !!!
[MCU2_1] 24.335904 s: IPC: Starting echo test ...
[MCU2_1] 24.337973 s: APP: Run ... Done !!!
[MCU2_1] 24.338497 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[s] C7X_1[P] C7X_2[.]
[MCU2_1] 24.338575 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[s] C7X_1[P] C7X_2[P]
[MCU2_1] 24.381583 s: IPC: Echo status: mpu1_0[x] mcu2_0[P] mcu2_1[s] C7X_1[P] C7X_2[P]
[C7x_1 ] 23.379794 s: CIO: Init ... Done !!!
[C7x_1 ] 23.379811 s: ### CPU Frequency = 1000000000 Hz
[C7x_1 ] 23.379822 s: CPU is running FreeRTOS
[C7x_1 ] 23.379831 s: APP: Init ... !!!
[C7x_1 ] 23.379839 s: SCICLIENT: Init ... !!!
[C7x_1 ] 23.379940 s: SCICLIENT: DMSC FW version [9.0.6--v09.00.06 (Kool Koala)]
[C7x_1 ] 23.379954 s: SCICLIENT: DMSC FW revision 0x9
[C7x_1 ] 23.379965 s: SCICLIENT: DMSC FW ABI revision 3.1
[C7x_1 ] 23.379977 s: SCICLIENT: Init ... Done !!!
[C7x_1 ] 23.379986 s: UDMA: Init ... !!!
[C7x_1 ] 23.380717 s: UDMA: Init ... Done !!!
[C7x_1 ] 23.380730 s: MEM: Init ... !!!
[C7x_1 ] 23.380742 s: MEM: Created heap (DDR_LOCAL_MEM, id=0, flags=0x00000004) @ 117000000 of size 268435456 bytes !!!
[C7x_1 ] 23.380765 s: MEM: Created heap (L3_MEM, id=1, flags=0x00000001) @ 70020000 of size 3964928 bytes !!!
[C7x_1 ] 23.380784 s: MEM: Created heap (L2_MEM, id=2, flags=0x00000001) @ 64800000 of size 458752 bytes !!!
[C7x_1 ] 23.380802 s: MEM: Created heap (L1_MEM, id=3, flags=0x00000001) @ 64e00000 of size 16384 bytes !!!
[C7x_1 ] 23.380819 s: MEM: Created heap (DDR_SCRATCH_MEM, id=4, flags=0x00000001) @ 100000000 of size 385875968 bytes !!!
[C7x_1 ] 23.380838 s: MEM: Init ... Done !!!
[C7x_1 ] 23.380847 s: IPC: Init ... !!!
[C7x_1 ] 23.380860 s: IPC: 5 CPUs participating in IPC !!!
[C7x_1 ] 23.380875 s: IPC: Waiting for HLOS to be ready ... !!!
[C7x_1 ] 23.380888 s: IPC: HLOS is ready !!!
[C7x_1 ] 23.382462 s: IPC: Init ... Done !!!
[C7x_1 ] 23.382477 s: APP: Syncing with 4 CPUs ... !!!
[C7x_1 ] 24.325564 s: APP: Syncing with 4 CPUs ... Done !!!
[C7x_1 ] 24.325581 s: REMOTE_SERVICE: Init ... !!!
[C7x_1 ] 24.325718 s: REMOTE_SERVICE: Init ... Done !!!
[C7x_1 ] 24.325740 s: VX_ZONE_INIT:Enabled
[C7x_1 ] 24.325773 s: VX_ZONE_ERROR:Enabled
[C7x_1 ] 24.325784 s: VX_ZONE_WARNING:Enabled
[C7x_1 ] 24.325985 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1
[C7x_1 ] 24.326046 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_2
[C7x_1 ] 24.326102 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_3
[C7x_1 ] 24.326162 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_4
[C7x_1 ] 24.326220 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_5
[C7x_1 ] 24.326278 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_6
[C7x_1 ] 24.326336 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_7
[C7x_1 ] 24.326393 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP_C7-1_PRI_8
[C7x_1 ] 24.326416 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!
[C7x_1 ] 24.326430 s: APP: OpenVX Target kernel init ... !!!
[C7x_1 ] 24.326558 s: APP: OpenVX Target kernel init ... Done !!!
[C7x_1 ] 24.326570 s: APP: Init ... Done !!!
[C7x_1 ] 24.326580 s: APP: Run ... !!!
[C7x_1 ] 24.326589 s: IPC: Starting echo test ...
[C7x_1 ] 24.326707 s: APP: Run ... Done !!!
[C7x_1 ] 24.327517 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[x] C7X_1[s] C7X_2[P]
[C7x_1 ] 24.338406 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[P] C7X_1[s] C7X_2[P]
[C7x_1 ] 24.381535 s: IPC: Echo status: mpu1_0[x] mcu2_0[P] mcu2_1[P] C7X_1[s] C7X_2[P]
[C7x_2 ] 23.697315 s: CIO: Init ... Done !!!
[C7x_2 ] 23.697330 s: ### CPU Frequency = 1000000000 Hz
[C7x_2 ] 23.697342 s: CPU is running FreeRTOS
[C7x_2 ] 23.697351 s: APP: Init ... !!!
[C7x_2 ] 23.697359 s: SCICLIENT: Init ... !!!
[C7x_2 ] 23.697455 s: SCICLIENT: DMSC FW version [9.0.6--v09.00.06 (Kool Koala)]
[C7x_2 ] 23.697470 s: SCICLIENT: DMSC FW revision 0x9
[C7x_2 ] 23.697480 s: SCICLIENT: DMSC FW ABI revision 3.1
[C7x_2 ] 23.697491 s: SCICLIENT: Init ... Done !!!
[C7x_2 ] 23.697501 s: UDMA: Init ... !!!
[C7x_2 ] 23.698214 s: UDMA: Init ... Done !!!
[C7x_2 ] 23.698228 s: MEM: Init ... !!!
[C7x_2 ] 23.698239 s: MEM: Created heap (DDR_LOCAL_MEM, id=0, flags=0x00000004) @ 127000000 of size 16777216 bytes !!!
[C7x_2 ] 23.698260 s: MEM: Created heap (L2_MEM, id=2, flags=0x00000001) @ 65800000 of size 458752 bytes !!!
[C7x_2 ] 23.698278 s: MEM: Created heap (L1_MEM, id=3, flags=0x00000001) @ 65e00000 of size 16384 bytes !!!
[C7x_2 ] 23.698297 s: MEM: Created heap (DDR_SCRATCH_MEM, id=4, flags=0x00000001) @ 128000000 of size 67108864 bytes !!!
[C7x_2 ] 23.698317 s: MEM: Init ... Done !!!
[C7x_2 ] 23.698325 s: IPC: Init ... !!!
[C7x_2 ] 23.698339 s: IPC: 5 CPUs participating in IPC !!!
[C7x_2 ] 23.698354 s: IPC: Waiting for HLOS to be ready ... !!!
[C7x_2 ] 23.698366 s: IPC: HLOS is ready !!!
[C7x_2 ] 23.699924 s: IPC: Init ... Done !!!
[C7x_2 ] 23.699938 s: APP: Syncing with 4 CPUs ... !!!
[C7x_2 ] 24.325564 s: APP: Syncing with 4 CPUs ... Done !!!
[C7x_2 ] 24.325583 s: REMOTE_SERVICE: Init ... !!!
[C7x_2 ] 24.325724 s: REMOTE_SERVICE: Init ... Done !!!
[C7x_2 ] 24.325748 s: VX_ZONE_INIT:Enabled
[C7x_2 ] 24.325783 s: VX_ZONE_ERROR:Enabled
[C7x_2 ] 24.325797 s: VX_ZONE_WARNING:Enabled
[C7x_2 ] 24.326249 s: VX_ZONE_INIT:[tivxPlatformCreateTargetId:59] Added target DSP-1
[C7x_2 ] 24.326273 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!
[C7x_2 ] 24.326286 s: APP: OpenVX Target kernel init ... !!!
[C7x_2 ] 24.326533 s: APP: OpenVX Target kernel init ... Done !!!
[C7x_2 ] 24.326548 s: UDMA Copy: Init ... !!!
[C7x_2 ] 24.327120 s: UDMA Copy: Init ... Done !!!
[C7x_2 ] 24.327134 s: APP: Init ... Done !!!
[C7x_2 ] 24.327145 s: APP: Run ... !!!
[C7x_2 ] 24.327155 s: IPC: Starting echo test ...
[C7x_2 ] 24.327274 s: APP: Run ... Done !!!
[C7x_2 ] 24.327526 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[x] C7X_1[P] C7X_2[s]
[C7x_2 ] 24.338456 s: IPC: Echo status: mpu1_0[x] mcu2_0[x] mcu2_1[P] C7X_1[P] C7X_2[s]
[C7x_2 ] 24.381557 s: IPC: Echo status: mpu1_0[x] mcu2_0[P] mcu2_1[P] C7X_1[P] C7X_2[s]
<App launch loggs>
[MCU2_0] 166.350534 s: VX_ZONE_ERROR:[ownTargetKernelInstanceAlloc:116] kernel com.ti.hwa.display has not been registered on this CPU
[MCU2_0] 166.350588 s: VX_ZONE_ERROR:[ownTargetKernelInstanceAlloc:117] Please register this kernel on the appropriate target core
[MCU2_0] 166.350638 s: VX_ZONE_ERROR:[ownTargetNodeDescNodeCreate:761] target_kernel_instance is NULL
Logs from my OpenVX app run:
$ ./build/VideoStabMain ./cvbs_monitor/data/frieren.mkv DSI stream video: ./cvbs_monitor/data/frieren.mkv Video './cvbs_monitor/data/frieren.mkv': res [1920x1080] frames 37032 APP: Init ... !!! MEM: Init ... !!! MEM: Initialized DMA HEAP (fd=5) !!! MEM: Init ... Done !!! IPC: Init ... !!! IPC: Init ... Done !!! REMOTE_SERVICE: Init ... !!! REMOTE_SERVICE: Init ... Done !!! 166.333711 s: GTC Frequency = 200 MHz APP: Init ... Done !!! 166.336849 s: VX_ZONE_INIT:Enabled 166.336901 s: VX_ZONE_ERROR:Enabled 166.336915 s: VX_ZONE_WARNING:Enabled 166.338090 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!! 166.339789 s: VX_ZONE_INIT:[tivxHostInitLocal:93] Initialization Done for HOST !!! 166.346818 s: VX_ZONE_WARNING:[vxAddLogEntry:61] Invalid status code; VX_SUCCESS status is not logged! Display Set Target -> DONE 166.350839 s: VX_ZONE_ERROR:[ownContextSendCmd:799] Command ack message returned failure cmd_status: -7 166.350869 s: VX_ZONE_ERROR:[ownContextSendCmd:835] tivxEventWait() failed. 166.350879 s: VX_ZONE_ERROR:[ownNodeKernelInit:527] Target kernel, TIVX_CMD_NODE_CREATE failed for node node_102 166.351278 s: VX_ZONE_ERROR:[ownNodeKernelInit:528] Please be sure the target callbacks have been registered for this core 166.351295 s: VX_ZONE_ERROR:[ownNodeKernelInit:529] If the target callbacks have been registered, please ensure no errors are occurring within the create callback of this kernel 166.351538 s: VX_ZONE_ERROR:[ownGraphNodeKernelInit:583] kernel init for node 0, kernel com.ti.hwa.display ... failed !!! 166.351572 s: VX_ZONE_ERROR:[vxVerifyGraph:2055] Node kernel init failed 166.351616 s: VX_ZONE_ERROR:[vxVerifyGraph:2109] Graph verify failed ERROR: failed with status = (-1) at /root/j7ros_home/stabilization/cvbs_monitor/main.cpp#93
I found that by default only the eDP DSS output is enabled in RTOS init so I need to disable eDP and enable the HDMI option in RTOS.
For this, I need to rebuild and replace the MCU2_0 FW.
I tried to rebuild the RTOS SDK and install the default MCU2_0 FW and it just crashed on boot during the Linux remote processor init stage.
Or when I stoped the MCU2_0, switched FW, and started MCU2_0 it also failed. Logs from dmesg from this case:
[14079.870191] remoteproc remoteproc3: stopped remote processor 5c00000.r5f [14368.228214] remoteproc remoteproc3: powering up 5c00000.r5f [14368.237420] remoteproc remoteproc3: Booting fw image j721s2-main-r5f0_0-fw, size 5627968 client_loop: send disconnect: Broken pipe
Further findings show that I need to rebuild tispi.bin and replace it too. According to this TI docs page by link.
I am not sure how to do this and what extra steps are needed to update an FW of the MCU (R5 core).
My question is how to build and update FW on one of the MCUs?
And, Is my OpenVX app failing just because the DPI option is not enabled or do I have another problem?
I specify the DISPLAY1 target and it should be present.