📄 controls.cpp
字号:
// controls.cpp - control classes for Video Capture sample
//=============================================================================
//
// Compuware Corporation
// NuMega Lab
// 9 Townsend West
// Nashua, NH 03060 USA
//
// Copyright (c) 1998 Compuware Corporation. All Rights Reserved.
// Unpublished - rights reserved under the Copyright laws of the
// United States.
//
//=============================================================================
//==========================================================================;
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
// PURPOSE.
//
// Copyright (c) 1992 - 1996 Microsoft Corporation. All Rights Reserved.
//
//==========================================================================;
//
// This file handles all adapter property sets
//
#include <vdw.h>
#include "kstream.h"
#include "capxfer.h"
#include "controls.h"
#define DEFINE_MEDIUMS
#include "mediums.h"
#undef DEFINE_MEDIUMS
// -------------------------------------------------------------------
// A few notes about property set handling
//
// Property sets used in Testcap are of two varieties, those that have
// default values, ranges, and stepping, such as VideoProcAmp and CameraControl,
// and those which don't have defaults and ranges, such as TVTuner and
// Crossbar.
//
// Default values and stepping are established by tables in capprop.h,
// no code is required to implement this other than initally creating the tables.
//
// Many of the property sets require the ability to modify a number
// of input parameters. Since KS doesn't allow this inherently, you'll
// note that some property sets require copying the provided input parameters
// to the ouput parameter list, effectively creating a "read, modify, write"
// capability. For this reason, the input and output parameter lists
// use identical structures.
//
// On an SRB_GET_DEVICE_PROPERTY, read-only input data to the driver is provided as:
// pSrb->CommandData.PropertyInfo
//
// ... while the output data pointer is:
// pSrb->CommandData.PropertyInfo.PropertyInfo
//
// -------------------------------------------------------------------
Crossbar::XBAR_PIN_DESCRIPTION Crossbar::XBarInputPins[] = {
// First list the video input pins, then the audio inputs, then the output pins
// Note that audio pin index 6 is shared between two video inputs (index 1 and index 2)
// PinType SynthImageCommand RelatedPinIndex Medium
/*0*/ KS_PhysConn_Video_Tuner, IMAGE_XFER_NTSC_EIA_100AMP_100SAT, 5, &CrossbarMediums[0],
/*1*/ KS_PhysConn_Video_Composite, IMAGE_XFER_NTSC_EIA_75AMP_100SAT, 6, &CrossbarMediums[1],
/*2*/ KS_PhysConn_Video_SVideo, IMAGE_XFER_BLACK, 6, &CrossbarMediums[2],
/*3*/ KS_PhysConn_Video_Tuner, IMAGE_XFER_WHITE, 7, &CrossbarMediums[3],
/*4*/ KS_PhysConn_Video_Composite, IMAGE_XFER_GRAY_INCREASING, 8, &CrossbarMediums[4],
/*5*/ KS_PhysConn_Audio_Tuner, 0, 0, &CrossbarMediums[5],
/*6*/ KS_PhysConn_Audio_Line, 0, 1, &CrossbarMediums[6],
/*7*/ KS_PhysConn_Audio_Tuner, 0, 3, &CrossbarMediums[7],
/*8*/ KS_PhysConn_Audio_Line, 0, 4, &CrossbarMediums[8],
};
Crossbar::XBAR_PIN_DESCRIPTION Crossbar::XBarOutputPins[] = {
// PinType SynthImageCommand RelatedPinIndex
/*0*/ KS_PhysConn_Video_VideoDecoder, 0, 1, &CrossbarMediums[9],
/*1*/ KS_PhysConn_Audio_AudioDecoder, 0, 0, &CrossbarMediums[10],
};
const ULONG Crossbar::NumberOfXBarInputs() const
{
return SIZEOF_ARRAY(XBarInputPins);
}
const ULONG Crossbar::NumberOfXBarOutputs() const
{
return SIZEOF_ARRAY(XBarOutputPins);
}
////////////////////////////////////////////////////////////////////////
// Tuner Static medium definitions ... used in registration process
// provide the characteristics of the tuner class back to the
// Stream Class Driver.
//
// Note: To allow multiple instances of the same piece of hardware,
// set the first ULONG after the GUID in the Medium to a unique value.
const KSPIN_MEDIUM Tuner::TVTunerMediums[] = {
{M_GUID0, 0, 0}, // Pin 0
{M_GUID1, 0, 0}, // Pin 1
{M_GUID2, 0, 0}, // Pin 2
};
const BOOL Tuner::TVTunerPinDirection [] = {
TRUE, // Output Pin 0
TRUE, // Output Pin 1
TRUE, // Output Pin 2
};
////////////////////////////////////////////////////////////////////////
// TV Tuner property table ... used in registration process
// provide the characteristics of the Tuner class back to the
// Stream Class Driver.
const KSPROPERTY_ITEM Tuner::TVTunerProperties[] =
{
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TUNER_CAPS,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_TUNER_CAPS_S), // MinProperty
sizeof(KSPROPERTY_TUNER_CAPS_S), // MinData
FALSE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TUNER_MODE,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_TUNER_MODE_S), // MinProperty
sizeof(KSPROPERTY_TUNER_MODE_S), // MinData
TRUE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TUNER_MODE_CAPS,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_TUNER_MODE_CAPS_S), // MinProperty
sizeof(KSPROPERTY_TUNER_MODE_CAPS_S), // MinData
FALSE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TUNER_STANDARD,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_TUNER_STANDARD_S), // MinProperty
sizeof(KSPROPERTY_TUNER_STANDARD_S), // MinData
FALSE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TUNER_FREQUENCY,
FALSE, // GetSupported or Handler
sizeof(KSPROPERTY_TUNER_FREQUENCY_S), // MinProperty
sizeof(KSPROPERTY_TUNER_FREQUENCY_S), // MinData
TRUE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TUNER_INPUT,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_TUNER_INPUT_S), // MinProperty
sizeof(KSPROPERTY_TUNER_INPUT_S), // MinData
TRUE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TUNER_STATUS,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_TUNER_STATUS_S), // MinProperty
sizeof(KSPROPERTY_TUNER_STATUS_S), // MinData
FALSE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
)
};
const ULONG Tuner::NumProperties()
{
return SIZEOF_ARRAY(TVTunerProperties);
}
PKSPROPERTY_ITEM Tuner::PropertyList()
{
return (PKSPROPERTY_ITEM)TVTunerProperties;
}
////////////////////////////////////////////////////////////////////////
// Tuner::Register
NTSTATUS Tuner::Register(PDEVICE_OBJECT pdo)
{
return StreamClassRegisterFilterWithNoKSPins(
pdo,
(const GUID*)&KSCATEGORY_TVTUNER,
SIZEOF_ARRAY (TVTunerMediums),
(int*)TVTunerPinDirection,
(KSIDENTIFIER*)TVTunerMediums,
NULL
);
}
////////////////////////////////////////////////////////////////////////
// AudioControl Static medium definitions ... used in registration process
// provide the characteristics of the AudioControl class back to the
// Stream Class Driver.
//
// Note: To allow multiple instances of the same piece of hardware,
// set the first ULONG after the GUID in the Medium to a unique value.
const KSPIN_MEDIUM AudioControl::TVAudioMediums[] = {
{M_GUID1, 0, 0}, // Pin 0
{M_GUID3, 0, 0}, // Pin 1
};
const BOOL AudioControl::TVAudioPinDirection [] = {
FALSE, // Input Pin 0
TRUE, // Output Pin 1
};
////////////////////////////////////////////////////////////////////////
// AudioControl property table ... used in registration process
// provide the characteristics of the AudioControl class back to the
// Stream Class Driver.
const KSPROPERTY_ITEM AudioControl::TVAudioProperties[] =
{
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TVAUDIO_CAPS,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_TVAUDIO_CAPS_S), // MinProperty
sizeof(KSPROPERTY_TVAUDIO_CAPS_S), // MinData
FALSE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TVAUDIO_MODE,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_TVAUDIO_S), // MinProperty
sizeof(KSPROPERTY_TVAUDIO_S), // MinData
TRUE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_TVAUDIO_S), // MinProperty
sizeof(KSPROPERTY_TVAUDIO_S), // MinData
FALSE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
};
const ULONG AudioControl::NumProperties()
{
return SIZEOF_ARRAY(TVAudioProperties);
}
PKSPROPERTY_ITEM AudioControl::PropertyList()
{
return (PKSPROPERTY_ITEM)TVAudioProperties;
}
////////////////////////////////////////////////////////////////////////
// AudioControl::Register
NTSTATUS AudioControl::Register(PDEVICE_OBJECT pdo)
{
return StreamClassRegisterFilterWithNoKSPins(
pdo,
(const GUID*)&KSCATEGORY_TVAUDIO,
SIZEOF_ARRAY(TVAudioMediums),
(int*)TVAudioPinDirection,
(KSIDENTIFIER*)TVAudioMediums,
NULL
);
}
////////////////////////////////////////////////////////////////////////
// Crossbar Static medium definitions ... used in registration process
// provide the characteristics of the Crossbar class back to the
// Stream Class Driver.
//
// Note: To allow multiple instances of the same piece of hardware,
// set the first ULONG after the GUID in the Medium to a unique value.
const KSPIN_MEDIUM Crossbar::CrossbarMediums[] = {
{M_GUID0, 0, 0}, // Pin 0
{STATIC_GUID_NULL, 0, 0}, // Pin 1
{STATIC_GUID_NULL, 0, 0}, // Pin 2
{STATIC_GUID_NULL, 0, 0}, // Pin 3
{STATIC_GUID_NULL, 0, 0}, // Pin 4
{M_GUID3, 0, 0}, // Pin 5
{M_GUID2, 0, 0}, // Pin 6
{STATIC_GUID_NULL, 0, 0}, // Pin 7
{STATIC_GUID_NULL, 0, 0}, // Pin 8
{M_GUID4, 0, 0}, // Pin 9
{STATIC_GUID_NULL, 0, 0}, // Pin 10
};
const BOOL Crossbar::CrossbarPinDirection [] = {
FALSE, // Input Pin 0
FALSE, // Input Pin 1
FALSE, // Input Pin 2
FALSE, // Input Pin 3
FALSE, // Input Pin 4
FALSE, // Input Pin 5
FALSE, // Input Pin 6
FALSE, // Input Pin 7
FALSE, // Input Pin 8
TRUE, // Output Pin 9
TRUE, // Output Pin 10
};
////////////////////////////////////////////////////////////////////////
// Crossbar property table ... used in registration process
// provide the characteristics of the Crossbar class back to the
// Stream Class Driver.
const KSPROPERTY_ITEM Crossbar::XBarProperties[] =
{
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_CROSSBAR_CAPS,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_CROSSBAR_CAPS_S), // MinProperty
sizeof(KSPROPERTY_CROSSBAR_CAPS_S), // MinData
FALSE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_CROSSBAR_CAN_ROUTE,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_CROSSBAR_ROUTE_S), // MinProperty
sizeof(KSPROPERTY_CROSSBAR_ROUTE_S), // MinData
FALSE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_CROSSBAR_ROUTE,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_CROSSBAR_ROUTE_S), // MinProperty
sizeof(KSPROPERTY_CROSSBAR_ROUTE_S), // MinData
TRUE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
DEFINE_KSPROPERTY_ITEM
(
KSPROPERTY_CROSSBAR_PININFO,
TRUE, // GetSupported or Handler
sizeof(KSPROPERTY_CROSSBAR_PININFO_S), // MinProperty
sizeof(KSPROPERTY_CROSSBAR_PININFO_S), // MinData
FALSE, // SetSupported or Handler
NULL, // Values
0, // RelationsCount
NULL, // Relations
NULL, // SupportHandler
0 // SerializedSize
),
};
const ULONG Crossbar::NumProperties()
{
return SIZEOF_ARRAY(XBarProperties);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -