9586|22

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C100或6410摄像头捕捉视频显示的问题(有视频,有真相) [复制链接]

先说下我是怎么玩的,模拟摄像头->TW9910->C100 CameraIF->Post Processor->Frame Buffer->LCD

问题描述请看视频:

http://v.youku.com/v_show/id_XMTc3OTc3MDU2.html

视频的左侧大概2/5有时候会跑到右边去,但是刷新界面,或者改变界面后,会变正常或者错位。感觉就是刷新界面或界面重绘的时候会对视频产生影响。

我觉得问题出现在显示部分,因为CameraIF出来的东西,我直接保存成文件,是正常的。

由于这个现象和刷新界面有关,我觉得还是在Post Processor->Frame Buffer->LCD这块出了问题。
另外,界面刷新应该不会影响Post Processor的操作,所以Frame Buffer->LCD这里发生了某种问题的可能性比较大。

大家讨论讨论,谢拉!

最新回复

mark  我也在搞这块 一点头绪都没有  详情 回复 发表于 2010-7-1 16:21
点赞 关注

回复
举报

59

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
视频捕捉部分主要代码:

  1.         if ( !DeviceIoControl(hCamDrv, IOCTL_VDC_PREVIEW_START, &PreviewArgs, sizeof(VDC_START_ARGS), NULL, 0, &dwBytes, NULL) )
  2.         {
  3.                 RETAILMSG(CAMTEST_ERR,(L"[CAMTEST:ERROR] IOCTL_CAM_PREVIEW_START Failed\n"));
  4.                 goto CleanUp;
  5.         }

  6.         Init_Display_DMA();

  7.         i = 0;
  8.         while(i <= 5000)// i <= 100
  9.         {
  10.                
  11.                 RETAILMSG(0,(L"WAIT FOR CAPTURE FINISH...\n"));
  12.                 if ( !DeviceIoControl(hCamDrv, IOCTL_VDC_WAIT_CAPTURE_FINISH, NULL, 0, &dwCurrentFrameNum, sizeof(DWORD), &dwBytes, NULL) )
  13.                 {
  14.                         RETAILMSG(1,(L"[CAMTEST:ERROR] TIME OUT!\n"));
  15.                 }
  16.                 else
  17.                 {
  18.                         RETAILMSG(0,((L"CurrentFrame=%d\n"), dwCurrentFrameNum));

  19.                         // skip the first frame, usually, the first frame is not good.
  20.                         if(i > 0)
  21.                         {

  22.                                 Display_Frame_DMA((DWORD)BufInfo[dwCurrentFrameNum].pY,
  23.                                                                   (DWORD)BufInfo[dwCurrentFrameNum].pCb,
  24.                                                                   (DWORD)BufInfo[dwCurrentFrameNum].pCr);       
  25.                         }
  26.                 }

  27.                 i++;
  28.         }
复制代码


