Template:AVO Sample of copy stream
From AVObjects Knowledge Base
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;
}