双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

DirectShow 多媒体编程中的难题

柯本 柯本 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区



1. 请看以下程序:

IGraphBuilder* m_IGraphBuilder;

HRESULT hr;
CAUUID cauuid;
IBaseFilter *pcb;
ISpecifyPropertyPages *pSpec;


hr = CoCreateInstance (CLSID_FilterGraph, NULL, CLSCTX_INPROC,
IID_IGraphBuilder, (void **) &m_IGraphBuilder);
if (FAILED(hr))
ShowMessage(TEXT("建m_IGraphBuilder失败"));

if(!AddFilter2(CLSID_VideoRenderer, "Video Renderer")) //我自编的
{
ShowMessage("Add Video Renderer Error!");
return false;
}


m_IGraphBuilder->FindFilterByName(L"Video Renderer",&pcb);

hr = pcb->QueryInterface(IID_ISpecifyPropertyPages, (void **)&pSpec);
if (hr == S_OK) {
hr = pSpec->GetPages(&cauuid);
hr = OleCreatePropertyFrame(NULL, 30, 30, NULL, 1, (IUnknown **)&pcb, cauuid.cElems,
(GUID *)cauuid.pElems, 0, 0, NULL);
CoTaskMemFree(cauuid.pElems);
pSpec->Release();
}
pcb->Release();
...

它每次都要用一DIALOG, 能否不用OleCreatePropertyFrame直接改Filter的属性

2. 我有一StreamMachine 2210 PCI Capture卡, 我想单帧捕捉,我用的是以下程序

IBasicVideo2 * ba = NULL;
HRESULT hr;
long z;
long *image=NULL;


hr = m_IGraphBuilder->QueryInterface(IID_IBasicVideo2, (LPVOID *) &ba);
if (FAILED(hr))
return hr;
hr=ba->GetCurrentImage(&z,image);
char* buffer = new char[z];
Paush(); //暂停
hr = ba->GetCurrentImage(&z,(long*)buffer);
Pause(); //继续
if(SUCCEEDED(hr))
WriteDIB("aaa.bmp",buffer,z);
else
ShowMessage("Error!");
delete buffer;
ba->Release();

但这段程序用于预览时总是Error回放时没问题,Why???
有无其它单帧捕捉的办法?(我的卡不支持AVI捕捉,只支持MPEG1,MPEG2,随卡的应用程序
MPEG PLAY 支持单帧捕捉)
Filter 的连接如下:
preview:
"StreamMachine 2210 PCI Capture"->"Color Space Converter"->"Video Renderer"
Decode:
"File Source (Async.)"->"Ligos MPEG Splitter"->"Ligos MPEG Video Decoder"-> "Color Space Converter"->"Video Renderer"

...全文

相关推荐

delphi directshow 控件

DirectShow是微软开发的一个强大的多媒体处理框架,用于处理视频和音频流。在Delphi编程环境中,我们可以使用DirectShow控件来实现丰富的多媒体功能,如播放、捕获、编辑音视频等。

founderliuzg

DirectShow与VMR9在多媒体处理中的应用

视频捕获是多媒体处理中的一个核心环节,它涉及到从视频源(如摄像头、电视调谐器、视频采集卡等)捕获连续的图像序列,并将这些图像序列转换为数字格式存储于计算机中。这一过程通常包括以下几个步骤:信号采集:原始的视频信号通常为模拟信号,需要通过硬件设备如视频采集卡将模拟信号转换为数字信号。压缩编码:数字视频信号占用的数据量非常大,为了便于存储和传输,需要通过压缩算法对数据进行编码,常见压缩格式有MPEG、H.264等。数据传输:编码后的视频数据通过计算机总线或接口传入内存或存储介质。

Li Siyuan

DirectShow

在开发DirectShow应用程序时,开发者需要熟悉COM(Component Object Model)编程,因为DirectShow是基于COM的。

yangalbert

DirectShow多媒体开发

DirectShow是微软推出的一种强大的多媒体框架,用于处理音频和视频流。它被广泛应用于视频采集、播放、编辑等多媒体应用的开发。

hdq123

DirectShow编程详解

### DirectShow编程详解#### 一、DirectShow概述**DirectShow** 是一个在 Windows 平台上用于处理多媒体数据的强大框架。

yunxiao0910
评论 15
收藏 已收藏
分享
返回顶部
柯本
C++ Builder 13,871 成员 102,696 内容