Share via


비디오 프레임 작업

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

압축되지 않은 비디오는 일반적으로 초당 약 30프레임의 속도로 빠른 연속으로 재생되는 비트맵의 시퀀스입니다. 대부분의 비디오는 압축된 형식으로 DirectShow 필터 그래프를 입력하기 때문에 비디오 스트림은 일반적으로 압축 해제를 위해 디코더를 통과합니다. 많은 디코더가 YUV 형식으로 데이터를 출력하고 렌더링 직전에 비디오 하드웨어에 대한 RGB로의 최종 변환을 그대로 둡니다. 디코더가 DirectX 비디오 가속을 사용하는 경우 비디오 하드웨어는 이미지를 디코딩하는 추가 작업을 수행합니다. 따라서 비트맵의 최종 압축 해제는 데이터가 비디오 하드웨어에 도달할 때까지 수행되지 않을 수 있습니다.

그러나 다양한 유형의 비디오 분석, 처리 또는 편집을 수행하려면 렌더링되거나 파일에 기록되기 전에 일부 유형의 RGB 또는 YUV 형식으로 압축되지 않은 비트맵에서 작업해야 하는 경우가 많습니다. 이 작업은 일반적으로 CTransformFilter 기본 클래스, 특히 Transform 메서드를 기반으로 하는 변환 필터 내에서 수행됩니다. 이 메서드는 비디오 데이터를 캡슐화하는 IMediaSample 개체에 대한 포인터를 받습니다. IMediaSample::GetPointer 메서드는 원시 데이터의 첫 번째 바이트에 대한 포인터를 반환합니다. 압축되지 않은 프레임의 경우 이 데이터는 필터에서 직접 액세스하거나 수정할 수 있는 픽셀로 구성됩니다. 다음 섹션에서는 이러한 방식으로 DIB 데이터를 효과적으로 작업하는 데 도움이 되는 배경 정보를 제공합니다.

참고

GDI, GDI+, DirectDraw 또는 Direct3D 함수를 사용하여 비트를 수정할 수도 있지만 이러한 기술은 이 문서의 scope.

 

이 섹션에서는 다음 항목을 다룹니다.