Method PutFrame

From AVObjects Knowledge Base
(Difference between revisions)
Jump to: navigation, search
Line 34: Line 34:
 
E_FAIL                              Object not initialized yet or other failure
 
E_FAIL                              Object not initialized yet or other failure
 
</pre>
 
</pre>
 +
{{AVO Sample of copying}}
 
[[Category:IAVObject]]
 
[[Category:IAVObject]]

Revision as of 15:37, 8 July 2014

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