Cargas de controle de câmera estendida
As propriedades de controle dentro do conjunto de propriedades KSPROPERTYSETID_ExtendedCameraControl usam um formato de carga comum para obter e definir os dados da propriedade.
Cabeçalho da propriedade da câmera estendida
Todas as cargas começam com uma estrutura KSCAMERA_EXTENDEDPROP_HEADER . Essa estrutura contém o destino do PIN com os sinalizadores de controle e as funcionalidades associados. Dependendo do controle específico, o membro Capabilities 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 será definido em Funcionalidades. Além disso, se o controle for cancelável, o membro Recursos incluirá o sinalizador KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE.
O tamanho da carga é definido no membro Size. O valor de Size é todo o tamanho da carga. Se a propriedade usar apenas o cabeçalho, sizeof = (KSCAMERA_EXTENDEDPROP_HEADER). Caso contrário, Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(control specific data).
Controlar dados específicos
Alguns controles de propriedade usam uma estrutura adicional para armazenar dados adicionais. Quando valores de dados únicos forem 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;