FrameHandlerSink::create Method

構文

static tFrameHandlerSinkPtr create( unsigned int countBuffers );
static tFrameHandlerSinkPtr create( IFrameFilter* pFilter, unsigned int countBuffers = 0 );
static tFrameHandlerSinkPtr create( const tFrameFilterList& lst, unsigned int countBuffers = 0 );
static tFrameHandlerSinkPtr create( IFrameFilter* pFilter, const FrameTypeInfo& type, unsigned int countBuffers );
static tFrameHandlerSinkPtr create( const tFrameFilterList& lst,
                  const FrameTypeInfo& type, unsigned int countBuffers );
static tFrameHandlerSinkPtr create( IFrameFilter* pFilter, const smart_ptr <MemBufferCollection>& pCol );
static tFrameHandlerSinkPtr create( const tFrameFilterList& lst, const smart_ptr <MemBufferCollection>& pCol );
static tFrameHandlerSinkPtr create( const smart_ptr <MemBufferCollection>& pCol );
static tFrameHandlerSinkPtr create( const FrameTypeInfo& type, unsigned int countBuffers );
static tFrameHandlerSinkPtr create( tColorformatEnum colorformat, unsigned int countBuffers );
static tFrameHandlerSinkPtr create( const FrameTypeInfoArray& acceptedInputTypes, unsigned int countBuffers );
static tFrameHandlerSinkPtr create( const tCreateData& data );
パラメータ 説明
countBuffers MemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollection内で作成するバッファ数です。
countBuffers0の時、MemBufferCollectionは作成されません。この場合、フレームフィルタ(もしくはフィルタチェーンの最終フィルタ) がデスティネーションフレームなしでコールされます。このような種類のフィルタではGrabberListenerクラスライブラリリファレンス>クラス>GrabberListenerのような画像の分析処理を行うことが可能です。画像データはMemBufferCollectionにコピーされることがないため一回コピー処理にかかる時間が節約できます。
pFilter 変換/コピー処理のためのフレームフィルタです。
lst フレームフィルタのtFrameFilterListクラスライブラリリファレンス>型定義>tFrameFilterList です。このリスト内のフィルタは画像データの変換に使用されるフィルタチェーン内で連携しています。
type MemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollection内の画像データのタイプです。
colorformat MemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollection内の画像データのカラーフォーマットです。
pCol カスタムのMemBufferCollectionクラスライブラリリファレンス>クラス>MemBufferCollectionへのポインタです。
acceptedInputTypes シンクが受け付けるフレームタイプのFrameTypeInfoArrayクラスライブラリリファレンス>クラス>FrameTypeInfoArray です。ライブビデオが開始されると必要な変換処理を最小限にするためにこれらのタイプから一つが選択されます。
data FrameHandlerSinkを複製するためにFrameHandlerSink::getCreateDataクラスライブラリリファレンス>クラス>FrameHandlerSink>FrameHandlerSink::getCreateData Methodをコールして作成に使うパラメータにアクセスします。tCreateDataクラスライブラリリファレンス>クラス>FrameHandlerSink::>FrameHandlerSink::tCreateData Structurev 構造体を使って別のFrameHandlerSinkを初期化することが可能です。

戻り値

新しいFrameHandlerSinkへのポインタ。エラーが発生した際には0を返します。

サンプル

FrameHandlerSinkを作成する最も簡単な方法はシンクのMemBufferCollectionにあるMemBuffers の数を指定することです。

// 5バッファのMemBufferCollectionを含むシンクの作成
// バッファのフォーマットは自動的に選択
tFrameHandlerSinkPtr pSink = FrameHandlerSink::create( 5 );

// シンクをセット
m_Grabber.setSinkType( pSink );

FrameTypeInfoクラスライブラリリファレンス>クラス>FrameTypeInfoを指定することでMemBufferCollection 内のMemBuffers のフォーマットを選択することができます。 FrameTypeInfotColorformatEnumクラスライブラリリファレンス>エニュメレーション>tColorformatEnumをとるコンストラクタを持っているため、バッファフォーマットにはeRGB24, eRGB32を選択することができます。

// RGB24フォーマット3バッファのMemBufferCollectionを含むシンクの作成
tFrameHandlerSinkPtr pSink = FrameHandlerSink::create( eRGB24, 3 );

// シンクをセット
m_Grabber.setSinkType( pSink );

フレームフィルタを使用してコピー処理のカスタマイズをすることが可能です。FilterLoaderクラスライブラリリファレンス>クラス>FilterLoaderstdfilters.ftfからフレームフィルタをロードします。

// stdfilters.ftfからRotate/Flip(回転/反転)フィルタをロード
m_pRotFlipFilter = FilterLoader::createFilter( "Rotate Flip" );
// vertical flip(垂直反転)を有効にする
m_pRotFlipFilter->setParameter( "flipv", true );

// RGB24の5バッファMemBufferCollectionに画像データをコピーするフレームフィルタを使ってシンクを作成
//
// 注: m_pRotFlipFilter.get() はsmart_comからプレーンポインタを取得するのに使われます。
//  smart_com はシンクが使用している間は消去しないでください。
tFrameHandlerSinkPtr pSink = FrameHandlerSink::create( m_pRotFlipFilter.get(), eRGB24, 5 );

// シンクをセット
m_Grabber.setSinkType( pSink );

フィルタチェーンを作成するために複数のフィルタをロードしてtFrameFilterListクラスライブラリリファレンス>型定義>tFrameFilterListに挿入します。フレームフィルタの一覧をFrameHandlerSinkに渡すとフィルタの変換関数が呼び出され、画像データを変換しMemBufferCollectionにコピーします。

// stdfilters.ftfからRotate/Flip(回転/反転)フィルタをロード
m_pRotFlipFilter = FilterLoader::createFilter( "Rotate Flip" );
// horizontal flip(水平反転)を有効にする
m_pRotFlipFilter->setParameter( "fliph", true );

// stdfilters.ftfからROI(関心領域)フィルタをロード
m_pROIFilter = FilterLoader::createFilter( "ROI" );
// ROIのセット
m_pROIFilter->setParameter( "X", 10 );
m_pROIFilter->setParameter( "Y", 10 );
m_pROIFilter->setParameter( "Width", 100 );
m_pROIFilter->setParameter( "Height", 100 );

// 2つのフィルタをtFrameFilterListに入れることでフィルタチェーンを作成
//
// 注: .get() はsmart_comからプレーンポインタを取得するのに使われます。
// smart_com はシンクが使用している間は消去しないでください。
tFrameFilterList filterChain;
filterChain.push_back( m_pRotFlipFilter.get() );
filterChain.push_back( m_pROIFilter.get() );

// Y800の3バッファMemBufferCollectionに画像データをコピーするフレームフィルタを使ってシンクを作成 tFrameHandlerSinkPtr pSink = FrameHandlerSink::create( filterChain, eY800, 3 );

// シンクをセット
m_Grabber.setSinkType( pSink );