从Blackmagic设备获取帧

时间:2012-11-20 14:30:31

标签: c++ visual-studio-2010

我正在尝试使用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();


}

我没有语法错误我得到的是fram的数量是0.我不知道如何保存帧。我很感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

看看代码示例。过程:

  1. 初始化Decklink板
  2. 注册回调并开始流式传输
  3. 继续主线程上的其他工作
  4. 现在,每当一个帧可用时,Decklink SDK将使用刚刚处理的帧调用已注册的回调函数。从上面的帖子中我感觉你没有掌握回调的概念。