社区
多媒体/流媒体开发
帖子详情
初学者问题:如何重写 GetMediaType ,才能使 CBaseOutputPin 派生类的媒体类型为MEDIASUBTYPE_YUYV ?
sungengyu
2005-03-09 05:29:00
如何重写 GetMediaType ,才能使 CBaseOutputPin 派生类的媒体类型为MEDIASUBTYPE_YUYV ?
郁闷。
谢谢了。
...全文
187
5
打赏
收藏
初学者问题:如何重写 GetMediaType ,才能使 CBaseOutputPin 派生类的媒体类型为MEDIASUBTYPE_YUYV ?
如何重写 GetMediaType ,才能使 CBaseOutputPin 派生类的媒体类型为MEDIASUBTYPE_YUYV ? 郁闷。 谢谢了。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sungengyu
2005-03-24
打赏
举报
回复
HRESULT CBallStream::GetMediaType(int iPosition, CMediaType *pmt)
{
int width = m_ball.GetImageWidth() ;
int height = m_ball.GetImageHeight() ;
CAutoLock lockit(m_pFilter->pStateLock());
if (iPosition != 0)
{
return E_INVALIDARG;
}
pmt->SetType(&MEDIATYPE_Video);
pmt->SetSubtype(&MEDIASUBTYPE_UYVY) ;
pmt->SetFormatType(&FORMAT_VideoInfo);
pmt->SetSampleSize(width*height*2);
pmt->SetTemporalCompression(FALSE);
VIDEOINFOHEADER info;
ZeroMemory(&info, sizeof(VIDEOINFOHEADER));
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biSizeImage = width*height*2 ;
info.bmiHeader.biClrImportant = 0;
info.AvgTimePerFrame = this->m_iDefaultRepeatTime ; //UNITS / SRC_FRAME_RATE;
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biHeight = height ;
info.bmiHeader.biWidth = width;
info.bmiHeader.biCompression = mmioFOURCC('U','Y','V','Y');
info.bmiHeader.biBitCount = 16 ; // sungengyu
pmt->SetFormat((BYTE*)&info, sizeof(VIDEOINFOHEADER));
return NOERROR;
}
sungengyu
2005-03-17
打赏
举报
回复
终于能连上了,可是输出数据是错的。 :(
资料太少了,《DirectShow开发指南》也太不详细。
sungengyu
2005-03-11
打赏
举报
回复
还是连不上
调试跟踪到 CBasePin::TryMediaTypes(IPin *pReceivePin, const CMediaType *pmt,IEnumMediaTypes *pEnum) 中,
hr = AttemptConnection(pReceivePin, pMediaType);
hr的返回值是错的。
如果直接连 Video Renderer ,hr 的返回值是 0x8004022a (ReceiveConnection 拒绝传入的媒体类型。)
如果连结 AVI Decompressor,hr的返回值是 0x80040255(无法回放视频流:无法找到合适的解压程序。)
pMediaType 中的值是
majortype {73646976-0000-0010-8000-00AA00389B71} (MEDIATYPE_Video)
subtype {56595559-0000-0010-8000-00AA00389B71} (MEDIASUBTYPE_YUYV)
bFixedSizeSamples 0x00000001
bTemporalCompression 0x00000000
lSampleSize 0x00000001
formattype {05589F80-C356-11CE-BF01-00AA0055595A} (FORMAT_VideoInfo)
pUnk 0x00000000
cbFormat 0x00000058
pbFormat 0x00166cd0
happydeer
2005-03-10
打赏
举报
回复
#define SRC_IMG_WIDTH 352
#define SRC_IMG_HEIGHT 288
#define SRC_FRAME_RATE 25
HRESULT CYourPin::GetMediaType(int iPosition, CMediaType *pmt)
{
CAutoLock lockit(m_pFilter->pStateLock());
if (iPosition != 0)
{
return E_INVALIDARG;
}
pmt->SetType(&MEDIATYPE_Video);
pmt->SetSubtype(&MEDIASUBTYPE_YUYV);
pmt->SetFormatType(&FORMAT_VideoInfo);
pmt->SetSampleSize(1);
pmt->SetTemporalCompression(FALSE);
VIDEOINFOHEADER info;
ZeroMemory(&info, sizeof(VIDEOINFOHEADER));
info.AvgTimePerFrame = UNITS / SRC_FRAME_RATE;
info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
info.bmiHeader.biHeight = SRC_IMG_HEIGHT;
info.bmiHeader.biWidth = SRC_IMG_WIDTH;
info.bmiHeader.biCompression = mmioFOURCC('Y','U','Y','V');
pmt->SetFormat((BYTE*)&info, sizeof(VIDEOINFOHEADER));
return NOERROR;
}
sungengyu
2005-03-10
打赏
举报
回复
我在小球的例子上修改的。我希望输出媒体类型为MEDIASUBTYPE_YUYV,试了好久还是连不上。我不知道怎么重写 HRESULT CBallStream::GetMediaType(int iPosition, CMediaType *pmt) , 这里是不是应该填充 AM_MEDIA_TYPE 结构?
在网上搜索也找不到例子,两天了,郁闷至极,
兄弟们拉我一把吧,可怜可怜我吧,555555555555555
经典的虚拟摄像头程序
搜寻了好久了,经典的例子,模拟摄像头的实现 在amcap和graphedit中点属性页可以调整。
Directshow下
Base
classes的编译库:strmbasd.lib和strm
base
.lib
Directshow下
Base
classes的编译库,分别是Debug版本(strmbasd.lib)和Release版本(strm
base
.lib),
windows
media
format例子
windows
media
format例子 实现音乐文件属性信息的获得。
最简单的源Filter的编写步骤
初学Directshow的入门宝典!保证记你叩开filter开发之门.
MiniSourceFilter
个人写的一个最简单的源过滤器,非常适用于
初学者
,对于熟练者也可以作为写过滤器的模板,我自己经常就是通过改这个工程名来写自己新的过滤器的,改名工程后要注意几个GUID也要改的
多媒体/流媒体开发
2,553
社区成员
20,277
社区内容
发帖
与我相关
我的任务
多媒体/流媒体开发
专题开发/技术/项目 多媒体/流媒体开发
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章