Template:AVO Sample of copying

From AVObjects Knowledge Base
Jump to: navigation, search

Copy frames for all streams from source object to dest object

for(int n = 0; n < nStreams; n++)
{
  HRESULT hr = spDest->CanPutFrame(n, 0);
  if ( FAILED(hr) )
     return hr;
   else if (hr != S_OK)
     continue;
 
  hr = spSource->CanGetFrame(n, 0);
  if ( FAILED(hr) )
    return hr;
  else if (hr != S_OK)
    continue;
 
  DWORD cbActual = 0;
  REFERENCE_TIME tS = 0, tE = 0;
  DWORD dwFlags = 0;
 
  hr = spSource->GetFrame(n, m_pbBuffer, m_cbBuffer, &cbActual, &dwFlags, &tS, &tE, NULL);
  if (hr == S_OK)
  {
     hr = spDest->PutFrame(n, m_pbBuffer, cbActual, dwFlags, tS, tE, NULL);
  }
  else if (hr == HRESULT_FROM_WIN32(ERROR_HANDLE_EOF))
  {
     hr = spDest->PutFrame(n, NULL, 0, 0, 0, 0, NULL);
  }  
  if (FAILED(hr))
    return hr;
}
Personal tools