UI界面下视频模式切换(多进程)
来源:互联网 发布:魔兽争霸软件 编辑:程序博客网 时间:2024/06/10 23:18
UI界面启动后视频也要叠加上来,视频有3种模式,预览、录像和播放。UI界面要始终存在,但是视频模式可以切换。Qt界面作为父进程始终运行于桌面,调用exec函数族启动视频模式子进程,这个子进程实际是执行“telescope”二进制文件,"telescope"源文件实际上使用main(int argc, char *argv[])接受命令行参数来判断在哪种视频模式下运行。
在qt工程的main.cpp文件中
int main(int argc, char *argv[]){...char *arg[10] = {"./telescope >> /mnt/sd/kd-log"}; int pid; pid = fork(); if (pid == -1) { printf("Could not fork child process.\n"); } else if (pid == 0) { execv("./telescope", arg) ;}return app.exec();}
qt中也提供了接口QProcess::startDetached("./telescope>> /mnt/sd/kd-log");也可启动子进程
telescope源文件程序:
#include <unistd.h> #include <signal.h> #include <sys/param.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <time.h> #define RET_NONE #define RET_OK 0#define RET_ERROR -1#define WORK_PATH "/home/root"#define CMD_PREVIEW "./encode -v 110203-112233.264 -I 1 -y 2 -k -o -f"#define CMD_RECORD "./encode -v 110203-112233.264 -I 1 -y 2 -k -o"#define CMD_REPLAY "./decode -v 110203-112233.264 -y 2 -O composite -k -o"#define MODE_PREVIEW 'p'#define MODE_RECORD 'r'#define MODE_REPLAY 'd'int video_run(char videoModeNew){ int pid; FILE *fp; time_t t; static int videoModeCur=0; int rev=0; static int i=0; if((fp=fopen("/mnt/sd/video_dbg.log","a")) < 0) return -2; t=time(0); if(MODE_PREVIEW == videoModeNew){ system(CMD_PREVIEW); fprintf(fp,"%d Preview %s \n", i++,asctime(localtime(&t)) ); } else if(MODE_RECORD == videoModeNew){ system(CMD_RECORD); fprintf(fp,"%d Record %s \n \n", i++, asctime(localtime(&t)) ); } else{ system(CMD_REPLAY); fprintf(fp,"%d Replay %s \n", i++, asctime(localtime(&t)) ); } fclose(fp); return RET_OK;}// 2.telescope main()main(int argc, char *argv[]) { FILE *fp; time_t t; int i=0; char video_module = 'p'; if(argc == 2 && (argv[1][0]=='p' || argv[1][0]=='r' || argv[1][0]=='d')) { video_module = argv[1][0];} // 2 switch between encode and decode modewhile(1){ // 2.1 execute encode/decode mode video_run(video_module);// 2.2 execute encode/decode mode if((fp=fopen("/tmp/run_video_module","r")) != NULL) { video_module=fgetc(fp); printf("sw video_mode: %c\n",video_module); fclose(fp); } else printf("Fail to sw video_mode: %c\n",video_module); sleep(1);} }
在int video_run(char videoModeNew)函数中调用system函数来执行二进制文件,这里需要两个bin文件,encode和decode。encode分为预览和录像模式,录像模式相比预览模式多了一个memory即存入内存的线程,decode是播放模式下的进程。
主函数中的while循环实时读取文件中字符,把读到的字符赋值给video_module作为被调用video_run(char videoModeNew)函数的入参以此来启动不同的进程来切换视频模式。
0 0
- UI界面下视频模式切换(多进程)
- 13h视频模式下的几个宏
- 一种局部ui界面切换解决方案
- Xcode6 下实现界面切换
- 讲一下DOS下SVGA视频模式的设置问题
- Linux内核下进程切换
- linux下的进程切换
- Linux内核下进程切换
- Android UI设计 选项卡实现界面切换
- Android UI设计 使用选项卡实现界面切换
- Lync / Skype for Business登录界面UI切换
- UI入门——简单登陆界面,注册界面及找回密码界面铺设以及切换
- dos界面下切换输入法的技巧
- Ubuntu下管理员界面的切换
- 360UI界面框架升级-纪念下
- 多进程UI设计
- QT creater之主界面下的界面切换
- BCG界面库下的Windows8 UI界面样式
- iOS9 HTTP 不能正常使用的解决办法
- windows和linux服务器互传文件-使用PSCP
- LA_7401_HDU_5573_BinaryTree
- const——指针和引用以及复合类型
- Gearman 实现分布式处理
- UI界面下视频模式切换(多进程)
- rocketmq3.26研究之六DefaultMQPushConsumer消费流程
- 大数据项目1:客户回复预测与效益最大化
- ZOJ1654 ZOJ那个___不让我过!
- JFinal 中使用 Dubbo —— 1 改造JFinal Demo
- SurfaceView浅析
- 学习博客链接
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)
- 卡牌游戏源代码(原创)(控制台)