查看: 12613|回复: 0
收起左侧

打开摄像头死机的软件解决方法

[复制链接]
发表于 2013-11-27 14:02:56 | 显示全部楼层 |阅读模式
   最近在调试CameraDshowApp.exe的时候遇到了一个问题,当camera的分辨率为800*600,640*480或其他分辨率更小时,多次打开CameraDshowApp.exe没有什么问题,当camera分辨率为1280*1024或更高时,第一次运行CameraDshowApp.exe没有问题,第二次打开系统就会死掉。很明显问题是出在系统内存上,但遗憾的是没有找到问题的根源在哪里,对DirectShow还是不熟啊!
   打开CameraDshowApp.exe时界面如下:
   
通过验证发现只要去掉选项:Video Encoder,File Mux,AudioCapture,Audio Encoder就能解决camera高分辨时多次打开CameraDshowApp.exe系统死机的问题。但是每次都要这样操作就太麻烦了,可以在程序里面完成,修改的文件为D:/WINCE600/PRIVATE/TEST/MULTIMEDIA/DIRECTX/DSHOW/CAMERA/CAMERAAPP/main.c 代码如下:

            hID = GetDlgItem(hDlg, IDC_FILEMUXCHECK);
            SendMessage(hID, BM_SETCHECK, BST_UNCHECKED, 0);

            hID = GetDlgItem(hDlg, IDC_AUDIOCAPTURE);
            SendMessage(hID, BM_SETCHECK, BST_UNCHECKED, 0);

            hID = GetDlgItem(hDlg, IDC_VIDEOENCODER);
            SendMessage(hID, BM_SETCHECK, BST_UNCHECKED, 0);

            hID = GetDlgItem(hDlg, IDC_AUDIOENCODER);
            SendMessage(hID, BM_SETCHECK, BST_UNCHECKED, 0);
  以上代码是在初始化时通过SendMessage向窗体控件CheckBox发送消息不选择上述四项;

           g_dwFilters = VIDEO_CAPTURE_FILTER | VIDEO_RENDERER | STILL_IMAGE_SINK ;
   设置默认的滤波器为渲染滤波器,捕获滤波器和拍照滤波器。
    通过这些代码也能发现问题就出在这里,默认的g_dwFilters还包括了Video Encoder,File Mux,AudioCapture,Audio Encoder对应的滤波器,当包括了这些滤波器时系统要分配更多的内存,或超过了CameraDshowApp.exe默认分配的内存。以至于camera输出高分辨图像时会出现异常,如果哪位知道问题的根源,或CameraDshowApp.exe中是如何分配内存的请告诉我,谢谢了。

高级模式
B Color Image Link Quote Code Smilies @朋友

本版积分规则

在线客服

客服电话

欢迎来电咨询

188-9985 8350

微信关注

手机APP程序:
扫码下载访问

微信公众平台:
摄像头之家公众号

微信小程序:
摄像头小程序

返回顶部

QQ|站点统计|小黑屋|手机版|Archiver|摄像头模组论坛网-摄像头方案网CCM99 ( 粤ICP备18155214号 )

Powered by Discuz! X3.4 Licensed© 2001-2013 Comsenz Inc.