How to Set DVR Buffer Locations on Multiple Physical Disks (C++)

The following method for C++ shows how to get the DVR Sink object from the ltmmPlayControl object and use it to set DVR buffer location settings on physical disks C: and D:.

 

void CDVRExample::SetDVRBufferSettings()
{
   IUnknown *punk = NULL;
   HRESULT hr = m_player->GetSubObject(ltmmPlay_Object_SourceFilter, &punk);
   
   if(SUCCEEDED(hr) && NULL != punk)
   {
      ILMDVRSink *pDvrSink;
      hr = punk->QueryInterface(IID_ILMDVRSink, (LPVOID*)&pDvrSink);
      punk->Release();
      
      if (SUCCEEDED(hr))
      {
          // Tell sink we are starting to change settings
         pDvrSink->StartChangingAttributes();

          // Set Two locations
         pDvrSink->put_FolderCount(2);
         pDvrSink->put_BaseName(L"Capture.LBL");

         // Set folder 1 location
         pDvrSink->put_FolderName(0, L"C:\\Temp\\DVR");

         // Set folder 1 file count to 2, each set to 16MB max file size
         pDvrSink->SetBufferSize(0, 2, 16384000);

         // Set folder 2 location
         pDvrSink->put_FolderName(0, L"D:\\Temp\\DVR");

         // Set folder 2 file count to 4, each set to 8MB max file size
         pDvrSink->SetBufferSize(1, 4, 8192000);

          // Tell sink to apply the changes
         pDvrSink->StopChangingAttributes(VARIANT_FALSE);
         
          // Release interface and free strings
         pDvrSink->Release();
      }
   }
}