Method PutFrame

From AVObjects Knowledge Base
Revision as of 08:53, 11 July 2014 by Rod (Talk | contribs)
Jump to: navigation, search

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.

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;
}
Personal tools