Files
CodeRepository/Apps/App_GeneralDataInjectionApp/Common/IO/DeviceStream/GDeviceWriter.cpp
chenzhen 222dda1e43 1,新增“App_ThermalImageSystem”;
2,新增“Apps”;
3,新增“Common”;
4,新增“FileList”;
5,新增“MediaX”;
6,新增“OpenSource”;
7,新增“Samples”;
8,新增“SoftwareBusinessLines”.
2026-02-14 23:03:23 +08:00

133 lines
2.5 KiB
C++

#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<CDeckLinkManager*>(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<CDeckLinkManager*>(m_pOutputCard);
if(nullptr != pDeckLinkManager)
{
bool bRs = pDeckLinkManager->OutputData(pFrameData);
return bRs;
}
}
return false;
}