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
S_OK
메서드가 성공했습니다.
E_INVALIDARG
인수가 잘못되었습니다.
MF_E_INVALIDSTREAMNUMBER
잘못된 스트림 식별자입니다.
MF_E_NO_SAMPLE_DURATION
입력 샘플에는 유효한 샘플 기간이 필요합니다. 기간을 설정하려면 IMFSample::SetSampleDuration을 호출합니다.

일부 MFT는 입력 샘플에 유효한 기간이 있어야 합니다. 일부 MFT에는 샘플 기간이 필요하지 않습니다.

MF_E_NO_SAMPLE_TIMESTAMP
입력 샘플에는 타임스탬프를 요구합니다. 타임스탬프를 설정하려면 IMFSample::SetSampleTime을 호출합니다.

일부 MFT에서는 입력 샘플에 유효한 타임스탬프가 있어야 합니다. 일부 MFT에는 타임스탬프가 필요하지 않습니다.

MF_E_NOTACCEPTING
변환은 현재 더 많은 입력을 처리할 수 없습니다.
MF_E_TRANSFORM_TYPE_NOT_SET
미디어 유형이 하나 이상의 스트림에서 설정되지 않았습니다.
MF_E_UNSUPPORTED_D3D_TYPE
미디어 유형은 DXVA(DirectX Video Acceleration)에서 지원되지 않습니다. DXVA 사용 디코더는 이 오류 코드를 반환할 수 있습니다.
 
참고 DMO(DirectX Media Object)를 MFT로 변환하는 경우 IMediaObject::P rocessInput 메서드와 달리 S_FALSE IMFTransform::P rocessInput에 대한 유효한 반환 코드가 아니라는 점에 유의하세요.
 

설명

대부분의 경우 메서드가 성공하면 MFT는 샘플을 저장하고 IMFSample 포인터에 대한 참조 횟수를 보유합니다. MFT가 샘플을 릴리스할 때까지 샘플을 다시 사용하지 마세요. 그러나 MFT는 샘플을 저장하는 대신 샘플 데이터를 새 버퍼에 복사할 수 있습니다. 이 경우 MFT는 IMFTransform::GetInputStreamInfo 메서드에서 MFT_INPUT_STREAM_DOES_NOT_ADDREF 플래그를 설정해야 합니다.

MFT에 출력 샘플을 생성하기에 충분한 입력 데이터가 이미 있는 경우 새 입력 데이터를 허용하지 않으며 ProcessInput은MF_E_NOTACCEPTING 반환합니다. 이 시점에서 클라이언트는 다음 중 하나를 수행하여 보류 중인 입력 데이터를 지워야 합니다.

이 규칙의 예외는 MFT_OUTPUT_STREAM_LAZY_READ 플래그입니다. 이 플래그가 있으면 더 많은 입력을 제공하면 변환에서 저장된 샘플을 삭제합니다. 자세한 내용은 IMFTransform::GetOutputStreamInfo를 참조하세요. 변환은 올바른 출력을 생성하는 데 필요한 것보다 더 이상 입력 데이터를 큐에 대기해서는 안 됩니다.

MFT는 ProcessInput 메서드에서 입력 데이터를 처리할 수 있습니다. 그러나 대부분의 MFT는 클라이언트가 ProcessOutput을 호출할 때까지 기다립니다.

클라이언트가 모든 스트림에서 유효한 미디어 형식을 설정한 후 MFT는 항상 두 가지 상태 중 하나여야 합니다. 즉, 더 많은 입력을 허용하거나 더 많은 출력을 생성할 수 있습니다. 그것은 두 상태 또는 어느 쪽도 상태에 있으면 안됩니다. MFT는 하나 이상의 출력 샘플을 생성하는 데 필요한 만큼의 입력만 허용해야 하며, 이때 ProcessInputMF_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

추가 정보

IMFTransform

Media Foundation 변환