DirectShow 多媒体编程中的难题

柯本 2002-08-28 02:00:11



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"

...全文
127 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacketxu 2002-11-04
  • 打赏
  • 举报
回复
我也碰到这样的问题,救救我们,上帝啊
jacketxu 2002-11-04
  • 打赏
  • 举报
回复
我也碰到这样的问题,救救我们,上帝啊
Nepalon 2002-10-26
  • 打赏
  • 举报
回复
我也在学这个,我要做一个监控器的视频回放模块,要求逐帧播放。
Iwant 2002-10-24
  • 打赏
  • 举报
回复
whwrb(波波) :
BCB 里面可以 使用 DX8.1,但是 你必须要下载 那几个 lib 。
OldStudent 2002-10-22
  • 打赏
  • 举报
回复
up
hello_wyq 2002-10-19
  • 打赏
  • 举报
回复
现在还不懂,现在在学DirectDraw,过一段时间就可以了解一些这个方面的东西了:)

Iwant 2002-10-19
  • 打赏
  • 举报
回复
1. 用不用 属性也面,关键看他 是否 把 功能 函数都 暴露出来
如果都暴露出来了,就应该 给你这个 的 CLSID。当然,这个是一般的做法。 但是 对于 MS 的 filter 他都 给了 ,你只要 Query 出接口就可以。

2。 我没有看懂 你的意思。 再 代码也不全。
everandforever 2002-10-18
  • 打赏
  • 举报
回复
不支持.
whwrb 2002-10-18
  • 打赏
  • 举报
回复
BCB支持DSHOW 8.1吗
jacketxu 2002-10-18
  • 打赏
  • 举报
回复
捕获卡是压缩卡的图象采集编程上有什么区别,是不是不能用directshow的filter做了?到底怎么回事,我搞~晕了
Jim3 2002-10-17
  • 打赏
  • 举报
回复
Directx8的SDK里面的例子里有
单帧抓拍的DirectShow -> Editing -> StillCap
不知道对你有没有用处

你的捕捉卡是压缩卡么?

另外,对于一般的视频捕捉卡是可以直接设置属性
而不用弹出对话框的,我这边有设置制式,分辨率的代码
其余的要自己去找


柯本 2002-08-31
  • 打赏
  • 举报
回复
用过DirectShow的高手帮帮忙,1000分我也可出
柯本 2002-08-30
  • 打赏
  • 举报
回复
up
zjqyb 2002-08-28
  • 打赏
  • 举报
回复
gz
柯本 2002-08-28
  • 打赏
  • 举报
回复
没有人用过DirectShow ??
UP 者也有分
分不够可加

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