dshow 中有默认的resize filter 好像默认大小是320*240,为什么改不了。pResize->put_Size(800,600,RESIZEF_PRESERVEASPECTRATIO_NOLETTERBOX);
怎么获得IResize 的指针。
有没有什么第三方的fitler可以用。疑问多多,哪位高手给解决一下,马上给分。

解决方案 »

  1.   

    好多的方法阿~~~
    就是directx自带的东西就有相关的filter
      

  2.   

    我看了一下自带的例子,
    都是将现有的视频文件打开,然后在显示Windows上进行拉伸,
    没有用到IResize 之类的东西,
    我在用时间线的时候,系统会自动加上Resize filter,而且默认输出是320*240
    我的问题是怎么能在这里改变输出,不是仅仅显示的改变。
      

  3.   

    在调用RenderStream前设置媒体类型:
    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说明
      

  4.   

    感谢 lazio88(cameo) 的热心!!
    我是在用DES时出现的问题,因为Resize Filter总是自动把图象变成320*240,
    不知道你所说的行不行。
    今天可能没有时间试试了,
    明天试完以后如果有用就把分给你,如果没有用,也会酌情给你分的,因为你的热诚!!
    祝大家都有好心情!!
      

  5.   

    还有高手指点么?
    我是在用DES似,系统自动加入IResize filter,默认320*240,怎样改变这个默认输出!!
      

  6.   

    改变媒体类型的大小
    见transpriview