7173|16

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

CE6 Camera 应用程序 [复制链接]

平台:WINCE6.0+S3C6410   
camera 驱动已写好,用BSP里面的CameraDshowApp.exe,能正常地进行120x160、320x240、 640x480进行预览,

但是现在用了某家开发板的camera App DEMO,能用120x160进行预览,但是当调到640x480进行预览,就出现了如下的崩溃信息:
  1. Exception 'Data Abort' (4): Thread-Id=076e013e(pth=86484480), Proc-Id=040e01ca(pprc=864846c0) 'CameraDemo.exe', VM-active=040e01ca(pprc=864846c0) 'CameraDemo.exe'
  2. PC=00013ca8(CameraDemo.exe+0x00003ca8) RA=00013c90(CameraDemo.exe+0x00003c90) SP=001be9f4, BVA=00000000
  3. Exception 'Raised Exception' (-1): Thread-Id=076e013e(pth=86484480), Proc-Id=00400002(pprc=80430308) 'NK.EXE', VM-active=040e01ca(pprc=864846c0) 'CameraDemo.exe'
  4. PC=c003bd00(k.coredll.dll+0x0001bd00) RA=8012d4c8(kernel.dll+0x000064c8) SP=d73cf3b8, BVA=ffffffff
复制代码


问题:  
    1、我估计是申请的缓存空间不够,请问是不是?请高手指点
    2、我在应用程序源码里面找不到申请缓存的代码,不知directshow架构,是在哪里申请的缓存?
    3、请问哪位有CameraDshowApp.exe的源码?请给我一份,谢谢,我邮箱:aulyp@163.com

