Method PutFrame

From AVObjects Knowledge Base
(Difference between revisions)
Jump to: navigation, search
 
(One intermediate revision by one user not shown)
Line 1: Line 1:
 
{{This|interfaces/iavobject/PutFrame.html}}
 
{{This|interfaces/iavobject/PutFrame.html}}
 
<!--SORT=7-->
 
<!--SORT=7-->
 
+
__NOTOC__
 
Method to put data to AV object.
 
Method to put data to AV object.
 
== ==
 
== ==
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}}
+
{{AVO Sample of copy stream}}
 
[[Category:IAVObject]]
 
[[Category:IAVObject]]

Latest revision as of 08:53, 11 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.

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 stream

//BYTE* pbBuffer - pointer to frame buffer
//DWORD cbBuffer - size of frane buffer in bytes
//int nStream - index of stream
 
HRESULT hr = S_OK;
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