.NET 용 DirectShow 코드를 래핑하는 데 사용합니다. DirectShow에서는/v 소스 기능을 가져오고, 설정하고, 검색 할 수 있습니다. IAMStreamConfig 비디오 인터페이스를 사용하여 특정 캡처 및 압축 필터에서 출력 형식을 설정하려고 했습니까?
이 코드를 사용하여 해상도를 얻고 다른 소스에 설정합니다. m_pVCap 곳 : 소스 필터
hr = m_pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,
m_pVCap, IID_IAMVideoCompression,(void **)&m_pVC);
if (hr != S_OK)
hr = m_pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
m_pVCap,IID_IAMVideoCompression,(void **)&m_pVC);
// !!! What if this interface isn't supported?
// we use this interface to set the frame rate and get the capture size
hr = m_pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Interleaved,
m_pVCap, IID_IAMStreamConfig, (void **)&m_pVSC);
if (hr != NOERROR)
{
hr = m_pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
m_pVCap, IID_IAMStreamConfig,(void **)&m_pVSC);
if (hr != NOERROR)
{
LogDXError(hr, false, FILELINE);
}
}
현재 소스 형식을 얻으려면
hr = m_pVSC->GetFormat(&pmt);
// DV capture does not use a VIDEOINFOHEADER
if (hr == NOERROR)
{
if (pmt->formattype == FORMAT_VideoInfo)
{
VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *)pmt->pbFormat;
pvi->AvgTimePerFrame = (LONGLONG)(10000000/m_FrameRate);
hr = m_pVSC->SetFormat(pmt);
if (hr != NOERROR)
(NotifyNewError) (FILELINE, "", LOG_ALL, ERR_GRAVE, false,
"Cannot set frame rate for capture");
hr = m_pVSC->GetFormat(&pmt);
pvi = (VIDEOINFOHEADER *)pmt->pbFormat;
pvi->bmiHeader.biWidth = g_SizeOutput.cx;
pvi->bmiHeader.biHeight = g_SizeOutput.cy;
pvi->bmiHeader.biSizeImage = DIBSIZE(pvi->bmiHeader);
hr = m_pVSC->SetFormat(pmt);
if (hr != NOERROR)
{
char ErrTxt[MAX_ERROR_TEXT_LEN];
AMGetErrorText(hr, ErrTxt,MAX_ERROR_TEXT_LEN);
wsprintf(szError, "Error %x: %s\nCannot set frame rate (%d)for
prev", hr, ErrTxt,m_FrameRate);
(NotifyNewError)(FILELINE, "", LOG_ALL, ERR_GRAVE, false, szError);
}
DeleteMediaType(pmt);
}
는 소스에게 능력을 얻으려면 다음을 사용할 수 있습니다
IAMStreamConfig::GetNumberOfCapabilities and then IAMStreamConfig::GetStreamCaps
https://msdn.microsoft.com/en -us/library/windows/desktop/dd319784 (v = vs.85) .aspx – Bafro
답장을 보내 주셔서 감사합니다. C# .NET과 Accord.Video.DirectShow 라이브러리를 사용하면 IAMStreamConfig.GetNumberOfCapabilities가 카메라에서 가장 높은 해상도 하나만 반환합니다 ... 따라서 장치 드라이버 형식 대화 상자를 표시 할 때 표시되는 다른 해상도는 실제로 다음과 같이 제공됩니다. 압축 필터. 나는 프로그래밍 방식으로 이것들을 얻거나 설정하는 방법을 확신하지 못한다. 어떤 아이디어? – Cat
내 경험으로는 DirectShow 소스 필터가 항상 장치에서 지원하는 해상도 나 프레임 속도 또는 크기를 구현하지는 않습니다. DirectShow 원본 필터 기능을 쉽게 확인하기 위해 사용자 지정 코드를 작성하기 전에 Graph 편집을 사용합니다. 다운로드하고 설치하고 소스 필터를 추가 한 다음 캡처 핀 속성을 확인하여 지원되는 소스 기능을 확인하십시오. – Bafro