初始化显示:
Init_Display_DMA()

  1. void Init_Display_DMA()
  2. {
  3.         SVEARG_FIMD_WIN_MODE                        tParamMode;
  4.         SVEARG_FIMD_WIN_FRAMEBUFFER                tParamFB;
  5.         SVEARG_POST_PARAMETER                        tParamPost;
  6.         SVEARG_POST_BUFFER                                tParamBuffer;
  7.         DWORD                                                        dwWinNum, dwBytes;

  8.         hVideoDrv = CreateFile( L"VDE0:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);

  9.         if (hVideoDrv == INVALID_HANDLE_VALUE)
  10.         {
  11.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] VDE0 Open Device Failed\n"));
  12.                 Deinit_Display_DMA();
  13.         }

  14.         // Request FIMD Win0 H/W Resource to Video Engine Driver for Local Path
  15.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_RSC_REQUEST_FIMD_WIN0, NULL, 0, NULL, 0, &dwBytes, NULL) )
  16.         {
  17.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_RSC_REQUEST_FIMD_WIN0 Failed\n"));
  18.                 Deinit_Display_DMA();
  19.         }

  20.         // Request Post Processor H/W Resource to Video Engine Driver for Local Path
  21.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_RSC_REQUEST_POST, NULL, 0, NULL, 0, &dwBytes, NULL) )
  22.         {
  23.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_RSC_REQUEST_POST Failed\n"));
  24.                 Deinit_Display_DMA();
  25.         }

  26.         // Configure Window0
  27.         tParamMode.dwWinMode = DISP_WIN0_DMA;
  28.         tParamMode.dwBPP = LCD_BPP;
  29.         tParamMode.dwWidth = LCD_X; //LCD_X;
  30.         tParamMode.dwHeight = LCD_Y; //LCD_Y;
  31.         tParamMode.dwOffsetX = 120;
  32.         tParamMode.dwOffsetY = 120;

  33.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_MODE, &tParamMode, sizeof(SVEARG_FIMD_WIN_MODE), NULL, 0, &dwBytes, NULL) )
  34.         {
  35.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_FIMD_SET_WINDOW_MODE Failed\n"));
  36.                 Deinit_Display_DMA();
  37.         }

  38.         // Set Window0 Framebuffer
  39.         tParamFB.dwWinNum = DISP_WIN0;
  40.         tParamFB.dwFrameBuffer = DEST_FB_ADDR;
  41.         tParamFB.bWaitForVSync = FALSE;

  42.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_FRAMEBUFFER, &tParamFB, sizeof(SVEARG_FIMD_WIN_FRAMEBUFFER), NULL, 0, &dwBytes, NULL) )
  43.         {
  44.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_FIMD_SET_WINDOW_FRAMEBUFFER Failed\n"));
  45.                 Deinit_Display_DMA();
  46.         }

  47.         // Window0 Enable
  48.         dwWinNum = DISP_WIN0;
  49.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_FIMD_SET_WINDOW_ENABLE, &dwWinNum, sizeof(DWORD), NULL, 0, &dwBytes, NULL) )
  50.         {
  51.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_FIMD_SET_WINDOW_ENABLE Failed\n"));
  52.                 Deinit_Display_DMA();
  53.         }

  54.         // Set processing parameters
  55.         tParamPost.dwOpMode = POST_PER_FRAME_MODE;
  56.         tParamPost.dwScanMode = POST_PROGRESSIVE;
  57.         tParamPost.dwRotFlipMode = MAKELONG(POST_0_NOFLIP, POST_0_NOFLIP);
  58.         tParamPost.dwSrcType = POST_SRC_NV12;               
  59.         tParamPost.dwSrcBaseWidth = LCD_X;
  60.         tParamPost.dwSrcBaseHeight = LCD_Y;
  61.         tParamPost.dwSrcWidth = LCD_X;
  62.         tParamPost.dwSrcHeight = LCD_Y;
  63.         tParamPost.dwSrcOffsetX = 0;
  64.         tParamPost.dwSrcOffsetY = 0;
  65.         tParamPost.dwDstType = POST_DST_RGB24;
  66.         tParamPost.dwDstBaseWidth = LCD_X;  
  67.         tParamPost.dwDstBaseHeight = LCD_Y;
  68.         tParamPost.dwDstWidth = LCD_X;                       
  69.         tParamPost.dwDstHeight = LCD_Y;        //1090
  70.         tParamPost.dwDstOffsetX = 0;
  71.         tParamPost.dwDstOffsetY = 0;

  72.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_PROCESSING_PARAM, &tParamPost, sizeof(SVEARG_POST_PARAMETER), NULL, 0, &dwBytes, NULL) )
  73.         {
  74.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_POST_SET_PROCESSING_PARAM Failed\n"));
  75.                 Deinit_Display_DMA();
  76.         }
  77. }
