비디오 인터레이싱

이 항목에서는 미디어 원본 및 디코더가 인터레이스된 비디오 콘텐츠를 처리하는 방법을 설명합니다.

인터레이스 비디오를 올바르게 디코딩하고 렌더링하려면 다음 정보가 필요합니다.

  • 프로그레시브 또는 인터레이스. 비디오 스트림에는 프로그레시브 프레임, 인터레이스 프레임 또는 두 프레임의 혼합이 포함될 수 있습니다.

  • 필드 지배. 필드 우위는 먼저 표시되는 필드, 위쪽 필드 또는 아래쪽 필드를 설명합니다.

  • 첫 번째 필드를 반복합니다. 이 플래그는 프레임이 점진적이지만 스트림이 인터레이스되는 3:2 풀다운에서 사용됩니다. 이 컨텍스트에서 첫 번째 필드는 위쪽 또는 아래쪽 필드일 수 있습니다.

  • 인터리브 필드 또는 단일 필드입니다. 샘플은 단일 필드 또는 두 개의 인터리브 필드를 보유할 수 있습니다. 샘플에 단일 필드가 포함된 경우 샘플은 프레임에 대한 스캔 선의 절반만 포함하므로 샘플 높이가 프레임 높이의 절반입니다. 소스 콘텐츠의 특성이 달리 지시하지 않는 한 인터리브 필드를 사용하는 것이 좋습니다.

이러한 특성은 한 샘플에서 다음 샘플로 변경됩니다. 그러나 비디오 구성 요소는 스트리밍을 시작하기 전에 전체 콘텐츠에 대해 알아야 합니다. 예를 들어 비디오가 인터레이스되는 경우 EVR(향상된 비디오 렌더러)은 디인터레이싱을 위해 비디오 메모리를 예약해야 합니다. 반면, 비디오가 완전히 점진적인 프레임인 경우 EVR은 렌더링 파이프라인을 최적화할 수 있습니다. 파이프라인에 디인터레이싱 단계를 추가하면 렌더링 대기 시간이 증가합니다.

인터레이싱에 대한 정보는 다음 두 위치에 저장됩니다.

  • 스트림의 인터레이싱에 대한 일반 정보는 미디어 형식에 배치됩니다. 미디어 유형에 대한 자세한 내용은 미디어 형식을 참조하세요.

  • 각 샘플에서 변경할 수 있는 정보는 샘플에 특성으로 배치됩니다. 샘플에 대한 자세한 내용은 미디어 샘플을 참조하세요.

미디어 형식의 인터레이스 정보

미디어 형식의 MF_MT_INTERLACE_MODE 특성은 스트림 전체가 인터레이스되는 방법을 설명합니다. 이 특성의 값은 MFVideoInterlaceMode 열거형의 멤버입니다. 비디오 미디어 유형에는 항상 이 특성이 있어야 합니다.

  • 스트림에 인터레이스된 프레임이 없는 프로그레시브 프레임만 포함된 경우 MFVideoInterlace_Progressive 사용합니다.
  • 스트림에 인터레이스된 프레임만 포함되고 모든 샘플에 두 개의 인터리브 필드가 포함된 경우 MFVideoInterlace_FieldInterleavedUpperFirst 또는 MFVideoInterlace_FieldInterleavedLowerFirst 사용합니다.
  • 스트림에 인터레이스된 프레임만 포함되고 모든 샘플에 단일 필드가 포함된 경우 MFVideoInterlace_FieldSingleUpper 또는 MFVideoInterlace_FieldSingleLower 사용합니다. 필드가 상한과 하한을 번갈아 사용하는 경우 이 두 값 중 어느 값이 사용되는지는 중요하지 않습니다. 형식에 상위 필드 또는 하위 필드만 포함된 경우 콘텐츠에 해당하는 값을 설정합니다.
  • 스트림에 인터레이스 및 프로그레시브 프레임이 혼합되어 있거나 필드 우위가 전환되는 경우 미디어 형식을 MFVideoInterlace_MixedInterlaceOrProgressive 설정합니다. 샘플 특성을 사용하여 각 프레임을 설명합니다.

