다음을 통해 공유


스트림 형식

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

MSDV와 UVC 드라이버 모두 인터리브 오디오 비디오 또는 비디오만의 두 가지 DV 형식을 출력할 수 있습니다. 인터리브 오디오 비디오는 디바이스의 원래 형식입니다. 비디오 전용 형식은 동일한 데이터를 포함하지만 샘플은 오디오 데이터가 없는 것으로 표시됩니다. 비디오 전용 형식은 주로 Windows용 비디오를 사용하는 애플리케이션과의 호환성을 위해 존재합니다. 자세한 내용은 Type-1 및 Type-2 DV AVI Files를 참조하세요.

MSDV 드라이버

MSDV 드라이버에는 두 개의 출력 핀이 있습니다. 첫 번째 출력 핀은 인터리브된 데이터를 보내고 두 번째 출력 핀은 비디오 전용 데이터를 보냅니다. 한 번에 하나의 출력 핀만 연결할 수 있습니다. 형식을 선택하려면 적절한 출력 핀을 연결합니다. 출력 핀에서 IAMStreamConfig 인터페이스를 사용하여 형식을 찾을 수 있습니다.

UVC 드라이버

MSDV 드라이버와 달리 UVC 드라이버는 동일한 핀에서 두 형식을 모두 제공합니다. 기본 형식은 비디오 전용입니다. 형식을 선택하려면 출력 핀에서 IAMStreamConfig 인터페이스를 사용합니다. GetStreamCaps 메서드를 호출하여 출력 핀의 미디어 형식을 열거합니다. 각 미디어 형식에 대해 주 형식이 원하는 형식과 일치하는 경우 SetFormat 을 호출하고 해당 미디어 형식을 전달합니다.

서식 주 형식
인터리브 오디오 및 비디오 MEDIATYPE_Interleaved
비디오 전용 MEDIATYPE_Video

 

다음 함수는 주 형식 GUID에 따라 형식을 설정합니다.

HRESULT SetStreamFormat(IAMStreamConfig *pConfig, const GUID& majorType)
{
    if (pConfig == NULL)
    {
        return E_POINTER;
    }

    // Get the number of stream capabilities.
    int count = 0, size = 0;
    HRESULT hr = pConfig->GetNumberOfCapabilities(&count, &size);
    if (FAILED(hr))
    {
        return hr;
    }

    // Allocate memory for the stream capabilities structure.
    BYTE *pCaps = new BYTE[size];
    if (pCaps == NULL)
    {
        return E_OUTOFMEMORY;
    }
    
    // Enumerate the stream capabilities.
    bool bFoundType = false;
    for (int ix = 0; ix < count; ix++)
    {
        AM_MEDIA_TYPE *pmt;
        hr = pConfig->GetStreamCaps(ix, &pmt, pCaps);
        if (FAILED(hr))
        {
            break;
        }
        else if (pmt->majortype == majorType)
        {
            // This is the media type we want.
            bFoundType = true;
            hr = pConfig->SetFormat(pmt);
            DeleteMediaType(pmt);
            break;
        }
        DeleteMediaType(pmt);
    }
    delete [] pCaps;
    if (FAILED(hr))
    {
        return hr;
    }
    return bFoundType ? S_OK : E_FAIL;
}

MSDV 드라이버는 IAMStreamConfig도 지원하므로 두 디바이스 유형 모두에서 작동하는 코드를 작성할 수 있습니다.

DV 캠코더 제어