dshow 中有默认的resize filter 好像默认大小是320*240,为什么改不了。pResize->put_Size(800,600,RESIZEF_PRESERVEASPECTRATIO_NOLETTERBOX);
怎么获得IResize 的指针。
有没有什么第三方的fitler可以用。疑问多多,哪位高手给解决一下,马上给分。
怎么获得IResize 的指针。
有没有什么第三方的fitler可以用。疑问多多,哪位高手给解决一下,马上给分。
就是directx自带的东西就有相关的filter
都是将现有的视频文件打开,然后在显示Windows上进行拉伸,
没有用到IResize 之类的东西,
我在用时间线的时候,系统会自动加上Resize filter,而且默认输出是320*240
我的问题是怎么能在这里改变输出,不是仅仅显示的改变。
AM_MEDIA_TYPE *pmt = 0;
VIDEO_STREAM_CONFIG_CAPS scc;
IAMStreamConfig *m_pVSC;
//ICaptureGraphBuilder2 *m_pCapture;
hr = m_pCapture->FindInterface(&PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Video,m_pSrcCapFilter,
//m_pSrcCapFilter是IBaseFilter *视频源指针
IID_IAMStreamConfig, (void **)&m_pVSC);
int iCount = 0, iSize = 0;
//获取媒体类型容量(个数)
hr = m_pVSC->GetNumberOfCapabilities(&iCount, &iSize);
if (iSize == sizeof(VIDEO_STREAM_CONFIG_CAPS))
{
int iFormat;
//依次枚举类型,这里假设设置MEDIASUBTYPE_RGB24为320×240
for(iFormat = 0;iFormat<iCount;iFormat++)
{
hr = m_pVSC->GetStreamCaps(iFormat, &pmt, (BYTE*)&scc);
if (SUCCEEDED(hr))
{
if((pmt->majortype == MEDIATYPE_Video) &&
(pmt->subtype == MEDIASUBTYPE_RGB24) &&
(pmt->formattype == FORMAT_VideoInfo) &&
(pmt->cbFormat >= sizeof (VIDEOINFOHEADER)) &&
(pmt->pbFormat != NULL))
{
//读取每帧延时,相当于读取此媒体类型支持的帧率,很重要,不可以乱设
LONGLONG LL = scc.MinFrameInterval;
if(LL < 0) return FALSE;
VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER*)pmt->pbFormat;
//设置输出大小,可能某些媒体类型不支持这样的大小
pVih->bmiHeader.biWidth = 320;
pVih->bmiHeader.biHeight = 240;
pVih->bmiHeader.biSizeImage = DIBSIZE(pVih->bmiHeader);
pVih->AvgTimePerFrame = LL;
//设置媒体类型
hr = m_pVSC->SetFormat(pmt);
}
}
}
}
详细参考Direct show sdk说明
我是在用DES时出现的问题,因为Resize Filter总是自动把图象变成320*240,
不知道你所说的行不行。
今天可能没有时间试试了,
明天试完以后如果有用就把分给你,如果没有用,也会酌情给你分的,因为你的热诚!!
祝大家都有好心情!!
我是在用DES似,系统自动加入IResize filter,默认320*240,怎样改变这个默认输出!!
见transpriview