IMF2DBuffer 인터페이스(mfobjects.h)

비디오 프레임과 같은 2차원 표면을 포함하는 버퍼를 나타냅니다.

상속

IMF2DBuffer 인터페이스는 IUnknown 인터페이스에서 상속됩니다. IMF2DBuffer 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

IMF2DBuffer 인터페이스에는 이러한 메서드가 있습니다.

 
IMF2DBuffer::ContiguousCopyFrom

연속 형식의 버퍼에서 이 버퍼에 데이터를 복사합니다.
IMF2DBuffer::ContiguousCopyTo

이 버퍼를 호출자의 버퍼에 복사하여 데이터를 연속 형식으로 변환합니다.
IMF2DBuffer::GetContiguousLength

버퍼의 콘텐츠를 연속 형식으로 저장하는 데 필요한 바이트 수를 검색합니다.
IMF2DBuffer::GetScanline0AndPitch

버퍼 메모리 및 표면 보폭에 대한 포인터를 검색합니다.
IMF2DBuffer::IsContiguousFormat

버퍼가 네이티브 형식으로 연속되는지 여부를 쿼리합니다.
IMF2DBuffer::Lock2D

호출자에게 버퍼의 메모리에 대한 액세스 권한을 부여합니다. (IMF2DBuffer.Lock2D)
IMF2DBuffer::Unlock2D

이전에 잠근 버퍼의 잠금을 해제합니다. IMF2DBuffer::Lock2D에 대한 각 호출에 대해 이 메서드를 한 번 호출합니다.

설명

이 인터페이스에 대한 포인터를 얻으려면 미디어 버퍼 에서 QueryInterface 를 호출합니다.

2차원 버퍼를 사용하려면 한 픽셀 행에서 다음 행으로 이동하는 데 필요한 바이트 수인 보폭을 알아야 합니다. 화면에 각 픽셀 행 뒤의 안쪽 여백 바이트가 포함될 수 있으므로 보폭이 이미지 너비보다 클 수 있습니다. 픽셀이 메모리의 상향식 방향인 경우에도 Stride는 음수일 수 있습니다. 자세한 내용은 Image Stride를 참조하세요.

모든 비디오 형식은 연속 되거나 압축된 표현을 정의합니다. 이 표현은 추가 패딩 없이 시스템 메모리에서 DirectX 표면의 표준 레이아웃과 호환됩니다. RGB 비디오의 경우 연속 표현의 피치는 이미지 너비(바이트)와 같으며 가장 가까운 DWORD 경계로 반올림됩니다. YUV 비디오의 경우 연속 표현의 레이아웃은 YUV 형식에 따라 달라집니다. 평면 YUV 형식의 경우 Y 평면은 사용자 및 V 평면과 다른 피치를 가질 수 있습니다.

미디어 버퍼가 IMF2DBuffer 인터페이스를 지원하는 경우 각 픽셀 행 다음에 추가 패딩 바이트가 있을 수 있으므로 기본 버퍼에 연속 표현이 보장되지 않습니다. 버퍼가 연속적이지 않으면 Lock 및 Lock2D 메서드 의 동작이 다릅니다.

  • Lock2D 메서드는 기본 버퍼에 대한 포인터를 반환합니다. 버퍼가 연속되지 않을 수 있습니다.
  • Lock 메서드는 연속된 버퍼를 반환합니다. 기본 버퍼가 연속되지 않으면 메서드는 데이터를 새 버퍼에 복사하고 Unlock 메서드는 데이터를 원래 버퍼에 다시 복사합니다.
Lock2D 메서드를 호출하여 네이티브 형식의 2D 버퍼에 액세스합니다. 네이티브 형식은 연속되지 않을 수 있습니다. 버퍼의 IMFMediaBuffer::Lock 메서드는 버퍼의 연속 표현을 반환합니다. 그러나 네이티브 형식의 내부 복사본이 필요할 수 있습니다. 따라서 2D 버퍼의 경우 Lock2D 메서드를 사용하고 Lock 메서드를 피해야 합니다. Lock 메서드는 최대 두 개의 버퍼 복사본을 발생시킬 수 있으므로 Lock2D 메서드는 일반적으로 더 효율적이며 가능한 경우 사용해야 합니다. 기본 버퍼가 연속적인지 확인하려면 IMF2DBuffer::IsContiguousFormat을 호출합니다.

압축되지 않은 이미지의 경우 버퍼의 유효한 데이터 양은 이미지의 너비, 높이 및 픽셀 레이아웃에 따라 결정됩니다. 이러한 이유로 Lock2D 를 호출하여 버퍼에 액세스하는 경우 IMFMediaBuffer::GetCurrentLength 또는 IMFMediaBuffer::GetMaxLength에서 반환된 값에 의존하지 마세요. 마찬가지로 버퍼에서 데이터를 수정하는 경우 IMFMediaBuffer::SetCurrentLength 를 호출하여 크기를 업데이트할 필요가 없습니다. 일반적으로 동일한 미디어 버퍼에서 IMF2DBufferIMFMediaBuffer 메서드에 대한 호출을 혼합하지 않아야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 mfobjects.h(Mfidl.h 포함)

추가 정보

미디어 버퍼

미디어 파운데이션 인터페이스

압축되지 않은 비디오 버퍼