다음 표에서는 이 특성을 요약합니다.

MF_MT_INTERLACE_MODE 인터레이스? 샘플 첫 번째 필드
MFVideoInterlace_Progressive No 프로그레시브 프레임 해당 없음
MFVideoInterlace_FieldInterleavedUpperFirst Yes 인터리브 필드 첫 번째 위쪽
MFVideoInterlace_FieldInterleavedLowerFirst Yes 인터리브 필드 먼저 낮추기
MFVideoInterlace_FieldSingleUpper Yes 단일 필드 첫 번째 위쪽
MFVideoInterlace_FieldSingleLower Yes 단일 필드 먼저 낮추기
MFVideoInterlace_MixedInterlaceOrProgressive 다양할 수 있음 인터리브 필드 또는 프로그레시브 프레임 다양할 수 있음

 

인터리브 필드와 단일 필드를 혼합할 수 없습니다. 서로 전환하려면 미디어 형식을 변경해야 합니다.

샘플의 인터레이스 플래그

샘플 특성을 사용하여 한 샘플에서 다음 샘플로 변경할 수 있는 정보가 표시됩니다. IMFSample 인터페이스를 사용하여 이러한 특성을 얻거나 설정합니다.

이 섹션에 나열된 모든 인터레이스 특성에는 부울 값이 있습니다. 실제로 이러한 각 특성에는 TRUE, FALSE 또는 설정되지 않은 세 가지 값이 있을 수 있습니다. 특성이 설정되지 않은 경우 미디어 형식에서 값을 가져옵니다. 특성이 설정되면 값이 미디어 형식을 재정의합니다. 플래그와 미디어 형식의 일부 조합은 유효하지 않습니다.

attribute 설명
MFSampleExtension_Interlaced TRUE이면 프레임이 인터레이스됩니다. FALSE이면 프레임이 점진적입니다.
미디어 형식이 MFVideoInterlace_MixedInterlaceOrProgressive 경우 모든 샘플에서 이 특성을 설정합니다.
MFSampleExtension_BottomFieldFirst 이 플래그의 의미는 샘플에 인터리브 필드 또는 단일 필드가 포함되어 있는지 여부에 따라 달라집니다.
  • 인터리브 필드: TRUE이면 아래쪽 필드가 첫 번째입니다. FALSE이면 위쪽 필드가 첫 번째입니다.
  • 단일 필드: TRUE이면 샘플에 하위 필드가 포함됩니다. FALSE이면 샘플에 상위 필드가 포함됩니다.
미디어 형식이 MFVideoInterlace_FieldSingleUpper, MFVideoInterlace_FieldSingleLower 또는 MFVideoInterlace_MixedInterlaceOrProgressive 경우 모든 인터레이스 샘플에서 이 특성을 설정합니다.
MFSampleExtension_RepeatFirstField TRUE이면 첫 번째 필드가 반복됩니다. FALSE이거나 설정되지 않은 경우 첫 번째 필드는 반복되지 않습니다.
MFSampleExtension_SingleField TRUE이면 샘플에 단일 필드가 포함됩니다. FALSE이면 샘플에 인터리브 필드가 포함됩니다.

 

다음 표에서는 미디어 유형에 따라 필수, 선택 사항 또는 금지된 플래그를 보여 주세요.

미디어 유형 인터레이스 플래그 BottomFieldFirst 플래그 RepeatFirstField 플래그 SingleField 플래그
프로그레시브 선택적; 설정되면 FALSE여야 합니다. 설정하지 마세요. 설정하지 마세요. 설정하지 마세요.
인터리브 필드 선택적; 설정된 경우 는 TRUE여야 합니다. 선택적; 설정되면 미디어 형식과 일치해야 합니다. 설정하지 마세요. 선택적; 설정되면 FALSE여야 합니다.
단일 필드 선택적; 설정된 경우 는 TRUE여야 합니다. 필수 사항입니다. 설정하지 마세요. TRUE로 설정되었습니다.
혼합됨 필수 사항입니다. 필수 사항입니다. 필수 사항입니다. 선택적; 설정되면 FALSE여야 합니다.

 

