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 回答