none
Directshow 改變解析度問題 RRS feed

  • 問題

  • 感覺像是still pin 已經Crash問題!!~

    以下是程式碼~

    CComPtr<IEnumMediaTypes>  pEnumMediaTypes;

    int iCount, iSize; 
     pVideoStreamConfig->GetNumberOfCapabilities(&iCount, &iSize);
     
     if (iSize == sizeof(VIDEO_STREAM_CONFIG_CAPS))
     {
      for (int iFormat = 0; iFormat < iCount; iFormat++)
      {
       VIDEO_STREAM_CONFIG_CAPS scc;
       VIDEOINFOHEADER* pVih;
       BITMAPINFOHEADER* pBih = NULL;
       AM_MEDIA_TYPE *pmtConfig;

       TCHAR szTT[MAX_PATH];

       pVideoStreamConfig->GetStreamCaps(iFormat, &pmtConfig, (BYTE*)&scc);
       pVih=(VIDEOINFOHEADER*)pmtConfig->pbFormat;
       pBih=&pVih->bmiHeader;

       
       if(pBih->biWidth == videoW  && pBih->biHeight == -videoH)
       {
        pVih->AvgTimePerFrame = 10000000/15;
        pVih->bmiHeader.biSizeImage = DIBSIZE(pVih->bmiHeader);
        pVideoStreamConfig->SetFormat(pmtConfig);
        FreeMediaType(*pmtConfig);
        break;
       }
      }
     }

    //以上是當我動態改變我的Resolution時候~利用pVideoStreamConfig去改變設定的程式碼~

    CComPtr<IGraphBuilder>     pGraphBuilder; 

    CComPtr<IBaseFilter>     pVideoCaptureFilter;

    CComPtr<IBaseFilter>     pImageCaptureFilter;

    pImageCaptureFilter.CoCreateInstance(CLSID_IMGSinkFilter);
    pGraphBuilder->AddFilter(pImageCaptureFilter, L"Still image filter");
    pCaptureGraphBuilder->RenderStream(&PIN_CATEGORY_STILL, &MEDIATYPE_Video, pVideoCaptureFilter, NULL, pImageCaptureFilter);

     pImageCaptureFilter->QueryInterface(&pImageSinkFilter);

    //以上這段呢!!~是我要重新鏈結still pin以供拍照將檔案存到我的buffer用的程式碼!!~

    我的問題是!!~

    如果我一直切換解析度~程序在切換幾次後會整個被關閉~這樣的情況在切換2048x1536甚至更高解析度的情況尤其明顯~

    是一直切換的時候才會這樣~如果我每次切換完~照完照片~要切換下一個解析度之前先關閉程式~再重新開啟一次作切換~就很正常~

    我大概看了一下問題就出在上面粗體字Renderstream那行!!~切換太多次之後~程式會跑到那行然後就關閉了!!~

    我在想是不是因為Still pin 因為buffer不足所以被強制關閉了!!~

    以上~不知道是否有人跟我遇到同樣狀況~有的話怎麼解決~??感激!!~

    2011年9月30日 上午 06:01