다음을 통해 공유


비디오 기능

[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngineAudio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 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이라고 가정합니다. 다음 그림에서는 이 경우 유효한 크기 중 일부를 보여 줍니다.

세분성 = 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 데이터 참조).

필터의 출력 핀이 원본 및 대상 사각형이 없는 미디어 형식에 연결된 경우 입력 형식의 원본 하위 영역이 출력 형식의 대상 하위 영역으로 확장되도록 필터가 필요합니다. 원본 subrectangle은 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 비트맵은 그대로 유지해야 합니다. 다음 그림에서는 이 시나리오를 보여 줍니다.

하위 스트레칭

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

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