Compartilhar via


Cargas de controle de câmera estendida

As propriedades de controle dentro do conjunto de propriedades KSPROPERTYSETID_ExtendedCameraControl usam um formato de conteúdo comum para obter e definir os dados da propriedade.

Cabeçalho de propriedade de câmera estendida

Todas as cargas começam com uma estrutura KSCAMERA_EXTENDEDPROP_HEADER. Esta estrutura contém o alvo do PIN com os sinalizadores de controle e capacidades associadas. Dependendo do controle específico, o membro recursos conterá um conjunto de recursos fornecidos pelo controle. O membro Flags conterá os recursos reais atualmente definidos ou a serem definidos para o controle.

O membro PinId especifica o destino que é o PIN da câmera ou o PIN do filtro. Se a propriedade for um controle de nível de filtro, PinId será definido como KSCAMERA_EXTENDEDPROP_FILTERSCOPE.

Um controle de propriedade é síncrono ou assíncrono. Se o controle for síncrono, o sinalizador KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL está definido em Capacidades. Além disso, se o controle for cancelável, o membro Capacidades incluirá o sinalizador KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE.

O tamanho do payload é definido no membro Tamanho. O valor de Tamanho é todo o tamanho da carga. Se a propriedade usar somente o cabeçalho, então Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER). Caso contrário, Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(dados específicos de controle).

Controlar dados específicos

Alguns controles de propriedade usam uma estrutura adicional para armazenar dados adicionais. Quando valores de dados únicos são usados, os dados da propriedade conterão uma estrutura KSCAMERA_EXTENDEDPROP_VALUE após KSCAMERA_EXTENDEDPROP_HEADER. A estrutura KSCAMERA_EXTENDEDPROP_VALUE permite que a propriedade expresse um único valor como um dos vários tipos de dados.

Para obter ou definir dados adicionais, uma propriedade terá sua própria estrutura de dados especial após o KSCAMERA_EXTENDEDPROP_HEADER. O exemplo a seguir mostra um fragmento de código de driver definindo os dados específicos da propriedade para uma solicitação KSPROPERTY_TYPE_GET da propriedade KSPROPERTY_CAMERACONTROL_EXTENDED_FIELDOFVIEW .

#define FL_WIDE_ANGLE 35
#define FL_NORMAL     50

PBYTE Payload = (PBYTE)PropData;
PKSCAMERA_EXTENDEDPROP_HEADER ExtendedPropHeader = (PKSCAMERA_EXTENDEDPROP_HEADER)Payload;
PKSCAMERA_EXTENDEDPROP_FIELDOFVIEW ExtendedDataFov = (PKSCAMERA_EXTENDEDPROP_FIELDOFVIEW)(Payload + sizeof(KSCAMERA_EXTENDEDPROP_HEADER));

ExtendedPropHeader->Version = 1;
ExtendedPropHeader->PinId = KSCAMERA_EXTENDEDPROP_FILTERSCOPE;
ExtendedPropHeader->Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(KSCAMERA_EXTENDEDPROP_FIELDOFVIEW);
ExtendedPropHeader->Result = 0;
ExtendedPropHeader->Flags = 0;
ExtendedPropHeader->Capability = 0;

ExtendedDataFov->NormalizedFocalLengthX = FL_WIDE_ANGLE;
ExtendedDataFov->NormalizedFocalLengthY = FL_WIDE_ANGLE;
ExtendedDataFov->Flag = 0;
ExtendedDataFov->Reserved = 0;