특성이 선택 사항인 경우 미디어 형식은 이미 정보를 정의합니다. 특성이 일치하도록 설정하는 것은 유효하지만 필수는 아닙니다.

예를 들어 미디어 형식이 MFVideoInterlace_Progressive 경우 스트림의 모든 프레임이 점진적임을 의미합니다. 따라서 MFSampleExtension_Interlaced 특성을 FALSE로 설정하거나 특성을 설정하지 않은 상태로 둘 수 있습니다.

권장 사항

이 섹션에는 다양한 유형의 콘텐츠에 대한 권장 사항이 포함되어 있습니다.

  1. 비디오는 모두 프로그레시브 프레임입니다.
  • 미디어 형식을 MFVideoInterlace_Progressive 설정합니다.

  • MFSampleExtension_Interlaced 특성을 설정하거나 모든 프레임에서 FALSE로 설정하지 마세요.

  • MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstField 또는 MFSampleExtension_SingleField 특성을 설정하지 마세요.

  1. 비디오는 모두 동일한 필드 우위를 가진 인터레이스 필드입니다. 샘플에는 인터리브 필드가 포함되어 있습니다.
  • 미디어 형식을 MFVideoInterlace_FieldInterleavedUpperFirst 또는 MFVideoInterlace_FieldInterleavedLowerFirst 설정합니다.

  • MFSampleExtension_Interlaced 특성을 설정하거나 모든 프레임에서 TRUE로 설정하지 마세요.

  • MFSampleExtension_BottomFieldFirst 특성을 설정하거나 모든 프레임의 값을 미디어 형식과 일치하도록 설정하지 마세요.

  • MFSampleExtension_RepeatFirstField 특성을 설정하거나 모든 프레임에서 FALSE로 설정하지 마세요.

  • MFSampleExtension_SingleField 특성을 설정하거나 모든 프레임에서 FALSE로 설정하지 마세요.

  1. 비디오에는 반복되는 필드와 다양한 필드 우위(예: DVD 비디오)가 있는 인터레이스 및 프로그레시브 프레임이 혼합되어 있습니다.
  • 미디어 형식을 MFVideoInterlace_MixedInterlaceOrProgressive 설정합니다.

  • 모든 프레임에서 MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirstMFSampleExtension_RepeatFirstField 특성을 설정합니다.

  • MFSampleExtension_SingleField 특성을 설정하거나 모든 프레임에서 FALSE로 설정하지 마세요.

  1. 비디오는 인터레이스되고 샘플에는 단일 필드가 포함됩니다.
  • 미디어 형식을 MFVideoInterlace_FieldSingleUpper 또는 MFVideoInterlace_FieldSingleLower 설정합니다.

  • 모든 프레임에서 MFSampleExtension_BottomFieldFirst 특성을 설정합니다.

  • MFSampleExtension_Interlaced 특성을 설정하거나 모든 프레임에서 TRUE로 설정하지 마세요.

  • MFSampleExtension_RepeatFirstField 특성을 설정하거나 모든 프레임에서 FALSE로 설정하지 마세요.

  • MFSampleExtension_SingleField 특성을 설정하거나 모든 프레임에서 TRUE로 설정하지 마세요.

대부분의 비디오 콘텐츠는 이러한 범주 중 하나에 속합니다.

MPEG-2 매핑

MPEG-2 콘텐츠의 경우 다음 매핑을 사용하여 MPEG-2 플래그를 Media Foundation 샘플 특성으로 변환합니다.

picture_structure

샘플 특성
frame = MFSampleExtension_SingleField False
top_field = MFSampleExtension_SingleField 사실
= MFSampleExtension_BottomFieldFirst False
bottom_field = MFSampleExtension_SingleField 사실
= MFSampleExtension_BottomFieldFirst 사실

 

