Microsoft DirectX 8.1 (C++)

Obtaining the DVD Interface Pointers

After the filter graph is built, your application can obtain the pointers it needs to control the DVD Navigator, the Filter Graph Manager, and the video window. The basic steps, with error-checking and other code left out for simplicity, are illustrated in the following code example. The complete code is found in the DVD Sample application in the CDvdCore::BuildGraph method.

    // Create an instance of the DVD Graph Builder object.
   HRESULT hr;
   hr = CoCreateInstance(CLSID_DvdGraphBuilder,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_IDvdGraphBuilder,
                          reinterpret_cast<void**>(&m_pIDvdGB));

   // Build the DVD filter graph.
   AM_DVD_RENDERSTATUS    buildStatus;
   hr = m_pIDvdGB->RenderDvdVideoVolume(pszwDiscPath, m_dwRenderFlags, &buildStatus);

   // Get the pointers to the DVD Navigator interfaces.
   hr = m_pIDvdGB->GetDvdInterface(IID_IDvdInfo2, reinterpret_cast<void**>(&m_pIDvdI2));
   hr = m_pIDvdGB->GetDvdInterface(IID_IDvdControl2, reinterpret_cast<void**>(&m_pIDvdC2));
   ...    
   // Get a pointer to the filter graph manager.
   hr = m_pDvdGB->GetFiltergraph(&m_pGraph) ;
   ...   
   // Use the graph pointer to get a pointer to IMediaControl,
   // used for controlling the filter graph as a whole.
   hr = m_pGraph->QueryInterface(IID_IMediaControl, reinterpret_cast<void**>(&m_pIMC));
   ...   
   // Get a pointer to IMediaEventEx,
   // used for handling DVD and other filter graph events.
   hr = m_pGraph->QueryInterface(IID_IMediaEventEx, (LPVOID *)&m_pME) ; 
   ...                
   // Use the graph builder pointer again to get the IVideoWindow interface,
   // used to set the window style and message-handling behavior of the video renderer filter.
   hr = m_pIDvdGB->GetDvdInterface(IID_IVideoWindow, reinterpret_cast<void**>(&m_pIVW));
  
   hr = m_pDvdGB->GetDvdInterface(IID_IAMLine21Decoder, (LPVOID *)&pL21Dec) ;