2013-05-24 2 views
0

어떻게 DirectShow의 SamleGrabber의 현재 해상도를 얻으려면? directshow에서 실시간 해상도를 얻는 방법은 무엇입니까?

나는 그것이 작동하지 않습니다, 아래의 코드를 시도했다. 소스의 해상도가 1920 × 1080에서 화면 1680x1050로 변경하면서 당신이 얻는 가치는 항상 1920 × 1080이다.

void GetCurrentResolution(ISampleGrabber* pGrabber, int* pWidth, int* pHeight) 
{ 
    AM_MEDIA_TYPE pmt = {0}; 
    hr = pGrabber->GetConnectedMediaType(&pmt); 
    if (SUCCEEDED(hr)) 
    { 
     if(pmt.formattype == FORMAT_VideoInfo) 
     { 
      VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER*)pmt.pbFormat; 
      *pWidth = pVih->bmiHeader.biWidth; 
      *pHeight = pVih->bmiHeader.biHeight; 
     } 
     FreeMediaType(pmt); 
    } 
} 
+0

당신은 "작동하지 않습니다"더 구체적으로시겠습니까? – Rachel

+0

해상도가 1920x1080에서 1680x1050으로 변경된 경우 얻을 수있는 값은 1920x1080입니다. – senggen

답변

0

이 시도 :

때 해상도 변경 : 전화 pGraph-> 정지(); 다음()

+0

samplegrabber 캡처하는 동안 해상도를 확인하는 방법을 알고 싶습니다. – senggen

+1

> 해상도가 1920x1080에서 1680x1050으로 변경된 경우 얻을 수있는 값은 항상 1920x1080입니다. 어떻게 해상도를 변경 했습니까? 어떻게 성공적으로 바뀌 었는지 어떻게 알 수 있습니까? – Rachel

+0

예, 그게 내 질문입니다. 어떻게 해상도가 변경되었는지 알 수 있습니까? – senggen

4

코드 것은 당신에 대한 권리를 제공 snippet>을 실행을 reget 및 pGraph-를 호출합니다. 그것은 일어날 필요가없는 것들을 가정하기 때문에 정확하지 않지만, 대부분의 경우 그것은 작동 할 것입니다.

귀하의 잘못된 가정은 그 해상도가 실행중인 그래프를 변경할 수 있습니다. 아닙니다. 샘플 그래버의 미디어 유형은 핀에 연결되면 변경되지 않습니다. 해상도 재 합의 필요가있는 경우 일반적으로 업스트림 핀에서 시작하여 핀 재 연결로 시작해야합니다.

+0

변경된 해상도를 감지 할 수있는 방법이 있으며 amcap과 같은 캡처를 방해하지 않습니다. – senggen

+0

AMCap은 소스 코드로 제공되므로 사용자가 직접 찾을 수 있습니다. 내 최고의 knowledg 위해 그래프를 다시 작성하고 다시 시작하고 해상도를 동적으로 업데이트하지 않습니다. –

관련 문제