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

📄 tsndprop.cpp

📁 winddk src目录下的WDM源码压缩!
💻 CPP
字号:
//==========================================================================;
//
//  TSndProp.CPP
//  WDM TVAudio MiniDriver. 
//      AIW / AIWPro hardware platform. 
//          WDM Properties management.
//  Copyright (c) 1996 - 1997  ATI Technologies Inc.  All Rights Reserved.
//
//      $Date:   30 Jul 1998 17:36:30  $
//  $Revision:   1.2  $
//    $Author:   KLEBANOV  $
//
//==========================================================================;

extern "C"
{
#include "strmini.h"
#include "ksmedia.h"

#include "wdmdebug.h"
}

#include "wdmdrv.h"
#include "atitvsnd.h"
#include "aticonfg.h"




/*^^*
 *      AdapterGetProperty()
 * Purpose  : Called when SRB_GET_PROPERTY SRB is received.
 *
 * Inputs   :   PHW_STREAM_REQUEST_BLOCK pSrb   : pointer to the current Srb
 *
 * Outputs  : BOOL : returns returns FALSE, if it is not a Tv Audio property
 *              it also returns the required property
 * Author   : IKLEBANOV
 *^^*/
BOOL CWDMTVAudio::AdapterGetProperty( PHW_STREAM_REQUEST_BLOCK pSrb)
{
    PSTREAM_PROPERTY_DESCRIPTOR pSpd = pSrb->CommandData.PropertyInfo;
    ULONG uiPropertyId = pSpd->Property->Id;                // index of the property
    ULONG nPropertyOutSize = pSpd->PropertyOutputSize;      // size of data requested

    if( !::IsEqualGUID(( const struct _GUID &)PROPSETID_VIDCAP_TVAUDIO, ( const struct _GUID &)pSpd->Property->Set))
        return( FALSE);

    OutputDebugInfo(( "CWDMAVXBar:AdapterGetProperty() Id = %d\n", uiPropertyId));

    switch( uiPropertyId)
    {
    case KSPROPERTY_TVAUDIO_CAPS:
        ASSERT( nPropertyOutSize >= sizeof( KSPROPERTY_TVAUDIO_CAPS_S));
        {
            PKSPROPERTY_TVAUDIO_CAPS_S pTVAudioCaps = ( PKSPROPERTY_TVAUDIO_CAPS_S)pSpd->PropertyInfo;

            // Copy the input property info to the output property info
            ::RtlCopyMemory( pTVAudioCaps, pSpd->Property, sizeof( KSPROPERTY_TVAUDIO_CAPS_S));
            
            pTVAudioCaps->Capabilities = m_ulModesSupported;
            pTVAudioCaps->InputMedium = m_wdmTVAudioPinsMediumInfo[0];
            pTVAudioCaps->OutputMedium = m_wdmTVAudioPinsMediumInfo[1];
        }

        pSrb->ActualBytesTransferred = sizeof( KSPROPERTY_TVAUDIO_CAPS_S);
        break;

    case KSPROPERTY_TVAUDIO_MODE:
        ASSERT( nPropertyOutSize >= sizeof( KSPROPERTY_TVAUDIO_S));
        {
            PKSPROPERTY_TVAUDIO_S   pTVAudioMode = ( PKSPROPERTY_TVAUDIO_S)pSpd->PropertyInfo;

            // Copy the input property info to the output property info
            ::RtlCopyMemory( pTVAudioMode, pSpd->Property, sizeof( KSPROPERTY_TVAUDIO_S));
        
            // GetMode returns the mode the device was set up with,  not the current read back from
            // the device itself ( current AudioSignal Properties)
            pTVAudioMode->Mode = m_ulTVAudioMode;
            pSrb->ActualBytesTransferred = sizeof( KSPROPERTY_TVAUDIO_S);
        }
        break;

    case KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES:
        ASSERT( nPropertyOutSize >= sizeof( KSPROPERTY_TVAUDIO_S));
        {
            ULONG                   ulAudioMode;
            PKSPROPERTY_TVAUDIO_S   pTVAudioMode = ( PKSPROPERTY_TVAUDIO_S)pSpd->PropertyInfo;

            // Copy the input property info to the output property info
            ::RtlCopyMemory( pTVAudioMode, pSpd->Property, sizeof( KSPROPERTY_TVAUDIO_S));

            if( !GetAudioOperationMode( &ulAudioMode))
                return( FALSE);

            m_ulTVAudioSignalProperties = ulAudioMode;
            pTVAudioMode->Mode = ulAudioMode;
            pSrb->ActualBytesTransferred = sizeof( KSPROPERTY_TVAUDIO_S);
        }
        break;

    default:
        TRAP;
        return( FALSE);
    }

    return( TRUE);
}



/*^^*
 *      AdapterSetProperty()
 * Purpose  : Called when SRB_GET_PROPERTY SRB is received.
 *
 * Inputs   :   PHW_STREAM_REQUEST_BLOCK pSrb   : pointer to the current Srb
 *
 * Outputs  : BOOL : returns FALSE, if it is not a TV Audio property
 *              it also sets the required property
 * Author   : IKLEBANOV
 *^^*/
