📄 capprop.c
字号:
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S);
}
break;
case KSPROPERTY_VIDEOCONTROL_FRAME_RATES:
{
// todo
}
break;
case KSPROPERTY_VIDEOCONTROL_MODE:
{
PKSPROPERTY_VIDEOCONTROL_MODE_S pS = (PKSPROPERTY_VIDEOCONTROL_MODE_S) pSPD->PropertyInfo; // pointer to the data
ASSERT (pSPD->PropertyOutputSize >= sizeof (KSPROPERTY_VIDEOCONTROL_MODE_S));
pS->Mode = *pVideoControlMode;
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_VIDEOCONTROL_MODE_S);
}
break;
default:
TRAP;
break;
}
}
/*
** AdapterGetVideoCompressionProperty()
**
** Gets compressor settings
**
** Arguments:
**
** pSrb - pointer to the stream request block for properties
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterGetVideoCompressionProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PHW_DEVICE_EXTENSION pHwDevExt = ((PHW_DEVICE_EXTENSION)pSrb->HwDeviceExtension);
PSTREAMEX pStrmEx;
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
ULONG Id = pSPD->Property->Id; // index of the property
ULONG StreamIndex;
PCOMPRESSION_SETTINGS pCompressionSettings;
// For this property set, the StreamIndex is always in the same place
// for each property
StreamIndex = ((PKSPROPERTY_VIDEOCOMPRESSION_S) pSPD->Property)->StreamIndex;
ASSERT (StreamIndex < MAX_TESTCAP_STREAMS);
// Verify the stream index is valid
if (StreamIndex >= MAX_TESTCAP_STREAMS) {
pSrb->Status = STATUS_INVALID_PARAMETER;
return;
}
pStrmEx = (PSTREAMEX) pHwDevExt->pStrmEx[StreamIndex];
// If the stream is not opened when this property set is used,
// store the values in the HwDevExt
if (pStrmEx) {
pCompressionSettings = &pStrmEx->CompressionSettings;
}
else {
pCompressionSettings = &pHwDevExt->CompressionSettings;
}
switch (Id) {
case KSPROPERTY_VIDEOCOMPRESSION_GETINFO:
{
PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S pS =
(PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S) pSPD->PropertyInfo;
pS->DefaultKeyFrameRate = 15; // Key frame rate
pS->DefaultPFrameRate = 3; // Predeicted frames per Key frame
pS->DefaultQuality = 5000; // 0 to 10000
pS->Capabilities =
KS_CompressionCaps_CanQuality |
KS_CompressionCaps_CanKeyFrame |
KS_CompressionCaps_CanBFrame ;
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S);
}
break;
case KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE:
{
PKSPROPERTY_VIDEOCOMPRESSION_S pS =
(PKSPROPERTY_VIDEOCOMPRESSION_S) pSPD->PropertyInfo;
pS->Value = pCompressionSettings->CompressionKeyFrameRate;
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_VIDEOCOMPRESSION_S);
}
break;
case KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME:
{
PKSPROPERTY_VIDEOCOMPRESSION_S pS =
(PKSPROPERTY_VIDEOCOMPRESSION_S) pSPD->PropertyInfo;
pS->Value = pCompressionSettings->CompressionPFramesPerKeyFrame;
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_VIDEOCOMPRESSION_S);
}
break;
case KSPROPERTY_VIDEOCOMPRESSION_QUALITY:
{
PKSPROPERTY_VIDEOCOMPRESSION_S pS =
(PKSPROPERTY_VIDEOCOMPRESSION_S) pSPD->PropertyInfo;
pS->Value = pCompressionSettings->CompressionQuality;
pSrb->ActualBytesTransferred = sizeof (KSPROPERTY_VIDEOCOMPRESSION_S);
}
break;
default:
TRAP;
break;
}
}
/*
** AdapterSetVideoCompressionProperty()
**
** Sets compressor settings
**
** Arguments:
**
** pSrb - pointer to the stream request block for properties
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterSetVideoCompressionProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PHW_DEVICE_EXTENSION pHwDevExt = ((PHW_DEVICE_EXTENSION)pSrb->HwDeviceExtension);
PSTREAMEX pStrmEx;
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
PKSPROPERTY_VIDEOCOMPRESSION_S pS = (PKSPROPERTY_VIDEOCOMPRESSION_S) pSPD->Property;
ULONG Id = pSPD->Property->Id; // index of the property
ULONG StreamIndex;
PCOMPRESSION_SETTINGS pCompressionSettings;
// For this property set, the StreamIndex is always in the same place
// for each property
StreamIndex = ((PKSPROPERTY_VIDEOCOMPRESSION_S) pSPD->Property)->StreamIndex;
ASSERT (StreamIndex < MAX_TESTCAP_STREAMS);
// Verify the stream index is valid
if (StreamIndex >= MAX_TESTCAP_STREAMS) {
pSrb->Status = STATUS_INVALID_PARAMETER;
return;
}
pStrmEx = (PSTREAMEX) pHwDevExt->pStrmEx[StreamIndex];
// If the stream is not opened when this property set is used,
// store the values in the HwDevExt
if (pStrmEx) {
pCompressionSettings = &pStrmEx->CompressionSettings;
}
else {
pCompressionSettings = &pHwDevExt->CompressionSettings;
}
switch (Id) {
case KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE:
{
pCompressionSettings->CompressionKeyFrameRate = pS->Value;
}
break;
case KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME:
{
pCompressionSettings->CompressionPFramesPerKeyFrame = pS->Value;
}
break;
case KSPROPERTY_VIDEOCOMPRESSION_QUALITY:
{
pCompressionSettings->CompressionQuality = pS->Value;
}
break;
default:
TRAP;
break;
}
}
/*
** AdapterGetVBIProperty()
**
** Gets VBI settings
**
** Arguments:
**
** pSrb - pointer to the stream request block for properties
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterGetVBIProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PHW_DEVICE_EXTENSION pHwDevExt = pSrb->HwDeviceExtension;
PSTREAMEX pStrmEx;
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
ULONG Id = pSPD->Property->Id; // index of the property
ULONG StreamIndex;
PVBICAP_PROPERTIES_PROTECTION_S pS =
(PVBICAP_PROPERTIES_PROTECTION_S) pSPD->PropertyInfo;
StreamIndex = pS->StreamIndex;
ASSERT (StreamIndex < MAX_TESTCAP_STREAMS);
// Verify the stream index is valid
if (StreamIndex >= MAX_TESTCAP_STREAMS) {
pSrb->Status = STATUS_INVALID_PARAMETER;
return;
}
pStrmEx = (PSTREAMEX) pHwDevExt->pStrmEx[StreamIndex];
pS->Status = 0;
if (pHwDevExt->ProtectionStatus & KS_VBI_FLAG_MV_PRESENT)
pS->Status |= KS_VBICAP_PROTECTION_MV_PRESENT;
if (pHwDevExt->ProtectionStatus & KS_VBI_FLAG_MV_HARDWARE)
pS->Status |= KS_VBICAP_PROTECTION_MV_HARDWARE;
if (pHwDevExt->ProtectionStatus & KS_VBI_FLAG_MV_DETECTED)
pS->Status |= KS_VBICAP_PROTECTION_MV_DETECTED;
pSrb->ActualBytesTransferred = sizeof (*pS);
}
#if DBG
/*
** AdapterSetVBIProperty()
**
** Sets VBI settings
**
** Arguments:
**
** pSrb - pointer to the stream request block for properties
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterSetVBIProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PHW_DEVICE_EXTENSION pHwDevExt = pSrb->HwDeviceExtension;
PSTREAMEX pStrmEx;
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
ULONG Id = pSPD->Property->Id; // index of the property
ULONG StreamIndex;
PVBICAP_PROPERTIES_PROTECTION_S pS =
(PVBICAP_PROPERTIES_PROTECTION_S) pSPD->PropertyInfo;
StreamIndex = pS->StreamIndex;
ASSERT (StreamIndex < MAX_TESTCAP_STREAMS);
// Verify the stream index is valid
if (StreamIndex >= MAX_TESTCAP_STREAMS) {
pSrb->Status = STATUS_INVALID_PARAMETER;
return;
}
pStrmEx = (PSTREAMEX) pHwDevExt->pStrmEx[StreamIndex];
pHwDevExt->ProtectionStatus = 0;
if (pS->Status & KS_VBICAP_PROTECTION_MV_PRESENT)
pHwDevExt->ProtectionStatus |= KS_VBI_FLAG_MV_PRESENT;
if (pS->Status & KS_VBICAP_PROTECTION_MV_HARDWARE)
pHwDevExt->ProtectionStatus |= KS_VBI_FLAG_MV_HARDWARE;
if (pS->Status & KS_VBICAP_PROTECTION_MV_DETECTED)
pHwDevExt->ProtectionStatus |= KS_VBI_FLAG_MV_DETECTED;
}
#endif //DBG
// -------------------------------------------------------------------
// General entry point for all get/set adapter properties
// -------------------------------------------------------------------
/*
** AdapterSetProperty ()
**
** Handles Set operations for all adapter properties.
**
** Arguments:
**
** pSRB -
** Pointer to the HW_STREAM_REQUEST_BLOCK
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterSetProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
if (IsEqualGUID(&PROPSETID_VIDCAP_CROSSBAR, &pSPD->Property->Set)) {
AdapterSetCrossbarProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_TUNER, &pSPD->Property->Set)) {
AdapterSetTunerProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_VIDEOPROCAMP, &pSPD->Property->Set)) {
AdapterSetVideoProcAmpProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_CAMERACONTROL, &pSPD->Property->Set)) {
AdapterSetCameraControlProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_TVAUDIO, &pSPD->Property->Set)) {
AdapterSetTVAudioProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_VIDEODECODER, &pSPD->Property->Set)) {
AdapterSetAnalogVideoDecoderProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_VIDEOCONTROL, &pSPD->Property->Set)) {
AdapterSetVideoControlProperty (pSrb);
}
else if (IsEqualGUID (&PROPSETID_VIDCAP_VIDEOCOMPRESSION, &pSPD->Property->Set)) {
AdapterSetVideoCompressionProperty (pSrb);
}
#if DBG
// Can't normally set protection status; only allow this for DEBUGGING
else if (IsEqualGUID (&KSPROPSETID_VBICAP_PROPERTIES, &pSPD->Property->Set)) {
AdapterSetVBIProperty (pSrb);
}
#endif //DBG
else {
//
// We should never get here
//
TRAP;
pSrb->Status = STATUS_NOT_IMPLEMENTED;
}
}
/*
** AdapterGetProperty ()
**
** Handles Get operations for all adapter properties.
**
** Arguments:
**
** pSRB -
** Pointer to the HW_STREAM_REQUEST_BLOCK
**
** Returns:
**
** Side Effects: none
*/
VOID
STREAMAPI
AdapterGetProperty(
PHW_STREAM_REQUEST_BLOCK pSrb
)
{
PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
if (IsEqualGUID (&PROPSETID_VIDCAP_CROSSBAR, &pSPD->Property->Set)) {
AdapterGetCrossbarProperty (pSrb);
}
else if (IsEqualGUID (&PROPSETID_TUNER, &pSPD->Property->Set)) {
AdapterGetTunerProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_VIDEOPROCAMP, &pSPD->Property->Set)) {
AdapterGetVideoProcAmpProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_CAMERACONTROL, &pSPD->Property->Set)) {
AdapterGetCameraControlProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_TVAUDIO, &pSPD->Property->Set)) {
AdapterGetTVAudioProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_VIDEODECODER, &pSPD->Property->Set)) {
AdapterGetAnalogVideoDecoderProperty (pSrb);
}
else if (IsEqualGUID(&PROPSETID_VIDCAP_VIDEOCONTROL, &pSPD->Property->Set)) {
AdapterGetVideoControlProperty (pSrb);
}
else if (IsEqualGUID (&PROPSETID_VIDCAP_VIDEOCOMPRESSION, &pSPD->Property->Set)) {
AdapterGetVideoCompressionProperty (pSrb);
}
else if (IsEqualGUID (&KSPROPSETID_VBICAP_PROPERTIES, &pSPD->Property->Set)) {
AdapterGetVBIProperty (pSrb);
}
else {
//
// We should never get here
//
TRAP;
pSrb->Status = STATUS_NOT_IMPLEMENTED;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -