KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET

A ID da propriedade KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET definida em KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY é usada para definir as configurações por quadro no driver.

Resumo de uso

Para definir as configurações por quadro, o controle de propriedade KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET é enviado ao driver juntamente com uma carga de configurações por quadro.

Essa propriedade pode ser lida ou gravada. Embora uma chamada GET possa ser usada para retornar as últimas configurações por quadro definidas no driver, a chamada GET não é exposta ao cliente do aplicativo e só é emitida no momento da inicialização quando o controle de configuração por quadro é construído pelo pipeline do MF, em que o driver deve retornar STATUS_BUFFER_OVERFLOW com o tamanho do buffer de 0.

Em uma chamada GET, um buffer de comprimento zero é enviado para o driver primeiro para descobrir o tamanho do buffer de dados necessário para manter todas as configurações por quadro que o driver tem. Em resposta a essa chamada, o driver deve retornar STATUS_BUFFER_OVERFLOW com o tamanho de buffer de configurações por quadro necessário que deve ser 0 se nenhuma configuração por quadro tiver sido definida ou pelo menos o tamanho de KSCAMERA_PERFRAMESETTING_HEADER caso contrário.

A carga de configuração por quadro deve começar com um KSCAMERA_PERFRAMESETTING_HEADER, seguido por uma ou mais configurações de quadro. O número de configurações de quadro é especificado em FrameCount. As configurações de cada quadro devem começar com um KSCAMERA_PERFRAMESETTING_FRAME_HEADER, seguido por zero ou mais configurações de item. O número de configurações de item é especificado em ItemCount. As configurações de cada item, se houver, devem começar com um KSCAMERA_PERFRAMESETTING_ITEM_HEADER.

Para as configurações de cada item, se uma carga value estiver presente, o KSCAMERA_PERFRAMESETTING_ITEM_HEADER deverá ser seguido por um KSCAMERA_EXTENDEDPROP_VALUE. Se um item personalizado estiver presente, KSCAMERA_PERFRAMESETTING_ITEM_HEADER deverá ser seguido por um KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM, seguido pelos dados personalizados associados à ID do GUID especificada em KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM.

Se FrameCount for 0, o driver deverá rejeitar o conteúdo das configurações por quadro. Se ItemCount for 0, nenhuma configuração de quadro será especificada. O driver deve aplicar configurações globais ao quadro associado. Por exemplo, FrameCount = 1 e ItemCount = 0 implica uma sequência de fotos de variável de quadro único com configurações globais.

A figura a seguir ilustra o layout da estrutura de dados de uma configuração de conteúdo de configurações por quadro. No exemplo abaixo, uma configuração por quadro para quatro quadros é configurada com o quadro 0 contendo três itens, dois sem carga e um com uma carga value; quadro 1 que contém dois itens, um sem carga e outro com um conteúdo de valor; quadro 2 contendo 0 item, o que implica as configurações globais do quadro 2; quadro 3 contendo quatro itens, um com uma carga de valor, dois cada com um item personalizado e um conteúdo de dados personalizados e um sem conteúdo.

estrutura do perframesetting-header.

  1. O tamanho no cabeçalho de configurações por quadro representa o tamanho total da carga a ser preenchido em KSCAMERA_PERFRAMESETTING_HEADER. Tamanho

  2. O tamanho no quadro de configurações por quadro representa o tamanho a ser preenchido em KSCAMERA_PERFRAMESETTING_FRAME_HEADER. Tamanho de um quadro.

  3. O tamanho do item representa o tamanho a ser preenchido em KSCAMERA_PERFRAMESETTING_ITEM_HEADER. Tamanho de um item.

  4. O tamanho do item personalizado representa o tamanho a ser preenchido em KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM. Tamanho de um item personalizado.

Tempo de exposição de configurações por quadro

Se o tempo de exposição manual for especificado nas configurações por quadro, KSCAMERA_EXTENDEDPROP_VALUE. Value.ll conterá o tempo de exposição desejado em uma chamada SET e o tempo de exposição atual em uso em uma chamada GET .

Compensação de configurações por quadro

Se a compensação de configurações manuais for especificada nas configurações por quadro, KSCAMERA_EXTENDEDPROP_VALUE. Value.l conterá a compensação de exposição desejada em uma chamada SET e a compensação de exposição atual em uso em uma chamada GET .

Foco das configurações por quadro

Se as configurações manuais por quadro forem especificadas em configurações por quadro, KSCAMERA_EXTENDEDPROP_VALUE. Value.ul conterá a posição de lente desejada em uma chamada SET e a posição da lente atual em uso em uma chamada GET .

ISO de configurações por quadro

Se o driver não der suporte a KSCAMERA_EXTENDEDPROP_ISO_MANUAL, o payload Value não será incluído. Caso contrário, o cabeçalho do item de configuração por quadro deve ser seguido por um KSCAMERA_EXTENDEDPROP_VALUE. Em uma chamada SET , KSCAMERA_EXTENDEDPROP_VALUE. Value.ul conterá a velocidade de ISO desejada se KSCAMERA_EXTENDEDPROP_ISO_MANUAL tiver suporte e for especificado em KSCAMERA_PERFRAMESETTING_ITEM_HEADER. Sinalizadores.

