DirectX Media Object DMO 의 관련 정보 DMO 의 인터페이스 IMediaObject ProcessOutput   [목차열람] [주소복사] [슬롯비우기]
IMediaObject::ProcessOutput
 
Microsoft DirectX 9.0

IMediaObject::ProcessOutput

현재의 입력 데이터로부터 출력을 생성한다.

구문

HRESULT ProcessOutput(
    DWORD dwFlags,
    DWORD cOutputBufferCount,
    DMO_OUTPUT_DATA_BUFFER* pOutputBuffers,
    DWORD* pdwStatus
);

파라미터

dwFlags

DMO_PROCESS_OUTPUT_FLAGS 열거형의 0 개 이상의 플래그의 비트 단위의 논리합.

cOutputBufferCount

출력 버퍼의 수.

pOutputBuffers

[in, out] 출력 버퍼를 보관 유지하는 DMO_OUTPUT_DATA_BUFFER 구조체의 배열을 가리키는 포인터. cOutputBufferCount 파라미터로 배열의 사이즈를 지정한다.

pdwStatus

[out] 예약 끝난 값 (제로)을 받는 변수의 포인터. 애플리케이션은 이 값을 무시할 필요가 있다.

반환값

HRESULT 값을 돌려준다. 돌아갈 가능성이 있는 값은 다음의 일람대로이다.

반환 코드 설명
E_FAIL 실패.
E_INVALIDARG 무효인 인수.
E_POINTER NULL 포인터 인수.
S_FALSE 출력이 생성되지 않았다.
S_OK 성공.

주의

pOutputBuffers 파라미터는,DMO_OUTPUT_DATA_BUFFER 구조체의 배열을 가리킨다. 애플리케이션은, 각 출력 스트림에 대해서 1 개의 구조체를 할당할 필요가 있다. 출력 스트림의 수를 조사하려면 ,IMediaObject::GetStreamCount 메서드를 호출한다. cOutputBufferCount 파라미터에 그 수를 설정한다.

각각의 DMO_OUTPUT_DATA_BUFFER 구조체에는, 버퍼의 IMediaBuffer 인터페이스를 가리키는 포인터가 저장 되고 있다. 애플리케이션은 이러한 버퍼를 할당한다. 구조체의 다른 멤버는, 상태 필드이다. 메서드가 성공하면 DMO 는 이러한 필드를 설정한다. 메서드가 실패 하면, 이러한 값은 확정하지 않는다.

애플리케이션이 ProcessOutput 를 호출하면, DMO 는 가능한 한 많은 입력 데이터를 처리한다. DMO 는, 각 버퍼내의 데이터의 말미로부터 순서에 출력 데이터를 출력 버퍼에 기입한다. 데이터의 말미를 찾아내려면 ,IMediaBuffer::GetBufferAndLength 메서드를 호출한다. DMO 가 출력 버퍼의 참조 카운트를 보관 유지할 것은 없다.

DMO 가, 저장 한 데이터로 출력 버퍼가 가득 된 상태로, 아직 처리하는 입력 데이터가 있는 경우, DMO 는 DMO_OUTPUT_DATA_BUFFER 구조체로 DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE 플래그를 돌려준다. 애플리케이션은, 각 구조체의 dwStatus 멤버를 테스트하는 것에 의해, 이 플래그의 유무를 체크할 필요가 있다.

메서드가 S_FALSE 를 돌려주었을 경우, 출력은 생성되지 않다. 다만, 이 경우, DMO 는 S_FALSE 를 돌려줄 필요는 없다. DMO 는 S_OK 를 돌려주는 일이 있다.

데이터의 파기

dwFlags 파라미터로 DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER 플래그를 설정하는 것으로써, 스트림의 데이터를 파기할 수가 있다. 파기하는 각각의 스트림에 대해,DMO_OUTPUT_DATA_BUFFER 구조체의 pBuffer 멤버를 NULL 로 설정한다.

pBuffer 가 NULL 인 각각의 스트림은, 이하와 같이 처리된다.

스트림이 파기 가능 또는 옵션 스트림일지 어떨지를 확인하려면 ,IMediaObject::GetOutputStreamInfo 메서드를 호출한다.

참조

↑TOP