张帆的《Windows驱动开发技术详解》 有个虚拟摄像头的实现源码,但他达到的效果就是重复画一个渐变的白到黑的图像。
我想读取磁盘中的视频文件,然后模拟视频输入。文章中的思路就是对视频流的读取函数 VideoReceiveCtrlPacket ,解析 HW_STREAM_REQUEST_BLOCK 类型的指针指向的 commandcase SRB_SET_STREAM_STATE:VideoSetState(pSrb); 设置状态,增加一个定时回调函数,这个函数 VideoTimerRoutine
设置一个 捕获例程 VideoCaptureRoutine ,最终调用 ImageSynth 函数,ImageSynth 做的事情就是填充一段内存,
显示不同的图像。我想在想直接读取视频文件,然后把这些帧也填充到 ImageSynth 指向的内存区域里去。能给点思路吗?
我想读取磁盘中的视频文件,然后模拟视频输入。文章中的思路就是对视频流的读取函数 VideoReceiveCtrlPacket ,解析 HW_STREAM_REQUEST_BLOCK 类型的指针指向的 commandcase SRB_SET_STREAM_STATE:VideoSetState(pSrb); 设置状态,增加一个定时回调函数,这个函数 VideoTimerRoutine
设置一个 捕获例程 VideoCaptureRoutine ,最终调用 ImageSynth 函数,ImageSynth 做的事情就是填充一段内存,
显示不同的图像。我想在想直接读取视频文件,然后把这些帧也填充到 ImageSynth 指向的内存区域里去。能给点思路吗?
// TODO: Add your control notification handler code here
CFileDialog FileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("视频文件(*.avi)|*.avi|"));
CString avifile;
if(FileDlg.DoModal()==IDOK)
{
avifile=FileDlg.GetPathName();
OutputDebugString(avifile);
//初始化
PAVIFILE pfile;
AVIFILEINFO pfi;
PAVISTREAM pavi;
PGETFRAME pgf;
AVIFileInit();
long res = AVIFileOpen(&pfile,avifile,OF_READ|OF_SHARE_DENY_NONE,NULL);
if(res != 0)
{ OutputDebugString("AVIFileOpen error!");
switch(res)
{
case AVIERR_BADFORMAT:
OutputDebugString("AVIERR_BADFORMAT");
break;
case AVIERR_MEMORY:
OutputDebugString("AVIERR_MEMORY");
break;
case AVIERR_FILEREAD:
OutputDebugString("AVIERR_FILEREAD");
break;
case AVIERR_FILEOPEN:
OutputDebugString("AVIERR_FILEOPEN");
break;
case REGDB_E_CLASSNOTREG:
OutputDebugString("REGDB_E_CLASSNOTREG");
break;
default:
break;
} return;
}
res = AVIFileInfo(pfile,&pfi,sizeof(AVIFILEINFO));
if(res != 0)
{
OutputDebugString("AVIFileInfo error");
return; }
res=AVIFileGetStream(pfile,&pavi,streamtypeVIDEO,0);
if(res != 0)
{
return;
}
pgf=AVIStreamGetFrameOpen(pavi, NULL); //这一步总是返回NULL
if(pgf == NULL)
{
return;
} 怎么个操作AVI 文件,读取帧 ?谢谢