Share via


코덱 MFT 구현

이 항목에서는 디코더 또는 인코더를 MFT(Media Foundation Transform) 로 구현하기 위한 몇 가지 지침을 제공합니다.

인코더

인코더 형식 협상

다음 절차는 인코더를 초기화하는 데 사용됩니다.

  1. ICodecAPI 인터페이스에 대한 MFT를 쿼리합니다.
  2. ICodecAPI::SetValue를 호출하여 인코딩 속성을 설정합니다.
  3. IMFTransform::SetOutputType을 호출하여 인코딩 형식을 설정합니다.
  4. IMFTransform::GetInputAvailableType을 호출하여 호환되는 입력 형식 목록을 가져옵니다. (이 단계를 건너뛸 수 있습니다.)
  5. IMFTransform::SetInputType을 호출하여 압축되지 않은 입력 형식을 설정합니다.

출력 형식이 3단계에서 설정되면 GetInputAvailableType 메서드는 현재 출력 형식과 호환되는 입력 형식 목록을 반환해야 합니다. 즉, 이 시점에서 GetInputAvailableType 에서 반환된 모든 형식은 SetInputType에 유효해야 합니다.

디코더의 경우 형식이 설정된 순서가 반전됩니다. 입력 형식이 먼저 설정되고 그 다음에 출력 형식이 설정됩니다. 입력 형식이 설정되면 IMFTransform::GetOutputAvailableType 메서드는 IMFTransform::SetOutputType 메서드에 전달할 수 있는 형식 목록을 반환해야 합니다.

인코더 및 디코더는 NV12를 일반적인 압축되지 않은 형식으로 지원해야 합니다. 이렇게 하면 파이프라인 구성 요소가 최소한의 색 영역 변환과 상호 운용될 수 있습니다. 물론 다른 형식도 지원될 수 있습니다.

디코더

Transcode-Only 디코더

일부 디코더는 코드 변환(디코딩 후 스트림 다시 인코딩)에 최적화되어 있으며 재생 중에 사용하기에 적합하지 않습니다.

디코더 MFT가 코드 변환 전용인 경우 MFT를 등록할 때 MFT_ENUM_FLAG_TRANSCODE_ONLY 플래그를 설정합니다. ( MFTRegister를 참조하세요.)

기본적으로 코드 변환 디코더는 MFTEnumEx 함수에서 반환되지 않습니다. 코드 변환 디코더를 열거하려면 MFTEnumEx를 호출하고 Flags 매개 변수에서 MFT_ENUM_FLAG_TRANSCODE_ONLY 플래그를 설정합니다. MFTEnumEx 함수에서 사용되는 경우 이 플래그는 코드 변환 디코더와 다른 디코더를 모두 열거했습니다.

MFTRegister MFT_ENUM_FLAG_TRANSCODE_ONLY MFTEnumEx MFT_ENUM_FLAG_TRANSCODE_ONLY MFT가 열거형인가요?
1 1
1 0 아니요
0 1
0 0

 

Telecine 특성

미디어 원본은 제공하는 미디어 샘플에 다음 텔레신 특성을 연결할 수 있습니다.

attribute Description
MFSampleExtension_RepeatFirstField "RFF(첫 번째 필드 반복) 플래그와 동일합니다.
MFSampleExtension_BottomFieldFirst "top field first"(TFF) 플래그의 역방향입니다.

 

이러한 플래그는 디인터레이싱을 수행할 때 향상된 EVR(비디오 렌더러)에 대한 힌트를 제공합니다. 디코더는 이러한 플래그를 출력 샘플에 복사하여 다운스트림으로 전파하여 EVR에 도달해야 합니다.

사용자 지정 MFT 작성