다음을 통해 공유


DMO 미디어 버퍼 작업

입력 데이터는 미디어 버퍼를 사용하여 코덱 DDO에 전달됩니다. 미디어 버퍼는 IMediaBuffer 인터페이스를 구현하는 개체입니다. 이 용도로 클래스를 구현하거나 애플리케이션에서 Windows Media Format SDK를 사용하는 경우 해당 SDK에 정의된 버퍼 개체를 사용할 수 있습니다.

사용자 고유의 버퍼 클래스를 구현하는 경우 버퍼 메모리가 처리되는 방식에 주의해야 합니다. 입력 샘플을 전달하면 DMO는 샘플이 완료될 때까지 버퍼에 대한 참조를 유지합니다. IMediaBuffer 인터페이스에 대한 참조를 즉시 해제할 수 있지만 코덱에 더 이상 참조가 필요하지 않은 경우를 알 수 없습니다. 개체가 자체적으로 삭제될 때 메모리가 해제되도록 하려면 클래스를 구현하여 버퍼에 대한 메모리를 내부적으로 할당하고 해제해야 합니다.

DDO는 알 수 없는 기간 동안 버퍼에 대한 참조를 유지하므로 제한된 버퍼 풀을 사용하는 것은 사소한 문제가 아닙니다. 가장 간단한 솔루션은 각 샘플에 대해 새 버퍼를 할당하는 것이지만 그렇게 하는 것은 비효율적입니다.

더 나은 솔루션은 버퍼 풀을 관리하는 개체를 구현하는 것입니다. 이렇게 하려면 참조 횟수가 0으로 떨어질 때 버퍼 관리자의 메서드를 호출하는 IMediaBuffer 구현의 Release 메서드(자체 삭제 대신)에 코드를 작성합니다. 그런 다음 버퍼 관리자는 할당된 버퍼 개체에 대한 포인터 목록을 유지할 수 있습니다. 버퍼 관리자에서 메서드를 만들어 무료 버퍼 목록을 검사 필요할 때 애플리케이션이 버퍼에 액세스할 수 있도록 포인터를 반환합니다. 이 메서드는 필요에 따라 새 버퍼를 만들고 목록에 추가해야 합니다.

코덱 DDO 작업