BOOL CWDMTVAudio::AdapterSetProperty( PHW_STREAM_REQUEST_BLOCK pSrb)
{
    PSTREAM_PROPERTY_DESCRIPTOR pSpd = pSrb->CommandData.PropertyInfo;
    ULONG uiPropertyId = pSpd->Property->Id;            // index of the property

    if( !::IsEqualGUID( ( const struct _GUID &)PROPSETID_VIDCAP_TVAUDIO, ( const struct _GUID &)pSpd->Property->Set))
        return( FALSE);

    OutputDebugInfo(( "CWDMAVXBar:AdapterSetProperty() Id = %d\n", uiPropertyId));

    switch( uiPropertyId)
    {
    case KSPROPERTY_TVAUDIO_MODE:
        ASSERT( pSpd->PropertyOutputSize >= sizeof( KSPROPERTY_TVAUDIO_S));
        {
            ULONG ulModeToSet = (( PKSPROPERTY_TVAUDIO_S)pSpd->PropertyInfo)->Mode;

            if( ulModeToSet == ( ulModeToSet & m_ulModesSupported))
            {
                // every mode we're asked to set is supported
                if( ulModeToSet != m_ulTVAudioMode)
                {
                    if( !SetAudioOperationMode( ulModeToSet))
                        return( FALSE);
                    else
                        // update the driver
                        m_ulTVAudioMode = ulModeToSet;
                }
            }
            else
                return( FALSE);
        }
        break;

    default:
        TRAP;
        return( FALSE);
    }

    return( TRUE);
}



/*^^*
 *      SetWDMTVAudioKSTopology()
 * Purpose  : Sets the KSTopology structure
 *              Called during CWDMTVAudio class construction time.
 *
 * Inputs   : none
 *
 * Outputs  : none
 * Author   : IKLEBANOV
 *^^*/
void CWDMTVAudio::SetWDMTVAudioKSTopology( void)
{
    GUID wdmTVAudioTopologyCategory[] =
    {
        STATIC_KSCATEGORY_TVAUDIO
    };
    
    ::RtlCopyMemory( &m_wdmTVAudioTopologyCategory, wdmTVAudioTopologyCategory, sizeof( wdmTVAudioTopologyCategory));

    m_wdmTVAudioTopology.CategoriesCount = 1;
    m_wdmTVAudioTopology.Categories = &m_wdmTVAudioTopologyCategory;
    m_wdmTVAudioTopology.TopologyNodesCount = 0;
    m_wdmTVAudioTopology.TopologyNodes = NULL;
    m_wdmTVAudioTopology.TopologyConnectionsCount = 0;
    m_wdmTVAudioTopology.TopologyConnections = NULL;
}



/*^^*
 *      SetWDMTVAudioKSProperties()
 * Purpose  : Sets the KSProperty structures array
 *              Called during CWDMTVAudio class construction time.
 *
 * Inputs   : none
 *
 * Outputs  : none
 * Author   : IKLEBANOV
 *^^*/
void CWDMTVAudio::SetWDMTVAudioKSProperties( void)
{

    DEFINE_KSPROPERTY_TABLE( wdmTVAudioProperties)
    {
        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
        )
    };

    DEFINE_KSPROPERTY_SET_TABLE( wdmTVAudioPropertySet)
    {
        DEFINE_KSPROPERTY_SET
        (
            &PROPSETID_VIDCAP_TVAUDIO,                      // Set
            KSPROPERTIES_TVAUDIO_NUMBER,                    // PropertiesCount
            m_wdmTVAudioProperties,                         // PropertyItems
            0,                                              // FastIoCount
            NULL                                            // FastIoTable
        )
    };

    ::RtlCopyMemory( &m_wdmTVAudioProperties, wdmTVAudioProperties, sizeof( wdmTVAudioProperties));
    ::RtlCopyMemory( &m_wdmTVAudioPropertySet, wdmTVAudioPropertySet, sizeof( wdmTVAudioPropertySet));
}



/*^^*
 *      SetWDMTVAudioKSEvents()
 * Purpose  : Sets the KSEvent structures array
 *              Called during CWDMTVAudio class construction time.
 *
 * Inputs   : none
 *
 * Outputs  : none
 * Author   : IKLEBANOV
 *^^*/
void CWDMTVAudio::SetWDMTVAudioKSEvents( void)
{
    PKSEVENT_ITEM pKSEventItem = &m_wdmTVAudioEvents[0];

    pKSEventItem->EventId = KSEVENT_TVAUDIO_CHANGED;
    pKSEventItem->DataInput = pKSEventItem->ExtraEntryData = 0;
    pKSEventItem->AddHandler = NULL;
    pKSEventItem->RemoveHandler = NULL;
    pKSEventItem->SupportHandler = NULL;
    
    m_wdmTVAudioEventsSet[0].Set = &KSEVENTSETID_VIDCAP_TVAUDIO;
    m_wdmTVAudioEventsSet[0].EventsCount = 0;
    m_wdmTVAudioEventsSet[0].EventItem = pKSEventItem;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -