Template:AVO Sample of copy stream

From AVObjects Knowledge Base
Revision as of 08:33, 11 July 2014 by Rod (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Copy stream

HRESULT hr = S_OK;

//Alloc memory for frames DWORD cbBuffer = 0x100000; BYTE* pbBuffer = malloc(cbBuffer); if (pbBuffer == NULL)

 return E_OUTOFMEMORY;

while(1) {

 hr = spDest->CanPutFrame(nStream, INFINITE);
 if ( hr != S_OK )
    return hr;

 hr = spSource->CanGetFrame(nStream, INFINITE);
 if (hr != S_OK)
   return hr;

 DWORD cbActual = 0;
 REFERENCE_TIME tS = 0, tE = 0;
 DWORD dwFlags = 0;

 hr = spSource->GetFrame(nStream, pbBuffer, cbBuffer, &cbActual, &dwFlags, &tS, &tE, NULL);
 if (hr == S_OK)
 {
    hr = spDest->PutFrame(nStream, m_pbBuffer, cbActual, dwFlags, tS, tE, NULL);
 }
 else if (hr == HRESULT_FROM_WIN32(ERROR_HANDLE_EOF))
 {
    // EOS, put empty frame to dest
    hr = spDest->PutFrame(nStream, NULL, 0, 0, 0, 0, NULL);
    if (hr == S_OK)
       return hr;
 }  
 if (FAILED(hr))
   return hr;

}

Personal tools