📄 capprop.c
字号:
KSPROPERTY_TUNER_MODE_FM_RADIO |
KSPROPERTY_TUNER_MODE_ATSC));
pHwDevExt->TunerMode = pMode->Mode;
}
break;
case KSPROPERTY_TUNER_STANDARD:
{
PKSPROPERTY_TUNER_STANDARD_S pStandard_S =
(PKSPROPERTY_TUNER_STANDARD_S) pSPD->Property;
pHwDevExt->VideoStandard = pStandard_S->Standard;
}
break;
case KSPROPERTY_TUNER_FREQUENCY:
{
PKSPROPERTY_TUNER_FREQUENCY_S pFreq_S =
(PKSPROPERTY_TUNER_FREQUENCY_S) pSPD->Property;
pHwDevExt->Frequency = pFreq_S->Frequency;
pHwDevExt->Country = pFreq_S->Country;
pHwDevExt->Channel = pFreq_S->Channel;
}
break;
case KSPROPERTY_TUNER_INPUT:
{
PKSPROPERTY_TUNER_INPUT_S pInput_S =
(PKSPROPERTY_TUNER_INPUT_S) pSPD->Property;
pHwDevExt->TunerInput = pInput_S->InputIndex;
}
break;
default:
TRAP;
break;
}
}
/*
** AdapterGetTunerProperty ()
**
** Handles Get operations on the TvTuner property set.
** Testcap uses this for demo purposes only.
**
** Arguments:
**
** pSRB -
** Pointer to the HW_STREAM_REQUEST_BLOCK
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterGetTunerProperty(
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
ULONG nS = pSPD->PropertyOutputSize; // size of data supplied
PVOID pV = pSPD->PropertyInfo; // pointer to the output data
ASSERT (nS >= sizeof (LONG));
switch (Id) {
case KSPROPERTY_TUNER_CAPS:
{
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;
// Copy the input property info to the output property info
RtlCopyMemory( pCaps,
pSPD->Property,
sizeof (KSPROPERTY_TUNER_CAPS_S));
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;
// Copy the input property info to the output property info
RtlCopyMemory( pMode,
pSPD->Property,
sizeof (KSPROPERTY_TUNER_MODE_S));
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;
// Copy the input property info to the output property info
RtlCopyMemory( pCaps,
pSPD->Property,
sizeof (KSPROPERTY_TUNER_MODE_CAPS_S));
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?
// Copy the input property info to the output property info
RtlCopyMemory( pSPD->PropertyInfo,
pSPD->Property,
sizeof (KSPROPERTY_TUNER_STANDARD_S));
((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?
// Copy the input property info to the output property info
RtlCopyMemory( pSPD->PropertyInfo,
pSPD->Property,
sizeof (KSPROPERTY_TUNER_INPUT_S));
((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));
// Copy the input property info to the output property info
RtlCopyMemory( pStatus,
pSPD->Property,
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;
// Copy the input property info to the output property info
RtlCopyMemory( pMedium,
pSPD->Property,
sizeof (KSPROPERTY_TUNER_IF_MEDIUM_S));
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:
**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -