다음을 통해 공유


KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET

KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY 정의된 KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET 속성 ID는 드라이버에서 프레임별 설정을 설정하는 데 사용됩니다.

사용 요약

프레임 설정별로 설정하기 위해 KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET 속성 컨트롤은 프레임별 설정 페이로드와 함께 드라이버로 전송됩니다.

이 속성은 읽거나 쓸 수 있습니다. GET 호출을 사용하여 드라이버에 설정된 마지막 프레임당 설정을 반환할 수 있지만 GET 호출은 앱 클라이언트에 노출되지 않으며 MF 파이프라인에서 프레임별 설정 컨트롤을 생성할 때만 초기화 시점에 실행됩니다. 여기서 드라이버는 버퍼 크기가 0인 STATUS_BUFFER_OVERFLOW 반환해야 합니다.

GET 호출에서 드라이버에 있는 전체 프레임당 설정을 유지하는 데 필요한 데이터 버퍼 크기를 확인하기 위해 먼저 길이가 0인 버퍼가 드라이버로 전송됩니다. 이 호출에 대한 응답으로, 프레임당 설정이 설정되지 않거나 KSCAMERA_PERFRAMESETTING_HEADER 크기 이상인 경우 드라이버는 프레임당 필요한 설정 버퍼 크기가 0이어야 하는 STATUS_BUFFER_OVERFLOW반환해야 합니다.

프레임당 설정 페이로드는 KSCAMERA_PERFRAMESETTING_HEADER 시작되고 하나 이상의 프레임 설정으로 시작해야 합니다. 프레임 설정 수는 FrameCount에 지정됩니다. 각 프레임에 대한 설정은 KSCAMERA_PERFRAMESETTING_FRAME_HEADER 다음 항목 설정이 0개 이상이어야 합니다. 항목 설정의 수는 ItemCount에 지정됩니다. KSCAMERA_PERFRAMESETTING_ITEM_HEADER 시작해야 하는 경우 각 항목에 대한 설정입니다.

각 항목에 대한 설정의 경우 값 페이로드가 있는 경우 KSCAMERA_PERFRAMESETTING_ITEM_HEADER 뒤에 KSCAMERA_EXTENDEDPROP_VALUE 있어야 합니다. 사용자 지정 항목이 있는 경우 KSCAMERA_PERFRAMESETTING_ITEM_HEADER 뒤에 KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM 뒤에 KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM 지정된 GUID ID와 연결된 사용자 지정 데이터가 있어야 합니다.

FrameCount가 0인 경우 드라이버는 프레임별 설정 페이로드를 거부해야 합니다. ItemCount가 0이면 프레임 설정이 지정되지 않습니다. 드라이버는 연결된 프레임에 전역 설정을 적용해야 합니다. 예를 들어 FrameCount = 1 및 ItemCount = 0은 전역 설정이 있는 단일 프레임 변수 사진 시퀀스를 의미합니다.

아래 그림에서는 프레임별 설정 페이로드 구성의 데이터 구조 레이아웃을 보여 줍니다. 아래 예제에서는 4개의 프레임에 대한 프레임별 설정은 페이로드가 없는 항목 2개와 값 페이로드가 있는 항목 1개를 포함하는 프레임 0으로 구성됩니다. 프레임 1에는 페이로드가 없는 항목과 값 페이로드가 있는 항목이 하나씩 들어 있습니다. 프레임 2에 대한 전역 설정을 의미하는 0개 항목이 포함된 프레임 2; 프레임 3에는 값 페이로드가 있는 항목 4개, 사용자 지정 항목 및 사용자 지정 데이터 페이로드가 있는 항목 2개, 페이로드가 없는 항목이 각각 포함됩니다.

perframesetting-header의 구조체입니다.

  1. 프레임별 설정 헤더의 크기 는 KSCAMERA_PERFRAMESETTING_HEADER 채울 총 페이로드 크기를 나타냅니다 . 크기

  2. 프레임당 설정 프레임의 크기 는 KSCAMERA_PERFRAMESETTING_FRAME_HEADER 채울 크기를 나타냅니다 . 프레임의 크기입니다.

  3. 항목 크기 는 KSCAMERA_PERFRAMESETTING_ITEM_HEADER 채울 크기를 나타냅니다 . 항목의 크기입니다.

  4. 사용자 지정 항목 크기 는 KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM 채울 크기를 나타냅니다 . 사용자 지정 항목의 크기입니다.

프레임별 설정 노출 시간

프레임별 설정에 수동 노출 시간이 지정된 경우 KSCAMERA_EXTENDEDPROP_VALUE. Value.ll 에는 SET 호출에서 원하는 노출 시간과 GET 호출에 사용 중인 현재 노출 시간이 포함됩니다.

프레임별 설정 보정

프레임별 설정에 수동 설정 보정이 지정된 경우 KSCAMERA_EXTENDEDPROP_VALUE. Value.l 에는 SET 호출에서 원하는 노출 보정과 GET 호출에 사용 중인 현재 노출 보정이 포함됩니다.

프레임별 설정 포커스

프레임당 수동 설정이 프레임별 설정에 지정된 경우 KSCAMERA_EXTENDEDPROP_VALUE. Value.ul 에는 SET 호출에서 원하는 렌즈 위치와 GET 호출에서 사용 중인 현재 렌즈 위치가 포함됩니다.

프레임별 설정 ISO

드라이버가 KSCAMERA_EXTENDEDPROP_ISO_MANUAL 지원하지 않으면 값 페이로드가 포함되지 않습니다. 그렇지 않으면 프레임별 설정 항목 헤더 뒤에 KSCAMERA_EXTENDEDPROP_VALUE 있어야 합니다. SET 호출에서 KSCAMERA_EXTENDEDPROP_VALUE. value.ul은 KSCAMERA_EXTENDEDPROP_ISO_MANUAL 지원되고 KSCAMERA_PERFRAMESETTING_ITEM_HEADER 지정된 경우 원하는 ISO 속도를 포함합니다. 플래그.

다음은 프레임별 설정 ISO 기능이 KSCAMERA_EXTNDEDPROP_ISO_AUTO 때 항목 헤더 및 값 페이로드가 어떻게 표시되는지 보여 줍니다. KSCAMERA_EXTENDEDPROP_ISO_MANUAL(min = 30, max = 210, step =20).

KSCAMERA_EXTNDEDPROP_ISO_AUTO, 
KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, step =20)
  1. ISO 속도가 70인 경우

    KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL
    KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 70
    
  2. ISO 속도가 50인 경우

    KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL
    KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 50
    

다음 표에는 프레임별 설정에 사용할 수 있는 컨트롤과 값이 요약되어 있습니다. 실제 가용성은 KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CAPABILITY 사용하여 얻을 수 있는 드라이버의 실제 기능에 따라 결정됩니다.

Name 사용 가능한 값

노출 시간

자동 또는 시간(100나노초)입니다.

깜박임

켜기/끄기, 자동, 적목 현상 감소 켜기/끄기, 플래시 전원(백분율)

노출 보정

자동 또는 보정 단계 값입니다.

ISO 감도

정수 ISO 값이 있는 자동 또는 수동입니다.

포커스

자동 또는 논리 렌즈 위치입니다. 이 값에는 특정 단위가 없습니다.

사용자 지정 속성

OEM은 사용자 지정 GUID 및 속성 데이터를 사용하여 이를 정의합니다.

확인 이미지

설정/해제

사용자 지정 속성 데이터를 프레임별 설정에 전달하기 위해 앱은 다음을 수행합니다.

  1. IFrameSettingsControls의 QueryInterface를 호출하여 프레임별 설정과 연결된 IMFGetServices 인터페이스를 가져옵니다.

  2. IMFGetServices 인터페이스에서 GetService를 호출하여 프레임별 설정에 사용자 지정 IMFAttributes 인터페이스를 만듭니다.

  3. 사용자 지정 속성 GUID에서 SetUINT32, SetBlob 등을 호출하여 프레임별 설정과 연결된 IMFAttributes에서 사용자 지정 속성 데이터를 설정합니다.

프레임워크는 사용자 지정 IMFAttributes를 조회하여 드라이버에서 설정할 프레임별 설정 페이로드를 어셈블할 때 사용자 지정 항목 페이로드를 생성합니다.

KSCAMERA_PERFRAMESETTING_HEADERLoopCount 필드는 사진 시퀀스에서 캡처할 이후 프레임에 프레임별 설정을 적용해야 하는 반복 횟수를 지정합니다. LoopCount는 파이프라인에 의해 1로 하드 코딩됩니다(예: 프레임당 설정은 추가 반복 없이 한 번만 적용됨). KSCAMERA_PERFRAMESETTING_HEADERFrameCount 필드는 각 반복의 프레임에 프레임당 설정을 적용해야 하는 프레임 설정 수를 지정합니다.

KSCAMERA_PERFRAMESETTING_FRAME_HEADERItemCount 필드는 해당 프레임에 적용해야 하는 항목 설정 수를 지정합니다. ItemCount가 0이면 해당 프레임에 전역 설정을 적용해야 합니다.

아래 표에는 가능한 구성 및 해당 사진 시퀀스 유형이 나열되어 있습니다.

LoopCount FrameCount ItemCount 형식

L(L=1)

N(N>0)

S(S>=0)

유한 변수 사진 시퀀스

L(L=1)

1

0

전역 설정이 있는 한 프레임 유한 변수 사진 시퀀스

L(L=1)

0

S

유효하지 않은 구성

하나의 반복으로 유한한 캡처를 수행하도록 가변 사진 시퀀스가 간소화되었습니다. 프레임별 설정이 있는 사진 시퀀스는 항상 가변 사진 시퀀스로 플래그가 지정되며 프레임별 설정 페이로드는 항상 필요합니다.

루프 수가 L(L = 1)이고 프레임 수가 N(N > 0)이면 유한 변수 사진 시퀀스입니다. 프레임당 설정은 각 반복에서 다음 N개의 이후 프레임에 적용된 N 프레임 설정과 함께 L = 1번 반복됩니다.

루프 수가 L(L = 1)이면 프레임 수는 1이고 항목 수는 0이면 전역 설정이 있는 한 프레임 유한 변수 사진 시퀀스입니다.

가변 사진 시퀀스는 과거 프레임을 요청하지 않도록 더욱 간소화됩니다. 파이프라인은 요청된 과거 사진 수(예: RequestedHistoryFrames)를 0으로 하드 코딩합니다. 드라이버는 가변 사진 시퀀스에서 미래 프레임만 제공합니다. 다음 그림에서는 드라이버가 가변 사진 시퀀스로 전달할 예상 프레임 수를 보여 줍니다. 과거 사진 수는 KSCAMERA_EXTENDEDPROP_PHOTOMODE 지정됩니다 . 파이프라인에서 0으로 하드 코딩된 KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE 확장 속성 컨트롤에 의한 RequestedHistoryFrames입니다.

N : Frame Count
L : Loop Count
P : Past Photos Requested
T : Total number of frame delivered by driver
L = 1
P = 0
T = (N * L) + P

유한 변수 사진 시퀀스의 경우 드라이버는 KSSTREAM_HEADER 표시해야 합니다 . Options KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE 플래그가 있는 마지막 프레임에 대한 플래그 입니다. 이렇게 하면 향후 프레임의 양이 전달된 후 드라이버가 MF 파이프라인으로 프레임 배달을 자동으로 중지합니다. 이렇게 하면 사진 시퀀스가 효과적으로 중지되고 앱 클라이언트에 사진 시퀀스 완료를 알 수 있습니다. 이 문제는 드라이버가 유한 변수 사진 시퀀스에서 마지막 프레임 캡처를 완료할 때 발생합니다.

요구 사항

헤더

Ksmedia.h