1

Balckagic SDK の使用を開始しようとしています。そして、デバイス「DeckLink SDI」のフレームを取得するのに苦労しました

void    get_video(IDeckLink* decklink){
HRESULT                         result;
IDeckLinkInput*                 decklinkinput = NULL;
BSTR                            name = NULL;
IDeckLinkDisplayModeIterator*   displayModeIterator = NULL;
IDeckLinkInputCallback*         theCallback = NULL; 
IDeckLinkVideoInputFrame*       decklinkInputVideoframe =NULL;
IDeckLinkDisplayMode*           displayMode = NULL;
IDeckLinkVideoInputFrame*       inputVideoFrame;
IDeckLinkAudioInputPacket*      inputAudioPacket;
IBMDStreamingDeviceInput*       capture;
IDeckLinkVideoFrame*            deckLinkVideoFrame = NULL;
unsigned long                       avaibleFrames = NULL;


result = decklink->QueryInterface(IID_IDeckLinkInput,(void**) &decklinkinput);


result = decklinkinput->GetDisplayModeIterator(&displayModeIterator); 

result = decklinkinput->SetCallback(theCallback);
result = decklinkinput->EnableVideoInput(BMDDisplayMode::bmdModeHD1080i50,BMDPixelFormat::bmdFormat8BitYUV,bmdVideoInputEnableFormatDetection);
result = decklinkinput->DisableAudioInput();

result = decklinkinput->StartStreams();
decklinkinput->GetAvailableVideoFrameCount(&avaibleFrames); 




cout<<"Number of avaible frames " << avaibleFrames<<endl;
result = decklinkinput->SetCallback(theCallback);
theCallback->VideoInputFrameArrived(inputVideoFrame, inputAudioPacket);
result = decklinkinput->StopStreams();


}

構文エラーはありません。フレームの数は0です。フレームを保存する方法がわかりません。助けてくれてありがとう。

4

1 に答える 1

1

コード例を見てください。プロセス:

  1. Decklinkボードの初期化
  2. コールバックを登録してストリーミングを開始する
  3. メインスレッドで他の作業を続ける

これで、フレームが利用可能になるたびに、Decklink SDK は登録されたコールバック関数を処理したばかりのフレームで呼び出します。上記の投稿から、コールバックの概念を理解していないように感じます。

于 2013-01-18T19:50:13.217 に答える