비디오 기능

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

IAMStreamConfig::GetStreamCaps 메서드는 AM_MEDIA_TYPEVIDEO_STREAM_CONFIG_CAPS 구조체 쌍의 배열에 비디오 기능을 제공합니다. 아래에서 설명한 대로 핀에서 지원되는 모든 형식과 해상도를 노출하는 데 사용할 수 있습니다.

GetStreamCaps의 오디오 관련 예제는 오디오 기능을 참조하세요.

캡처 카드 160 x 120픽셀과 320 x 240픽셀 사이의 모든 해상도에서 JPEG 형식을 지원한다고 가정합니다. 지원되는 각 해상도에서 1픽셀을 추가하거나 빼서 지원되는 다음 해상도를 가져오기 때문에 지원되는 해상도 간의 차이는 이 경우 하나입니다. 지원되는 해상도의 이러한 차이를 세분성이라고 합니다.

카드 크기 640 x 480도 지원한다고 가정해 보겠습니다. 다음은 이 단일 해상도 및 위의 해상도 범위(160 x 120픽셀과 320 x 240픽셀 사이의 모든 크기)를 보여 줍니다.

해상도 160 x 120에서 320 x 240 픽셀 및 640 x 480

또한 160 x 120에서 320 x 240 사이의 해상도에서 24비트 색 RGB 형식을 지원하지만 세분성은 8이라고 가정해 보겠습니다. 다음 그림에서는 이 경우 유효한 크기 중 일부를 보여 줍니다.

해상도는 160 x 120에서 320에서 240으로, 세분성 = 8

다른 방법으로 표시하고 더 많은 해상도를 나열하기 위해 다음은 모두 유효한 해결 방법 목록 중 하나입니다.

  • 160 x 120
  • 168 x 120
  • 168 x 128
  • 176 x 128
  • 176 x 136
  • ... 추가 해결 방법...
  • 312 x 232
  • 320 x 240

GetStreamCaps를 사용하여 최소 기능 160 x 120, 최대 기능 320 x 240 및 세분성 1과 함께 320 x 240 JPEG(기본 또는 기본 크기인 경우)의 미디어 형식을 제공하여 이러한 색 형식 및 차원 기능을 노출합니다. GetStreamCaps를 사용하여 노출하는 다음 쌍은 최소 640 x 480 및 최대 640 x 480 및 세분성이 0인 640 x 480 JPEG의 미디어 형식입니다. 세 번째 쌍에는 최소 기능 160 x 120, 최대 기능 320 x 240 및 세분성이 8인 320 x 240, 24비트 RGB의 미디어 유형이 포함됩니다. 이러한 방식으로 카드 지원할 수 있는 거의 모든 형식과 기능을 게시할 수 있습니다. 제공하는 압축 형식을 알아야 하는 애플리케이션은 모든 쌍을 가져와 미디어 형식의 모든 고유한 하위 형식 목록을 만들 수 있습니다.

필터는 VIDEOINFOHEADER 구조체의 rcSourcercTarget 멤버에서 각각 미디어 형식 원본 및 대상 사각형을 가져옵니다. 필터는 원본 및 대상 사각형을 지원할 필요가 없습니다.

IAMStreamConfig 설명서 전체에서 설명하는 자르기 사각형은 출력 핀에 대한 VIDEOINFOHEADER 구조체의 rcSource 사각형과 동일합니다.

IAMStreamConfig 설명서 전체에서 설명하는 출력 사각형은 출력 핀의 BITMAPINFOHEADER 구조체의 biWidthbiHeight 멤버와 동일합니다(AVI 파일 형식의 DV 데이터 참조).

필터의 출력 핀이 원본 및 대상 사각형이 없는 미디어 형식에 연결된 경우 입력 형식의 원본 하위 사각형을 출력 형식의 대상 하위 영역으로 확장하려면 필터가 필요합니다. 원본 하위 섹션은 VIDEO_STREAM_CONFIG_CAPS 구조체의 InputSize 멤버에 저장됩니다.

예를 들어 다음 비디오 압축기 시나리오를 고려해 보세요. 입력 이미지는 RGB 형식이며 크기는 160 x 120픽셀입니다. 원본 사각형의 왼쪽 위 모서리는 좌표(20,20)이며 오른쪽 아래 모서리는 (30,30)입니다. 출력 이미지는 320 x 240 크기의 MPEG 형식입니다. 대상 사각형의 왼쪽 위 모서리는 (0,0)이고 오른쪽 아래 모서리는 (100,100)입니다. 이 경우 필터는 160 x 120 RGB 원본 비트맵의 10 x 10 조각을 사용하고 320 x 240 비트맵의 상위 100 x 100 영역을 채우도록 하여 나머지 320 x 240 비트맵은 그대로 유지해야 합니다. 다음 그림에서는 이 시나리오를 보여 줍니다.

subrectangle stretching

필터가 이를 지원하지 않을 수 있으며 rcSourcercTarget 이 비어 있지 않은 미디어 형식과 연결하지 못할 수 있습니다.

VIDEOINFOHEADER 구조는 필터의 데이터 속도 기능에 대한 정보를 노출합니다. 예를 들어 출력 핀을 특정 미디어 형식(직접 또는 CMediaType::SetFormat 함수에서 전달된 미디어 형식 사용)으로 다음 필터에 연결했다고 가정합니다. 해당 미디어 형식의 VIDEOINFOHEADER 형식 구조의 dwBitRate 멤버를 확인하여 비디오를 압축해야 하는 데이터 속도를 확인합니다. VIDEOINFOHEADER 구조의 AvgTimePerFrame 멤버에서 프레임당 시간 단위 수를 dwBitRate 멤버의 데이터 속도에 곱하고 10,000,000(초당 단위 수)으로 나누는 경우 각 프레임의 바이트 수를 파악할 수 있습니다. 더 작은 크기의 프레임을 생성할 수 있지만 더 큰 프레임은 생성할 수 없습니다. 비디오 압축기 또는 캡처 필터의 프레임 속도를 확인하려면 출력 핀의 미디어 형식에서 AvgTimePerFrame 을 사용합니다.