PIBIO_ENGINE_ACCEPT_SAMPLE_DATA_FN função de retorno de chamada (winbio_adapter.h)
Chamada pela função SensorAdapterPushDataToEngine implementada pelo adaptador do sensor para notificar o adaptador do mecanismo para aceitar uma amostra biométrica bruta e extrair um conjunto de recursos. O conjunto de recursos pode ser usado para correspondência ou registro.
Sintaxe
PIBIO_ENGINE_ACCEPT_SAMPLE_DATA_FN PibioEngineAcceptSampleDataFn;
HRESULT PibioEngineAcceptSampleDataFn(
[in, out] PWINBIO_PIPELINE Pipeline,
[in] PWINBIO_BIR SampleBuffer,
[in] SIZE_T SampleSize,
[in] WINBIO_BIR_PURPOSE Purpose,
[out] PWINBIO_REJECT_DETAIL RejectDetail
)
{...}
Parâmetros
[in, out] Pipeline
Ponteiro para uma estrutura WINBIO_PIPELINE associada à unidade biométrica que executa a operação.
[in] SampleBuffer
Ponteiro para uma estrutura WINBIO_BIR que contém o exemplo biométrico a ser processado.
[in] SampleSize
Um valor SIZE_T que contém o tamanho da estrutura WINBIO_BIR retornada no parâmetro SampleBuffer .
[in] Purpose
Uma máscara de bits WINBIO_BIR_PURPOSE que especifica o uso pretendido do exemplo. A estrutura WINBIO_BIR_PURPOSE especifica a finalidade para a qual os dados de captura devem ser usados e (como resultado) como eles devem ser otimizados. Isso pode ser um OR bit a bit dos seguintes valores:
- WINBIO_PURPOSE_VERIFY
- WINBIO_PURPOSE_IDENTIFY
- WINBIO_PURPOSE_ENROLL
- WINBIO_PURPOSE_ENROLL_FOR_VERIFICATION
- WINBIO_PURPOSE_ENROLL_FOR_IDENTIFICATION
[out] RejectDetail
Um ponteiro para um valor WINBIO_REJECT_DETAIL que recebe informações adicionais sobre a falha ao processar uma amostra biométrica. Se a operação for bem-sucedida, esse parâmetro será definido como zero. Os seguintes valores são definidos para amostras de impressão digital:
- WINBIO_FP_TOO_HIGH
- WINBIO_FP_TOO_LOW
- WINBIO_FP_TOO_LEFT
- WINBIO_FP_TOO_RIGHT
- WINBIO_FP_TOO_FAST
- WINBIO_FP_TOO_SLOW
- WINBIO_FP_POOR_QUALITY
- WINBIO_FP_TOO_SKEWED
- WINBIO_FP_TOO_SHORT
- WINBIO_FP_MERGE_FAILURE
Retornar valor
Se a função for bem-sucedida, ela retornará S_OK. Se a função falhar, ela deverá retornar um dos seguintes valores HRESULT para indicar o erro.
Código de retorno | Descrição |
---|---|
|
O argumento SampleSize não pode ser zero. O argumento Purpose deve ser um OR bit a bit dos valores listados na descrição do parâmetro. |
|
Os argumentos Pipeline, SampleBuffer e RejectDetail não podem ser NULL. |
|
A operação não pôde ser concluída devido à memória insuficiente. |
|
Não foi possível processar os dados para criar o conjunto de recursos necessário. RejectDetail contém informações adicionais sobre a falha. |
Comentários
O conjunto de recursos criado chamando essa função é mantido no pipeline de unidade biométrica após o retorno da função. Ele substitui qualquer conjunto de recursos anterior.
A implementação do adaptador de sensor da função SensorAdapterPushDataToEngine deve usar a seguinte função wrapper (definida em Winbio_adapter.h) para chamar EngineAdapterAcceptSampleData:
HRESULT WbioEngineAcceptSampleData(
__inout PWINBIO_PIPELINE Pipeline,
__in PWINBIO_BIR SampleBuffer,
__in SIZE_T SampleSize,
__in WINBIO_BIR_PURPOSE Purpose,
__out PWINBIO_REJECT_DETAIL RejectDetail
);
A estrutura WINBIO_BIR passada no parâmetro SampleBuffer é a propriedade do adaptador do sensor. Como o adaptador do sensor controla o tempo de vida do objeto WINBIO_BIR , a função EngineAdapterAcceptSampleData não deve tentar desalocar a estrutura nem salvar um ponteiro nela. Ao não salvar o ponteiro, você impede que outras partes do adaptador do mecanismo tentem usar a estrutura WINBIO_BIR depois que a função EngineAdapterAcceptSampleData retornar.
Se o campo Deslocamento do membro StandardDataBlock da estrutura WINBIO_BIR for maior que zero (indicando que o BIR contém uma amostra biométrica no formato de dados padrão), o campo BiometricDataFormat do membro HeaderBlock deverá ser definido da seguinte maneira:
- O campo Proprietário deve ser WINBIO_ ANSI_381_FORMAT_OWNER.
- O campo Tipo deve ser WINBIO_ANSI_381_FORMAT_TYPE.
A Estrutura Biométrica do Windows também pressupõe que o membro HeaderBlock (uma estrutura WINBIO_BIR_HEADER ) contenha os valores DataFlags e Purpose usados pelo adaptador do sensor para capturar o exemplo.
Sensores de impressão digital que processam amostras de impressão digital e rejeitam deslizes inválidos no Adaptador de Mecanismo também devem usar valores válidos para WINBIO_BIR_PURPOSE.
Exemplos
O pseudocódigo a seguir mostra uma implementação possível dessa função. O exemplo não é compilado. Você deve adaptá-lo para se adequar ao seu propósito.
//////////////////////////////////////////////////////////////////////////////////////////
//
// EngineAdapterAcceptSampleData
//
// Purpose:
// Notifies the engine adapter to accept a raw biometric sample and
// extract a feature set.
//
// Parameters:
// Pipeline - Pointer to a WINBIO_PIPELINE structure associated
// with the biometric unit performing the operation.
// SampleBuffer - Contains the biometric sample to be processed.
// SampleSize - Size of the structure returned in the SampleBuffer
// parameter.
// Purpose - Specifies the intended use of the sample.
// RejectDetail - Receives additional information about the failure,
// if any, to process a biometric sample.
//
static HRESULT
WINAPI
EngineAdapterAcceptSampleData(
__inout PWINBIO_PIPELINE Pipeline,
__in PWINBIO_BIR SampleBuffer,
__in SIZE_T SampleSize,
__in WINBIO_BIR_PURPOSE Purpose,
__out PWINBIO_REJECT_DETAIL RejectDetail
)
{
HRESULT hr = S_OK;
PUCHAR featureSet = NULL;
// Verify that pointer arguments are not NULL.
if (!ARGUMENT_PRESENT(Pipeline) ||
!ARGUMENT_PRESENT(SampleBuffer) ||
!ARGUMENT_PRESENT(RejectDetail))
{
hr = E_POINTER;
goto cleanup;
}
// Retrieve the context from the pipeline.
PWINBIO_ENGINE_CONTEXT context =
(PWINBIO_ENGINE_CONTEXT)Pipeline->EngineContext;
// Verify that input arguments are valid.
if (SampleSize == 0 ||
Purpose == WINBIO_NO_PURPOSE_AVAILABLE)
{
hr = E_INVALIDARG;
goto cleanup;
}
// Release any feature set currently attached to the pipeline before
// creating a new feature set.
if (context->FeatureSet != NULL)
{
_AdapterRelease(context->FeatureSet);
context->FeatureSet = NULL;
context->FeatureSetSize = 0;
}
// An actual engine adapter would here process the contents of the sample
// buffer, generate a feature set suitable for the purpose(s) specified
// by the Purpose parameter, and attach the feature set to the pipeline.
// The following trivial example, however, creates a feature set simply
// by making an exact copy of the raw sample.
// If the sample data cannot be processed, return an HRESULT error code
// of WINBIO_E_BAD_CAPTURE and set extended error information in the
// RejectDetail parameter.
featureSet = (PUCHAR)_AdapterAlloc(SampleSize);
if (featureSet == NULL)
{
hr = E_OUTOFMEMORY;
goto cleanup;
}
RtlCopyMemory(featureSet, SampleBuffer, SampleSize);
context->FeatureSet = featureSet;
featureSet = NULL;
context->FeatureSetSize = SampleSize;
cleanup:
if (FAILED(hr))
{
if (featureSet != NULL)
{
_AdapterRelease(featureSet);
}
}
return hr;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 7 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2008 R2 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winbio_adapter.h (inclua Winbio_adapter.h) |