leopardDm365 mt9p031 encode-demo输出
环境:开发板Leopardboard.org dm365
sdk包:DVSDK4.02
摄像头模块:LI-5M03(mt9p031)
本文档目的:使用sdk包里面的encode,demo程序输出摄像头的图像到显示器(composite 输出模式)
步骤:
1、编译内核时,指定开发板输出模式为composite,camera输入为mt9p031;
2、修改sdk包内
ti-dvsdk/dmai_2_20_00_15/packages/ti/sdo/dmai/linux/dm365/Capture.c文件
修改Capture_create函数,
把else {
ctrl.value = 0x5F4;
}
改成 else {
ctrl.value = 0x002fffff;
}
3、修改ti-dvsdk/dmai_2_20_00_15/packages/ti/sdo/dmai/linux/dm365/Resize.c文件
修改函数Previewer_continuous_config
把
prev_cont_config.input.colp_elep= IPIPE_BLUE;
prev_cont_config.input.colp_elop= IPIPE_GREEN_BLUE;
prev_cont_config.input.colp_olep= IPIPE_GREEN_RED;
prev_cont_config.input.colp_olop= IPIPE_RED;
改成
prev_cont_config.input.colp_elep= IPIPE_GREEN_BLUE;
prev_cont_config.input.colp_elop= IPIPE_BLUE;
prev_cont_config.input.colp_olep= IPIPE_RED;
prev_cont_config.input.colp_olop= IPIPE_GREEN_RED;
4、重新编译dmai,执行
sudo make dmai_clean
sudo make dmai
5、修改ti-dvsdk/dvsdk-demos_4_02_00_01/dm365/encode/Main.c文件
注释内容(或者删除)1
#if 0 //add dongxf
/* Launch interface app */
if (args.osd) {
if (launchInterface(&args) == FAILURE) {
exit(EXIT_FAILURE);
}
}
#endif //add dongxf
注释内容(或者删除)2
#if 0 // 2add dongxf
/* Create the user interface */
uiAttrs.osd = args.osd;
uiAttrs.videoStd = args.videoStd;
hUI = UI_create(&uiAttrs);
if (hUI == NULL) {
cleanup(EXIT_FAILURE);
}
/* Get configuration from QT interface if necessary */
if (args.osd) {
status = getConfigFromInterface(&args, hUI, &stopped);
if (status == FAILURE) {
ERR("Failed to get valid configuration from the GUI\n");
cleanup(EXIT_FAILURE);
}
else if (stopped == TRUE) {
cleanup(EXIT_SUCCESS);
}
}
#endif //add dongxf
注释内容(或者删除)3
// uiSetup(hUI, &args); //3 add dongxf
修改: 把numThreads = 1;
改成numThreads = 0; //add dongxf
注释内容(或者删除)4
#if 0
/* Main thread becomes the control thread */
ctrlEnv.hRendezvousInit = hRendezvousInit;
ctrlEnv.hRendezvousCleanup = hRendezvousCleanup;
ctrlEnv.hPauseProcess = hPauseProcess;
ctrlEnv.keyboard = args.keyboard;
ctrlEnv.time = args.time;
ctrlEnv.hUI = hUI;
ctrlEnv.engineName = engine->engineName;
ctrlEnv.osd = args.osd;
ret = ctrlThrFxn(&ctrlEnv);
if (ret == THREAD_FAILURE) {
status = EXIT_FAILURE;
}
#endif
并在这后面加上一个getcha();否则程序运行一会就会结束了。
注释内容(或者删除)5
#if 0 //add dongxf
if (args.osd) {
int rv;
if (hUI) {
/* Stop the UI */
UI_stop(hUI);
}
wait(&rv); /* Wait for child process to end */
}
#endif //add dongxf
注释内容(或者删除)6
#if 0 //add dongxf
if (hUI) {
UI_delete(hUI);
}
#endif //add dongxf
修改:
把captureEnv.videoInput = args.videoInput;
改成captureEnv.videoInput =Capture_Input_CAMERA;//固定设置为mt9p031输入
6、修改ti-dvsdk/dvsdk-demos_4_02_00_01/dm365/encode/Capture.c
修改函数Void *captureThrFxn(Void *arg)
在 hCapture = Capture_create(hBufTab, &cAttrs);
前面增加 cAttrs.onTheFly == TRUE;//add
7、修改完成后,重新编译
执行sudo make demos_clean
sudo make demos
之后把执行文件encode拷贝到开发板
执行
fbset -disable
./encode -v test.264 -y 1 -I 4 -k
8、需要注意的是启动开发板前需要把摄像头模块装好,并接好输出
leopard关联的sdk包是不可用以直接编译的,所以需要单独安装一个dvsdk4.02到其他的目录下
安装的时候关联编译器。安装好之后,进入sdk包目录,先执行sudo make
9、这里面的步骤:只能显示图像和编码,为了方便,已经把控制进程去掉,其他的各种效果,
需要自己仔细调试。
10、本文章欢迎转载,烦请注明出处,谢谢。
make by dongxf 2012-09-21
enjoy you~