2012-11-20 59 views
0

我試圖開始使用Balckagic SDK。我已經atrouble得到框架機器「的DeckLink SDI」從Blackmagic設備獲取幀

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(); 


} 

,我沒有語法錯誤的一切,我得到的是FRAM的數量爲0,我不知道如何保存幀。我很感謝任何幫助。

回答

1

看看代碼示例。過程:

  1. 初始化DECKLINK板
  2. 註冊回調,並開始流
  3. 與其他工作,每次一幀是可用的DeckLink SDK將繼續在主線程

現在上使用剛剛處理的幀調用已註冊的回調函數。從上面的帖子中我可以感覺到你沒有把握回調的概念。