MFT 미디어 버퍼 및 샘플 작업

코덱 MFT는 미디어 버퍼 및 샘플을 사용하여 미디어 데이터를 앞뒤로 전달합니다.

미디어 버퍼는 일반적으로 미디어 데이터를 보관하기 위해 메모리 블록을 관리하는 COM 개체입니다. 데이터가 MFT에 전달되거나 MFT에서 전달되면 항상 미디어 버퍼 형태로 전달됩니다.

모든 미디어 버퍼는 IMFMediaBuffer 인터페이스를 노출합니다. 이 인터페이스는 모든 유형의 데이터를 위해 설계되었습니다. 비디오 데이터를 포함하는 버퍼는 종종 IMF2DBuffer를 노출합니다.

미디어 버퍼의 최대 크기는 버퍼에 할당된 메모리 양입니다. 최대 크기를 찾으려면 IMFMediaBuffer::GetMaxLength를 호출합니다. 언제든지 미디어 버퍼의 현재 길이는 버퍼의 유효한 데이터 양이며 0바이트에서 최대 크기까지 다양합니다. 현재 길이를 얻으려면 IMFMediaBuffer::GetCurrentLength를 호출합니다. 버퍼를 만들 때 현재 길이는 0입니다. 버퍼에 데이터를 쓰는 경우 IMFMediaBuffer::SetCurrentLength 를 호출하여 현재 길이를 업데이트합니다.

버퍼의 메모리에 액세스하려면 IMFMediaBuffer::Lock을 호출합니다. 이 메서드는 메모리 블록의 시작 부분에 대한 포인터를 반환합니다. 포인터 사용을 마쳤으면 IMFMediaBuffer::Unlock를 호출합니다. Lock 메서드는 스레드 동기화 메커니즘이 아닙니다. 다른 스레드가 버퍼에 액세스할 수 없음을 보장하지는 않습니다. Lock 메서드는 Unlock 메서드를 호출할 때까지 액세스된 메모리가 유효한 상태로 유지되도록 하는 데 사용됩니다.

Media Foundation SDK의 컨텍스트에서 미디어 샘플 개체는 0개 이상의 버퍼의 순서가 지정된 목록을 포함하는 개체입니다. 미디어 샘플은 IMFSample 인터페이스를 노출합니다.

새 샘플을 만들려면 MFCreateSample 함수를 호출합니다. 처음에는 샘플의 버퍼 목록이 비어 있습니다. 목록 끝에 버퍼를 추가하려면 IMFSample::AddBuffer를 호출합니다.

코덱 DDO 작업

코덱 MFT 작업