extra_lib/include/DTAPI.h (4,698 lines of code) (raw):
//*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#* DTAPI.h *#*#*#*#*#*#*#*#*#* (C) 2000-2015 DekTec
//
// DTAPI - C++ API for DekTec PCI/PCI-Express cards, USB-2 adapters and network devices
//
#ifndef __DTAPI_H
#define __DTAPI_H
// DTAPI version
#define DTAPI_VERSION_MAJOR 5
#define DTAPI_VERSION_MINOR 14
#define DTAPI_VERSION_BUGFIX 0
#define DTAPI_VERSION_BUILD 56
//-.-.-.-.-.-.-.-.-.-.-.-.- Additional Libraries to be Linked In -.-.-.-.-.-.-.-.-.-.-.-.-
#ifdef _WIN32
#ifndef _LIB // Do not link libraries into DTAPI itself
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "setupapi.lib")
#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "wbemuuid.lib")
#endif
#ifndef _DTAPI_DISABLE_AUTO_LINK
// Are we using multi-threaded-DLL or static runtime libraries?
#ifdef _DLL
// Link with DLL runtime version (/MD)
#ifdef _DEBUG
#ifdef _WIN64
#pragma comment(lib, "DTAPI64MDd.lib") // Debug 64bit
#pragma message("Automatically linking with DTAPI64MDd.lib")
#else
#pragma comment(lib, "DTAPIMDd.lib") // Debug 32bit
#pragma message("Automatically linking with DTAPIMDd.lib")
#endif
#else
#ifdef _WIN64
#pragma comment(lib, "DTAPI64MD.lib") // Release 64bit
#pragma message("Automatically linking with DTAPI64MD.lib")
#else
#pragma comment(lib, "DTAPIMD.lib") // Release 32bit
#pragma message("Automatically linking with DTAPIMD.lib")
#endif
#endif
#else
// Link to static runtime version (/MT)
#ifdef _DEBUG
#ifdef _WIN64
#pragma comment(lib, "DTAPI64MTd.lib") // Debug 64bit
#pragma message("Automatically linking with DTAPI64MTd.lib")
#else
#pragma comment(lib, "DTAPIMTd.lib") // Debug 32bit
#pragma message("Automatically linking with DTAPIMTd.lib")
#endif
#else
#ifdef _WIN64
#pragma comment(lib, "DTAPI64MT.lib") // Release 64bit
#pragma message("Automatically linking with DTAPI64MT.lib")
#else
#pragma comment(lib, "DTAPIMT.lib") // Release 32bit
#pragma message("Automatically linking with DTAPIMT.lib")
#endif
#endif
#endif
#endif
#endif // #ifdef _WIN32
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- Includes -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
#ifndef _WIN32
// Linux specific includes: For NULL type definition
#include </usr/include/linux/stddef.h>
// For intptr_t
#include <stdint.h>
#endif
// STL includes
#include <list>
#include <map>
#include <string>
#include <vector>
#include <limits>
// When creating a DLL under Windows, disable warnings related to exporting STL
// instantiations in classes.
// See also: http://support.microsoft.com/kb/q168958/
#ifdef _MSC_VER
#pragma warning(disable: 4251)
#endif
// Macro used to mark functions as deprecated. Using deprecated functions will generate
// a compiler warning, pushing API users to stop using these functions.
#ifdef __GNUC__
#define DTAPI_DEPRECATED(func, msg) func __attribute__ ((deprecated))
#elif defined(_MSC_VER)
#define DTAPI_DEPRECATED(func, msg) __declspec(deprecated(msg)) func
#else
#define DTAPI_DEPRECATED(func, msg) func
#endif
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- Support Types -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
#ifdef _WIN32
typedef unsigned __int64 __uint64;
#else
typedef signed long long __int64;
typedef unsigned long long __uint64;
#endif
// All DTAPI code lives in namespace Dtapi
namespace Dtapi
{
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- Forward declarations -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
class AdvDemod;
class DtaPlusDevice;
class DtDemodPars;
class DtDvbT2Pars;
class DteDevice;
class DtSdiUtility;
class FrameBufImpl;
class IDevice;
class IDtDemodEvent;
class InpChannel;
class IXpMutex;
class MplpHelper;
class OutpChannel;
class SdiMatrixImpl;
struct DtDabEnsembleInfo;
struct DtDabEtiStreamSelPars;
struct DtDabStreamSelPars;
struct DtDabTransmitterIdInfo;
struct DtDemodParsAtsc;
struct DtDemodParsDab;
struct DtDemodParsDvbC2;
struct DtDemodParsDvbS;
struct DtDemodParsDvbS2;
struct DtDemodParsDvbT;
struct DtDemodParsDvbT2;
struct DtDemodParsIq;
struct DtDemodParsIq2131;
struct DtDemodParsIsdbt;
struct DtDemodParsQam;
struct DtDemodLdpcStats;
struct DtDemodMaLayerData;
struct DtDemodMaLayerStats;
struct DtDemodPlpBlocks;
struct DtDvbC2DemodL1Part2Data;
struct DtDvbC2DemodL1PlpSigData;
struct DtDvbC2ModStatus;
struct DtDvbC2Pars;
struct DtDvbC2PlpPars;
struct DtDvbC2StreamSelPars;
struct DtDvbC2XFecFrameHeader;
struct DtDvbCidPars;
struct DtDvbS2ModStatus;
struct DtDvbS2ModCod;
struct DtDvbS2Pars;
struct DtDemodParsDvbS2Adv;
struct DtDvbTStreamSelPars;
struct DtDvbTTpsInfo;
struct DtDvbT2DemodL1Data;
struct DtDvbT2ModStatus;
struct DtDvbT2StreamSelPars;
struct DtFractionInt;
struct DtIsdbtStreamSelPars;
struct DtIsdbTmmPars;
struct DtPar;
struct DtPlpInpPars;
struct DtStatistic;
struct DtT2MiStreamSelPars;
struct DtVirtualOutData;
struct DtRsDecStats;
struct DtVitDecStats;
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//=+=+=+=+=+=+=+=+=+=+=+=+ DTAPI HELPER CLASSES AND HELPER TYPES +=+=+=+=+=+=+=+=+=+=+=+=+
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DTAPI_RESULT -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
// Type returned by most API calls
typedef unsigned int DTAPI_RESULT;
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtExc -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Exception object thrown from API calls (if API call throws an exception)
//
class DtExc
{
public:
const DTAPI_RESULT m_Error; // DTAPI result code (i.e. reason of exception)
public:
DtExc(DTAPI_RESULT e) : m_Error(e) {}
virtual ~DtExc() {}
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtBufferInfo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
struct DtBufferInfo
{
int m_VidStd; // Video standard
int m_NumColumns; // Number of columns
__int64 m_NumReceived; // Number of frames received
__int64 m_NumDropped; // Number of frames dropped
__int64 m_NumTransmitted; // Number of frames transmitted
__int64 m_NumDuplicated; // Number of frames duplicated
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtCaps - Capabilities -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Scalable type for storing (combinations of) capability flags.
// It can be used with bitwise operators for testing and setting of capabilities.
//
class DtCaps
{
// Number of 64-bit integers used to represent a capability
static const int DTCAPS_SIZE = 3;
public:
DtCaps();
DtCaps(int BitNr);
DtCaps(__int64 F1, __int64 F2, __int64 F3);
public:
int GetCapIndex() const;
std::string ToString() const;
DtCaps operator & (const DtCaps& Caps) const;
DtCaps& operator &= (const DtCaps& Caps);
DtCaps operator | (const DtCaps& Caps) const;
DtCaps& operator |= (const DtCaps& Caps);
bool operator == (const DtCaps& Caps) const;
bool operator == (const int Zero) const;
bool operator != (const DtCaps& Caps) const;
bool operator != (const int Zero) const;
__int64 operator [] (const int n) const;
DtCaps operator ~ () const;
// Implementation data
private:
__int64 m_Flags[DTCAPS_SIZE];
};
// Capabilities
#define DTAPI_CAP_EMPTY Dtapi::DtCaps() // DtCaps without any capability flags
// Capability group APPS - Applications
#define DTAPI_CAP_C2X Dtapi::DtCaps(0) // C2Xpert
#define DTAPI_CAP_DP Dtapi::DtCaps(1) // DtGrabber+ and DtTV
#define DTAPI_CAP_DTTV Dtapi::DtCaps(2) // DtTV
#define DTAPI_CAP_E Dtapi::DtCaps(3) // DtEncode
#define DTAPI_CAP_J Dtapi::DtCaps(4) // DtJitter
#define DTAPI_CAP_MR Dtapi::DtCaps(5) // MuxXpert runtime
#define DTAPI_CAP_MS Dtapi::DtCaps(6) // MuxXpert SDK
#define DTAPI_CAP_MX Dtapi::DtCaps(7) // MuxXpert
#define DTAPI_CAP_RC Dtapi::DtCaps(8) // StreamXpress remote control
#define DTAPI_CAP_RX Dtapi::DtCaps(9) // RFXpert
#define DTAPI_CAP_SP Dtapi::DtCaps(10) // StreamXpress stream player
#define DTAPI_CAP_SPNIC Dtapi::DtCaps(11) // StreamXpress through local NIC
#define DTAPI_CAP_SX Dtapi::DtCaps(12) // StreamXpert analyzer
#define DTAPI_CAP_SXDGL Dtapi::DtCaps(13) // StreamXpert analyzer (dongled)
#define DTAPI_CAP_SY Dtapi::DtCaps(14) // SdEye
#define DTAPI_CAP_XP Dtapi::DtCaps(15) // Xpect
#define DTAPI_CAP_T2X Dtapi::DtCaps(16) // T2Xpert
// Capability group BOOLIO - Boolean I/O capabilities
#define DTAPI_CAP_BW Dtapi::DtCaps(17) // Isochronous bandwidth allocated
#define DTAPI_CAP_FAILSAFE Dtapi::DtCaps(18) // A fail-over relay is available
#define DTAPI_CAP_FRACMODE Dtapi::DtCaps(19) // Fractional mode is supported
#define DTAPI_CAP_GENLOCKED Dtapi::DtCaps(20) // Locked to a genlock reference
#define DTAPI_CAP_GENREF Dtapi::DtCaps(21) // Genlock reference input
#define DTAPI_CAP_SWS2APSK Dtapi::DtCaps(22) // DVB-S2 APSK mode
// Capability group DEMODPROPS - Demodulation properties
#define DTAPI_CAP_ANTPWR Dtapi::DtCaps(23) // Antenna power
#define DTAPI_CAP_LNB Dtapi::DtCaps(24) // LNB
#define DTAPI_CAP_RX_ADV Dtapi::DtCaps(25) // Advanced demodulation
// Capability group FREQBAND - Frequency band
#define DTAPI_CAP_LBAND Dtapi::DtCaps(26) // L-band 950-2150MHz
#define DTAPI_CAP_VHF Dtapi::DtCaps(27) // VHF-band 47-470MHz
#define DTAPI_CAP_UHF Dtapi::DtCaps(28) // UHF-band 400-862MHz
// Capability group IODIR - I/O direction
#define DTAPI_CAP_DISABLED Dtapi::DtCaps(29) // Port is disabled
#define DTAPI_CAP_INPUT Dtapi::DtCaps(30) // Uni-directional input
#define DTAPI_CAP_OUTPUT Dtapi::DtCaps(31) // Uni-directional output
// Subcapabilities of IODIR, DTAPI_CAP_INPUT
#define DTAPI_CAP_SHAREDANT Dtapi::DtCaps(32) // Get antenna signal from another port
// Subcapabilities of IODIR, DTAPI_CAP_OUTPUT
#define DTAPI_CAP_DBLBUF Dtapi::DtCaps(33) // Double buffered output
#define DTAPI_CAP_LOOPS2L3 Dtapi::DtCaps(34) // Loop-through of DVB-S2 in L3-frames
#define DTAPI_CAP_LOOPS2TS Dtapi::DtCaps(35) // Loop-through of an DVB-S(2) input
#define DTAPI_CAP_LOOPTHR Dtapi::DtCaps(36) // Loop-through of another input
// Capability group IOPROPS - Miscellaneous I/O properties
#define DTAPI_CAP_ASIPOL Dtapi::DtCaps(37) // ASI output signal can be inverted
#define DTAPI_CAP_HUFFMAN Dtapi::DtCaps(38) // Huffman coding for SDI
#define DTAPI_CAP_IPPAIR Dtapi::DtCaps(39) // Network port supports failover
#define DTAPI_CAP_L3MODE Dtapi::DtCaps(40) // L3-frame mode
#define DTAPI_CAP_MATRIX Dtapi::DtCaps(41) // Matrix API support
#define DTAPI_CAP_MATRIX2 Dtapi::DtCaps(42) // High-level Matrix API support
#define DTAPI_CAP_RAWASI Dtapi::DtCaps(43) // Raw ASI
#define DTAPI_CAP_SDI10BNBO Dtapi::DtCaps(44) // 10-bit network byte order
#define DTAPI_CAP_SDITIME Dtapi::DtCaps(45) // SDI timestamping
#define DTAPI_CAP_TIMESTAMP64 Dtapi::DtCaps(46) // 64-bit timestamping
#define DTAPI_CAP_TRPMODE Dtapi::DtCaps(47) // Transparent mode
#define DTAPI_CAP_TS Dtapi::DtCaps(48) // MPEG-2 transport stream
#define DTAPI_CAP_TXONTIME Dtapi::DtCaps(49) // Transmit on timestamp
#define DTAPI_CAP_VIRTUAL Dtapi::DtCaps(50) // Virtual port, no physical connection
// Capability group IOSTD - I/O standard
#define DTAPI_CAP_3GSDI Dtapi::DtCaps(51) // 3G-SDI
#define DTAPI_CAP_ASI Dtapi::DtCaps(52) // DVB-ASI transport stream
#define DTAPI_CAP_DEMOD Dtapi::DtCaps(53) // Demodulation
#define DTAPI_CAP_GPSTIME Dtapi::DtCaps(54) // Supports GPS-time
#define DTAPI_CAP_HDSDI Dtapi::DtCaps(55) // HD-SDI
#define DTAPI_CAP_IFADC Dtapi::DtCaps(56) // IF A/D converter
#define DTAPI_CAP_IP Dtapi::DtCaps(57) // Transport stream over IP
#define DTAPI_CAP_MOD Dtapi::DtCaps(58) // Modulator output
#define DTAPI_CAP_PHASENOISE Dtapi::DtCaps(59) // Phase noise injector
#define DTAPI_CAP_RS422 Dtapi::DtCaps(60) // RS422 port
#define DTAPI_CAP_SDI Dtapi::DtCaps(61) // SD-SDI
#define DTAPI_CAP_SPI Dtapi::DtCaps(62) // DVB-SPI transport stream
#define DTAPI_CAP_SPISDI Dtapi::DtCaps(63) // SD-SDI on a parallel port
// Subcapabilities of IOSTD, DTAPI_CAP_3GSDI
#define DTAPI_CAP_1080P50 Dtapi::DtCaps(64) // 1080p/50 lvl A
#define DTAPI_CAP_1080P50B Dtapi::DtCaps(65) // 1080p/50 lvl B
#define DTAPI_CAP_1080P59_94 Dtapi::DtCaps(66) // 1080p/59.94 lvl A
#define DTAPI_CAP_1080P59_94B Dtapi::DtCaps(67) // 1080p/59.94 lvl B
#define DTAPI_CAP_1080P60 Dtapi::DtCaps(68) // 1080p/60 lvl A
#define DTAPI_CAP_1080P60B Dtapi::DtCaps(69) // 1080p/60 lvl B
// Subcapabilities of IOSTD, DTAPI_CAP_HDSDI
#define DTAPI_CAP_1080I50 Dtapi::DtCaps(70) // 1080i/50
#define DTAPI_CAP_1080I59_94 Dtapi::DtCaps(71) // 1080i/59.94
#define DTAPI_CAP_1080I60 Dtapi::DtCaps(72) // 1080i/60
#define DTAPI_CAP_1080P23_98 Dtapi::DtCaps(73) // 1080p/23.98
#define DTAPI_CAP_1080P24 Dtapi::DtCaps(74) // 1080p/24
#define DTAPI_CAP_1080P25 Dtapi::DtCaps(75) // 1080p/25
#define DTAPI_CAP_1080P29_97 Dtapi::DtCaps(76) // 1080p/29.97
#define DTAPI_CAP_1080P30 Dtapi::DtCaps(77) // 1080p/30
#define DTAPI_CAP_1080PSF23_98 Dtapi::DtCaps(78) // 1080psf/23.98
#define DTAPI_CAP_1080PSF24 Dtapi::DtCaps(79) // 1080psf/24
#define DTAPI_CAP_1080PSF25 Dtapi::DtCaps(80) // 1080psf/25
#define DTAPI_CAP_1080PSF29_97 Dtapi::DtCaps(81) // 1080psf/29.97
#define DTAPI_CAP_1080PSF30 Dtapi::DtCaps(82) // 1080psf/30
#define DTAPI_CAP_720P23_98 Dtapi::DtCaps(83) // 720p/23.98
#define DTAPI_CAP_720P24 Dtapi::DtCaps(84) // 720p/24
#define DTAPI_CAP_720P25 Dtapi::DtCaps(85) // 720p/25
#define DTAPI_CAP_720P29_97 Dtapi::DtCaps(86) // 720p/29.97
#define DTAPI_CAP_720P30 Dtapi::DtCaps(87) // 720p/30
#define DTAPI_CAP_720P50 Dtapi::DtCaps(88) // 720p/50
#define DTAPI_CAP_720P59_94 Dtapi::DtCaps(89) // 720p/59.94
#define DTAPI_CAP_720P60 Dtapi::DtCaps(90) // 720p/60
// Subcapabilities of IOSTD, DTAPI_CAP_SDI
#define DTAPI_CAP_525I59_94 Dtapi::DtCaps(91) // 525i/59.94
#define DTAPI_CAP_625I50 Dtapi::DtCaps(92) // 625i/50
// Subcapabilities of IOSTD, DTAPI_CAP_SPISDI
#define DTAPI_CAP_SPI525I59_94 Dtapi::DtCaps(93) // SPI 525i/59.94
#define DTAPI_CAP_SPI625I50 Dtapi::DtCaps(94) // SPI 625i/50
// Capability group MODSTD - Modulation standards
#define DTAPI_CAP_TX_ATSC Dtapi::DtCaps(95) // ATSC 8-VSB modulation
#define DTAPI_CAP_TX_CMMB Dtapi::DtCaps(96) // CMMB modulation
#define DTAPI_CAP_TX_DAB Dtapi::DtCaps(97) // DAB modulation
#define DTAPI_CAP_TX_DTMB Dtapi::DtCaps(98) // DTMB modulation
#define DTAPI_CAP_TX_DVBC2 Dtapi::DtCaps(99) // DVB-C2 modulation
#define DTAPI_CAP_TX_DVBS Dtapi::DtCaps(100) // DVB-S modulation
#define DTAPI_CAP_TX_DVBS2 Dtapi::DtCaps(101) // DVB-S2 modulation
#define DTAPI_CAP_TX_DVBS2X Dtapi::DtCaps(102) // DVB-S2X modulation
#define DTAPI_CAP_TX_DVBT Dtapi::DtCaps(103) // DVB-T modulation
#define DTAPI_CAP_TX_DVBT2 Dtapi::DtCaps(104) // DVB-T2 modulation
#define DTAPI_CAP_TX_GOLD Dtapi::DtCaps(105) // GOLD for modulators
#define DTAPI_CAP_TX_IQ Dtapi::DtCaps(106) // I/Q sample modulation
#define DTAPI_CAP_TX_ISDBS Dtapi::DtCaps(107) // ISDB-S modulation
#define DTAPI_CAP_TX_ISDBT Dtapi::DtCaps(108) // ISDB-T modulation
#define DTAPI_CAP_TX_ISDBTMM Dtapi::DtCaps(109) // ISDB-Tmm modulation
#define DTAPI_CAP_TX_MH Dtapi::DtCaps(110) // ATSC-MH modulation
#define DTAPI_CAP_TX_QAMA Dtapi::DtCaps(111) // QAM-A modulation
#define DTAPI_CAP_TX_QAMB Dtapi::DtCaps(112) // QAM-B modulation
#define DTAPI_CAP_TX_QAMC Dtapi::DtCaps(113) // QAM-C modulation
#define DTAPI_CAP_TX_SWMC Dtapi::DtCaps(114) // SW multi-channel modulation
#define DTAPI_CAP_TX_T2MI Dtapi::DtCaps(115) // T2MI transmission
#define DTAPI_CAP_TX_T2SPLP Dtapi::DtCaps(116) // DVB-T2 single PLP modulation
// Capability group MODPROPS - Modulation properties
#define DTAPI_CAP_ADJLVL Dtapi::DtCaps(117) // Adjustable output level
#define DTAPI_CAP_CM Dtapi::DtCaps(118) // Channel simulation
#define DTAPI_CAP_CW Dtapi::DtCaps(119) // Continuous wave
#define DTAPI_CAP_DIGIQ Dtapi::DtCaps(120) // Digital I/Q sample output
#define DTAPI_CAP_DVBCID Dtapi::DtCaps(121) // DVB carrier ID
#define DTAPI_CAP_IF Dtapi::DtCaps(122) // IF output
#define DTAPI_CAP_MUTE Dtapi::DtCaps(123) // Mute RF output signal
#define DTAPI_CAP_ROLLOFF Dtapi::DtCaps(124) // Adjustable roll-off factor
#define DTAPI_CAP_S2APSK Dtapi::DtCaps(125) // DVB-S2 16-APSK/32-APSK
#define DTAPI_CAP_SNR Dtapi::DtCaps(126) // AWGN insertion
#define DTAPI_CAP_TX_16MHZ Dtapi::DtCaps(127) // 16MHz bandwidth mode
#define DTAPI_CAP_TX_SFN Dtapi::DtCaps(128) // SNF operation
// Capability group RFCLKSEL - RF clock source selection
#define DTAPI_CAP_RFCLKEXT Dtapi::DtCaps(129) // External RF clock input
#define DTAPI_CAP_RFCLKINT Dtapi::DtCaps(130) // Internal RF clock reference
// Capability group RXSTD - Receiver standards
#define DTAPI_CAP_RX_ATSC Dtapi::DtCaps(131) // ATSC 8-VSB reception
#define DTAPI_CAP_RX_CMMB Dtapi::DtCaps(132) // CMMB reception
#define DTAPI_CAP_RX_DAB Dtapi::DtCaps(133) // DAB reception
#define DTAPI_CAP_RX_DTMB Dtapi::DtCaps(134) // DTMB reception
#define DTAPI_CAP_RX_DVBC2 Dtapi::DtCaps(135) // DVB-C2 reception
#define DTAPI_CAP_RX_DVBS Dtapi::DtCaps(136) // DVB-S reception
#define DTAPI_CAP_RX_DVBS2 Dtapi::DtCaps(137) // DVB-S2 reception
#define DTAPI_CAP_RX_DVBT Dtapi::DtCaps(138) // DVB-T reception
#define DTAPI_CAP_RX_DVBT2 Dtapi::DtCaps(139) // DVB-T2 reception
#define DTAPI_CAP_RX_GOLD Dtapi::DtCaps(140) // GOLD for receivers
#define DTAPI_CAP_RX_IQ Dtapi::DtCaps(141) // I/Q sample reception
#define DTAPI_CAP_RX_ISDBS Dtapi::DtCaps(142) // ISDB-S reception
#define DTAPI_CAP_RX_ISDBT Dtapi::DtCaps(143) // ISDB-T reception
#define DTAPI_CAP_RX_MH Dtapi::DtCaps(144) // ATSC-MH reception
#define DTAPI_CAP_RX_QAMA Dtapi::DtCaps(145) // QAM-A reception
#define DTAPI_CAP_RX_QAMB Dtapi::DtCaps(146) // QAM-B reception
#define DTAPI_CAP_RX_QAMC Dtapi::DtCaps(147) // QAM-C reception
#define DTAPI_CAP_RX_T2MI Dtapi::DtCaps(148) // T2MI reception
// Capability group SPICLKSEL - Parallel port clock source selection
#define DTAPI_CAP_SPICLKEXT Dtapi::DtCaps(149) // External clock input
#define DTAPI_CAP_SPICLKINT Dtapi::DtCaps(150) // Internal clock reference
// Capability group SPIMODE - Parallel port mode
#define DTAPI_CAP_SPIFIXEDCLK Dtapi::DtCaps(151) // SPI fixed clock with valid signal
#define DTAPI_CAP_SPIDVBMODE Dtapi::DtCaps(152) // SPI DVB mode
#define DTAPI_CAP_SPISER8B Dtapi::DtCaps(153) // SPI serial 8-bit mode
#define DTAPI_CAP_SPISER10B Dtapi::DtCaps(154) // SPI serial 10-bit mode
// Capability group SPISTD - Parallel port I/O standard
#define DTAPI_CAP_SPILVDS1 Dtapi::DtCaps(155) // LVDS1
#define DTAPI_CAP_SPILVDS2 Dtapi::DtCaps(156) // LVDS2
#define DTAPI_CAP_SPILVTTL Dtapi::DtCaps(157) // LVTTL
// Capability group TSRATESEL - Transport-stream rate selection
#define DTAPI_CAP_EXTTSRATE Dtapi::DtCaps(158) // External TS rate clock input
#define DTAPI_CAP_EXTRATIO Dtapi::DtCaps(159) // External TS rate clock with ratio
#define DTAPI_CAP_INTTSRATE Dtapi::DtCaps(160) // Internal TS rate clock reference
#define DTAPI_CAP_LOCK2INP Dtapi::DtCaps(161) // Lock TS rate to input port
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtCmmbPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// CMMB Modulation Parameters
//
struct DtCmmbPars
{
int m_Bandwidth; // CMMB Bandwitdh
int m_TsRate; // CMMB TS rate in bps
int m_TsPid; // PID on which the CMMB stream is found
int m_AreaId; // Area ID (0..127)
int m_TxId; // Transmitter ID (128..255)
public:
DtCmmbPars();
DTAPI_RESULT RetrieveTsRateFromTs(char* pBuffer, int NumBytes);
bool operator == (DtCmmbPars& Rhs);
bool operator != (DtCmmbPars& Rhs);
};
// DtOutpChannel::SetModControl - Bandwidth
#define DTAPI_CMMB_BW_2MHZ 0x00000000
#define DTAPI_CMMB_BW_8MHZ 0x00000001
//-.-.-.-.-.-.-.-.-.-.-.- DtCmPars - Channel Modelling Parameters -.-.-.-.-.-.-.-.-.-.-.-.
// Maximum number of fading paths
#define DTAPI_CM_MAX_PATHS 32
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtCmPath -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// This structure describes the fading parameters for a single path in a
// multi-path simulation.
//
struct DtCmPath
{
enum Type
{
CONSTANT_DELAY, // Constant delay/phase
CONSTANT_DOPPLER, // Constant frequency shift
RAYLEIGH_JAKES, // Rayleigh fading with Jakes power spectral density
// (mobile path model)
RAYLEIGH_GAUSSIAN // Rayleigh fading with Gaussian power spectral
// density (ionospheric path model)
};
Type m_Type; // Type of path fading
double m_Attenuation; // Attenuation in dB
double m_Delay; // Delay in us
double m_Phase; // Phase shift in degrees for CONSTANT_DELAY paths
double m_Doppler; // Doppler frequency in Hz
// Constructor - Gives parameters a default value
DtCmPath() :
m_Type(CONSTANT_DELAY),
m_Attenuation(0.0), m_Delay(0.0), m_Phase(0.0), m_Doppler(0.0)
{}
// Operators
bool operator == (DtCmPath& Rhs);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtCmPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// This structure describes channel-modeling parameters. It\92s used to simulate the
// transmission distortions that may occur in the channel between a transmitter and
// a receiver.
//
struct DtCmPars
{
bool m_EnableAwgn; // Enable white Gaussian noise (AWGN) injection
double m_Snr; // Signal-to-noise ratio in dB
bool m_EnablePaths; // Enable multi-path simulation
std::vector<DtCmPath> m_Paths; // Parameters per path
// Constructor and operators
DtCmPars();
bool operator == (DtCmPars&);
bool operator != (DtCmPars& Rhs) { return !(*this == Rhs); }
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtConstelPoint -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// This structure describes a constellation point in a receiver constellation diagram
//
struct DtConstelPoint
{
int m_X, m_Y; // X and Y coordinates
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- IDtDemodEvent -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Callback event interface for demodulators
//
class IDtDemodEvent
{
public:
virtual void TuningFreqHasChanged(__int64 OldFreqHz, __int64 NewFreqHz) {}
virtual void TuningParsHaveChanged(
__int64 OldFreqHz, int OldModType, int OldParXtra[3],
__int64 NewFreqHz, int NewModType, int NewParXtra[3]) {}
};
// Maximum number of IpV6 addresses per interface
#define MAX_IPV6_ADDR 3
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDeviceDesc -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// This structure describes a DekTec device
//
struct DtDeviceDesc
{
int m_Category; // Device category (DTAPI_CAT_XXX)
__int64 m_Serial; // Unique serial number of the device
int m_PciBusNumber; // PCI-bus number
int m_SlotNumber; // PCI-slot number
int m_UsbAddress; // USB address
int m_TypeNumber; // Device type number
int m_SubType; // Device subtype (0=none, 1=A, ...)
int m_DeviceId; // Device ID
int m_VendorId; // Vendor ID
int m_SubsystemId; // Subsystem ID
int m_SubVendorId; // Subsystem Vendor ID
int m_NumHwFuncs; // Number of hardware funtions hosted by device
int m_HardwareRevision; // Hardware revision (e.g. 302 = 3.2)
int m_FirmwareVersion; // Firmware version
int m_FirmwareVariant; // Firmware variant
int m_NumDtInpChan; // Number of input channels (max)
int m_NumDtOutpChan; // Number of output channels (max)
int m_NumPorts; // Number of physical ports
unsigned char m_Ip[4]; // IP address (only valid for DTE-31xx devices)
unsigned char m_IpV6[MAX_IPV6_ADDR][16];
// IP address (only valid for DTE-31xx devices)
unsigned char m_MacAddr[6]; // MAC address (only valid for DTE-31xx devices)
int m_PcieNumLanes; // Number of allocated PCIe lanes
int m_PcieMaxLanes; // Maximum number of PCIe lanes
int m_PcieLinkSpeed; // Current PCIe link speed (GEN1, 2 or 3)
int m_PcieMaxSpeed; // Maximum PCIe link speed (GEN1, 2 or 3)
};
// Device categories
#define DTAPI_CAT_PCI 0 // PCI or PCI-Express device
#define DTAPI_CAT_USB 1 // USB-2 or USB-3 device
#define DTAPI_CAT_NW 2 // Network device
#define DTAPI_CAT_IP 3 // Network appliance: DTE-31xx
#define DTAPI_CAT_NIC 4 // Non-DekTec network card
#define DTAPI_CAT_NWAP 5 // Network Advanced Protocol(VLAN device)
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDtaPlusDeviceDesc -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// This structure describes a DekTec DTA-plus device
//
struct DtDtaPlusDeviceDesc
{
__int64 m_Serial; // Unique serial number of the device
std::string m_DevicePath; // Path of file to open to interface with the device
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- struct DtDvbCidPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Structure for specifying the DVB channel identification for satellite (DVB-S2)
// ETSI TS 103 129
//
struct DtDvbCidPars
{
bool m_Enable; // Enable DVB-CID signalling
unsigned int m_GuidHigh; // DVB-CID Global Unique Identifier MSBs
unsigned int m_GuidLow; // DVB-CID Global Unique Identifier LSBs
// CID content. Key: Content ID (0...31); Value: Content information (24-bit)
// Content ID 0 (carrier ID format) shall have the value 0x0001
std::map<int, int> m_Content;
DTAPI_RESULT CheckValidity();
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtEventArgs -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Details for a specific event
//
struct DtEventArgs
{
DtEventArgs() : m_Value1(0), m_Value2(0), m_pContext(0) {};
int m_HwCat; // Hardware category: DTAPI_CAT_XXX
__int64 m_Serial; // Serial number of device causing event
int m_Value1; // Event value #1
int m_Value2; // Event value #2
void* m_pContext; // Context-specific pointer
};
// Event call back function
typedef void (*pDtEventCallback)(int Event, const DtEventArgs* pArgs);
// Global events
#define DT_EVENT_TYPE_ADD 0x00000001
#define DT_EVENT_TYPE_REMOVE 0x00000002
// Device events
#define DT_EVENT_TYPE_POWER 0x00000004
#define DT_EVENT_TYPE_GENLOCK 0x00000008
#define DT_EVENT_TYPE_TEST 0x80000000
// Network events
#define DT_EVENT_IP_CHANGED 0x01000000
#define DT_EVENT_ADMINST_CHANGED 0x02000000
#define DT_EVENT_TYPE_ALL 0xFFFFFFFF
// Event values
#define DT_EVENT_VALUE1_POWER_UP 1
#define DT_EVENT_VALUE1_POWER_DOWN 2
#define DT_EVENT_VALUE1_NO_LOCK 1
#define DT_EVENT_VALUE1_LOCKED 2
#define DT_EVENT_VALUE2_XXX 1
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtFiltCoeff -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// A single FIR filter coefficient
//
struct DtFiltCoeff
{
int m_TapIdx; // Tap number
double m_Coeff; // FIR coefficient
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtFilterPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Filter coefficients for use in a FIR filter
//
struct DtFilterPars
{
std::vector<DtFiltCoeff> m_FiltCoeffs;
};
// Maximum number of filter coefficients
#define DTAPI_MAX_NUM_COEFFS 64
#define DTAPI_FRAME_STATUS_OK 0
#define DTAPI_FRAME_STATUS_ERR_NO_SIGNAL 1
#define DTAPI_FRAME_STATUS_ERR_STD_MISMATCH 2
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtFractionInt -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// A rational number, expressed as the quotient of two integers
//
struct DtFractionInt
{
int m_Num, m_Den;
DtFractionInt() { m_Num = 0; m_Den = 1; }
DtFractionInt(int Num, int Den) { m_Num = Num; m_Den = Den; }
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtFrameInfo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
struct DtFrameInfo
{
int m_VidStd; // Video standard
__int64 m_Timestamp; // 64-bit timestamp
__int64 m_FrameNumber; // 64-bit frame number
__int64 m_Rp188; // RP188 timestamp
int m_RxMode; // RX mode at the time this frame was received
int m_Status; // One of DTAPI_FRAME_STATUS_*
};
//-.-.-.-.-.-.-.-.-.-.- DtHwFuncDesc - Hardware Function Descriptor -.-.-.-.-.-.-.-.-.-.-.
//
// Structure describing a hardware function
//
struct DtHwFuncDesc
{
DtDeviceDesc m_DvcDesc; // Device descriptor
int m_ChanType; // Channel type (OR-able)
DtCaps m_Flags; // Capability flags (OR-able)
int m_IndexOnDvc; // Relative index of hardware function
int m_Port; // Physical port number
unsigned char m_Ip[4]; // IP V4 address (TS-over-IP functions only)
unsigned char m_IpV6[MAX_IPV6_ADDR][16];
// IP V6 address (TS-over-IP functions only)
unsigned char m_MacAddr[6]; // MAC address (TS-over-IP functions only)
};
// Hardware Function - Channel types
// For IP hardware functions, both DTAPI_CHAN_INPUT and DTAPI_CHAN_OUTPUT are set
#define DTAPI_CHAN_DISABLED 0 // Channel is disabled
#define DTAPI_CHAN_INPUT 1 // Input channel
#define DTAPI_CHAN_OUTPUT 2 // Output channel
#define DTAPI_CHAN_DBLBUF 4 // Double-buffered copy of an output
#define DTAPI_CHAN_LOOPTHR 8 // Loop-through copy of another port
//.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIoConfig - I/O Configuration -.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Stores the I/O configuration parameters for one I/O port configuration
//
struct DtIoConfig
{
int m_Port; // Port number
int m_Group; // Config group, linked to I/O capability groups
int m_Value; // Config value, linked to I/O capabilities
int m_SubValue; // Config sub value, linked to I/O sub capabilities
__int64 m_ParXtra[2]; // Extra parameters, e.g. source port number
// Constructor - Gives parameters a default value
DtIoConfig()
{
m_Port = -1;
m_Group = -1;
m_Value = m_SubValue = -1;
m_ParXtra[0] = m_ParXtra[1] = -1;
}
DtIoConfig(int Port, int Group)
{
m_Port = Port;
m_Group = Group;
m_Value = m_SubValue = -1;
m_ParXtra[0] = m_ParXtra[1] = -1;
}
};
// I/O configuration groups
#define DTAPI_IOCONFIG_IODIR 0 // I/O direction
#define DTAPI_IOCONFIG_IOSTD 1 // I/O standard
#define DTAPI_IOCONFIG_RFCLKSEL 2 // RF clock source selection
#define DTAPI_IOCONFIG_SPICLKSEL 3 // Parallel port clock source selection
#define DTAPI_IOCONFIG_SPIMODE 4 // Parallel port mode
#define DTAPI_IOCONFIG_SPISTD 5 // Parallel port I/O standard
#define DTAPI_IOCONFIG_TSRATESEL 6 // Transport-stream rate selection
// I/O configuration groups - Boolean I/O
#define DTAPI_IOCONFIG_BW 7 // Isochronous bandwidth allocated
#define DTAPI_IOCONFIG_FAILSAFE 8 // A fail-over relay is available
#define DTAPI_IOCONFIG_FRACMODE 9 // Fractional mode is supported
#define DTAPI_IOCONFIG_GENLOCKED 10 // Locked to a genlock reference
#define DTAPI_IOCONFIG_GENREF 11 // Genlock reference input
#define DTAPI_IOCONFIG_SWS2APSK 12 // DVB-S2 APSK mode
// Values for boolean I/O configuration options
#define DTAPI_IOCONFIG_TRUE 13 // Turn I/O capability on
#define DTAPI_IOCONFIG_FALSE 14 // Turn I/O capability off
// Values for group IO_CONFIG_IODIR (I/O direction)
#define DTAPI_IOCONFIG_DISABLED 15 // Port is disabled
#define DTAPI_IOCONFIG_INPUT 16 // Uni-directional input
#define DTAPI_IOCONFIG_OUTPUT 17 // Uni-directional output
// SubValues for group DTAPI_IOCONFIG_IODIR, value DTAPI_IOCONFIG_INPUT
#define DTAPI_IOCONFIG_SHAREDANT 18 // Get antenna signal from another port
// SubValues for group DTAPI_IOCONFIG_IODIR, value DTAPI_IOCONFIG_OUTPUT
#define DTAPI_IOCONFIG_DBLBUF 19 // Double buffered output
#define DTAPI_IOCONFIG_LOOPS2L3 20 // Loop-through of DVB-S2 in L3-frames
#define DTAPI_IOCONFIG_LOOPS2TS 21 // Loop-through of an DVB-S(2) input
#define DTAPI_IOCONFIG_LOOPTHR 22 // Loop-through of another input
// Values for group IO_CONFIG_IOSTD (I/O standard)
#define DTAPI_IOCONFIG_3GSDI 23 // 3G-SDI
#define DTAPI_IOCONFIG_ASI 24 // DVB-ASI transport stream
#define DTAPI_IOCONFIG_DEMOD 25 // Demodulation
#define DTAPI_IOCONFIG_GPSTIME 26 // Supports GPS-time
#define DTAPI_IOCONFIG_HDSDI 27 // HD-SDI
#define DTAPI_IOCONFIG_IFADC 28 // IF A/D converter
#define DTAPI_IOCONFIG_IP 29 // Transport stream over IP
#define DTAPI_IOCONFIG_MOD 30 // Modulator output
#define DTAPI_IOCONFIG_PHASENOISE 31 // Phase noise injector
#define DTAPI_IOCONFIG_RS422 32 // RS422 port
#define DTAPI_IOCONFIG_SDI 33 // SD-SDI
#define DTAPI_IOCONFIG_SPI 34 // DVB-SPI transport stream
#define DTAPI_IOCONFIG_SPISDI 35 // SD-SDI on a parallel port
// SubValues for group DTAPI_IOCONFIG_IOSTD, value DTAPI_IOCONFIG_3GSDI
#define DTAPI_IOCONFIG_1080P50 36 // 1080p/50 lvl A
#define DTAPI_IOCONFIG_1080P50B 37 // 1080p/50 lvl B
#define DTAPI_IOCONFIG_1080P59_94 38 // 1080p/59.94 lvl A
#define DTAPI_IOCONFIG_1080P59_94B 39 // 1080p/59.94 lvl B
#define DTAPI_IOCONFIG_1080P60 40 // 1080p/60 lvl A
#define DTAPI_IOCONFIG_1080P60B 41 // 1080p/60 lvl B
// SubValues for group DTAPI_IOCONFIG_IOSTD, value DTAPI_IOCONFIG_HDSDI
#define DTAPI_IOCONFIG_1080I50 42 // 1080i/50
#define DTAPI_IOCONFIG_1080I59_94 43 // 1080i/59.94
#define DTAPI_IOCONFIG_1080I60 44 // 1080i/60
#define DTAPI_IOCONFIG_1080P23_98 45 // 1080p/23.98
#define DTAPI_IOCONFIG_1080P24 46 // 1080p/24
#define DTAPI_IOCONFIG_1080P25 47 // 1080p/25
#define DTAPI_IOCONFIG_1080P29_97 48 // 1080p/29.97
#define DTAPI_IOCONFIG_1080P30 49 // 1080p/30
#define DTAPI_IOCONFIG_1080PSF23_98 50 // 1080psf/23.98
#define DTAPI_IOCONFIG_1080PSF24 51 // 1080psf/24
#define DTAPI_IOCONFIG_1080PSF25 52 // 1080psf/25
#define DTAPI_IOCONFIG_1080PSF29_97 53 // 1080psf/29.97
#define DTAPI_IOCONFIG_1080PSF30 54 // 1080psf/30
#define DTAPI_IOCONFIG_720P23_98 55 // 720p/23.98
#define DTAPI_IOCONFIG_720P24 56 // 720p/24
#define DTAPI_IOCONFIG_720P25 57 // 720p/25
#define DTAPI_IOCONFIG_720P29_97 58 // 720p/29.97
#define DTAPI_IOCONFIG_720P30 59 // 720p/30
#define DTAPI_IOCONFIG_720P50 60 // 720p/50
#define DTAPI_IOCONFIG_720P59_94 61 // 720p/59.94
#define DTAPI_IOCONFIG_720P60 62 // 720p/60
// SubValues for group DTAPI_IOCONFIG_IOSTD, value DTAPI_IOCONFIG_SDI
#define DTAPI_IOCONFIG_525I59_94 63 // 525i/59.94
#define DTAPI_IOCONFIG_625I50 64 // 625i/50
// SubValues for group DTAPI_IOCONFIG_IOSTD, value DTAPI_IOCONFIG_SPISDI
#define DTAPI_IOCONFIG_SPI525I59_94 65 // SPI 525i/59.94
#define DTAPI_IOCONFIG_SPI625I50 66 // SPI 625i/50
// Values for group IO_CONFIG_RFCLKSEL (RF clock source selection)
#define DTAPI_IOCONFIG_RFCLKEXT 67 // External RF clock input
#define DTAPI_IOCONFIG_RFCLKINT 68 // Internal RF clock reference
// Values for group IO_CONFIG_SPICLKSEL (Parallel port clock source selection)
#define DTAPI_IOCONFIG_SPICLKEXT 69 // External clock input
#define DTAPI_IOCONFIG_SPICLKINT 70 // Internal clock reference
// Values for group IO_CONFIG_SPIMODE (Parallel port mode)
#define DTAPI_IOCONFIG_SPIFIXEDCLK 71 // SPI fixed clock with valid signal
#define DTAPI_IOCONFIG_SPIDVBMODE 72 // SPI DVB mode
#define DTAPI_IOCONFIG_SPISER8B 73 // SPI serial 8-bit mode
#define DTAPI_IOCONFIG_SPISER10B 74 // SPI serial 10-bit mode
// Values for group IO_CONFIG_SPISTD (Parallel port I/O standard)
#define DTAPI_IOCONFIG_SPILVDS1 75 // LVDS1
#define DTAPI_IOCONFIG_SPILVDS2 76 // LVDS2
#define DTAPI_IOCONFIG_SPILVTTL 77 // LVTTL
// Values for group IO_CONFIG_TSRATESEL (Transport-stream rate selection)
#define DTAPI_IOCONFIG_EXTTSRATE 78 // External TS rate clock input
#define DTAPI_IOCONFIG_EXTRATIO 79 // External TS rate clock with ratio
#define DTAPI_IOCONFIG_INTTSRATE 80 // Internal TS rate clock reference
#define DTAPI_IOCONFIG_LOCK2INP 81 // Lock TS rate to input port
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIqData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure representing an I/Q data sample
//
struct DtIqData
{
int m_I, m_Q; // I/Q sample pair
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIqDirectPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Direct-IQ Modulation Parameters
//
struct DtIqDirectPars
{
DtFractionInt m_SampleRate; // Sample rate
int m_IqPacking; // IQ-Packing; None, Auto, 10- or 12-bit packing
int m_ChanFilter; // Channel filter
int m_Interpolation; // Interpolation method
public:
DTAPI_RESULT CheckValidity(void);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIsdbsLayerPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// DtIsdbsLayerPars
//
struct DtIsdbsLayerPars
{
int m_NumSlots; // Number of slots
int m_ModCod; // Modulation method and Code rate
};
// Number of slots per ISDB-S frame
#define DTAPI_ISDBS_SLOTS_PER_FRAME 48
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIsdbsPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// ISDB-S parameters including per-layer parameters
//
struct DtIsdbsPars
{
DtIsdbsPars() : m_DoMux(false), m_B15Mode(false) {}
bool m_DoMux; // Hierarchical multiplexing yes/no
// Parameters for when m_DoMux==false
bool m_B15Mode; // ARIB B.15 mode (true) or TMCC in sync bytes (false)
// Parameters for when m_DoMux==true
int m_Emergency; // Switch-on control for emergency broadcast
int m_RelTs2TsId[8]; // Relative TS to TS-ID mapping
// Slot to relative TS mapping
int m_Slot2RelTs[DTAPI_ISDBS_SLOTS_PER_FRAME];
// Modulation parameters per hierarchical layer
DtIsdbsLayerPars m_LayerPars[4];
DTAPI_RESULT CheckValidity(void);
void Init(void);
bool operator == (DtIsdbsPars& Rhs);
bool operator != (DtIsdbsPars& Rhs);
};
// ISDB-S modulation method and code rate
#define DTAPI_ISDBS_MODCOD_BPSK_1_2 1
#define DTAPI_ISDBS_MODCOD_QPSK_1_2 2
#define DTAPI_ISDBS_MODCOD_QPSK_2_3 3
#define DTAPI_ISDBS_MODCOD_QPSK_3_4 4
#define DTAPI_ISDBS_MODCOD_QPSK_5_6 5
#define DTAPI_ISDBS_MODCOD_QPSK_7_8 6
#define DTAPI_ISDBS_MODCOD_8PSK_2_3 7
#define DTAPI_ISDBS_MODCOD_NOT_ALLOC 15
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIsdbtLayerData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Parameters per hierarchical ISDB-T layer used for statistic: DTAPI_STAT_ISDBT_PARSDATA
//
struct DtIsdbtLayerData
{
int m_NumSegments; // Number of segments
int m_Modulation; // Modulation type
int m_CodeRate; // Code rate
int m_TimeInterleave; // Time interleaving 0..4 (new spec limits the
// maximum value to 3 instead of 4).
// Time interleaving I = 0 if ti = 0 or
// I = (1 << (ti + 2 - mode)) if ti != 0
DtIsdbtLayerData();
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIsdbtLayerPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Parameters per hierarchical ISDB-T layer
//
struct DtIsdbtLayerPars
{
int m_NumSegments; // Number of segments
int m_Modulation; // Modulation type
int m_CodeRate; // Code rate
int m_TimeInterleave; // Time interleaving
// Derived:
int m_BitRate; // Bits per second assuming 6 MHz channel
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIsdbtParamsData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// ISDB-T parameters including per-layer parameters used for statistic:
// DTAPI_STAT_ISDBT_PARSDATA
//
struct DtIsdbtParamsData
{
int m_BType; // Broadcast type
int m_Mode; // Transmission mode: 1, 2 or 3
int m_Guard; // Guard interval
int m_PartialRx; // Use first layer for partial reception.
// Ignored for radio broadcasts
// Layer-A/B/C parameters
DtIsdbtLayerData m_LayerPars[3];
DtIsdbtParamsData();
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIsdbtPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// ISDB-T parameters including per-layer parameters
//
struct DtIsdbtPars
{
bool m_DoMux; // Hierarchical multiplexing yes/no
bool m_FilledOut; // Members have been given a value
int m_ParXtra0; // #Segments, bandwidth, sample rate, sub channel
int m_BType; // Broadcast type
int m_Mode; // Transmission mode
int m_Guard; // Guard interval
int m_PartialRx; // Partal reception
int m_Emergency; // Switch-on control for emergency broadcast
int m_IipPid; // PID used for multiplexing IIP packet
int m_LayerOther; // Other PIDs are mapped to this layer
int m_Virtual13Segm; // Virtual 13-segment mode
// Layer-A/B/C parameters
DtIsdbtLayerPars m_LayerPars[3];
// PID-to-layer mapping
std::map<int, int> m_Pid2Layer;
// Derived:
bool m_Valid; // The parameter set is valid
int m_TotalBitrate; // Bitrate of entire stream
// Member function
DtIsdbtPars();
static bool BTypeCompat(int BType, int NumSegm);
DTAPI_RESULT CheckValidity(int& ResultCode);
DTAPI_RESULT ComputeRates(void);
void MakeConsistent();
void MakeNumSegmConsistent();
int NumSegm();
DTAPI_RESULT RetrieveParsFromTs(char* pBuffer, int NumBytes);
bool operator == (DtIsdbtPars& Rhs);
bool operator != (DtIsdbtPars& Rhs);
};
// ISDB-T layer selection used for demodulation
#define DTAPI_ISDBT_LAYER_NONE -1
#define DTAPI_ISDBT_LAYER_AUTO -2
// PID-to-layer mapping
#define DTAPI_ISDBT_LAYER_A 1
#define DTAPI_ISDBT_LAYER_B 2
#define DTAPI_ISDBT_LAYER_C 4
// DtIsdbtPars.m_BType - Broadcast type
#define DTAPI_ISDBT_BTYPE_TV 0 // 1/3/13-segment TV broadcast
#define DTAPI_ISDBT_BTYPE_RAD1 1 // 1-segment radio broadcast
#define DTAPI_ISDBT_BTYPE_RAD3 2 // 3-segment radio broadcast
// DtIsdbtPars.m_Guard - Guard interval
#define DTAPI_ISDBT_GUARD_1_32 0
#define DTAPI_ISDBT_GUARD_1_16 1
#define DTAPI_ISDBT_GUARD_1_8 2
#define DTAPI_ISDBT_GUARD_1_4 3
// DtIsdbtLayerPars.m_Modulation - Modulation type
#define DTAPI_ISDBT_MOD_DQPSK 0
#define DTAPI_ISDBT_MOD_QPSK 1
#define DTAPI_ISDBT_MOD_QAM16 2
#define DTAPI_ISDBT_MOD_QAM64 3
// DtIsdbtLayerPars.m_CodeRate - Code rate
#define DTAPI_ISDBT_RATE_1_2 0
#define DTAPI_ISDBT_RATE_2_3 1
#define DTAPI_ISDBT_RATE_3_4 2
#define DTAPI_ISDBT_RATE_5_6 3
#define DTAPI_ISDBT_RATE_7_8 4
// DtOutpChannel::SetModControl - Initial Total Number of Segments
#define DTAPI_ISDBT_SEGM_1 0x00000001
#define DTAPI_ISDBT_SEGM_3 0x00000003
#define DTAPI_ISDBT_SEGM_13 0x0000000D
#define DTAPI_ISDBT_SEGM_MSK 0x0000000F
// DtOutpChannel::SetModControl - Bandwidth
#define DTAPI_ISDBT_BW_5MHZ 0x00000010
#define DTAPI_ISDBT_BW_6MHZ 0x00000020
#define DTAPI_ISDBT_BW_7MHZ 0x00000030
#define DTAPI_ISDBT_BW_8MHZ 0x00000040
#define DTAPI_ISDBT_BW_MSK 0x000000F0
// DtOutpChannel::SetModControl - Sample Rate
#define DTAPI_ISDBT_SRATE_1_1 0x00000100
#define DTAPI_ISDBT_SRATE_1_2 0x00000200
#define DTAPI_ISDBT_SRATE_1_4 0x00000300
#define DTAPI_ISDBT_SRATE_1_8 0x00000400
#define DTAPI_ISDBT_SRATE_27_32 0x00000500
#define DTAPI_ISDBT_SRATE_135_64 0x00000600
#define DTAPI_ISDBT_SRATE_MSK 0x00000F00
// DtOutpChannel::SetModControl - Sub Channel
#define DTAPI_ISDBT_SUBCH_MSK 0x0003F000
#define DTAPI_ISDBT_SUBCH_SHIFT 12
// Result codes for DtIsdbtPars::CheckValidity
#define DTAPI_ISDBT_OK 0
#define DTAPI_ISDBT_E_BTYPE 1
#define DTAPI_ISDBT_E_NSEGM 2
#define DTAPI_ISDBT_E_PARTIAL 3
#define DTAPI_ISDBT_E_NOT_FILLED 4
#define DTAPI_ISDBT_E_SUBCHANNEL 5
#define DTAPI_ISDBT_E_SRATE 6
#define DTAPI_ISDBT_E_BANDWIDTH 7
#define DTAPI_ISDBT_E_MODE 8
#define DTAPI_ISDBT_E_GUARD 9
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtMatrixInfo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
struct DtMatrixInfo
{
int m_VidStd; // Video standard
int m_Scaling; // Scaled frame format
int m_NumColumns; // Number of columns
};
// Maximum number of fading paths, used in DtModPars
#define DTAPI_MAX_OUTPUTS 16
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtModPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure for storing a complete set of modulation parameters.
//
// NOTE FOR ISDB-T: DtModPars.m_ParXtra0 is never used, all ISDB-T parameters are stored
// in DtIsdbtPars (in *m_pXtraPars).
//
struct DtModPars
{
// Modulation parameters
int m_ModType; // Modulation type; -1 = not set
int m_ParXtra0; // ParXtra0 (Code Rate / J.83 Annex); -1 = not set
int m_ParXtra1; // ParXtra1; -1 = not set
int m_ParXtra2; // ParXtra2; -1 = not set
void* m_pXtraPars; // Extra CMMB/ISDB-S/ISDB-T/DVB-C2/DVB-T2 parameters
// Single Frequency Network parameters
int m_SfnMode; // SFN-operation mode DTAPI_SFN_MODE_XXXX
int m_SfnTimeOffset; // SFN time offset in nano seconds
int m_SfnAllowedTimeDiff; // Maximum allowed time difference in nano-seconds
// Rates; Set to -1 (not set) by SetModControl, except for symbol rate which is set
// to a default value for modulation types that support a symbol rate.
// If both symbol and TS rate are set, TS rate takes precedence.
int m_SymRate; // Symbol rate in baud
DtFractionInt m_TsRate; // Transport-stream rate in bps
// Channel modelling per output channel
bool m_IsCmEnable[DTAPI_MAX_OUTPUTS];
// Channel modelling is enabled yes/no
DtCmPars m_CmPars[DTAPI_MAX_OUTPUTS];
// Channel modelling parameters
// Custom roll-off roll
bool m_IsRoEnable; // Custom roll-off filter enable yes/no
DtFilterPars m_RollOffFilter; // Custom roll-off filter parameters
// Miscellaneous
int m_OutputLevel; // Output level; -9999 = not set
double m_RfFreqHz; // RF frequency in Hz
unsigned char m_S2PlHdrScrSeq[12];
// DVB-S2 PL header scrambling sequence
DtDvbCidPars m_DvbCidPars; // DVB carrier identification for satellite
int m_TxMode; // Transmit mode; Included here because packet
// size affects the modulation process
int m_StuffMode; // Stuffing mode
// Operations
DTAPI_RESULT CheckPars();
DTAPI_RESULT SetModControl(int ModType, int, int, int, void* pXtraPars);
// Member functions
DtCmmbPars* pCmmbPars() { return (DtCmmbPars*)m_pXtraPars; }
DtDvbC2Pars* pDvbC2Pars() { return (DtDvbC2Pars*)m_pXtraPars; }
DtDvbS2Pars* pDvbS2Pars() { return (DtDvbS2Pars*)m_pXtraPars; }
DtDvbT2Pars* pDvbT2Pars() { return (DtDvbT2Pars*)m_pXtraPars; }
DtIqDirectPars* pIqDirectPars() { return (DtIqDirectPars*)m_pXtraPars; }
DtIsdbsPars* pIsdbsPars() { return (DtIsdbsPars*)m_pXtraPars; }
DtIsdbtPars* pIsdbtPars() { return (DtIsdbtPars*)m_pXtraPars; }
DtIsdbTmmPars* pIsdbTmmPars() { return (DtIsdbTmmPars*)m_pXtraPars; }
// Predicates
bool HasSymRate();
bool IsAdtbT(), IsAdtbtDtmb(), IsAtsc(), IsAtscMh(), IsCmmb(), IsCmEnable(int i=0);
bool IsDab();
bool IsDtmb(), IsDvbC2(), IsDvbCidEnable(), IsDvbS(), IsDvbS2(), IsDvbS2Apsk(),
IsDvbS2L3(), IsDvbS2X(), IsDvbS2XL3(), IsDvbS2Mux();
bool IsDvbT(), IsDvbT2(), IsIqDirect(), IsIsdbS(), IsIsdbT(), IsIsdbTmm();
bool IsModTypeSet(), IsOfdm(), IsQam(), IsQamA(), IsQamB(), IsQamC(), IsQamAC();
bool IsRoEnable(), IsSfnEnable(), IsT2Mi();
bool RequiresMplpMod();
// Constructor, destructor
DtModPars();
~DtModPars();
private:
// No implementation is provided for the copy constructor
DtModPars(const DtModPars&);
private:
void CleanUpXtraPars();
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtPar .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Generic structure to represent a single parameter setting.
// It is used in the advanced demodulator for setting and retrieving parameter settings.
//
struct DtPar
{
DtPar();
DtPar(int ParId); // Constructor with DTAPI_PAR_xxx initialization
virtual ~DtPar();
// Value types supported for parameters
enum ParValueType
{
PAR_VT_UNDEFINED, PAR_VT_BOOL, PAR_VT_DOUBLE, PAR_VT_INT
};
DTAPI_RESULT m_Result; // Result of retrieving the parameters
int m_ParId; // Identifies the parameter: DTAPI_PAR_XXX
int m_IdXtra[4]; // Extra identification parameters
ParValueType m_ValueType; // Value type of parameter: PAR_VT_XXX
union {
bool m_ValueBool; // Value if value type is PAR_VT_BOOL
double m_ValueDouble; // Value if value type is PAR_VT_DOUBLE
int m_ValueInt; // Value if value type is PAR_VT_INT
void* m_pValue; // Pointer for complex types
};
void Cleanup();
DTAPI_RESULT GetName(const char*& pName, const char*& pShortName);
DTAPI_RESULT GetName(const wchar_t*& pName, const wchar_t*& pShortName);
DTAPI_RESULT GetValue(int &Value);
DTAPI_RESULT GetValue(double &Value);
DTAPI_RESULT GetValue(bool &Value);
DTAPI_RESULT SetId(int ParameterId);
DTAPI_RESULT SetValue(int Value);
DTAPI_RESULT SetValue(double Value);
DTAPI_RESULT SetValue(bool Value);
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
// Serialisation of an array of parameters
static DTAPI_RESULT FromXml(const std::wstring&, DtPar*& pPars, int& Count);
static DTAPI_RESULT ToXml(DtPar* pPars, int Count, std::wstring& XmlString);
// Assignment operator
DtPar& operator=(const DtPar&);
private:
// No implementation is provided for the copy constructor
DtPar(const DtPar&);
};
// Integer parameters
#define DTAPI_PAR_DEMOD_THREADS 0x001 // Number of Threads/CPU cores used for
// software demodulation: default 4
#define DTAPI_PAR_DEMOD_LDPC_MAX 0x002 // LDPC maximum iterations: default 50
#define DTAPI_PAR_DEMOD_LDPC_AVG 0x003 // LDPC average iterations limit, used
// to limit CPU load; default 16
// Boolean parameters
#define DTAPI_PAR_DEMOD_MER_ENA 0x004 // Enable MER calculation; default on
// Undefined parameter
#define DTAPI_PAR_UNDEFINED 0x000 // Value is not defined yet
// Unsported item values
#define DTAPI_PAR_UNSUP_INTITEM 0x80000000 // Unsupported integer item
#define DTAPI_PAR_UNSUP_UINTITEM 0xFFFFFFFF // Unsupported unsigned integer item
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtPhaseNoisePars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure for specifying the phase noise parameters
//
struct DtPhaseNoisePars
{
DtFractionInt m_SampleRate;
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtRawIpHeader -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Header placed in front of all IP Packets when DTAPI_RXMODE_IPRAW mode is used
//
struct DtRawIpHeader
{
unsigned short m_Tag; // 0x44A0h = \91D\92160
unsigned short m_Length; // IP packet length
unsigned int m_TimeStamp; // IP packet arrival/transmit timestamp
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtStatistic -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
struct DtStatistic
{
DtStatistic();
DtStatistic(int StatisticId); // Constructor with DTAPI_STAT_xxx initialization
virtual ~DtStatistic();
// Value types supported for statistics
// NOTE: ALWAYS ADD NEW TYPES TO END OF LIST, FOR BACKWARDS COMPATIBILITY
enum StatValueType
{
STAT_VT_UNDEFINED, STAT_VT_BOOL, STAT_VT_DOUBLE, STAT_VT_INT,
STAT_VT_DVBC2_L1P2, STAT_VT_DVBC2_PLPSIG, STAT_VT_DVBT2_L1,
STAT_VT_ISDBT_PARS, STAT_VT_LDPC_STATS, STAT_VT_MA_DATA,
STAT_VT_MA_STATS, STAT_VT_PLP_BLOCKS, STAT_VT_VIT_STATS,
STAT_VT_DAB_ENSEM, STAT_VT_RS_STATS, STAT_VT_DVBT_TPS, STAT_VT_DAB_TXID
};
DTAPI_RESULT m_Result; // Result of retrieving the statistic
int m_StatisticId; // Identifies the statistic: DTAPI_STAT_XXX
int m_IdXtra[4]; // Extra identification parameters
StatValueType m_ValueType; // Value type of statistic: STAT_VT_XXX
union {
bool m_ValueBool; // Value if value type is STAT_VT_BOOL
double m_ValueDouble; // Value if value type is STAT_VT_DOUBLE
int m_ValueInt; // Value if value type is STAT_VT_INT
void* m_pValue; // Pointer if value type is STAT_VT_DVBC2_L1P2,
// STAT_VT_DVBC2_PLPSIG, STAT_VT_DVBT_TPS,
// STAT_VT_DVBT2_L1, STAT_VT_VIT_STATS
// STAT_VT_DAB_ENSEM or STAT_VT_RS_STATS,
// STAT_VT_DAB_TXID
};
void Cleanup();
DTAPI_RESULT GetName(const char*& pName, const char*& pShortName);
DTAPI_RESULT GetName(const wchar_t*& pName, const wchar_t*& pShortName);
DTAPI_RESULT GetValue(int &Value);
DTAPI_RESULT GetValue(double &Value);
DTAPI_RESULT GetValue(bool &Value);
DTAPI_RESULT GetValue(DtDabEnsembleInfo*& pValue);
DTAPI_RESULT GetValue(DtDabTransmitterIdInfo*& pValue);
DTAPI_RESULT GetValue(DtDvbC2DemodL1Part2Data*& pValue);
DTAPI_RESULT GetValue(DtDvbC2DemodL1PlpSigData*& pValue);
DTAPI_RESULT GetValue(DtDvbTTpsInfo*& pValue);
DTAPI_RESULT GetValue(DtDvbT2DemodL1Data*& pValue);
DTAPI_RESULT GetValue(DtDemodLdpcStats*& pValue);
DTAPI_RESULT GetValue(DtDemodMaLayerData*& pValue);
DTAPI_RESULT GetValue(DtDemodMaLayerStats*& pValue);
DTAPI_RESULT GetValue(DtDemodPlpBlocks*& pValue);
DTAPI_RESULT GetValue(DtIsdbtParamsData*& pValue);
DTAPI_RESULT GetValue(DtRsDecStats*& pValue);
DTAPI_RESULT GetValue(DtVitDecStats*& pValue);
DTAPI_RESULT SetId(int StatisticId);
DTAPI_RESULT SetValue(int Value);
DTAPI_RESULT SetValue(double Value);
DTAPI_RESULT SetValue(bool Value);
DTAPI_RESULT SetValue(DtDabEnsembleInfo& pValue);
DTAPI_RESULT SetValue(DtDabTransmitterIdInfo& pValue);
DTAPI_RESULT SetValue(DtDvbC2DemodL1Part2Data& Value);
DTAPI_RESULT SetValue(DtDvbC2DemodL1PlpSigData& Value);
DTAPI_RESULT SetValue(DtDvbTTpsInfo& pValue);
DTAPI_RESULT SetValue(DtDvbT2DemodL1Data& Value);
DTAPI_RESULT SetValue(DtDemodLdpcStats& Value);
DTAPI_RESULT SetValue(DtDemodMaLayerData& Value);
DTAPI_RESULT SetValue(DtDemodMaLayerStats& Value);
DTAPI_RESULT SetValue(DtDemodPlpBlocks& Value);
DTAPI_RESULT SetValue(DtIsdbtParamsData& Value);
DTAPI_RESULT SetValue(DtRsDecStats& pValue);
DTAPI_RESULT SetValue(DtVitDecStats& pValue);
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
// Serialisation of an array of statistics
static DTAPI_RESULT FromXml(const std::wstring&, DtStatistic*&, int& Count);
static DTAPI_RESULT ToXml(DtStatistic* pStatistics, int Count, std::wstring&);
// Assignment operator
DtStatistic& operator=(const DtStatistic&);
private:
// No implementation is given of the copy constructor
DtStatistic(const DtStatistic&);
};
// Integer statistics
#define DTAPI_STAT_BADPCKCNT 0x003 // Count of uncorrected packets
#define DTAPI_STAT_CNR 0x105 // Carrier-to-noise ratio in dB
#define DTAPI_STAT_DVBC2_DSLICEDISC 0x010 // DVB-C2 Data slice discontinuity count
#define DTAPI_STAT_DVBC2_L1HDR_ERR 0x00E // DVB-C2 L1 Preamble header error count
#define DTAPI_STAT_DVBC2_L1P2_ERR 0x00F // DVB-C2 L1-Part 2 error count
#define DTAPI_STAT_DVBT2_L1PRE_ERR 0x00C // DVB-T2 L1-Pre error count
#define DTAPI_STAT_DVBT2_L1POST_ERR 0x00D // DVB-T2 L1-Post error count
#define DTAPI_STAT_EBN0 0x111 // Eb/N0 in dB (estimated on MER)
#define DTAPI_STAT_ESN0 0x110 // Es/N0 in dB (estimated on MER)
#define DTAPI_STAT_LINKMARGIN 0x10F // Link margin in dB
#define DTAPI_STAT_MER 0x106 // Modulation error rate in dB
#define DTAPI_STAT_MOD_SAT 0x004 // Modulator saturation count
#define DTAPI_STAT_RELOCKCNT 0x00A // Receiver re-lock count
#define DTAPI_STAT_RFLVL_CHAN 0x005 // RF power level for channel bandwidth
#define DTAPI_STAT_RFLVL_CHAN_QS 0x015 // Quick scan of channel level
#define DTAPI_STAT_RFLVL_NARROW 0x006 // RF power level for a narrow bandwidth
#define DTAPI_STAT_RFLVL_NARROW_QS 0x016 // Quick scan of channel level
#define DTAPI_STAT_RS 0x008 // Reed-Solomon error counter
#define DTAPI_STAT_SNR 0x107 // Signal-to-noise ratio in dB
#define DTAPI_STAT_TEMP_TUNER 0x009 // Tuner temperature
#define DTAPI_STAT_T2MI_OVFS 0x00B // DVB-T2 T2-MI overflow count
// Double statistics
#define DTAPI_STAT_BER_POSTBCH 0x100 // Post-BCH bit error rate
#define DTAPI_STAT_BER_POSTLDPC 0x101 // Post-LDPC bit error rate
#define DTAPI_STAT_BER_POSTVIT 0x102 // Post-Viterbi bit error rate
#define DTAPI_STAT_BER_PREBCH 0x10D // Pre-BCH bit error rate
#define DTAPI_STAT_BER_PRELDPC 0x10E // Pre-LDPC bit error rate
#define DTAPI_STAT_BER_PRERS 0x103 // Pre-Reed-Solomon bit error rate
#define DTAPI_STAT_BER_PREVIT 0x104 // Pre-Viterbi bit error rate
#define DTAPI_STAT_FER_POSTBCH 0x116 // Post-BCH frame error rate
#define DTAPI_STAT_FREQ_SHIFT 0x10B // Input frequency shift (Hz)
#define DTAPI_STAT_OCCUPIEDBW 0x112 // Occupied bandwidth
#define DTAPI_STAT_PER 0x108 // Packet error rate
#define DTAPI_STAT_ROLLOFF 0x113 // Roll-off factor in percentage
#define DTAPI_STAT_SAMPRATE_OFFSET 0x10C // Sample rate offset (ppm)
// Boolean lock statistics
#define DTAPI_STAT_CARRIER_LOCK 0x201 // Carrier lock
#define DTAPI_STAT_FEC_LOCK 0x202 // FEC lock
#define DTAPI_STAT_LOCK 0x200 // Overall lock status
#define DTAPI_STAT_PACKET_LOCK 0x203 // Packet lock
#define DTAPI_STAT_SPECTRUMINV 0x205 // Spectrum inversion
#define DTAPI_STAT_VIT_LOCK 0x204 // Viterbi lock
// Complex statistics
#define DTAPI_STAT_DAB_ENSEM_INFO 0x308 // DAB ensemble information from the
// Fast Information Channel (FIC)
#define DTAPI_STAT_DAB_TXID_INFO 0x30C // DAB transmitter ID information
#define DTAPI_STAT_DVBC2_L1P2DATA 0x300 // DVB-C2 Layer-1 Part 2 data
#define DTAPI_STAT_DVBC2_PLPSIGDATA 0x301 // DVB-C2 Layer-1 PLP signalling data
#define DTAPI_STAT_DVBT_TPS_INFO 0x30B // DVB-T TPS information
#define DTAPI_STAT_DVBT2_L1DATA 0x302 // DVB-T2 Layer-1 data
#define DTAPI_STAT_ISDBT_PARSDATA 0x303 // ISDB-T parameters data
#define DTAPI_STAT_LDPC_STATS 0x304 // DVB-C2/T2 LDPC statistics
#define DTAPI_STAT_MA_DATA 0x305 // DVB-C2/T2 mode adaptation data
#define DTAPI_STAT_MA_STATS 0x306 // DVB-C2/T2 mode adaptation statistics
#define DTAPI_STAT_PLP_BLOCKS 0x307 // DVB-C2/T2 PLP number of FEC blocks
#define DTAPI_STAT_RSDEC_STATS 0x30A // Reed-Solomon decoder statistics
#define DTAPI_STAT_VITDEC_STATS 0x309 // Viterbi decoder statistics
// DekTec internal statistics
#define DTAPI_STAT_AGC1 0x001 // First AGC value
#define DTAPI_STAT_AGC2 0x002 // Second AGC value
#define DTAPI_STAT_RFLVL_UNCALIB 0x007 // Uncalibrated RF power level
#define DTAPI_STAT_RFLVL_UNCALIB_DBM 0x10A // Uncalibrated RF power level in dBm
#define DTAPI_STAT_SYNTAX_ERR_CNT 0x114 // Num syntax errors in usb bitstream
#define DTAPI_STAT_OVERFLOW_CNT 0x115 // Number of dtapi<>kernel buf overflows
// Unsupported item values
#define DTAPI_STAT_UNDEFINED 0x000 // Value is not defined yet
#define DTAPI_STAT_UNSUP_INTITEM 0x80000000 // Unsupported integer item
#define DTAPI_STAT_UNSUP_UINTITEM 0xFFFFFFFF // Unsupported unsigned integer item
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIpQosStats -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Quality-of-Service related statistics for SDI/TS-over-IP channels, measured over a
// certain period of time (the "time period").
//
// If the mode is "Seamless Protection Switching of IP Datagrams" (SMPTE 2022-7 mode),
// QoS statistics are maintained for path 1, path 2, and for the reconstructed stream.
// If the mode is not SMPTE 2022-7 ("single-path" mode), the QoS statistics are stored
// in the members for path 1.
//
// This structure is contained in the DtIpStat structure, once with the statistics
// measured over the last second, and once with statistics measured over the last minute.
//
struct DtIpQosStats
{
// Packet Error Rate (PER) for path 1, path 2 and for the reconstructed stream.
// The PER is the number of lost IP packets per second.
double m_Per1, m_Per2, m_PerAfterFec;
// Delay factor in microseconds for path 1 and path 2.
// The delay factor is an indication of the jitter of the IP stream. It is defined
// as the maximum difference between the actual arrival time of a UDP/RTP packet
// and the ideal (jitterless) arrival time of that packet.
double m_DelayFactor1, m_DelayFactor2;
// The skew is the minimal and maximal difference over the time period
// (1 sec or 1 minute) in arrival time between IP packets on path 1 and on path 2.
// If m_Skew is positive, path 1 has a longer delay than path 2; if m_Skew is
// negative, path 2 has the longer delay.
// Note: PD as defined in SMPTE 2022-7 is the absolute value of m_Skew.
double m_MinSkew; // Min. Skew between path 1 and path 2
double m_MaxSkew; // Max. Skew between path 1 and path 2
//Inter Packet arrival time of Ip packet per port over time period (1 sec or 1 minute)
double m_MinIpat1, m_MinIpat2; // Min. IPAT path1 and path2
double m_MaxIpat1, m_MaxIpat2; // Max. IPAT path1 and path2
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. DtIpProfile -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Structure for describing the IP transmission "profile". It defines the maximum
// bitrate and (in SMPTE 2022-7 mode only) the maximum skew between path 1 and path 2.
// DtIpProfile is used to dimension buffer sizes at the receiver.
//
struct DtIpProfile
{
// m_Profile defines the maximum bitrate and the maximum path skew.
// Member variables m_MaxBitrate and m_MaxSkew are used only if m_Profile is
// DTAPI_IP_USER_DEFINED, otherwise m_Profile implicitly sets their values.
int m_Profile; // IP transmission profile
// m_MaxBitrate is used for single paths and in SMPTE 2022-7 mode.
unsigned int m_MaxBitrate; // Maximum bitrate in bps
// m_MaxSkew is used only in SMPTE 2022-7 mode. It defines the maximum skew
// between the two IP transmission paths.
int m_MaxSkew; // Maximum skew between path 1 and path 2 in ms
// Set the video standard to transmit/receive.
int m_VideoStandard; // DTAPI_VIDSTD_ defines.
};
// IP tranmission profile (DtIpProfile::m_Profile)
#define DTAPI_IP_PROF_NOT_DEFINED 0 // Not defined
#define DTAPI_IP_USER_DEFINED 1 // Use m_MaxBitrate and m_MaxSkew
// LBR (Low Bit Rate) profiles
#define DTAPI_IP_LBR_LOW_SKEW 2 // m_MaxSkew=10ms, m_MaxBitrate=10Mbps
#define DTAPI_IP_LBR_MODERATE_SKEW 3 // m_MaxSkew=50ms, m_MaxBitrate=10Mbps
#define DTAPI_IP_LBR_HIGH_SKEW 4 // m_MaxSkew=450ms, m_MaxBitrate=10Mbps
// SBR (Slower Bit Rate) profiles
#define DTAPI_IP_SBR_LOW_SKEW 5 // m_MaxSkew=10ms, m_MaxBitrate=270Mbps
#define DTAPI_IP_SBR_MODERATE_SKEW 6 // m_MaxSkew=50ms, m_MaxBitrate=270Mbps
#define DTAPI_IP_SBR_HIGH_SKEW 7 // m_MaxSkew=450ms, m_MaxBitrate=270Mbps
// HBR (High Bit Rate) profiles
#define DTAPI_IP_HBR_LOW_SKEW 5 // m_MaxSkew=10ms, m_MaxBitrate=3Gbps
#define DTAPI_IP_HBR_MODERATE_SKEW 6 // m_MaxSkew=50ms, m_MaxBitrate=3Gbps
#define DTAPI_IP_HBR_HIGH_SKEW 7 // m_MaxSkew=150ms, m_MaxBitrate=3Gbps
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIpPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Structure for storing SDI/TS-over-IP parameters
//
struct DtIpPars
{
public:
// Primary link
unsigned char m_Ip[16]; // IP address (IPv4/IPv6)
unsigned short m_Port; // Port number
unsigned char m_SrcFltIp[16]; // Source filter: IP address (IPv4/IPv6)
unsigned short m_SrcFltPort; // Source filter: port number
int m_VlanId; // VLAN ID
int m_VlanPriority; // VLAN priority
// Redundant link (path 2 in SMPTE 2022-7 mode)
unsigned char m_Ip2[16]; // IP address (IPv4/IPv6)
unsigned short m_Port2; // Port number
unsigned char m_SrcFltIp2[16]; // Source filter: IP address (IPv4/IPv6)
unsigned short m_SrcFltPort2; // Source filter: port number
int m_VlanId2; // VLAN ID
int m_VlanPriority2; // VLAN priority
int m_TimeToLive; // Time-to-Live setting for IP Tx
int m_NumTpPerIp; // Number of transport packets per IP packet
int m_Protocol; // Protocol: DTAPI_PROTO_UDP/RTP
int m_DiffServ; // Differentiated services
int m_FecMode; // Error correction mode: DTAPI_FEC_DISABLE/2D
int m_FecNumRows; // 'D' = #rows in FEC matrix
int m_FecNumCols; // 'L' = #columns in FEC matrix
// Control and status flags: DTAPI_IP_V4, DTAPI_IP_V6, DTAPI_IP_TX_MANSRCPORT
int m_Flags;
// Seamless Protection Switching of IP Datagrams (SMPTE 2022-7)
// Transmission- or reception mode. It determines whether "seamless protection
// switching of IP datagrams" according to SMPTE 2022-7 is applied.
// DTAPI_IP_NORMAL Default value for non-redundant Rx or Tx.
// DTAPI_IP_TX_2022_7 Apply SMPTE 2022-7 for Tx. IP packets will be duplicated to
// path 1 (primary link) and path 2 (redundant link)
// DTAPI_IP_RX_2022_7 Apply SMPTE 2022-7 for Rx. IP packets from path 1 and path 2
// will be seamlessly combined into a single logical stream.
int m_Mode;
// The IP transmission profile determines the maximum bitrate and the maximum skew
// between transmission path 1 and path 2.
DtIpProfile m_IpProfile;
public:
DtIpPars();
~DtIpPars();
};
// Legacy
#define DtTsIpPars DtIpPars
// Error correction modes (DtIpPars::m_FecMode)
#define DTAPI_FEC_DISABLE 0
#define DTAPI_FEC_2D 1 // FEC reconstruction
#define DTAPI_FEC_2D_M1 1 // Mode1: FECdT = DVBdT + .5 * DVBdT
#define DTAPI_FEC_2D_M2 2 // Mode2: FECdT = DVBdT
#define DTAPI_FEC_2D_M1_B 3 // Mode1: FECdT = DVBdT + .5 * DVBdT (BLOCK)
#define DTAPI_FEC_2D_M2_B 4 // Mode2: FECdT = DVBdT (BLOCK)
// Optional control/status flags (DtIpPars::m_Flags)
#define DTAPI_IP_V4 0x00
#define DTAPI_IP_V6 0x01
#define DTAPI_IP_TX_MANSRCPORT 0x10
#define DTAPI_IP_RX_DIFFSRCPORTFEC 0x20
// Transmission/reception mode (DtIpPars::m_Mode)
#define DTAPI_IP_NORMAL 0
#define DTAPI_IP_TX_2022_7 1 // Dual-path SMPTE 2022-7 transmission
#define DTAPI_IP_RX_2022_7 2 // Dual-path SMPTE 2022-7 reception
// Legacy definitions
#define DTAPI_IP_TX_DBLBUF DTAPI_IP_TX_2022_7
#define DTAPI_IP_RX_DBLBUF DTAPI_IP_RX_2022_7
// IP protocol (DtIpPars::m_Protocol)
#define DTAPI_PROTO_UDP 0
#define DTAPI_PROTO_RTP 1
#define DTAPI_PROTO_AUTO 2
#define DTAPI_PROTO_UNKN 2
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. DtIpStat .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Structure for retrieving the IP statistics for an SDI/TS-over-IP channel.
//
// Counters start at zero, but counters are not reset after being read.
// Counter wraps must be handled by the application.
//
// If the mode is "Seamless Protection Switching of IP Datagrams" (SMPTE 2022-7 mode),
// counters are maintained for path 1, path 2, and for the reconstructed stream.
// If this mode is not active, only path 1 counters are valid.
//
struct DtIpStat
{
// Total number of received or transmitted IP packets.This is the number of IP packets
// that the stream should contain, so lost packets are included in this counter.
unsigned int m_TotNumIpPackets;
// Number of IP packets lost before and after FEC.
// In SMPTE 2022-7 mode, these counters apply to the reconstructed stream.
unsigned int m_LostIpPacketsBeforeFec, m_LostIpPacketsAfterFec;
// Counters for the number of received and number of lost IP packets for path 1
// and for path 2.
// m_NumIpPacketsLost1 = m_TotNumIpPackets - m_NumIpPacketsReceived1
// m_NumIpPacketsLost2 = m_TotNumIpPackets - m_NumIpPacketsReceived2
unsigned int m_NumIpPacketsReceived1, m_NumIpPacketsReceived2;
unsigned int m_NumIpPacketsLost1, m_NumIpPacketsLost2;
// QoS statistics measured over the last second, and over the last minute.
DtIpQosStats m_QosStatsLastSec, m_QosStatsLastMin;
};
// Legacy
#define DtTsIpStat DtIpStat
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtTunePars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Structure for setting tuner specific parameters
//
struct DtTunePars
{
union {
// DTA-2131 specific tuner parameters
struct {
int m_TunerStandard; // DTAPI_TUNMOD_xxx
int m_TunerBandwidth; // Tuning bandwidth in Hz
int m_IfFrequency; // IF frequency in Hz
// (-1 according tuner standard)
int m_LpfCutOff; // Low-pass filter cutoff; DTAPI_TUN31_LPF_x
int m_LpfOffset; // Low-pass filter offset; DTAPI_TUN31_LPF_x
int m_HiPass; // Hi Pass filter; DTAPI_TUN31_HPF_x
int m_DcNotchIfPpf; // Enable DC notch IF PPF; DTAPI_TUN31_NOTCH_x
int m_IfNotch; // Enable IF notch; DTAPI_TUN31_NOTCH_x
int m_IfNotchToRssi; // Enable IF notch to RSSI; DTAPI_TUN31_NOTCH_x
} m_Dta2131TunePars;
} u;
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtVidStdInfo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
struct DtVidStdInfo
{
int m_VidStd; // Video Standard
int m_LinkStd; // Link standard
bool m_IsHd; // true: is an HD format: false: is SD format
bool m_Is4k; // true: is a 4k resolution
int m_VidWidth; // Width in pixels
int m_VidHeight; // Height in number of lines
// NOTE: for 4k the following members describe the properties of a single link
bool m_IsInterlaced; // Is interlaced
int m_NumLines; // Number of lines per frame
double m_Fps; // Frame rate
bool m_IsFractional; // Fractional framerate
int m_FrameNumSym; // Size of frame (in # symbols)
int m_LineNumSym; // # of symbol per line
int m_LineNumSymHanc; // # of HANC symbols per line
int m_LineNumSymVanc; // # of VANC symbols per line
int m_LineNumSymEav; // # of EAV symbols per line
int m_LineNumSymSav; // # of SAV symbols per line
// Field 1
int m_Field1StartLine; // Line # of first line for field 1
int m_Field1EndLine; // Line # of last line for field 1
int m_Field1VidStartLine; // Line # of first line containing active video
int m_Field1VidEndLine; // Line # of last line containing active video
// Field 2
int m_Field2StartLine; // Line # of first line for field 2
int m_Field2EndLine; // Line # of last line for field 2
int m_Field2VidStartLine; // Line # of first line containing active video
int m_Field2VidEndLine; // Line # of last line containing active video
};
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ DEMODULATION PARAMETERS +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//.-.-.-.-.-.-.-.-.-.-.-.-.- struct DtDemodDvbS2ModCodSettings -.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure for storing the DVB-S2
//
struct DtDemodDvbS2ModCodSettings
{
bool m_Enable; // Demodulation of this MODCOD (yes/no)
int m_SnrThreshold; // SNR threshold of this MODCOD for automute algorithm
DtDemodDvbS2ModCodSettings() : m_Enable(false), m_SnrThreshold(0) {}
DtDemodDvbS2ModCodSettings(bool Enable, int SnrThreshold) :
m_Enable(Enable), m_SnrThreshold(SnrThreshold) {}
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Structure for storing a complete set of demodulation parameters
//
class DtDemodPars
{
public:
DtDemodPars();
DtDemodPars(const DtDemodPars&);
~DtDemodPars();
public:
DTAPI_RESULT CheckValidity();
int GetModType() const;
DTAPI_RESULT SetModType(int ModType);
DtDemodParsAtsc* Atsc() const;
DtDemodParsDab* Dab() const;
DtDemodParsDvbC2* DvbC2() const;
DtDemodParsDvbS* DvbS() const;
DtDemodParsDvbS2* DvbS2() const;
DtDemodParsDvbS2Adv* DvbS2Adv() const;
DtDemodParsDvbT* DvbT() const;
DtDemodParsDvbT2* DvbT2() const;
DtDemodParsIq* Iq() const;
DtDemodParsIq2131* Iq2131() const;
DtDemodParsIsdbt* Isdbt() const;
DtDemodParsQam* Qam() const;
// Predicates
bool IsAtsc() const, IsDab() const, IsDvbC2() const, IsDvbS() const,
IsDvbS2() const, IsDvbT() const,IsDvbT2() const, IsIq() const, IsIq2131() const,
IsIsdbt() const, IsQam() const;
// Operators
void operator=(const DtDemodPars& Pars);
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
// Conversion helper
DTAPI_RESULT FromOldStyle(int ModType, int ParXtra0, int ParXtra1, int ParXtra2);
DTAPI_RESULT ToOldStyle(int& ModType, int& ParXtra0, int& ParXtra1, int& ParXtra2);
private:
int m_ModType; // Modulation type
void* m_pDemodPars; // Demodulation parameters; Type depends on m_ModType
private:
void CleanUpDemodPars();
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsAtsc -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Demodulation parameters for modulation type DTAPI_MOD_ATSC
//
struct DtDemodParsAtsc
{
int m_Constellation; // VSB constellation
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsDab -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Demodulation parameters for modulation type DTAPI_MOD_DAB
//
struct DtDemodParsDab
{
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsDvbC2 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Demodulation parameters for modulation type DTAPI_MOD_DVBC2
//
struct DtDemodParsDvbC2
{
int m_Bandwidth; // Bandwidth
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsDvbS -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Demodulation parameters for modulation type DTAPI_MOD_DVBS
//
struct DtDemodParsDvbS
{
int m_CodeRate; // DVB-S coderate
int m_SpecInv; // Spectral inversion (yes/no)
int m_SymRate; // Symbol rate in baud
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsDvbS2 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Demodulation parameters for modulation type DTAPI_MOD_DVBS2
//
struct DtDemodParsDvbS2
{
int m_CodeRate; // Coderate
int m_Pilots; // Pilots (yes/no)
int m_SpecInv; // Spectral inversion (yes/no)
int m_FecFrame; // Long or short FECFRAME
int m_SymRate; // Symbol rate in baud
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsDvbS2Adv -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Advanced demodulation parameters for modulation type DTAPI_MOD_DVBS2
//
struct DtDemodParsDvbS2Adv : DtDemodParsDvbS2
{
bool m_AutoMuteModCods; // MODCODS with an SNR threshold above the current SNR
// will not be demodulated
int m_HysteresisMargin; // Margin to add on top of the SNR threshold before
// re-enabling a certain modcod, in units of 0.1 dB
std::map<DtDvbS2ModCod, DtDemodDvbS2ModCodSettings> m_ModCods;
// List with supported modcods
DtDemodParsDvbS2Adv();
DTAPI_RESULT DeleteModCod(DtDvbS2ModCod ModCod);
DTAPI_RESULT InitSnrThreshold(int TypeNumber);
DTAPI_RESULT SetModCod(DtDvbS2ModCod ModCod, DtDemodDvbS2ModCodSettings &Settings);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsDvbT -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Demodulation parameters for modulation type DTAPI_MOD_DVBT
//
struct DtDemodParsDvbT
{
int m_CodeRate; // Coderate
int m_Bandwidth; // Bandwidth
int m_Constellation; // Constellation
int m_Guard; // Guard interval
int m_Interleaving; // Interleaving
int m_Mode; // Transmission mode
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsDvbT2 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Demodulation parameters for modulation type DTAPI_MOD_DVBT2
//
struct DtDemodParsDvbT2
{
int m_Bandwidth; // Bandwidth
int m_T2Profile; // DVB-T2 profile (Base/Lite)
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsIq -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Demodulation parameters for modulation type DTAPI_MOD_IQ
//
struct DtDemodParsIq
{
int m_Bandwidth; // Signal bandwidth in Hz
int m_IqDemodType; // IQ demodulation type (DTAPI_DEMOD_QAM or
// DTAPI_DEMOD_OFDM)
int m_SampleRate; // Sample rate in Hz
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsIq2131 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Demodulation parameters for modulation type DTAPI_MOD_IQ_2131 (DTA-2131 specific)
//
struct DtDemodParsIq2131
{
int m_IqDemodFreq; // IQ demodulation frequency in Hz
DtFilterPars m_LpfFilter; // Anti-aliasing filter
double m_LpfScaleFactor; // Scale factor after anti-aliasing filter
int m_SampleRate; // Sample rate in Hz
DtTunePars m_TunePars; // Tuning parameters
};
// IQ-demodulation type
#define DTAPI_DEMOD_OFDM 0 // OFDM IQ-demodulation type
#define DTAPI_DEMOD_QAM 1 // QAM IQ-demodulation type
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsIsdbt .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Demodulation parameters for modulation type DTAPI_MOD_ISDBT
//
struct DtDemodParsIsdbt
{
int m_Bandwidth; // Bandwidth DTAPI_ISDBT_BW_xMHZ
int m_SubChannel; // Sub channel number, 0..41, default= 22
int m_NumberOfSegments; // Number of segments DTAPI_ISDBT_SEGM_x
DtDemodParsIsdbt() : m_SubChannel(22) {}
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodParsQam -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Demodulation parameters for modulation type DTAPI_MOD_QAMxxx
//
struct DtDemodParsQam
{
int m_Annex; // ITU-T J.83 Annex
int m_Interleaving; // Interleaving; ignored for Annex A and C
int m_SymRate; // Symbol rate in baud
};
//+=+=+=+=+=+=+=+=+=+=+=+=+=+ Common Demodulation Structures +=+=+=+=+=+=+=+=+=+=+=+=+=+=
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodLdpcStats -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// LDCP statistic information for DVB-T2 and DVB-C2
//
struct DtDemodLdpcStats
{
__int64 m_FecBlocksCount; // #Decoded FEC blocks
__int64 m_UncorrFecBlocksCount;// #Uncorrected FEC blocks after BCH (not exact)
__int64 m_FecBlocksCount1; // #Decoded FEC blocks, reset at the same time
// as m_FecBlocksItCount/min/max
__int64 m_FecBlocksItCount; // Total #LDPC iterations
// Average #LDPC iteration =
// m_FecBlocksItCount / m_FecBlocksCount1
int m_FecBlocksItMin; // Minimum #LDPC iterations (-1 after reset)
int m_FecBlocksItMax; // Maximum #LDPC iterations (-1 after reset)
__int64 m_BchBitCount; // #Decoded data bits, including BCH bits
// Currently only data+BCH bits are taken into account (LDPC parity bits are ignored),
// so the BER before LDPC is approximatively: m_BchBitErrorCount / m_BchBitCount
// This is accurate only if there are no uncorrected blocks (m_UncorrFecBlocksCount=0)
__int64 m_BchBitErrorCount; // Bit error count before LDPC
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodMaLayerStats -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// LMode adaption layer statistics for DVB-T2 and DVB-C2
//
struct DtDemodMaLayerStats
{
__int64 m_HdrCrc8ErrorCount; // #CRC8 errors for BBframe header
__int64 m_PckCrc8ErrorCount; // #CRC8 errors for packets (only for m_Hem = 0)
__int64 m_FramingErrorCount; // SYNCD/DFL/UPL consistency errors
__int64 m_CommonPlpResyncCount;// Number of times a resynchronization between data
// and common PLP was needed. It normally happens
// only in case of receive errors. This field is only
// updated in the corresponding data PLP.
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtRsDecStats -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Reed-Solomon decoder info
//
struct DtRsDecStats
{
bool m_Locked; // Decoder is locked
__int64 m_ByteSkipCount; // Bytes skipped while looking for sync
__int64 m_PacketCount; // Decoded packets
__int64 m_UncorrPacketCount; // Uncorrected packets
__int64 m_ByteErrorCount; // Byte error count
__int64 m_BitErrorCount; // Bit error count
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtVitDecStats -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Viterbi decoder info (pre-viterbi BER)
//
struct DtVitDecStats
{
__int64 m_BitCount; // Input bit count
__int64 m_BitErrorCount; // Bit error count
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodMaLayerData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Mode adaption layer info for DVB-T2 and DVB-C2
struct DtDemodMaLayerData
{
bool m_Hem; // High efficiency mode
bool m_Npd; // Null packet deletion
int m_Issy; // ISSY: mode, see DTAPI_DVBx2_ISSY_x
int m_IssyBufs; // ISSY: current 'BUFS' value
int m_IssyTto; // ISSY: last 'TTO' value (DVB-T2 only)
int m_IssyBufStat; // ISSY: last 'BUFSTAT' value (DVB-C2/S2 only)
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDemodPlpBlocks -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Number of FEC blocks per frame
//
struct DtDemodPlpBlocks
{
int m_NumBlocks; // Last plp_num_blocks
int m_NumBlocksMin; // Minimum plp_num_blocks (-1 = no new value since
// reset)
int m_NumBlocksMax; // Maximum plp_num_blocks
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//+=+=+=+=+=+=+=+=+ Demodulator Blindscan and Spectrum scan definitions +=+=+=+=+=+=+=+=+=
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtTransmitter -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure describing a transmitter. Used by DtInpChannel::BlindScan to return the
// transmitters found by scanning a frequency band.
//
struct DtTransmitter
{
__int64 m_FreqHz; // Center frequency of the transmitter
int m_ModType; // Modulation type
int m_SymbolRate; // Symbol rate
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtBsProgess -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Structure describing the progress of an asynchronous BlindScan.
// Used by asynchronous DtInpChannel::BlindScan to return current state and the
// transmitters found by scanning a frequency band using the DtBsProgressFunc callback.
//
struct DtBsProgress
{
enum BsEvent
{
BS_STEP, // One frequency step is completed
BS_CANCELLED, // Blindscan is cancelled
BS_DONE // Blindscan is completed
};
__int64 m_FreqHz; // Center frequency found
DtDemodPars m_DemodPars; // Demodulator parameters found for this transmitter
BsEvent m_ProgressEvent; // Progress event
bool m_ChannelFound; // If set, the channel is found on the transmitter
// frequency
DTAPI_RESULT m_Result; // Result of the blindscan
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
public:
DtBsProgress();
~DtBsProgress();
};
// Function to receive asynchronous progess.
typedef void DtBsProgressFunc(DtBsProgress& Progress, void* pOpaque);
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtRfLevel -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure describing a RF-level on a frequency.
// Used by DtInpChannel::SpectrumScan to return the RF-levels found by scanning a
// frequency band.
//
struct DtRfLevel
{
__int64 m_FreqHz; // Center frequency of the RF level
int m_RfLevel; // RF level found in units of 0.1dBmV
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtSpsProgress -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure describing the progress of an asynchronous SpectrumScan.
// Used by DtInpChannel::SpectrumScan to return current state and the RF-Levels
// found by scanning a frequency band using the DtSpsProgressFunc callback.
//
struct DtSpsProgress {
enum SpsEvent
{
SPS_STEP, // One frequency step is completed
SPS_CANCELLED, // SpectrumScan is cancelled
SPS_DONE // SpectrumScan is completed
};
DtRfLevel m_DtRfLevel; // A single level
SpsEvent m_ProgressEvent; // Progress event
DTAPI_RESULT m_Result; // Result of the spectrumscan
//Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
public:
DtSpsProgress();
~DtSpsProgress();
};
// Function to receive asynchronous spectrum scan progess.
typedef void DtSpsProgressFunc(DtSpsProgress& Progress, void* pOpaque);
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ MAIN DTAPI CLASSES +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDevice -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class representing a DekTec Device
//
class DtDevice
{
// Constructor, destructor
public:
DtDevice();
virtual ~DtDevice();
private:
// No implementation is provided for the copy constructor
DtDevice(const DtDevice&);
// Public access functions
public:
virtual int Category(void);
virtual int ChanType(int Port);
virtual int FirmwareVersion(void);
virtual bool IsAttached(void);
virtual int TypeNumber(void);
virtual bool HasCaps(int Port, const DtCaps Caps) const;
// Public member functions
public:
virtual DTAPI_RESULT AttachToIpAddr(unsigned char Ip[4]);
virtual DTAPI_RESULT AttachToSerial(__int64 SerialNumber);
virtual DTAPI_RESULT AttachToSlot(int PciBusNumber, int SlotNumber);
virtual DTAPI_RESULT AttachToType(int TypeNumber, int DeviceNo=0);
virtual DTAPI_RESULT ClearGpsErrors();
virtual DTAPI_RESULT Detach(void);
virtual DTAPI_RESULT DetectIoStd(int Port, int& Value, int& SubValue);
virtual DTAPI_RESULT FlashDisplay(int NumFlashes=5, int OnTime=100, int OffTime=100);
virtual DTAPI_RESULT GetAttribute(int AttrId, int& AttrValue);
virtual DTAPI_RESULT GetAttribute(int Port, int AttrId, int& AttrValue);
virtual DTAPI_RESULT GetAttribute(int Port, int AttrId, DtModPars& ModParVals,
int& AttrValue);
virtual DTAPI_RESULT GetDescriptor(DtDeviceDesc& DvcDesc);
virtual DTAPI_RESULT GetDeviceDriverVersion(int& Major, int& Minor, int& BugFix,
int& Build);
virtual DTAPI_RESULT GetDisplayName(wchar_t* pName);
virtual DTAPI_RESULT GetDisplayName(char* pName);
virtual DTAPI_RESULT GetFanSpeed(int Fan, int& Rpm);
virtual DTAPI_RESULT GetFanTemperature(int Fan, int& Temp);
virtual DTAPI_RESULT GetFirmwareVersion(int& FirmwareVersion);
virtual DTAPI_RESULT GetGenlockState(int& State, int& RefVidStd);
virtual DTAPI_RESULT GetGenlockState(int& State);
virtual DTAPI_RESULT GetGpsStatus(int& Status, int& Error);
virtual DTAPI_RESULT GetGpsTime(int& GpsTime);
virtual DTAPI_RESULT GetIoConfig(DtIoConfig& IoCfg);
virtual DTAPI_RESULT GetIoConfig(int Port, int Group, int& Value);
virtual DTAPI_RESULT GetIoConfig(int Port, int Group, int& Value, int& SubValue);
virtual DTAPI_RESULT GetIoConfig(int Port, int Group, int& Value, int& SubValue,
__int64& ParXtra0);
virtual DTAPI_RESULT GetIoConfig(int Port, int Group, int& Value, int& SubValue,
__int64& ParXtra0, __int64& ParXtra1);
virtual DTAPI_RESULT GetNwSpeed(int Port, bool& Enable, int& Speed);
virtual DTAPI_RESULT GetRefClkCnt(int& RefClkCnt);
virtual DTAPI_RESULT GetRefClkCnt(__uint64& RefClkCnt);
virtual DTAPI_RESULT GetRefClkCnt(int& RefClkCnt, int& RefClkFreqHz);
virtual DTAPI_RESULT GetRefClkCnt(__uint64& RefClkCnt, int& RefClkFreqHz);
virtual DTAPI_RESULT GetRefClkFreq(int& RefClkFreqHz);
virtual DTAPI_RESULT GetStateFlags(int Port, int &StateFlags);
virtual DTAPI_RESULT GetUsbSpeed(int& UsbSpeed);
virtual DTAPI_RESULT GetVcxoState(bool& Enable, int& Lock, int& VcxoClkFreqHz);
virtual DTAPI_RESULT HwFuncScan(int NumEntries, int& NumEntriesResult,
DtHwFuncDesc* pHwFuncs);
virtual DTAPI_RESULT LedControl(int LedControl);
virtual DTAPI_RESULT RegisterCallback(pDtEventCallback Callback, void* pContext,
int EventTypes, void** pId = NULL);
virtual DTAPI_RESULT SetDisplayName(wchar_t* pName);
virtual DTAPI_RESULT SetDisplayName (char* pName);
virtual DTAPI_RESULT SetIoConfig(int Port, int Group, int Value, int SubValue = -1,
__int64 ParXtra0 = -1, __int64 ParXtra1 = -1);
virtual DTAPI_RESULT SetIoConfig(DtIoConfig* pIoConfigs, int Count);
virtual DTAPI_RESULT SetNwSpeed(int Port, bool Enable, int Speed);
virtual DTAPI_RESULT UnregisterCallback(void* pId);
virtual DTAPI_RESULT VpdDelete(const char* pTag);
virtual DTAPI_RESULT VpdDelete(const wchar_t* pTag);
virtual DTAPI_RESULT VpdRead(const char* pTag, char* pVpdItem);
virtual DTAPI_RESULT VpdRead(const wchar_t* pTag, wchar_t* pVpdItem);
virtual DTAPI_RESULT VpdRead(const char* pTag, char* pVpdItem, int& ItemSize);
virtual DTAPI_RESULT VpdRead(const wchar_t* pTag, char* pVpdItem, int& ItemSize);
virtual DTAPI_RESULT VpdWrite(const char* pTag, char* pVpdItem);
virtual DTAPI_RESULT VpdWrite(const wchar_t* pTag, wchar_t* pVpdItem);
virtual DTAPI_RESULT VpdWrite(const char* pTag, char* pVpdItem, int ItemSize);
virtual DTAPI_RESULT VpdWrite(const wchar_t* pTag, char* pVpdItem, int ItemSize);
protected:
virtual void LoadDeviceData();
private:
static void DtEventCallback(int Event, DtEventArgs* pArgs);
// Public attributes
public:
DtDeviceDesc m_DvcDesc; // Device descriptor, initialized in attach
DtHwFuncDesc* m_pHwf; // Hardware functions, initialized in attach
// Implementation data
private:
std::list<void*> m_EventSubscriberList;
// Friends
friend class DtInpChannel;
friend class DtOutpChannel;
public: // TODOSD should be protected
IDevice* m_pDev;
};
// Attribute identifiers
#define DTAPI_ATTR_LEVEL_MAX 1
#define DTAPI_ATTR_LEVEL_RANGE 2
#define DTAPI_ATTR_LEVEL_STEPSIZE 3
#define DTAPI_ATTR_RFFREQ_ABSMAX 4
#define DTAPI_ATTR_RFFREQ_ABSMIN 5
#define DTAPI_ATTR_RFFREQ_MAX 6
#define DTAPI_ATTR_RFFREQ_MIN 7
#define DTAPI_ATTR_SAMPRHW_ABSMAX 8
#define DTAPI_ATTR_SAMPRHW_ABSMIN 9
#define DTAPI_ATTR_SAMPRHW_HARDLIM 10
#define DTAPI_ATTR_SAMPRHW_MAX 11
#define DTAPI_ATTR_SAMPRHW_MIN 12
#define DTAPI_ATTR_SAMPRATE_ABSMAX 13
#define DTAPI_ATTR_SAMPRATE_ABSMIN 14
#define DTAPI_ATTR_SAMPRATE_MAX 15
#define DTAPI_ATTR_SAMPRATE_MIN 16
#define DTAPI_ATTR_NUM_FANS 17
#define DTAPI_ATTR_PCIE_REQ_BW 18
#define DTAPI_ATTR_PCIE_AVAIL_BW 19
// Order in which devices should be listed by DtapiDeviceScan/DtapiHwFuncScan
#define DTAPI_SCANORDER_ORIG 0 // Devices are returned in order determined by OS
#define DTAPI_SCANORDER_SN 1 // Devices are sorted by serial number
// String conversion - Device type number (e.g. "DTA-100", "DTA-102")
#define DTAPI_DVC2STR_TYPE_NMB 0
// String conversion - Device type number + location (e.g. "DTA-100 in slot 5");
#define DTAPI_DVC2STR_TYPE_AND_LOC 1
// String conversion - Device type number (e.g. "DTA-100", "DTA-102")
#define DTAPI_HWF2STR_TYPE_NMB 0
// String conversion - Device type number + port (e.g. "DTA-124 port 1")
#define DTAPI_HWF2STR_TYPE_AND_PORT 1
// String conversion - Device type number + location (e.g. "DTA-100 in slot 5");
#define DTAPI_HWF2STR_TYPE_AND_LOC 2
// String conversion - Interface type (e.g. "DVB-ASI" or "DVB-C")
#define DTAPI_HWF2STR_ITF_TYPE 3
// String conversion - Short version of interface type (e.g. "ASI" instead "DVB-ASI")
#define DTAPI_HWF2STR_ITF_TYPE_SHORT 4
// Current genlock state
#define DTAPI_GENL_NO_REF 1
#define DTAPI_GENL_LOCKING 2
#define DTAPI_GENL_LOCKED 3
// Status and error flags for GPS-Synchronisation
#define DTAPI_GPS_1PPS_SYNC 0x000001
#define DTAPI_GPS_10MHZ_SYNC 0x000002
#define DTAPI_GPS_1PPS_ERROR 0x000001
// Constants for GetStateFlags() on port level
#define DTAPI_STATE_FLAG_INSUFF_USB_BW 0x010000
#define DTAPI_STATE_FLAG_SDI_NO_LOCK 0x020000
#define DTAPI_STATE_FLAG_SDI_INVALID 0x040000
// Constants for GetStateFlags() on device level
#define DTAPI_STATE_FLAG_VPD_CORRUPT 0x000001
#define DTAPI_STATE_FLAG_NO_SERIAL 0x000002
#define DTAPI_STATE_FLAG_NO_USB3 0x000004
#define DTAPI_STATE_FLAG_SLEEPING 0x000008
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDtaPlusDevice -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Class representing a DekTec DTA-plus Device
//
class DtDtaPlusDevice
{
// Constructor, destructor
public:
DtDtaPlusDevice();
virtual ~DtDtaPlusDevice();
private:
// No implementation is provided for the copy constructor
DtDtaPlusDevice(const DtDtaPlusDevice&);
// Public access functions
public:
bool IsAttached(void);
// Public member functions
public:
DTAPI_RESULT AttachToDevice(const DtDtaPlusDeviceDesc &DvcDesc);
DTAPI_RESULT AttachToSerial(__int64 SerialNumber);
DTAPI_RESULT Detach();
DTAPI_RESULT GetDeviceStatus(int &Status);
DTAPI_RESULT GetTempControlStatus(int &ControlStatus);
DTAPI_RESULT GetTemperature(int &Temperature);
DTAPI_RESULT GetSerialNumber(__int64 &SerialNumber);
DTAPI_RESULT SetRfOutLevel(int Level);
DTAPI_RESULT SetFreq(int Freq);
private:
DtaPlusDevice* m_Dev;
};
// DTA-plus status codes
#define DTAPI_DTAPLUS_STATUS_OFF 0 // DTA-Plus not ready for operation
#define DTAPI_DTAPLUS_STATUS_ON 1 // DTA-Plus ready for operation
#define DTAPI_DTAPLUS_STATUS_ATTN_FOLLOW_UP 2 // DTA-Plus attenuator ctrl following up
#define DTAPI_DTAPLUS_STATUS_ATTN_FOLLOW_DOWN 3 //DTA-Plus attenuator ctrl following down
#define DTAPI_DTAPLUS_STATUS_DAC_FOLLOW_UP 4 // DTA-Plus DAC control following up
#define DTAPI_DTAPLUS_STATUS_DAC_FOLLOW_DOWN 5 // DTA-Plus DAC control following down
#define DTAPI_DTAPLUS_STATUS_HOLD 6 // DTA-Plus has valid input signal
#define DTAPI_DTAPLUS_STATUS_NO_SIGNAL 7 // DTA-Plus has no input signal
#define DTAPI_DTAPLUS_STATUS_OVER_POWER 8 // DTA-Plus input signal is too high
// DTA-plus temperature control states
#define DTAPI_DTAPLUS_TEMP_CONTROL_OFF 0 // DTA-Plus temperature control is off
#define DTAPI_DTAPLUS_TEMP_CONTROL_FAN_ON 1 // DTA-Plus fan is on
#define DTAPI_DTAPLUS_TEMP_CONTROL_HEATER_ON 2 // DTA-Plus heater is on
// Ethernet speed
#define DTAPI_NWSPEED_AUTO 0 // Set
#define DTAPI_NWSPEED_NOLIN 0 // Get
#define DTAPI_NWSPEED_10MB_HALF 1
#define DTAPI_NWSPEED_10MB_FULL 2
#define DTAPI_NWSPEED_100MB_HALF 3
#define DTAPI_NWSPEED_100MB_FULL 4
#define DTAPI_NWSPEED_1GB_MASTER 5
#define DTAPI_NWSPEED_1GB_SLAVE 6
// Microcode upload states
#define DTAPI_UCODE_NOT_LOADED 0
#define DTAPI_UCODE_LOADING 1
#define DTAPI_UCODE_LOADED 2
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtInpChannel -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class to represent an input channel
//
class DtInpChannel
{
public:
DtInpChannel();
virtual ~DtInpChannel();
private:
// No implementation is provided for the copy constructor
DtInpChannel(const DtInpChannel&);
public:
DtHwFuncDesc m_HwFuncDesc; // Hardware function descriptor
// Convenience functions
public:
int Category(void) { return m_HwFuncDesc.m_DvcDesc.m_Category; }
int FirmwareVersion(void) { return m_HwFuncDesc.m_DvcDesc.m_FirmwareVersion; }
bool IsAttached(void) { return m_pInp != NULL; }
int TypeNumber(void) { return m_HwFuncDesc.m_DvcDesc.m_TypeNumber; }
bool HasCaps(const DtCaps Caps) const
{
return ((m_HwFuncDesc.m_Flags & Caps) == Caps);
}
public:
DTAPI_RESULT AttachToPort(DtDevice* pDtDvc, int Port,
bool Exclusive=true, bool ProbeOnly=false);
DTAPI_RESULT BlindScan(int NumEntries, int& NumEntriesResult,
DtTransmitter* pScanResults, __int64 FreqHzSteps=10000000LL,
__int64 StartFreqHz=-1, __int64 EndFreqHz=-1);
DTAPI_RESULT BlindScan(DtBsProgressFunc* pCallback, void* pOpaque,
const DtDemodPars& DemodPars,
__int64 FreqHzSteps=10000000LL, __int64 StartFreqHz=-1,
__int64 EndFreqHz=-1);
DTAPI_RESULT CancelBlindScan();
DTAPI_RESULT CancelSpectrumScan();
DTAPI_RESULT ClearFifo();
DTAPI_RESULT ClearFlags(int Latched);
DTAPI_RESULT Detach(int DetachMode);
DTAPI_RESULT DetectIoStd(int& Value, int& SubValue);
DTAPI_RESULT Equalise(int EqualiserSetting);
DTAPI_RESULT GetConstellationPoints(int NumPoints, DtConstelPoint* pPoint);
DTAPI_RESULT GetDemodControl(int& ModType,
int& ParXtra0, int& ParXtra1, int& ParXtra2);
DTAPI_RESULT GetDemodControl(DtDemodPars* pDemodPars);
DTAPI_RESULT GetDescriptor(DtHwFuncDesc& HwFunDesc);
DTAPI_RESULT GetFifoLoad(int& FifoLoad);
DTAPI_RESULT GetFlags(int& Flags, int& Latched);
DTAPI_RESULT GetIoConfig(int Group, int& Value);
DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue);
DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue, __int64& ParXtra0);
DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue,
__int64& ParXtra0, __int64& ParXtra1);
DTAPI_RESULT GetIpPars(DtIpPars* pIpPars);
DTAPI_RESULT GetIpStat(DtIpStat* pIpStat);
DTAPI_RESULT GetMaxFifoSize(int& MaxFifoSize);
DTAPI_RESULT GetPars(int Count, DtPar* pPars);
DTAPI_RESULT GetRxClkFreq(int& RxClkFreq);
DTAPI_RESULT GetRxControl(int& RxControl);
DTAPI_RESULT GetRxMode(int& RxMode);
DTAPI_RESULT GetStatistics(int Count, DtStatistic* pStatistics);
DTAPI_RESULT GetStatistic(int Type, int& Statistic);
DTAPI_RESULT GetStatistic(int Type, double& Statistic);
DTAPI_RESULT GetStatistic(int Type, bool& Statistic);
DTAPI_RESULT GetStatus(int& PacketSize, int& NumInv, int& ClkDet,
int& AsiLock, int& RateOk, int& AsiInv);
DTAPI_RESULT GetStreamSelection(DtDabEtiStreamSelPars& StreamSel);
DTAPI_RESULT GetStreamSelection(DtDabStreamSelPars& StreamSel);
DTAPI_RESULT GetStreamSelection(DtDvbC2StreamSelPars& StreamSel);
DTAPI_RESULT GetStreamSelection(DtDvbTStreamSelPars& StreamSel);
DTAPI_RESULT GetStreamSelection(DtDvbT2StreamSelPars& StreamSel);
DTAPI_RESULT GetStreamSelection(DtIsdbtStreamSelPars& StreamSel);
DTAPI_RESULT GetStreamSelection(DtT2MiStreamSelPars& StreamSel);
DTAPI_RESULT GetSupportedStatistics(int& Count, DtStatistic* pStatistics);
DTAPI_RESULT GetTargetId(int& Present, int& TargetId);
DTAPI_RESULT GetTsRateBps(int& TsRate);
DTAPI_RESULT GetTunerFrequency(__int64& FreqHz, int TunerId=-1);
DTAPI_RESULT GetViolCount(int& ViolCount);
DTAPI_RESULT I2CLock(int TimeOut);
DTAPI_RESULT I2CUnlock(void);
DTAPI_RESULT I2CRead(int DvcAddr, char* pBuffer, int NumBytesToRead);
DTAPI_RESULT I2CWrite(int DvcAddr, char* pBuffer, int NumBytesToWrite);
DTAPI_RESULT I2CWriteRead(int DvcAddrWrite, char* pBufferWrite, int NumBytesToWrite,
int DvcAddrRead, char* pBufferRead, int NumBytesToRead);
DTAPI_RESULT LedControl(int LedControl);
DTAPI_RESULT LnbEnable(bool Enable);
DTAPI_RESULT LnbEnableTone(bool Enable);
DTAPI_RESULT LnbSetVoltage(int Level);
DTAPI_RESULT LnbSendBurst(int BurstType);
DTAPI_RESULT LnbSendDiseqcMessage(const unsigned char* MsgOut, int NumBytesOut);
DTAPI_RESULT LnbSendDiseqcMessage(const unsigned char* MsgOut, int NumBytesOut,
unsigned char* MsgIn, int& NumBytesIn);
DTAPI_RESULT PolarityControl(int Polarity);
DTAPI_RESULT Read(char* pBuffer, int NumBytesToRead);
DTAPI_RESULT Read(char* pBuffer, int NumBytesToRead, int TimeOut);
DTAPI_RESULT ReadFrame(unsigned int* pFrame, int& FrameSize, int TimeOut=-1);
DTAPI_RESULT RegisterDemodCallback(IDtDemodEvent* pIEvent, __int64 Events=-1);
DTAPI_RESULT Reset(int ResetMode);
DTAPI_RESULT SetAdcSampleRate(int SampleRate);
DTAPI_RESULT SetAntPower(int AntPower);
DTAPI_RESULT SetDemodControl(int ModType, int ParXtra0, int ParXtra1, int ParXtra2);
DTAPI_RESULT SetDemodControl(DtDemodPars *pDemodPars);
DTAPI_RESULT SetErrorStatsMode(int ModType, int Mode);
DTAPI_RESULT SetFifoSize(int FifoSize);
DTAPI_RESULT SetIoConfig(int Group, int Value, int SubValue = -1,
__int64 ParXtra0 = -1, __int64 ParXtra1 = -1);
DTAPI_RESULT SetIpPars(DtIpPars* pIpPars);
DTAPI_RESULT SetPars(int Count, DtPar* pPars);
DTAPI_RESULT SetRxControl(int RxControl);
DTAPI_RESULT SetRxMode(int RxMode);
DTAPI_RESULT SetStreamSelection(DtDabEtiStreamSelPars& StreamSel);
DTAPI_RESULT SetStreamSelection(DtDabStreamSelPars& StreamSel);
DTAPI_RESULT SetStreamSelection(DtDvbC2StreamSelPars& StreamSel);
DTAPI_RESULT SetStreamSelection(DtDvbTStreamSelPars& StreamSel);
DTAPI_RESULT SetStreamSelection(DtDvbT2StreamSelPars& StreamSel);
DTAPI_RESULT SetStreamSelection(DtIsdbtStreamSelPars& StreamSel);
DTAPI_RESULT SetStreamSelection(DtT2MiStreamSelPars& StreamSel);
DTAPI_RESULT StatisticsPollingEnable(bool Enable);
DTAPI_RESULT SetTuningMode(int Mode);
DTAPI_RESULT SetTunerFrequency(__int64 FreqHz, int TunerId=-1);
DTAPI_RESULT SpectrumScan(DtSpsProgressFunc* pCallback, void* pOpaque, int ScanType,
__int64 FreqHzSteps=1000000LL, __int64 StartFreqHz=-1L,
__int64 EndFreqHz=-1L);
DTAPI_RESULT Tune(__int64 FreqHz, int ModType,
int ParXtra0, int ParXtra1, int ParXtra2);
DTAPI_RESULT Tune(__int64 FreqHz, DtDemodPars *pDemodPars);
// Encapsulated data
private:
IXpMutex* m_pMTLock; // Multi-threading lock for Get/Read functions
void* m_pDetachLockCount;
int m_Port;
bool m_WantToDetach;
public: // TODOSD should be protected
InpChannel* m_pInp; // Input channel implementation
// Private helper functions
private:
DTAPI_RESULT DetachLock(void);
DTAPI_RESULT DetachUnlock(void);
DTAPI_RESULT ReadAccessLock(void);
DTAPI_RESULT ReadAccessUnlock(void);
DTAPI_RESULT ReadWithTimeOut(char* pBuf, int NumBytesToRead, int TimeOut = -1);
};
// Tuner freq has changed
#define DTAPI_EV_TUNE_FREQ_CHANGED 0x0000000000000001LL
// Tuning parameters have changed
#define DTAPI_EV_TUNE_PARS_CHANGED 0x0000000000000002LL
#define DTAPI_ERRORSTATS_BER 0 // Bit error rate (default)
#define DTAPI_ERRORSTATS_RS 1 // Reed-Solomon packet errors
// Feature not supported
#define DTAPI_NOT_SUPPORTED -1
// ASI Polarity-Control Status
#define DTAPI_ASIINV_NORMAL 0
#define DTAPI_ASIINV_INVERT 1
// ASI Input-Clock Lock
#define DTAPI_ASI_NOLOCK 0
#define DTAPI_ASI_INLOCK 1
// SDI Input-Clock Lock
#define DTAPI_GENLOCK_NOLOCK 0
#define DTAPI_GENLOCK_INLOCK 1
// Clock Detector
#define DTAPI_CLKDET_FAIL 0
#define DTAPI_CLKDET_OK 1
// Input Rate Ok
#define DTAPI_INPRATE_LOW 0
#define DTAPI_INPRATE_OK 1
// #Invalid bytes per packet
#define DTAPI_NUMINV_NONE 0
#define DTAPI_NUMINV_16 1
#define DTAPI_NUMINV_OTHER 2
// Packet Size
#define DTAPI_PCKSIZE_INV 0
#define DTAPI_PCKSIZE_188 2
#define DTAPI_PCKSIZE_204 3
// SDI Mode
#define DTAPI_SDIMODE_INV 0
#define DTAPI_SDIMODE_525 1
#define DTAPI_SDIMODE_625 2
// Receive Control
#define DTAPI_RXCTRL_IDLE 0
#define DTAPI_RXCTRL_RCV 1
// Receive mode for Transport Streams - Modes
#define DTAPI_RXMODE_TS 0x10
#define DTAPI_RXMODE_TS_MODE_BITS 0x0F
#define DTAPI_RXMODE_ST188 (DTAPI_RXMODE_TS | 0x01)
#define DTAPI_RXMODE_ST204 (DTAPI_RXMODE_TS | 0x02)
#define DTAPI_RXMODE_STMP2 (DTAPI_RXMODE_TS | 0x03)
#define DTAPI_RXMODE_STRAW (DTAPI_RXMODE_TS | 0x04)
#define DTAPI_RXMODE_STL3 (DTAPI_RXMODE_TS | 0x05)
#define DTAPI_RXMODE_STL3FULL (DTAPI_RXMODE_TS | 0x06)
#define DTAPI_RXMODE_IPRAW (DTAPI_RXMODE_TS | 0x07)
#define DTAPI_RXMODE_RAWASI (DTAPI_RXMODE_TS | 0x08)
#define DTAPI_RXMODE_STTRP (DTAPI_RXMODE_TS | 0x09)
#define DTAPI_RXMODE_TS_MASK (DTAPI_RXMODE_TS | DTAPI_RXMODE_TS_MODE_BITS)
// Receive mode for SDI - Modes
#define DTAPI_RXMODE_SDI 0x1000
#define DTAPI_RXMODE_SDI_MODE_BITS 0x0F00
#define DTAPI_RXMODE_SDI_FULL (DTAPI_RXMODE_SDI | 0x100)
#define DTAPI_RXMODE_SDI_ACTVID (DTAPI_RXMODE_SDI | 0x200)
#define DTAPI_RXMODE_SDI_MASK (DTAPI_RXMODE_SDI | DTAPI_RXMODE_SDI_MODE_BITS)
// Receive mode for SDI - Flags
#define DTAPI_RXMODE_SDI_HUFFMAN 0x00002000
#define DTAPI_RXMODE_SDI_10B 0x00004000
#define DTAPI_RXMODE_SDI_16B 0x00008000
#define DTAPI_RXMODE_SDI_10B_NBO 0x00010000
#define DTAPI_RXMODE_SDI_FRAMECOUNT 0x00020000
// Receive mode for SDI and Transport Streams - Common flags
#define DTAPI_RXMODE_TIMESTAMP32 0x01000000
#define DTAPI_RXMODE_TIMESTAMP64 0x02000000
// Demodulation status flags - FEC lock
#define DTAPI_DEMOD_FECLOCK_FAIL 0
#define DTAPI_DEMOD_FECLOCK_OK 1
// Demodulation status flags - Receiver lock
#define DTAPI_DEMOD_RCVLOCK_FAIL 0
#define DTAPI_DEMOD_RCVLOCK_OK 1
// Channel bands
#define DTAPI_BAND_BROADCAST_ONAIR 1
#define DTAPI_BAND_FCC_CABLE 2
#define DTAPI_BAND_IRC 3
#define DTAPI_BAND_HRC 4
// RF level bandwith
#define DTAPI_RFLVL_CHANNEL 0
#define DTAPI_RFLVL_NARROWBAND 1
// ADC sampling rates
#define DTAPI_ADCCLK_OFF 0 // Clock is off
#define DTAPI_ADCCLK_20M647 20647059 // 20.647059 MHz clock
#define DTAPI_ADCCLK_13M5 13500000 // 13.5 MHz clock
#define DTAPI_ADCCLK_27M 27000000 // 27.0 MHz clock
// LNB control values
#define DTAPI_LNB_13V 0 // LNB power 13V
#define DTAPI_LNB_18V 1 // LNB power 18V
#define DTAPI_LNB_14V 2 // LNB power 14V
#define DTAPI_LNB_19V 3 // LNB power 19V
// LNB burst types
#define DTAPI_LNB_BURST_A 0 // Burst A
#define DTAPI_LNB_BURST_B 1 // Burst B
// Tuner Parameters - Tuner standard
#define DTAPI_TUNMOD_QAM 0x1
#define DTAPI_TUNMOD_ATSC 0x2
#define DTAPI_TUNMOD_ISDBT 0x3
#define DTAPI_TUNMOD_DVBT 0x4
#define DTAPI_TUNMOD_DMBT 0x5
// Tuner Parameters - DTA-2131 specific - Value for automatic computation of parameters
#define DTAPI_TUN31_AUTO -1 // According to tuner standard
// Tuner Parameters - DTA-2131 specific - Low-pass filter cutoff frequency
#define DTAPI_TUN31_LPF_1_5MHZ 0 // 1.5 MHz low-pass filter
#define DTAPI_TUN31_LPF_6MHZ 1 // 6 MHz low-pass filter
#define DTAPI_TUN31_LPF_7MHZ 2 // 7 MHz low-pass filter
#define DTAPI_TUN31_LPF_8MHZ 3 // 8 MHz low-pass filter
#define DTAPI_TUN31_LPF_9MHZ 4 // 9 MHz low-pass filter
// Tuner Parameters - DTA-2131 specific - Low-pass filter offset
#define DTAPI_TUN31_LPF_0PCT 0 // 0% low-pass filter offset
#define DTAPI_TUN31_LPF_4PCT 1 // 4% low-pass filter offset
#define DTAPI_TUN31_LPF_8PCT 2 // 8% low-pass filter offset
#define DTAPI_TUN31_LPF_12PCT 3 // 12% low-pass filter offset
// Tuner Parameters - DTA-2131 specific - IF hi-pass filter
#define DTAPI_TUN31_HPF_DIS 0 // Disabled IF hi-pass filter
#define DTAPI_TUN31_HPF_0_4MHZ 1 // 0.4 MHz IF hi-pass filter
#define DTAPI_TUN31_HPF_0_85MHZ 2 // 0.85 MHz IF hi-pass filter
#define DTAPI_TUN31_HPF_1MHZ 3 // 1 MHz IF hi-pass filter
#define DTAPI_TUN31_HPF_1_5MHZ 4 // 1.5 MHz IF hi-pass filter
// Tuner Parameters - DTA-2131 specific - Notch settings
#define DTAPI_TUN31_NOTCH_DIS 0 // Disable
#define DTAPI_TUN31_NOTCH_ENA 1 // Enable
// Tuner Parameters - DTA-2139 specific - Agc specific
#define DTAPI_AGC1_FREE 0
#define DTAPI_AGC1_FROZEN 1
// Tuning mode - DTU-236A/238 specific
#define DTAPI_TUNING_NORMAL 0 // Standard tuning mode
#define DTAPI_TUNING_INDEPENDENT 1 // Multiple tuners, tuned independently
// Tuner ID - DTU-236A/238 specific
#define DTAPI_TUNERID_ALL -1 // ID for all tuners
#define DTAPI_TUNERID_MAIN 0 // ID for main tuner
#define DTAPI_TUNERID_MEASUREMENT 1 // ID for measurement tuner
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtOutpChannel -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class to represent a transport-stream or SDI output channel
//
class DtOutpChannel
{
public:
DtOutpChannel();
virtual ~DtOutpChannel();
private:
// No implementation is provided for the copy constructor
DtOutpChannel(const DtOutpChannel&);
public:
DtHwFuncDesc m_HwFuncDesc; // Hardware function descriptor
// Convenience functions
public:
int Category(void) { return m_HwFuncDesc.m_DvcDesc.m_Category; }
int FirmwareVersion(void) { return m_HwFuncDesc.m_DvcDesc.m_FirmwareVersion; }
bool IsAttached(void) { return m_pOutp != NULL; }
int TypeNumber(void) { return m_HwFuncDesc.m_DvcDesc.m_TypeNumber; }
bool HasCaps(const DtCaps Caps) const
{
return ((m_HwFuncDesc.m_Flags & Caps) == Caps);
}
public:
virtual DTAPI_RESULT AttachToPort(DtDevice* pDtDvc, int Port, bool ProbeOnly=false);
virtual DTAPI_RESULT ClearFifo(void);
virtual DTAPI_RESULT ClearFlags(int Latched);
virtual DTAPI_RESULT ClearSfnErrors();
virtual DTAPI_RESULT Detach(int DetachMode);
virtual DTAPI_RESULT GetAttribute(int AttrId, int& AttrValue);
virtual DTAPI_RESULT GetAttribute(int AttrId, DtModPars& ModParVals, int& AttrValue);
virtual DTAPI_RESULT GetDescriptor(DtHwFuncDesc& HwFunDesc);
virtual DTAPI_RESULT GetExtClkFreq(int& ExtClkFreq);
virtual DTAPI_RESULT GetFailsafeAlive(bool& Alive);
virtual DTAPI_RESULT GetFailsafeConfig(bool& Enable, int& Timeout);
virtual DTAPI_RESULT GetFifoLoad(int& FifoLoad, int SubChan=0);
virtual DTAPI_RESULT GetFifoSize(int& FifoSize);
virtual DTAPI_RESULT GetFifoSizeMax(int& FifoSizeMax);
virtual DTAPI_RESULT GetFifoSizeTyp(int& FifoSizeTyp);
virtual DTAPI_RESULT GetFlags(int& Status, int& Latched);
virtual DTAPI_RESULT GetIoConfig(int Group, int& Value);
virtual DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue);
virtual DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue,
__int64& ParXtra0);
virtual DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue,
__int64& ParXtra0, __int64& ParXtra1);
virtual DTAPI_RESULT GetIpPars(DtIpPars* pIpPars);
virtual DTAPI_RESULT GetMaxFifoSize(int& MaxFifoSize);
virtual DTAPI_RESULT GetModControl(int& ModType, int& ParXtra0, int& ParXtra1,
int& ParXtra2, void*& pXtraPars);
virtual DTAPI_RESULT GetOutputLevel(int& LeveldBm);
virtual DTAPI_RESULT GetRfControl(__int64& RfFreq, int& LockStatus);
virtual DTAPI_RESULT GetRfControl(int& RfFreq, int& LockStatus);
virtual DTAPI_RESULT GetRfControl(double& RfFreq, int& LockStatus);
virtual DTAPI_RESULT GetSfnMaxTimeDiff(int& TimeDiff);
virtual DTAPI_RESULT GetSfnModDelay(int& ModDelay);
virtual DTAPI_RESULT GetSfnStatus(int& Status, int& Error);
virtual DTAPI_RESULT GetSpiClk(int& SpiClk);
virtual DTAPI_RESULT GetTargetId(int& Present, int& TargetId);
virtual DTAPI_RESULT GetTsRateBps(int& TsRate);
virtual DTAPI_RESULT GetTsRateBps(DtFractionInt& TsRate);
virtual DTAPI_RESULT GetTxControl(int& TxControl);
virtual DTAPI_RESULT GetTxMode(int& TxMode, int& TxStuffMode);
virtual DTAPI_RESULT LedControl(int LedControl);
virtual DTAPI_RESULT Reset(int ResetMode);
virtual DTAPI_RESULT SetChannelModelling(bool CmEnable, DtCmPars& CmPars);
virtual DTAPI_RESULT SetCustomRollOff(bool Enable, DtFilterPars& Filter);
virtual DTAPI_RESULT SetFailsafeAlive();
virtual DTAPI_RESULT SetFailsafeConfig(bool Enable, int Timeout = 0);
virtual DTAPI_RESULT SetFifoSize(int FifoSize);
virtual DTAPI_RESULT SetFifoSizeMax(void);
virtual DTAPI_RESULT SetFifoSizeTyp(void);
virtual DTAPI_RESULT SetIoConfig(int Group, int Value, int SubValue = -1,
__int64 ParXtra0 = -1, __int64 ParXtra1 = -1);
virtual DTAPI_RESULT SetIpPars(DtIpPars* pIpPars);
virtual DTAPI_RESULT SetIsdbtCaptFile(void* IsdbtFile);
virtual DTAPI_RESULT SetModControl(DtCmmbPars&);
virtual DTAPI_RESULT SetModControl(DtDvbC2Pars&);
virtual DTAPI_RESULT SetModControl(DtDvbCidPars&);
virtual DTAPI_RESULT SetModControl(DtDvbS2Pars&);
virtual DTAPI_RESULT SetModControl(DtDvbT2Pars&);
virtual DTAPI_RESULT SetModControl(DtIqDirectPars&);
virtual DTAPI_RESULT SetModControl(DtIsdbsPars&);
virtual DTAPI_RESULT SetModControl(DtIsdbtPars&);
virtual DTAPI_RESULT SetModControl(DtIsdbTmmPars&);
virtual DTAPI_RESULT SetModControl(int ModType, int ParXtra0, int ParXtra1,
int ParXtra2);
virtual DTAPI_RESULT SetModControl(unsigned char*);
virtual DTAPI_RESULT SetMultiModConfig(int NumSubChan, int FreqSpacing);
virtual DTAPI_RESULT SetOutputLevel(int LeveldBm);
virtual DTAPI_RESULT SetPhaseNoiseControl(DtPhaseNoisePars& PnPars);
virtual DTAPI_RESULT SetPower(int Power);
virtual DTAPI_RESULT SetRfControl(__int64 RfFreq);
virtual DTAPI_RESULT SetRfControl(double RfFreq);
virtual DTAPI_RESULT SetRfControl(int RfFreq);
virtual DTAPI_RESULT SetRfMode(int RfMode);
virtual DTAPI_RESULT SetRfMode(int Sel, int Mode);
virtual DTAPI_RESULT SetSfnAllowedTimeDiff(int TimeDiff);
virtual DTAPI_RESULT SetSfnControl(int SnfMode, int TimeOffset);
virtual DTAPI_RESULT SetSnr(int Mode, int Snr);
virtual DTAPI_RESULT SetSpiClk(int SpiClk);
virtual DTAPI_RESULT SetTsRateBps(int TsRate);
virtual DTAPI_RESULT SetTsRateBps(DtFractionInt TsRate);
virtual DTAPI_RESULT SetTsRateRatio(int TsRate, int ClockRef);
virtual DTAPI_RESULT SetTxControl(int TxControl);
virtual DTAPI_RESULT SetTxMode(int TxMode, int StuffMode);
virtual DTAPI_RESULT SetTxPolarity(int TxPolarity);
virtual DTAPI_RESULT Write(char* pBuffer, int NumBytesToWrite, int SubChan=0);
// Undocumented
virtual DTAPI_RESULT GetModBufLoads(bool&, int&, int&, int&);
public: // TODOSD should be protected
OutpChannel* m_pOutp; // Output channel implementation
private:
void* m_pDetachLockCount;
bool m_WantToDetach;
DTAPI_RESULT DetachLock(void);
DTAPI_RESULT DetachUnlock(void);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtMplpOutpChannel -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMplpOutpChannel : public DtOutpChannel
{
public:
DtMplpOutpChannel();
virtual ~DtMplpOutpChannel();
private:
// No implementation is provided for the copy constructor
DtMplpOutpChannel(const DtMplpOutpChannel&);
public:
virtual bool IsAttached(void);
public:
virtual DTAPI_RESULT AttachToPort(DtDevice* pDtDvc, int Port, bool ProbeOnly=false);
virtual DTAPI_RESULT ClearFifo(void);
virtual DTAPI_RESULT ClearFlags(int Latched);
virtual DTAPI_RESULT ClearSfnErrors();
virtual DTAPI_RESULT Detach(int DetachMode);
virtual DTAPI_RESULT GetAttribute(int AttrId, int& AttrValue);
virtual DTAPI_RESULT GetAttribute(int AttrId, DtModPars& ModParVals, int& AttrValue);
virtual DTAPI_RESULT GetDescriptor(DtHwFuncDesc& HwFunDesc);
virtual DTAPI_RESULT GetExtClkFreq(int& ExtClkFreq);
virtual DTAPI_RESULT GetFailsafeAlive(bool& Alive);
virtual DTAPI_RESULT GetFailsafeConfig(bool& Enable, int& Timeout);
virtual DTAPI_RESULT GetFifoLoad(int& FifoLoad, int SubChan=0);
virtual DTAPI_RESULT GetFifoSize(int& FifoSize);
virtual DTAPI_RESULT GetFifoSizeMax(int& FifoSizeMax);
virtual DTAPI_RESULT GetFifoSizeTyp(int& FifoSizeTyp);
virtual DTAPI_RESULT GetFlags(int& Status, int& Latched);
virtual DTAPI_RESULT GetIoConfig(int Group, int& Value);
virtual DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue);
virtual DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue,
__int64& ParXtra0);
virtual DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue,
__int64& ParXtra0, __int64& ParXtra1);
virtual DTAPI_RESULT GetIpPars(DtIpPars* pIpPars);
virtual DTAPI_RESULT GetMaxFifoSize(int& MaxFifoSize);
virtual DTAPI_RESULT GetModControl(int& ModType, int& CodeRate,
int& ParXtra1, int& ParXtra2, void*& pXtraPars);
virtual DTAPI_RESULT GetOutputLevel(int& LeveldBm);
virtual DTAPI_RESULT GetRfControl(__int64& RfFreq, int& LockStatus);
virtual DTAPI_RESULT GetRfControl(int& RfFreq, int& LockStatus);
virtual DTAPI_RESULT GetRfControl(double& RfFreq, int& LockStatus);
virtual DTAPI_RESULT GetSfnMaxTimeDiff(int& TimeDiff);
virtual DTAPI_RESULT GetSfnModDelay(int& ModDelay);
virtual DTAPI_RESULT GetSfnStatus(int& Status, int& Error);
virtual DTAPI_RESULT GetSpiClk(int& SpiClk);
virtual DTAPI_RESULT GetTargetId(int& Present, int& TargetId);
virtual DTAPI_RESULT GetTsRateBps(int& TsRate);
virtual DTAPI_RESULT GetTsRateBps(DtFractionInt& TsRate);
virtual DTAPI_RESULT GetTxControl(int& TxControl);
virtual DTAPI_RESULT GetTxMode(int& TxMode, int& TxStuffMode);
virtual DTAPI_RESULT LedControl(int LedControl);
virtual DTAPI_RESULT Reset(int ResetMode);
virtual DTAPI_RESULT SetChannelModelling(bool CmEnable, DtCmPars& CmPars);
virtual DTAPI_RESULT SetCustomRollOff(bool Enable, DtFilterPars& Filter);
virtual DTAPI_RESULT SetFailsafeConfig(bool Enable, int Timeout = 0);
virtual DTAPI_RESULT SetFailsafeAlive();
virtual DTAPI_RESULT SetFifoSize(int FifoSize);
virtual DTAPI_RESULT SetFifoSizeMax(void);
virtual DTAPI_RESULT SetFifoSizeTyp(void);
virtual DTAPI_RESULT SetIoConfig(int Group, int Value, int SubValue = -1,
__int64 ParXtra0 = -1, __int64 ParXtra1 = -1);
virtual DTAPI_RESULT SetIpPars(DtIpPars* pIpPars);
virtual DTAPI_RESULT SetIsdbtCaptFile(void* IsdbtFile);
virtual DTAPI_RESULT SetModControl(DtCmmbPars&);
virtual DTAPI_RESULT SetModControl(DtDvbC2Pars&);
virtual DTAPI_RESULT SetModControl(DtDvbCidPars&);
virtual DTAPI_RESULT SetModControl(DtDvbS2Pars&);
virtual DTAPI_RESULT SetModControl(DtDvbT2Pars&);
virtual DTAPI_RESULT SetModControl(DtIqDirectPars&);
virtual DTAPI_RESULT SetModControl(DtIsdbsPars&);
virtual DTAPI_RESULT SetModControl(DtIsdbtPars&);
virtual DTAPI_RESULT SetModControl(DtIsdbTmmPars&);
virtual DTAPI_RESULT SetModControl(int ModType, int ParXtra0, int ParXtra1,
int ParXtra2);
virtual DTAPI_RESULT SetModControl(unsigned char*);
virtual DTAPI_RESULT SetMultiModConfig(int NumSubChan, int FreqSpacing);
virtual DTAPI_RESULT SetOutputLevel(int LeveldBm);
virtual DTAPI_RESULT SetPhaseNoiseControl(DtPhaseNoisePars& PnPars);
virtual DTAPI_RESULT SetPower(int Power);
virtual DTAPI_RESULT SetRfControl(__int64 RfFreq);
virtual DTAPI_RESULT SetRfControl(double RfFreq);
virtual DTAPI_RESULT SetRfControl(int RfFreq);
virtual DTAPI_RESULT SetRfMode(int RfMode);
virtual DTAPI_RESULT SetRfMode(int Sel, int Mode);
virtual DTAPI_RESULT SetSfnAllowedTimeDiff(int TimeDiff);
virtual DTAPI_RESULT SetSfnControl(int SnfMode, int TimeOffset);
virtual DTAPI_RESULT SetSnr(int Mode, int Snr);
virtual DTAPI_RESULT SetSpiClk(int SpiClk);
virtual DTAPI_RESULT SetTsRateBps(int TsRate);
virtual DTAPI_RESULT SetTsRateBps(DtFractionInt TsRate);
virtual DTAPI_RESULT SetTsRateRatio(int TsRate, int ClockRef);
virtual DTAPI_RESULT SetTxControl(int TxControl);
virtual DTAPI_RESULT SetTxMode(int TxMode, int TxStuffMode);
virtual DTAPI_RESULT SetTxPolarity(int TxPolarity);
virtual DTAPI_RESULT Write(char* pBuffer, int NumBytesToWrite, int SubChan=0);
// Undocumented
virtual DTAPI_RESULT GetModBufLoads(bool&, int&, int&, int&);
// IMplpModulator interface implementation
public:
virtual DTAPI_RESULT AttachVirtual(DtDevice* pDtDvc,
bool (*pFunc)(void*, DtVirtualOutData*), void* pOpaque);
virtual DTAPI_RESULT GetMplpFifoFree(int FifoIdx, int& FifoFree);
virtual DTAPI_RESULT GetMplpFifoLoad(int FifoIdx, int& FifoLoad);
virtual DTAPI_RESULT GetMplpFifoSize(int FifoIdx, int& FifoSize);
virtual DTAPI_RESULT GetMplpModStatus(DtDvbC2ModStatus* pMplpModStat);
virtual DTAPI_RESULT GetMplpModStatus(DtDvbS2ModStatus* pMplpModStat);
virtual DTAPI_RESULT GetMplpModStatus(DtDvbT2ModStatus* pMplpModStat);
virtual DTAPI_RESULT GetMplpModStatus(DtDvbT2ModStatus* pMplpModStat1,
DtDvbT2ModStatus* pMplpModStat2);
virtual DTAPI_RESULT SetMplpChannelModelling(bool CmEnable, DtCmPars&, int Chan=0);
virtual DTAPI_RESULT WriteMplp(int FifoIdx, char* pBuffer, int NumBytesToWrite);
virtual DTAPI_RESULT WriteMplpPacket(int FifoIdx, char* pPacket, int PacketSize);
private:
bool m_IsAttachedToVirtual;
MplpHelper* m_pMplpHelper;
};
// Detach mode flags
#define DTAPI_INSTANT_DETACH 1
#define DTAPI_WAIT_UNTIL_SENT 2
// Equaliser settings
#define DTAPI_EQUALISER_OFF 0
#define DTAPI_EQUALISER_ON 1
// LED control
#define DTAPI_LED_OFF 0
#define DTAPI_LED_GREEN 1
#define DTAPI_LED_RED 2
#define DTAPI_LED_YELLOW 3
#define DTAPI_LED_BLUE 4
#define DTAPI_LED_HARDWARE 5
// Noise modes
#define DTAPI_NOISE_DISABLED 0 // No noise generation
#define DTAPI_NOISE_WNG_HW 1 // White noise generator (hardware)
// Polarity control
#define DTAPI_POLARITY_AUTO 0
#define DTAPI_POLARITY_NORMAL 2
#define DTAPI_POLARITY_INVERT 3
// Power mode
#define DTAPI_POWER_OFF 0
#define DTAPI_POWER_ON 1
// Reset mode
#define DTAPI_FIFO_RESET 0
#define DTAPI_FULL_RESET 1
// RF PLL lock status
#define DTAPI_RFPLL_LOCK1 1 // RF PLL #1 is in lock
#define DTAPI_RFPLL_LOCK2 2 // RF PLL #2 is in lock
#define DTAPI_RFPLL_LOCK3 4 // RF PLL #3 is in lock
// Receiver status flags
#define DTAPI_RX_FIFO_OVF 0x0002
#define DTAPI_RX_SYNC_ERR 0x0004
#define DTAPI_RX_RATE_OVF 0x0008
#define DTAPI_RX_TARGET_ERR 0x0010
#define DTAPI_RX_LINK_ERR 0x0040
#define DTAPI_RX_DATA_ERR 0x0080
#define DTAPI_RX_DRV_BUF_OVF 0x0100
#define DTAPI_RX_SYNTAX_ERR 0x0200
// Single Frequency Network status andd error flags
#define DTAPI_SFN_IN_SYNC 0x0001
#define DTAPI_SFN_TOO_EARLY_ERR 0x0001
#define DTAPI_SFN_TOO_LATE_ERR 0x0002
#define DTAPI_SFN_ABSTIME_ERR 0x0004
#define DTAPI_SFN_DISCTIME_ERR 0x0008
#define DTAPI_SFN_NOTIME_ERR 0x0010
#define DTAPI_SFN_START_ERR 0x0020
// Single Frequency operation mode
#define DTAPI_SFN_MODE_DISABLED 0x0000
#define DTAPI_SFN_MODE_AT_1PPS 0x0001
#define DTAPI_SFN_MODE_IQPCK 0x0002
#define DTAPI_SFN_MODE_DVBT_MIP 0x0003
#define DTAPI_SFN_MODE_T2MI 0x0004
// Transmit status flags
#define DTAPI_TX_FIFO_UFL 0x0002
#define DTAPI_TX_SYNC_ERR 0x0004
#define DTAPI_TX_READBACK_ERR 0x0008
#define DTAPI_TX_TARGET_ERR 0x0010
#define DTAPI_TX_MUX_OVF 0x0020
#define DTAPI_TX_FIFO_OVF 0x0020
#define DTAPI_TX_LINK_ERR 0x0040
#define DTAPI_TX_DATA_ERR 0x0080
#define DTAPI_TX_CPU_UFL 0x0100
#define DTAPI_TX_DMA_UFL 0x0200
// Target adapter present
#define DTAPI_NO_CONNECTION 0
#define DTAPI_DVB_SPI_SINK 1 // For output channels
#define DTAPI_DVB_SPI_SOURCE 1 // For input channels
#define DTAPI_TARGET_PRESENT 2
#define DTAPI_TARGET_UNKNOWN 3
// Transmit control
#define DTAPI_TXCTRL_IDLE 1
#define DTAPI_TXCTRL_HOLD 2
#define DTAPI_TXCTRL_SEND 3
// Transmit mode for Transport Streams - Modes
#define DTAPI_TXMODE_TS 0x10
#define DTAPI_TXMODE_TS_MODE_BITS 0x0F
#define DTAPI_TXMODE_188 (DTAPI_TXMODE_TS | 0x01)
#define DTAPI_TXMODE_192 (DTAPI_TXMODE_TS | 0x02)
#define DTAPI_TXMODE_204 (DTAPI_TXMODE_TS | 0x03)
#define DTAPI_TXMODE_ADD16 (DTAPI_TXMODE_TS | 0x04)
#define DTAPI_TXMODE_MIN16 (DTAPI_TXMODE_TS | 0x05)
#define DTAPI_TXMODE_IPRAW (DTAPI_TXMODE_TS | 0x06)
#define DTAPI_TXMODE_RAW (DTAPI_TXMODE_TS | 0x07)
#define DTAPI_TXMODE_RAWASI (DTAPI_TXMODE_TS | 0x08)
#define DTAPI_TXMODE_TS_MASK (DTAPI_TXMODE_TS | DTAPI_TXMODE_TS_MODE_BITS)
// Transmit mode for Transport Streams - DVB-ASI flags
#define DTAPI_TXMODE_BURST 0x20
#define DTAPI_TXMODE_TXONTIME 0x40
// Transmit mode for SDI - Modes
#define DTAPI_TXMODE_SDI 0x1000
#define DTAPI_TXMODE_SDI_MODE_BITS 0x0F00
#define DTAPI_TXMODE_SDI_FULL (DTAPI_TXMODE_SDI | 0x100)
#define DTAPI_TXMODE_SDI_ACTVID (DTAPI_TXMODE_SDI | 0x200)
#define DTAPI_TXMODE_SDI_MASK (DTAPI_TXMODE_SDI | DTAPI_TXMODE_SDI_MODE_BITS)
// Transmit mode for SDI - Flags
#define DTAPI_TXMODE_SDI_HUFFMAN 0x00002000
#define DTAPI_TXMODE_SDI_10B 0x00004000
#define DTAPI_TXMODE_SDI_16B 0x00008000
#define DTAPI_TXMODE_SDI_10B_NBO 0x00010000
// Stuff mode - TS : Null-packet stuffing on/off; SDI: Black-frame stuffing on/off
#define DTAPI_TXSTUFF_MODE_OFF 0
#define DTAPI_TXSTUFF_MODE_ON 1
// Transmit polarity
#define DTAPI_TXPOL_NORMAL 0
#define DTAPI_TXPOL_INVERTED 1
// Upconverter RF modes
#define DTAPI_UPCONV_MODE 0 // Selects NORMAL/MUTE/CW/CWI/CWQ
#define DTAPI_UPCONV_MODE_MSK 0xF // Mask for mode field
#define DTAPI_UPCONV_NORMAL 0
#define DTAPI_UPCONV_MUTE 1
#define DTAPI_UPCONV_CW 2
#define DTAPI_UPCONV_CWI 3
#define DTAPI_UPCONV_CWQ 4
#define DTAPI_UPCONV_SPECINV 0x100 // Can be OR-ed with other RF modes
// USB speed modes
#define DTAPI_USB_FULL_SPEED 0
#define DTAPI_USB_HIGH_SPEED 1
#define DTAPI_USB_SUPER_SPEED 2
// PCIe standards
#define DTAPI_PCIE_GEN_UNKNOWN 0 // PCIe Gen is unknown
#define DTAPI_PCIE_GEN1 1 // PCIe Gen 1 (2.5Gbps per link)
#define DTAPI_PCIE_GEN2 2 // PCIe Gen 2 (5.0Gbps per link)
#define DTAPI_PCIE_GEN3 3 // PCIe Gen 3 (8.0Gbps per link)
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- Modulation Parameters -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
// Modulation types
#define DTAPI_MOD_DVBS_QPSK 0 // Native DVB-S on DTA-107
#define DTAPI_MOD_DVBS_BPSK 1
#define DTAPI_MOD_QAM4 3
#define DTAPI_MOD_QAM16 4
#define DTAPI_MOD_QAM32 5
#define DTAPI_MOD_QAM64 6
#define DTAPI_MOD_QAM128 7
#define DTAPI_MOD_QAM256 8
#define DTAPI_MOD_DVBT 9
#define DTAPI_MOD_ATSC 10
#define DTAPI_MOD_DVBT2 11
#define DTAPI_MOD_ISDBT 12
#define DTAPI_MOD_ISDBS 13
#define DTAPI_MOD_IQDIRECT 15
#define DTAPI_MOD_IQ_2131 16 // DTA-2131 specific (de)modulation
#define DTAPI_MOD_DVBS2_QPSK 32
#define DTAPI_MOD_DVBS2_8PSK 33
#define DTAPI_MOD_DVBS2_16APSK 34
#define DTAPI_MOD_DVBS2_32APSK 35
#define DTAPI_MOD_DVBS2_L3 36
#define DTAPI_MOD_DVBS2 37
#define DTAPI_MOD_DMBTH 48
#define DTAPI_MOD_ADTBT 49
#define DTAPI_MOD_CMMB 50
#define DTAPI_MOD_T2MI 51
#define DTAPI_MOD_DVBC2 52
#define DTAPI_MOD_DAB 53
#define DTAPI_MOD_QAM_AUTO 54
#define DTAPI_MOD_ATSC_MH 55
#define DTAPI_MOD_ISDBTMM 56
// Modulation types DVB-S2X specific
#define DTAPI_MOD_S2X_QPSK_VLSNR 57 // DVB-S2X, QPSK, very low SNR
#define DTAPI_MOD_S2X_BPSK_VLSNR 58 // DVB-S2X, BPSK, very low SNR
#define DTAPI_MOD_S2X_BPSK_S_VLSNR 59 // DVB-S2X, BPSK-S, very low SNR
#define DTAPI_MOD_S2X_8APSK_L 60 // DVB-S2X, 8APSK-L
#define DTAPI_MOD_S2X_16APSK_L 61 // DVB-S2X, 16APSK-L
#define DTAPI_MOD_S2X_32APSK_L 62 // DVB-S2X, 32APSK-L
#define DTAPI_MOD_S2X_64APSK 63 // DVB-S2X, 64APSK
#define DTAPI_MOD_S2X_64APSK_L 64 // DVB-S2X, 64APSK-L
#define DTAPI_MOD_S2X_128APSK 65 // DVB-S2X, 128APSK
#define DTAPI_MOD_S2X_256APSK 66 // DVB-S2X, 256APSK-L
#define DTAPI_MOD_S2X_256APSK_L 67 // DVB-S2X, 256APSK
#define DTAPI_MOD_DVBS2X_L3 68 // L3 modulation with S2X support
#define DTAPI_MOD_TYPE_AUTO -1 // Auto detect modulation type
#define DTAPI_MOD_TYPE_UNK -1 // Unknown modulation type
// Modulation parameters - Common - ParXtra2
#define DTAPI_MOD_SYMRATE_AUTO -1 // Auto detect symbol rate
#define DTAPI_MOD_SYMRATE_UNK -1 // Symbol rate if unknown
// Modulation parameters - ATSC - ParXtra0
#define DTAPI_MOD_ATSC_VSB8 0x00000000 // 8-VSB, 10.762MBd, 19.392Mbps
#define DTAPI_MOD_ATSC_VSB16 0x00000001 // 16-VSB, 10.762MBd, 38.785Mbps
#define DTAPI_MOD_ATSC_VSB_AUTO 0x00000003 // Auto detect constellation
#define DTAPI_MOD_ATSC_VSB_UNK 0x00000003 // Unknown constellation
#define DTAPI_MOD_ATSC_VSB_MSK 0x00000003 // Constellation mask
// Modulation parameters - DTMB - Bandwidth
#define DTAPI_MOD_DTMB_5MHZ 0x00000001
#define DTAPI_MOD_DTMB_6MHZ 0x00000002
#define DTAPI_MOD_DTMB_7MHZ 0x00000003
#define DTAPI_MOD_DTMB_8MHZ 0x00000004
#define DTAPI_MOD_DTMB_BW_AUTO 0x0000000F // Auto detect
#define DTAPI_MOD_DTMB_BW_UNK 0x0000000F // Unknown
#define DTAPI_MOD_DTMB_BW_MSK 0x0000000F
// Modulation parameters - DTMB - Code rate
#define DTAPI_MOD_DTMB_0_4 0x00000100 // 0.4
#define DTAPI_MOD_DTMB_0_6 0x00000200 // 0.6
#define DTAPI_MOD_DTMB_0_8 0x00000300 // 0.8
#define DTAPI_MOD_DTMB_RATE_AUTO 0x00000F00 // Auto detect
#define DTAPI_MOD_DTMB_RATE_UNK 0x00000F00 // Unknown
#define DTAPI_MOD_DTMB_RATE_MSK 0x00000F00 // Mask
// Modulation parameters - DTMB - Constellation
#define DTAPI_MOD_DTMB_QAM4NR 0x00001000 // 4-QAM-NR
#define DTAPI_MOD_DTMB_QAM4 0x00002000 // 4-QAM
#define DTAPI_MOD_DTMB_QAM16 0x00003000 // 16-QAM
#define DTAPI_MOD_DTMB_QAM32 0x00004000 // 32-QAM
#define DTAPI_MOD_DTMB_QAM64 0x00005000 // 64-QAM
#define DTAPI_MOD_DTMB_CO_AUTO 0x0000F000 // Auto detect
#define DTAPI_MOD_DTMB_CO_UNK 0x0000F000 // Unknown
#define DTAPI_MOD_DTMB_CO_MSK 0x0000F000 // Mask
// Modulation parameters - DTMB - Frame header mode
#define DTAPI_MOD_DTMB_PN420 0x00010000 // PN420
#define DTAPI_MOD_DTMB_PN595 0x00020000 // PN595
#define DTAPI_MOD_DTMB_PN945 0x00030000 // PN945
#define DTAPI_MOD_DTMB_PN_AUTO 0x000F0000 // Auto detect
#define DTAPI_MOD_DTMB_PN_UNK 0x000F0000 // Unknown
#define DTAPI_MOD_DTMB_PN_MSK 0x000F0000 // Mask
// Modulation parameters - DTMB - Interleaver mode
#define DTAPI_MOD_DTMB_IL_1 0x00100000 // Interleaver mode 1: B=54, M=240
#define DTAPI_MOD_DTMB_IL_2 0x00200000 // Interleaver mode 2: B=54, M=720
#define DTAPI_MOD_DTMB_IL_AUTO 0x00F00000 // Auto detect
#define DTAPI_MOD_DTMB_IL_UNK 0x00F00000 // Unknown
#define DTAPI_MOD_DTMB_IL_MSK 0x00F00000 // Mask
// Modulation parameters - DTMB - pilots
#define DTAPI_MOD_DTMB_NO_PILOTS 0x01000000 // No pilots
#define DTAPI_MOD_DTMB_PILOTS 0x02000000 // Pilots, C=1 only
#define DTAPI_MOD_DTMB_PIL_AUTO 0x0F000000 // Auto detect
#define DTAPI_MOD_DTMB_PIL_UNK 0x0F000000 // Unknown
#define DTAPI_MOD_DTMB_PIL_MSK 0x0F000000 // Mask
// Modulation parameters - DTMB - Use frame numbering
#define DTAPI_MOD_DTMB_NO_FRM_NO 0x10000000 // No frame numbering
#define DTAPI_MOD_DTMB_USE_FRM_NO 0x20000000 // Use frame numbers
#define DTAPI_MOD_DTMB_UFRM_AUTO 0xF0000000 // Auto detect
#define DTAPI_MOD_DTMB_UFRM_UNK 0xF0000000 // Unknown
#define DTAPI_MOD_DTMB_UFRM_MSK 0xF0000000 // Mask
// Modulation parameters - DVB-S, DVB-S2
#define DTAPI_MOD_1_2 0x0 // Code rate 1/2
#define DTAPI_MOD_2_3 0x1 // Code rate 2/3
#define DTAPI_MOD_3_4 0x2 // Code rate 3/4
#define DTAPI_MOD_4_5 0x3 // Code rate 4/5
#define DTAPI_MOD_5_6 0x4 // Code rate 5/6
#define DTAPI_MOD_6_7 0x5 // Code rate 6/7
#define DTAPI_MOD_7_8 0x6 // Code rate 7/8
#define DTAPI_MOD_1_4 0x7 // Code rate 1/4
#define DTAPI_MOD_1_3 0x8 // Code rate 1/3
#define DTAPI_MOD_2_5 0x9 // Code rate 2/5
#define DTAPI_MOD_3_5 0xA // Code rate 3/5
#define DTAPI_MOD_8_9 0xB // Code rate 8/9
#define DTAPI_MOD_9_10 0xC // Code rate 9/10
#define DTAPI_MOD_CR_AUTO 0xF // Auto detect code rate
#define DTAPI_MOD_CR_UNK 0xF // Unknown code rate
//Coderates DVB-S2X specific
#define DTAPI_MOD_1_5 0x10 // Code rate 1/5
#define DTAPI_MOD_2_9 0x11 // Code rate 2/9
#define DTAPI_MOD_11_45 0x12 // Code rate 11/45
#define DTAPI_MOD_4_15 0x13 // Code rate 4/15
#define DTAPI_MOD_13_45 0x14 // Code rate 13/45
#define DTAPI_MOD_14_45 0x15 // Code rate 14/45
#define DTAPI_MOD_9_20 0x16 // Code rate 9/20
#define DTAPI_MOD_7_15 0x17 // Code rate 7/15
#define DTAPI_MOD_8_15 0x18 // Code rate 8/15
#define DTAPI_MOD_11_20 0x19 // Code rate 11/20
#define DTAPI_MOD_5_9 0x1A // Code rate 5/9
#define DTAPI_MOD_26_45 0x1B // Code rate 26/45
#define DTAPI_MOD_28_45 0x1C // Code rate 28/45
#define DTAPI_MOD_23_36 0x1D // Code rate 23/36
#define DTAPI_MOD_29_45 0x1E // Code rate 29/45
#define DTAPI_MOD_31_45 0x1F // Code rate 31/45
#define DTAPI_MOD_25_36 0x20 // Code rate 25/36
#define DTAPI_MOD_32_45 0x21 // Code rate 32/45
#define DTAPI_MOD_13_18 0x22 // Code rate 13/18
#define DTAPI_MOD_11_15 0x23 // Code rate 11/15
#define DTAPI_MOD_7_9 0x24 // Code rate 7/9
#define DTAPI_MOD_77_90 0x25 // Code rate 77/90
// Modulation parameters - DVB-S, DVB-S2 - ParXtra1
#define DTAPI_MOD_S_S2_SPECNONINV 0x00 // No spectrum inversion detected
#define DTAPI_MOD_S_S2_SPECINV 0x10 // Spectrum inversion detected
#define DTAPI_MOD_S_S2_SPECINV_AUTO 0x30 // Auto detect spectral inversion
#define DTAPI_MOD_S_S2_SPECINV_UNK 0x30 // Spectral inversion is unknown
#define DTAPI_MOD_S_S2_SPECINV_MSK 0x30 // Mask for spectrum inversion field
// Modulation parameters - DVB-S2 - ParXtra1 - Pilots
#define DTAPI_MOD_S2_NOPILOTS 0x00 // Pilots disabled
#define DTAPI_MOD_S2_PILOTS 0x01 // Pilots enabled
#define DTAPI_MOD_S2_PILOTS_AUTO 0x03 // Auto detect pilots
#define DTAPI_MOD_S2_PILOTS_UNK 0x03 // State of pilots unknown
#define DTAPI_MOD_S2_PILOTS_MSK 0x03 // Mask for pilots field
// Modulation parameters - DVB-S2 - ParXtra1 - FEC frame length
#define DTAPI_MOD_S2_LONGFRM 0x00 // Long FECFRAME
#define DTAPI_MOD_S2_MEDIUMFRM 0x04 // Medium FECFRAME
#define DTAPI_MOD_S2_SHORTFRM 0x08 // Short FECFRAME
#define DTAPI_MOD_S2_FRM_AUTO 0x0C // Auto detect frame size
#define DTAPI_MOD_S2_FRM_UNK 0x0C // Frame size unknown
#define DTAPI_MOD_S2_FRM_MSK 0x0C // Mask for FECFRAME field
// Modulation parameters - DVB-S2(X) - ParXtra1 - Constellation amplitude for 16-, 32-APSK
#define DTAPI_MOD_S2_CONST_AUTO 0x00 // Default constellation amplitude
#define DTAPI_MOD_S2_CONST_E_1 0x40 // E=1; Average symbol energy is constant
#define DTAPI_MOD_S2_CONST_R_1 0x80 // R=1; Radius of outer ring is constant
#define DTAPI_MOD_S2_CONST_MSK 0xC0 // Mask for constellation shape
// Modulation parameters - ISDB-S - Input stream
#define DTAPI_MOD_ISDBS_STREAMTYPE_RAW 0x00 // Raw stream with TMCC in sync bytes
#define DTAPI_MOD_ISDBS_STREAMTYPE_B15 0x01 // TMCC data following each TS packet
#define DTAPI_MOD_ISDBS_STREAMTYPE_AUTO 0x07 // Default (raw) isdb-s input stream
#define DTAPI_MOD_ISDBS_STREAMTYPE_MASK 0x07 // Mask for input stream type
// Modulation parameters - DVB-T - Bandwidth
#define DTAPI_MOD_DVBT_5MHZ 0x00000001
#define DTAPI_MOD_DVBT_6MHZ 0x00000002
#define DTAPI_MOD_DVBT_7MHZ 0x00000003
#define DTAPI_MOD_DVBT_8MHZ 0x00000004
#define DTAPI_MOD_DVBT_BW_UNK 0x0000000F // Unknown bandwidth
#define DTAPI_MOD_DVBT_BW_MSK 0x0000000F
// Modulation parameters - DVB-T - Constellation
#define DTAPI_MOD_DVBT_QPSK 0x00000010
#define DTAPI_MOD_DVBT_QAM16 0x00000020
#define DTAPI_MOD_DVBT_QAM64 0x00000030
#define DTAPI_MOD_DVBT_CO_AUTO 0x000000F0 // Auto detect constellation
#define DTAPI_MOD_DVBT_CO_UNK 0x000000F0 // Unknown constellation
#define DTAPI_MOD_DVBT_CO_MSK 0x000000F0
// Modulation parameters - DVB-T - Guard interval
#define DTAPI_MOD_DVBT_G_1_32 0x00000100
#define DTAPI_MOD_DVBT_G_1_16 0x00000200
#define DTAPI_MOD_DVBT_G_1_8 0x00000300
#define DTAPI_MOD_DVBT_G_1_4 0x00000400
#define DTAPI_MOD_DVBT_GU_AUTO 0x00000F00 // Auto detect guard interval
#define DTAPI_MOD_DVBT_GU_UNK 0x00000F00 // Unknown guard interval
#define DTAPI_MOD_DVBT_GU_MSK 0x00000F00
// DVB-T TPS information - DVB-T Hierarchical layer
#define DTAPI_MOD_DVBT_HARCHY_NONE 0x00000000
#define DTAPI_MOD_DVBT_HARCHY_A1 0x01000000
#define DTAPI_MOD_DVBT_HARCHY_A2 0x02000000
#define DTAPI_MOD_DVBT_HARCHY_A4 0x03000000
#define DTAPI_MOD_DVBT_HARCHY_MSK 0x0F000000
// Modulation parameters - DVB-T - Interleaver mode
#define DTAPI_MOD_DVBT_INDEPTH 0x00001000
#define DTAPI_MOD_DVBT_NATIVE 0x00002000
#define DTAPI_MOD_DVBT_IL_AUTO 0x0000F000 // Auto detect interleaver depth
#define DTAPI_MOD_DVBT_IL_UNK 0x0000F000 // Unknown interleaver depth
#define DTAPI_MOD_DVBT_IL_MSK 0x0000F000
// Modulation parameters - DVB-T - FFT size
#define DTAPI_MOD_DVBT_2K 0x00010000
#define DTAPI_MOD_DVBT_4K 0x00020000
#define DTAPI_MOD_DVBT_8K 0x00030000
#define DTAPI_MOD_DVBT_MD_AUTO 0x000F0000 // Auto detect mode
#define DTAPI_MOD_DVBT_MD_UNK 0x000F0000 // Unknown mode
#define DTAPI_MOD_DVBT_MD_MSK 0x000F0000
// Modulation parameters - DVB-T - s48
#define DTAPI_MOD_DVBT_S48_OFF 0x00000000
#define DTAPI_MOD_DVBT_S48 0x00100000
#define DTAPI_MOD_DVBT_S48_MSK 0x00100000
// Modulation parameters - DVB-T - s49
#define DTAPI_MOD_DVBT_S49_OFF 0x00000000
#define DTAPI_MOD_DVBT_S49 0x00200000
#define DTAPI_MOD_DVBT_S49_MSK 0x00200000
// Modulation parameters - DVB-T - s48s49
#define DTAPI_MOD_DVBT_ENA4849 0x00000000
#define DTAPI_MOD_DVBT_DIS4849 0x00400000
#define DTAPI_MOD_DVBT_4849_MSK 0x00400000
// Modulation parameters - IQ - ParXtra0
#define DTAPI_MOD_INTERPOL_RAW 0 // Raw mode, no interpolation
#define DTAPI_MOD_INTERPOL_OFDM 1 // Use OFDM interpolation
#define DTAPI_MOD_INTERPOL_QAM 2 // Use QAM interpolation
// Modulation parameters - IQ - ParXtra2 Packing
#define DTAPI_MOD_IQPCK_AUTO 0x00000000 // Auto IQ-sample packin
#define DTAPI_MOD_IQPCK_NONE 0x00000001 // No IQ-sample packing
#define DTAPI_MOD_IQPCK_PCKD 0x00000002 // IQ-samples are already packed
#define DTAPI_MOD_IQPCK_12B 0x00000003 // IQ-samples packed in 12-bit
#define DTAPI_MOD_IQPCK_10B 0x00000004 // IQ-samples packed in 10-bit
#define DTAPI_MOD_IQPCK_UNK 0x000000FF // Unknown (= use auto)
#define DTAPI_MOD_IQPCK_MSK 0x000000FF
// Modulation parameters - Roll-off factor ParXtra1 (DVB-S2), ParXtra2 (IQ) and
// Low pass filters ParXtra2 (IQ)
#define DTAPI_MOD_ROLLOFF_AUTO 0x00000000 // Default roll-off factor
#define DTAPI_MOD_ROLLOFF_NONE 0x00000100 // No roll-off
#define DTAPI_MOD_ROLLOFF_5 0x00000200 // 5% roll-off for DVB-S2X
#define DTAPI_MOD_ROLLOFF_10 0x00000300 // 10% roll-off for DVB-S2X
#define DTAPI_MOD_ROLLOFF_15 0x00000400 // 15% roll-off for DVB-S2X
#define DTAPI_MOD_ROLLOFF_20 0x00000500 // 20% roll-off for DVB-S2
#define DTAPI_MOD_ROLLOFF_25 0x00000600 // 25% roll-off for DVB-S2
#define DTAPI_MOD_ROLLOFF_35 0x00000700 // 35% roll-off for DVB-S/S2
// Pre-defined low pass filters
#define DTAPI_MOD_LPF_0_614 0x00000800 // Passband up to samplerate*0.614,
// used for 2MHz CMMB
#define DTAPI_MOD_LPF_0_686 0x00000900 // Passband up to samplerate*0.686,
// used for ISDB-T/Tmm/Tsb
#define DTAPI_MOD_LPF_0_754 0x00000A00 // Passband up to samplerate*0.754,
// used for 8MHz CMMB, DAB
#define DTAPI_MOD_LPF_0_833 0x00000B00 // Passband up to samplerate*0.833,
// used for DVB-C2/T/T2
#define DTAPI_MOD_LPF_0_850 0x00000C00 // Passband up to samplerate*0.850,
// used for DVB-T2 extended bandwidth
#define DTAPI_MOD_ROLLOFF_UNK 0x0000FF00 // Unknown (= use default)
#define DTAPI_MOD_ROLLOFF_MSK 0x0000FF00
// Modulation parameters - DVB-T2-MI - ParXtra0 used for T2-MI bitrate
// Modulation parameters - DVB-T2-MI - ParXtra1
#define DTAPI_MOD_T2MI_PID1_MSK 0x1FFF
#define DTAPI_MOD_T2MI_PID1_SHFT 0
#define DTAPI_MOD_T2MI_PID2_MSK 0x1FFF0000
#define DTAPI_MOD_T2MI_PID2_SHFT 16
#define DTAPI_MOD_T2MI_MULT_DIS 0x00000000 // Single Profile
#define DTAPI_MOD_T2MI_MULT_ENA 0x20000000 // Multi Profile
#define DTAPI_MOD_T2MI_MULT_MSK 0x20000000 // Multi Profile mask
// Modulation parameters - QAM - ParXtra0 - J.83 Annex
#define DTAPI_MOD_J83_MSK 0x000F
#define DTAPI_MOD_J83_UNK 0x000F // Unknown annex
#define DTAPI_MOD_J83_AUTO 0x000F // Auto detect annex
#define DTAPI_MOD_J83_A 0x0002 // J.83 annex A (DVB-C)
#define DTAPI_MOD_J83_B 0x0003 // J.83 annex B (\93American QAM\94)
#define DTAPI_MOD_J83_C 0x0001 // J.83 annex C (\93Japanese QAM\94)
// Modulation parameters - QAM - ParXtra1 - QAM-B interleaver mode
#define DTAPI_MOD_QAMB_I128_J1D 0x1
#define DTAPI_MOD_QAMB_I64_J2 0x3
#define DTAPI_MOD_QAMB_I32_J4 0x5
#define DTAPI_MOD_QAMB_I16_J8 0x7
#define DTAPI_MOD_QAMB_I8_J16 0x9
#define DTAPI_MOD_QAMB_I128_J1 0x0
#define DTAPI_MOD_QAMB_I128_J2 0x2
#define DTAPI_MOD_QAMB_I128_J3 0x4
#define DTAPI_MOD_QAMB_I128_J4 0x6
#define DTAPI_MOD_QAMB_I128_J5 0x8
#define DTAPI_MOD_QAMB_I128_J6 0xA
#define DTAPI_MOD_QAMB_I128_J7 0xC
#define DTAPI_MOD_QAMB_I128_J8 0xE
#define DTAPI_MOD_QAMB_IL_UNK 0xF // Unknown interleaver mode
#define DTAPI_MOD_QAMB_IL_AUTO 0xF // Auto detect interleaver mode
#define DTAPI_MOD_QAMB_IL_MSK 0xF
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ SDI +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// DtSdi - Table-of-content entry types
#define DTAPI_SDI_TOC_ENTRY_UNKNOWN 0
#define DTAPI_SDI_TOC_ENTRY_ACTVID 1
#define DTAPI_SDI_TOC_ENTRY_HANC 2
#define DTAPI_SDI_TOC_ENTRY_VANC 3
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtSdiTocEntry -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtSdiTocEntry
{
friend class DtSdiUtility;
public:
inline int AncDataBlockNum() const
{
if (AncType() != 1) return -1;
else return m_SdidOrDbn;
}
inline int AncDataId() const { return m_Did; }
inline int AncNumUserWords() const { return m_NumUserWords; }
inline int AncSecDataId() const
{
if (AncType() != 2) return -1;
else return m_SdidOrDbn;
}
inline int AncType() const { return m_AncType; }
inline int Field() const { return m_Field; }
inline int Line() const { return m_Line; }
inline int NumSymbols() const { return m_NumSymbols; }
inline int StartOffset() const { return m_StartOffset; }
inline int TocType() const { return m_TocType; }
// Encapsulated data
protected:
int m_TocType; // Type of TOC entry
int m_Line; // Line number where data is located
int m_Field; // Field in where data is located
int m_StartOffset; // Symbol offset relative to start of line, first data
int m_NumSymbols; // Number of symbols
// Following members are only valid if TOC type is DTAPI_SDI_TOC_ENTRY_HANC or
// DTAPI_SDI_TOC_ENTRY_VANC
int m_AncType; // Ancillery data packet type (DTAPI_SDI_ANC_TYPE1 or
// DTAPI_SDI_ANC_TYPE2)
int m_Did; // Ancillary packet data ID
int m_SdidOrDbn; // Ancillary packet data block number (type 1 packet)
// or secondary data ID (type 2 packet)
int m_NumUserWords; // Number of ancillary data packet user words
// Constructor, destructor
public:
DtSdiTocEntry() : m_TocType(DTAPI_SDI_TOC_ENTRY_UNKNOWN), m_Line(0), m_Field(0),
m_StartOffset(0), m_NumSymbols(0) {}
virtual ~DtSdiTocEntry() {};
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtSdi -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// The DtSdi class provides helper functions for processing SDI data
//
class DtSdi
{
friend class DtSdiUtility;
public:
DtSdi();
virtual ~DtSdi();
public:
DTAPI_RESULT ConvertFrame(unsigned int* pInFrame, int& InFrameSize,
int InFrameFormat, unsigned int* pOutFrame, int& OutFrameSize, int OutFrameFormat);
DTAPI_RESULT CreateBlackFrame(unsigned int* pFrame, int& FrameSize, int FrameFormat);
DTAPI_RESULT GetActiveVideo(const DtSdiTocEntry& TocEntry,
unsigned short* pVideo, int& NumSamples);
DTAPI_RESULT GetActiveVideo(unsigned short* pVideo, int& NumSamples,
int Field, int Stride=-1);
DTAPI_RESULT GetAncillaryData(const DtSdiTocEntry& TocEntry,
unsigned short* pData, int& NumSamples);
DTAPI_RESULT GetAudio(int AudioGroup, int& Channel,
unsigned short* pAudio, int& NumSamples);
DTAPI_RESULT GetTableOfContents(const DtSdiTocEntry** ppToc, int& NumTocEntries);
DTAPI_RESULT ParseFrame(const unsigned int* pFrame, int FrameSize, int FrameFormat,
int ParseFlags, const DtSdiTocEntry** ppToc, int& NumTocEntries);
protected:
DtSdiUtility* m_pSdiUtil; // Internal utility class
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtSdi constants -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
// Ancillary data packet types
#define DTAPI_SDI_ANC_TYPE1 1 // Type 1 packet
#define DTAPI_SDI_ANC_TYPE2 2 // Type 2 packet
// Parse flags
#define DTAPI_SDI_PARSE_ACTVID 0x0001 // Parse active video
#define DTAPI_SDI_PARSE_HBLANK 0x0002 // Parse horizontal blanking
#define DTAPI_SDI_PARSE_VBLANK 0x0004 // Parse vertical blanking
#define DTAPI_SDI_PARSE_BLANK (DTAPI_SDI_PARSE_HBLANK | DTAPI_SDI_PARSE_VBLANK)
#define DTAPI_SDI_PARSE_ALL (DTAPI_SDI_PARSE_ACTVID | DTAPI_SDI_PARSE_BLANK)
// Field flags
#define DTAPI_SDI_FIELD1 1
#define DTAPI_SDI_FIELD2 2
// Audio groups
#define DTAPI_SDI_AUDIO_GROUP1 0x2FF
#define DTAPI_SDI_AUDIO_GROUP2 0x1FD
#define DTAPI_SDI_AUDIO_GROUP3 0x1FB
#define DTAPI_SDI_AUDIO_GROUP4 0x2F9
#define DTAPI_SDI_AUDIO_CHAN1 0x01
#define DTAPI_SDI_AUDIO_CHAN2 0x02
#define DTAPI_SDI_AUDIO_CHAN3 0x04
#define DTAPI_SDI_AUDIO_CHAN4 0x08
#define DTAPI_SDI_AUDIO_CH_PAIR1 (DTAPI_SDI_AUDIO_CHAN1 | DTAPI_SDI_AUDIO_CHAN2)
#define DTAPI_SDI_AUDIO_CH_PAIR2 (DTAPI_SDI_AUDIO_CHAN3 | DTAPI_SDI_AUDIO_CHAN4)
#define DTAPI_SDI_AUDIO_CH_MASK (DTAPI_SDI_AUDIO_CH_PAIR1 | DTAPI_SDI_AUDIO_CH_PAIR2)
// Conversions format
#define DTAPI_SDI_FULL 0x001
#define DTAPI_SDI_ACTVID 0x002
#define DTAPI_SDI_HUFFMAN 0x004
#define DTAPI_SDI_625 0x008
#define DTAPI_SDI_525 0x010
#define DTAPI_SDI_8B 0x020
#define DTAPI_SDI_10B 0x040
#define DTAPI_SDI_16B 0x080
#define DTAPI_SDI_10B_NBO 0x100 // 10-bit packed in network-byte-order
#define DTAPI_SDI_BIT_MASK 0x1E0
// Video standards
#define DTAPI_VIDSTD_UNKNOWN -1
#define DTAPI_VIDSTD_TS 0
#define DTAPI_VIDSTD_525I59_94 DTAPI_IOCONFIG_525I59_94
#define DTAPI_VIDSTD_625I50 DTAPI_IOCONFIG_625I50
#define DTAPI_VIDSTD_720P23_98 DTAPI_IOCONFIG_720P23_98
#define DTAPI_VIDSTD_720P24 DTAPI_IOCONFIG_720P24
#define DTAPI_VIDSTD_720P25 DTAPI_IOCONFIG_720P25
#define DTAPI_VIDSTD_720P29_97 DTAPI_IOCONFIG_720P29_97
#define DTAPI_VIDSTD_720P30 DTAPI_IOCONFIG_720P30
#define DTAPI_VIDSTD_720P50 DTAPI_IOCONFIG_720P50
#define DTAPI_VIDSTD_720P59_94 DTAPI_IOCONFIG_720P59_94
#define DTAPI_VIDSTD_720P60 DTAPI_IOCONFIG_720P60
#define DTAPI_VIDSTD_1080P23_98 DTAPI_IOCONFIG_1080P23_98
#define DTAPI_VIDSTD_1080P24 DTAPI_IOCONFIG_1080P24
#define DTAPI_VIDSTD_1080P25 DTAPI_IOCONFIG_1080P25
#define DTAPI_VIDSTD_1080P29_97 DTAPI_IOCONFIG_1080P29_97
#define DTAPI_VIDSTD_1080P30 DTAPI_IOCONFIG_1080P30
#define DTAPI_VIDSTD_1080PSF23_98 DTAPI_IOCONFIG_1080PSF23_98
#define DTAPI_VIDSTD_1080PSF24 DTAPI_IOCONFIG_1080PSF24
#define DTAPI_VIDSTD_1080PSF25 DTAPI_IOCONFIG_1080PSF25
#define DTAPI_VIDSTD_1080PSF29_97 DTAPI_IOCONFIG_1080PSF29_97
#define DTAPI_VIDSTD_1080PSF30 DTAPI_IOCONFIG_1080PSF30
#define DTAPI_VIDSTD_1080I50 DTAPI_IOCONFIG_1080I50
#define DTAPI_VIDSTD_1080I59_94 DTAPI_IOCONFIG_1080I59_94
#define DTAPI_VIDSTD_1080I60 DTAPI_IOCONFIG_1080I60
#define DTAPI_VIDSTD_1080P50 DTAPI_IOCONFIG_1080P50
#define DTAPI_VIDSTD_1080P50B DTAPI_IOCONFIG_1080P50B
#define DTAPI_VIDSTD_1080P59_94 DTAPI_IOCONFIG_1080P59_94
#define DTAPI_VIDSTD_1080P59_94B DTAPI_IOCONFIG_1080P59_94B
#define DTAPI_VIDSTD_1080P60 DTAPI_IOCONFIG_1080P60
#define DTAPI_VIDSTD_1080P60B DTAPI_IOCONFIG_1080P60B
// The video standards above map 1-to-1 to an IOConfig value. The video formats below
// are used for multi-link video standards. Start at a high value to make sure there
// is no overlap.
#define DTAPI_VIDSTD_BASE 1000
#define DTAPI_VIDSTD_2160P50 (DTAPI_VIDSTD_BASE + 0)
#define DTAPI_VIDSTD_2160P50B (DTAPI_VIDSTD_BASE + 1)
#define DTAPI_VIDSTD_2160P59_94 (DTAPI_VIDSTD_BASE + 2)
#define DTAPI_VIDSTD_2160P59_94B (DTAPI_VIDSTD_BASE + 3)
#define DTAPI_VIDSTD_2160P60 (DTAPI_VIDSTD_BASE + 4)
#define DTAPI_VIDSTD_2160P60B (DTAPI_VIDSTD_BASE + 5)
#define DTAPI_VIDSTD_2160P23_98 (DTAPI_VIDSTD_BASE + 6)
#define DTAPI_VIDSTD_2160P24 (DTAPI_VIDSTD_BASE + 7)
#define DTAPI_VIDSTD_2160P25 (DTAPI_VIDSTD_BASE + 8)
#define DTAPI_VIDSTD_2160P29_97 (DTAPI_VIDSTD_BASE + 9)
#define DTAPI_VIDSTD_2160P30 (DTAPI_VIDSTD_BASE + 10)
// Video link standards.
#define DTAPI_VIDLNK_4K_SMPTE425 0 // 4K mapping according to SMPTE 425
#define DTAPI_VIDLNK_4K_SMPTE425B 1 // 4K mapping acc. to SMPTE 425 annex B
// Audio standard
#define DTAPI_SDI_AUDIO_SMPTE272A 1 // SMPTE-272 Level A, 48kHz, 20-bit audio
// Audio formats
#define DTAPI_SDI_AUDIO_PCM16 0
#define DTAPI_SDI_AUDIO_PCM24 1
#define DTAPI_SDI_AUDIO_PCM32 2
// HANC/VANC/Video selection (can be OR-ed)
//#define DTAPI_SDI_ACTVID 0x01
#define DTAPI_SDI_HANC 0x02
#define DTAPI_SDI_VANC 0x04
#define DTAPI_SDI_ANC_MASK (DTAPI_SDI_HANC | DTAPI_SDI_VANC)
// Chrominace/luminance stream selection (can be OR-ed)
#define DTAPI_SDI_CHROM 0x01
#define DTAPI_SDI_LUM 0x02
#define DTAPI_SDI_STREAM_MASK (DTAPI_SDI_CHROM | DTAPI_SDI_LUM)
// Anc-data operation mode
#define DTAPI_ANC_MARK 0x0001
#define DTAPI_ANC_DELETE 0x0002
// Scalling factor
#define DTAPI_SCALING_OFF 1
#define DTAPI_SCALING_1_4 2
#define DTAPI_SCALING_1_16 3
// Symbol filter mode
#define DTAPI_SYMFLT_ALL 0 // YCbCr sample (CbYCrY order)
#define DTAPI_SYMFLT_LUM 1 // Luminance only (Y)
#define DTAPI_SYMFLT_CHROM 2 // Chrominance only (CbCr)
#define DTAPI_SYMFLT_SWAP 3 // Swap order of lum and chrom (i.e. YCbYCr)
#define DTAPI_SYMFLT_RGB 4 // Convert to/from RGB
// Ancillary filter mode
#define DTAPI_ANCFLT_OFF 0
#define DTAPI_ANCFLT_HANC_ALL 1
#define DTAPI_ANCFLT_HANC_MIN 2
#define DTAPI_ANCFLT_VANC_ALL 3
#define DTAPI_ANCFLT_VANC_MIN 4
// Receive mode hints for USB3 devices
#define DTAPI_RXMODE_FRAMEBUFFER 0x10000
#define DTAPI_RXMODE_ANC (DTAPI_RXMODE_FRAMEBUFFER | 1)
#define DTAPI_RXMODE_RAW (DTAPI_RXMODE_FRAMEBUFFER | 2)
#define DTAPI_RXMODE_FULL (DTAPI_RXMODE_FRAMEBUFFER | 3)
#define DTAPI_RXMODE_FULL8 (DTAPI_RXMODE_FRAMEBUFFER | 4)
#define DTAPI_RXMODE_FULL8_SCALED4 (DTAPI_RXMODE_FRAMEBUFFER | 5)
#define DTAPI_RXMODE_FULL8_SCALED16 (DTAPI_RXMODE_FRAMEBUFFER | 6)
#define DTAPI_RXMODE_VIDEO (DTAPI_RXMODE_FRAMEBUFFER | 7)
#define DTAPI_RXMODE_VIDEO8 (DTAPI_RXMODE_FRAMEBUFFER | 8)
#define DTAPI_RXMODE_VIDEO8_SCALED4 (DTAPI_RXMODE_FRAMEBUFFER | 9)
#define DTAPI_RXMODE_VIDEO8_SCALED16 (DTAPI_RXMODE_FRAMEBUFFER | 10)
#define DTAPI_RXMODE_RAW8 (DTAPI_RXMODE_FRAMEBUFFER | 15)
#define DTAPI_RXMODE_FRMBUF_MASK 0x0F
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ HD-SDI CLASSES +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- AncPacket -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class AncPacket
{
public:
AncPacket();
AncPacket(const AncPacket& s);
virtual ~AncPacket();
public:
int m_Did; // Data identifier
int m_SdidOrDbn; // Secondary data identifier / Data block number
int m_Dc; // Data count
int m_Cs; // Check sum
unsigned short* m_pUdw; // User data words
int m_Line; // Line number in which packet was found
// Operations
public:
void Create(unsigned short* pUserWords, int NumWords);
void Create(int NumWords=256);
void Destroy();
int Type() const { return (m_Did & 0x80)==0 ? 2 : 1; }
int Size() const { return m_Size; }
void operator = (const AncPacket& s);
private:
int m_Size; // Size of user data buffer (in # of words)
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtFrameBufTrPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtFrameBufTrPars
{
public:
enum ParsType { PT_VIDEO, PT_ANC, PT_RAW };
protected:
DtFrameBufTrPars(ParsType Type);
public:
virtual ~DtFrameBufTrPars();
// Operations
public:
DTAPI_RESULT SetCommon(__int64 Frame, unsigned char* pBuf, int BufSize,
int DataFormat, int StartLine=1, int NumLines=-1);
ParsType GetType() const { return m_Type; }
virtual DtFrameBufTrPars* Clone() = 0;
public:
__int64 m_Frame; // Frame to transfer
unsigned char* m_pBuf; // Transfer buffer
int m_BufSize; // [in] size of buffer / [out] actual #bytes transferred
int m_StartLine; // [in] 1st line to transfer / [out] actual first line
int m_NumLines; // [in] #lines to transfer / [out] actual #lines
int m_DataFormat; // Format of data (8-, 10-, 16-bit)
private:
ParsType m_Type; // Parameter type
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtFrameBufTrParsVideo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtFrameBufTrParsVideo : public DtFrameBufTrPars
{
public:
DtFrameBufTrParsVideo(int Field, int Scaling=DTAPI_SCALING_OFF, int Stride=-1,
int SymFlt=DTAPI_SYMFLT_ALL);
virtual ~DtFrameBufTrParsVideo();
DtFrameBufTrParsVideo* Clone();
public:
int m_Field; // Field to transfer (DTAPI_SDI_FIELD*)
int m_Scaling; // Scaling mode (DTAPI_SCALING_*)
int m_Stride; // -1 means no stride
int m_SymFlt; // Symbol filter mode (DTAPI_SYMFLT_*)
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtFrameBufTrParsAnc -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtFrameBufTrParsAnc : public DtFrameBufTrPars
{
public:
DtFrameBufTrParsAnc(int HancVanc, int AncFlt=DTAPI_ANCFLT_OFF);
virtual ~DtFrameBufTrParsAnc();
DtFrameBufTrParsAnc* Clone();
public:
int m_HancVanc; // HANC or VANC
int m_AncFlt; // Anc filter mode (DTAPI_ANCFLT_*)
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtFrameBufTrParsRaw -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtFrameBufTrParsRaw : public DtFrameBufTrPars
{
public:
DtFrameBufTrParsRaw(int SymFlt=DTAPI_SYMFLT_ALL, int Stride=-1);
virtual ~DtFrameBufTrParsRaw();
DtFrameBufTrParsRaw* Clone();
public:
int m_SymFlt; // Symbol filter mode
int m_Stride; // -1 means no stride
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtFrameBuffer -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class to represent an frame buffer
//
class DtFrameBuffer
{
public:
DtFrameBuffer();
virtual ~DtFrameBuffer();
private:
// No implementation is provided for the copy constructor
DtFrameBuffer(const DtFrameBuffer&);
public:
virtual DTAPI_RESULT AncAddAudio(__int64 Frame, unsigned char* pBuf,
int& BufSize, int Format, int Channels, int AudioGroup);
virtual DTAPI_RESULT AncAddAudioStatusWord(__int64 Frame, unsigned char Status[24],
int Channels, int AudioGroup);
// Old declaration of the AncAddPacket function. The AncPacket class has been extended
// with a new m_Line member.
DTAPI_DEPRECATED(virtual DTAPI_RESULT AncAddPacket(__int64 Frame,
AncPacket& AncPacket,
int Line, int HancVanc, int Stream),
"Deprecated (will be removed!): use overloaded AncAddPacket without "
"line argument, use AncPacket::m_Line instead");
virtual DTAPI_RESULT AncAddPacket(__int64 Frame, AncPacket& AncPacket,
int HancVanc, int Stream);
virtual DTAPI_RESULT AncClear(__int64 Frame, int HancVanc, int Stream);
virtual DTAPI_RESULT AncCommit(__int64 Frame);
virtual DTAPI_RESULT AncDelAudio(__int64 Frame, int AudioGroup, int Mode);
virtual DTAPI_RESULT AncDelPacket(__int64 Frame, int DID, int SDID, int StartLine,
int NumLines, int HancVanc, int Stream, int Mode);
virtual DTAPI_RESULT AncGetAudio(__int64 Frame, unsigned char* pBuf,
int& BufSize, int DataFormat, int& Channels, int AudioGroup);
virtual DTAPI_RESULT AncGetPacket(__int64 Frame, int DID, int SDID,
AncPacket*, int& NumPackets, int HancVanc, int Stream);
virtual DTAPI_RESULT AncReadRaw(__int64 Frame, unsigned char* pBuf,
int& BufSize, int DataFormat, int StartLine,
int NumLines, int HancVanc, bool EnableAncFilter = false);
virtual DTAPI_RESULT AncReadRaw(DtFrameBufTrParsAnc& TP);
virtual DTAPI_RESULT AncWriteRaw(__int64 Frame, unsigned char* pBuf,
int& BufSize, int Format, int StartLine,
int NumLines, int HancVanc, bool EnableAncFilter = false);
virtual DTAPI_RESULT AncWriteRaw(DtFrameBufTrParsAnc& TP);
virtual DTAPI_RESULT AttachToInput(DtDevice*, int Port);
virtual DTAPI_RESULT AttachToOutput(DtDevice*, int Port, int Delay);
virtual DTAPI_RESULT ClearFlags(int Latched);
virtual DTAPI_RESULT Detach();
virtual DTAPI_RESULT DetectIoStd(int& Value, int& SubValue);
virtual DTAPI_RESULT GetBufferInfo(DtBufferInfo&);
virtual DTAPI_RESULT GetCurFrame(__int64& CurFrame);
virtual DTAPI_RESULT GetFlags(int& Flags, int& Latched);
virtual DTAPI_RESULT GetFrameInfo(__int64 Frame, DtFrameInfo&);
virtual DTAPI_RESULT GetStatistics(int Count, DtStatistic* pStatistics);
virtual DTAPI_RESULT GetStatistic(int Type, int& Statistic);
virtual DTAPI_RESULT ReadSdiLines(__int64 Frame, unsigned char* pBuf,
int& BufSize, int DataFormat, int StartLine, int& NumLines);
virtual DTAPI_RESULT ReadSdiLines(DtFrameBufTrParsRaw& TP);
virtual DTAPI_RESULT ReadSdiLines(__int64 Frame, unsigned char* pBuf,
int& BufSize, int DataFormat);
virtual DTAPI_RESULT ReadVideo(__int64 Frame, unsigned char* pBuf,
int& BufSize, int Field, int FullOrScaled,
int DataFormat, int StartLine, int& NumLines);
virtual DTAPI_RESULT ReadVideo(DtFrameBufTrParsVideo& TP);
virtual DTAPI_RESULT SetRxMode(int RxMode, __int64& FirstFrame);
virtual DTAPI_RESULT Start(bool Start=true);
virtual DTAPI_RESULT SetIoConfig(int Group, int Value, int SubValue = -1,
__int64 ParXtra0 = -1, __int64 ParXtra1 = -1);
virtual DTAPI_RESULT WaitFrame(__int64& LastFrame);
virtual DTAPI_RESULT WaitFrame(__int64& FirstFrame, __int64& LastFrame);
virtual DTAPI_RESULT WriteSdiLines(__int64 Frame, unsigned char* pBuf,
int& BufSize, int DataFormat);
virtual DTAPI_RESULT WriteSdiLines(__int64 Frame, unsigned char* pBuf,
int& BufSize, int DataFormat, int StartLine, int& NumLines);
virtual DTAPI_RESULT WriteSdiLines(DtFrameBufTrParsRaw& TP);
virtual DTAPI_RESULT WriteVideo(__int64 Frame, unsigned char* pBuf, int& BufSize,
int Field, int DataFormat, int StartLine, int& NumLines);
virtual DTAPI_RESULT WriteVideo(DtFrameBufTrParsVideo& TP);
protected:
FrameBufImpl* m_pImpl; // Implementation class
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtSdiMatrix -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtSdiMatrix
{
public:
DtSdiMatrix();
virtual ~DtSdiMatrix();
private:
// No implementation is provided for the copy constructor
DtSdiMatrix(const DtSdiMatrix&);
public:
virtual DTAPI_RESULT Attach(DtDevice* pDvc, int& MaxNumRows);
virtual DTAPI_RESULT Detach();
virtual DTAPI_RESULT GetMatrixInfo(DtMatrixInfo& Info);
virtual DtFrameBuffer& Row(int n);
virtual DTAPI_RESULT Start(bool Start=true);
virtual DTAPI_RESULT SetIoConfig(int Group, int Value, int SubValue = -1,
__int64 ParXtra0 = -1, __int64 ParXtra1 = -1);
virtual DTAPI_RESULT WaitFrame(__int64& LastFrame);
virtual DTAPI_RESULT WaitFrame(__int64& FirstFrame, __int64& LastFrame);
private:
SdiMatrixImpl* m_pImpl; // Implementation class
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- Global DTAPI Functions -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
DTAPI_RESULT DtapiCheckDeviceDriverVersion(void);
DTAPI_RESULT DtapiCheckDeviceDriverVersion(int DeviceCategory);
DTAPI_RESULT DtapiDeviceScan(int NumEntries, int& NumEntriesResult,
DtDeviceDesc* DvcDescArr, bool InclDteDvcs=false,
int ScanOrder=DTAPI_SCANORDER_ORIG);
DTAPI_RESULT DtapiDtaPlusDeviceScan(int NumEntries, int& NumEntriesResult,
DtDtaPlusDeviceDesc* DvcDescArr);
DTAPI_RESULT DtapiDtDeviceDesc2String(DtDeviceDesc* pDvcDesc, int StringType,
char* pString, int StringLength);
DTAPI_RESULT DtapiDtDeviceDesc2String(DtDeviceDesc* pDvcDesc, int StringType,
wchar_t* pString, int StringLength);
DTAPI_RESULT DtapiDtHwFuncDesc2String(DtHwFuncDesc* pHwFunc, int StringType,
char* pString, int StringLength);
DTAPI_RESULT DtapiDtHwFuncDesc2String(DtHwFuncDesc* pHwFunc, int StringType,
wchar_t* pString, int StringLength);
DTAPI_RESULT DtapiGetDeviceDriverVersion(int, int&, int&, int&, int&);
DTAPI_RESULT DtapiGetDtapiServiceVersion(int&, int&, int&, int&);
DTAPI_RESULT DtapiGetVersion(int& Maj, int& Min, int& BugFix, int& Build);
DTAPI_RESULT DtapiHwFuncScan(int NumEntries, int& NumEntriesResult,
DtHwFuncDesc* pHwFuncs, bool InclDteDvcs=false,
int ScanOrder=DTAPI_SCANORDER_ORIG);
DTAPI_RESULT DtapiPower2Voltage(int dBm, int& dBmV, bool Is50Ohm=false);
const char* DtapiResult2Str(DTAPI_RESULT DtapiResult);
DTAPI_RESULT DtapiVoltage2Power(int dBmV, int& dBm, bool Is50Ohm=false);
// Callbacks
DTAPI_RESULT DtapiRegisterCallback(pDtEventCallback Callback, void* pContext,
int EventTypes, void** pId = NULL);
DTAPI_RESULT DtapiUnregisterCallback(void* pId);
// IP address conversion
DTAPI_RESULT DtapiInitDtIpParsFromIpString(DtIpPars& IpPars,
const char* pDstIp, const char* pSrcIp);
DTAPI_RESULT DtapiInitDtIpParsFromIpString(DtIpPars& IpPars,
const wchar_t* pDstIp, const wchar_t* pSrcIp);
DTAPI_RESULT DtapiIpAddr2ByteArray(const char* pIpStr, unsigned char* pIpByte,
int& Flags);
DTAPI_RESULT DtapiIpAddr2ByteArray(const wchar_t* pIpStr,
unsigned char* pIpByte, int& Flags);
DTAPI_RESULT DtapiIpAddr2Str(char* pStr, int Len, unsigned char* pIpAddr);
DTAPI_RESULT DtapiIpAddr2Str(wchar_t* pStr, int Len, unsigned char* pIpAddr);
DTAPI_RESULT DtapiStr2IpAddr(unsigned char* pIpAddr, const char* pStr);
DTAPI_RESULT DtapiStr2IpAddr(unsigned char* pIpAddr, const wchar_t* pStr);
// Legacy
#define DtapiInitDtTsIpParsFromIpString DtapiInitDtIpParsFromIpString
// Modulator functions
DTAPI_RESULT DtapiModPars2Bandwidth(int& ModBandwidth, int& TotalBandwidth,
int ModType, int ParXtra0, int ParXtra1, int ParXtra2,
void* pXtraPars, int SymRate);
DTAPI_RESULT DtapiModPars2SymRate(int& SymRate, int ModType, int ParXtra0,
int ParXtra1, int ParXtra2, int TsRate);
DTAPI_RESULT DtapiModPars2SymRate(int& SymRate, int ModType, int ParXtra0,
int ParXtra1, int ParXtra2, DtFractionInt TsRate);
DTAPI_RESULT DtapiModPars2SymRate(int& SymRate, int ModType, int ParXtra0,
int ParXtra1, int ParXtra2, void* pXtraPars, int TsRate);
DTAPI_RESULT DtapiModPars2SymRate(int& SymRate, int ModType, int ParXtra0,
int ParXtra1, int ParXtra2, void* pXtraPars, DtFractionInt TsRate);
DTAPI_RESULT DtapiModPars2TsRate(int& TsRate, int ModType, int ParXtra0,
int ParXtra1, int ParXtra2, int SymRate = -1);
DTAPI_RESULT DtapiModPars2TsRate(DtFractionInt& TsRate, int ModType, int ParXtra0,
int ParXtra1, int ParXtra2, int SymRate = -1);
DTAPI_RESULT DtapiModPars2TsRate(int& TsRate, DtDvbC2Pars&, int PlpIdx = 0);
DTAPI_RESULT DtapiModPars2TsRate(DtFractionInt& TsRate, DtDvbC2Pars&, int PlpIdx = 0);
DTAPI_RESULT DtapiModPars2TsRate(int& TsRate, DtDvbS2Pars&, int PlpIdx = 0);
DTAPI_RESULT DtapiModPars2TsRate(DtFractionInt& TsRate, DtDvbS2Pars&, int PlpIdx = 0);
DTAPI_RESULT DtapiModPars2TsRate(int& TsRate, DtDvbT2Pars&, int PlpIdx = 0);
DTAPI_RESULT DtapiModPars2TsRate(DtFractionInt& TsRate, DtDvbT2Pars&, int PlpIdx = 0);
DTAPI_RESULT DtapiModPars2TsRate(int& TsRate, DtIsdbTmmPars&, int TsIdx = 0);
DTAPI_RESULT DtapiModPars2TsRate(DtFractionInt& TsRate, DtIsdbTmmPars&, int TsIdx = 0);
DTAPI_RESULT DtapiModPars2TsRate(int& TsRate, int ModType, int ParXtra0,
int ParXtra1, int ParXtra2, void* pXtraPars, int SymRate);
DTAPI_RESULT DtapiModPars2TsRate(DtFractionInt& TsRate, int ModType, int ParXtra0,
int ParXtra1, int ParXtra2, void* pXtraPars, int SymRate);
// HD-SDI functions
DTAPI_RESULT DtapiGetRequiredUsbBandwidth(int VidStd, int RxMode, long long& Bandwidth);
DTAPI_RESULT DtapiGetVidStdInfo(int VidStd, DtVidStdInfo& Info);
DTAPI_RESULT DtapiGetVidStdInfo(int VidStd, int LinkStd, DtVidStdInfo& Info);
DTAPI_RESULT DtapiIoStd2VidStd(int Value, int SubValue, int& VidStd);
DTAPI_RESULT DtapiVidStd2IoStd(int VidStd, int& Value, int& SubValue);
DTAPI_RESULT DtapiVidStd2IoStd(int VidStd, int LinkStd, int& Value, int& SubValue);
const char* DtapiVidStd2Str(int VidStd);
const char* DtapiLinkStd2Str(int LinkStd);
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- Return Codes -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// NOTE: ERROR CODES 0x1100-0x12FF ARE RESERVED FOR USE IN THE DTAPIplus
//
#define DTAPI_OK 0
#define DTAPI_OK_FAILSAFE 1
#define DTAPI_E 0x1000
#define DTAPI_E_ATTACHED (DTAPI_E + 0)
#define DTAPI_E_BUF_TOO_SMALL (DTAPI_E + 1)
#define DTAPI_E_DEV_DRIVER (DTAPI_E + 2)
#define DTAPI_E_EEPROM_FULL (DTAPI_E + 3)
#define DTAPI_E_EEPROM_READ (DTAPI_E + 4)
#define DTAPI_E_EEPROM_WRITE (DTAPI_E + 5)
#define DTAPI_E_EEPROM_FORMAT (DTAPI_E + 6)
#define DTAPI_E_FIFO_FULL (DTAPI_E + 7)
#define DTAPI_E_IN_USE (DTAPI_E + 8)
#define DTAPI_E_INVALID_BUF (DTAPI_E + 9)
#define DTAPI_E_INVALID_FLAGS (DTAPI_E + 11)
#define DTAPI_E_INVALID_MODE (DTAPI_E + 12)
#define DTAPI_E_INVALID_RATE (DTAPI_E + 13)
#define DTAPI_E_INVALID_SIZE (DTAPI_E + 14)
#define DTAPI_E_KEYWORD (DTAPI_E + 15)
#define DTAPI_E_NO_DEVICE (DTAPI_E + 16)
#define DTAPI_E_NO_LOOPBACK (DTAPI_E + 17)
#define DTAPI_E_NO_SUCH_DEVICE (DTAPI_E + 18)
#define DTAPI_E_NO_SUCH_OUTPUT (DTAPI_E + 19)
#define DTAPI_E_NO_DT_OUTPUT (DTAPI_E + 20)
#define DTAPI_E_NO_TS_OUTPUT (DTAPI_E + 20)
#define DTAPI_E_NOT_ATTACHED (DTAPI_E + 21)
#define DTAPI_E_NOT_FOUND (DTAPI_E + 22)
#define DTAPI_E_NOT_SUPPORTED (DTAPI_E + 23)
#define DTAPI_E_DEVICE (DTAPI_E + 24)
#define DTAPI_E_TOO_LONG (DTAPI_E + 25)
#define DTAPI_E_UNDERFLOW (DTAPI_E + 26)
#define DTAPI_E_NO_SUCH_INPUT (DTAPI_E + 27)
#define DTAPI_E_NO_DT_INPUT (DTAPI_E + 28)
#define DTAPI_E_NO_TS_INPUT (DTAPI_E + 28)
#define DTAPI_E_DRIVER_INCOMP (DTAPI_E + 29)
#define DTAPI_E_INTERNAL (DTAPI_E + 30)
#define DTAPI_E_OUT_OF_MEM (DTAPI_E + 31)
#define DTAPI_E_INVALID_J83ANNEX (DTAPI_E + 32)
#define DTAPI_E_IDLE (DTAPI_E + 33)
#define DTAPI_E_INSUF_LOAD (DTAPI_E + 34)
#define DTAPI_E_INVALID_BANDWIDTH (DTAPI_E + 35)
#define DTAPI_E_INVALID_CONSTEL (DTAPI_E + 36)
#define DTAPI_E_INVALID_GUARD (DTAPI_E + 37)
#define DTAPI_E_INVALID_INTERLVNG (DTAPI_E + 38)
#define DTAPI_E_INVALID_TRANSMODE (DTAPI_E + 39)
#define DTAPI_E_INVALID_TSTYPE (DTAPI_E + 40)
#define DTAPI_E_NO_IPPARS (DTAPI_E + 41)
#define DTAPI_E_NO_TSRATE (DTAPI_E + 42)
#define DTAPI_E_NOT_IDLE (DTAPI_E + 43)
#define DTAPI_E_INVALID_ARG (DTAPI_E + 44)
#define DTAPI_E_NW_DRIVER (DTAPI_E + 45)
#define DTAPI_E_DST_MAC_ADDR (DTAPI_E + 46)
#define DTAPI_E_NO_SUCH_PORT (DTAPI_E + 47)
#define DTAPI_E_WINSOCK (DTAPI_E + 48)
#define DTAPI_E_MULTICASTJOIN (DTAPI_E + 49)
#define DTAPI_E_EMBEDDED (DTAPI_E + 50)
#define DTAPI_E_LOCKED (DTAPI_E + 51)
#define DTAPI_E_NO_VALID_CALDATA (DTAPI_E + 52)
#define DTAPI_E_NO_LINK (DTAPI_E + 53)
#define DTAPI_E_INVALID_HEADER (DTAPI_E + 54)
#define DTAPI_E_INVALID_PARS (DTAPI_E + 55)
#define DTAPI_E_NOT_SDI_MODE (DTAPI_E + 56)
#define DTAPI_E_INCOMP_FRAME (DTAPI_E + 57)
#define DTAPI_E_UNSUP_CONV (DTAPI_E + 58)
#define DTAPI_E_OUTBUF_TOO_SMALL (DTAPI_E + 59)
#define DTAPI_E_CONFIG (DTAPI_E + 60)
#define DTAPI_E_TIMEOUT (DTAPI_E + 61)
#define DTAPI_E_INVALID_TIMEOUT (DTAPI_E + 62)
#define DTAPI_E_INVALID_FHMODE (DTAPI_E + 63)
#define DTAPI_E_INVALID_PILOTS (DTAPI_E + 64)
#define DTAPI_E_INVALID_USEFRAMENO (DTAPI_E + 65)
#define DTAPI_E_SYMRATE_REQD (DTAPI_E + 66)
#define DTAPI_E_NO_SYMRATE (DTAPI_E + 67)
#define DTAPI_E_INVALID_NUMSEGM (DTAPI_E + 68)
#define DTAPI_E_INVALID_NUMTAPS (DTAPI_E + 69)
#define DTAPI_E_COMMUNICATION (DTAPI_E + 70)
#define DTAPI_E_BIND (DTAPI_E + 71)
#define DTAPI_E_FRAME_INTERVAL (DTAPI_E + 72)
#define DTAPI_E_INVALID_BWT_EXT (DTAPI_E + 73)
#define DTAPI_E_INVALID_FFTMODE (DTAPI_E + 74)
#define DTAPI_E_INVALID_NUMDTSYM (DTAPI_E + 75)
#define DTAPI_E_INVALID_NUMT2FRM (DTAPI_E + 76)
#define DTAPI_E_INVALID_SUBCH (DTAPI_E + 77)
#define DTAPI_E_INVALID_TIME_IL (DTAPI_E + 78)
#define DTAPI_E_NUM_PLP (DTAPI_E + 79)
#define DTAPI_E_PLP_NUMBLOCKS (DTAPI_E + 80)
#define DTAPI_E_NUMPLPS_MUSTBE_1 (DTAPI_E + 81)
#define DTAPI_E_INBAND (DTAPI_E + 82)
#define DTAPI_E_ISSY (DTAPI_E + 83)
#define DTAPI_E_OTHER_PLP_IN_BAND (DTAPI_E + 84)
#define DTAPI_E_CM_NUMPATHS (DTAPI_E + 85)
#define DTAPI_E_PILOT_PATTERN (DTAPI_E + 86)
#define DTAPI_E_SUBSLICES (DTAPI_E + 87)
#define DTAPI_E_NO_GENREF (DTAPI_E + 88)
#define DTAPI_E_TI_MEM_OVF (DTAPI_E + 89)
#define DTAPI_E_FEF (DTAPI_E + 90)
#define DTAPI_E_UNSUP_FORMAT (DTAPI_E + 91)
#define DTAPI_E_OUT_OF_SYNC (DTAPI_E + 92)
#define DTAPI_E_NO_FRAME (DTAPI_E + 93)
#define DTAPI_E_NO_SUCH_DATA (DTAPI_E + 94)
#define DTAPI_E_INVALID_TYPE (DTAPI_E + 95)
#define DTAPI_E_INVALID_MODPARS (DTAPI_E + 96)
#define DTAPI_E_BIAS_BAL_CELLS (DTAPI_E + 97)
#define DTAPI_E_COMMON_PLP_COUNT (DTAPI_E + 98)
#define DTAPI_E_PLP_ID (DTAPI_E + 99)
#define DTAPI_E_BUFS (DTAPI_E + 100)
#define DTAPI_E_FIXED_CELL_PARS (DTAPI_E + 101)
#define DTAPI_E_CM_CHANNEL (DTAPI_E + 102)
#define DTAPI_E_INVALID_FIFO_IDX (DTAPI_E + 103)
#define DTAPI_E_INVALID_INP_TYPE (DTAPI_E + 104)
#define DTAPI_E_INVALID_OUTP_TYPE (DTAPI_E + 105)
#define DTAPI_E_INVALID_START_FREQ (DTAPI_E + 106)
#define DTAPI_E_DSLICE_TUNE_POS (DTAPI_E + 107)
#define DTAPI_E_DSLICE_OFFSETS (DTAPI_E + 108)
#define DTAPI_E_DSLICE_OVERLAP (DTAPI_E + 109)
#define DTAPI_E_NOTCH_OFFSETS (DTAPI_E + 110)
#define DTAPI_E_PLP_BUNDLED (DTAPI_E + 111)
#define DTAPI_E_BROADBAND_NOTCH (DTAPI_E + 112)
#define DTAPI_E_L1_PART2_TOO_LONG (DTAPI_E + 113)
#define DTAPI_E_DSLICE_T1_NDP (DTAPI_E + 114)
#define DTAPI_E_DSLICE_T1_TSRATE (DTAPI_E + 115)
#define DTAPI_E_CONNECT_TO_SERVICE (DTAPI_E + 116)
#define DTAPI_E_INVALID_SYMRATE (DTAPI_E + 117)
#define DTAPI_E_MODPARS_NOT_SET (DTAPI_E + 118)
#define DTAPI_E_SERVICE_INCOMP (DTAPI_E + 119)
#define DTAPI_E_INVALID_LEVEL (DTAPI_E + 120)
#define DTAPI_E_MODTYPE_UNSUP (DTAPI_E + 121)
#define DTAPI_E_I2C_LOCK_TIMEOUT (DTAPI_E + 122)
#define DTAPI_E_INVALID_FREQ (DTAPI_E + 123)
#define DTAPI_E_INVALID_TSRATESEL (DTAPI_E + 124)
#define DTAPI_E_INVALID_SPICLKSEL (DTAPI_E + 125)
#define DTAPI_E_INVALID_SPIMODE (DTAPI_E + 126)
#define DTAPI_E_NOT_INITIALIZED (DTAPI_E + 127)
#define DTAPI_E_NOT_LOCKED (DTAPI_E + 128)
#define DTAPI_E_NO_PERMISSION (DTAPI_E + 129)
#define DTAPI_E_CANCELLED (DTAPI_E + 130)
#define DTAPI_E_OUT_OF_RESOURCES (DTAPI_E + 131)
#define DTAPI_E_LISTEN (DTAPI_E + 132)
#define DTAPI_E_INVALID_STREAMFMT (DTAPI_E + 133)
#define DTAPI_E_EVENT_POWER (DTAPI_E + 134)
#define DTAPI_E_EVENT_REMOVAL (DTAPI_E + 135)
#define DTAPI_E_UNSUP_ROLLOFF (DTAPI_E + 136)
#define DTAPI_E_T2_LITE (DTAPI_E + 137)
#define DTAPI_E_COMP_OVERLAP (DTAPI_E + 138)
#define DTAPI_E_MULTI_COMPS (DTAPI_E + 139)
#define DTAPI_E_INVALID_ISI (DTAPI_E + 140)
#define DTAPI_E_FIRMW_INCOMP (DTAPI_E + 141)
#define DTAPI_E_INVALID_MODTYPE (DTAPI_E + 142)
#define DTAPI_E_NO_VIDSTD (DTAPI_E + 143)
#define DTAPI_E_INVALID_VIDSTD (DTAPI_E + 144)
#define DTAPI_E_INVALID_AUDSTD (DTAPI_E + 145)
#define DTAPI_E_INVALID_SCALING (DTAPI_E + 146)
#define DTAPI_E_INVALID_ROW (DTAPI_E + 147)
#define DTAPI_E_NOT_STARTED (DTAPI_E + 148)
#define DTAPI_E_STARTED (DTAPI_E + 149)
#define DTAPI_E_INVALID_LINE (DTAPI_E + 150)
#define DTAPI_E_INVALID_STREAM (DTAPI_E + 151)
#define DTAPI_E_INVALID_ANC (DTAPI_E + 152)
#define DTAPI_E_INVALID_FRAME (DTAPI_E + 153)
#define DTAPI_E_NOT_IMPLEMENTED (DTAPI_E + 154)
#define DTAPI_E_INVALID_CHANNEL (DTAPI_E + 155)
#define DTAPI_E_INVALID_GROUP (DTAPI_E + 156)
#define DTAPI_E_INVALID_FORMAT (DTAPI_E + 157)
#define DTAPI_E_INVALID_FIELD (DTAPI_E + 158)
#define DTAPI_E_BUF_TOO_LARGE (DTAPI_E + 159)
#define DTAPI_E_INVALID_DELAY (DTAPI_E + 160)
#define DTAPI_E_EXCL_MANDATORY (DTAPI_E + 161)
#define DTAPI_E_INVALID_ROLLOFF (DTAPI_E + 162)
#define DTAPI_E_CM_UNSUP (DTAPI_E + 163)
#define DTAPI_E_I2C (DTAPI_E + 164)
#define DTAPI_E_STATE (DTAPI_E + 165)
#define DTAPI_E_NO_LOCK (DTAPI_E + 166)
#define DTAPI_E_RANGE (DTAPI_E + 167)
#define DTAPI_E_INVALID_T2PROFILE (DTAPI_E + 168)
#define DTAPI_E_DSLICE_ID (DTAPI_E + 169)
#define DTAPI_E_EXCL_ACCESS_REQD (DTAPI_E + 170)
#define DTAPI_E_CHAN_ALREADY_ADDED (DTAPI_E + 171)
#define DTAPI_E_LAYER_ID (DTAPI_E + 172)
#define DTAPI_E_INVALID_FECMODE (DTAPI_E + 173)
#define DTAPI_E_INVALID_PORT (DTAPI_E + 174)
#define DTAPI_E_INVALID_PROTOCOL (DTAPI_E + 175)
#define DTAPI_E_INVALID_FEC_MATRIX (DTAPI_E + 176)
#define DTAPI_E_INVALID_IP_ADDR (DTAPI_E + 177)
#define DTAPI_E_INVALID_SRCIP_ADDR (DTAPI_E + 178)
#define DTAPI_E_IPV6_NOT_SUPPORTED (DTAPI_E + 179)
#define DTAPI_E_INVALID_DIFFSERV (DTAPI_E + 180)
#define DTAPI_E_INVALID_FOR_ACM (DTAPI_E + 181)
#define DTAPI_E_NWAP_DRIVER (DTAPI_E + 182)
#define DTAPI_E_INIT_ERROR (DTAPI_E + 183)
#define DTAPI_E_NOT_USB3 (DTAPI_E + 184)
#define DTAPI_E_INSUF_BW (DTAPI_E + 185)
#define DTAPI_E_NO_ANC_DATA (DTAPI_E + 186)
#define DTAPI_E_MATRIX_HALTED (DTAPI_E + 187)
#define DTAPI_E_VLAN_NOT_FOUND (DTAPI_E + 188)
#define DTAPI_E_NO_ADAPTER_IP_ADDR (DTAPI_E + 189)
#define DTAPI_E_INVALID_BTYPE (DTAPI_E + 190)
#define DTAPI_E_INVALID_PARTIAL (DTAPI_E + 191)
#define DTAPI_E_INVALID_NUMTS (DTAPI_E + 192)
#define DTAPI_E_INVALID (DTAPI_E + 193)
#define DTAPI_E_NO_RS422 (DTAPI_E + 194)
#define DTAPI_E_FECFRAMESIZE (DTAPI_E + 195)
#define DTAPI_E_SFN_NOT_SUPPORTED (DTAPI_E + 196)
#define DTAPI_E_SFN_INVALID_MODE (DTAPI_E + 197)
#define DTAPI_E_SFN_INVALID_OFFSET (DTAPI_E + 198)
#define DTAPI_E_SFN_DISABLED (DTAPI_E + 199)
#define DTAPI_E_SFN_INVALID_TIMEDIFF (DTAPI_E + 200)
#define DTAPI_E_NO_GPSCLKREF (DTAPI_E + 201)
#define DTAPI_E_NO_GPSSYNC (DTAPI_E + 202)
#define DTAPI_E_INVALID_PROFILE (DTAPI_E + 203)
#define DTAPI_E_INVALID_LINKSTD (DTAPI_E + 204)
#define DTAPI_E_FRAMERATE_MISMATCH (DTAPI_E + 205)
#define DTAPI_E_CID_INVALID_ID (DTAPI_E + 206)
#define DTAPI_E_CID_INVALID_INFO (DTAPI_E + 207)
#define DTAPI_E_CID_INVALID_FORMAT (DTAPI_E + 208)
#define DTAPI_E_CID_NOT_SUPPORTED (DTAPI_E + 209)
#define DTAPI_E_INVALID_SAMPRATE (DTAPI_E + 210)
#define DTAPI_E_MULTIMOD_UNSUP (DTAPI_E + 211)
#define DTAPI_E_NUM_CHAN (DTAPI_E + 212)
#define DTAPI_E_INVALID_TIME (DTAPI_E + 213)
#define DTAPI_E_INVALID_LINK (DTAPI_E + 214)
#define DTAPI_E_MODE_VIDEOSTD (DTAPI_E + 215)
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//=+=+=+=+=+=+=+=+ DVB-C2, DVB-S2, DVB-T2, ISDB-Tmm Multi PLP Parameters +=+=+=+=+=+=+=+=+
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtBigTsSplitPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class for specifying 'Big TS' splitting
//
struct DtBigTsSplitPars
{
bool m_Enabled; // Enable 'Big TS' splitting
bool m_IsCommonPlp; // Is Common PLP or Layer
bool m_SplitSdtIn; // SDT already split (e.g. BBC TS-files)
std::vector<int> m_Pids; // Series of PIDs to include in the PLP
// The parameters below are not used in case of a common PLP
int m_OnwId; // Original Network ID of the Big-TS
int m_TsId; // Transport Stream ID of the Big-TS
int m_ServiceId; // ID of service to include in PLP
int m_PmtPid; // PID of the PMT-table
int m_NewTsId; // New Transport Stream ID
int m_SdtLoopDataLength; // SDT loop data length. 0..168
// Not used if m_SplitSdtIn == true
// The SDT-Actual loop data
unsigned char m_SdtLoopData[168];
public:
// Methods
void Init(void);
// Operators
bool operator == (DtBigTsSplitPars& TsSplitPars);
bool operator != (DtBigTsSplitPars& TsSplitPars);
bool IsEqual(DtBigTsSplitPars& TsSplitPars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtPlpInpPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class for specifying the PLP input
//
struct DtPlpInpPars
{
// PLP input data types
enum InDataType
{
TS188, // 188-byte TS packets
TS204, // 204-byte TS packets
GSE // Generic Stream Encapsulation
};
public:
int m_FifoIdx; // Fifo index used for the PLP
// If Big TS file splitting is used, PLPs in a group
// can share the input FIFO
InDataType m_DataType; // TS188, TS204 byte or GSE packets
DtBigTsSplitPars m_BigTsSplit; // Big TS splitting (optional)
public:
// Methods
void Init(int Idx = 0);
// Operators
bool operator == (DtPlpInpPars& PlpInPars);
bool operator != (DtPlpInpPars& PlpInPars);
bool IsEqual(DtPlpInpPars& PlpInPars);
};
// Test point data format
#define DTAPI_TP_FORMAT_HEX 0
#define DTAPI_TP_FORMAT_BIT 1
#define DTAPI_TP_FORMAT_CFLOAT32 2
#define DTAPI_TP_FORMAT_INT64 3
// Complex floating point type
struct DtComplexFloat
{
float m_Re, m_Im; // Real, imaginary part
};
// Function to write test point data
typedef void DtTpWriteDataFunc(void* pOpaque, int TpIndex, int StreamIndex,
const void* Buffer, int Length, int Format, float Mult, int IsNewFrame);
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtTestPointOutPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Class for enabling the test point data output specifying a callback function
//
struct DtTestPointOutPars
{
public:
bool m_Enabled; // Enable TP data output
void* m_pTpWriteDataOpaque; // Opaque data pointer passed to TpWriteData
// Callback function for writing test data
DtTpWriteDataFunc* m_pTpWriteDataFunc;
public:
// Methods
void Init(void);
// Operators
bool operator == (DtTestPointOutPars& RbmPars);
bool operator != (DtTestPointOutPars& RbmPars);
bool IsEqual(DtTestPointOutPars& RbmPars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtVirtualOutData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure describing and containing the output data for a virtual output channel
//
struct DtVirtualOutData
{
// Virtual output data types
enum OutDataType
{
IQ_INT16, // 16-bit I/Q samples
IQ_FLOAT32, // 32 bit float I/Q samples
T2MI_TS188, // 188 byte T2MI TS-packets
DVBS2_L3, // L3 format for DVB-S2
};
OutDataType m_DataType; // Output data type
// Output type dependent parameters
union {
// 16-bit int I/Q samples
struct {
// Array of buffers; Per output channel a buffer with samples
const unsigned char** m_pBuffer;
int m_NumBuffers; // Number of buffers
int m_NumBytes; // Number of bytes
} IqSamplesInt16;
// 32-bit float I/Q samples
struct {
// Array of buffers. Per output channel a buffer with samples
const unsigned char** m_pBuffer;
int m_NumBuffers; // Number of buffers
int m_NumBytes; // Number of bytes
} IqSamplesFloat32;
// 188-byte T2MI TS packets
struct {
// Pointer to T2MI TS-packet(s)
const unsigned char* m_pBuffer;
int m_NumBytes; // Number of bytes
__int64 m_T2MiFrameNr; // T2MI super frame number counter
} T2MiTs188;
// L3 frames
struct {
// Pointer to L3 frame(s)
const unsigned char* m_pBuffer;
int m_NumBytes; // Number of bytes
} DvbS2L3;
} u;
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtVirtualOutPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class for specifying the output type and level for a virtual output.
// These parameters are only relevant when outputting to a virtual output channel.
//
struct DtVirtualOutPars
{
bool m_Enabled; // Enable virtual output parameters
DtVirtualOutData::OutDataType m_DataType;
// Type of output data
double m_Gain; // The square root of the average power of
// the generated signal
public:
void Init(void);
bool IsEqual(DtVirtualOutPars& VirtOutPars);
bool operator == (DtVirtualOutPars& VirtOutPars);
bool operator != (DtVirtualOutPars& VirtOutPars);
};
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ DAB Parameters +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// DAB error protection modes
#define DTAPI_DAB_UEP 0 // DAB unequal error protection
#define DTAPI_DAB_EEP 1 // DAB equal error protection
// DAB data extraction mode
enum DtDabExtractionMode
{
DAB_RAW, // Raw DAB stream, no extraction
DAB_EXTRACTION_AAC, // AAC/DAB+ stream extraction
DAB_EXTRACTION_DMB // DMB stream extraction
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDabEtiStreamSelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure for DAB Ensemble Transport Interface (ETI) selection
//
struct DtDabEtiStreamSelPars
{
// No selection parameters yet
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDabStreamSelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Structure for DAB selection
//
struct DtDabStreamSelPars
{
int m_BitrateKbps; // Bitrate in kbps
int m_ErrProtLevel; // Error protection level: 1..5 (UEP); 1..4 (EEP)
int m_ErrProtMode; // Error protection mode: DTAPI_DAB_UEP/EEP
int m_ErrProtOption; // Error protection option (EEP only): 0 or 1
int m_StartAddress; // Start address in DAB capacity units (64bits)
// DAB data extraction mode: DAB_RAW, DAB_EXTRACTION_AAC or DAB_EXTRACTION_DMB
DtDabExtractionMode m_ExtractionMode;
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDabFicStreamSelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Selection parameters for a DAB Fast Information Channel (FIC)
//
struct DtDabFicStreamSelPars
{
// Parameters below are passed in the WriteStreamFunc() callback function;
// the parameters are not used for selection
int m_CifIndex; // Index of the CIF in the DAB frame to which this
// FIB is associated
int m_FibIndex; // Index of this FIB in the group of FIBs that
// are associated to the same CIF
};
// Forward declarations
struct DtDabService;
struct DtDabSubChannel;
struct DtDabServiceComp;
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDabEnsembleInfo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Information about a DAB ensemble
//
struct DtDabEnsembleInfo
{
int m_CountryId; // Country identifier
int m_EnsembleReference; // Indentifier of this ensemble in national area
int m_ExtCountryCode; // Extended country code
int m_InterTableId; // International table identifier
std::wstring m_Label; // Label identifying this ensemble
int m_LocalTimeOffset; // Local time offset in half hours from UTC
int m_LtoUnique; // Covers one(=0) or several(=1) time zones
int m_TransmissionMode; // Transmission mode: 1..4
// Services contained in this ensemble
std::vector<DtDabService> m_Services;
// Subchannels in this ensemble. Key: subchannel identifier
std::map<int, DtDabSubChannel> m_SubChannels;
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDabService -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Information about a single service. Every service must have one primary service
// component and can have one or more non-primay service components
//
struct DtDabService
{
int m_CondAccessId; // Conditional access identifier
int m_CountryId; // Country identifier
int m_ExtCountryCode; // Extended country code; -1 for program service
bool m_IsLocal; // True if local (partial) ensemble service area
std::wstring m_Label; // Label identifying this service
int m_ServiceReference; // Identifier of the service
// Components in this service
std::vector<DtDabServiceComp> m_Components;
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDabServiceComp -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Information about a single DAB service component
//
struct DtDabServiceComp
{
int m_AudioServiceCompType; // Audio service component type; -1 if not applicable
int m_DataServiceCompType; // Data service component type; -1 if not applicable
int m_FidChannelId; // Fast information data channel identifier 0..63;
// -1 if not applicable
bool m_HasCondAccess; // True if access control applies
bool m_IsPrimary; // True if this is the primary component
std::wstring m_Label; // Label identifying this service component
int m_Language; // Service compoment language or -1
int m_SubChannelId; // Subchannel identifier: 0..63; -1 if not applicable
int m_ServiceCompId; // Service component identifier; -1 if not applicable
int m_TransportMechanismId; // Transport mechanism identifier
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDabSubChannel -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// A DAB subchannel contains the data for a single audio or data stream. Every service
// component refers to a subchannel, but multiple service components can refer to the
// same subchannel. In that case more than one service can use the same audio stream.
//
struct DtDabSubChannel
{
int m_BitrateKbps; // Bitrate in kbps
int m_ErrProtLevel; // Protection level UEP: 1..5; EEP: 1..4
int m_ErrProtMode; // Error protection mode: DTAPI_DAB_UEP/EEP
int m_ErrProtOption; // Option for EEP; -1 for UEP
int m_FecScheme; // FEC scheme; -1 if not applicable
int m_StartAddress; // Start address in capacity units (64bits)
int m_SubChannelId; // Subchannel identifier: 0..63
int m_SubChannelSize; // Size of subchannel in capacity units (64bits)
int m_UepTableIndex; // Index in UEP table; -1 if not applicable
int m_UepTableSwitch; // UEP table switch; -1 if not applicable
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDabTransmitterId -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
struct DtDabTransmitterId
{
int m_TxMainId; // Transmitter main identifier;
// 0...5 (for transmission mode 3) otherwise 0...69
int m_TxSubId; // Transmitter sub-identifier; 0...23
double m_RelativePowerdB;; // Transmitter power, relative to total power
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDabTransmitterIdInfo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Information about a DAB transmitter identification
//
struct DtDabTransmitterIdInfo
{
std::vector<DtDabTransmitterId> m_Transmitters;
};
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ DVB-C2 Parameters +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// Maxima
#define DTAPI_DVBC2_NUM_DSLICE_MAX 255 // Maximum number of data slices
#define DTAPI_DVBC2_NUM_PLP_MAX 255 // Maximum number of PLPs
#define DTAPI_DVBC2_NUM_NOTCH_MAX 16 // Maximum number of Notches
// PLP IDs
#define DTAPI_DVBC2_PLP_ID_NONE -1 // No PLP selected
#define DTAPI_DVBC2_PLP_ID_AUTO -2 // Automatic PLP selection
// Data slice IDs
#define DTAPI_DVBC2_DSLICE_ID_AUTO -2 // Automatic data slice selection
// m_Bandwidth
#define DTAPI_DVBC2_6MHZ 6 // 6 MHz
#define DTAPI_DVBC2_8MHZ 8 // 8 MHz
// m_Guard - Guard interval
#define DTAPI_DVBC2_GI_1_128 0 // 1/128
#define DTAPI_DVBC2_GI_1_64 1 // 1/64
// m_L1TiMode - L1 time interleaving mode
#define DTAPI_DVBC2_L1TIMODE_NONE 0 // No time interleaving
#define DTAPI_DVBC2_L1TIMODE_BEST 1 // Best fit
#define DTAPI_DVBC2_L1TIMODE_4 2 // 4 OFDM symbols
#define DTAPI_DVBC2_L1TIMODE_8 3 // 8 OFDM symbols
// m_Type - PLP type
#define DTAPI_DVBC2_PLP_TYPE_COMMON 0 // Common PLP
#define DTAPI_DVBC2_PLP_TYPE_GROUPED 1 // Grouped Data PLP
#define DTAPI_DVBC2_PLP_TYPE_NORMAL 2 // Normal Data PLP
// m_FecType - PLP FEC type
#define DTAPI_DVBC2_LDPC_16K 0 // 16K LDPC
#define DTAPI_DVBC2_LDPC_64K 1 // 64K LDPC
// m_CodeRate - PLP code rate
#define DTAPI_DVBC2_COD_2_3 1 // 2/3
#define DTAPI_DVBC2_COD_3_4 2 // 3/4
#define DTAPI_DVBC2_COD_4_5 3 // 4/5
#define DTAPI_DVBC2_COD_5_6 4 // 5/6
#define DTAPI_DVBC2_COD_8_9 5 // 8/9 (For 16K FEC)
#define DTAPI_DVBC2_COD_9_10 5 // 9/10 (For 64K FEC)
// m_Modulation - PLP constellation
#define DTAPI_DVBC2_QAM16 1 // 16-QAM
#define DTAPI_DVBC2_QAM64 2 // 64-QAM
#define DTAPI_DVBC2_QAM256 3 // 256-QAM
#define DTAPI_DVBC2_QAM1024 4 // 1024-QAM
#define DTAPI_DVBC2_QAM4096 5 // 4096-QAM
#define DTAPI_DVBC2_QAM16384 6 // 16K-QAM non standard, but supported
#define DTAPI_DVBC2_QAM65536 7 // 64K-QAM non standard, but supported
// m_C2Version - DVB-C2 specification version
#define DTAPI_DVBC2_VERSION_1_2_1 0 // DVB-C2 version 1.2.1
#define DTAPI_DVBC2_VERSION_1_3_1 1 // DVB-C2 version 1.3.1
// m_Issy - PLP ISSY
#define DTAPI_DVBC2_ISSY_NONE 0 // No ISSY field is used
#define DTAPI_DVBC2_ISSY_SHORT 1 // 2 byte ISSY field is used
#define DTAPI_DVBC2_ISSY_LONG 2 // 3 byte ISSY field is used
// m_TiDepth - Data slice time interleaving depth
#define DTAPI_DVBC2_TIDEPTH_NONE 0 // No time interleaving
#define DTAPI_DVBC2_TIDEPTH_4 1 // 4 OFDM symbols
#define DTAPI_DVBC2_TIDEPTH_8 2 // 8 OFDM symbols
#define DTAPI_DVBC2_TIDEPTH_16 3 // 16 OFDM symbols
// m_Type - Data slice type
#define DTAPI_DVBC2_DSLICE_TYPE_1 0 // Type 1 (Single PLP and fixed mod/cod)
#define DTAPI_DVBC2_DSLICE_TYPE_2 1 // Type 2
// m_FecHdrType - Data slice FEC frame header type
#define DTAPI_DVBC2_FECHDR_TYPE_ROBUST 0 // Robust mode
#define DTAPI_DVBC2_FECHDR_TYPE_HEM 1 // High efficiency mode
// DVB-C2 Test points
enum {
DTAPI_DVBC2_TP07, // FEC frame
DTAPI_DVBC2_TP08,
DTAPI_DVBC2_TP10,
DTAPI_DVBC2_TP13,
DTAPI_DVBC2_TP15, // Data slice
DTAPI_DVBC2_TP18, // OFDM output
DTAPI_DVBC2_TP20,
DTAPI_DVBC2_TP22, // FEC header
DTAPI_DVBC2_TP26,
DTAPI_DVBC2_TP27, // L1 header
DTAPI_DVBC2_TP31,
DTAPI_DVBC2_TP32, // L1 part2 data
DTAPI_DVBC2_TP33, // L1 part2 + padding & CRC
DTAPI_DVBC2_TP37,
DTAPI_DVBC2_TP40,
DTAPI_DVBC2_TP41,
DTAPI_DVBC2_TP42,
DTAPI_DVBC2_TP01,
DTAPI_DVBC2_TP_COUNT,
};
// DVB-C2 test points
extern const int DTAPI_DVBC2_TESTPOINTS[DTAPI_DVBC2_TP_COUNT];
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2DSlicePars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class for specifying the data slice parameters
//
struct DtDvbC2DSlicePars
{
int m_Id; // Data slice ID. 0..255
int m_TunePosition; // Tune position relative to the start frequency in
// multiples of pilot carrier spacing.
// For guard interval 1/128: 0..8191
// For guard interval 1/64: 0..16383
int m_OffsetLeft; // Offset left in multiples of pilot carrier spacing.
// For guard interval 1/128: -128..127
// For guard interval 1/64: -256..255
int m_OffsetRight; // Offset right in multiples of pilot carrier spacing.
// For guard interval 1/128: -128..127
// For guard interval 1/64: -256..255
// If m_OffsetLeft = m_OffsetRight, the data slice is
// empty and no input streams are created for the PLPs
// of the data slice.
int m_TiDepth; // Time interleaving depth. See DTAPI_DVBC2_TIDEPTH_x
int m_Type; // Data slice type. See DTAPI_DVBC2_DSLICE_TYPE_x
int m_FecHdrType; // FEC header type. See DTAPI_DVBC2_FECHDR_TYPE_x
bool m_ConstConfig; // Constant data slice configuration
bool m_LeftNotch; // Left notch present
// Data per PLP
std::vector<DtDvbC2PlpPars> m_Plps;
public:
void Init(int Id=0);
bool IsEqual(DtDvbC2DSlicePars& DSlicePars);
bool operator == (DtDvbC2DSlicePars& DSlicePars);
bool operator != (DtDvbC2DSlicePars& DSlicePars);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2L1UpdatePlpPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// struct for L1 PLP parameter update support
//
struct DtDvbC2L1UpdatePlpPars
{
bool m_Enable; // Enable or disable the PLP.
// Only PLPs with m_NoData = true can be disabled.
public:
void Init();
bool IsEqual(DtDvbC2L1UpdatePlpPars& PlpUpdatePars);
bool operator == (DtDvbC2L1UpdatePlpPars& PlpUpdatePars);
bool operator != (DtDvbC2L1UpdatePlpPars& PlpUpdatePars);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2L1UpdateDSlicePars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// struct for L1 DSlice parameter update support
//
struct DtDvbC2L1UpdateDSlicePars
{
bool m_Enable; // Enable or disable the DSlice.
// Only dummy data slices can be disabled.
// A data slice is considered as dummy if either:
// - m_OffsetLeft == m_OffsetRight in its
// global configuration; or
// - all its PLPs have m_NoData = true
// A dummy data slice is modulated with dummy data.
int m_OffsetLeft; // Data slice left offset - 0..2^(8+g)-1
int m_OffsetRight; // Data slice right offset - 0..2^(8+g)-1
// If the data slice is not dummy:
// - For type 1 , no size change is accepted.
// - For type 2 , size change is accepted
// provided it is not zero (i.e. m_OffsetRight >
// m_OffsetLeft). It is up to the user to ensure that
// there is no bitrate overflow.
std::vector<DtDvbC2L1UpdatePlpPars> m_Plps; // L1 PLP updates
public:
void Init();
bool IsEqual(DtDvbC2L1UpdateDSlicePars& DSliceUpdatePars);
bool operator == (DtDvbC2L1UpdateDSlicePars& DSliceUpdatePars);
bool operator != (DtDvbC2L1UpdateDSlicePars& DSliceUpdatePars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2L1UpdatePars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// L1 update support
//
struct DtDvbC2L1UpdatePars
{
int m_NumFrames; // The following parameters are used during
// 'm_NumFrames' C2 frames
// L1 DSlice updates
std::vector<DtDvbC2L1UpdateDSlicePars> m_DSlices;
bool m_EarlyWarningSystem; // Early warning system
public:
void Init();
bool IsEqual(DtDvbC2L1UpdatePars& L1UpdatePars);
bool operator == (DtDvbC2L1UpdatePars& L1UpdatePars);
bool operator != (DtDvbC2L1UpdatePars& L1UpdatePars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2ModStatus -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure for retrieving the DVB-C2 MPLP modulator status
//
struct DtDvbC2ModStatus
{
int m_MplpModFlags; // Multi PLP modulator flags
__int64 m_DjbOverflows; // Count number of DJB overflows. If it happens,
// issy output delay must be decreased or "issy bufs"
// increased.
__int64 m_DjbUnderflows; // Count number of DJB underflows. If it happens,
// issy output delay must be increased.
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2NotchPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class for specifying the notch parameters
//
struct DtDvbC2NotchPars
{
int m_Start; // Notch start in multiples of pilot carrier spacing.
// For guard interval 1/128: 0..8191
// For guard interval 1/64: 0..16383
int m_Width; // Notch width in multiples of pilot carrier spacing.
// For guard interval 1/128: 0..255
// For guard interval 1/64: 0..511
public:
void Init(void);
bool IsEqual(DtDvbC2NotchPars& NotchPars);
bool operator == (DtDvbC2NotchPars& NotchPars);
bool operator != (DtDvbC2NotchPars& NotchPars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2PaprPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Class for specifying and enabling the PAPR reduction parameters
//
struct DtDvbC2PaprPars
{
bool m_TrEnabled; // TR enabled
double m_TrVclip; // TR clipping threshold 1..4.32 (Volt)
int m_TrMaxIter; // TR maximum number of iterations. Must be >= 1.
// Note: PAPR TR processing time is proportional
// to this parameter
public:
void Init(void);
bool IsEqual(DtDvbC2PaprPars& PaprPars);
bool operator == (DtDvbC2PaprPars& PaprPars);
bool operator != (DtDvbC2PaprPars& PaprPars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2ParamInfo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// DVB-C2 parameter info
//
struct DtDvbC2ParamInfo
{
int m_L1Part2Length; // #bits of the L1 part2 data (including CRC)
int m_NumL1Symbols; // Number of L1 symbols (LP)
int m_NumSymbols; // Total number of symbols per frame (LP + Ldata)
int m_PilotSpacing; // Distance between pilots (Dx)
int m_FftSize; // FFT size
int m_MinCarrierOffset; // Lowest used carrier offset (Koffset)
int m_CenterFrequency; // Center frequency in multiples of the carrier
// spacing
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2PlpPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Class for specifying the parameters of a PLP.
// In case of bundled PLPs, only the mode adaptation parameters from the
// first PLP of the bundle are used.
//
struct DtDvbC2PlpPars
{
bool m_Hem; // High Efficiency Mode
bool m_Npd; // Null Packet Deletion
int m_Issy; // Issy mode. See DTAPI_DVBC2_ISSY_x
int m_IssyBufs; // Issy BUFS
int m_IssyOutputDelay; // Delay (in T units) between the incoming data and
// the output TS in the receiver model. This value
// determines the minimum and maximum dejitter buffer
// usage and is used to compute the ISSY BUFSTAT field
int m_TsRate; // If 0 the rate is computed from the PLP parameters,
// only possible in case of single PLP and no ISSY
// is used
int m_Ccm; // ACM/CMM bit in the BBframe header 0 or 1
int m_Id; // PLP ID. 0..255
bool m_Bundled; // A bundled PLP can appear in several data slices.
// All the PLP instances have the same PLP ID.
// Only a single input stream results from the
// first PLP of the bundle.
int m_Type; // PLP Type. See DTAPI_DVBC2_PLP_TYPE_x
int m_GroupId; // Group ID. 0..255
int m_FecType; // FEC Type. 0=16K, 1=64K
int m_CodeRate; // PLP Code rate. See DTAPI_DVBC2_COD_x
int m_Modulation; // PLP Modulation. See DTAPI_DVBC2_x
int m_HdrCntr; // Header counter #FECFrames following the
// FECFrame header. 0=1FF 1=2FF.
// Only used for DSlice type 2.
// ACM test mode. Only available for type 2 data slices. If number ACM headers != 0,
// then the successive XFEC frames of this PLP use the modulation and coding
// parameters taken from the m_AcmHeaders array. After the last value is used, it
// loops again to the start of the array.
// So DtDvbC2PlpPars.m_FecType, m_Modulation, m_CodeRate and m_HdrCntr are ignored.
std::vector<DtDvbC2XFecFrameHeader> m_AcmHeaders;
bool m_PsiSiReproc; // Indicates whether PSI/SI reprocessing is performed
int m_TsId; // Transport Stream ID (if m_PsiSiReproc=false)
int m_OnwId; // Original Network ID (if m_PsiSiReproc=false)
bool m_NoData; // No input data is provided for this PLP.
// It is implicitely true for all PLPs in a data slice
// with m_OffsetLeft = m_OffsetRight
public:
void Init(int PlpId = 0);
bool IsEqual(DtDvbC2PlpPars& PlpPars);
bool operator == (DtDvbC2PlpPars& PlpPars);
bool operator != (DtDvbC2PlpPars& PlpPars);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2XFecFrameHeader -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// DVBC2 FEC frame header for ACM test
//
struct DtDvbC2XFecFrameHeader
{
int m_FecType; // PLP FEC Type. 0=16K, 1=64K
int m_Modulation; // PLP Modulation. See DTAPI_DVBC2_x
int m_CodeRate; // PLP Code rate. See DTAPI_DVBC2_COD_x
int m_HdrCntr; // Header counter #FEC frames following the
// FEC frame header. 0=1FF, 1=2FF
int m_XFecFrameCount; // 1..256: Number of successive XFEC frames using
// these parameters
public:
void Init(void);
bool IsEqual(DtDvbC2XFecFrameHeader& FecHeader);
bool operator == (DtDvbC2XFecFrameHeader& FecHeader);
bool operator != (DtDvbC2XFecFrameHeader& FecHeader);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2Pars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Class for specifying the DVB-C2 modulation parameters
//
struct DtDvbC2Pars
{
public:
// General C2 parameters
int m_Bandwidth; // Bandwidth. Defines the OFDM carrier spacing
// F=8e6*bandwidth/7/4096 Hz. See DVBC2_BW_x
int m_NetworkId; // Network ID. 0..0xFFFF
int m_C2SystemId; // C2 System ID. 0..0xFFFF
int m_StartFrequency; // Start frequency in multiple of carrier spacing
// 0..2^24 - 1 and multiples of dx.
// For guard interval 1/128 dx=24, otherwise dx=12
int m_C2Bandwidth; // Bandwidth of the generated signal in
// multiples of pilot carrier spacing. 0..65535
int m_GuardInterval; // Guard interval See DVBC2_GI_x
bool m_ReservedTone; // Reserved tone. When there are reserved carriers
// (e.g. PAPR TR is enabled) it shall be set to true;
// otherwise false
bool m_EarlyWarningSystem; // Early warning system
int m_C2Version; // DVB-C2 Version
int m_L1TiMode; // L1 time interleaving mode. See DVBC2_L1TIMODE_x
// Data slices parameters
int m_NumDSlices; // Number of data slices
DtDvbC2DSlicePars m_DSlices[DTAPI_DVBC2_NUM_DSLICE_MAX];
// Notches
int m_NumNotches; // Number of notches
DtDvbC2NotchPars m_Notches[DTAPI_DVBC2_NUM_NOTCH_MAX];
// PLP input
int m_NumPlpInputs; // Number of PLPs
DtPlpInpPars m_PlpInputs[DTAPI_DVBC2_NUM_PLP_MAX]; // PLP inputs (Optional)
DtDvbC2PaprPars m_PaprPars; // PAPR Params (Optional)
DtVirtualOutPars m_VirtOutput; // Virtual Output parameters(Optional)
DtTestPointOutPars m_TpOutput; // Test point data output parameters (Optional)
int m_OutpFreqOffset; // Output frequency offset from 'm_StartFrequency'
// in carriers of the generated spectrum.
// Must be multiple of dx.
int m_OutpBandwidth; // Output bandwidth in carriers and a multiple of dx.
// 0 means default output bandwidth.
// Note: for convenience, one more carrier is output
// if an edge carrier needs to be output.
std::vector<DtDvbC2L1UpdatePars> m_L1Updates; // L1 updates
// Undocumented
int m_L1P2ChangeCtr; // Undocumented. For internal use only
bool m_NotchTestEnable; // Undocumented. For internal use only
int m_TimeWindowLength; // Undocumented. For internal use only
public:
DTAPI_RESULT CheckValidity(void);
DTAPI_RESULT GetParamInfo(DtDvbC2ParamInfo& C2Info);
void Init(void);
bool IsEqual(DtDvbC2Pars& C2Pars);
bool operator == (DtDvbC2Pars& C2Pars);
bool operator != (DtDvbC2Pars& C2Pars);
};
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ DVB-C2 Demodulation +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// DtDvbC2DemodL1Part2Plp::m_PayloadType - The PLP payload type
#define DTAPI_DVBC2_PAYLOAD_GFPS 0 // Generic fixed-length packetized stream
#define DTAPI_DVBC2_PAYLOAD_GCS 1 // Generic continuous stream
#define DTAPI_DVBC2_PAYLOAD_GSE 2 // Generic stream encapsulation
#define DTAPI_DVBC2_PAYLOAD_TS 3 // Transport Stream
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2DemodL1PlpSigDataPlp -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Struct for storing layer 1 PLP signalling information per PLP.
// For type 1 data slices this struct contains the PLP-signalling information
// from the layer 1 part 2 signalling.
// For type 2 data slices this struct contains the PLP-signalling information
// from the layer 1 part 1 (=FEC-frame header).
//
struct DtDvbC2DemodL1PlpSigDataPlp
{
int m_Id; // PLP ID: 0..255
int m_FecType; // PLP FEC type: 0=LDPC 16K, 1=LDPC 64K
int m_Modulation; // PLP modulation, see DTAPI_DVBC2_x
int m_CodeRate; // PLP modulation, see DTAPI_DVBC2_x
int m_HdrCntr; // Header counter #FEC frames following the
// FEC frame header. 0=1FF, 1=2FF. Only present for
// type 2 data slices
DtDvbC2DemodL1PlpSigDataPlp();
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2DemodL1PlpSigData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Struct for storing the DVB-C2 layer 1 PLP signalling data
//
struct DtDvbC2DemodL1PlpSigData
{
int m_NumPlps; // Number of PLPs
std::vector<DtDvbC2DemodL1PlpSigDataPlp> m_Plps;
DtDvbC2DemodL1PlpSigData();
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2DemodL1Part2Plp -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Struct for storing Layer 1 part 2 information per PLP
//
struct DtDvbC2DemodL1Part2Plp
{
int m_Id; // PLP ID: 0..255
int m_Bundled; // Bundled PLP
int m_Type; // PLP type, see DTAPI_DVBC2_PLP_TYPE_x
int m_PayloadType; // PLP payload type: 0..3
int m_GroupId; // Group ID: 0..255
// Start, FecType, Modulation and CodeRate parameters are not present for type 2 data
// slices
int m_Start; // PLP start: Start of the first complete XFECframe
int m_FecType; // PLP FEC type: 0=LDPC 16K, 1=LDPC 64K
int m_Modulation; // PLP modulation, see DTAPI_DVBC2_x
int m_CodeRate; // PLP modulation, see DTAPI_DVBC2_x
int m_PsiSiReproc; // Indicates whether PSI/SI reprocessing is performed
int m_TsId; // Transport Stream ID (if m_PsiSiReproc=false)
int m_OnwId; // Original Network ID (if m_PsiSiReproc=false)
DtDvbC2DemodL1Part2Plp();
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2DemodL1Part2DSlice -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Struct for storing Layer 1 part 2 information per data slice
//
struct DtDvbC2DemodL1Part2DSlice
{
int m_Id; // Data slice ID: 0..255
int m_TunePosition; // Tune position relative to the start frequency in
// multiples of pilot carrier spacing.
// For guard interval 1/128: 0..8191
// For guard interval 1/64: 0..16383
int m_OffsetLeft; // Offset left in multiples of pilot carrier spacing.
// For guard interval 1/128: -128..127
// For guard interval 1/64: -256..255
int m_OffsetRight; // Offset right in multiples of pilot carrier spacing.
// For guard interval 1/128: -128..127
// For guard interval 1/64: -256..255
// If m_OffsetLeft = m_OffsetRight, the data slice is
// empty and no input streams are created for the PLPs
// of the data slice.
int m_TiDepth; // Time interleaving depth, see DTAPI_DVBC2_TIDEPTH_x
int m_Type; // Data slice type, see DTAPI_DVBC2_DSLICE_TYPE_x
int m_FecHdrType; // FEC header type, see DTAPI_DVBC2_FECHDR_TYPE_x
int m_ConstConfig; // Constant data slice configuration flag
int m_LeftNotch; // Left notch present flag
// PLPs
int m_NumPlps; // Number of PLPs
std::vector<DtDvbC2DemodL1Part2Plp> m_Plps;
DtDvbC2DemodL1Part2DSlice();
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2DemodL1Part2Data -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Struct for storing the DVB-C2 layer 1 part 2data
//
struct DtDvbC2DemodL1Part2Data
{
int m_NetworkId; // Network ID: 0..0xFFFF
int m_C2SystemId; // C2 System ID: 0..0xFFFF
int m_StartFrequency; // Start frequency in multiple of carrier spacing:
// 0..2^24 - 1
int m_C2Bandwidth; // Bandwidth of the generated signal in
// multiples of pilot carrier spacing: 0..65535
int m_GuardInterval; // Guard interval. See DVBC2_GI_x
int m_C2FrameLength; // C2 frame length: #Data symbols per C2 frame
int m_L1P2ChangeCtr; // Value of the L1_PART2_CHANGE_COUNTER field
int m_ReservedTone; // Reserved tone
bool m_EarlyWarningSystem; // Early warning system
int m_C2Version; // DVB-C2 Version
// Data slices
int m_NumDSlices; // Number of data slices
std::vector<DtDvbC2DemodL1Part2DSlice> m_DSlices;
// Notches
int m_NumNotches; // Number of notches
std::vector<DtDvbC2NotchPars> m_Notches;
DtDvbC2DemodL1Part2Data();
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbC2StreamSelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure for DVB-C2 PLP-stream selection
//
struct DtDvbC2StreamSelPars
{
int m_DSliceId; // ID of the data slice or DTAPI_DVBC2_DSLICE_ID_AUTO
int m_PlpId; // ID of the data PLP or DTAPI_DVBC2_PLP_ID_xxx
int m_CommonPlpId; // ID of the common PLP or DTAPI_DVBC2_PLP_ID_xxx
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ DVB-S2 Parameters +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
#define DTAPI_DVBS2_NUM_PLP_MAX 255 // Maximum number of PLPs
// m_Issy - PLP ISSY
#define DTAPI_DVBS2_ISSY_NONE 0 // No ISSY field is used
#define DTAPI_DVBS2_ISSY_SHORT 1 // 2 byte ISSY field is used
#define DTAPI_DVBS2_ISSY_LONG 2 // 3 byte ISSY field is used
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- struct DtDvbS2ModStatus -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
struct DtDvbS2ModStatus
{
int m_MplpModFlags; // Multi PLP modulator flags
__int64 m_DjbOverflows; // Count number of DJB overflows. If it happens,
// issy output delay must be decreased or "issy bufs"
// increased.
__int64 m_DjbUnderflows; // Count number of DJB underflows. If it happens,
// issy output delay must be increased.
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.- struct DtDvbS2FecFrameHeader -.-.-.-.-.-.-.-.-.-.-.-.-.-.-
struct DtDvbS2FecFrameHeader
{
int m_Modulation; // PLP Modulation. See DTAPI_MOD_DVBS2_*
int m_CodeRate; // PLP Code rate. See DTAPI_MOD_x
int m_FecFrameSize; // Fec frame size. See DTAPI_MOD_S2_*FRM
bool m_HasPilots; // Enable pilots
int m_FecFrameCount; // Number of successive FEC frames using these
// parameters, 0 means infinite.
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- struct DtDvbS2ModCod -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
struct DtDvbS2ModCod
{
int m_ModType; // Modulation type, e.g. DTAPI_MOD_DVBS_QPSK
int m_CodeRate; // Code rate, e.g. DTAPI_MOD_1_2
// Constructor
DtDvbS2ModCod();
DtDvbS2ModCod(int ModType, int CodeRate);
bool operator < (const DtDvbS2ModCod& ModCod) const;
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- struct DtDvbS2PlpPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
struct DtDvbS2PlpPars
{
bool m_Hem; // High Efficiency Mode
bool m_Npd; // Null Packet Deletion
int m_Issy; // Issy mode. See DTAPI_DVBS2_ISSY_x
int m_IssyBufs; // Issy BUFS
int m_IssyOutputDelay; // Delay (in T units) between the incoming data and
// the output TS in the receiver model. This value
// determines the minimum and maximum dejitter buffer
// usage and is used to compute the ISSY BUFSTAT field
int m_TsRate; // Ts rate
int m_Ccm; // ACM/CMM bit in the BBframe header 0 or 1
int m_Id; // PLP ID. 0..255
// One or more fec frame headers. If there is only 1 the m_FecFrameCount member
// is ignored. Otherwise that specifies the number of frames to generate with those
// parameters. When that number of frames are generated, the next set of parameters
// is taken. After the last DtDvbS2FecFrameHeader the first one is used again.
std::vector<DtDvbS2FecFrameHeader> m_AcmHeaders;
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- struct DtDvbS2Pars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
struct DtDvbS2Pars
{
DtVirtualOutPars m_VirtOutput; // Virtual-output parameters (Optional)
bool m_L3Output; // Set to true to enable L3 output
int m_SymRate; // Symbol rate
int m_RollOff; // Roll-off DTAPI_MOD_ROLLOFF_xxx
// Data per PLP
std::vector<DtDvbS2PlpPars> m_Plps;
// PLP input
int m_NumPlpInputs; // Number of PLPs
DtPlpInpPars m_PlpInputs[DTAPI_DVBS2_NUM_PLP_MAX]; // PLP inputs (Optional)
DtDvbS2Pars();
DTAPI_RESULT CheckValidity();
};
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ DVB-T2 Parameters +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// Maxima
#define DTAPI_DVBT2_NUM_PLP_MAX 255 // Maximum number of PLPs
#define DTAPI_DVBT2_NUM_RF_MAX 7 // Maximum number of RF output signals
// PLP IDs
#define DTAPI_DVBT2_PLP_ID_NONE -1 // No PLP selected
#define DTAPI_DVBT2_PLP_ID_AUTO -2 // Automatic PLP selection
// m_Issy
#define DTAPI_DVBT2_ISSY_NONE 0 // No ISSY field is used
#define DTAPI_DVBT2_ISSY_SHORT 1 // 2-byte ISSY field is used
#define DTAPI_DVBT2_ISSY_LONG 2 // 3-byte ISSY field is used
// m_Bandwidth
#define DTAPI_DVBT2_1_7MHZ 0 // 1.7 MHz
#define DTAPI_DVBT2_5MHZ 1 // 5 MHz
#define DTAPI_DVBT2_6MHZ 2 // 6 MHz
#define DTAPI_DVBT2_7MHZ 3 // 7 MHz
#define DTAPI_DVBT2_8MHZ 4 // 8 MHz
#define DTAPI_DVBT2_10MHZ 5 // 10 MHz
#define DTAPI_DVBT2_BW_UNK -1 // Unknown bandwith
#define DTAPI_DVBT2MI_BW_MSK 0xF // Mask for T2MI ParXtra2
#define DTAPI_DVBT2MI_BW_UNK 0xF //Val in ParXtra2 if not set, map to 8MHz
// m_FftMode
// Warning: the codes are different from the corresponding L1 field
#define DTAPI_DVBT2_FFT_1K 0 // 1K FFT
#define DTAPI_DVBT2_FFT_2K 1 // 2K FFT
#define DTAPI_DVBT2_FFT_4K 2 // 4K FFT
#define DTAPI_DVBT2_FFT_8K 3 // 8K FFT
#define DTAPI_DVBT2_FFT_16K 4 // 16K FFT
#define DTAPI_DVBT2_FFT_32K 5 // 32K FFT
#define DTAPI_DVBT2_FFT_UNK -1 // Unknown FFT mode
// m_Miso
#define DTAPI_DVBT2_MISO_OFF 0 // No MISO
#define DTAPI_DVBT2_MISO_TX1 1 // TX1 only
#define DTAPI_DVBT2_MISO_TX2 2 // TX2 only
#define DTAPI_DVBT2_MISO_TX1TX2 3 // TX1+TX2 Legacy
#define DTAPI_DVBT2_MISO_SUM 3 // TX1+TX2
#define DTAPI_DVBT2_MISO_BOTH 4 // TX1 and TX2
// m_Guard - Guard interval
// Warning: the codes are different from the corresponding L1 field
#define DTAPI_DVBT2_GI_1_128 0 // 1/128
#define DTAPI_DVBT2_GI_1_32 1 // 1/32
#define DTAPI_DVBT2_GI_1_16 2 // 1/16
#define DTAPI_DVBT2_GI_19_256 3 // 19/256
#define DTAPI_DVBT2_GI_1_8 4 // 1/8
#define DTAPI_DVBT2_GI_19_128 5 // 19/128
#define DTAPI_DVBT2_GI_1_4 6 // 1/4
#define DTAPI_DVBT2_GI_UNK -1 // Unknown guard interval
// m_Papr - PAPR - Peak to Average Power Reduction
#define DTAPI_DVBT2_PAPR_NONE 0
#define DTAPI_DVBT2_PAPR_ACE 1 // ACE - Active Constellation Extension
#define DTAPI_DVBT2_PAPR_TR 2 // TR - PAPR using reserved carriers
#define DTAPI_DVBT2_PAPR_ACE_TR 3 // ACE and TR
// m_BwtExt - Bandwidth extension
#define DTAPI_DVBT2_BWTEXT_OFF false // No bandwidth extension
#define DTAPI_DVBT2_BWTEXT_ON true // Bandwidth extension on
// m_PilotPattern
// Warning: the codes are different from the corresponding L1 field
#define DTAPI_DVBT2_PP_1 1 // PP1
#define DTAPI_DVBT2_PP_2 2 // PP2
#define DTAPI_DVBT2_PP_3 3 // PP3
#define DTAPI_DVBT2_PP_4 4 // PP4
#define DTAPI_DVBT2_PP_5 5 // PP5
#define DTAPI_DVBT2_PP_6 6 // PP6
#define DTAPI_DVBT2_PP_7 7 // PP7
#define DTAPI_DVBT2_PP_8 8 // PP8
// m_CodeRate - Code rate
#define DTAPI_DVBT2_COD_1_2 0 // 1/2
#define DTAPI_DVBT2_COD_3_5 1 // 3/5
#define DTAPI_DVBT2_COD_2_3 2 // 2/3
#define DTAPI_DVBT2_COD_3_4 3 // 3/4
#define DTAPI_DVBT2_COD_4_5 4 // 4/5 not for T2 lite
#define DTAPI_DVBT2_COD_5_6 5 // 5/6 not for T2 lite
#define DTAPI_DVBT2_COD_1_3 6 // 1/3 only for T2 lite
#define DTAPI_DVBT2_COD_2_5 7 // 2/5 only for T2 lite
// m_FefSignal - Type of signal generated during the FEF period
#define DTAPI_DVBT2_FEF_ZERO 0 // Use zero I/Q samples during FEF
#define DTAPI_DVBT2_FEF_1K_OFDM 1 // 1K OFDM symbols with 852 active
// carriers containing BPSK symbols
// (same PRBS as the T2 dummy cells,
// not reset between symbols)
#define DTAPI_DVBT2_FEF_1K_OFDM_384 2 // 1K OFDM symbols with 384 active
// carriers containing BPSK symbols
// m_PlpConstel and m_L1Constel - Modulation constellation
#define DTAPI_DVBT2_BPSK 0 // BPSK
#define DTAPI_DVBT2_QPSK 1 // QPSK
#define DTAPI_DVBT2_QAM16 2 // 16-QAM
#define DTAPI_DVBT2_QAM64 3 // 64-QAM
#define DTAPI_DVBT2_QAM256 4 // 256-QAM
// m_Type - PLP type
#define DTAPI_DVBT2_PLP_TYPE_COMM 0 // Common PLP
#define DTAPI_DVBT2_PLP_TYPE_1 1 // PLP type 1
#define DTAPI_DVBT2_PLP_TYPE_2 2 // PLP type 2
// m_FecType - PLP FEC type
#define DTAPI_DVBT2_LDPC_16K 0 // 16K LDPC
#define DTAPI_DVBT2_LDPC_64K 1 // 64K LDPC
// m_TimeIlType - Time interleaving type
#define DTAPI_DVBT2_IL_ONETOONE 0 // Interleaving frame in one T2 frame
#define DTAPI_DVBT2_IL_MULTI 1 // Interleaving frame in multiple frames
// m_TimeStamping - Type of timestamps in T2MI
#define DTAPI_DVBT2MI_TIMESTAMP_NULL 0 // No timestamping
#define DTAPI_DVBT2MI_TIMESTAMP_REL 1 // Relative timestamps. Use m_Subseconds
#define DTAPI_DVBT2MI_TIMESTAMP_ABS 2 // Absolute timestamps. Use m_T2miUtco,
// m_SecSince2000, m_Subseconds,
// m_T2Version - DVB-T2 specification version
#define DTAPI_DVBT2_VERSION_1_1_1 0 // DVB-T2 version 1.1.1
#define DTAPI_DVBT2_VERSION_1_2_1 1 // DVB-T2 version 1.2.1
#define DTAPI_DVBT2_VERSION_1_3_1 2 // DVB-T2 version 1.3.1
// m_T2Profile - DVB-T2 profile
#define DTAPI_DVBT2_PROFILE_BASE 0
#define DTAPI_DVBT2_PROFILE_LITE 1 // Requires DVB-T2 version 1.3.1
// m_BiasBalancing
#define DTAPI_DVBT2_BIAS_BAL_OFF 0 // No L1 bias compensation
#define DTAPI_DVBT2_BIAS_BAL_ON 1 // Modify L1 reserved fields and L1 ext.
// field padding to compensate L1 bias
// m_GseLabelType - DVB-T2 GSE Label size
#define DTAPI_DVBT2_GSE_LABEL_6BYTE 0 // 6 Byte GSE label
#define DTAPI_DVBT2_GSE_LABEL_3BYTE 1 // 3 Byte GSE label
#define DTAPI_DVBT2_GSE_LABEL_NONE 2 // No GSE label
#define DTAPI_TXSIG_FEF_LEN_MIN 162212 // Min. FEF length for FEF TX sgnalling
// DVB-T2 test point enum
enum {
DTAPI_DVBT2_TP00,
DTAPI_DVBT2_TP01,
DTAPI_DVBT2_TP03,
DTAPI_DVBT2_TP04,
DTAPI_DVBT2_TP06,
DTAPI_DVBT2_TP08,
DTAPI_DVBT2_TP09,
DTAPI_DVBT2_TP11,
DTAPI_DVBT2_TP12,
DTAPI_DVBT2_TP15,
DTAPI_DVBT2_TP16,
DTAPI_DVBT2_TP19, // Only usable if CFLOAT32 output format is selected
DTAPI_DVBT2_TP20,
DTAPI_DVBT2_TP21,
DTAPI_DVBT2_TP22,
DTAPI_DVBT2_TP23,
DTAPI_DVBT2_TP24,
DTAPI_DVBT2_TP25,
DTAPI_DVBT2_TP26,
DTAPI_DVBT2_TP27,
DTAPI_DVBT2_TP28,
DTAPI_DVBT2_TP29,
DTAPI_DVBT2_TP30,
DTAPI_DVBT2_TP32,
DTAPI_DVBT2_TP33, // T2MI output
DTAPI_DVBT2_TP34, // T2MI output
// Receiver Buffer Model
DTAPI_DVBT2_TP50, // TDI size
DTAPI_DVBT2_TP51, // TDI write index, TDI read available
DTAPI_DVBT2_TP53, // DJB size
DTAPI_DVBT2_TP_COUNT, // Number of test points
};
extern const int DTAPI_DVBT2_TESTPOINTS[DTAPI_DVBT2_TP_COUNT];
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2AuxPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Class for specifying the parameters of AUX streams
//
struct DtDvbT2AuxPars
{
int m_NumDummyStreams; // Number of dummy AUX streams
public:
void Init(void);
bool IsEqual(DtDvbT2AuxPars& AuxPars);
bool operator == (DtDvbT2AuxPars& AuxPars);
bool operator != (DtDvbT2AuxPars& AuxPars);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2MiPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure for specifying the parametes for T2MI output streams
//
struct DtDvbT2MiPars
{
bool m_Enabled; // Enable T2MI output. If enabled, a T2MI
// Transport Stream is generated and output
int m_Pid; // T2MI data PID
int m_StreamId; // stream ID for the first T2MI stream
int m_Pid2; // Second T2MI data PID
int m_StreamId2; // stream ID for the second T2MI stream
int m_PcrPid; // PCR PID. If -1, no PCR is included otherwise
// PCRs are inserted on the specified PID
int m_PmtPid; // PMT PID. If -1, no PMT-table and no PAT-table
// are included otherwise a PMT-table is inserted
// on the specified PID
int m_TsRate; // Rate in bps for the T2MI output
int m_TimeStamping; // T2MI timestamps: None, Absolute or Releative
// See DVBT2MI_TIMESTAMP_x
__int64 m_SecSince2000; // First T2MI output timestamp value. Next values
// are computed
int m_Subseconds; // The number of subseconds. See T2MI spec table 4
int m_T2miUtco; // Offset in seconds between UTC and m_SecSince2000.
// As of February 2009 the value shall be 2 and
// shall change as a result of each new leap second.
bool m_EncodeFef; // If true, outputs a FEF part composite packet
// with the required subpart. Otherwise, only
// outputs a FEF part NULL packet when FEF is
// enabled.
bool m_SyncWithExtClock; // Undocumented. For internal use only.
public:
void Init(void);
bool IsEqual(DtDvbT2MiPars& T2MiPars);
bool operator == (DtDvbT2MiPars& T2MiPars);
bool operator != (DtDvbT2MiPars& T2MiPars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2ModStatus -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure for retrieving the MPLP modulator status
//
struct DtDvbT2ModStatus
{
int m_MplpModFlags; // Multi PLP modulator flags
// General MPLP status info
__int64 m_PlpNumBlocksOverflows;
// Counts the FEC frames for which the requested
// number of PLP blocks is bigger than NumBlocks
// (the receiver will get an invalid stream)
__int64 m_BitrateOverflows; // Counts the frames in which too many bits were
// allocated (the receiver will get an invalid stream)
__int64 m_TtoErrorCount; // Number of times the generated TTO value was
// invalid (typically from a too small T_design)
// T2MI Specific status info
__int64 m_T2MiOutputRateOverFlows;
// Number of bit rate overflows(i.e. the T2MI output
// rate must be increased for reliable operation)
int m_T2MiOutputRate; // Current T2MI rate excluding null packets(in bps)
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2PaprPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Class for specifying and enabling the PAPR reduction parameters
//
struct DtDvbT2PaprPars
{
bool m_AceEnabled; // ACE enabled
double m_AceVclip; // ACE clipping threshold 1..4.32 (Volt)
double m_AceGain; // ACE gain 0..31 (steps of 1)
double m_AceLimit; // ACE limit 0.7..1.4 (steps of 0.1)
int m_AceInterpFactor; // ACE interpolation factor 1..4
// Note: PAPR ACE processing time is proportional
// to this parameter (1 recommended for realtime)
int m_AcePlpIndex; // PLP used for the PAPR ACE
bool m_TrEnabled; // TR enabled
bool m_TrP2Only; // PAPR TR is only applied on the P2 symbol
double m_TrVclip; // TR clipping threshold 1..4.32 (Volt)
int m_TrMaxIter; // TR maximum number of iterations. Must be >= 1
// Note: PAPR TR processing time is proportional
// to this parameter
int m_L1ExtLength; // L1 extension field length 0..65535
bool m_L1AceEnabled; // L1 ACE enabled
double m_L1AceCMax; // L1 ACE maximum constellation extension value
bool m_L1Scrambling; // L1 post scrabling (requires T2-version 1.3.1)
// Parameters below only apply if DVB-T2 V1.2.1 is selected
int m_NumBiasBalCells; // Dummy cells added to reduce the P2 PAPR
// 0..BiasBalancingCellsMax
int m_BiasBalancing; // Modify the L1 reserved fields and
// L1 ext padding to compensate the L1 bias.
// See DTAPI_DVBT2_BIAS_x
int m_TrAlgorithm; // Undocumented. Must be 1 (default)
public:
void Init(void);
bool IsEqual(DtDvbT2PaprPars& PaprPars);
bool operator == (DtDvbT2PaprPars& PaprPars);
bool operator != (DtDvbT2PaprPars& PaprPars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2ParamInfo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// DVB-T2 parameter info
//
struct DtDvbT2ParamInfo
{
int m_TotalCellsPerFrame; // Total number of cells per frame
int m_L1CellsPerFrame; // Total #cells per frame used for L1 signaling
// Overhead: m_L1CellsPerFrame/m_TotalCellsPerFrame
int m_AuxCellsPerFrame; // Total number of auxiliary stream cells per frame
// (currently only used for TX signalling if enabled)
int m_BiasBalCellsPerFrame; // Total number of L1 bias balancing cells per frame
int m_BiasBalCellsMax; // Maximum number of L1 bias balancing cells per P2
int m_DummyCellsPerFrame; // Total number of cells lost per frame. Dummy cells
// overhead: m_DummyCellsPerFrame/m_TotalCellsPerFrame
// It is computed in case no NDP is used for frame 0.
int m_SamplesPerFrame; // Total number of samples per frame
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2PlpPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Class for specifying the parameters of a PLP
//
struct DtDvbT2PlpPars
{
// Mode adaptation layer: TS input
bool m_Hem; // High Efficiency Mode: yes/no
bool m_Npd; // Null Packet Deletion: yes/no
int m_Issy; // ISSY mode. See DTAPI_DVBT2_ISSY_XXX
int m_IssyBufs; // ISSY BUFS
int m_IssyTDesign; // T-design value for TTO generation.
// Use 0 to have the modulator choose the value.
// T-design is defined as the delay (in samples)
// between the start of the first T2 frame in
// which the PLP is mapped (m_FirstFrameIdx) and
// the first output bit of the transport stream.
int m_CompensatingDelay; // Additional delay (in samples) before the TS
// data is sent. Use -1 to have the modulator
// choose the value
int m_TsRate; // If 0 the rate is computed from the PLP
// parameters. Only possible if no NPD is used.
// Mode adaptation layer: GSE input
int m_GseLabelType; // GSE-label type. See DTAPI_DVBT2_GSE_LABEL_XXX
// DVB-T2 L1 parameters
int m_Id; // PLP ID: 0..255
int m_GroupId; // PLP group ID: 0..255
int m_Type; // PLP type: DTAPI_DVBT2_PLP_TYPE_XXX
int m_PayloadType; // PLP payload type: DTAPI_DVBT2_PAYLOAD_XXX
int m_CodeRate; // PLP code rate: DTAPI_DVBT2_COD_XXX
int m_Modulation; // PLP modulation: DTAPI_DVBT2_BPSK/...
bool m_Rotation; // Constellation rotation: yes/no
int m_FecType; // FEC Type. 0=16K, 1=64K; Must be 16K for T2 lite
int m_FrameInterval; // T2-frame interval for this PLP: 1..255
int m_FirstFrameIdx; // First frame index: 0..m_FrameInterval-1
int m_TimeIlLength; // Time interleaving length: 0..255
int m_TimeIlType; // Time interleaving type: DTAPI_DVBT2_IL_XXX
bool m_InBandAFlag; // In band A signaling information: yes/no
bool m_InBandBFlag; // In band B Signaling information: yes/no
// Only useful if DVB-T2 V1.2.1 is selected
int m_NumBlocks; // Maximum number of FEC blocks contained in
// one interleaving frame
// IDs of the other PLPs in the in-band signaling
int m_NumOtherPlpInBand; // Number of other PLPs in m_OtherPlpInBand
int m_OtherPlpInBand[DTAPI_DVBT2_NUM_PLP_MAX-1];
// The parameters below are only meaningful for type 1 PLPs in TFS case
bool m_FfFlag; // FF flag
int m_FirstRfIdx; // First TFS RF channel: 0..NumRf-1
public:
void Init(int PlpId = 0);
bool IsEqual(DtDvbT2PlpPars& PlpPars);
bool operator == (DtDvbT2PlpPars& PlpPars);
bool operator != (DtDvbT2PlpPars& PlpPars);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- RBM events -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// RBM events all are errors except plot
//
enum DtDvbT2RbmEventType
{
// Plot event (only generated if m_PlotEnabled is true)
DTAPI_DVBT2_RBM_EVENT_PLOT,
// Dejitter buffer underflow
DTAPI_DVBT2_RBM_EVENT_DJB_UNDERFLOW,
// BUFS=[m_Bufs] gives too small dejitter buffer
DTAPI_DVBT2_RBM_EVENT_BUFS_TOO_SMALL,
// TTO=[m_Tto] gives time in the past
DTAPI_DVBT2_RBM_EVENT_TTO_IN_THE_PAST,
// DJB overflow (should never happen except if the model is buggy)
DTAPI_DVBT2_RBM_EVENT_DJB_OVERFLOW,
// BBFrame parser: CRC8 error in header (val=[m_Val])
DTAPI_DVBT2_RBM_EVENT_CRC8_ERROR_HEADER,
// BBFrame parser: DFL too large
DTAPI_DVBT2_RBM_EVENT_DFL_TOO_LARGE,
// BBFrame parser: SYNCD too large (SYNCD=[m_SyncD] DFL=[m_Dfl])
DTAPI_DVBT2_RBM_EVENT_SYNCD_TOO_LARGE,
// BBFrame parser: invalid UPL
DTAPI_DVBT2_RBM_EVENT_INVALID_UPL,
// BBFrame parser: invalid syncd (syncd=[m_SyncD] left=[m_Left])
DTAPI_DVBT2_RBM_EVENT_INVALID_SYNCD,
// TDI overflow: write pointer ([m_TdiWriteIndex]) ahead of
// read pointer ([m_TdiReadIndex])
DTAPI_DVBT2_RBM_EVENT_TDI_OVERFLOW,
// TDI overflow: too many TI blocks queued
DTAPI_DVBT2_RBM_EVENT_TOO_MANY_TI_BLOCKS,
// plp_start value gives overlap between PLP id=[m_PlpId1] and id=[m_PlpId2]
DTAPI_DVBT2_RBM_EVENT_INVALID_PLP_START,
// Frequency/L1 deinterleaver overflow
DTAPI_DVBT2_RBM_EVENT_FDI_OVERFLOW,
// Not enough ISCR data to estimate the TS rate
DTAPI_DVBT2_RBM_EVENT_NO_TS_RATE,
// ISCR error (delta=[m_Delta])
DTAPI_DVBT2_RBM_EVENT_ISCR_ERROR,
// BUFS not constant (current=[m_CurBufs] new=[m_NewBufs])
DTAPI_DVBT2_RBM_EVENT_BUFS_NOT_CONSTANT,
// ISSYI field cannot change its value
DTAPI_DVBT2_RBM_EVENT_ISSYI_NOT_CONSTANT,
// HEM field cannot change its value
DTAPI_DVBT2_RBM_EVENT_HEM_NOT_CONSTANT,
// plp_num_blocks for this interleaving frame is too small (plp_num_blocks=%d)
// At least 3 FEC block required in interleaving frame with HEM=1,
// at least 1 if HEM=0.
DTAPI_DVBT2_RBM_EVENT_PLP_NUM_BLOCKS_TOO_SMALL,
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2RbmEvent -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// RBM event parameters
//
struct DtDvbT2RbmEvent
{
int m_DataPlpId; // Data plp ID identifiying the stream
int m_DataPlpIndex; // Data plp index
double m_Time; // Time in T units
int m_IsCommonPlp; // 1 = common PLP, 0 = data PLP,
// -1 = the event does not refer to a particular PLP
DtDvbT2RbmEventType m_EventType;
// Additional parameters
union {
// DTAPI_DVBT2_RBM_EVENT_PLOT parameters
struct {
int m_TdiWriteIndex; // TDI write index
int m_TdiReadIndex; // TDI read index
int m_TdiReadAvailable;// Available cells in the TDI read buffer
int m_DjbSize; // Dejitter buffer size in bits
} Plot;
// DTAPI_DVBT2_RBM_EVENT_BUFS_TOO_SMALL parameters
struct {
int m_Bufs; // BUFS value
} BufsTooSmall;
// DTAPI_DVBT2_RBM_EVENT_TTO_IN_THE_PAST parameters
struct {
int m_Tto; // TTO value
} TtoInThePast;
// DTAPI_DVBT2_RBM_EVENT_DJB_OVERFLOW paraneters
struct {
int m_DjbSize; // Dejitter buffer size in bits
int m_DjbMaxSize;
} DjbOverflow;
// DTAPI_DVBT2_RBM_EVENT_CRC8_ERROR_HEADER parameters
struct {
int m_Val; // CRC8 value
} Crc8ErrorHeader;
// DTAPI_DVBT2_RBM_EVENT_DFL_TOO_LARGE parameters
struct {
int m_SyncD; // SYNCD
int m_Dfl; // DFL
} SyncDTooLarge;
// DTAPI_DVBT2_RBM_EVENT_INVALID_SYNCD parameters
struct {
int m_Syncd; // SYNCD
int m_Left; // Left
} InvalidSyncD;
// DTAPI_DVBT2_RBM_EVENT_TDI_OVERFLOW parameters
struct {
int m_TdiWriteIndex; // TDI write index
int m_TdiReadIndex; // TDI read index
} TdiOverflow;
// DTAPI_DVBT2_RBM_EVENT_INVALID_PLP_START parameters
struct {
int m_PlpId1; // IDs of overlapping PLPs
int m_PlpId2;
} InvalidPlpStart;
// DTAPI_DVBT2_RBM_EVENT_ISCR_ERROR parameters
struct {
int m_Delta; // Delta time in T units
} IscrError;
// DTAPI_DVBT2_RBM_EVENT_BUFS_NOT_CONSTANT parameters
struct {
int m_CurBufs; // Different BUFS values
int m_newBufs;
} BufsNotConstant;
// DTAPI_DVBT2_RBM_EVENT_PLP_NUM_BLOCKS_TOO_SMALL parameters
struct {
int m_PlpNumBlocks; // Number of blocks
} PlpNumBlocksTooSmall;
} u;
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2RbmValidation -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class for enabling the RBM validation and specifying a callback function
//
struct DtDvbT2RbmValidation
{
public:
bool m_Enabled; // Enable RBM validation
bool m_PlotEnabled; // Enable RBM plotting events
int m_PlotPeriod; // Plot period
void* m_pCallbackOpaque; // RBM event callback function and environment
void (*m_pCallbackFunc)(void *pOpaque, const DtDvbT2RbmEvent* pRbmEvent);
public:
void Init(void);
bool IsEqual(DtDvbT2RbmValidation& RbmPars);
bool operator == (DtDvbT2RbmValidation& RbmPars);
bool operator != (DtDvbT2RbmValidation& RbmPars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2TxSigPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class for specifying and enabling the Transmitter Signature
//
struct DtDvbT2TxSigPars
{
// TX Signature through Auxiliary Streams
// The total number of possible TX IDs are M=3*(P+1)
// The number of cells used per transmitter is N=2^Q
// The number of of T2 frames per TX SIG frame is L=R+1
bool m_TxSigAuxEnabled; // Enabled
int m_TxSigAuxId; // Transmitter ID. 0..3071
int m_TxSigAuxP; // P 0..1023. The total number of possible
// TX IDs is M=3*(P+1). Hence M <= 3072
int m_TxSigAuxQ; // Q 0..15. The number of cells used per
// transmitter is N=2^Q
int m_TxSigAuxR; // R 0..255. The number of T2 frames
// per TX SIG frame is L=R+1
// TX Signature through FEF.
// To use this FEF generation must be enabled and the FEF length
// must be >= DTAPI_TXSIG_FEF_LEN_MIN
bool m_TxSigFefEnabled; // Enabled
int m_TxSigFefId1; // TX ID for 1st signature period. 0..7
int m_TxSigFefId2; // TX ID for 2nd signature period. 0..7
public:
void Init(void);
bool IsEqual(DtDvbT2TxSigPars& TxSigPars);
bool operator == (DtDvbT2TxSigPars& TxSigPars);
bool operator != (DtDvbT2TxSigPars& TxSigPars);
};
// Compare modes
#define DTAPI_DVBT2_COMPA_ALL 0
#define DTAPI_DVBT2_COMPA_ESSENTIAL 1
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2ComponentPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class for specifying the DVB-T2 component modulation parameters
//
class DtDvbT2ComponentPars
{
public:
// General T2 parameters
int m_T2Version; // DVB-T2 spec. version. See DVBT2_VERSION_x
int m_T2Profile; // DVB-T2 profile. See DVBT2_PROFILE_x
bool m_T2BaseLite; // Indicates whether T2 lite is used in a base
// profile stream
int m_Bandwidth; // Bandwidth: DVBT2_BW_XXX
int m_FftMode; // FFT-mode: DVBT2_FFT_XXX
int m_Miso; // MISO. See DVBT2_MISO_x
int m_GuardInterval; // Guard interval. See DVBT2_GI_x
int m_Papr; // PAPR. See DVBT2_PAPR_x
bool m_BwtExt; // Bandwidth extention
int m_PilotPattern; // Pilot pattern. Pattern 1 .. 8.
int m_L1Modulation; // L1 modulation. See DVBT2_BPSK/...
int m_CellId; // Cell ID. 0..0xFFFF.
int m_NetworkId; // Network ID. 0..0xFFFF.
int m_T2SystemId; // T2 System ID. 0..0xFFFF.
bool m_L1Repetition; // L1 repetition
// T2-Frame related parameters
int m_NumT2Frames; // #T2-frames per superframe. 1..255.
int m_NumDataSyms; // #Data symbols
int m_NumSubslices; // #Subslices per T2-frame (for type2 PLPs)
// Component start time
int m_ComponentStartTime; // Offset in T unit at which the T2 component
// begins to be modulated. (0 in the first component)
// FEF parameters
bool m_FefEnable; // FEF enable
int m_FefType; // FEF type. 0..15
int m_FefS1; // FEF S1. 2..7
int m_FefS2; // FEF S2. 1, 3, 5, 7, 9 ,11, 13 or 15
int m_FefSignal; // Selects the type of signal generated during
// the FEF period (see DTAPI_DVBT2_FEF_x)
int m_FefLength; // FEF Length in number of samples.
int m_FefInterval; // FEF Interval.
// Requires: (m_NumT2Frames % m_FefInterval) == 0
// RF channels for TFS
int m_NumRfChans; // Number of RF channels 1..7
int m_RfChanFreqs[DTAPI_DVBT2_NUM_RF_MAX];
// Channel frequencis
int m_StartRfIdx; // First used RF channel
// PLPs
int m_NumPlps; // Number of PLPs
DtDvbT2PlpPars m_Plps[DTAPI_DVBT2_NUM_PLP_MAX];
// PLP parameters
DtPlpInpPars m_PlpInputs[DTAPI_DVBT2_NUM_PLP_MAX];
// PLP inputs (Optional)
// Optional
DtDvbT2AuxPars m_Aux; // AUX Streams (Optional)
DtDvbT2PaprPars m_PaprPars; // PAPR Params (Optional)
DtDvbT2TxSigPars m_TxSignature;// TX-Signature (Optional)
DtDvbT2RbmValidation m_RbmValidation;
// RBM validation (Optional)
DtTestPointOutPars m_TpOutput; // Test point data output parameters (optional)
int m_L1ChangeCounter; // Undocumented. For internal use only.
public:
virtual void Init(void);
virtual bool IsEqual(DtDvbT2ComponentPars&, int CompareMode=DTAPI_DVBT2_COMPA_ALL);
virtual bool operator == (DtDvbT2ComponentPars& T2Pars);
virtual bool operator != (DtDvbT2ComponentPars& T2Pars);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2Pars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Class for specifying the DVB-T2 modulation parameters.
//
class DtDvbT2Pars : public DtDvbT2ComponentPars
{
public:
// Optional
DtVirtualOutPars m_VirtOutput; // Virtual-output parameters (Optional)
DtDvbT2MiPars m_T2Mi; // T2MI output (Optional)
int m_NumFefComponents; // Number of other T2 stream transmitted in the
// FEF part of the first component. The parameters
// come from 'm_FefComponent'.
// FEF components. Currently maximum 1 other component
DtDvbT2ComponentPars m_FefComponent[1];
public:
// Constructor
DtDvbT2Pars() { Init(); }
// Methods
virtual void Init(void);
virtual DTAPI_RESULT CheckValidity(void);
virtual DTAPI_RESULT ComputeTDesign();
virtual DTAPI_RESULT GetParamInfo(DtDvbT2ParamInfo& T2Info);
virtual DTAPI_RESULT GetParamInfo(DtDvbT2ParamInfo& T2Info1,
DtDvbT2ParamInfo& T2Info2);
// Only usefull for single PLP
DTAPI_RESULT OptimisePlpNumBlocks(DtDvbT2ParamInfo&, int&);
DTAPI_RESULT OptimisePlpNumBlocks(DtDvbT2ParamInfo&, int&, int&);
// Helper function to determine T2MI ts rate.
static DTAPI_RESULT RetrieveT2miTsRateFromTs(char* pBuffer, int NumBytes,
int Bandwidth, int& TsRate);
// Operators
virtual bool operator == (DtDvbT2Pars& T2Pars);
virtual bool operator != (DtDvbT2Pars& T2Pars);
virtual bool IsEqual(DtDvbT2Pars& T2Pars, int CompareMode=DTAPI_DVBT2_COMPA_ALL);
};
//=+=+=+=+=+=+=+=+=+=+=+=+=+ DVB-T2 Demodulation layer 1 data +=+=+=+=+=+=+=+=+=+=+=+=+=+
// DtDvbT2DemodL1PostPlp::m_PayloadType - The PLP payload type
#define DTAPI_DVBT2_PAYLOAD_GFPS 0 // Generic Fixed-length Packetized Stream
#define DTAPI_DVBT2_PAYLOAD_GCS 1 // Generic Continuous Stream
#define DTAPI_DVBT2_PAYLOAD_GSE 2 // Generic Stream Encapsulation
#define DTAPI_DVBT2_PAYLOAD_TS 3 // Transport Stream
// DtDvbT2DemodL1Pre::m_Type - The current T2 super-frame stream type
#define DTAPI_DVBT2_TYPE_TS 0 // Transport Stream (TS) only
#define DTAPI_DVBT2_TYPE_GS 1 // Generic Stream (GS) only
#define DTAPI_DVBT2_TYPE_TS_GS 2 // Mixed TS and GS
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2DemodAuxPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Struct for storing the Auxiliary stream information from Layer 1 Post
//
struct DtDvbT2DemodAuxPars
{
int m_AuxStreamType; // Auxiliary stream type
int m_AuxPrivateConf; // Auxiliary stream info
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2DemodL1PostPlp -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Struct for storing Layer 1 Post per PLP
//
struct DtDvbT2DemodL1PostPlp
{
int m_Id; // PLP ID: 0..255
int m_Type; // PLP type, see DTAPI_DVBT2_PLP_TYPE_x
int m_PayloadType; // PLP payload type: 0..3
int m_FfFlag; // FF flag
int m_FirstRfIdx; // 0..NumRf-1
int m_FirstFrameIdx; // First frame in which PLP appears
int m_GroupId; // Group ID: 0..255
int m_CodeRate; // PLP code rate, see DTAPI_DVBT2_COD_x
int m_Modulation; // PLP modulation, see DTAPI_DVBT2_BPSK/...
int m_Rotation; // PLP rotation yes/no
int m_FecType; // PLP FEC type: 0=LDPC 16K, 1=LDPC 64K
int m_NumBlocks; // PLP_NUM_BLOCKS_MAX: Maximum number of FEC blocks
// contained in one interleaving frame
int m_FrameInterval; // The PLP appears every m_FrameInterval frames
int m_TimeIlLength; // Time interleaver length: 0..255
int m_TimeIlType; // Time interleaver type: 0 or 1
int m_InBandAFlag; // IN_BAND_A_FLAG is used yes/no
// V1.2.1 spec revision
int m_InBandBFlag; // IN_BAND_B_FLAG is used yes/no
int m_Reserved1; // Reserved field, may be used for bias balancing
int m_PlpMode; // PLP mode: 0..3
int m_Static; // Static flag: 0 or 1=Configuration changes only at
// super frame boundaries
int m_StaticPadding; // Static padding flag: 0 or 1=BBFRAME padding is not
// used
DtDvbT2DemodL1PostPlp();
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2DemodRfPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Struct for storing the TFS RF channels information from Layer 1 Post
//
struct DtDvbT2DemodRfPars
{
int m_RfIdx; // Index of the RF-frequency
int m_Frequency; // Centre frequency in Hz
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2DemodL1Data -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Struct for storing the DVB-T2 layer 1 data
//
struct DtDvbT2DemodL1Data
{
// P1 Info
struct DtDvbT2DemodL1P1
{
bool m_Valid; // True if P1 was found
int m_FftMode; // FFT mode, see DVBT2_FFT_x
int m_Miso; // MISO used
int m_Fef; // FEF used
int m_T2Profile; // DVB-T2 profile. See DVBT2_PROFILE_x
} m_P1;
// L1-pre info
struct DtDvbT2DemodL1Pre
{
bool m_Valid; // True if L1 pre was correctly demodulated
int m_Type; // Stream type within the current T2 super-frame
int m_BwtExt; // Bandwidth extension
int m_S1; // S1 signalling. P1 S1.
int m_S2; // S2 signalling. P1 S2.
int m_L1Repetition; // L1 repetition
int m_GuardInterval; // Guard interval, see DVBT2_GI_x
int m_Papr; // PAPR. see DVBT2_PAPR_x
int m_L1Modulation; // L1 modulation, see DVBT2_BPSK/...
int m_L1CodeRate; // L1 coderate, see DTAPI_DVBT2_COD_x
int m_L1FecType; // L1 FEC type: 0=LDPC 16K, 1=LDPC 64K
int m_L1PostSize; // Size of the L1-post in OFDM cells
int m_l1PostInfoSize; // L1-post info size =
// L1-post configurable+dynamic+extension
int m_PilotPattern; // Pilot pattern: 1..8
int m_TxIdAvailability; // The Tx ID
int m_CellId; // Cell ID: 0..0xFFFF
int m_NetworkId; // Network ID: 0..0xFFFF
int m_T2SystemId; // T2 System ID: 0..0xFFFF
int m_NumT2Frames; // Number of T2-frames per superframe: 1..255
int m_NumDataSyms; // Number of data symbols
int m_RegenFlag; // Regeneration count indicator
int m_L1PostExt; // L1-post extensions enabled
int m_NumRfChans; // Number of RF channels: 1..7
int m_CurrentRfIdx; // Current RF index: 0..m_NumRfChans-1
int m_T2Version; // DVB-T2 spec version, see DVBT2_VERSION_x
int m_L1PostScrambling; // L1 Post scrambling
int m_T2BaseLite; // Indicates whether T2 lite is used in a base
// profile stream
} m_L1Pre;
// L1-post info
struct DtDvbT2DemodL1Post
{
bool m_Valid; // True if L1 post was correctly demodulated
int m_NumSubslices; // Number of subslices per T2-frame (for type2 PLPs)
int m_NumPlps; // Number of PLPs
int m_NumAux; // Number of auxiliary streams
// TFS RF-channels
std::vector<DtDvbT2DemodRfPars> m_RfChanFreqs;
// FEF info is meaningful if m_P1.m_Fef = true
int m_FefType; // FEF type: 0..15
int m_FefLength; // FEF length in number of samples
int m_FefInterval; // FEF Interval
// PLPs
std::vector<DtDvbT2DemodL1PostPlp> m_Plps;
// Auxiliary stream signalling information
std::vector<DtDvbT2DemodAuxPars> m_AuxPars;
} m_L1Post;
DtDvbT2DemodL1Data();
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ ISDBT-TMM +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
#define DTAPI_ISDBT_NUM_TS_MAX 14
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIsdbTmmPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// ISDB-Tmm parameters including per-layer parameters
//
struct DtIsdbTmmPars
{
int m_Bandwidth;
int m_SubChannel;
int m_NumTss;
DtVirtualOutPars m_VirtOutput; // Virtual Output parameters(Optional)
DtIsdbtPars m_Tss[DTAPI_ISDBT_NUM_TS_MAX];
DtPlpInpPars m_TsInputs[DTAPI_ISDBT_NUM_TS_MAX];
// Member function
DtIsdbTmmPars() { Init(); }
DTAPI_RESULT CheckValidity();
int NumSegm();
void Init();
DTAPI_RESULT SetSegmentFormat(int TsIdx, int SegmFormat);
bool operator == (DtIsdbTmmPars& Rhs);
bool operator != (DtIsdbTmmPars& Rhs);
};
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ Advanced Demodulator +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtStreamType -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Classifies the type of the stream
//
enum DtStreamType
{
STREAM_CONSTEL, // Constellation points
STREAM_DAB, // DAB stream
STREAM_DABETI, // DAB Ensemble Transport Interface (NI, G.703)
STREAM_DABFIC, // DAB Fast Information Channel
STREAM_DVBC2, // DVB-C2 stream (Transport Stream packets)
STREAM_DVBC2_BBFRAME, // DVB-C2 stream base-band frames
STREAM_DVBT, // DVB-T stream
STREAM_DVBT2, // DVB-T2 stream (Transport Stream packets)
STREAM_DVBT2_BBFRAME, // DVB-T2 stream base band frames
STREAM_DVBT2_GSE, // DVB-T2 stream GSE-packets
STREAM_IMPRESP, // Impulse response
STREAM_ISDBT, // ISDB-T stream
STREAM_MER, // MER
STREAM_SPECTRUM, // Spectrum
STREAM_T2MI, // DVB-T2 stream
STREAM_TF_ABS, // Transfer function absolute
STREAM_TF_PHASE, // Transfer function phase
STREAM_TF_GROUPDELAY // Transfer function group delay
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtConstelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// This structure specifies the parameters for a stream of constellation points
//
struct DtConstelPars
{
int m_Period; // Minimum period between callbacks in ms
int m_ConstellationType; // 0: Constellation per PLP
// 1: Constellation per carrier (after equalization)
int m_Index; // Index of the PLP or carrier
int m_MaxNumPoints; // Maximum number of constellation points
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbTStreamSelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// This structure specifies the selection parameters for a DVB-T transport stream
//
struct DtDvbTStreamSelPars
{
// No selection parameters yet
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbTTpsInfo -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// DVB-T Transmission Parameter Signalling (TPS) information structure
//
struct DtDvbTTpsInfo
{
int m_LengthIndicator; // TPS length indicator
int m_Constellation; // Constellation (DTAPI_MOD_DVBT_xxx)
int m_HpCodeRate; // High Priority code rate (DTAPI_MOD_xxx)
int m_LpCodeRate; // Low Priority code rate(DTAPI_MOD_xxx)
int m_Guard; // Guard interval (DTAPI_MOD_DVBT_G_xx)
int m_Interleaving; // Interleaving (DTAPI_MOD_DVBT_xxx)
int m_Mode; // Transmission mode (DTAPI_MOD_DVBT_xK)
int m_Hierarchy; // Hierarchy (DTAPI_MOD_DVBT_HARCHY_xxx)
int m_CellId; // CellId or -1 when not present
int m_HpS48S49; // S48S49 of the odd frames (DTAPI_MOD_DVBT_Sxx)
int m_LpS48S49; // S48S49 of the even frames (DTAPI_MOD_DVBT_Sxx)
int m_OddS50_S53; // S50..S53 of the odd frames
int m_EvenS50_S53; // S50..S53 of the even frames
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtDvbT2StreamSelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// This structure specifies the selection parameters for a DVB-T2 DVB-T2 GSE and
// DVB-T2 BBFRAME stream
//
struct DtDvbT2StreamSelPars
{
int m_PlpId; // ID of the data PLP or DTAPI_DVBT2_PLP_ID_xxx
int m_CommonPlpId; // ID of the common PLP or DTAPI_DVBT2_PLP_ID_xxx
// Serialisation
DTAPI_RESULT FromXml(const std::wstring& XmlString);
DTAPI_RESULT ToXml(std::wstring& XmlString);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtImpRespPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// This structure specifies the parameters for an impulse-response stream
//
struct DtImpRespPars
{
int m_Period; // Minimum period bewteen callbacks in ms
int m_Channel; // Channel used for MISO
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtIsdbtStreamSelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// This structure specifies the selection parameters for an ISDB-T stream
//
struct DtIsdbtStreamSelPars
{
// No additional selection parameters
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtMeasurement -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Structure describing a set of measurement values. It used to pass measurements from
// the advanced demodulator to the user application through user-supplied
// DtWriteMeasFunc callback.
//
struct DtMeasurement
{
DtStreamType m_MeasurementType;// Type of measurement values
__int64 m_TimeStamp; // Timestamp in number of samples
int m_NumValues; // Number of measurement values
DtComplexFloat* m_pMeasurement;// Measurement values
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtMerPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// This structure specifies the parameters for a MER stream.
//
struct DtMerPars
{
int m_Period; // Minimum period between callbacks in ms
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtSpectrumPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// This structure specifies the parameters for a spectrum stream.
//
struct DtSpectrumPars
{
int m_Period; // Minimum time between callbacks in ms
int m_FftLength; // FFT length, must be a power of two
int m_AverageLength; // Number of FFT blocks on wich the average is done
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtT2MiStreamSelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// This structure specifies the selection parameters for a T2-MI transport stream
// containing a com-plete DVB-T2 stream.
//
struct DtT2MiStreamSelPars
{
int m_T2MiOutPid; // T2-MI output PID
int m_T2MiTsRate; // Rate in bps for the T2MI output.
// If -1, output a variable bitrate T2MI stream
// (set_output_rate is not called in this case).
// Otherwise, use m_T2MiTsRate to set the rate.
// Padding null packets are used to reach the target
// bitrate. The maximum T2-MI bitrate is 72Mbps.
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtTransFuncPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// This structure specifies the parameters for a transfer-function stream.
//
struct DtTransFuncPars
{
int m_Period; // Minimum time between callbacks in ms
int m_Channel; // Channel used for MISO
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtStreamSelPars -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Structure for streaming data selection
//
struct DtStreamSelPars
{
intptr_t m_Id; // Unique stream identifier
DtStreamType m_StreamType; // Stream selection type
union {
// Selection parameters for demodulated streams
DtDvbC2StreamSelPars m_DvbC2;
DtDvbTStreamSelPars m_DvbT;
DtDvbT2StreamSelPars m_DvbT2;
DtIsdbtStreamSelPars m_Isdbt;
DtT2MiStreamSelPars m_T2Mi;
DtDabStreamSelPars m_Dab;
DtDabEtiStreamSelPars m_DabEti;
DtDabFicStreamSelPars m_DabFic;
// Parameters for streams of measurement values
DtConstelPars m_Constel;
DtImpRespPars m_ImpResp;
DtMerPars m_Mer;
DtSpectrumPars m_Spectrum;
DtTransFuncPars m_TransFunc;
} u;
bool operator == (DtStreamSelPars& Rhs);
bool operator != (DtStreamSelPars& Rhs);
};
// Software demodulator callback functions
typedef void DtOutputRateChangedFunc(void *pOpaque, DtStreamSelPars&, int Bitrate);
typedef void DtReadIqFunc(void* pOpaque,
unsigned char* pIqBuf, int IqBufSize, int& IqLength);
typedef void DtWriteMeasFunc(void *pOpaque, DtStreamSelPars&, DtMeasurement*);
typedef void DtWriteStreamFunc(void* pOpaque, DtStreamSelPars& StreamSel,
const unsigned char* pData, int Length);
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtAdvDemod -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Class representing an advanced demodulator.
// DtAdvDemod can be considered a specialized in-put channel.
//
class DtAdvDemod
{
public:
DtAdvDemod();
virtual ~DtAdvDemod();
private:
// No implementation is provided for the copy constructor
DtAdvDemod(const DtAdvDemod&);
public:
DtHwFuncDesc m_HwFuncDesc; // Hardware function descriptor
// Convenience functions
public:
int Category(void) { return m_HwFuncDesc.m_DvcDesc.m_Category; }
int FirmwareVersion(void) { return m_HwFuncDesc.m_DvcDesc.m_FirmwareVersion; }
bool IsAttached(void) { return m_pAdvDemod != NULL; }
int TypeNumber(void) { return m_HwFuncDesc.m_DvcDesc.m_TypeNumber; }
public:
DTAPI_RESULT AttachToPort(DtDevice* pDtDvc, int Port,
bool Exclusive=true, bool ProbeOnly=false);
DTAPI_RESULT AttachVirtual(DtDevice* pDtDvc,
DtReadIqFunc* pReadIqFunc, void* pOpaque);
DTAPI_RESULT ClearFlags(int Latched);
DTAPI_RESULT CloseStream(intptr_t Id);
DTAPI_RESULT Detach(int DetachMode);
DTAPI_RESULT GetDemodControl(DtDemodPars* pDemodPars);
DTAPI_RESULT GetDescriptor(DtHwFuncDesc& HwFunDesc);
DTAPI_RESULT GetFlags(int& Flags, int& Latched);
DTAPI_RESULT GetIoConfig(int Group, int& Value);
DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue);
DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue, __int64& ParXtra0);
DTAPI_RESULT GetIoConfig(int Group, int& Value, int& SubValue,
__int64& ParXtra0, __int64& ParXtra1);
DTAPI_RESULT GetPars(int Count, DtPar* pPars);
DTAPI_RESULT GetRxControl(int& RxControl);
DTAPI_RESULT GetStatistics(int Count, DtStatistic* pStatistics);
DTAPI_RESULT GetStatistic(int Type, int& Statistic);
DTAPI_RESULT GetStatistic(int Type, double& Statistic);
DTAPI_RESULT GetStatistic(int Type, bool& Statistic);
DTAPI_RESULT GetStreamSelection(std::vector<DtStreamSelPars>& StreamSelList);
DTAPI_RESULT GetSupportedPars(int& NumPars, DtPar* pPars);
DTAPI_RESULT GetSupportedStatistics(int& Count, DtStatistic* pStatistics);
DTAPI_RESULT GetTsRateBps(intptr_t Id, int& TsRate);
DTAPI_RESULT GetTunerFrequency(__int64& FreqHz);
DTAPI_RESULT LedControl(int LedControl);
DTAPI_RESULT OpenStream(DtStreamSelPars StreamSel);
DTAPI_RESULT RegisterCallback(DtOutputRateChangedFunc* pCallback, void* pOpaque);
DTAPI_RESULT RegisterCallback(DtWriteStreamFunc* pCallback, void* pOpaque);
DTAPI_RESULT RegisterCallback(DtWriteMeasFunc* pCallback, void* pOpaque);
DTAPI_RESULT Reset(int ResetMode);
DTAPI_RESULT SetAntPower(int AntPower);
DTAPI_RESULT SetDemodControl(DtDemodPars *pDemodPars);
DTAPI_RESULT SetIoConfig(int Group, int Value, int SubValue,
__int64 ParXtra0 = -1, __int64 ParXtra1 = -1);
DTAPI_RESULT SetPars(int Count, DtPar* pPars);
DTAPI_RESULT SetRxControl(int RxControl);
DTAPI_RESULT SetTunerFrequency(__int64 FreqHz);
DTAPI_RESULT Tune(__int64 FreqHz, int ModType,
int ParXtra0, int ParXtra1, int ParXtra2);
DTAPI_RESULT Tune(__int64 FreqHz, DtDemodPars *pDemodPars);
protected:
AdvDemod* m_pAdvDemod; // Advanced demodulation channel implementation
bool m_IsAttachedToVirtual; // Attached to virtual input port?
// Encapsulated data
private:
IXpMutex* m_pMTLock; // Multi-threading lock for get/read functions
void* m_pDetachLockCount;
int m_Port;
bool m_WantToDetach;
// Private helper functions
private:
DTAPI_RESULT DetachLock(void);
DTAPI_RESULT DetachUnlock(void);
DTAPI_RESULT ReadAccessLock(void);
DTAPI_RESULT ReadAccessUnlock(void);
};
// Forward declaration for use in DtRs422Channel
class Rs422Channel;
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtRs422Channel -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtRs422Channel
{
public:
DtRs422Channel();
virtual ~DtRs422Channel();
private:
// No implementation is provided for the copy constructor
DtRs422Channel(const DtRs422Channel&);
public:
DTAPI_RESULT AttachToPort(DtDevice* pDtDvc, int Port,
bool Exclusive=true, bool ProbeOnly=false);
DTAPI_RESULT Detach();
DTAPI_RESULT Flush();
DTAPI_RESULT Read(char* pBuffer, int NumBytesToRead, int Timeout, int& NumBytesRead);
DTAPI_RESULT Write(char* pBuffer, int NumBytesToWrite, bool Blocking=true);
protected:
Rs422Channel* m_pRs422Channel;
void* m_pDetachLockCount;
bool m_WantToDetach;
// Private helper functions
private:
DTAPI_RESULT DetachLock(void);
DTAPI_RESULT DetachUnlock(void);
};
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ MATRIX CONFIGURATION +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- enum DtMxPixelFormat -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
enum DtMxPixelFormat
{
DT_PXFMT_UYVY422_8B, // Packed CbYCrY, 8 bits per symbol
DT_PXFMT_UYVY422_10B, // Packed CbYCrY, 10 bits per symbol
DT_PXFMT_UYVY422_16B, // Packed CbYCrY, 16 bits per symbol (10 significant bits)
DT_PXFMT_UYVY422_10B_NBO, // Packed CbYCrY, 10 bits per symbol, network byte order
DT_PXFMT_YUYV422_8B, // Packed YCbYCr, symbol swap of DT_PXFMT_UYVY422_8B
DT_PXFMT_YUYV422_10B, // Packed YCbYCr, symbol swap of DT_PXFMT_UYVY422_10B
DT_PXFMT_YUYV422_16B, // Packed YCbYCr, symbol swap of DT_PXFMT_UYVY422_16B
DT_PXFMT_Y_8B, // Luminance plane only, 8 bits per symbol
DT_PXFMT_Y_16B, // Luminance plane only, 16 bits per symbol (10 sign bits)
DT_PXFMT_YUV422P_8B, // Planar YUV, 3 planes, 1 Cb & 1 Cr sample per 2 Y. 8BPS
DT_PXFMT_YUV422P_16B, // Planar YUV, 3 planes, 1 Cb & 1 Cr sample per 2 Y. 16BPS
DT_PXFMT_YUV422P2_8B, // Planar YUV, 2 planes, Y plane + Cb+Cr plane. 8BPS
DT_PXFMT_YUV422P2_16B, // Planar YUV, 2 planes, Y plane + Cb+Cr plane. 16BPS
DT_PXFMT_BGR_8B, // Packed RGB data. First B, then G, then R. 8 bits per ch
DT_PXFMT_V210, // Packed CbYCrY, 3 10-bit symbols per 32-bit
// Likely future extensions:
//DT_PXFMT_YUV420P, // Planar YUV, 3 planes, 1 Cb & 1 Cr sample per 2x2 Y.This
// is often used as decoder input/output.
//DT_PXFMT_RGBX, // Packed RGB data with a 4th dummy symbol per pixel. With
// 8-byte data this means 32-bit per pixel which is easy
// to process.
//DT_PXFMT_RGB_P, // Planar RGB data
DT_PXFMT_INVALID = -1,
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxVideoConfig -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMxVideoConfig
{
public:
// m_StartLine1 / m_NumLines1 are for field 1, m_StartLine2 / m_NumLines2 are for
// field 2. For progressive input m_StartLine2 / m_NumLines2 are ignored.
// If no video input is required set m_NumLines1 and m_NumLines2 to 0.
int m_StartLine1; // 1st line to transfer (1-based relative to 1st field)
int m_NumLines1; // #lines to transfer (-1 for all lines)
int m_StartLine2; // 1st line to transfer (1-based relative to 2nd field)
int m_NumLines2; // #lines to transfer (-1 for all lines)
int m_Scaling; // Scaling mode (OFF, 1/4, 1/16). DTAPI_SCALING_*
int m_LineAlignment; // -1 if all symbols should directly follow eachother,
// otherwise the minimum alignment each line should
// have. HLM will chose a stride, usually
// n*m_LineAlignment for smallest n where the stride is
// equal or longer than the required number of bytes per
// line. HLM is allowed to pick larger stride for
// performance reasons.
// Common values will be -1 (no alignment), 1 (align
// each line at byte-boundary) and 16 (sse2 alignment).
DtMxPixelFormat m_PixelFormat; // Pixel format
bool m_UserBuffer; // When set to true the callback function is responsible
// for allocating the video sample buffers. When set to
// false the framework will allocate the buffers. Defaults
// to false.
DtMxVideoConfig();
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxRawConfigSdi -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxRawConfigSdi
{
public:
DtMxPixelFormat m_PixelFormat; // Pixel format. Allowed are: UYVY422 or YUYV422
int m_StartLine; // 1st line to transfer (1-based)
int m_NumLines; // #lines to transfer (-1 for all lines)
int m_LineAlignment; // See DtMxVideoConfig::m_LineAlignment
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- enum DtMxRawDataType -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
enum DtMxRawDataType
{
DT_RAWDATA_SDI,
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxRawConfig -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxRawConfig
{
public:
DtMxRawDataType m_Type; // Indicates which of the fields below is valid.
union {
DtMxRawConfigSdi m_Sdi;
};
DtMxRawConfig();
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- enum DtMuxAudioSampleType -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
enum DtMxAudioSampleType
{
DT_AUDIO_SAMPLE_PCM, // 32-bit PCM samples
DT_AUDIO_SAMPLE_AES3, // AES samples
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- enum DtMxOutputMode -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
enum DtMxOutputMode
{
DT_OUTPUT_MODE_ADD,
DT_OUTPUT_MODE_COPY,
DT_OUTPUT_MODE_DROP,
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxAudioConfig -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMxAudioConfig
{
public:
int m_Index; // Identifies the corresponding audio channel.
bool m_DeEmbed; // If true, decode the input to data buffers per stream.
// m_DeEmbed is ignored for output rows.
DtMxOutputMode m_OutputMode;
// DROP: Audio group is not generated at output, whether
// or not it was available at input. Data buffers
// are available read-only if m_DeEmbed is true.
// COPY: Output for this group is directly copied from
// input, timing stays the same. Data buffers are
// available read-only if m_DeEmbed is true. For
// output rows this has the same effect as DROP: no
// generated output.
// ADD: Output is generated by framework from data
// buffers filled by callback. Data buffers are
// initialized with input data if m_DeEmbed is
// true, otherwise they're initially empty.
// m_OutputMode is ignored for input rows.
DtMxAudioSampleType m_Format; // Inidicate whether to (de-)embed PCM samples or
// AES subframes. Dolby E can be (de-)embedded as
// AES samples.
DtMxAudioConfig();
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- enum DtMxAuxDataType -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
enum DtMxAuxDataType
{
DT_AUXDATA_SDI,
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxAuxObjConfig -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxAuxObjConfig
{
public:
bool m_DeEmbed; // If true, decode this AuxData object. m_DeEmbed is
// ignored for output rows.
DtMxOutputMode m_OutputMode;
// DROP: AuxData object is not generated at output no
// matter whether or not it was available at the
// input. AuxData object is available read-only if
// m_DeEmbed is true.
// COPY: The embedded AuxData of this type in the input
// frame, if present, is copied one-to-one to the
// output, without re-embedding. If m_DeEmbed is
// true the data will be available in the callback.
// ADD: Output is generated by framework from data
// buffers filled by callback. Data buffers are
// initialized with input data if m_DeEmbed is
// true, otherwise they're initially empty.
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxAuxConfigSdi -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxAuxConfigSdi
{
public:
DtMxAuxObjConfig m_AncPackets; // Settings for ancillary data packets
//DtMxAuxObjConfig m_Rp188;
//DtMxAuxObjConfig m_Vitc;
//DtMxAuxObjConfig m_Eia608;
//DtMxAuxObjConfig m_Eia708;
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxAuxDataConfig -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxAuxDataConfig
{
public:
bool m_DeEmbedAll; // De-embed all auxdata. Defaults to false.
DtMxAuxDataType m_DataType; // Indicates which of the following objects is valid.
union
{
DtMxAuxConfigSdi m_Sdi;
};
DtMxAuxDataConfig();
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxRowConfig -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxRowConfig
{
// Constants
public:
static const int MAX_NUM_AUDIO_CHANNELS = 16; // Max. # audio channels supported
public:
DtMxRowConfig();
virtual ~DtMxRowConfig();
public:
bool m_Enable; // Global flag to enable/disable to the complete row.
// When disabled input rows will not provide data and all
// output ports will generate black frames.
// Wnen set to false all further configuration below
// is not taken into account.
int m_RowSize; // Number of frame buffers available in the callback
// function.
void* m_pOpaq; // Opaque user pointer. Framework itself will not change
// this value. This can be used if the row configuration
// is changed dynamically to detect the change. It can
// also be used to change the function of the callback
// frame-synchronous without implementing any locks
// on the user-side.
// Each matrix row operates either in RAW mode or in "parsed data" mode. This means
// that m_RawDataEnable is mutually exclusive with m_VideoEnable, m_AudioEnable
// and m_AuxDataEnable.
// Raw data
bool m_RawDataEnable; // Enable raw data processing. m_RawData is ignored when
// set to false. Defaults to false.
DtMxRawConfig m_RawData; // Configuration of raw input/output data.
// Video
bool m_VideoEnable; // Enables video processing. m_Video is ignored when set
// to false. Defaults to true.
DtMxVideoConfig m_Video; // Configuration of video input/output.
// Audio
bool m_AudioEnable; // Enables audio processing. m_AudioGen and m_Audio are
// ignored when set to false. Defaults to true.
DtMxAudioConfig m_AudioDef; // Default audio settings, can be used to de-embed all
// channels. These settings are used as defaults for
// all channels and can be overriden on a per-channel
// basis by the m_Audio vector.
std::vector<DtMxAudioConfig> m_Audio; // Configuration for each audio channel
// AUX data
bool m_AuxDataEnable; // Enables auxiliary data processing. m_AuxData is ignored
// when set to false. Defaults to false.
DtMxAuxDataConfig m_AuxData; // Configuration of aux data input/output.
};
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//+=+=+=+=+=+=+=+=+=+=+=+=+=+ MATRIX CALLBACK DATA STRUCTURES +=+=+=+=+=+=+=+=+=+=+=+=+=+=
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxRawDataSdi -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMxRawDataSdi
{
public:
unsigned char* m_pBuf;
int m_BufSize;
int m_Stride; // Size of each line in bytes
int m_StartLine; // 1st line in buffer (1-based)
int m_NumLines; // #lines to transfer (-1 for all lines)
// Informational
DtMxPixelFormat m_PixelFormat; // Pixel format. Can be UYVY422 or YUVY422
int m_Width; // Width in pixels
int m_Height; // Height in pixels
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxRawData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMxRawData
{
public:
DtMxRawDataType m_Type; // Indicates which of the fields below is valid.
union {
DtMxRawDataSdi m_Sdi;
};
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxVideoPlaneBuf -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxVideoPlaneBuf
{
public:
unsigned char* m_pBuf; // Pointer to buffer
int m_BufSize; // Total size in bytes of buffer
int m_Stride; // Size of each line in bytes
int m_StartLine; // 1st line in buffer (1-based)
int m_NumLines; // Number of lines. Usually equal to
// DtMxVideoBuf::m_Height but might vary for some
// pixel formats, for 4:2:0 planar for example both
// chrominancy planes have m_NumLines twice as small
// as DtMatrixVideoBuf::m_Height.
DtMxVideoPlaneBuf();
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- enum DtMxVidPattern -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
enum DtMxVidPattern
{
DT_VIDPAT_BLACK_FRAME,
DT_VIDPAT_RED_FRAME,
DT_VIDPAT_GREEN_FRAME,
DT_VIDPAT_BLUE_FRAME,
DT_VIDPAT_WHITE_FRAME,
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxVideoBuf -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxVideoBuf
{
public:
DtMxVideoPlaneBuf m_Planes[3];
int m_NumPlanes; // The number of planes directly depends on the pixel
// format chosen.
DtMxPixelFormat m_PixelFormat; // See DtMxVideoConfig::m_PixelFormat
int m_Scaling; // Scaling mode (OFF, 1/4, 1/16). DTAPI_SCALING_*
int m_Width; // Width in pixels
int m_Height; // Height in pixels
// Initialize the video buffers with a specific pattern in an efficient way. Can
// be used by the callback function for output rows if no useful data is available.
// Framework does not do this automatically because in normal operation it'd be
// a waste of resources to initialize buffers that will be overwritten later anyway.
DTAPI_RESULT InitBuf(DtMxVidPattern Pattern);
DtMxVideoBuf();
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxAuxData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMxAuxData
{
public:
// Teletext
// Closed captioning
// Other anc data
bool m_AncTimeCodeValid;
__int64 m_AncTimeCode;
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtMxAncPacket -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMxAncPacket
{
public:
int m_Did; // Data identifier
int m_SdidOrDbn; // Secondary data identifier / Data block number
int m_Dc; // Data count
int m_Cs; // Check sum
unsigned short* m_pUdw; // User data words
int m_Line; // Line number in which packet was found
// Operations
public:
int Type() const { return (m_Did & 0x80)==0 ? 2 : 1; }
public:
DtMxAncPacket();
virtual ~DtMxAncPacket();
private:
DtMxAncPacket(const DtMxAncPacket&);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxAudioChannelStatus -.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMxAudioChannelStatus
{
public:
// Get or set the sampling rate in Hz.
DTAPI_RESULT GetSampleRate(int& SampleRate);
DTAPI_RESULT SetSampleRate(int SampleRate);
// Get or set whether the channel contains linear audio PCM data or something else.
DTAPI_RESULT GetPcmAudio(bool& IsPcm);
DTAPI_RESULT SetPcmAudio(bool IsPcm);
// Get or set the the significant and maximum number of bits
DTAPI_RESULT GetPcmNumBits(int& NumBits, int& NumAuxBits);
DTAPI_RESULT SetPcmNumBits(int NumBits, int NumAuxBits=0);
unsigned char m_Data[24]; // Raw AES3 channel-status word data.
bool m_Valid; // True, if channel status word has been initialised
DtMxAudioChannelStatus();
virtual ~DtMxAudioChannelStatus();
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxAudioChannel -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxAudioChannel
{
public:
int m_Index; // Index of this channel in underlaying AV format.
bool m_Present; // True if this channel was actually present in the
// input frame.
int m_Service; // Index in m_Services vector for the service this
// channel is a part of.
unsigned int* m_pBuf; // Buffer with audio samples
int m_BufSizeSamples; // Total size of buffer (in #samples)
int m_NumValidSamples; // Number of valid samples inside buffer
DtMxAudioChannelStatus m_Status; // AES3 status word;
const int m_NumSamplesHint; // Suggested number of audio samples for this frame.
// This is based on the audio frame number.
const DtMxAudioSampleType m_Format; // Format of audio samples: PCM32 or AES
// Constructor, destructor
public:
DtMxAudioChannel();
virtual ~DtMxAudioChannel();
DtMxAudioChannel& operator=(const DtMxAudioChannel& Other);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- enum DtMxAudioServiceType -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
enum DtMxAudioServiceType
{
DT_AUDIOSERVICE_UNKNOWN,
DT_AUDIOSERVICE_MONO,
DT_AUDIOSERVICE_DUAL_MONO,
DT_AUDIOSERVICE_STEREO,
DT_AUDIOSERVICE_5_1,
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtFixedVector -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Represents a vector which has a fixed size (i.e. cannot add or remove elements)
//
template<typename T>
class DtFixedVector
{
// Operations
public:
bool empty() const { return m_Data.empty(); }
size_t size() const { return m_Data.size(); }
T& operator[](size_t n) { return m_Data[n]; }
protected:
// Cast to a "normal" std::vector. NOTE: Intended for internal DTAPI use only
inline operator typename std::vector<T>& () { return m_Data; }
inline DtFixedVector& operator=(const DtFixedVector& Oth)
{
this->m_Data = Oth.m_Data;
return *this;
}
// Data / Attributes
private:
std::vector<T> m_Data; // Actual std::vector with the data
// Constructor / Desstructor
public:
DtFixedVector() {}
virtual ~DtFixedVector() {}
protected:
DtFixedVector(size_t Size) { m_Data.resize(Size); }
DtFixedVector(const DtFixedVector& Oth) { *this= Oth; }
// Friends
private:
friend class MxFrameImpl;
friend class MxCommonData;
friend class MxDecData;
friend class MxActionAncEnc;
friend class MxProcessImpl;
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxAudioService -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxAudioService
{
public:
bool m_Valid; // Indicates whether or not this is a valid entry
DtMxAudioServiceType m_ServiceType; // Type of service: mono, stereo, 5.1 etc.
std::vector<int> m_Channels; // Indices of channels that are part of this service
int m_PcmNumBits; // For PCM samples only: number of significant bits
bool m_ContainsData; // For AES only: true if data, false if PCM samples
int m_SampleRate; // Sample rate of audio channels
const int m_SamplesInFrame; // Number of samples in the current frame
//double m_SamplePhase; // Phase of the first audio sample
int m_AudioFrameNumber; // Indicates where we are in the audio frame
// sequence frame
// Constructor, destructor
public:
DtMxAudioService();
DtMxAudioService& operator=(const DtMxAudioService& Other);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxAudioData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
class DtMxAudioData
{
public:
DtFixedVector<DtMxAudioChannel> m_Channels;
DtFixedVector<DtMxAudioService> m_Services;
// Utility function to make the AES3 status word consistent with the members in this
// struct. It's recommended to call this after modifying any members to make sure
// the final output is consistent.
DTAPI_RESULT InitChannelStatus();
DTAPI_RESULT InitChannelStatus(const DtMxAudioService& Service);
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- enum DtMxFrameStatus -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
enum DtMxFrameStatus
{
DT_FRMSTATUS_OK, // Frame has been received and decoded without problems
DT_FRMSTATUS_SKIPPED, // Row has been received and decoded but the callback
// function was never called. This will only be set
// for historic buffers, never for the current
// frame buffer.
DT_FRMSTATUS_DISABLED, // Row has been disabled, buffers not available.
DT_FRMSTATUS_DUPLICATE, // Frame data is duplicated from previous frame
// because the input was too slow.
DT_FRMSTATUS_DROPPED, // Frame data was dropped because the input thread
// in the API was too slow. Data is not available. This
// should never happen under normal circumstances.
DT_FRMSTATUS_NO_SIGNAL, // No signal at input port. Frame data not available.
DT_FRMSTATUS_WRONG_VIDSTD, // Unconfigured video signal at input. Frame data
// not available.
DT_FRMSTATUS_DEV_DISCONNECTED, // Input (usb) device has been disconnected. Frame data
// not available.
DT_FRMSTATUS_ERROR_INTERNAL, // Internal error. Frame data is not available.
};
//-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxFrame -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Data buffers for a single frame. Can be used for input, for output or be shared
// between input and output.
//
class DtMxFrame
{
public:
const DtMxRowConfig* const m_Config;
// Row configuration at the time the frame processing
// was started by the HLM.
// Status of this frame. DT_FRMSTATUS_DISABLED overrules all other status fields.
// For output-only rows this will always be DT_FRMSTATUS_OK or DT_FRMSTATUS_DISABLED.
// For input/output and output-only rows the data buffers requested will always be
// available if m_Status is not DT_FRMSTATUS_DISABLED.
DtMxFrameStatus m_Status;
// Configured video standard, or for fixed-rate rows the actual received rate.
// For fixed rate output rows this has to be set by callback.
int m_VidStd;
// For input and input/output rows this can contain a pointer to the data of an input
// frame that was received before this frame but not processed to maintain clock sync.
// Normally this is a NULL pointer, but if the input is faster than the HLM clock
// occasionally a frame needs to be dropped to keep the system in sync. By providing
// a pointer to the data of the dropped frame the callback might be able to prevent
// audio hickups.
// For each frame processed by the callback function there will be at most one
// dropped frame due to different clocks, so this->m_DroppedFrame->m_DroppedFrame is
// always NULL.
DtMxFrame* m_DroppedFrame;
bool m_InpPhaseValid; // True if m_InpPhase contains a valid value.
double m_InpPhase; // Phase of this input relative to the HLM clock source.
// In a genlocked system this should be approximately
// zero. In a non-genlocked system the HLM will try
// to keep it between -1.25 and 0.05. A frame drop will
// increase this value by 1.
bool m_RawTimestampValid; // True if m_RawTimestamp is valid
__int64 m_RawTimestamp; // 64-bit timestamp of the arrival of the SDI frame.
// Timestamps created by different hardware devices have
// no relation to eachother.
// Raw data buffer
bool m_RawDataValid; // True, if the raw data is valid; False if invalid
DtMxRawData m_RawData;
// Video buffers for field 1 and 2
bool m_VideoValid; // True, if the video data is valid; False if invalid
DtMxVideoBuf m_Video[2];
// Audio data
bool m_AudioValid; // True, if the audio data is valid; False if invalid
DtMxAudioData m_Audio;
// Auxiliary data
bool m_AuxDataValid; // True, if the aux data is valid; False if invalid
DtMxAuxData m_AuxData;
// Access functions for raw ANC packets
virtual DTAPI_RESULT AncAddPacket(DtMxAncPacket& AncPacket, int HancVanc,
int Stream, int Link=-1) = 0;
virtual DTAPI_RESULT AncDelPacket(int Did, int Sdid, int StartLine,
int NumLines, int HancVanc, int Stream, int Mode, int Link=-1) = 0;
virtual DTAPI_RESULT AncGetPacket(int Did, int Sdid, DtMxAncPacket*, int& NumPackets,
int HancVanc, int Stream, int Link=-1) = 0;
// Constructor, destructor
protected:
DtMxFrame();
virtual ~DtMxFrame();
private:
// No implementation is provided for the copy constructor or for operator=
DtMxFrame(const DtMxFrame&);
DtMxFrame& operator=(const DtMxFrame&);
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxRowData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMxRowData
{
public:
// Pointer to current frame. This is the only read/write buffer, all other buffers
// are read-only.
DtMxFrame* m_CurFrame;
// m_Hist.size() == RowSize-1
// m_Hist[0] is the previous frame, m_Hist[1] the one before that etc.
std::vector<const DtMxFrame*> m_Hist;
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxData -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Top-level data class for the user callback function.
//
class DtMxData
{
public:
__int64 m_Frame; // Frame counter. Increases by 1 for every frame the
// matrix clock source processes.
int m_Phase; // Current phase (0..NumPhases-1). Each callback function
// can run up to NumPhases time in parallel, each of them
// will be called with a different value in m_Phase.
int m_NumSkippedFrames; // Error counter, will normally be 0. If due to a timeout
// the matrix API has to skip the callback processing of
// a number of frames, it'll indicate it here in the data
// of the next processed frame.
DtFixedVector<DtMxRowData> m_Rows; // Data per row
// Constructor, destructor
public:
DtMxData();
virtual ~DtMxData();
};
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ MATRIX CONTROL +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxPort -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// The DtMxPort is used as abstraction for one logical input or output. Often this
// maps 1-to-1 to one physical output port, but other mappings are possible as well.
// 4K-video over SDI can be transported over 4x3G links for example, creating
// a 1 logical to 4 physical ports mapping.
//
// Example for single-port:
// Matrix.AttachToInput(0, DtMxPort(&Dvc, 1));
//
// Example for 4K (Assuming DtDevice Dvc; which is attached to DTA-2174):
// DtMxPort Port4k(DTAPI_VIDSTD_2160P60, DTAPI_LINK_4K_SMPTE425);
// Port4k.AddPhysicalPort(&Dvc, 1);
// Port4k.AddPhysicalPort(&Dvc, 2);
// Port4k.AddPhysicalPort(&Dvc, 3);
// Port4k.AddPhysicalPort(&Dvc, 4);
// Matrix.AttachToOutput(0, Port4k, 3);
//
// 3G over 1x3G-SDI link:
// DtMxPort Port3G1(DTAPI_VIDSTD_1080P60);
// Port3G1.AddPhysicalPort(&Dvc, 1);
// Alternatively "DtMxPort Port3G;" is enough, VidStd can be determined
// from the IoConfig.
//
// 3G over 2xHD-SDI links (NOT SUPPORTED):
// DtMxPort Port3G2(DTAPI_VIDSTD_1080P60, DTAPI_LINK_3G_SMPTE372);
// Port3G2.AddPhysicalPort(&Dvc, 1);
// Port3G2.AddPhysicalPort(&Dvc, 2);
//
// After Matrix.AttachToInput() / Matrix.AttachToOutput() it's completely transparent
// whether Port3G1 or Port3G2 is used. Both support exactly the same data and filtering,
// the matrix API will take care of splitting over 1 or multiple physical links.
//
class DtMxPort
{
public:
// 1. Constructor that doesn't link to a physical port yet.
DtMxPort();
// 2. Constructor that links to a single physical port. Video standard and
// link standard are not explicitly set and will be determined from IOConfig.
DtMxPort(DtDevice*, int Port, int ClockPriority=0);
// 3. Constructor that initializes the object for a multi-link structure.
DtMxPort(int VidStd, int LinkStd);
// 4. Copy constructor
DtMxPort(const DtMxPort&);
// Destructor
virtual ~DtMxPort();
// Assignment operator
DtMxPort& operator=(const DtMxPort&);
DTAPI_RESULT AddPhysicalPort(DtDevice*, int Port, int ClockPriority=0);
private:
class MxPortImpl* m_pImpl;
friend class DtMxProcess;
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtMxProcFrameFunc -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
// Signature of a user-defined matrix callback function.
//
typedef void DtMxProcFrameFunc(DtMxData* pData, void* pOpaque);
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- DtMxVidBufFreeCallback -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
// Signature of callback function that will be called by the HLM to free user-provided
// video buffers.
//
typedef void DtMxVidBufFreeCallback(void* pMem, void* pOpaque);
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- enum DtMxClockMode -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
//
enum DtMxClockMode
{
DT_MXCLOCK_AUTO, // Default, HLM internally picks a device as clock source
DT_MXCLOCK_PCR_TIME_ACC, // HLM changes internal clock source based on PCR samples
// provided by user. Each PCR sample is accurately
// timestamped (by using transparent input mode on
// a DekTec device).
DT_MXCLOCK_PCR_TIME_IP, // HLM changes internal clock source based on PCR samples
// provided by user. The PCR samples do not have an
// accurate timestamp, so HLM will adjust the internal
// clock very slowly.
DT_MXCLOCK_SW_FIFO, // User provides timestamped Fifo-loads. HLM controls the
// clock so that the average fifo load remains the same.
};
// Affinity masks for several threads. Each can be set to 0 to disable them.
class DtMxCpuAffinity
{
public:
unsigned int m_Default; // Mask for all other threads
unsigned int m_Dma; // Mask for DMA threads
unsigned int m_Decode; // Mask for decode threads
unsigned int m_Encode; // Mask for encode threads
};
//.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- class DtMxProcess -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
//
class DtMxProcess
{
public:
// The matrix process has 2 states: IDLE and RUNNING. You can switch between those
// states by calling Start() and Stop(). Most functions can only be called in IDLE and
// will return immediately with an error if called in RUN mode.
// Register a new callback function that will be called by the framework whenever
// a new frame is ready for processing.
DTAPI_RESULT AddMatrixCbFunc(DtMxProcFrameFunc* pFunc, void* pOpaque);
// Reset complete matrix process. The following things will be done:
// 1. Detach all attached ports.
// 2. Set NumPhases to default value.
// 3. Clear any configuration done via SetRowConfig()
// 4. Set end-to-end delay to default.
// 5. Remove all callbacks.
DTAPI_RESULT Reset();
// The matrix can have any number of rows (limited by system resources). Row numbers
// start with 0 and go up to N-1 (where N=number of rows). Rows can be attached to
// ports in any order, it's not required to start with row 0.
// Each row can be attached to:
// - 1 input port
// - 1 or more output ports
// - 1 input port and 1 or more output ports
DTAPI_RESULT AttachRowToInput(int Row, const DtMxPort& Port);
DTAPI_RESULT AttachRowToOutput(int Row, const DtMxPort& Port, int ExtraOutDelay=0);
// Change the way the HLM clock source is controlled.
DTAPI_RESULT SetClockControl(DtMxClockMode ClockMode, DtDevice* pDvc=NULL,
int AvgFifoLoad=-1);
// Can be called by the user while the matrix process is running. HLM will keep
// track of a number of these samples and will adjust it's clock source so the
// output rate is matched to the provided samples.
DTAPI_RESULT NewClockSample(__int64 PcrOrFifoLoad, int RefClkCnt);
// Changes the number of phases. Global setting per matrix.
DTAPI_RESULT SetNumPhases(int NumPhases);
// SetRowConfig sets the configuration and validates if it is possible valid. Not all
// errors can be caught at this time since some depend on the video standard (for
// example DtMxVideoConfig::m_NumLines1 if not equal to -1).
// SetRowConfig(Row) is only valid after AttachToInput(Row)/AttachToOutput(Row) has
// been called and will return an error otherwise.
DTAPI_RESULT SetRowConfig(int Row, const DtMxRowConfig& Config);
// Function to change the video standard for all ports attached to the given row.
DTAPI_RESULT SetVidStd(int Row, int VidStd);
// Set a callback function the framework can use to free user-provided video buffers.
DTAPI_RESULT SetVidBufFreeCb(DtMxVidBufFreeCallback* pFunc);
// Get the minimum/default end-to-end delay. CbFrames will be an approximation
// of the time the user callback function has relative to the time of a complete
// frame. GetDefEndToEndDelay() will return a value: CbFrames >= NumPhases.
// GetMinEndToEndDelay() will return a value: NumPhases-1 < CbFrames <= NumPhases.
DTAPI_RESULT GetMinEndToEndDelay(int& Delay, double& CbFrames);
DTAPI_RESULT GetDefEndToEndDelay(int& Delay, double& CbFrames);
DTAPI_RESULT SetEndToEndDelay(int Delay);
// Makes sure the configuration of all rows and global matrix settings is consistent.
// If it is, start the matrix process.
DTAPI_RESULT Start();
// Stop a runnig matrix process and return to IDLE.
DTAPI_RESULT Stop();
DTAPI_RESULT SetThreadAffinity(const DtMxCpuAffinity& Affinity);
//TODO: add function to initialize "error-frame" for input/output and output rows.
// This error-frame can be played out during the first few frames when there is
// no data available yet and when the input is stalled and configuration requests it.
// Print profiling information collected while the matrix was running
DTAPI_RESULT PrintProfilingInfo();
// Implementation data
private:
class MxProcessImpl* m_pImpl;
// Constructor, destructor
public:
DtMxProcess();
~DtMxProcess();
private:
// No implementation is provided for the copy constructor or for operator=
DtMxProcess(const DtMxProcess&);
DtMxProcess& operator=(const DtMxProcess&);
};
} // namespace Dtapi
#ifndef _NO_USING_NAMESPACE_DTAPI
using namespace Dtapi;
#endif
#endif //#ifndef __DTAPI_H