O seguinte mostra como o cabeçalho do item e a carga de valor devem ser semelhantes quando a funcionalidade ISO de configurações por quadro é KSCAMERA_EXTNDEDPROP_ISO_AUTO, KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, etapa =20), da seguinte maneira:

KSCAMERA_EXTNDEDPROP_ISO_AUTO, 
KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, step =20)
  1. Se a velocidade iso for 70

    KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL
    KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 70
    
  2. Se a velocidade iso for 50

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

A tabela a seguir resume os controles e valores disponíveis para configurações por quadro. A disponibilidade real é determinada pela capacidade real do driver, que pode ser obtida usando KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CAPABILITY.

Nome Valores disponíveis

Tempo de exposição

Auto ou tempo em 100 nanossegundos.

Piscando

Ativado/Desativado, auto, redução de olho vermelho ativado/desligado, potência flash em porcentagem.

Compensação de exposição

Valor automático ou da etapa de compensação.

Velocidade ISO

Automático ou manual com valor ISO inteiro.

Foco

Posição de lente automática ou lógica. Esse valor não tem uma unidade específica.

Propriedades personalizadas

O OEM define isso com um GUID personalizado e dados de propriedade.

Imagem de confirmação

Ativar/desativar

Para passar os dados da propriedade personalizada para as configurações por quadro, o aplicativo faz o seguinte:

  1. Chama o QueryInterface em IFrameSettingsControls para obter a interface IMFGetServices associada às configurações por quadro.

  2. Chama o GetService da interface IMFGetServices para criar uma interface IMFAttributes personalizada nas configurações por quadro.

  3. Chama SetUINT32, SetBlob etc no GUID de propriedade personalizada para definir os dados de propriedade personalizada nos IMFAttributes associados às configurações por quadro.

A estrutura procurará os IMFAttributes personalizados para construir as cargas de item personalizadas se houver ao montar a carga de configurações por quadro a ser definida no driver.

O campo LoopCount em KSCAMERA_PERFRAMESETTING_HEADER especifica o número de repetições de que as configurações por quadro devem ser aplicadas aos quadros futuros a serem capturados em uma sequência de fotos. O LoopCount é codificado em 1 pelo pipeline (por exemplo, as configurações por quadro só serão aplicadas uma vez sem repetições adicionais). O campo FrameCount em KSCAMERA_PERFRAMESETTING_HEADER especifica o número de configurações de quadro que as configurações por quadro devem ser aplicadas aos quadros em cada repetição.

O campo ItemCount em KSCAMERA_PERFRAMESETTING_FRAME_HEADER especifica o número de configurações de item que devem ser aplicadas ao quadro correspondente. Se ItemCount for 0, as configurações globais deverão ser aplicadas ao quadro correspondente.

A tabela a seguir lista as configurações possíveis e os tipos de sequência de fotos correspondentes.

LoopCount FrameCount ItemCount Tipo

L(L=1)

N(N>0)

S(S>=0)

Sequência de fotos de variável finita

L(L=1)

1

0

Sequência de fotos de variável finita de um quadro com configurações globais

L(L=1)

0

S

Configuração inválida

A sequência de fotos da variável foi simplificada para executar capturas finitas com apenas uma repetição. A sequência de fotos com configurações por quadro sempre será sinalizada como uma sequência de fotos variável e a carga de configurações por quadro sempre é necessária.

Se a contagem de loops for L (L = 1) e a contagem de quadros for N (N > 0), será uma sequência de fotos de variável finita. As configurações por quadro serão repetidas L = 1 vezes com as configurações de quadro N aplicadas aos próximos N quadros futuros em cada repetição.

Se a contagem de loops for L (L = 1), a contagem de quadros for 1 e a contagem de itens for 0, será uma sequência de fotos de variável finita de um quadro com configurações globais.

A sequência de fotos da variável é simplificada para não solicitar quadros passados. O pipeline codificará a contagem de fotos anteriores solicitada (por exemplo, RequestedHistoryFrames) como 0. O driver fornece apenas quadros futuros em uma sequência de fotos variável. A figura a seguir ilustra o número esperado de quadros a serem entregues pelo driver em uma sequência de fotos variável. A contagem de fotos anteriores é especificada em KSCAMERA_EXTENDEDPROP_PHOTOMODE. RequestedHistoryFrames pelo KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE controle de propriedade estendido que é codificado para 0 pelo pipeline.

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

Para a sequência de fotos da variável finita, o driver deve marcar o KSSTREAM_HEADER. OptionsFlags para o último quadro com o sinalizador KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE . Isso garantirá que o driver pare automaticamente de entregar quadros de volta ao pipeline do MF depois que a quantidade de quadros futuros esperada tiver sido entregue. Isso interrompe efetivamente a sequência de fotos e notifica o cliente do aplicativo sobre a conclusão da sequência de fotos. Isso acontece quando o driver termina de capturar o último quadro na sequência de fotos da variável finita.

Requisitos

parâmetro

Ksmedia.h