IMFTransform::P rocessInput 메서드(mftransform.h)
이 MFT(Media Foundation 변환)의 입력 스트림에 데이터를 전달합니다.
구문
HRESULT ProcessInput(
[in] DWORD dwInputStreamID,
[in] IMFSample *pSample,
[in] DWORD dwFlags
);
매개 변수
[in] dwInputStreamID
입력 스트림 식별자입니다. 스트림 식별자 목록을 얻으려면 IMFTransform::GetStreamIDs를 호출합니다.
[in] pSample
입력 샘플의 IMFSample 인터페이스에 대한 포인터입니다. 샘플에는 유효한 입력 데이터가 포함된 미디어 버퍼가 하나 이상 포함되어야 합니다.
[in] dwFlags
예약되어 있습니다. 0이어야 합니다.
반환 값
이 메서드는 HRESULT를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.
반환 코드 | Description |
---|---|
|
메서드가 성공했습니다. |
|
인수가 잘못되었습니다. |
|
잘못된 스트림 식별자입니다. |
|
입력 샘플에는 유효한 샘플 기간이 필요합니다. 기간을 설정하려면 IMFSample::SetSampleDuration을 호출합니다.
일부 MFT는 입력 샘플에 유효한 기간이 있어야 합니다. 일부 MFT에는 샘플 기간이 필요하지 않습니다. |
|
입력 샘플에는 타임스탬프를 요구합니다. 타임스탬프를 설정하려면 IMFSample::SetSampleTime을 호출합니다.
일부 MFT에서는 입력 샘플에 유효한 타임스탬프가 있어야 합니다. 일부 MFT에는 타임스탬프가 필요하지 않습니다. |
|
변환은 현재 더 많은 입력을 처리할 수 없습니다. |
|
미디어 유형이 하나 이상의 스트림에서 설정되지 않았습니다. |
|
미디어 유형은 DXVA(DirectX Video Acceleration)에서 지원되지 않습니다. DXVA 사용 디코더는 이 오류 코드를 반환할 수 있습니다. |
설명
대부분의 경우 메서드가 성공하면 MFT는 샘플을 저장하고 IMFSample 포인터에 대한 참조 횟수를 보유합니다. MFT가 샘플을 릴리스할 때까지 샘플을 다시 사용하지 마세요. 그러나 MFT는 샘플을 저장하는 대신 샘플 데이터를 새 버퍼에 복사할 수 있습니다. 이 경우 MFT는 IMFTransform::GetInputStreamInfo 메서드에서 MFT_INPUT_STREAM_DOES_NOT_ADDREF 플래그를 설정해야 합니다.
MFT에 출력 샘플을 생성하기에 충분한 입력 데이터가 이미 있는 경우 새 입력 데이터를 허용하지 않으며 ProcessInput은MF_E_NOTACCEPTING 반환합니다. 이 시점에서 클라이언트는 다음 중 하나를 수행하여 보류 중인 입력 데이터를 지워야 합니다.
- IMFTransform::P rocessOutput을 호출하여 새 출력을 생성합니다.
- MFT_MESSAGE_COMMAND_FLUSH 메시지를 사용하여 IMFTransform::P rocessMessage를 호출하여 입력 데이터를 플러시합니다.
MFT는 ProcessInput 메서드에서 입력 데이터를 처리할 수 있습니다. 그러나 대부분의 MFT는 클라이언트가 ProcessOutput을 호출할 때까지 기다립니다.
클라이언트가 모든 스트림에서 유효한 미디어 형식을 설정한 후 MFT는 항상 두 가지 상태 중 하나여야 합니다. 즉, 더 많은 입력을 허용하거나 더 많은 출력을 생성할 수 있습니다. 그것은 두 상태 또는 어느 쪽도 상태에 있으면 안됩니다. MFT는 하나 이상의 출력 샘플을 생성하는 데 필요한 만큼의 입력만 허용해야 하며, 이때 ProcessInput 은 MF_E_NOTACCEPTING 반환합니다. ProcessInput이MF_E_NOTACCEPTING 반환하면 클라이언트는 MFT가 출력을 생성할 준비가 되었다고 가정할 수 있습니다.
MFT가 입력 데이터에 치명적이 아닌 오류가 발생하는 경우 데이터를 삭제하고 더 많은 입력 데이터를 가져오면 복구를 시도할 수 있습니다. 더 많은 입력 데이터를 요청하기 위해 MFT는 IMFTransform::P rocessOutput 메서드에서 MF_E_TRANSFORM_NEED_MORE_INPUT 반환합니다. MFT가 데이터를 삭제하는 경우 다음 출력 샘플에서 MFSampleExtension_Discontinuity 특성 특성을 설정하여 호출자에게 데이터 스트림에 간격이 있음을 알려야 합니다.
mftransform.h를 포함하기 전에 MFT_UNIQUE_METHOD_NAMES 정의된 경우 이 메서드의 이름이 MFTProcessInput으로 바뀝니다. 하이브리드 DMO/MFT 개체 만들기를 참조하세요.
비동기 처리
이전 설명에서는 동기 처리 모델에 대해 설명합니다. 비동기 처리를 지원하려면 비동기 MFT를 참조하세요.요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | mftransform.h |
라이브러리 | Mfuuid.lib |