progressive_frame

샘플 특성
0 = MFSampleExtension_Interlaced 사실
1 = MFSampleExtension_Interlaced False

 

top_field_first

샘플 특성
0 = MFSampleExtension_BottomFieldFirst 사실
1 = MFSampleExtension_BottomFieldFirst False

 

repeat_first_field

샘플 특성
0 = MFSampleExtension_RepeatFirstField False
1 = MFSampleExtension_RepeatFirstField 사실

 

Single-Field 샘플

미디어 형식이 MFVideoInterlace_FieldSingleUpper 또는 MFVideoInterlace_FieldSingleLower 경우 각 샘플에 단일 필드가 포함되어 있음을 의미합니다. 그러나 미디어 형식은 전체 프레임을 설명합니다. 따라서 각 버퍼에는 미디어 형식에 지정된 필드 줄 수의 절반만 포함됩니다. 예를 들어 미디어 유형이 비디오를 720 × 480으로 설명하는 경우 각 필드에는 240개의 검색 줄이 포함되므로 각 버퍼에는 240개의 픽셀 행만 포함됩니다. 단일 필드 샘플을 사용하여 미디어 형식을 허용하는 구성 요소를 작성하는 경우 버퍼의 데이터에 액세스할 때 이 사실을 고려해야 합니다.

기하학적 조리개(MF_MT_GEOMETRIC_APERTURE 특성) 및 최소 표시 조리개(MF_MT_MINIMUM_DISPLAY_APERTURE 특성)에는 동일한 규칙이 적용됩니다. 이러한 영역은 개별 필드가 아닌 전체 프레임의 관점에서 지정됩니다.

DirectShow 매핑

DirectShow에서 샘플별 인터레이스 정보는 AM_SAMPLE2_PROPERTIES 구조체의 dwTypeSpecificFlags 멤버에 포함됩니다. 다음 표에는 Media Foundation에 해당하는 특성이 표시됩니다.

DirectShow 샘플 플래그 Media Foundation 샘플 특성
AM_VIDEO_FLAG_INTERLEAVED_FRAME = MFSampleExtension_SingleField FALSE입니다.
AM_VIDEO_FLAG_FIELD1 = MFSampleExtension_Interlaced TRUE입니다.
= MFSampleExtension_SingleField TRUE입니다.
= MFSampleExtension_BottomFieldFirst FALSE입니다.
AM_VIDEO_FLAG_FIELD2 = MFSampleExtension_Interlaced TRUE입니다.
= MFSampleExtension_SingleField TRUE입니다.
= MFSampleExtension_BottomFieldFirst TRUE입니다.
AM_VIDEO_FLAG_WEAVE = MFSampleExtension_Interlaced FALSE입니다. (이 플래그는 드라이버가 두 필드를 디인터레이스해서는 안 됨을 나타냅니다.)
AM_VIDEO_FLAG_FIELD1FIRST = MFSampleExtension_BottomFieldFirst FALSE입니다. 콘텐츠가 인터레이스되고 AM_VIDEO_FLAG_FIELD1FIRST 플래그가 없는 경우 이 특성을 TRUE로 설정합니다.
AM_VIDEO_FLAG_REPEAT_FIELD = MFSampleExtension_RepeatFirstField TRUE입니다. AM_VIDEO_FLAG_REPEAT_FIELD 플래그가 없으면 이 특성을 FALSE로 설정합니다.

 

DirectShow 샘플에 샘플 플래그가 없는 경우 VIDEOINFOHEADER2 구조체의 dwInterlaceFlags 값을 사용합니다.

DirectShow interlace 플래그 Media Foundation 샘플 특성
AMINTERLACE_IsInterlaced = MFSampleExtension_Interlaced TRUE입니다.
AMINTERLACE_1FieldPerSample = MFSampleExtension_SingleField TRUE입니다.
AMINTERLACE_Field1First = MFSampleExtension_BottomFieldFirst FALSE입니다.

 

비디오 미디어 유형

미디어 형식