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