下面赋上我preview的源码,大家帮我分析一下,谢谢
  1. BOOL PreviewCamera(HWND hVideoWnd /*视频显示窗口*/
  2.                 ,LPCTSTR strFileName /*录像文件名*/)
  3. {
  4.         HRESULT hResult = S_FALSE;
  5.         LONGLONG dwStart = 0, dwEnd = 0;
  6.         WORD     wStartCookie = 1, wEndCookie = 2;
  7.         CRect rectVideo;  //视频窗口尺寸
  8.         CComVariant   varCamName;  //定义摄像头设备名称
  9.         WCHAR              wzDeviceName[ MAX_PATH + 1 ]; //摄像头设备名称
  10.         CPropertyBag  PropBag;  //摄像头属性页

  11.         //--定义录像用到的编码、写文件等FILTER
  12.         CComPtr            pVideoEncoder;
  13.         CComPtr            pASFMultiplexer;
  14.         CComPtr        pFileSinkFilter;
  15.         CComPtr      pWrapperFilter;


  16.         //默认先释放DSHOW接口
  17.         FreeDShow();

  18.         //1,创建ICaptureGraphBuilder2接口,用于管理媒体捕捉对象
  19.         CHK(m_pCaptureGraphBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder));

  20.         //2,创建IGraphBuilder接口
  21.         CHK(m_pGraphBuilder.CoCreateInstance(CLSID_FilterGraph));

  22.         //3,
  23.         CHK(m_pCaptureGraphBuilder->SetFiltergraph(m_pGraphBuilder ));

  24.         //4,得到IMediaControl接口,用于控制流播放
  25.         CHK(m_pGraphBuilder.QueryInterface(&m_pMediaControl));


  26.         //5,得到IMediaSeeking接口,用于设置播放位置
  27.         CHK(m_pGraphBuilder.QueryInterface(&m_pMediaSeeking));

  28.         //6,得到m_pMediaEvent接口,用于获取媒体事件
  29.         CHK(m_pGraphBuilder.QueryInterface(&m_pMediaEvent));

  30.         //7,创建视频捕捉Filter
  31.         CHK(m_pVideoCaptureFilter.CoCreateInstance(CLSID_VideoCapture));

  32.         //8,得到视频捕捉属性页接口
  33.         CHK(m_pVideoCaptureFilter->QueryInterface(&m_pPropertyBag ));

  34.         //9,选择视频捕捉设备
  35.         //得到第1个视频捕捉设备名。
  36.         if (!GetFirstCameraDriver( wzDeviceName ))
  37.         {
  38.                 goto Cleanup;
  39.         }
  40.         varCamName = wzDeviceName;
  41.         if(( varCamName.vt == VT_BSTR ) == NULL ) {
  42.                 return FALSE;
  43.         }
  44.         //设置视频捕捉为第1个捕捉设备
  45.         PropBag.Write( L"VCapName", &varCamName );   
  46.         CHK(m_pPropertyBag->Load( &PropBag, NULL ));

  47.         //10,将视频捕捉FILTER添加到FILTER图中。
  48.         CHK(m_pGraphBuilder->AddFilter( m_pVideoCaptureFilter, L"Video capture source" ));

  49.         //11,创建IDMOWrapperFilter接口
  50.         CHK(pVideoEncoder.CoCreateInstance( CLSID_DMOWrapperFilter ));
  51.         CHK(pVideoEncoder.QueryInterface( &pWrapperFilter ));
  52.         //12,加载WMV9 DMO
  53.         CHK(pWrapperFilter->Init( CLSID_CWMV9EncMediaObject, DMOCATEGORY_VIDEO_ENCODER ));

  54.         // 13,将编码器FILTER加入到过滤器图中
  55.         CHK(m_pGraphBuilder->AddFilter( pVideoEncoder, L"WMV9 DMO Encoder" ));

  56.         //14,创建ASF多路(复用)器,并加入到过滤器图中
  57.         CHK(m_pCaptureGraphBuilder->SetOutputFileName( &MEDIASUBTYPE_Asf,strFileName, &pASFMultiplexer, &pFileSinkFilter ));


  58.         //15,渲染预览视频PIN
  59.         CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_PREVIEW,
  60.                 &MEDIATYPE_Video, m_pVideoCaptureFilter,
  61.                 NULL, NULL ));

  62.         //16,设置视频预览窗口
  63.         CHK(m_pGraphBuilder.QueryInterface(&m_pVideoWindow));

  64.         ////设置视频播放的WINDOWS窗口
  65.         m_pVideoWindow->put_Owner((OAHWND)hVideoWnd);//把IVideoWindow视频播放窗口赋给hVideoWnd 窗口,在程序退出前一定要记得put_Owner((NULL)
  66.         m_pVideoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN); //输出视频的窗口的属性

  67.         //设置视频尺寸
  68.         GetClientRect(hVideoWnd,&rectVideo);  //这个是获得我们做的界面显示窗口的参数的,
  69.         m_pVideoWindow->SetWindowPosition(0,0,rectVideo.Width(),rectVideo.Height());  //设置video输出窗口的位置
  70.         m_pVideoWindow->put_Visible(OATRUE);
  71.         RETAILMSG(1,(TEXT("Width = %d, Height = %d \r\n"),rectVideo.Width(),rectVideo.Height()));

  72.         //17,渲染捕捉PIN, 用于录像
  73.         CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pVideoCaptureFilter, pVideoEncoder, pASFMultiplexer ));

  74.         //18,创建Still Pin,用于抓图
  75.         CHK(m_pImageSinkFilter.CoCreateInstance(CLSID_IMGSinkFilter));
  76.         CHK(m_pGraphBuilder->AddFilter(m_pImageSinkFilter, L"Still image filter" ));
  77.         CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_STILL, &MEDIATYPE_Video, m_pVideoCaptureFilter, NULL, m_pImageSinkFilter ));

  78.         //19,设置捕捉流暂停
  79.         CHK(m_pCaptureGraphBuilder->ControlStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pVideoCaptureFilter, 0, 0 ,0,0 ));

  80. IAMStreamConfig* m_pPreviewStreamConfig;
  81. int iCount,iSize;
  82. int i;
  83. m_pCaptureGraphBuilder->FindInterface(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, NULL, IID_IAMStreamConfig, (void **) &m_pPreviewStreamConfig);
  84. ////获得你的设备所支持的图像大小
  85. //m_pPreviewStreamConfig->GetNumberOfCapabilities(&iCount, &iSize);
  86. ////遍历,找到你所需要的大小
  87. VIDEO_STREAM_CONFIG_CAPS scc;
  88. //AM_MEDIA_TYPE *m_pamtCaptureStream;
  89. AM_MEDIA_TYPE * m_pamtPreviewStream;

  90. m_pPreviewStreamConfig->GetStreamCaps(0, &m_pamtPreviewStream, (BYTE*)&scc);
  91. m_pPreviewStreamConfig->SetFormat(m_pamtPreviewStream) ;
  92. //DeleteMediaType(m_pamtCaptureStream);
  93. //
  94. //for(i=0; i
  95. //{
  96. // //   m_pCaptureStreamConfig->GetStreamCaps(i, &m_pamtCaptureStream, (BYTE*)&scc);
  97. //        m_pPreviewStreamConfig->GetStreamCaps(i, &m_pamtCaptureStream, (BYTE*)&scc);
  98. //if (...)
  99. //m_pPreviewStreamConfig->SetFormat(m_pamtPreviewStream)
  100. //DeleteMediaType(m_pamtCaptureStream);
  101. //}



  102.         //20,预览视频
  103.         CHK(m_pMediaControl->Run());
  104.         Sleep(1000);

  105. Cleanup:
  106.         //释放接口
  107.         if (pVideoEncoder != NULL)
  108.         {
  109.                 pVideoEncoder.Release();
  110.                 pVideoEncoder = NULL;
  111.         }

  112.         if (pASFMultiplexer != NULL)
  113.         {
  114.                 pASFMultiplexer.Release();
  115.                 pASFMultiplexer = NULL;
  116.         }

  117.         if (pFileSinkFilter != NULL)
  118.         {
  119.                 pFileSinkFilter.Release();
  120.                 pFileSinkFilter = NULL;
  121.         }

  122.         if (pWrapperFilter != NULL)
  123.         {
  124.                 pWrapperFilter.Release();
  125.                 pWrapperFilter = NULL;
  126.         }

  127.         if( FAILED( hResult ))
  128.         {
  129.                 return FALSE;
  130.         }
  131.         else
  132.         {
  133.                 return TRUE;
  134.         }

  135. }
