//==========================================================================; // // 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 - 1998 Microsoft Corporation. All Rights Reserved. // //==========================================================================; // // This file handles all codec property sets // #include #include #include "codmain.h" #include "coddebug.h" //#define SETDISCOVERED // CodecFiltering Property Set functions // ------------------------------------------------------------------- /* ** CodecSetCodecGlobalProperty () ** ** Handles Set operations on the Global Codec property set. ** ** Arguments: ** ** pSRB - ** Pointer to the HW_STREAM_REQUEST_BLOCK ** ** Returns: ** ** Side Effects: none */ VOID CodecSetCodecGlobalProperty( 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 LONG nBytes = pSPD->PropertyOutputSize - sizeof(KSPROPERTY); // size of data supplied ASSERT (nBytes >= sizeof (LONG)); switch (Id) { case KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY: { PKSPROPERTY_VBICODECFILTERING_SCANLINES_S Property = (PKSPROPERTY_VBICODECFILTERING_SCANLINES_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecSetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY\n")); nBytes = min( nBytes, sizeof(pHwDevExt->ScanlinesRequested ) ); RtlCopyMemory( &pHwDevExt->ScanlinesRequested, &Property->Scanlines, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } #ifdef SETDISCOVERED case KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY: { PKSPROPERTY_VBICODECFILTERING_SCANLINES_S Property = (PKSPROPERTY_VBICODECFILTERING_SCANLINES_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecSetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY\n")); nBytes = min( nBytes, sizeof(pHwDevExt->ScanlinesDiscovered ) ); RtlCopyMemory( &pHwDevExt->ScanlinesDiscovered, &Property->Scanlines, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } #endif // SETDISCOVERED case KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY: { PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S Property = (PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecSetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY\n")); nBytes = min( nBytes, sizeof(pHwDevExt->SubstreamsRequested ) ); RtlCopyMemory( &pHwDevExt->SubstreamsRequested, &Property->Substreams, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } #ifdef SETDISCOVERED case KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY: { PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S Property = (PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecSetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY\n")); nBytes = min( nBytes, sizeof(pHwDevExt->SubstreamsDiscovered ) ); RtlCopyMemory( &pHwDevExt->SubstreamsDiscovered, &Property->Substreams, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } #endif // SETDISCOVERED case KSPROPERTY_VBICODECFILTERING_STATISTICS: { PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S Property = (PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecSetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_STATISTICS\n")); nBytes = min( nBytes, sizeof(pHwDevExt->Statistics ) ); RtlCopyMemory( &pHwDevExt->Statistics, &Property->Statistics, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } default: pSrb->Status = STATUS_NOT_IMPLEMENTED; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecSetCodecGlobalProperty : Unknown Property Id=%d\n", Id)); CDEBUG_BREAK(); break; } } /* ** CodecGetCodecGlobalProperty () ** ** Handles Get operations on the Global Codec property set. ** ** Arguments: ** ** pSRB - ** Pointer to the HW_STREAM_REQUEST_BLOCK ** ** Returns: ** ** Side Effects: none */ VOID CodecGetCodecGlobalProperty( 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 LONG nBytes = pSPD->PropertyOutputSize - sizeof(KSPROPERTY); // size of data supplied ASSERT (nBytes >= sizeof (LONG)); switch (Id) { case KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY: { PKSPROPERTY_VBICODECFILTERING_SCANLINES_S Property = (PKSPROPERTY_VBICODECFILTERING_SCANLINES_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecGetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY\n")); nBytes = min( nBytes, sizeof(pHwDevExt->ScanlinesRequested ) ); RtlCopyMemory( &Property->Scanlines, &pHwDevExt->ScanlinesRequested, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } case KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY: { PKSPROPERTY_VBICODECFILTERING_SCANLINES_S Property = (PKSPROPERTY_VBICODECFILTERING_SCANLINES_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecGetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY\n")); nBytes = min( nBytes, sizeof(pHwDevExt->ScanlinesDiscovered ) ); RtlCopyMemory( &Property->Scanlines, &pHwDevExt->ScanlinesDiscovered, nBytes ); // Clear the data after the read so that it's always "fresh" RtlZeroMemory( &pHwDevExt->ScanlinesDiscovered, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } case KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY: { PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S Property = (PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecGetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY\n")); nBytes = min( nBytes, sizeof(pHwDevExt->SubstreamsRequested ) ); RtlCopyMemory( &Property->Substreams, &pHwDevExt->SubstreamsRequested, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } case KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY: { PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S Property = (PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecGetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY\n")); nBytes = min( nBytes, sizeof(pHwDevExt->SubstreamsDiscovered ) ); RtlCopyMemory( &Property->Substreams, &pHwDevExt->SubstreamsDiscovered, nBytes ); // Clear the data after the read so that it's always "fresh" RtlZeroMemory( &pHwDevExt->SubstreamsDiscovered, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } case KSPROPERTY_VBICODECFILTERING_STATISTICS: { PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S Property = (PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S) pSPD->PropertyInfo; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecGetCodecGlobalProperty : KSPROPERTY_VBICODECFILTERING_STATISTICS\n")); nBytes = min( nBytes, sizeof(pHwDevExt->Statistics ) ); RtlCopyMemory( &Property->Statistics, &pHwDevExt->Statistics, nBytes ); pSrb->ActualBytesTransferred = nBytes + sizeof(KSPROPERTY); break; } default: pSrb->Status = STATUS_NOT_IMPLEMENTED; CDebugPrint(DebugLevelVerbose, ( CODECNAME ": CodecGetCodecGlobalProperty : Unknown Property Id=%d\n", Id)); CDEBUG_BREAK(); break; } } // ------------------------------------------------------------------- // General entry point for all get/set codec properties // ------------------------------------------------------------------- /* ** CodecSetProperty () ** ** Handles Set operations for all codec properties. ** ** Arguments: ** ** pSRB - ** Pointer to the HW_STREAM_REQUEST_BLOCK ** ** Returns: ** ** Side Effects: none */ VOID STREAMAPI CodecSetProperty( PHW_STREAM_REQUEST_BLOCK pSrb ) { PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo; if (IsEqualGUID( &KSPROPSETID_Connection, &pSPD->Property->Set)) { // CodecSetConnectionProperty(pSrb); } else if (IsEqualGUID( &KSPROPSETID_VBICodecFiltering, &pSPD->Property->Set)) { CodecSetCodecGlobalProperty(pSrb); } else { // // We should never get here // CDEBUG_BREAK(); } } /* ** CodecGetProperty () ** ** Handles Get operations for all codec properties. ** ** Arguments: ** ** pSRB - ** Pointer to the HW_STREAM_REQUEST_BLOCK ** ** Returns: ** ** Side Effects: none */ VOID STREAMAPI CodecGetProperty( PHW_STREAM_REQUEST_BLOCK pSrb ) { PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo; if (IsEqualGUID( &KSPROPSETID_Connection, &pSPD->Property->Set)) { // CodecGetConnectionProperty(pSrb); } else if (IsEqualGUID( &KSPROPSETID_VBICodecFiltering, &pSPD->Property->Set)) { CodecGetCodecGlobalProperty(pSrb); } else { // // We should never get here // CDEBUG_BREAK(); } }