124 lines
4.1 KiB
C++
124 lines
4.1 KiB
C++
/* SPDX-License-Identifier: MIT */
|
|
/**
|
|
@file ntv2configts2022.h
|
|
@brief Declares the CNTV2ConfigTs2022 class.
|
|
@copyright (C) 2014-2021 AJA Video Systems, Inc.
|
|
**/
|
|
|
|
#ifndef NTV2_2022CONFIGTS_H
|
|
#define NTV2_2022CONFIGTS_H
|
|
|
|
#include "ntv2card.h"
|
|
#include "ntv2enums.h"
|
|
#include "ntv2registers2022.h"
|
|
#include "ntv2mbcontroller.h"
|
|
#include "ntv2tshelper.h"
|
|
#include "ntv2config2022.h"
|
|
#include <string.h>
|
|
|
|
// Encoder part numbers
|
|
#define ENCODE_TS_TIMER 0
|
|
#define ENCODE_TS_J2K_ENCODER 1
|
|
#define ENCODE_TS_MPEG_J2K_ENCAP 2
|
|
#define ENCODE_TS_AES_ENCAP 3
|
|
#define ENCODE_TS_MPEG_AES_ENCAP 4
|
|
#define ENCODE_TS_MPEG_ANC_ENCAP 6
|
|
#define ENCODE_TS_MPEG_PCR_ENCAP 7
|
|
|
|
// Decoder part numbers
|
|
#define DECODE_TS_MPEG_J2K_DECAP 0
|
|
#define DECODE_TS_J2K_DECODER 1
|
|
#define DECODE_TS_MPEG_AES_DECAP 2
|
|
#define DECODE_TS_AES_DECAP 3
|
|
#define DECODE_TS_MPEG_ANC_DECAP 5
|
|
|
|
|
|
#define PES_HDR_LOOKUP 0x0
|
|
#define PES_HDR_LEN 0xc0
|
|
#define PTS_OFFSET 0xc1
|
|
#define J2K_TS_OFFSET 0xc2
|
|
#define AUF1_OFFSET 0xc3
|
|
#define AUF2_OFFSET 0xc4
|
|
#define PACKET_RATE 0xca
|
|
#define HOST_EN 0xe0
|
|
#define INTERLACED_VIDEO 0xe1
|
|
#define PAYLOAD_PARAMS 0xe2
|
|
#define LOOPBACK 0xe3
|
|
#define PAT_TABLE_LOOKUP 0x100
|
|
#define PAT_PMT_PERIOD 0x1f0
|
|
#define PMT_TABLE_LOOKUP 0x200
|
|
#define ADAPTATION_LOOKUP 0x300
|
|
#define ADAPTATION_HDR_LENGTH 0x3f0
|
|
|
|
#define MODE_STOP 0x00
|
|
#define MODE_RECORD 0x10
|
|
|
|
/**
|
|
@brief The CNTV2ConfigTs2022 class is the interface to Kona-IP SMPTE 2022 J2K encoder and TS chips
|
|
**/
|
|
|
|
class AJAExport CNTV2ConfigTs2022 : public CNTV2MBController
|
|
{
|
|
public:
|
|
CNTV2ConfigTs2022 (CNTV2Card & device);
|
|
|
|
// Setup the J2K encoder
|
|
bool SetupJ2KEncoder(const NTV2Channel channel, const j2kEncoderConfig &config);
|
|
bool ReadbackJ2KEncoder(const NTV2Channel channel, j2kEncoderConfig &config);
|
|
|
|
// Setup the J2K decoder
|
|
bool SetupJ2KDecoder(const j2kDecoderConfig & config);
|
|
bool ReadbackJ2KDecoder(j2kDecoderConfig &config);
|
|
bool GetJ2KDecoderStatus(j2kDecoderStatus &status);
|
|
|
|
// If method returns false call this to get the error code
|
|
NTV2IpError getLastErrorCode();
|
|
|
|
private:
|
|
|
|
// Setup the J2K encoder and TS
|
|
bool SetupJ2KForEncode(const NTV2Channel channel);
|
|
bool SetupTsForEncode(const NTV2Channel channel);
|
|
|
|
// Setup individual TS encode parts
|
|
bool SetupEncodeTsTimer(const NTV2Channel channel);
|
|
bool SetupEncodeTsJ2KEncoder(const NTV2Channel channel);
|
|
bool SetupEncodeTsMpegJ2kEncap(const NTV2Channel channel);
|
|
bool SetupEncodeTsMpegPcrEncap(const NTV2Channel channel);
|
|
bool SetupEncodeTsMpegAesEncap(const NTV2Channel channel);
|
|
bool SetupEncodeTsAesEncap(const NTV2Channel channel);
|
|
|
|
// Routines to talk to the J2K part
|
|
bool J2kCanAcceptCmd(const NTV2Channel channel);
|
|
bool J2KGetNextT0Status(const NTV2Channel channel, uint32_t *pStatus);
|
|
bool GetT0CmdStatus( const NTV2Channel channel, const uint32_t cmdId, uint32_t *pStatus );
|
|
void J2kSetParam(const NTV2Channel channel, uint32_t config, uint32_t param, uint32_t value);
|
|
void J2kSetMode(const NTV2Channel channel, uint32_t tier, uint32_t mode);
|
|
uint32_t J2kGetFrameCounter(const NTV2Channel channel, uint32_t tier);
|
|
void J2kSetConfig(const NTV2Channel channel, uint32_t config);
|
|
|
|
uint32_t GetFeatures();
|
|
|
|
void GenerateTableForMpegJ2kEncap(const NTV2Channel channel);
|
|
void GenerateTableForMpegPcrEncap(const NTV2Channel channel);
|
|
void GenerateTableForMpegAesEncap(const NTV2Channel channel);
|
|
uint32_t GetIpxJ2KAddr(const NTV2Channel channel);
|
|
uint32_t GetIpxTsAddr(const NTV2Channel channel);
|
|
|
|
bool WriteJ2KConfigReg(const NTV2Channel channel, const uint32_t reg, const uint32_t value);
|
|
bool ReadJ2KConfigReg(const NTV2Channel channel, const uint32_t reg, uint32_t * value);
|
|
|
|
void SetEncoderInputEnable(const NTV2Channel channel, bool bEnable, bool bMDEnable );
|
|
void SetEncoderReset(const NTV2Channel channel, bool bReset );
|
|
int32_t CalculateTsGen(const NTV2Channel channel);
|
|
|
|
bool _is2022_6;
|
|
bool _is2022_2;
|
|
|
|
int32_t _transactionTable[1024][2];
|
|
int32_t _transactionCount;
|
|
|
|
}; // CNTV2ConfigTs2022
|
|
|
|
#endif // NTV2_2022CONFIGTS_H
|