复制代码


最新回复

楼主是否可以把Camera的驱动和Camera测试程序给我一个呢,谢谢啊 VCILOVE@yahoo.cn  详情 回复 发表于 2010-6-21 11:49
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
以前我也遇到过类似的问题 是缓存不够  当时是在应用程序中开辟的缓存不够 有的时候 你的摄像头图像缓存可能开辟的也不够

可以把应用程序代码贴出 分析一下
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
关注,帮顶
 
 
 

回复

94

帖子

0

TA的资源

一粒金砂(初级)

4
 
估计内存空间分配不足
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
发现只要运行上面的
  1. ////获得你的设备所支持的图像大小
  2. //m_pPreviewStreamConfig->GetNumberOfCapabilities(&iCount, &iSize); //一运行了这一句,就会崩溃,不知为什么
  3. ////遍历,找到你所需要的大小
  4. VIDEO_STREAM_CONFIG_CAPS scc;
  5. //AM_MEDIA_TYPE *m_pamtCaptureStream;
  6. AM_MEDIA_TYPE * m_pamtPreviewStream;

  7. // m_pPreviewStreamConfig->GetStreamCaps(0, &m_pamtPreviewStream, (BYTE*)&scc);
  8. m_pPreviewStreamConfig->SetFormat(m_pamtPreviewStream) ;  //一运行了这一句,就会崩溃,不知为什么
复制代码
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
mark 学习
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

7
 
很强大哦~!学习
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
从你提供的信息来看,看不出是因为缓存不够.GetNumberOfCapabilities本身不会引起分配缓存,所以不至导致缓存不够.SetFormat倒有可能引起camera驱动分配缓存,但如果这样的话,异常应该出在驱动里,而不是你现在的出现在应用程序里。
对于directshow的缓存,都是在filter里面分配的
我建议你调试一下,看问题出的时候的stack是什么样的。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
奇怪的是,我屏蔽了这几行
  1. //VIDEO_STREAM_CONFIG_CAPS scc;
  2. //AM_MEDIA_TYPE *m_pamtCaptureStream;
  3. //AM_MEDIA_TYPE * m_pamtPreviewStream;

  4. // m_pPreviewStreamConfig->GetStreamCaps(0, &m_pamtPreviewStream, (BYTE*)&scc);
  5. //m_pPreviewStreamConfig->SetFormat(m_pamtPreviewStream) ;  //一运行了这一句,就会崩溃,不知为什么
复制代码

它也能运行,就是preview画面一卡一卡的,刷新很慢,还没搞懂它的原理,唉,COM接口的东西有点玄,不熟。
    更不得了的是,当我在驱动中把camera驱动的stil改为支持640x480后,应用竟然preview都不成功了,因为它去打开了MFC(6410硬件确MPEG的加速器)filter了,
   请问题哪位写过6410+CE上面的CAMERA应用的?请指点一下,我一下步该如何调试?谢谢
   
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 ruritanian 的回复:
从你提供的信息来看,看不出是因为缓存不够.GetNumberOfCapabilities本身不会引起分配缓存,所以不至导致缓存不够.SetFormat倒有可能引起camera驱动分配缓存,但如果这样的话,异常应该出在驱动里,而不是你现在的出现在应用程序里。
对于directshow的缓存,都是在filter里面分配的
我建议你调试一下,看问题出的时候的stack是什么样的。


