⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controls.cpp

📁 采集卡的驱动编程,具有较大的参考价值,特别开发视频采集的软件工程师有用
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// 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 + -