코덱 MFT 구현
이 항목에서는 디코더 또는 인코더를 MFT(Media Foundation Transform) 로 구현하기 위한 몇 가지 지침을 제공합니다.
인코더
인코더 형식 협상
다음 절차는 인코더를 초기화하는 데 사용됩니다.
- ICodecAPI 인터페이스에 대한 MFT를 쿼리합니다.
- ICodecAPI::SetValue를 호출하여 인코딩 속성을 설정합니다.
- IMFTransform::SetOutputType을 호출하여 인코딩 형식을 설정합니다.
- IMFTransform::GetInputAvailableType을 호출하여 호환되는 입력 형식 목록을 가져옵니다. (이 단계를 건너뛸 수 있습니다.)
- 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에 도달해야 합니다.
관련 항목