回ruritanian:
   请问:1、如何跟踪它调用了哪个filter?以及崩溃在哪个filter里?
         2、你有CameraDshowApp.exe的源码?请给我一份,谢谢,我邮箱:aulyp@163.com
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
SetFormat不是必须的,如果不设的话,就用缺省的,估计是RGB格式,所以会慢。
你既然有开发板,在kitl模式下自然应该可以设断点,而且如果崩溃了应该会断下来。这时候就能够看到栈信息了。
你说的CameraDshowApp是哪里的?6410的BSP我没有。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

12
 
顶一下.
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

13
 
xuexi bangding
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

14
 
请教一个问题,
    现在驱动我写好了,如果用三星BSP里面的CameraDshowApp.exe去测试,可以实现640x480,320x240,120x160等分辩率的preview,没有问题,拍照如果我用的是320X240分辩率,也是没有问题,测试通过,
    但是,当我把拍照的分辩率调为640x480时,它就会去打开MFC的filter(MFC filter是6410里三星写的给H264,MPEG4等做硬解码用的),使得预览都不成功,
DEBUG输出信息如下:
加载模块: CameraDemo.exe
加载模块: LPCRT.dll
加载模块: RPCRT4.dll
加载模块: ole32.dll
加载模块: fpcrt.dll
加载模块: OLEAUT32.dll
加载模块: coredll.dll
加载模块: aygshell.dll
加载模块: commctrl.dll
加载模块: quartz.dll
加载模块: WS2.dll
加载模块: MMTimer.dll
加载模块: Urlmon.dll
加载模块: SHLWAPI.dll
加载模块: WININET.dll
加载模块: iphlpapi.dll
加载模块: wmvdmoe.dll
加载模块: msdmo.dll
加载模块: DDRAW.DLL
Width = 642, Height = 480
加载模块: secur32.dll
加载模块: wmadmod.dll
加载模块: MFCDecFilter.dll
{ MFCDecFilter } Instance created
加载模块: wmvdmod.dll
加载模块: msacmce.dll
卸载模块: msacmce.dll
加载模块: AACSBREnhancedDecoder.dll
{ MFCDecFilter } Instance created
加载模块: msacmce.dll
卸载模块: msacmce.dll
主要出问题是在下面的代码:
  1.         //创建Still Pin,用于抓图
  2.         CHK(m_pImageSinkFilter.CoCreateInstance(CLSID_IMGSinkFilter));
  3.         CHK(m_pGraphBuilder->AddFilter(m_pImageSinkFilter, L"Still image filter" ));
  4.         CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_STILL, &MEDIATYPE_Video, m_pVideoCaptureFilter, NULL, m_pImageSinkFilter ));
复制代码



下面是我设为320x240为拍照分辩率时的打印:
加载模块: CameraDemo.exe
加载模块: LPCRT.dll
加载模块: RPCRT4.dll
加载模块: ole32.dll
加载模块: fpcrt.dll
加载模块: OLEAUT32.dll
加载模块: coredll.dll
加载模块: aygshell.dll
加载模块: commctrl.dll
加载模块: quartz.dll
加载模块: WS2.dll
加载模块: MMTimer.dll
加载模块: urlmon.dll
加载模块: SHLWAPI.dll
加载模块: WININET.dll
加载模块: iphlpapi.dll
加载模块: wmvdmoe.dll
加载模块: msdmo.dll
加载模块: DDRAW.DLL
Width = 642, Height = 480
它是能正常preview和拍照的,也不会去打开MFC的fliter,

问题:1、 我现在想把拍照时的分辨率支持到2048x1536,也就是300W像素去,我应该如何改?

 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(高级)

15
 
可以把camera App DEMO的完整程序给我一份么?
albertsunfox@yahoo.com.cn
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

16
 
楼主,可以把camera App DEMO的完整程序也给我一份么?
zhfl1314@163.com
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

17
 
楼主是否可以把Camera的驱动和Camera测试程序给我一个呢,谢谢啊
VCILOVE@yahoo.cn
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表