DMO 미디어 버퍼 작업하기
입력 데이터는 미디어 버퍼를 사용하여 코덱 DMO에 전달됩니다. 미디어 버퍼는 IMediaBuffer 인터페이스를 구현하는 개체입니다. 이 용도로 클래스를 구현하거나 애플리케이션에서 Windows Media Format SDK를 사용하는 경우 해당 SDK에 정의된 버퍼 개체를 사용할 수 있습니다.
사용자 고유의 버퍼 클래스를 구현하는 경우 버퍼 메모리가 처리되는 방식에 주의해야 합니다. 입력 샘플을 전달하면 DMO는 샘플 처리가 완료될 때까지 버퍼에 대한 참조를 유지합니다. IMediaBuffer 인터페이스에 대한 참조를 즉시 해제할 수 있지만 코덱에 참조가 더 이상 필요하지 않은 경우를 알 수 없습니다. 개체 자체를 삭제할 때 메모리가 해제되도록 하려면 내부적으로 버퍼에 대한 메모리를 할당하고 해제하도록 클래스를 구현해야 합니다.
DDO는 알 수 없는 기간 동안 버퍼에 대한 참조를 유지하므로 제한된 버퍼 풀을 사용하는 것은 사소한 문제가 아닙니다. 가장 간단한 솔루션은 각 샘플에 대해 새 버퍼를 할당하는 것이지만 그렇게 하는 것은 비효율적입니다.
더 나은 솔루션은 버퍼 풀을 관리하는 개체를 구현하는 것입니다. 이 작업을 수행하려면 참조 수가 0으로 떨어질 때 삭제하는 대신 버퍼 관리자의 메서드를 호출하는 IMediaBuffer 구현의 Release 메서드에 코드를 작성하십시오. 그런 다음 버퍼 관리자는 할당된 버퍼 개체에 대한 포인터 목록을 유지할 수 있습니다. 버퍼 관리자에서 사용 가능한 버퍼 목록을 확인하고 필요할 때 애플리케이션이 버퍼에 액세스할 수 있도록 포인터를 반환하는 메서드를 만듭니다. 이 메서드는 필요에 따라 새 버퍼를 만들고 목록에 추가해야 합니다.
관련 항목