MXF Reader Lib

From AVObjects Knowledge Base
(Difference between revisions)
Jump to: navigation, search
Line 33: Line 33:
 
{{AVO Sample of create and Initialize|MXFReader}}
 
{{AVO Sample of create and Initialize|MXFReader}}
 
{{AVO Sample of trace properties}}
 
{{AVO Sample of trace properties}}
 
+
{{AVO Sample of copy stream}}
  
 
[[Category:Splitters&Readers]]
 
[[Category:Splitters&Readers]]

Revision as of 08:35, 11 July 2014

This page is a copy of the original page on the AVObjects' web site and can also be viewed here.


TODO: Description

Overview

TODO: Overview

Interfaces&Methods

Object implements follows methods of IAVObject Interface

IAVProperties Interface used for sets ang gets values of MXF Reader Lib properties.

Properties

formatBSTRReadOnly
File format
format_nameBSTRReadOnly
File format description
sourceBSTRReadWrite
Name of file
start_timedoubleReadOnly
Start timecode
durationdoubleReadOnly
File duration in second
ext_audioboolReadWrite
Enable external audio file,as example for Panasonic P2
fw_playboolReadWrite
Play direction, true for forward, false for backward
aes_keyBSTRReadWrite
Encription key for DCI files in HEX format XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX, dots may be omnited or replaced to any delimiter
streamsarray of objectsReadWrite
Array of media streams for file

Samples

Create and Initialize

//---------------------------------
// Create {{{1}}} object
CComPtr<IAVObject>;	spReader;
 
HRESULT hr = Create_{{{1}}}(&spReader); 
if (hr != S_OK)
   return hr;
 
//---------------------------------
// Query IAVProperties interface
CComQIPtr<IAVProperties> spProps(spReader);
ATLASSERT(spProps != NULL);
 
//---------------------------------
// Set filename
hr = spProps->PropsSet(L"source", L"filename.ext");
if(hr != S_OK)
  return hr;
 
//---------------------------------
// Init Object
hr = spReader->Init();
if(hr != S_OK)
  return hr;

Trace all object's properties

//Query IAVProperties interface
CComQIPtr<IAVProperties> spProps(spObject);
 
//Get list name=value pairs separated CR
//for all properties of object
CComBSTR cbsPropsList;
HRESULT hr = spProps->PropsGet(L"\n", cbsPropsList);
ATLASSERT(hr == S_OK);
 
//Trace properties	
ATLTRACE2(atlTraceGeneral, 2, L"Qbject's properties:\n%s\n", 
  spPropsList);

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