AJA NTV2 SDK  17.5.0.1242
NTV2 SDK 17.5.0.1242
konaipj2ksetup.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
2 #include "konaipj2ksetup.h"
3 #include <QFile>
4 #include <QJsonArray>
5 #include <QJsonDocument>
6 #include "ajatypes.h"
7 #include "ntv2enums.h"
8 #include "ntv2utils.h"
9 #include "ntv2devicefeatures.h"
10 #include "ntv2devicescanner.h"
11 #include "ntv2configts2022.h"
13 
14 
16 {
17  initMaps();
18 }
19 
20 bool CKonaIpJ2kJsonReader::readJson(const QJsonObject &json)
21 {
22  mKonaIpJ2kParams.mDecoder.clear();
23  QJsonArray decoderArray = json["decoder"].toArray();
24  for (int decoderIndex = 0; decoderIndex < decoderArray.size(); ++decoderIndex)
25  {
26  std::cout << "Decoder" << std::endl;
27 
28  QJsonObject pDecoder = decoderArray[decoderIndex].toObject();
29  DecoderStruct decoderStruct;
30 
31  decoderStruct.selectionMode = pDecoder["SelectionMode"].toInt();
32  std::cout << "SelectionMode " << decoderStruct.selectionMode << std::endl;
33  decoderStruct.programNumber = pDecoder["ProgramNumber"].toInt();
34  std::cout << "ProgramNumber " << decoderStruct.selectionMode << std::endl;
35  decoderStruct.programPID = pDecoder["ProgramPID"].toInt();
36  std::cout << "ProgramPID " << decoderStruct.selectionMode << std::endl;
37  decoderStruct.audioNumber = pDecoder["AudioNumber"].toInt();
38  std::cout << "AudioNumber " << decoderStruct.selectionMode << std::endl;
39  mKonaIpJ2kParams.mDecoder.append(decoderStruct);
40  }
41 
42  mKonaIpJ2kParams.mEncoder.clear();
43  QJsonArray encoderArray = json["encoder"].toArray();
44  for (int encoderIndex = 0; encoderIndex < encoderArray.size(); ++encoderIndex)
45  {
46  std::cout << "Encoder" << std::endl;
47 
48  QJsonObject pEncoder = encoderArray[encoderIndex].toObject();
49  EncoderStruct encoderStruct;
50 
51  encoderStruct.channels = pEncoder["Channels"].toInt();
52  std::cout << "Channels " << encoderStruct.channels << std::endl;
53 
54  QString vf = pEncoder["VideoFormat"].toString();
55  encoderStruct.videoFormat = videoFormatMap[vf];
56  std::cout << "VideoFormat " << vf.toStdString().c_str() << std::endl;
57 
58  QString st = pEncoder["StreamType"].toString();
59  encoderStruct.streamType = streamTypeMap[st];
60  std::cout << "StreamType " << st.toStdString().c_str() << std::endl;
61 
62  QString css = pEncoder["ChromaSampling"].toString();
63  encoderStruct.chromaSubSampling = chromaSubSamplingMap[css];
64  std::cout << "ChromaSampling " << css.toStdString().c_str() << std::endl;
65 
66  encoderStruct.bitDepth = pEncoder["BitDepth"].toInt();
67  std::cout << "BitDepth " << encoderStruct.bitDepth << std::endl;
68  encoderStruct.mbps = pEncoder["Mbps"].toInt();
69  std::cout << "Mbps " << encoderStruct.mbps << std::endl;
70  encoderStruct.audioChannels = pEncoder["AudioChannels"].toInt();
71  std::cout << "AudioChannels " << encoderStruct.audioChannels << std::endl;
72 
73  encoderStruct.programPid = pEncoder["ProgramPid"].toInt();
74  std::cout << "ProgramPid " << encoderStruct.programPid << std::endl;
75  encoderStruct.videoPid = pEncoder["VideoPid"].toInt();
76  std::cout << "VideoPid " << encoderStruct.videoPid << std::endl;
77  encoderStruct.pcrPid = pEncoder["PcrPid"].toInt();
78  std::cout << "PcrPid " << encoderStruct.pcrPid << std::endl;
79  encoderStruct.audio1Pid = pEncoder["Audio1Pid"].toInt();
80  std::cout << "Audio1Pid " << encoderStruct.audio1Pid << std::endl << std::endl;
81  encoderStruct.ullMode = false;
82 
83  mKonaIpJ2kParams.mEncoder.append(encoderStruct);
84  }
85  return true;
86 }
87 
88 bool CKonaIpJ2kJsonReader::openJson(QString fileName)
89 {
90  QFile loadFile(fileName);
91  if ( !loadFile.open(QIODevice::ReadOnly))
92  {
93  qWarning("Couldn't open json file.");
94  return false;
95  }
96  QByteArray saveData = loadFile.readAll();
97  QJsonDocument loadDoc(QJsonDocument::fromJson(saveData));
98 
99  return readJson(loadDoc.object());
100 
101 }
102 
104 {
105  QMap<QString, NTV2VideoFormat>::iterator i;
106  for (i = videoFormatMap.begin(); i != videoFormatMap.end(); ++i)
107  {
108  QString str = i.key();
109  std::cout << str.toStdString() << std::endl;
110  }
111 }
112 
114 {
115 
118 
122 
131 
137 
142 
143  chromaSubSamplingMap["444"] = 0;
144  chromaSubSamplingMap["422-444"] = 1;
145  chromaSubSamplingMap["422-Standard"] = 2;
146 
147  streamTypeMap["Standard"] = 0;
148  streamTypeMap["Non-elsm"] = 1;
149 
150 }
151 
152 
153 bool CKonaIpEncoderSetup::setupBoard(std::string pDeviceSpec, KonaIPParamJ2KSetupStruct* pKonaIpJ2kParams)
154 {
155  CNTV2Card mDevice;
156  CNTV2DeviceScanner::GetFirstDeviceFromArgument (pDeviceSpec, mDevice);
157  if (!mDevice.IsOpen())
158  {
159  std::cerr << "## ERROR: No devices found" << std::endl;
160  return false;
161  }
162 
163  //if (!mDevice.IsIPDevice())
164  //{std::cerr << "## ERROR: Not an IP device" << std::endl; return false;}
165 
166  // Wait for ready
167  while (!mDevice.IsMBSystemReady())
168  {
169  std::cout << "## NOTE: Waiting for device to become ready... (Ctrl-C will abort)" << std::endl;
170  AJATime::Sleep(1000);
171  if (mDevice.IsMBSystemReady ())
172  {
173  std::cout << "## NOTE: Device is ready" << std::endl;
174 
175  }
176  }
177 
178  if (!mDevice.IsMBSystemValid())
179  {
180  std::cerr << "## ERROR: board firmware package is incompatible with this application" << std::endl;
181  return false;
182  }
183 
184  if (pKonaIpJ2kParams->mEncoder.size() == 0)
185  {
186  std::cerr << "Not setting up encoder, no data" << std::endl;
187  return false;
188  }
189 
190  if (pKonaIpJ2kParams->mEncoder.size() > 1)
191  {
192  std::cerr << "Multiple encoders not supported at this time" << std::endl;
193  return false;
194  }
195 
196  QListIterator<EncoderStruct> encoderIter(pKonaIpJ2kParams->mEncoder);
197  while (encoderIter.hasNext())
198  {
199  std::cerr << "## encoderIter did" << std::endl;
200 
201  EncoderStruct encoder = encoderIter.next();
202  CNTV2Config2022 config2022 (mDevice);
203  j2kEncoderConfig encoderCfg;
204 
205  // retrieve encode params
206  encoderCfg.videoFormat = (NTV2VideoFormat)encoder.videoFormat;
207  encoderCfg.ullMode = 0;
208  encoderCfg.bitDepth = encoder.bitDepth;
210  encoderCfg.streamType = (J2KStreamType)encoder.streamType;
211  encoderCfg.mbps = encoder.mbps;
212  encoderCfg.audioChannels = encoder.audioChannels;
213  encoderCfg.pmtPid = encoder.programPid;
214  encoderCfg.videoPid = encoder.videoPid;
215  encoderCfg.pcrPid = encoder.pcrPid;
216  encoderCfg.audio1Pid = encoder.audio1Pid;
217 
218  // For the J2K encoder we only configure output channels NTV2_CHANNEL1 and NTV2_CHANNEL2
219  if (encoder.channels & 1)
220  {
221  config2022.SetJ2KEncoderConfiguration(NTV2_CHANNEL1, encoderCfg);
222  }
223 
224  if (encoder.channels & 2)
225  {
226  config2022.SetJ2KEncoderConfiguration(NTV2_CHANNEL2, encoderCfg);
227  }
228  }
229 
230  std::cerr << "## NOTE: Encoder is setup and running" << std::endl;
231 
232  return true;
233 }
234 
235 
236 bool CKonaIpDecoderSetup::setupBoard(std::string pDeviceSpec, KonaIPParamJ2KSetupStruct* pKonaIpJ2kParams)
237 {
238  CNTV2Card mDevice;
239  CNTV2DeviceScanner::GetFirstDeviceFromArgument (pDeviceSpec, mDevice);
240  if (!mDevice.IsOpen())
241  {std::cerr << "## ERROR: No devices found" << std::endl; return false;}
242  //if (!mDevice.IsIPDevice())
243  //{std::cerr << "## ERROR: Not an IP device" << std::endl; return false;}
244 
245  // Wait for device ready
246  while (!mDevice.IsMBSystemReady())
247  {
248  std::cout << "## NOTE: Waiting for device to become ready... (Ctrl-C will abort)" << std::endl;
249  AJATime::Sleep(1000);
250  if (mDevice.IsMBSystemReady ())
251  {
252  std::cout << "## NOTE: Device is ready" << std::endl;
253  }
254  }
255 
256  if (!mDevice.IsMBSystemValid())
257  {
258  std::cerr << "## ERROR: board firmware package is incompatible with this application" << std::endl;
259  return false;
260  }
261 
262  if (pKonaIpJ2kParams->mDecoder.size() == 0)
263  {
264  std::cerr << "Not setting up decoder, no data" << std::endl;
265  return false;
266  }
267 
268  if (pKonaIpJ2kParams->mDecoder.size() > 1)
269  {
270  std::cerr << "Multiple decoders not supported at this time" << std::endl;
271  return false;
272  }
273 
274  QListIterator<DecoderStruct> decoderIter(pKonaIpJ2kParams->mDecoder);
275  while (decoderIter.hasNext())
276  {
277  std::cerr << "## decoderIter did" << std::endl;
278 
279  DecoderStruct decoder = decoderIter.next();
280  CNTV2Config2022 config2022 (mDevice);
281  j2kDecoderConfig decoderCfg;
282 
283  // retrieve decode params
285  decoderCfg.programNumber = decoder.programNumber;
286  decoderCfg.programPID = decoder.programPID;
287  decoderCfg.audioNumber = decoder.audioNumber;
288 
289  config2022.SetJ2KDecoderConfiguration(decoderCfg);
290  }
291 
292  std::cerr << "## NOTE: Decoder is setup and running" << std::endl;
293 
294  return true;
295 }
296 
297 
298 
NTV2_FORMAT_625_5000
@ NTV2_FORMAT_625_5000
Definition: ntv2enums.h:567
CKonaIpJ2kJsonReader::openJson
bool openJson(QString fileName)
Definition: konaipj2ksetup.cpp:88
CKonaIpDecoderSetup::setupBoard
bool setupBoard(std::string pDeviceSpec, KonaIPParamJ2KSetupStruct *pKonaIpJ2kParams)
Definition: konaipj2ksetup.cpp:236
NTV2_FORMAT_720p_5000
@ NTV2_FORMAT_720p_5000
Definition: ntv2enums.h:550
j2kEncoderConfig
Definition: ntv2config2022.h:87
CNTV2Config2022::SetJ2KDecoderConfiguration
bool SetJ2KDecoderConfiguration(const j2kDecoderConfig &j2kConfig)
Definition: ntv2config2022.cpp:1346
j2kEncoderConfig::mbps
uint32_t mbps
Specifies the mbits per-second for J2K encode.
Definition: ntv2config2022.h:101
NTV2_CHANNEL2
@ NTV2_CHANNEL2
Specifies channel or Frame Store 2 (or the 2nd item).
Definition: ntv2enums.h:1337
NTV2_FORMAT_525_5994
@ NTV2_FORMAT_525_5994
Definition: ntv2enums.h:566
EncoderStruct::channels
uint32_t channels
Definition: konaipj2ksetup.h:13
ntv2devicefeatures.h
Declares device capability functions.
J2KChromaSubSampling
J2KChromaSubSampling
Definition: ntv2tshelper.h:75
DecoderStruct::programPID
uint32_t programPID
Definition: konaipj2ksetup.h:31
EncoderStruct::videoPid
uint32_t videoPid
Definition: konaipj2ksetup.h:21
j2kEncoderConfig::videoPid
uint32_t videoPid
Specifies the PID for the video.
Definition: ntv2config2022.h:105
CKonaIpJ2kJsonReader::initMaps
void initMaps()
Definition: konaipj2ksetup.cpp:113
systemtime.h
Declares the AJATime class.
CKonaIpJ2kJsonReader::CKonaIpJ2kJsonReader
CKonaIpJ2kJsonReader()
Definition: konaipj2ksetup.cpp:15
CNTV2Config2022
The CNTV2Config2022 class is the interface to Kona-IP network I/O using SMPTE 2022.
Definition: ntv2config2022.h:159
NTV2_FORMAT_1080i_5994
@ NTV2_FORMAT_1080i_5994
Definition: ntv2enums.h:535
CNTV2DeviceScanner::GetFirstDeviceFromArgument
static bool GetFirstDeviceFromArgument(const std::string &inArgument, CNTV2Card &outDevice)
Rescans the host, and returns an open CNTV2Card instance for the AJA device that matches a command li...
Definition: ntv2devicescanner.cpp:374
NTV2_FORMAT_1080p_2K_3000
@ NTV2_FORMAT_1080p_2K_3000
Definition: ntv2enums.h:616
CKonaIpJ2kJsonReader::videoFormatMap
QMap< QString, NTV2VideoFormat > videoFormatMap
Definition: konaipj2ksetup.h:57
j2kDecoderConfig::programPID
uint32_t programPID
Definition: ntv2config2022.h:131
j2kEncoderConfig::streamType
J2KStreamType streamType
Specifies the stream type for J2K encode.
Definition: ntv2config2022.h:102
CKonaIpJ2kJsonReader::readJson
bool readJson(const QJsonObject &json)
Definition: konaipj2ksetup.cpp:20
NTV2_CHANNEL1
@ NTV2_CHANNEL1
Specifies channel or Frame Store 1 (or the first item).
Definition: ntv2enums.h:1336
j2kEncoderConfig::audioChannels
uint32_t audioChannels
Specifies the number of audio channels for J2K encode, a value of 0 indicates no audio.
Definition: ntv2config2022.h:103
CNTV2Config2022::SetJ2KEncoderConfiguration
bool SetJ2KEncoderConfiguration(const NTV2Channel channel, const j2kEncoderConfig &j2kConfig)
Definition: ntv2config2022.cpp:1322
ajatypes.h
Declares the most fundamental data types used by NTV2. Since Windows NT was the first principal devel...
DecoderStruct
Definition: konaipj2ksetup.h:27
AJATime::Sleep
static void Sleep(const int32_t inMilliseconds)
Suspends execution of the current thread for a given number of milliseconds.
Definition: systemtime.cpp:284
NTV2_FORMAT_1080p_2K_2400
@ NTV2_FORMAT_1080p_2K_2400
Definition: ntv2enums.h:547
j2kEncoderConfig::bitDepth
uint32_t bitDepth
Specifies the bit depth for J2K encode.
Definition: ntv2config2022.h:99
EncoderStruct::ullMode
bool ullMode
Definition: konaipj2ksetup.h:24
ntv2devicescanner.h
Declares the CNTV2DeviceScanner class.
NTV2_FORMAT_1080p_2997
@ NTV2_FORMAT_1080p_2997
Definition: ntv2enums.h:541
NTV2_FORMAT_1080p_3000
@ NTV2_FORMAT_1080p_3000
Definition: ntv2enums.h:542
NTV2_FORMAT_720p_6000
@ NTV2_FORMAT_720p_6000
Definition: ntv2enums.h:538
KonaIPParamJ2KSetupStruct::mEncoder
QList< EncoderStruct > mEncoder
Definition: konaipj2ksetup.h:37
konaipj2ksetup.h
NTV2_FORMAT_1080p_2500
@ NTV2_FORMAT_1080p_2500
Definition: ntv2enums.h:543
CKonaIpJ2kJsonReader::mKonaIpJ2kParams
KonaIPParamJ2KSetupStruct mKonaIpJ2kParams
Definition: konaipj2ksetup.h:55
ntv2enums.h
Enumerations for controlling NTV2 devices.
ntv2utils.h
Declares numerous NTV2 utility functions.
EncoderStruct::audio1Pid
uint32_t audio1Pid
Definition: konaipj2ksetup.h:23
NTV2VideoFormatToString
std::string NTV2VideoFormatToString(const NTV2VideoFormat inValue, const bool inUseFrameRate=false)
Definition: ntv2utils.cpp:6793
EncoderStruct::audioChannels
uint32_t audioChannels
Definition: konaipj2ksetup.h:19
EncoderStruct::bitDepth
uint32_t bitDepth
Definition: konaipj2ksetup.h:15
KonaIPParamJ2KSetupStruct::mDecoder
QList< DecoderStruct > mDecoder
Definition: konaipj2ksetup.h:38
j2kEncoderConfig::ullMode
uint32_t ullMode
Specifies the ull mode for J2K encode.
Definition: ntv2config2022.h:98
KonaIPParamJ2KSetupStruct
Definition: konaipj2ksetup.h:35
CNTV2Card
I interrogate and control an AJA video/audio capture/playout device.
Definition: ntv2card.h:28
j2kDecoderConfig
Definition: ntv2config2022.h:110
CKonaIpEncoderSetup::setupBoard
bool setupBoard(std::string pDeviceSpec, KonaIPParamJ2KSetupStruct *pKonaIpJ2kParams)
Definition: konaipj2ksetup.cpp:153
CNTV2DriverInterface::IsMBSystemValid
virtual bool IsMBSystemValid(void)
Definition: ntv2driverinterface.cpp:1326
NTV2_FORMAT_1080p_6000_A
@ NTV2_FORMAT_1080p_6000_A
Definition: ntv2enums.h:558
NTV2_FORMAT_1080p_2K_2398
@ NTV2_FORMAT_1080p_2K_2398
Definition: ntv2enums.h:546
NTV2_FORMAT_1080p_2398
@ NTV2_FORMAT_1080p_2398
Definition: ntv2enums.h:544
J2KStreamType
J2KStreamType
Definition: ntv2tshelper.h:69
j2kDecoderConfig::audioNumber
uint32_t audioNumber
Definition: ntv2config2022.h:132
EncoderStruct::videoFormat
NTV2VideoFormat videoFormat
Definition: konaipj2ksetup.h:14
j2kEncoderConfig::pmtPid
uint32_t pmtPid
Specifies the PID for the PMT.
Definition: ntv2config2022.h:104
EncoderStruct
Definition: konaipj2ksetup.h:11
EncoderStruct::pcrPid
uint32_t pcrPid
Definition: konaipj2ksetup.h:22
EncoderStruct::programPid
uint32_t programPid
Definition: konaipj2ksetup.h:20
NTV2_FORMAT_720p_2398
@ NTV2_FORMAT_720p_2398
Definition: ntv2enums.h:554
CKonaIpJ2kJsonReader::printVideoFormatMap
void printVideoFormatMap()
Definition: konaipj2ksetup.cpp:103
DecoderStruct::audioNumber
uint32_t audioNumber
Definition: konaipj2ksetup.h:32
DecoderStruct::programNumber
uint32_t programNumber
Definition: konaipj2ksetup.h:30
NTV2_FORMAT_1080p_5000_A
@ NTV2_FORMAT_1080p_5000_A
Definition: ntv2enums.h:556
NTV2VideoFormat
enum _NTV2VideoFormat NTV2VideoFormat
Identifies a particular video format.
EncoderStruct::streamType
uint32_t streamType
Definition: konaipj2ksetup.h:16
NTV2_FORMAT_1080i_5000
@ NTV2_FORMAT_1080i_5000
Definition: ntv2enums.h:534
EncoderStruct::mbps
uint32_t mbps
Definition: konaipj2ksetup.h:18
j2kEncoderConfig::videoFormat
NTV2VideoFormat videoFormat
Specifies the video format for J2K encode.
Definition: ntv2config2022.h:97
NTV2_FORMAT_1080p_5994_A
@ NTV2_FORMAT_1080p_5994_A
Definition: ntv2enums.h:557
j2kEncoderConfig::chromaSubsamp
J2KChromaSubSampling chromaSubsamp
Specifies the chroma sub sampling for J2K encode.
Definition: ntv2config2022.h:100
DecoderStruct::selectionMode
uint32_t selectionMode
Definition: konaipj2ksetup.h:29
NTV2_FORMAT_720p_5994
@ NTV2_FORMAT_720p_5994
Definition: ntv2enums.h:537
j2kDecoderConfig::programNumber
uint32_t programNumber
Definition: ntv2config2022.h:130
j2kEncoderConfig::pcrPid
uint32_t pcrPid
Specifies the PID for the PCR.
Definition: ntv2config2022.h:106
ntv2configts2022.h
Declares the CNTV2ConfigTs2022 class.
j2kEncoderConfig::audio1Pid
uint32_t audio1Pid
Specifies the PID for audio 1.
Definition: ntv2config2022.h:107
NTV2_FORMAT_720p_2500
@ NTV2_FORMAT_720p_2500
Definition: ntv2enums.h:555
EncoderStruct::chromaSubSampling
uint32_t chromaSubSampling
Definition: konaipj2ksetup.h:17
nlohmann::json_abiNLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON_v3_11_NLOHMANN_JSON_VERSION_PATCH::json
basic_json<> json
default specialization
Definition: json.hpp:3422
CNTV2DriverInterface::IsMBSystemReady
virtual bool IsMBSystemReady(void)
Definition: ntv2driverinterface.cpp:1337
NTV2_FORMAT_1080p_2400
@ NTV2_FORMAT_1080p_2400
Definition: ntv2enums.h:545
NTV2_FORMAT_1080i_6000
@ NTV2_FORMAT_1080i_6000
Definition: ntv2enums.h:536
CKonaIpJ2kJsonReader::chromaSubSamplingMap
QMap< QString, uint32_t > chromaSubSamplingMap
Definition: konaipj2ksetup.h:59
j2kDecoderConfig::eProgSelMode_t
eProgSelMode_t
Definition: ntv2config2022.h:113
j2kDecoderConfig::selectionMode
eProgSelMode_t selectionMode
Definition: ntv2config2022.h:129
CKonaIpJ2kJsonReader::streamTypeMap
QMap< QString, uint32_t > streamTypeMap
Definition: konaipj2ksetup.h:58
NTV2_FORMAT_1080p_2K_2997
@ NTV2_FORMAT_1080p_2K_2997
Definition: ntv2enums.h:615