Directly Accessing DirectShow Objects

The ltmmCapture, ltmmConvert, and ltmmPlay objects implement the GetSubObject function so you can access DirectShow specific objects directly.

Suppose for example, you wanted access to the ltmmCapture objects underlying FilterGraph in order to set up the log file output.

The following code, accomplishes this:

C API
IltmmCapture *pCapture;  // initialized elsewhere 
HANDLE hLogFile;   // handle to logfile, set elsewhere 
HRESULT hr; 
IUnknown *pUnk; 
IGraphBuilder *pFg; 
// call the Capture object to retrieve the FilterGraph 
hr = IltmmCapture_GetSubObject(pCapture, ltmmCapture_Object_FilterGraph, &pUnk); 
if (SUCCEEDED(hr)) 
{ 
   // retrieve the IGraphBuilder interface 
   hr = IUnknown_QueryInterface(pUnk, IID_IGraphBuilder, (void**)&pFg); 
   IUnknown_Release(pUnk); 
   if (SUCCEEDED(hr)) 
   { 
      // assign the logfile 
      IGraphBuilder _SetLogFile(pFg, (DWORD_PTR)hLogFile); 
      IUnknown_Release(pFg); 
   } 
} 
C++
IltmmCapture *pCapture;  // initialized elsewhere 
HANDLE hLogFile;   // handle to logfile, set elsewhere 
HRESULT hr; 
IUnknown *pUnk; 
IGraphBuilder *pFg; 
// call the Capture object to retrieve the FilterGraph 
hr = pCapture->GetSubObject(ltmmCapture_Object_FilterGraph, &pUnk); 
if (SUCCEEDED(hr)) 
{ 
   // retrieve the IGraphBuilder interface 
   hr = pUnk->QueryInterface(IID_IGraphBuilder, (void**)&pFg); 
   pUnk->Release(); 
   if (SUCCEEDED(hr)) 
   { 
      // assign the logfile 
      pFg->SetLogFile((DWORD_PTR)hLogFile); 
      pFg->Release(); 
   } 
} 

Another example is to call the ltmmPlay object to retrieve the Video Renderer in order to enable RGB mode.

This is demonstrated, as follows:

C API
IltmmPlay *pPlay;  // initialized elsewhere 
HRESULT hr; 
IUnknown *pUnk; 
IDirectDrawVideo *pDDV; 
// call the Play object to retrieve the VideoRenderer 
hr = IltmmPlay_GetSubObject(pPlay, ltmmPlay_Object_VideoRenderer, &pUnk); 
if (SUCCEEDED(hr)) 
{ 
   // retrieve the IDirectDrawVideo interface 
   hr = IUnknown_QueryInterface(pUnk, IID_IGraphBuilder, (void**)&pDDV); 
   IUnknown_Release(pUnk); 
   if (SUCCEEDED(hr)) 
   { 
      // set rgb mode 
      IDirectDrawVideo _SetSwitches(pDDV, AMDDS_RGB); 
      IUnknown_Release(pDDV); 
   } 
} 
C++
IltmmPlay *pPlay;  // initialized elsewhere 
HRESULT hr; 
IUnknown *pUnk; 
IDirectDrawVideo *pDDV; 
// call the Play object to retrieve the VideoRenderer 
hr = pPlay->GetSubObject(ltmmPlay_Object_VideoRenderer, &pUnk); 
if (SUCCEEDED(hr)) 
{ 
   // retrieve the IDirectDrawVideo interface 
   hr = pUnk->QueryInterface(IID_IGraphBuilder, (void**)&pDDV); 
   pUnk->Release(pUnk); 
   if (SUCCEEDED(hr)) 
   { 
      // set rgb mode 
      pDDV->SetSwitches(AMDDS_RGB); 
      pDDV->Release(); 
   } 
} 

A third example is to call the ltmmConvert object to retrieve the video compressor in order to adjust the compression quality.

This is demonstrated, as follows:

C API
IltmmConvert *pConvert;  // initialized elsewhere 
HRESULT hr; 
IUnknown *pUnk; 
IAMVideoCompression *pVC; 
// call the Convert object to retrieve the Video Compressor 
hr = IltmmConvert_GetSubObject(pConvert, ltmmConvert_Object_VideoCompressor, &pUnk); 
if (SUCCEEDED(hr)) 
{ 
   // retrieve the IAMVideoCompression interface 
   hr = IUnknown_QueryInterface(pUnk, IID_IAMVideoCompression, (void**)&pVC); 
   IUnknown_Release(pUnk); 
   if (SUCCEEDED(hr)) 
   { 
      // set the quality to the best available 
      IAMVideoCompression_put_Quality(pVC, 1.0); 
      IUnknown_Release(pVC); 
   } 
} 
C++
IltmmConvert *pConvert;  // initialized elsewhere 
HRESULT hr; 
IUnknown *pUnk; 
IAMVideoCompression *pVC; 
// call the Convert object to retrieve the Video Compressor 
hr = pConvert->GetSubObject(ltmmConvert_Object_VideoCompressor, &pUnk); 
if (SUCCEEDED(hr)) 
{ 
   // retrieve the IAMVideoCompression interface 
   hr = pUnk->QueryInterface(IID_IAMVideoCompression, (void**)&pVC); 
   pUnk->Release(pUnk); 
   if (SUCCEEDED(hr)) 
   { 
      // set the quality to the best available 
      pVC->put_Quality(1.0); 
      pVC->Release(); 
   } 
} 

Help Version 22.0.2023.1.26
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Multimedia C API Help
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.