📄 capprop.c
字号:
{
PKSPROPERTY_TUNER_CAPS_S pCaps =
(PKSPROPERTY_TUNER_CAPS_S)pSPD->Property;
ASSERT (nS >= sizeof( KSPROPERTY_TUNER_CAPS_S ) );
// now work with the output buffer
pCaps =(PKSPROPERTY_TUNER_CAPS_S)pV;
pCaps->ModesSupported =
KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO |
KSPROPERTY_TUNER_MODE_AM_RADIO |
KSPROPERTY_TUNER_MODE_ATSC;
pCaps->VideoMedium = TVTunerMediums[0];
pCaps->VideoMedium.Id = pHwDevExt->DriverMediumInstanceCount; // Multiple instance support
pCaps->TVAudioMedium = TVTunerMediums[1];
pCaps->TVAudioMedium.Id = pHwDevExt->DriverMediumInstanceCount; // Multiple instance support
pCaps->RadioAudioMedium = TVTunerMediums[2]; // No separate radio audio pin?
pCaps->RadioAudioMedium.Id = pHwDevExt->DriverMediumInstanceCount; // Multiple instance support
pSrb->ActualBytesTransferred = sizeof( KSPROPERTY_TUNER_CAPS_S );
}
break;
case KSPROPERTY_TUNER_MODE:
{
PKSPROPERTY_TUNER_MODE_S pMode =
(PKSPROPERTY_TUNER_MODE_S)pSPD->Property;
ASSERT (nS >= sizeof( KSPROPERTY_TUNER_MODE_S ) );
// now work with the output buffer
pMode =(PKSPROPERTY_TUNER_MODE_S)pV;
pMode->Mode = pHwDevExt->TunerMode;
pSrb->ActualBytesTransferred = sizeof( KSPROPERTY_TUNER_MODE_S);
}
break;
case KSPROPERTY_TUNER_MODE_CAPS:
{
PKSPROPERTY_TUNER_MODE_CAPS_S pCaps =
(PKSPROPERTY_TUNER_MODE_CAPS_S) pSPD->Property;
ASSERT (nS >= sizeof (KSPROPERTY_TUNER_MODE_CAPS_S));
// now work with the output buffer
pCaps = (PKSPROPERTY_TUNER_MODE_CAPS_S) pV;
pCaps->Mode = ((PKSPROPERTY_TUNER_MODE_CAPS_S) pSPD->Property)->Mode;
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_TUNER_MODE_CAPS_S);
switch (pCaps->Mode) {
case KSPROPERTY_TUNER_MODE_TV:
case KSPROPERTY_TUNER_MODE_ATSC:
// List the formats actually supported by the tuner in this mode
pCaps->StandardsSupported =
(pHwDevExt->TunerMode == KSPROPERTY_TUNER_MODE_ATSC) ?
KS_AnalogVideo_NTSC_M
:
KS_AnalogVideo_NTSC_M
| KS_AnalogVideo_PAL_B
| KS_AnalogVideo_PAL_D
// | KS_AnalogVideo_PAL_H
// | KS_AnalogVideo_PAL_I
| KS_AnalogVideo_PAL_M
| KS_AnalogVideo_PAL_N
| KS_AnalogVideo_PAL_N_COMBO
// | KS_AnalogVideo_SECAM_B
// | KS_AnalogVideo_SECAM_D
// | KS_AnalogVideo_SECAM_G
// | KS_AnalogVideo_SECAM_H
// | KS_AnalogVideo_SECAM_K
// | KS_AnalogVideo_SECAM_K1
// | KS_AnalogVideo_SECAM_L
;
//
// Get the min and max frequencies supported
//
pCaps->MinFrequency = 55250000L;
pCaps->MaxFrequency = 997250000L;
// What is the frequency step size?
pCaps->TuningGranularity = 62500L;
// How many inputs are on the tuner?
pCaps->NumberOfInputs = 1;
// What is the maximum settling time in milliseconds?
pCaps->SettlingTime = 100;
//
// Strategy defines how the tuner knows when it is in tune:
//
// KS_TUNER_STRATEGY_PLL (Has PLL offset information)
// KS_TUNER_STRATEGY_SIGNAL_STRENGTH (has signal strength info)
// KS_TUNER_STRATEGY_DRIVER_TUNES (driver handles all fine tuning)
//
pCaps->Strategy = KS_TUNER_STRATEGY_PLL;
break;
case KSPROPERTY_TUNER_MODE_FM_RADIO:
pCaps->StandardsSupported = 0;
pCaps->MinFrequency = 88100000L;
pCaps->MaxFrequency = 107900000L;
// What is the frequency step size?
pCaps->TuningGranularity = 200000L;
// How many inputs are on the tuner?
pCaps->NumberOfInputs = 1;
// What is the maximum settling time in milliseconds?
pCaps->SettlingTime = 100;
// Strategy defines how the tuner knows when it is in tune:
pCaps->Strategy = KS_TUNER_STRATEGY_DRIVER_TUNES;
break;
case KSPROPERTY_TUNER_MODE_AM_RADIO:
pCaps->StandardsSupported = 0;
pCaps->MinFrequency = 540000L;
pCaps->MaxFrequency = 1700000L;
// What is the frequency step size?
pCaps->TuningGranularity = 1000L;
// How many inputs are on the tuner?
pCaps->NumberOfInputs = 1;
// What is the maximum settling time in milliseconds?
pCaps->SettlingTime = 100;
// Strategy defines how the tuner knows when it is in tune:
pCaps->Strategy = KS_TUNER_STRATEGY_DRIVER_TUNES;
break;
default:
ASSERT (FALSE);
break;
}
}
break;
case KSPROPERTY_TUNER_STANDARD:
{
// What is the currently selected video standard?
((PKSPROPERTY_TUNER_STANDARD_S) pSPD->PropertyInfo)->Standard =
pHwDevExt->VideoStandard;
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_TUNER_STANDARD_S);
}
break;
case KSPROPERTY_TUNER_INPUT:
{
// What is the currently selected input?
((PKSPROPERTY_TUNER_INPUT_S) pSPD->PropertyInfo)->InputIndex =
pHwDevExt->TunerInput;
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_TUNER_INPUT_S);
}
break;
case KSPROPERTY_TUNER_STATUS:
// Return the status of the tuner
// PLLOffset is in units of TuningGranularity
// SignalStrength is 0 to 100
// Set Busy to 1 if tuning is still in process
{
PKSPROPERTY_TUNER_STATUS_S pStatus =
(PKSPROPERTY_TUNER_STATUS_S) pSPD->PropertyInfo;
ASSERT (nS >= sizeof (KSPROPERTY_TUNER_STATUS_S));
pStatus->CurrentFrequency = pHwDevExt->Frequency;
pStatus->PLLOffset = 0;
pStatus->SignalStrength = 100;
pStatus->Busy = pHwDevExt->Busy;
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_TUNER_STATUS_S);
}
break;
case KSPROPERTY_TUNER_IF_MEDIUM:
{
// Only Digital TV tuners should support this property
PKSPROPERTY_TUNER_IF_MEDIUM_S pMedium =
(PKSPROPERTY_TUNER_IF_MEDIUM_S)pSPD->Property;
ASSERT (nS >= sizeof( KSPROPERTY_TUNER_IF_MEDIUM_S) );
// now work with the output buffer
pMedium =(PKSPROPERTY_TUNER_IF_MEDIUM_S)pV;
pMedium->IFMedium = TVTunerMediums[3];
pMedium->IFMedium.Id = pHwDevExt->DriverMediumInstanceCount; // Multiple instance support
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_TUNER_IF_MEDIUM_S);
}
break;
default:
TRAP;
break;
}
}
// -------------------------------------------------------------------
// VideoProcAmp functions
// -------------------------------------------------------------------
/*
** AdapterSetVideoProcAmpProperty ()
**
** Handles Set operations on the VideoProcAmp property set.
** Testcap uses this for demo purposes only.
**
** Arguments:
**
** pSRB -
** Pointer to the HW_STREAM_REQUEST_BLOCK
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterSetVideoProcAmpProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PHW_DEVICE_EXTENSION pHwDevExt = ((PHW_DEVICE_EXTENSION)pSrb->HwDeviceExtension);
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
ULONG Id = pSPD->Property->Id; // index of the property
PKSPROPERTY_VIDEOPROCAMP_S pS = (PKSPROPERTY_VIDEOPROCAMP_S) pSPD->PropertyInfo;
ASSERT (pSPD->PropertyInputSize >= sizeof (KSPROPERTY_VIDEOPROCAMP_S));
switch (Id) {
case KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS:
pHwDevExt->Brightness = pS->Value;
pHwDevExt->BrightnessFlags = pS->Flags;
break;
case KSPROPERTY_VIDEOPROCAMP_CONTRAST:
pHwDevExt->Contrast = pS->Value;
pHwDevExt->ContrastFlags = pS->Flags;
break;
case KSPROPERTY_VIDEOPROCAMP_COLORENABLE:
pHwDevExt->ColorEnable = pS->Value;
pHwDevExt->ColorEnableFlags = pS->Flags;
break;
default:
TRAP;
break;
}
}
/*
** AdapterGetVideoProcAmpProperty ()
**
** Handles Get operations on the VideoProcAmp property set.
** Testcap uses this for demo purposes only.
**
** Arguments:
**
** pSRB -
** Pointer to the HW_STREAM_REQUEST_BLOCK
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterGetVideoProcAmpProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PHW_DEVICE_EXTENSION pHwDevExt = ((PHW_DEVICE_EXTENSION)pSrb->HwDeviceExtension);
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
ULONG Id = pSPD->Property->Id; // index of the property
PKSPROPERTY_VIDEOPROCAMP_S pS = (PKSPROPERTY_VIDEOPROCAMP_S) pSPD->PropertyInfo;
ASSERT (pSPD->PropertyOutputSize >= sizeof (KSPROPERTY_VIDEOPROCAMP_S));
switch (Id) {
case KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS:
pS->Value = pHwDevExt->Brightness;
pS->Flags = pHwDevExt->BrightnessFlags;
pS->Capabilities = KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL |
KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
break;
case KSPROPERTY_VIDEOPROCAMP_CONTRAST:
pS->Value = pHwDevExt->Contrast;
pS->Flags = pHwDevExt->ContrastFlags;
pS->Capabilities = KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL |
KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO;
break;
case KSPROPERTY_VIDEOPROCAMP_COLORENABLE:
pS->Value = pHwDevExt->ColorEnable;
pS->Flags = pHwDevExt->ColorEnableFlags;
pS->Capabilities = KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
break;
default:
TRAP;
break;
}
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_VIDEOPROCAMP_S);
}
// -------------------------------------------------------------------
// CameraControl functions
// -------------------------------------------------------------------
/*
** AdapterSetCameraControlProperty ()
**
** Handles Set operations on the CameraControl property set.
** Testcap uses this for demo purposes only.
**
** Arguments:
**
** pSRB -
** Pointer to the HW_STREAM_REQUEST_BLOCK
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterSetCameraControlProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PHW_DEVICE_EXTENSION pHwDevExt = ((PHW_DEVICE_EXTENSION)pSrb->HwDeviceExtension);
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
ULONG Id = pSPD->Property->Id; // index of the property
PKSPROPERTY_CAMERACONTROL_S pS = (PKSPROPERTY_CAMERACONTROL_S) pSPD->PropertyInfo;
ASSERT (pSPD->PropertyInputSize >= sizeof (KSPROPERTY_CAMERACONTROL_S));
switch (Id) {
case KSPROPERTY_CAMERACONTROL_ZOOM:
pHwDevExt->Zoom = pS->Value;
pHwDevExt->ZoomFlags = pS->Flags;
break;
case KSPROPERTY_CAMERACONTROL_FOCUS:
pHwDevExt->Focus = pS->Value;
pHwDevExt->FocusFlags = pS->Flags;
break;
default:
TRAP;
break;
}
}
/*
** AdapterGetCameraControlProperty ()
**
** Handles Get operations on the CameraControl property set.
** Testcap uses this for demo purposes only.
**
** Arguments:
**
** pSRB -
** Pointer to the HW_STREAM_REQUEST_BLOCK
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterGetCameraControlProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PHW_DEVICE_EXTENSION pHwDevExt = ((PHW_DEVICE_EXTENSION)pSrb->HwDeviceExtension);
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
ULONG Id = pSPD->Property->Id; // index of the property
PKSPROPERTY_CAMERACONTROL_S pS = (PKSPROPERTY_CAMERACONTROL_S) pSPD->PropertyInfo; // pointer to the output data
ASSERT (pSPD->PropertyOutputSize >= sizeof (KSPROPERTY_CAMERACONTROL_S));
switch (Id) {
case KSPROPERTY_CAMERACONTROL_ZOOM:
pS->Value = pHwDevExt->Zoom;
pS->Flags = pHwDevExt->ZoomFlags;
pS->Capabilities = KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL |
KSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
break;
case KSPROPERTY_CAMERACONTROL_FOCUS:
pS->Value = pHwDevExt->Focus;
pS->Flags = pHwDevExt->FocusFlags;
pS->Capabilities = KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL |
KSPROPERTY_CAMERACONTROL_FLAGS_AUTO;
break;
default:
TRAP;
break;
}
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_CAMERACONTROL_S);
}
// -------------------------------------------------------------------
// TVAudio functions
// -------------------------------------------------------------------
/*
** AdapterSetTVAudioProperty ()
**
** Handles Set operations on the TVAudio property set.
** Testcap uses this for demo purposes only.
**
** Arguments:
**
** pSRB -
** Pointer to the HW_STREAM_REQUEST_BLOCK
**
** Returns:
**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -