COPPOpenVideoSession function
The sample COPPOpenVideoSession function initializes the COPP DirectX VA device object that is used for the current video session.
Syntax
HRESULT COPPOpenVideoSession(
_In_ COPP_DeviceData pThis,
_In_ ULONG DevID
);
Parameters
pThis [in]
- Pointer to the COPP DirectX VA device object.
DevID [in]
- Supplies the identifier of the graphics device to which the COPP device is attached.
Return value
Returns zero (S_OK or DD_OK) if successful; otherwise, returns an error code.
Remarks
A COPP device must be initialized through a call to COPPOpenVideoSession before any other member function of the COPP device class is called. COPPOpenVideoSession should initialize (set to 0) the video session's local protection levels for each supported protection type and increment the corresponding global protection level counter. For more information, see Handling Protection Levels.
COPPOpenVideoSession should return DDERR_UNSUPPORTEDMODE if the device identified by the DevID parameter drives multiple graphics adapters that use a mode other than DualView. For more information, see COPP and Multiple-Monitor Support.
The sample COPPOpenVideoSession function maps directly to the CreateMoComp member of the DD_MOTIONCOMPCALLBACKS structure. The CreateMoComp member points to the display driver-supplied DdMoCompCreate callback function that references the DD_CREATEMOCOMPDATA structure. The lpGuid member of DD_CREATEMOCOMPDATA points to the COPP DirectX VA device GUID.
Example code
The following code provides an example of how you can implement your COPPOpenVideoSession function:
HRESULT
COPPOpenVideoSession(
COPP_DeviceData* pThis,
DWORD DevID
)
{
DWORD i;
pThis->m_DevID = DevID;
pThis->m_CmdSeqNumber = (DWORD)-1;
pThis->m_StatusSeqNumber = (DWORD)-1;
pThis->m_COPPDevState = COPP_OPENED;
memset(&pThis->m_AesHelper, 0, sizeof(pThis->m_AesHelper));
//
// make sure the session protection levels are reset
//
memset(&pThis->m_LocalLevel, 0, sizeof(pThis->m_LocalLevel));
//
// initialize the session local protection levels and
// increment the corresponding global protection level counter
//
// enumerate all the protection types supported by this connector
DWORD j;
for (j = COPP_ProtectionType_HDCP, i = COPP_ProtectionTypeIndex_HDCP;
j & COPP_ProtectionType_Mask; j <<= 1, i++) {
// for each type supported, make sure the initial level
// is set correctly
if (g_ConnectorInfo[pThis->m_DevID].ProtectionTypeMask & j) {
pThis->m_LocalLevel[i] = 0;
g_COPPLevels[pThis->m_DevID].Levels[i][0]++;
}
else {
pThis->m_LocalLevel[i] = COPP_NoProtectionLevelAvailable;
}
}
return NO_ERROR;
}
Requirements
Target platform | Version |
---|---|
Desktop | This function applies only to Windows Server 2003 with SP1 and later, and Windows XP with SP2 and later. |