对话框多线程视频处理

redfires 2018-03-08 03:34:42
现欲设计一对话框程序,界面上有2个按钮,一个按钮用来调用SDK打开摄像头获取视频,并显示在Pic控件;另一个按钮点击后用来对视频每帧进行处理,并显示在另一个Pic控件。从摄像头获取一帧就处理一帧。现欲采用多线程来实现,不知如何实现。
注:SDK的视频采集采用的回调函数,好像不好采用定时器方式来实现。
...全文
378 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
redfires 2018-03-09
  • 打赏
  • 举报
回复
为测试,写了个对话框多线程的程序。内容是: 点击对话框界面上的按钮Button1,开启一个线程1,并在DOS窗口输出。 然而点击该按钮,并无反应。不知什么原因? 代码如下: void CSellTicketDlg::OnButton1() { // TODO: Add your control notification handler code here HANDLE hThread1; hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); CloseHandle(hThread1); InitializeCriticalSection(&g_cs); Sleep(4000); DeleteCriticalSection(&g_cs); } DWORD WINAPI Fun1Proc(LPVOID lpParameter) { while(true) { EnterCriticalSection(&g_csA); Sleep(1); if (tickets>0) { Sleep(1); cout<<"thread1 sell ticket : "<<tickets--<<endl; LeaveCriticalSection(&g_cs); } else { break; LeaveCriticalSection(&g_cs); } } return 0; }
csulizhang 2018-03-09
  • 打赏
  • 举报
回复
引用 2 楼 redfires 的回复:
@csulizhang 我就是采用你所说的方法。现在的问题是:采集和处理是两个线程,加上线程同步代码,视频只能采集几秒钟就假死;不加线程同步代码,采集正常。
不需要做线程同步呀,各搞各的,只有在入队列和出队列的时候,对队列资源进行条件锁定就可以了
csulizhang 2018-03-09
  • 打赏
  • 举报
回复
//缓存队列,用于分别存储视频和音频缓存 typedef struct tagPacketQueue { AVPacketList *first_pkt; //队头的一个packet, 注意类型不是AVPacket AVPacketList *last_pkt; //队尾packet int nb_packets; // paket个数 int size; // SDL_mutex *mutex; // SDL_cond *cond; // 条件变量 }PacketQueue; 类似这样的队列,把入队出队的资源锁做好
赵4老师 2018-03-09
  • 打赏
  • 举报
回复
《Windows核心编程》
赵4老师 2018-03-09
  • 打赏
  • 举报
回复
搜“MVC”?
redfires 2018-03-09
  • 打赏
  • 举报
回复
@csulizhang 我就是采用你所说的方法。现在的问题是:采集和处理是两个线程,加上线程同步代码,视频只能采集几秒钟就假死;不加线程同步代码,采集正常。
csulizhang 2018-03-08
  • 打赏
  • 举报
回复
这种sdk回调,因为速度很快,为了避免处理过程阻塞,建议你在回调函数里面只做数据转移,将图像数据存入队列缓冲区,正好你采用多线程,另一个线程就不断去读队列缓冲区,有视频帧就出队列,然后将数据转换成bitmap数据,渲染在pic控件上

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