2013-05-24 1 views
0

Как получить текущее разрешение SamleGrabber в DirectShow?Как получить разрешение в реальном времени в directshow?

Я пробовал приведенный ниже код, он не работает. Значение, которое вы получаете, всегда равно 1920x1080, а разрешение источника изменилось с 1920x1080 до 1680x1050.

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-> Stop(); затем переустановка и вызов pGraph-> Выполнить()

+0

Я хочу знать, как можно изменить разрешение, в то время как захват samplegrabber. – senggen

+1

> Если разрешение изменилось с 1920x1080 до 1680x1050, значение, которое вы получаете, равно 1920x1080. Как вы изменили разрешение? И как вы знаете, что он успешно изменился? – Rachel

+0

Да, это мой вопрос, откуда я знаю, что разрешение изменено. – senggen

4

Фрагмент кода, который вы предоставили, находится справа. Это не точно, потому что он предполагает то, что не должно произойти, но в большинстве случаев оно будет работать.

Ваше неправильное предположение заключается в том, что разрешение может изменяться на рабочем графике. Нет, этого не происходит: типы носителей типа Grabber на контактах не меняются после подключения. Если есть необходимость в повторном согласии с разрешением, вам нужно начать с повторного подключения контактов, как правило, начиная с выводов на выходе.

+0

Есть ли способ обнаружить изменение разрешения и не прерывать захват, как amcap. – senggen

+0

AMCap доступен в исходном коде, поэтому вы можете посмотреть его. К моему лучшему знанию он восстанавливает и перезапускает график и не обновляет разрешение динамически. –

 Смежные вопросы

  • Нет связанных вопросов^_^