Method PutFrame
From AVObjects Knowledge Base
This page is a copy of the original page on the AVObjects' web site and can also be viewed here.
Method to put data to AV object.
Contents |
HRESULT PutFrame( [in] int nStream, [in] BYTE* pbBuffer, [in] DWORD cbActual, [in] DWORD dwFlags, [in] REFERENCE_TIME tS, [in] REFERENCE_TIME tE, [in] BYTE* pbReserved );
Parameters:
nStream Number of stream pbBuffer Buffer with data. cbActual Size of data in buffer in bytes. dwFlags Library specific bitmap (see library description) tS Start time tE End time pbReserved Library specific variable (see library description)
Returns:
S_OK Data in pbBuffer sended HRESULT_FROM_WIN32(ERROR_HANDLE_EOF) End of stream E_INVALIDARG One or more arguments are invalid E_FAIL Object not initialized yet or other failure
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; }