复制代码
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
显示部分主要代码:

  1. int Display_Frame_DMA(DWORD YAddr, DWORD CbAddr, DWORD CrAddr)
  2. {
  3.         SVEARG_POST_BUFFER                                tParamBuffer;
  4.         DWORD                                                        dwBytes;
  5.         int                                                                i;

  6.         //RETAILMSG(CAMTEST_DBG, (_T("+++Display_Frame, YAddr = 0x%x CbAddr = 0x%x CrAddr = 0x%x\r\n"), YAddr, CbAddr, CrAddr));

  7.         // Source Address
  8.         tParamBuffer.dwBufferRGBY = YAddr;
  9.         tParamBuffer.dwBufferCb = CbAddr;
  10.         tParamBuffer.dwBufferCr = CrAddr;
  11.         tParamBuffer.bWaitForVSync = FALSE;

  12.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_SOURCE_BUFFER, &tParamBuffer, sizeof(SVEARG_POST_BUFFER), NULL, 0, &dwBytes, NULL) )
  13.         {
  14.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_POST_SET_SOURCE_BUFFER Failed\n"));
  15.                 Deinit_Display_DMA();
  16.         }

  17.         // Destination Address
  18. #ifdef SEND_VIDEO_TO_MEMORY
  19.         tParamBuffer.dwBufferRGBY = APPLICATION_BUF_ADDR;                        // Send video to memory
  20. #else
  21.         tParamBuffer.dwBufferRGBY = DEST_FB_ADDR;                                        // Show video on screen
  22. #endif
  23.         tParamBuffer.dwBufferCb = 0;                                                                // If output format is not RGB, we need to give this value
  24.         tParamBuffer.dwBufferCr = 0;                                                                // If output format is not RGB, we need to give this value
  25.         tParamBuffer.bWaitForVSync = FALSE;

  26.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_DESTINATION_BUFFER, &tParamBuffer, sizeof(SVEARG_POST_BUFFER), NULL, 0, &dwBytes, NULL) )
  27.         {
  28.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_POST_SET_SOURCE_BUFFER Failed\n"));
  29.                 Deinit_Display_DMA();
  30.         }

  31.         // Post Processing Start
  32.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_SET_PROCESSING_START, NULL, 0, NULL, 0, &dwBytes, NULL) )
  33.         {
  34.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_POST_SET_PROCESSING_START Failed\n"));
  35.                 Deinit_Display_DMA();
  36.         }

  37.         // Wait for Post Processing to be finished, but not for the first time
  38.         if ( !DeviceIoControl(hVideoDrv, IOCTL_SVE_POST_WAIT_PROCESSING_DONE, NULL, 0, NULL, 0, &dwBytes, NULL) )
  39.         {
  40.                 RETAILMSG(CAMTEST_ERR,(L"[VDE:ERR] IOCTL_SVE_POST_WAIT_PROCESSING_DONE Failed\n"));
  41.                 Deinit_Display_DMA();
  42.         }
  43. }

复制代码
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
#define DEST_FB_ADDR                0x26C00000
0x26c00000 为NK Display Frame Buffer首地址
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
帮你顶
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 laorenshen 的回复:
帮你顶


谢拉兄弟,你不帮我顶就沉下去了。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

7
 
关注
帮顶
我也想知道
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

8
 
先学习一下你的显示……帮顶
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 
顶,难道真的没人遇到过,
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
顶,顶起来。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
帮你顶,路过学习。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

12
 
每天一顶!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 
顶顶顶
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

14
 
给你顶下 兄弟
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

15
 
顶,我马上也得搞这个东西
 
 
 

回复

89

帖子

0

TA的资源

禁止访问

16
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

17
 
帮顶!将要做视频采集。。。。。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

18
 
顶!!!!!!!!!!111
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

19
 
我觉得有以下几种可能:
1:  LCD时序问题 这可能性比较小
2:就是POST那部分出了问题;你可以看下POST那部分的数据手册 ;

具体的 可以网上QQ交流  QQ:634623163   我也正在整这部分  可以一起交流!
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

20
 
顶一下
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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