#include "GDeviceReader.h" GDeviceReader::GDeviceReader() { m_bInit = false; // 视频采集相关参数 { m_eDeviceType = eGDT_SDI; m_strDeviceName = "DeckLink SDI"; m_nChannel = 0; memset(&m_varFrameFormat, 0, sizeof(GFrameFormat) ); m_pCallBack = nullptr; m_pOwner = nullptr; m_pCaptureCard = nullptr; } } GDeviceReader::~GDeviceReader() { Stop(); } void GDeviceReader::Init(eGDeviceType eDeviceType, const QString& strDeviceName, int nChannel, GFrameFormat varFrameFormat, pCallBack_CaptureData pCallBack, void* pOwner) { // m_eDeviceType = eDeviceType; m_strDeviceName = strDeviceName; m_nChannel = nChannel; m_varFrameFormat = varFrameFormat; m_pCallBack = pCallBack; m_pOwner = pOwner; // m_bInit = true; } bool GDeviceReader::Start() { Stop(); // CameraLink if(eGDT_CameraLink == m_eDeviceType) { return true; } // SDI if(eGDT_SDI == m_eDeviceType) { CDeckLinkManager::SearchDeckLinkCard(); CDeckLinkManager* pDeckLinkManager = new CDeckLinkManager(); m_pCaptureCard = pDeckLinkManager; /* QString strInputCardName = QString("%1 %2") .arg(m_strDeviceName) .arg(m_nChannel); */ QString strInputCardName = m_strDeviceName; if(!pDeckLinkManager->InitVideoInput(strInputCardName.toStdString().c_str(), m_nChannel, HD_FRAME_WIDTH, HD_FRAME_HEIGHT, bmdModeHD1080p25, m_pCallBack, m_pOwner) ) { return false; } if(!pDeckLinkManager->StartStreams() ) { return false; } return true; } return false; } void GDeviceReader::Stop() { if(!m_bInit) { return; } // CameraLink if(eGDT_CameraLink == m_eDeviceType) { } // SDI if(eGDT_SDI == m_eDeviceType) { CDeckLinkManager* pDeckLinkManager = reinterpret_cast(m_pCaptureCard); if(nullptr != pDeckLinkManager) { delete pDeckLinkManager; pDeckLinkManager = nullptr; m_pCaptureCard = nullptr; } } }