9872 lines
440 KiB
C++
9872 lines
440 KiB
C++
/* SPDX-License-Identifier: MIT */
|
|
/**
|
|
@file ntv2publicinterface.h
|
|
@brief Declares enums and structs used by all platform drivers and the SDK.
|
|
@copyright (C) 2012-2021 AJA Video Systems, Inc. All rights reserved.
|
|
**/
|
|
|
|
#ifndef NTV2PUBLICINTERFACE_H
|
|
#define NTV2PUBLICINTERFACE_H
|
|
|
|
#include "ajatypes.h"
|
|
#include "ntv2enums.h"
|
|
#if !defined(NTV2_BUILDING_DRIVER)
|
|
#include <iostream>
|
|
#include <set>
|
|
#include <map>
|
|
#include <vector>
|
|
#include <iomanip>
|
|
#include <bitset>
|
|
#include <string>
|
|
#include "ajaexport.h"
|
|
#include "string.h"
|
|
#if defined(MSWindows)
|
|
#pragma warning(disable:4800) // int/bool conversion
|
|
#pragma warning(disable:4127) // Stop MSVC from bitching about "do{...}while(false)" macros
|
|
#endif
|
|
#endif // user-space clients only
|
|
|
|
#if defined (MSWindows)
|
|
#include <basetsd.h>
|
|
#elif defined (AJAMac)
|
|
#pragma GCC diagnostic ignored "-Wunused-private-field"
|
|
#endif
|
|
|
|
|
|
typedef enum
|
|
{
|
|
kRegGlobalControl, // 0
|
|
kRegCh1Control, // 1
|
|
kRegCh1PCIAccessFrame, // 2
|
|
kRegCh1OutputFrame, // 3
|
|
kRegCh1InputFrame, // 4
|
|
kRegCh2Control, // 5
|
|
kRegCh2PCIAccessFrame, // 6
|
|
kRegCh2OutputFrame, // 7
|
|
kRegCh2InputFrame, // 8
|
|
kRegVidProc1Control, // 9
|
|
kRegVidProcXptControl, // 10
|
|
kRegMixer1Coefficient, // 11
|
|
kRegSplitControl, // 12
|
|
kRegFlatMatteValue, // 13
|
|
kRegOutputTimingControl, // 14
|
|
kRegReserved15, // 15
|
|
kRegReserved16, // 16
|
|
kRegFlashProgramReg, // 17
|
|
kRegLineCount, // 18
|
|
kRegOutputTimingFinePhase, // 19 (was kRegReserved3)
|
|
kRegAud1Delay = kRegOutputTimingFinePhase, //19
|
|
kRegVidIntControl, // 20
|
|
kRegStatus, // 21
|
|
kRegInputStatus, // 22
|
|
kRegAud1Detect, // 23
|
|
kRegAud1Control, // 24
|
|
kRegAud1SourceSelect, // 25
|
|
kRegAud1OutputLastAddr, // 26
|
|
kRegAud1InputLastAddr, // 27
|
|
kRegAud1Counter, // 28
|
|
kRegRP188InOut1DBB, // 29
|
|
kRegRP188InOut1Bits0_31, // 30
|
|
kRegRP188InOut1Bits32_63, // 31
|
|
kRegDMA1HostAddr, // 32
|
|
kRegDMA1LocalAddr, // 33
|
|
kRegDMA1XferCount, // 34
|
|
kRegDMA1NextDesc, // 35
|
|
kRegDMA2HostAddr, // 36
|
|
kRegDMA2LocalAddr, // 37
|
|
kRegDMA2XferCount, // 38
|
|
kRegDMA2NextDesc, // 39
|
|
kRegDMA3HostAddr, // 40
|
|
kRegDMA3LocalAddr, // 41
|
|
kRegDMA3XferCount, // 42
|
|
kRegDMA3NextDesc, // 43
|
|
kRegDMA4HostAddr, // 44
|
|
kRegDMA4LocalAddr, // 45
|
|
kRegDMA4XferCount, // 46
|
|
kRegDMA4NextDesc, // 47
|
|
kRegDMAControl, // 48
|
|
kRegDMAIntControl, // 49
|
|
kRegBoardID, // 50
|
|
kRegReserved51, // 51
|
|
kRegReserved52, // 52
|
|
kRegReserved53, // 53
|
|
kRegReserved54, // 54
|
|
kRegReserved55, // 55
|
|
kRegReserved56, // 56
|
|
kRegReserved57, // 57
|
|
kRegXenaxFlashControlStatus, // 58
|
|
kRegXenaxFlashAddress, // 59
|
|
kRegXenaxFlashDIN, // 60
|
|
kRegXenaxFlashDOUT, // 61
|
|
kRegReserved62, // 62
|
|
kRegCPLDVersion, // 63
|
|
kRegRP188InOut2DBB, // 64
|
|
kRegRP188InOut2Bits0_31, // 65
|
|
kRegRP188InOut2Bits32_63, // 66
|
|
kRegCanDoStatus, // 67 SDK 15.6 and later
|
|
kRegCh1ColorCorrectionControl, // 68 CamelCase fix in SDK 16.0
|
|
kRegCh2ColorCorrectionControl, // 69 CamelCase fix SDK 16.0
|
|
kRegRS422Transmit, // 70
|
|
kRegRS422Receive, // 71
|
|
kRegRS422Control, // 72
|
|
kRegReserved73, // 73
|
|
kRegReserved74, // 74
|
|
kRegReserved75, // 75
|
|
kRegReserved76, // 76
|
|
kRegReserved77, // 77
|
|
kRegReserved78, // 78
|
|
kRegReserved79, // 79
|
|
kRegReserved80, // 80
|
|
|
|
kRegAnalogInputStatus, // 81
|
|
kRegAnalogInputControl, // 82
|
|
kRegReserved83, // 83
|
|
kRegFS1ProcAmpC1Y_C1CB, // 84
|
|
kRegFS1ProcAmpC1CR_C2CB, // 85
|
|
kRegFS1ProcAmpC2CROffsetY, // 86
|
|
kRegFS1AudioDelay, // 87
|
|
kRegAud2Delay = kRegFS1AudioDelay, //87
|
|
kRegBitfileDate, // 88
|
|
kRegBitfileTime, // 89
|
|
|
|
kRegFS1I2CControl, // 90
|
|
kRegFS1I2C1Address, // 91
|
|
kRegFS1I2C1Data, // 92
|
|
kRegFS1I2C2Address, // 93
|
|
kRegFS1I2C2Data, // 94
|
|
kRegFS1ReferenceSelect, // 95
|
|
kRegAverageAudioLevelChan1_2, // 96
|
|
kRegAverageAudioLevelChan3_4, // 97
|
|
kRegAverageAudioLevelChan5_6, // 98
|
|
kRegAverageAudioLevelChan7_8, // 99
|
|
|
|
kRegDMA1HostAddrHigh, // 100
|
|
kRegDMA1NextDescHigh, // 101
|
|
kRegDMA2HostAddrHigh, // 102
|
|
kRegDMA2NextDescHigh, // 103
|
|
kRegDMA3HostAddrHigh, // 104
|
|
kRegDMA3NextDescHigh, // 105
|
|
kRegDMA4HostAddrHigh, // 106
|
|
kRegDMA4NextDescHigh, // 107
|
|
|
|
kRegGlobalControl3, // 108
|
|
kRegReserved109, // 109 // Used for camera record flag kRegLANCAndLensTap = kRegReserved109, // Borg //Note: Lens Tap is no longer supported by software. ref bug 3342. 4/5/2012
|
|
kRegLTCEmbeddedBits0_31, // 110
|
|
kRegLTCEmbeddedBits32_63, // 111
|
|
kRegLTCAnalogBits0_31, // 112
|
|
kRegLTCAnalogBits32_63, // 113
|
|
|
|
kRegLTCOutBits0_31 = kRegLTCEmbeddedBits0_31, // 110
|
|
kRegLTCOutBits32_63 = kRegLTCEmbeddedBits32_63, // 111
|
|
kRegLTCInBits0_31 = kRegLTCAnalogBits0_31, // 112
|
|
kRegLTCInBits32_63 = kRegLTCAnalogBits32_63, // 113
|
|
|
|
kRegReserved114, // 114
|
|
kRegAudioControl2, // 115
|
|
kRegSysmonControl, // 116
|
|
kRegSysmonConfig1_0, // 117
|
|
kRegSysmonConfig2, // 118
|
|
kRegSysmonVccIntDieTemp, // 119
|
|
|
|
kRegInternalExternalVoltage, // 120
|
|
kRegFlashProgramReg2, // 121
|
|
kRegHDMIOut3DStatus1, // 122
|
|
kRegHDMIOut3DStatus2, // 123
|
|
kRegHDMIOut3DControl, // 124
|
|
kRegHDMIOutControl, // 125
|
|
kRegHDMIInputStatus, // 126
|
|
kRegHDMIInputControl, // 127
|
|
kRegAnalogOutControl, // 128
|
|
kRegSDIOut1Control, // 129
|
|
|
|
kRegSDIOut2Control, // 130
|
|
kRegConversionControl, // 131
|
|
kRegFrameSync1Control, // 132
|
|
kRegI2CWriteData, // 133
|
|
kRegFrameSync2Control, // 134
|
|
kRegI2CWriteControl, // 135
|
|
kRegXptSelectGroup1, // 136
|
|
kRegXptSelectGroup2, // 137
|
|
kRegXptSelectGroup3, // 138
|
|
kRegXptSelectGroup4, // 139
|
|
kRegXptSelectGroup5, // 140
|
|
kRegXptSelectGroup6, // 141
|
|
|
|
kRegCSCoefficients1_2, // 142
|
|
kRegCSCoefficients3_4, // 143
|
|
kRegCSCoefficients5_6, // 144
|
|
kRegCSCoefficients7_8, // 145
|
|
kRegCSCoefficients9_10, // 146
|
|
|
|
kRegCS2Coefficients1_2, // 147
|
|
kRegCS2Coefficients3_4, // 148
|
|
kRegCS2Coefficients5_6, // 149
|
|
kRegCS2Coefficients7_8, // 150
|
|
kRegCS2Coefficients9_10, // 151
|
|
|
|
kRegField1Line21CaptionDecode, // 152 // OBSOLETE
|
|
kRegField2Line21CaptionDecode, // 153 // OBSOLETE
|
|
kRegField1Line21CaptionEncode, // 154 // OBSOLETE
|
|
kRegField2Line21CaptionEncode, // 155 // OBSOLETE
|
|
kRegVANCGrabberSetup, // 156 // OBSOLETE
|
|
kRegVANCGrabberStatus1, // 157 // OBSOLETE
|
|
kRegVANCGrabberStatus2, // 158 // OBSOLETE
|
|
kRegVANCGrabberDataBuffer, // 159 // OBSOLETE
|
|
kRegVANCInserterSetup1, // 160 // OBSOLETE
|
|
kRegVANCInserterSetup2, // 161 // OBSOLETE
|
|
kRegVANCInserterDataBuffer, // 162 // OBSOLETE
|
|
|
|
kRegXptSelectGroup7, // 163
|
|
kRegXptSelectGroup8, // 164
|
|
kRegCh1ControlExtended, // 165
|
|
kRegCh2ControlExtended, // 166
|
|
kRegAFDVANCGrabber, // 167
|
|
kRegFS1DownConverter2Control, // 168
|
|
kRegSDIOut3Control, // 169
|
|
kRegSDIOut4Control, // 170
|
|
kRegAFDVANCInserterSDI1, // 171
|
|
kRegAFDVANCInserterSDI2, // 172
|
|
kRegAudioChannelMappingCh1, // 173 // OBSOLETE
|
|
kRegXptSelectGroup36, // 174
|
|
kRegXptSelectGroup37, // 175
|
|
kRegAudioChannelMappingCh4, // 176 // OBSOLETE
|
|
kRegAudioChannelMappingCh5, // 177 // OBSOLETE
|
|
kRegAudioChannelMappingCh6, // 178 // OBSOLETE
|
|
kRegAudioChannelMappingCh7, // 179 // OBSOLETE
|
|
kRegAudioChannelMappingCh8, // 180 // OBSOLETE
|
|
|
|
kRegReserved181, // 181
|
|
kRegReserved182, // 182
|
|
kRegReserved183, // 183
|
|
kRegReserved184, // 184
|
|
kRegReserved185, // 185
|
|
kRegReserved186, // 186
|
|
kRegReserved187, // 187
|
|
kRegVideoPayloadIDLinkA, // 188
|
|
kRegVideoPayloadIDLinkB, // 189
|
|
kRegSDIIn1VPIDA = kRegVideoPayloadIDLinkA,
|
|
kRegSDIIn1VPIDB = kRegVideoPayloadIDLinkB,
|
|
kRegAudioOutputSourceMap, // 190
|
|
kRegXptSelectGroup11, // 191
|
|
kRegStereoCompressor, // 192
|
|
kRegXptSelectGroup12, // 193
|
|
kRegFrameApertureOffset, // 194
|
|
kRegFirmwareUserID, // 195
|
|
kRegReserved196, // 196
|
|
kRegReserved197, // 197
|
|
kRegReserved198, // 198
|
|
kRegReserved199, // 199
|
|
kRegReserved200, // 200
|
|
kRegReserved201, // 201
|
|
kRegRP188InOut1Bits0_31_2, // 202
|
|
kRegRP188InOut1Bits32_63_2, // 203
|
|
kRegRP188InOut2Bits0_31_2, // 204
|
|
kRegRP188InOut2Bits32_63_2, // 205
|
|
kRegRP188InOut3Bits0_31_2, // 206
|
|
kRegRP188InOut3Bits32_63_2, // 207
|
|
kRegRP188InOut4Bits0_31_2, // 208
|
|
kRegRP188InOut4Bits32_63_2, // 209
|
|
kRegRP188InOut5Bits0_31_2, // 210
|
|
kRegRP188InOut5Bits32_63_2, // 211
|
|
kRegRP188InOut6Bits0_31_2, // 212
|
|
kRegRP188InOut6Bits32_63_2, // 213
|
|
kRegRP188InOut7Bits0_31_2, // 214
|
|
kRegRP188InOut7Bits32_63_2, // 215
|
|
kRegRP188InOut8Bits0_31_2, // 216
|
|
kRegRP188InOut8Bits32_63_2, // 217
|
|
kRegReserved218, // 218
|
|
kRegReserved219, // 219
|
|
kRegReserved220, // 220
|
|
kRegReserved221, // 221
|
|
kRegReserved222, // 222
|
|
kRegReserved223, // 223
|
|
kRegReserved224, // 224
|
|
kRegReserved225, // 225
|
|
kRegReserved226, // 226
|
|
kRegReserved227, // 227
|
|
kRegReserved228, // 228
|
|
kRegReserved229, // 229
|
|
kRegReserved230, // 230
|
|
kRegReserved231, // 231
|
|
kRegSDIInput3GStatus, // 232
|
|
kRegLTCStatusControl, // 233
|
|
kRegSDIOut1VPIDA, // 234
|
|
kRegSDIOut1VPIDB, // 235
|
|
kRegSDIOut2VPIDA, // 236
|
|
kRegSDIOut2VPIDB, // 237
|
|
kRegSDIIn2VPIDA, // 238
|
|
kRegSDIIn2VPIDB, // 239
|
|
kRegAud2Control, // 240
|
|
kRegAud2SourceSelect, // 241
|
|
kRegAud2OutputLastAddr, // 242
|
|
kRegAud2InputLastAddr, // 243
|
|
kRegRS4222Transmit, // 244
|
|
kRegRS4222Receive, // 245
|
|
kRegRS4222Control, // 246
|
|
kRegVidProc2Control, // 247
|
|
kRegMixer2Coefficient, // 248
|
|
kRegFlatMatte2Value, // 249
|
|
kRegXptSelectGroup9, // 250
|
|
kRegXptSelectGroup10, // 251
|
|
kRegLTC2EmbeddedBits0_31, // 252
|
|
kRegLTC2EmbeddedBits32_63, // 253
|
|
kRegLTC2AnalogBits0_31, // 254
|
|
kRegLTC2AnalogBits32_63, // 255
|
|
kRegSDITransmitControl, // 256
|
|
kRegCh3Control, // 257
|
|
kRegCh3OutputFrame, // 258
|
|
kRegCh3InputFrame, // 259
|
|
kRegCh4Control, // 260
|
|
kRegCh4OutputFrame, // 261
|
|
kRegCh4InputFrame, // 262
|
|
kRegXptSelectGroup13, // 263
|
|
kRegXptSelectGroup14, // 264
|
|
kRegStatus2, // 265
|
|
kRegVidIntControl2, // 266
|
|
kRegGlobalControl2, // 267
|
|
kRegRP188InOut3DBB, // 268
|
|
kRegRP188InOut3Bits0_31, // 269
|
|
kRegRP188InOut3Bits32_63, // 270
|
|
kRegSDIOut3VPIDA, // 271
|
|
kRegSDIOut3VPIDB, // 272
|
|
kRegRP188InOut4DBB, // 273
|
|
kRegRP188InOut4Bits0_31, // 274
|
|
kRegRP188InOut4Bits32_63, // 275
|
|
kRegSDIOut4VPIDA, // 276
|
|
kRegSDIOut4VPIDB, // 277
|
|
kRegAud3Control, // 278
|
|
kRegAud4Control, // 279
|
|
kRegAud3SourceSelect, // 280
|
|
kRegAud4SourceSelect, // 281
|
|
kRegAudDetect2, // 282
|
|
kRegAud3OutputLastAddr, // 283
|
|
kRegAud3InputLastAddr, // 284
|
|
kRegAud4OutputLastAddr, // 285
|
|
kRegAud4InputLastAddr, // 286
|
|
kRegSDIInput3GStatus2, // 287
|
|
kRegInputStatus2, // 288
|
|
kRegCh3PCIAccessFrame, // 289
|
|
kRegCh4PCIAccessFrame, // 290
|
|
|
|
kRegCS3Coefficients1_2, // 291
|
|
kRegCS3Coefficients3_4, // 292
|
|
kRegCS3Coefficients5_6, // 293
|
|
kRegCS3Coefficients7_8, // 294
|
|
kRegCS3Coefficients9_10, // 295
|
|
|
|
kRegCS4Coefficients1_2, // 296
|
|
kRegCS4Coefficients3_4, // 297
|
|
kRegCS4Coefficients5_6, // 298
|
|
kRegCS4Coefficients7_8, // 299
|
|
kRegCS4Coefficients9_10, // 300
|
|
|
|
kRegXptSelectGroup17, // 301
|
|
kRegXptSelectGroup15, // 302
|
|
kRegXptSelectGroup16, // 303
|
|
|
|
kRegAud3Delay, // 304
|
|
kRegAud4Delay, // 305
|
|
|
|
kRegSDIIn3VPIDA, // 306
|
|
kRegSDIIn3VPIDB, // 307
|
|
kRegSDIIn4VPIDA, // 308
|
|
kRegSDIIn4VPIDB, // 309
|
|
|
|
kRegSDIWatchdogControlStatus, // 310
|
|
kRegSDIWatchdogTimeout, // 311
|
|
kRegSDIWatchdogKick1, // 312
|
|
kRegSDIWatchdogKick2, // 313
|
|
kRegReserved314, // 314
|
|
kRegReserved315, // 315
|
|
|
|
kRegLTC3EmbeddedBits0_31, // 316
|
|
kRegLTC3EmbeddedBits32_63, // 317
|
|
|
|
kRegLTC4EmbeddedBits0_31, // 318
|
|
kRegLTC4EmbeddedBits32_63, // 319
|
|
|
|
kRegReserved320, // 320
|
|
kRegReserved321, // 321
|
|
kRegReserved322, // 322
|
|
kRegReserved323, // 323
|
|
kRegReserved324, // 324
|
|
kRegReserved325, // 325
|
|
kRegReserved326, // 326
|
|
kRegReserved327, // 327
|
|
kRegReserved328, // 328
|
|
|
|
kRegHDMITimeCode, // 329
|
|
|
|
//HDMI HDR Registers
|
|
kRegHDMIHDRGreenPrimary, // 330
|
|
kRegHDMIHDRBluePrimary, // 331
|
|
kRegHDMIHDRRedPrimary, // 332
|
|
kRegHDMIHDRWhitePoint, // 333
|
|
kRegHDMIHDRMasteringLuminence, // 334
|
|
kRegHDMIHDRLightLevel, // 335
|
|
kRegHDMIHDRControl, // 336
|
|
|
|
kRegSDIOut5Control, // 337
|
|
kRegSDIOut5VPIDA, // 338
|
|
kRegSDIOut5VPIDB, // 339
|
|
|
|
kRegRP188InOut5Bits0_31, // 340
|
|
kRegRP188InOut5Bits32_63, // 341
|
|
kRegRP188InOut5DBB, // 342
|
|
|
|
kReg3DLUTLoadControl, // 343
|
|
|
|
kRegLTC5EmbeddedBits0_31, // 344
|
|
kRegLTC5EmbeddedBits32_63, // 345
|
|
|
|
kRegDL5Control, // 346
|
|
|
|
kRegCS5Coefficients1_2, // 347
|
|
kRegCS5Coefficients3_4, // 348
|
|
kRegCS5Coefficients5_6, // 349
|
|
kRegCS5Coefficients7_8, // 350
|
|
kRegCS5Coefficients9_10, // 351
|
|
|
|
kRegXptSelectGroup18, // 352
|
|
|
|
kRegReserved353, // 353
|
|
|
|
kRegDC1, // 354
|
|
kRegDC2, // 355
|
|
kRegXptSelectGroup19, // 356
|
|
|
|
kRegXptSelectGroup20, // 357
|
|
kRegRasterizerControl, // 358
|
|
|
|
//HDMI V2 In Registers
|
|
kRegHDMIV2I2C1Control, // 359
|
|
kRegHDMIV2I2C1Data, // 360
|
|
kRegHDMIV2VideoSetup, // 361
|
|
kRegHDMIV2HSyncDurationAndBackPorch, // 362
|
|
kRegHDMIV2HActive, // 363
|
|
kRegHDMIV2VSyncDurationAndBackPorchField1, // 364
|
|
kRegHDMIV2VSyncDurationAndBackPorchField2, // 365
|
|
kRegHDMIV2VActiveField1, // 366
|
|
kRegHDMIV2VActiveField2, // 367
|
|
kRegHDMIV2VideoStatus, // 368
|
|
kRegHDMIV2HorizontalMeasurements, // 369
|
|
kRegHDMIV2HBlankingMeasurements, // 370
|
|
kRegHDMIV2HBlankingMeasurements1, // 371
|
|
kRegHDMIV2VerticalMeasurementsField0, // 372
|
|
kRegHDMIV2VerticalMeasurementsField1, // 373
|
|
kRegHDMIV2i2c2Control, // 374
|
|
kRegHDMIV2i2c2Data, // 375
|
|
|
|
kRegLUTV2Control, // 376
|
|
|
|
//Scott: New Dax/Multi-channel Registers
|
|
kRegGlobalControlCh2, // 377
|
|
kRegGlobalControlCh3, // 378
|
|
kRegGlobalControlCh4, // 379
|
|
kRegGlobalControlCh5, // 380
|
|
kRegGlobalControlCh6, // 381
|
|
kRegGlobalControlCh7, // 382
|
|
kRegGlobalControlCh8, // 383
|
|
|
|
kRegCh5Control, // 384
|
|
kRegCh5OutputFrame, // 385
|
|
kRegCh5InputFrame, // 386
|
|
kRegCh5PCIAccessFrame, // 387
|
|
|
|
kRegCh6Control, // 388
|
|
kRegCh6OutputFrame, // 389
|
|
kRegCh6InputFrame, // 390
|
|
kRegCh6PCIAccessFrame, // 391
|
|
|
|
kRegCh7Control, // 392
|
|
kRegCh7OutputFrame, // 393
|
|
kRegCh7InputFrame, // 394
|
|
kRegCh7PCIAccessFrame, // 395
|
|
|
|
kRegCh8Control, // 396
|
|
kRegCh8OutputFrame, // 397
|
|
kRegCh8InputFrame, // 398
|
|
kRegCh8PCIAccessFrame, // 399
|
|
|
|
kRegXptSelectGroup21, // 400
|
|
kRegXptSelectGroup22, // 401
|
|
kRegXptSelectGroup30, // 402
|
|
kRegXptSelectGroup23, // 403
|
|
kRegXptSelectGroup24, // 404
|
|
kRegXptSelectGroup25, // 405
|
|
kRegXptSelectGroup26, // 406
|
|
kRegXptSelectGroup27, // 407
|
|
kRegXptSelectGroup28, // 408
|
|
kRegXptSelectGroup29, // 409
|
|
|
|
kRegSDIIn5VPIDA, // 410
|
|
kRegSDIIn5VPIDB, // 411
|
|
|
|
kRegSDIIn6VPIDA, // 412
|
|
kRegSDIIn6VPIDB, // 413
|
|
kRegSDIOut6VPIDA, // 414
|
|
kRegSDIOut6VPIDB, // 415
|
|
kRegRP188InOut6Bits0_31, // 416
|
|
kRegRP188InOut6Bits32_63, // 417
|
|
kRegRP188InOut6DBB, // 418
|
|
kRegLTC6EmbeddedBits0_31, // 419
|
|
kRegLTC6EmbeddedBits32_63, // 420
|
|
|
|
kRegSDIIn7VPIDA, // 421
|
|
kRegSDIIn7VPIDB, // 422
|
|
kRegSDIOut7VPIDA, // 423
|
|
kRegSDIOut7VPIDB, // 424
|
|
kRegRP188InOut7Bits0_31, // 425
|
|
kRegRP188InOut7Bits32_63, // 426
|
|
kRegRP188InOut7DBB, // 427
|
|
kRegLTC7EmbeddedBits0_31, // 428
|
|
kRegLTC7EmbeddedBits32_63, // 429
|
|
|
|
kRegSDIIn8VPIDA, // 430
|
|
kRegSDIIn8VPIDB, // 431
|
|
kRegSDIOut8VPIDA, // 432
|
|
kRegSDIOut8VPIDB, // 433
|
|
kRegRP188InOut8Bits0_31, // 434
|
|
kRegRP188InOut8Bits32_63, // 435
|
|
kRegRP188InOut8DBB, // 436
|
|
kRegLTC8EmbeddedBits0_31, // 437
|
|
kRegLTC8EmbeddedBits32_63, // 438
|
|
|
|
kRegXptSelectGroup31, // 439
|
|
|
|
kRegAud5Control, // 440
|
|
kRegAud5SourceSelect, // 441
|
|
kRegAud5OutputLastAddr, // 442
|
|
kRegAud5InputLastAddr, // 443
|
|
|
|
kRegAud6Control, // 444
|
|
kRegAud6SourceSelect, // 445
|
|
kRegAud6OutputLastAddr, // 446
|
|
kRegAud6InputLastAddr, // 447
|
|
|
|
kRegAud7Control, // 448
|
|
kRegAud7SourceSelect, // 449
|
|
kRegAud7OutputLastAddr, // 450
|
|
kRegAud7InputLastAddr, // 451
|
|
|
|
kRegAud8Control, // 452
|
|
kRegAud8SourceSelect, // 453
|
|
kRegAud8OutputLastAddr, // 454
|
|
kRegAud8InputLastAddr, // 455
|
|
|
|
kRegAudioDetect5678, // 456
|
|
|
|
kRegSDI5678Input3GStatus, // 457
|
|
|
|
kRegInput56Status, // 458
|
|
kRegInput78Status, // 459
|
|
|
|
kRegCS6Coefficients1_2, // 460
|
|
kRegCS6Coefficients3_4, // 461
|
|
kRegCS6Coefficients5_6, // 462
|
|
kRegCS6Coefficients7_8, // 463
|
|
kRegCS6Coefficients9_10, // 464
|
|
|
|
kRegCS7Coefficients1_2, // 465
|
|
kRegCS7Coefficients3_4, // 466
|
|
kRegCS7Coefficients5_6, // 467
|
|
kRegCS7Coefficients7_8, // 468
|
|
kRegCS7Coefficients9_10, // 469
|
|
|
|
kRegCS8Coefficients1_2, // 470
|
|
kRegCS8Coefficients3_4, // 471
|
|
kRegCS8Coefficients5_6, // 472
|
|
kRegCS8Coefficients7_8, // 473
|
|
kRegCS8Coefficients9_10, // 474
|
|
|
|
kRegSDIOut6Control, // 475
|
|
kRegSDIOut7Control, // 476
|
|
kRegSDIOut8Control, // 477
|
|
|
|
kRegOutputTimingControlch2, // 478
|
|
kRegOutputTimingControlch3, // 479
|
|
kRegOutputTimingControlch4, // 480
|
|
kRegOutputTimingControlch5, // 481
|
|
kRegOutputTimingControlch6, // 482
|
|
kRegOutputTimingControlch7, // 483
|
|
kRegOutputTimingControlch8, // 484
|
|
|
|
kRegVidProc3Control, // 485
|
|
kRegMixer3Coefficient, // 486
|
|
kRegFlatMatte3Value, // 487
|
|
|
|
kRegVidProc4Control, // 488
|
|
kRegMixer4Coefficient, // 489
|
|
kRegFlatMatte4Value, // 490
|
|
|
|
kRegTRSErrorStatus, // 491
|
|
|
|
kRegAud5Delay, // 492
|
|
kRegAud6Delay, // 493
|
|
kRegAud7Delay, // 494
|
|
kRegAud8Delay, // 495
|
|
|
|
kRegPCMControl4321, // 496
|
|
kRegPCMControl8765, // 497
|
|
|
|
kRegCh1Control2MFrame, // 498
|
|
kRegCh2Control2MFrame, // 499
|
|
kRegCh3Control2MFrame, // 500
|
|
kRegCh4Control2MFrame, // 501
|
|
kRegCh5Control2MFrame, // 502
|
|
kRegCh6Control2MFrame, // 503
|
|
kRegCh7Control2MFrame, // 504
|
|
kRegCh8Control2MFrame, // 505
|
|
kRegXptSelectGroup32, // 506
|
|
kRegXptSelectGroup33, // 507
|
|
kRegXptSelectGroup34, // 508
|
|
kRegXptSelectGroup35, // 509
|
|
kRegReserved510, // 510
|
|
kRegReserved511, // 511
|
|
|
|
kRegNumRegisters
|
|
} NTV2RegisterNumber;
|
|
|
|
typedef NTV2RegisterNumber RegisterNum;
|
|
|
|
#define kRegCh1ColorCorrectioncontrol kRegCh1ColorCorrectionControl // CamelCase fixed in SDK 16.0
|
|
#define kRegCh2ColorCorrectioncontrol kRegCh2ColorCorrectionControl // CamelCase fixed in SDK 16.0
|
|
|
|
// Discontinuous block of registers used for monitoring the incoming SDI signals
|
|
typedef enum NTV2RXSDIStatusRegister
|
|
{
|
|
kRegRXSDI1Status = 2048, // 2048
|
|
kRegRXSDI1CRCErrorCount, // 2049
|
|
kRegRXSDI1FrameCountLow, // 2050
|
|
kRegRXSDI1FrameCountHigh, // 2051
|
|
kRegRXSDI1FrameRefCountLow, // 2052
|
|
kRegRXSDI1FrameRefCountHigh, // 2053
|
|
kRegRXSDI1Unused2054, // 2054
|
|
kRegRXSDI1Unused2055, // 2055
|
|
|
|
kRegRXSDI2Status, // 2056
|
|
kRegRXSDI2CRCErrorCount, // 2057
|
|
kRegRXSDI2FrameCountLow, // 2058
|
|
kRegRXSDI2FrameCountHigh, // 2059
|
|
kRegRXSDI2FrameRefCountLow, // 2060
|
|
kRegRXSDI2FrameRefCountHigh, // 2061
|
|
kRegRXSDI2Unused2062, // 2062
|
|
kRegRXSDI2Unused2063, // 2063
|
|
|
|
kRegRXSDI3Status, // 2064
|
|
kRegRXSDI3CRCErrorCount, // 2065
|
|
kRegRXSDI3FrameCountLow, // 2066
|
|
kRegRXSDI3FrameCountHigh, // 2067
|
|
kRegRXSDI3FrameRefCountLow, // 2068
|
|
kRegRXSDI3FrameRefCountHigh, // 2069
|
|
kRegRXSDI3Unused2070, // 2070
|
|
kRegRXSDI3Unused2071, // 2071
|
|
|
|
kRegRXSDI4Status, // 2072
|
|
kRegRXSDI4CRCErrorCount, // 2073
|
|
kRegRXSDI4FrameCountLow, // 2074
|
|
kRegRXSDI4FrameCountHigh, // 2075
|
|
kRegRXSDI4FrameRefCountLow, // 2076
|
|
kRegRXSDI4FrameRefCountHigh, // 2077
|
|
kRegRXSDI4Unused2078, // 2078
|
|
kRegRXSDI4Unused2079, // 2079
|
|
|
|
kRegRXSDI5Status, // 2080
|
|
kRegRXSDI5CRCErrorCount, // 2081
|
|
kRegRXSDI5FrameCountLow, // 2082
|
|
kRegRXSDI5FrameCountHigh, // 2083
|
|
kRegRXSDI5FrameRefCountLow, // 2084
|
|
kRegRXSDI5FrameRefCountHigh, // 2085
|
|
kRegRXSDI5Unused2086, // 2086
|
|
kRegRXSDI5Unused2087, // 2087
|
|
|
|
kRegRXSDI6Status, // 2088
|
|
kRegRXSDI6CRCErrorCount, // 2089
|
|
kRegRXSDI6FrameCountLow, // 2090
|
|
kRegRXSDI6FrameCountHigh, // 2091
|
|
kRegRXSDI6FrameRefCountLow, // 2092
|
|
kRegRXSDI6FrameRefCountHigh, // 2093
|
|
kRegRXSDI6Unused2094, // 2094
|
|
kRegRXSDI6Unused2095, // 2095
|
|
|
|
kRegRXSDI7Status, // 2096
|
|
kRegRXSDI7CRCErrorCount, // 2097
|
|
kRegRXSDI7FrameCountLow, // 2098
|
|
kRegRXSDI7FrameCountHigh, // 2099
|
|
kRegRXSDI7FrameRefCountLow, // 2100
|
|
kRegRXSDI7FrameRefCountHigh, // 2101
|
|
kRegRXSDI7Unused2102, // 2102
|
|
kRegRXSDI7Unused2103, // 2103
|
|
|
|
kRegRXSDI8Status, // 2104
|
|
kRegRXSDI8CRCErrorCount, // 2105
|
|
kRegRXSDI8FrameCountLow, // 2106
|
|
kRegRXSDI8FrameCountHigh, // 2107
|
|
kRegRXSDI8FrameRefCountLow, // 2108
|
|
kRegRXSDI8FrameRefCountHigh, // 2109
|
|
kRegRXSDI8Unused2110, // 2110
|
|
kRegRXSDI8Unused2111, // 2111
|
|
|
|
kRegRXSDIFreeRunningClockLow, // 2112
|
|
kRegRXSDIFreeRunningClockHigh, // 2113
|
|
|
|
kRegNumRXSDIRegisters = 2113 - 2048 + 1
|
|
} NTV2RXSDIStatusRegisters;
|
|
|
|
typedef enum
|
|
{
|
|
kReg1DLUTLoadControl1 = 2200, //2200
|
|
kReg1DLUTLoadControl2, //2201
|
|
kReg1DLUTLoadControl3, //2202
|
|
kReg1DLUTLoadControl4, //2203
|
|
kReg1DLUTLoadControl5, //2204
|
|
kReg1DLUTLoadControl6, //2205
|
|
kReg1DLUTLoadControl7, //2206
|
|
kReg1DLUTLoadControl8 //2207
|
|
}NTV2LUTControlRegisters;
|
|
|
|
typedef enum
|
|
{
|
|
kRegAudioMixerInputSelects = 2304 // 2304
|
|
,kRegAudioMixerMainGain // 2305
|
|
,kRegAudioMixerAux1GainCh1 // 2306
|
|
,kRegAudioMixerAux2GainCh1 // 2307
|
|
,kRegAudioMixerChannelSelect // 2308
|
|
,kRegAudioMixerMutes // 2309
|
|
,kRegAudioMixerAux1GainCh2 // 2310
|
|
,kRegAudioMixerAux2GainCh2 // 2311
|
|
,kRegAudioMixerOutGain // 2312
|
|
,kRegAudioMixerOutLGain = kRegAudioMixerOutGain
|
|
,kRegAudioMixerOutRGain // 2313
|
|
,kRegAudioMixerAux1InputLevels = 2318 // 2318
|
|
,kRegAudioMixerAux2InputLevels // 2319
|
|
,kRegAudioMixerMainInputLevelsPair0 // 2320
|
|
,kRegAudioMixerMainInputLevelsPair1 // 2321
|
|
,kRegAudioMixerMainInputLevelsPair2 // 2322
|
|
,kRegAudioMixerMainInputLevelsPair3 // 2323
|
|
,kRegAudioMixerMainInputLevelsPair4 // 2324
|
|
,kRegAudioMixerMainInputLevelsPair5 // 2325
|
|
,kRegAudioMixerMainInputLevelsPair6 // 2326
|
|
,kRegAudioMixerMainInputLevelsPair7 // 2327
|
|
,kRegAudioMixerMixedChannelOutputLevels // 2328
|
|
,kRegAudioMixerMainOutputLevelsPair0 = kRegAudioMixerMixedChannelOutputLevels // 2328
|
|
,kRegAudioMixerMainOutputLevelsPair1 // 2329
|
|
,kRegAudioMixerMainOutputLevelsPair2 // 2330
|
|
,kRegAudioMixerMainOutputLevelsPair3 // 2331
|
|
,kRegAudioMixerMainOutputLevelsPair4 // 2332
|
|
,kRegAudioMixerMainOutputLevelsPair5 // 2333
|
|
,kRegAudioMixerMainOutputLevelsPair6 // 2334
|
|
,kRegAudioMixerMainOutputLevelsPair7 // 2335
|
|
} NTV2AudioMixerRegisters;
|
|
|
|
// Discontinuous block of registers used for detecting non-PCM embedded audio.
|
|
typedef enum _NTV2NonPCMAudioDetectRegisters
|
|
{
|
|
kRegFirstNonPCMAudioDetectRegister = 2130,
|
|
kRegNonPCMAudioDetectEngine1 = kRegFirstNonPCMAudioDetectRegister, // 2130
|
|
kRegNonPCMAudioDetectEngine2 = kRegFirstNonPCMAudioDetectRegister + 2, // 2132
|
|
kRegNonPCMAudioDetectEngine3 = kRegFirstNonPCMAudioDetectRegister + 4, // 2134
|
|
kRegNonPCMAudioDetectEngine4 = kRegFirstNonPCMAudioDetectRegister + 6, // 2136
|
|
kRegNonPCMAudioDetectEngine5 = kRegFirstNonPCMAudioDetectRegister + 8, // 2138
|
|
kRegNonPCMAudioDetectEngine6 = kRegFirstNonPCMAudioDetectRegister + 10, // 2140
|
|
kRegNonPCMAudioDetectEngine7 = kRegFirstNonPCMAudioDetectRegister + 12, // 2142
|
|
kRegNonPCMAudioDetectEngine8 = kRegFirstNonPCMAudioDetectRegister + 14, // 2144
|
|
kRegLastNonPCMAudioDetectRegister = kRegNonPCMAudioDetectEngine8
|
|
} NTV2NonPCMAudioDetectRegisters;
|
|
|
|
// New in SDK 15.6:
|
|
// Some boards have new firmware that implements a "valid route" bitmap ROM accessed by a contiguous block of registers:
|
|
typedef enum _NTV2XptValidROMRegisters
|
|
{
|
|
kRegFirstValidXptROMRegister = 3072, // Starts at reg 3072
|
|
kRegNumValidXptROMRegisters = 1024, // It's 4096 bytes long
|
|
kRegLastValidXptROMRegister = kRegFirstValidXptROMRegister + kRegNumValidXptROMRegisters - 1,
|
|
kRegInvalidValidXptROMRegister = kRegFirstValidXptROMRegister + kRegNumValidXptROMRegisters
|
|
} NTV2XptValidROMRegisters;
|
|
|
|
// Discontinuous block of registers used to control the enhanced color space converters
|
|
typedef enum
|
|
{
|
|
kRegEnhancedCSC1Mode = 5120, // 5120
|
|
kRegEnhancedCSC1InOffset0_1, // 5121
|
|
kRegEnhancedCSC1InOffset2, // 5122
|
|
kRegEnhancedCSC1CoeffA0, // 5123
|
|
kRegEnhancedCSC1CoeffA1, // 5124
|
|
kRegEnhancedCSC1CoeffA2, // 5125
|
|
kRegEnhancedCSC1CoeffB0, // 5126
|
|
kRegEnhancedCSC1CoeffB1, // 5127
|
|
kRegEnhancedCSC1CoeffB2, // 5128
|
|
kRegEnhancedCSC1CoeffC0, // 5129
|
|
kRegEnhancedCSC1CoeffC1, // 5130
|
|
kRegEnhancedCSC1CoeffC2, // 5131
|
|
kRegEnhancedCSC1OutOffsetA_B, // 5132
|
|
kRegEnhancedCSC1OutOffsetC, // 5133
|
|
kRegEnhancedCSC1KeyMode, // 5134
|
|
kRegEnhancedCSC1KeyClipOffset, // 5135
|
|
kRegEnhancedCSC1KeyGain, // 5136
|
|
|
|
kRegNumEnhancedCSCRegisters = 5136 - 5120 + 1,
|
|
|
|
kRegEnhancedCSC2Mode = 5184, // 5184
|
|
kRegEnhancedCSC2InOffset0_1, // 5185
|
|
kRegEnhancedCSC2InOffset2, // 5186
|
|
kRegEnhancedCSC2CoeffA0, // 5187
|
|
kRegEnhancedCSC2CoeffA1, // 5188
|
|
kRegEnhancedCSC2CoeffA2, // 5189
|
|
kRegEnhancedCSC2CoeffB0, // 5190
|
|
kRegEnhancedCSC2CoeffB1, // 5191
|
|
kRegEnhancedCSC2CoeffB2, // 5192
|
|
kRegEnhancedCSC2CoeffC0, // 5193
|
|
kRegEnhancedCSC2CoeffC1, // 5194
|
|
kRegEnhancedCSC2CoeffC2, // 5195
|
|
kRegEnhancedCSC2OutOffsetA_B, // 5196
|
|
kRegEnhancedCSC2OutOffsetC, // 5197
|
|
kRegEnhancedCSC2KeyMode, // 5198
|
|
kRegEnhancedCSC2KeyClipOffset, // 5199
|
|
kRegEnhancedCSC2KeyGain, // 5200
|
|
|
|
kRegEnhancedCSC3Mode = 5248, // 5248
|
|
kRegEnhancedCSC3InOffset0_1, // 5249
|
|
kRegEnhancedCSC3InOffset2, // 5250
|
|
kRegEnhancedCSC3CoeffA0, // 5251
|
|
kRegEnhancedCSC3CoeffA1, // 5252
|
|
kRegEnhancedCSC3CoeffA2, // 5253
|
|
kRegEnhancedCSC3CoeffB0, // 5254
|
|
kRegEnhancedCSC3CoeffB1, // 5255
|
|
kRegEnhancedCSC3CoeffB2, // 5256
|
|
kRegEnhancedCSC3CoeffC0, // 5257
|
|
kRegEnhancedCSC3CoeffC1, // 5258
|
|
kRegEnhancedCSC3CoeffC2, // 5259
|
|
kRegEnhancedCSC3OutOffsetA_B, // 5260
|
|
kRegEnhancedCSC3OutOffsetC, // 5261
|
|
kRegEnhancedCSC3KeyMode, // 5262
|
|
kRegEnhancedCSC3KeyClipOffset, // 5263
|
|
kRegEnhancedCSC3KeyGain, // 5264
|
|
|
|
kRegEnhancedCSC4Mode = 5312, // 5312
|
|
kRegEnhancedCSC4InOffset0_1, // 5313
|
|
kRegEnhancedCSC4InOffset2, // 5314
|
|
kRegEnhancedCSC4CoeffA0, // 5315
|
|
kRegEnhancedCSC4CoeffA1, // 5316
|
|
kRegEnhancedCSC4CoeffA2, // 5317
|
|
kRegEnhancedCSC4CoeffB0, // 5318
|
|
kRegEnhancedCSC4CoeffB1, // 5319
|
|
kRegEnhancedCSC4CoeffB2, // 5320
|
|
kRegEnhancedCSC4CoeffC0, // 5321
|
|
kRegEnhancedCSC4CoeffC1, // 5322
|
|
kRegEnhancedCSC4CoeffC2, // 5323
|
|
kRegEnhancedCSC4OutOffsetA_B, // 5324
|
|
kRegEnhancedCSC4OutOffsetC, // 5325
|
|
kRegEnhancedCSC4KeyMode, // 5326
|
|
kRegEnhancedCSC4KeyClipOffset, // 5327
|
|
kRegEnhancedCSC4KeyGain, // 5328
|
|
|
|
kRegEnhancedCSC5Mode = 5376, // 5376
|
|
kRegEnhancedCSC5InOffset0_1, // 5377
|
|
kRegEnhancedCSC5InOffset2, // 5378
|
|
kRegEnhancedCSC5CoeffA0, // 5379
|
|
kRegEnhancedCSC5CoeffA1, // 5380
|
|
kRegEnhancedCSC5CoeffA2, // 5381
|
|
kRegEnhancedCSC5CoeffB0, // 5382
|
|
kRegEnhancedCSC5CoeffB1, // 5383
|
|
kRegEnhancedCSC5CoeffB2, // 5384
|
|
kRegEnhancedCSC5CoeffC0, // 5385
|
|
kRegEnhancedCSC5CoeffC1, // 5386
|
|
kRegEnhancedCSC5CoeffC2, // 5387
|
|
kRegEnhancedCSC5OutOffsetA_B, // 5388
|
|
kRegEnhancedCSC5OutOffsetC, // 5389
|
|
kRegEnhancedCSC5KeyMode, // 5390
|
|
kRegEnhancedCSC5KeyClipOffset, // 5391
|
|
kRegEnhancedCSC5KeyGain, // 5392
|
|
|
|
kRegEnhancedCSC6Mode = 5440, // 5440 or fight
|
|
kRegEnhancedCSC6InOffset0_1, // 5441
|
|
kRegEnhancedCSC6InOffset2, // 5442
|
|
kRegEnhancedCSC6CoeffA0, // 5443
|
|
kRegEnhancedCSC6CoeffA1, // 5444
|
|
kRegEnhancedCSC6CoeffA2, // 5445
|
|
kRegEnhancedCSC6CoeffB0, // 5446
|
|
kRegEnhancedCSC6CoeffB1, // 5447
|
|
kRegEnhancedCSC6CoeffB2, // 5448
|
|
kRegEnhancedCSC6CoeffC0, // 5449
|
|
kRegEnhancedCSC6CoeffC1, // 5450
|
|
kRegEnhancedCSC6CoeffC2, // 5451
|
|
kRegEnhancedCSC6OutOffsetA_B, // 5452
|
|
kRegEnhancedCSC6OutOffsetC, // 5453
|
|
kRegEnhancedCSC6KeyMode, // 5454
|
|
kRegEnhancedCSC6KeyClipOffset, // 5455
|
|
kRegEnhancedCSC6KeyGain, // 5456
|
|
|
|
kRegEnhancedCSC7Mode = 5504, // 5504
|
|
kRegEnhancedCSC7InOffset0_1, // 5505
|
|
kRegEnhancedCSC7InOffset2, // 5506
|
|
kRegEnhancedCSC7CoeffA0, // 5507
|
|
kRegEnhancedCSC7CoeffA1, // 5508
|
|
kRegEnhancedCSC7CoeffA2, // 5509
|
|
kRegEnhancedCSC7CoeffB0, // 5510
|
|
kRegEnhancedCSC7CoeffB1, // 5511
|
|
kRegEnhancedCSC7CoeffB2, // 5512
|
|
kRegEnhancedCSC7CoeffC0, // 5513
|
|
kRegEnhancedCSC7CoeffC1, // 5514
|
|
kRegEnhancedCSC7CoeffC2, // 5515
|
|
kRegEnhancedCSC7OutOffsetA_B, // 5516
|
|
kRegEnhancedCSC7OutOffsetC, // 5517
|
|
kRegEnhancedCSC7KeyMode, // 5518
|
|
kRegEnhancedCSC7KeyClipOffset, // 5519
|
|
kRegEnhancedCSC7KeyGain, // 5520
|
|
|
|
kRegEnhancedCSC8Mode = 5568, // 5568
|
|
kRegEnhancedCSC8InOffset0_1, // 5569
|
|
kRegEnhancedCSC8InOffset2, // 5570
|
|
kRegEnhancedCSC8CoeffA0, // 5571
|
|
kRegEnhancedCSC8CoeffA1, // 5572
|
|
kRegEnhancedCSC8CoeffA2, // 5573
|
|
kRegEnhancedCSC8CoeffB0, // 5574
|
|
kRegEnhancedCSC8CoeffB1, // 5575
|
|
kRegEnhancedCSC8CoeffB2, // 5576
|
|
kRegEnhancedCSC8CoeffC0, // 5577
|
|
kRegEnhancedCSC8CoeffC1, // 5578
|
|
kRegEnhancedCSC8CoeffC2, // 5579
|
|
kRegEnhancedCSC8OutOffsetA_B, // 5580
|
|
kRegEnhancedCSC8OutOffsetC, // 5581
|
|
kRegEnhancedCSC8KeyMode, // 5582
|
|
kRegEnhancedCSC8KeyClipOffset, // 5583
|
|
kRegEnhancedCSC8KeyGain // 5584
|
|
|
|
} NTV2EnhancedCSCRegisters;
|
|
|
|
typedef enum _NTV2OERegisters
|
|
{
|
|
kRegOEData1 = 0x1700,
|
|
kRegOEData256 = 0x173F
|
|
} NTV2OERegisters;
|
|
|
|
typedef enum
|
|
{
|
|
kRegHDMIOutputAudioConfig = 0x1d4B
|
|
}NTV2HDMIOutAudioRegisters;
|
|
|
|
typedef enum _NTV2HDMIRegisters
|
|
{
|
|
kRegHDMIOutputAuxData = 0x0a00,
|
|
kRegHDMIOutputConfig1 = 0x1d14,
|
|
kRegHDMIInputStatus1 = 0x1d15,
|
|
kRegHDMIControl1 = 0x1d16,
|
|
kRegHDMIOutputConfig2 = 0x2514,
|
|
kRegHDMIInputStatus2 = 0x2515,
|
|
kRegHDMIControl2 = 0x2516,
|
|
kRegHDMIOutputConfig3 = 0x2c12,
|
|
kRegHDMIInputStatus3 = 0x2c13,
|
|
kRegHDMIControl3 = 0x2c14,
|
|
kRegHDMIOutputConfig4 = 0x3012,
|
|
kRegHDMIInputStatus4 = 0x3013,
|
|
kRegHDMIControl4 = 0x3014
|
|
} NTV2HDMIRegisters;
|
|
|
|
typedef enum _NTV2MultiRasterRegisters
|
|
{
|
|
kRegMRQ1Control = 0x1740,
|
|
kRegMRQ2Control,
|
|
kRegMRQ3Control,
|
|
kRegMRQ4Control,
|
|
kRegMROutControl,
|
|
kRegMRSupport = 0x1747
|
|
} NTV2MultiRasterRegisters;
|
|
|
|
typedef enum
|
|
{
|
|
kRegRotaryEncoder = 0x940
|
|
} NTV2RotaryEncoderRegister;
|
|
|
|
#define NTV2_HDMIAuxMaxFrames 8
|
|
#define NTV2_HDMIAuxDataSize 32
|
|
|
|
#if !defined (NTV2_DEPRECATE)
|
|
#define KRegDMA1HostAddr kRegDMA1HostAddr ///< @deprecated Use kRegDMA1HostAddr instead.
|
|
#define KRegDMA2HostAddr kRegDMA2HostAddr ///< @deprecated Use kRegDMA2HostAddr instead.
|
|
#define KRegDMA3HostAddr kRegDMA3HostAddr ///< @deprecated Use kRegDMA3HostAddr instead.
|
|
#define KRegDMA4HostAddr kRegDMA4HostAddr ///< @deprecated Use kRegDMA4HostAddr instead.
|
|
#define kRegPanControl kRegReserved15 ///< @deprecated Do not use (not supported).
|
|
#define kRegReserved2 kRegReserved16 ///< @deprecated Do not use.
|
|
#define kRegVidProcControl kRegVidProc1Control ///< @deprecated Use kRegVidProc1Control instead.
|
|
#define kRegMixerCoefficient kRegMixer1Coefficient ///< @deprecated Use kRegMixer1Coefficient instead.
|
|
#define kRegAudDetect kRegAud1Detect ///< @deprecated Use kRegAud1Detect instead.
|
|
#define kRegAudControl kRegAud1Control ///< @deprecated Use kRegAud1Control instead.
|
|
#define kRegAudSourceSelect kRegAud1SourceSelect ///< @deprecated Use kRegAud1SourceSelect instead.
|
|
#define kRegAudOutputLastAddr kRegAud1OutputLastAddr ///< @deprecated Use kRegAud1OutputLastAddr instead.
|
|
#define kRegAudInputLastAddr kRegAud1InputLastAddr ///< @deprecated Use kRegAud1InputLastAddr instead.
|
|
#define kRegAudCounter kRegAud1Counter ///< @deprecated Use kRegAud1Counter instead.
|
|
#define kRegFlatMattleValue kRegFlatMatteValue ///< @deprecated Use kRegFlatMatteValue instead.
|
|
#define kRegFlatMattle2Value kRegFlatMatte2Value ///< @deprecated Use kRegFlatMatte2Value instead.
|
|
|
|
#define kK2RegAnalogOutControl kRegAnalogOutControl ///< @deprecated Use kRegAnalogOutControl instead.
|
|
#define kK2RegSDIOut1Control kRegSDIOut1Control ///< @deprecated Use kRegSDIOut1Control instead.
|
|
#define kK2RegSDIOut2Control kRegSDIOut2Control ///< @deprecated Use kRegSDIOut2Control instead.
|
|
#define kK2RegConversionControl kRegConversionControl ///< @deprecated Use kRegConversionControl instead.
|
|
#define kK2RegFrameSync1Control kRegFrameSync1Control ///< @deprecated Use kRegFrameSync1Control instead.
|
|
#define kK2RegFrameSync2Control kRegFrameSync2Control ///< @deprecated Use kRegFrameSync2Control instead.
|
|
#define kK2RegXptSelectGroup1 kRegXptSelectGroup1 ///< @deprecated Use kRegXptSelectGroup1 instead.
|
|
#define kK2RegXptSelectGroup2 kRegXptSelectGroup2 ///< @deprecated Use kRegXptSelectGroup2 instead.
|
|
#define kK2RegXptSelectGroup3 kRegXptSelectGroup3 ///< @deprecated Use kRegXptSelectGroup3 instead.
|
|
#define kK2RegXptSelectGroup4 kRegXptSelectGroup4 ///< @deprecated Use kRegXptSelectGroup4 instead.
|
|
#define kK2RegXptSelectGroup5 kRegXptSelectGroup5 ///< @deprecated Use kRegXptSelectGroup5 instead.
|
|
#define kK2RegXptSelectGroup6 kRegXptSelectGroup6 ///< @deprecated Use kRegXptSelectGroup6 instead.
|
|
#define kK2RegCSCoefficients1_2 kRegCSCoefficients1_2 ///< @deprecated Use kRegCSCoefficients1_2 instead.
|
|
#define kK2RegCSCoefficients3_4 kRegCSCoefficients3_4 ///< @deprecated Use kRegCSCoefficients3_4 instead.
|
|
#define kK2RegCSCoefficients5_6 kRegCSCoefficients5_6 ///< @deprecated Use kRegCSCoefficients5_6 instead.
|
|
#define kK2RegCSCoefficients7_8 kRegCSCoefficients7_8 ///< @deprecated Use kRegCSCoefficients7_8 instead.
|
|
#define kK2RegCSCoefficients9_10 kRegCSCoefficients9_10 ///< @deprecated Use kRegCSCoefficients9_10 instead.
|
|
#define kK2RegCS2Coefficients1_2 kRegCS2Coefficients1_2 ///< @deprecated Use kRegCS2Coefficients1_2 instead.
|
|
#define kK2RegCS2Coefficients3_4 kRegCS2Coefficients3_4 ///< @deprecated Use kRegCS2Coefficients3_4 instead.
|
|
#define kK2RegCS2Coefficients5_6 kRegCS2Coefficients5_6 ///< @deprecated Use kRegCS2Coefficients5_6 instead.
|
|
#define kK2RegCS2Coefficients7_8 kRegCS2Coefficients7_8 ///< @deprecated Use kRegCS2Coefficients7_8 instead.
|
|
#define kK2RegCS2Coefficients9_10 kRegCS2Coefficients9_10 ///< @deprecated Use kRegCS2Coefficients9_10 instead.
|
|
#define kK2RegXptSelectGroup7 kRegXptSelectGroup7 ///< @deprecated Use kRegXptSelectGroup7 instead.
|
|
#define kK2RegXptSelectGroup8 kRegXptSelectGroup8 ///< @deprecated Use kRegXptSelectGroup8 instead.
|
|
#define kK2RegSDIOut3Control kRegSDIOut3Control ///< @deprecated Use kRegSDIOut3Control instead.
|
|
#define kK2RegSDIOut4Control kRegSDIOut4Control ///< @deprecated Use kRegSDIOut4Control instead.
|
|
#define kK2RegXptSelectGroup11 kRegXptSelectGroup11 ///< @deprecated Use kRegXptSelectGroup11 instead.
|
|
#define kK2RegXptSelectGroup12 kRegXptSelectGroup12 ///< @deprecated Use kRegXptSelectGroup12 instead.
|
|
#define kK2RegXptSelectGroup9 kRegXptSelectGroup9 ///< @deprecated Use kRegXptSelectGroup9 instead.
|
|
#define kK2RegXptSelectGroup10 kRegXptSelectGroup10 ///< @deprecated Use kRegXptSelectGroup10 instead.
|
|
#define kK2RegXptSelectGroup13 kRegXptSelectGroup13 ///< @deprecated Use kRegXptSelectGroup13 instead.
|
|
#define kK2RegXptSelectGroup14 kRegXptSelectGroup14 ///< @deprecated Use kRegXptSelectGroup14 instead.
|
|
#define kK2RegCS3Coefficients1_2 kRegCS3Coefficients1_2 ///< @deprecated Use kRegCS3Coefficients1_2 instead.
|
|
#define kK2RegCS3Coefficients3_4 kRegCS3Coefficients3_4 ///< @deprecated Use kRegCS3Coefficients3_4 instead.
|
|
#define kK2RegCS3Coefficients5_6 kRegCS3Coefficients5_6 ///< @deprecated Use kRegCS3Coefficients5_6 instead.
|
|
#define kK2RegCS3Coefficients7_8 kRegCS3Coefficients7_8 ///< @deprecated Use kRegCS3Coefficients7_8 instead.
|
|
#define kK2RegCS3Coefficients9_10 kRegCS3Coefficients9_10 ///< @deprecated Use kRegCS3Coefficients9_10 instead.
|
|
#define kK2RegCS4Coefficients1_2 kRegCS4Coefficients1_2 ///< @deprecated Use kRegCS4Coefficients1_2 instead.
|
|
#define kK2RegCS4Coefficients3_4 kRegCS4Coefficients3_4 ///< @deprecated Use kRegCS4Coefficients3_4 instead.
|
|
#define kK2RegCS4Coefficients5_6 kRegCS4Coefficients5_6 ///< @deprecated Use kRegCS4Coefficients5_6 instead.
|
|
#define kK2RegCS4Coefficients7_8 kRegCS4Coefficients7_8 ///< @deprecated Use kRegCS4Coefficients7_8 instead.
|
|
#define kK2RegCS4Coefficients9_10 kRegCS4Coefficients9_10 ///< @deprecated Use kRegCS4Coefficients9_10 instead.
|
|
#define kK2RegXptSelectGroup17 kRegXptSelectGroup17 ///< @deprecated Use kRegXptSelectGroup17 instead.
|
|
#define kK2RegXptSelectGroup15 kRegXptSelectGroup15 ///< @deprecated Use kRegXptSelectGroup15 instead.
|
|
#define kK2RegXptSelectGroup16 kRegXptSelectGroup16 ///< @deprecated Use kRegXptSelectGroup16 instead.
|
|
#define kK2RegSDIOut5Control kRegSDIOut5Control ///< @deprecated Use kRegSDIOut5Control instead.
|
|
#define kK2RegCS5Coefficients1_2 kRegCS5Coefficients1_2 ///< @deprecated Use kRegCS5Coefficients1_2 instead.
|
|
#define kK2RegCS5Coefficients3_4 kRegCS5Coefficients3_4 ///< @deprecated Use kRegCS5Coefficients3_4 instead.
|
|
#define kK2RegCS5Coefficients5_6 kRegCS5Coefficients5_6 ///< @deprecated Use kRegCS5Coefficients5_6 instead.
|
|
#define kK2RegCS5Coefficients7_8 kRegCS5Coefficients7_8 ///< @deprecated Use kRegCS5Coefficients7_8 instead.
|
|
#define kK2RegCS5Coefficients9_10 kRegCS5Coefficients9_10 ///< @deprecated Use kRegCS5Coefficients9_10 instead.
|
|
#define kK2RegXptSelectGroup18 kRegXptSelectGroup18 ///< @deprecated Use kRegXptSelectGroup18 instead.
|
|
#define kK2RegXptSelectGroup19 kRegXptSelectGroup19 ///< @deprecated Use kRegXptSelectGroup19 instead.
|
|
#define kK2RegXptSelectGroup20 kRegXptSelectGroup20 ///< @deprecated Use kRegXptSelectGroup20 instead.
|
|
#define kK2RegCS6Coefficients1_2 kRegCS6Coefficients1_2 ///< @deprecated Use kRegCS6Coefficients1_2 instead.
|
|
#define kK2RegCS6Coefficients3_4 kRegCS6Coefficients3_4 ///< @deprecated Use kRegCS6Coefficients3_4 instead.
|
|
#define kK2RegCS6Coefficients5_6 kRegCS6Coefficients5_6 ///< @deprecated Use kRegCS6Coefficients5_6 instead.
|
|
#define kK2RegCS6Coefficients7_8 kRegCS6Coefficients7_8 ///< @deprecated Use kRegCS6Coefficients7_8 instead.
|
|
#define kK2RegCS6Coefficients9_10 kRegCS6Coefficients9_10 ///< @deprecated Use kRegCS6Coefficients9_10 instead.
|
|
#define kK2RegCS7Coefficients1_2 kRegCS7Coefficients1_2 ///< @deprecated Use kRegCS7Coefficients1_2 instead.
|
|
#define kK2RegCS7Coefficients3_4 kRegCS7Coefficients3_4 ///< @deprecated Use kRegCS7Coefficients3_4 instead.
|
|
#define kK2RegCS7Coefficients5_6 kRegCS7Coefficients5_6 ///< @deprecated Use kRegCS7Coefficients5_6 instead.
|
|
#define kK2RegCS7Coefficients7_8 kRegCS7Coefficients7_8 ///< @deprecated Use kRegCS7Coefficients7_8 instead.
|
|
#define kK2RegCS7Coefficients9_10 kRegCS7Coefficients9_10 ///< @deprecated Use kRegCS7Coefficients9_10 instead.
|
|
#define kK2RegCS8Coefficients1_2 kRegCS8Coefficients1_2 ///< @deprecated Use kRegCS8Coefficients1_2 instead.
|
|
#define kK2RegCS8Coefficients3_4 kRegCS8Coefficients3_4 ///< @deprecated Use kRegCS8Coefficients3_4 instead.
|
|
#define kK2RegCS8Coefficients5_6 kRegCS8Coefficients5_6 ///< @deprecated Use kRegCS8Coefficients5_6 instead.
|
|
#define kK2RegCS8Coefficients7_8 kRegCS8Coefficients7_8 ///< @deprecated Use kRegCS8Coefficients7_8 instead.
|
|
#define kK2RegCS8Coefficients9_10 kRegCS8Coefficients9_10 ///< @deprecated Use kRegCS8Coefficients9_10 instead.
|
|
#define kK2RegSDIOut6Control kRegSDIOut6Control ///< @deprecated Use kRegSDIOut6Control instead.
|
|
#define kK2RegSDIOut7Control kRegSDIOut7Control ///< @deprecated Use kRegSDIOut7Control instead.
|
|
#define kK2RegSDIOut8Control kRegSDIOut8Control ///< @deprecated Use kRegSDIOut8Control instead.
|
|
|
|
|
|
// Special Registers for the XENAX
|
|
#define XENAX_REG_START 256
|
|
#define XENAX_NUM_REGS (119+36+41)
|
|
#define NUM_HW_REGS (XENAX_REG_START + XENAX_NUM_REGS)
|
|
|
|
// Registers unique to a particular device with their own address space
|
|
// These are 16-bit registers
|
|
#define BORG_FUSION_REG_START 8000
|
|
|
|
typedef enum
|
|
{
|
|
kRegBorgFusionBootFPGAVerBoardID = BORG_FUSION_REG_START, // 0
|
|
kRegBorgFusionFPGAConfigCtrl, // 1
|
|
kRegBorgFusionPanelPushButtonDebounced, // 2
|
|
kRegBorgFusionPanelPushButtonChanges, // 3
|
|
kRegBorgFusionLEDPWMThreshholds, // 4
|
|
kRegBorgFusionPowerCtrl, // 5
|
|
kRegBorgFusionIRQ3nIntCtrl, // 6
|
|
kRegBorgFusionIRQ3nIntSrc, // 7
|
|
kRegBorgFusionDisplayCtrlStatus, // 8
|
|
kRegBorgFusionDisplayWriteData, // 9
|
|
kRegBorgFusionAnalogFlags, // 10
|
|
kRegBorgFusionReserved11, // 11
|
|
kRegBonesActelCFSlots = kRegBorgFusionReserved11, // Compact Flash S1 & S2 status
|
|
kRegBorgFusionReserved12, // 12
|
|
kRegBonesActelCFSlotsChanges = kRegBorgFusionReserved12, // Compact Flash Slot Changes Present
|
|
kRegBorgFusionReserved13, // 13
|
|
kRegBorgFusionReserved14, // 14
|
|
kRegBorgFusionReserved15, // 15
|
|
kRegBorgFusionTempSensor1, // 16
|
|
kRegBorgFusionTempSensor2, // 17
|
|
kRegBorgFusion5_0vPowerRail, // 18: +5.0 v power rail, 8mV res
|
|
kRegBorgFusion2_5vPowerRail, // 19: +2.5v power rail, 4mV res
|
|
kRegBorgFusion1_95vPowerRail, // 20: +1.95v power rail, 4mV res
|
|
kRegBorgFusion1_8vPowerRail, // 21: +1.8v power rail, 2mV res
|
|
kRegBorgFusion1_5vPowerRail, // 22: +1.5v power rail, 2mV res
|
|
kRegBorgFusion1_0vPowerRail, // 23: +1.0v power rail, 2mV res
|
|
kRegBorgFusion12vPowerRail, // 24: +12v input power, 8mV res
|
|
kRegBorgFusion3_3vPowerRail, // 25: +3.3v power rail, 4mV res
|
|
|
|
kRegBorgFusionProdIdLo = BORG_FUSION_REG_START + 50,// 50, lo 16b of kRegBoardID data
|
|
kRegBorgFusionProdIdHi, // 51, hi 16b of kRegBoardID data
|
|
kRegBorgFusionNumRegistersDummy,
|
|
kRegBorgFusionNumRegisters = kRegBorgFusionNumRegistersDummy - BORG_FUSION_REG_START + 1
|
|
} BorgFusionRegisterNum;
|
|
|
|
#define DNX_REG_START 8100
|
|
|
|
typedef enum
|
|
{
|
|
// The paragraph numbers following the Block and Section register
|
|
// descriptions refer to the "KiProMini: DNX Codec" document
|
|
// originally written by Avid and adapted by Paul Greaves.
|
|
|
|
// Block 1.1: Nestor Common
|
|
kRegDNX_DeviceID = DNX_REG_START, // ro (read only)
|
|
kRegDNX_Revision, // ro
|
|
kRegDNX_Diagnostics,
|
|
kRegDNX_Reset,
|
|
kRegDNX_NestorControl,
|
|
kRegDNX_NestorAutoloadControl,
|
|
kRegDNX_Status,
|
|
kRegDNX_NestorInterrupt,
|
|
kRegDNX_NestorInterruptEnable,
|
|
kRegDNX_EncoderM1AStatus, // ro (Was Flash Addr)
|
|
kRegDNX_EncoderM2AStatus, // ro (Was Flash Data)
|
|
kRegDNX_DecoderM1BStatus, // ro (Was Temp Sensor Addr Ctl)
|
|
kRegDNX_DecoderM2BStatus, // ro (Was Temp Sensor Wr Ctl)
|
|
kRegDNX_TempSensorReadData, // ro (Unused)
|
|
kRegDNX_Timeout,
|
|
|
|
// Block 1.2: SMPTE Format
|
|
kRegDNX_Field1StartEnd,
|
|
kRegDNX_Field1ActiveStartEnd,
|
|
kRegDNX_Field2StartEnd,
|
|
kRegDNX_Field2ActiveStartEnd,
|
|
kRegDNX_HorizontalStartEnd,
|
|
kRegDNX_FormatChromaClipping,
|
|
kRegDNX_FormatLumaClipping,
|
|
kRegDNX_Reserved1,
|
|
|
|
// Section 1.2.9: Formatter
|
|
kRegDNX_A0Parameter,
|
|
kRegDNX_A1Parameter,
|
|
kRegDNX_A2Parameter,
|
|
kRegDNX_A3Parameter,
|
|
kRegDNX_A4Parameter,
|
|
kRegDNX_A5Parameter,
|
|
kRegDNX_A6Parameter,
|
|
kRegDNX_A7Parameter,
|
|
kRegDNX_A8Parameter,
|
|
kRegDNX_A9Parameter,
|
|
kRegDNX_TOFHorizontalResetValue,
|
|
kRegDNX_TOFVerticalResetValue,
|
|
kRegDNX_HorizontalStartOfHANCCode,
|
|
kRegDNX_HorizontalStartOfSAVCode,
|
|
kRegDNX_HorizontalStartOfActiveVideo,
|
|
kRegDNX_HorizontalEndOfLine,
|
|
|
|
// Block 1.5: Encoder
|
|
kRegDNX_EncoderInterrupt,
|
|
kRegDNX_EncoderControl,
|
|
kRegDNX_EncoderInterruptEnable,
|
|
kRegDNX_RateControlAddress,
|
|
kRegDNX_RateControlReadData, // ro
|
|
kRegDNX_MacroblockLineNumber, // ro
|
|
kRegDNX_RateControlIndex, // ro
|
|
kRegDNX_DCTPackerIndex, // ro
|
|
kRegDNX_EncodeTableWrite,
|
|
kRegDNX_EncoderDebug, // ro
|
|
|
|
// Section 1.5.11: The VCID used for encoding
|
|
kRegDNX_EncoderVCIDRegister,
|
|
|
|
// Section 1.5.12.1/2: Encoder Parameter RAM
|
|
// We are only supporting seven VCID
|
|
// types at this time.
|
|
kRegDNX_EncoderParameterRAMLocation0_0,
|
|
kRegDNX_EncoderParameterRAMLocation1_0,
|
|
|
|
kRegDNX_EncoderParameterRAMLocation0_1,
|
|
kRegDNX_EncoderParameterRAMLocation1_1,
|
|
|
|
kRegDNX_EncoderParameterRAMLocation0_2,
|
|
kRegDNX_EncoderParameterRAMLocation1_2,
|
|
|
|
kRegDNX_EncoderParameterRAMLocation0_3,
|
|
kRegDNX_EncoderParameterRAMLocation1_3,
|
|
|
|
kRegDNX_EncoderParameterRAMLocation0_4,
|
|
kRegDNX_EncoderParameterRAMLocation1_4,
|
|
|
|
kRegDNX_EncoderParameterRAMLocation0_5,
|
|
kRegDNX_EncoderParameterRAMLocation1_5,
|
|
|
|
kRegDNX_EncoderParameterRAMLocation0_6,
|
|
kRegDNX_EncoderParameterRAMLocation1_6,
|
|
|
|
// Block 1.6: Decoder
|
|
kRegDNX_DecoderInterrupt,
|
|
kRegDNX_DecoderControl,
|
|
kRegDNX_DecoderInterruptEnable,
|
|
kRegDNX_DecodeTime, // ro
|
|
kRegDNX_FrameCount, // ro
|
|
kRegDNX_DecodeTableWrite,
|
|
kRegDNX_DecoderDebug, // ro
|
|
kRegDNX_Pipe1StallStatus1, // ro
|
|
kRegDNX_Pipe1StallStatus2, // ro
|
|
kRegDNX_Pipe2StallStatus1, // ro
|
|
kRegDNX_Pipe2StallStatus2, // ro
|
|
|
|
// Section 1.6.12: The VCID to use regardless of the frame header
|
|
kRegDNX_DecoderVCIDRegister,
|
|
|
|
// Section 1.6.13: Decoder Parameter RAM
|
|
kRegDNX_DecoderParameterRAMLocation0_0,
|
|
kRegDNX_DecoderParameterRAMLocation1_0,
|
|
|
|
kRegDNX_DecoderParameterRAMLocation0_1,
|
|
kRegDNX_DecoderParameterRAMLocation1_1,
|
|
|
|
kRegDNX_DecoderParameterRAMLocation0_2,
|
|
kRegDNX_DecoderParameterRAMLocation1_2,
|
|
|
|
kRegDNX_DecoderParameterRAMLocation0_3,
|
|
kRegDNX_DecoderParameterRAMLocation1_3,
|
|
|
|
kRegDNX_DecoderParameterRAMLocation0_4,
|
|
kRegDNX_DecoderParameterRAMLocation1_4,
|
|
|
|
kRegDNX_DecoderParameterRAMLocation0_5,
|
|
kRegDNX_DecoderParameterRAMLocation1_5,
|
|
|
|
kRegDNX_DecoderParameterRAMLocation0_6,
|
|
kRegDNX_DecoderParameterRAMLocation1_6,
|
|
|
|
kRegDNX_MaximumRegister = kRegDNX_DecoderParameterRAMLocation1_6,
|
|
kRegDNX_NumberOfRegisters = ((kRegDNX_MaximumRegister - DNX_REG_START) + 1)
|
|
} DNXRegisterNum;
|
|
#endif // !defined (NTV2_DEPRECATE)
|
|
#if defined (NTV2_DEPRECATE_13_0)
|
|
#define kRegAuxInterruptDelay kRegBitfileDate ///< @deprecated Use kRegBitfileDate instead.
|
|
#define kRegReserved89 kRegBitfileTime ///< @deprecated Use kRegBitfileTime instead.
|
|
#endif // NTV2_DEPRECATE_13_0
|
|
|
|
// Virtual registers
|
|
#include "ntv2virtualregisters.h"
|
|
|
|
typedef struct
|
|
{
|
|
ULWord initialized;
|
|
ULWord contrast;
|
|
ULWord brightness;
|
|
ULWord hue;
|
|
ULWord CbOffset; // Not user controllable
|
|
ULWord CrOffset; // Not user controllable
|
|
ULWord saturationCb;
|
|
ULWord saturationCr;
|
|
} VirtualProcAmpRegisters_base;
|
|
|
|
typedef struct
|
|
{
|
|
VirtualProcAmpRegisters_base SD;
|
|
VirtualProcAmpRegisters_base HD;
|
|
} VirtualProcAmpRegisters;
|
|
|
|
// These have a nice mapping to the virtual registers
|
|
typedef struct
|
|
{
|
|
UByte contrast;
|
|
UByte brightness;
|
|
UByte hue;
|
|
UByte CbOffset; // Not user controllable
|
|
UByte CrOffset; // Not user controllable
|
|
UByte saturationCb;
|
|
UByte saturationCr;
|
|
} ADV7189BProcAmpRegisters; // Works for SD portion of ADV7402A also
|
|
|
|
// These do not have a nice mapping to the virtual registers
|
|
// All are 10-bit registers spread out over two I2C addresses.
|
|
typedef struct
|
|
{
|
|
UByte hex73; // [7:6] set, [5:0] upper bits contrast
|
|
UByte hex74; // [7:4] lower bits contrast, [3:0] upper bits saturation Cb
|
|
UByte hex75; // [7:2] lower bits saturation Cb, [1:0] upper bits saturation Cr
|
|
UByte hex76; // [7:0] lower bits saturation Cr
|
|
UByte hex77; // [7:6] clear, [5:0] upper bits brightness.
|
|
UByte hex78; // [7:4] lower bits brightness, [3:0] high bits Cb offset
|
|
UByte hex79; // [7:2] lower bits Cb offset, [1:0] high bits Cr offset
|
|
UByte hex7A; // [7:0] lower bits Cr offset
|
|
} ADV7402AHDProcAmpRegisters;
|
|
|
|
// Kind of a hack
|
|
// This will have to be a union or something if/when we add another proc amp processor
|
|
typedef struct
|
|
{
|
|
ADV7189BProcAmpRegisters SD; // Works for SD portion of ADV7402A also
|
|
ADV7402AHDProcAmpRegisters HD;
|
|
} HardwareProcAmpRegisterImage;
|
|
|
|
// SD procamp regs
|
|
typedef enum
|
|
{
|
|
kRegADV7189BContrast = 0x08,
|
|
kRegADV7189BBrightness = 0x0A,
|
|
kRegADV7189BHue = 0x0B,
|
|
kRegADV7189BCbOffset = 0xE1,
|
|
kRegADV7189BCrOffset = 0xE2,
|
|
kRegADV7189BSaturationCb = 0xE3,
|
|
kRegADV7189BSaturationCr = 0xE4
|
|
} ADV7189BRegisterNum; // Works for SD portion of ADV7402A also
|
|
|
|
typedef enum
|
|
{
|
|
// Global Control
|
|
kRegMaskFrameRate = BIT(0) + BIT(1) + BIT(2),
|
|
kRegMaskFrameRateHiBit = BIT(22),
|
|
kRegMaskGeometry = BIT(3) + BIT(4) + BIT(5) + BIT(6),
|
|
kRegMaskStandard = BIT(7) + BIT(8) + BIT(9),
|
|
kRegMaskRefSource = BIT(10) + BIT(11) + BIT(12),
|
|
kRegMaskRefInputVoltage = BIT(12), // DEPRECATED! - Now part of kRegMaskRefSource - do not use on new boards
|
|
kRegMaskSmpte372Enable = BIT(15),
|
|
kRegMaskLED = BIT(16) + BIT(17) + BIT(18) + BIT(19),
|
|
kRegMaskRegClocking = BIT(21) + BIT(20),
|
|
kRegMaskDualLinkInEnable = BIT(23),
|
|
kRegMaskQuadTsiEnable = BIT(24),
|
|
kRegMaskBankSelect = BIT(25) + BIT(26),
|
|
kRegMaskDualLinkOutEnable = BIT(27),
|
|
kRegMaskRP188ModeCh1 = BIT(28),
|
|
kRegMaskRP188ModeCh2 = BIT(29),
|
|
kRegMaskCCHostBankSelect = BIT(30) + BIT(31),
|
|
|
|
// Global Control 2
|
|
kRegMaskRefSource2 = BIT(0),
|
|
kRegMaskPCRReferenceEnable = BIT(1),
|
|
kRegMaskQuadMode = BIT(3),
|
|
kRegMaskAud1PlayCapMode = BIT(4),
|
|
kRegMaskAud2PlayCapMode = BIT(5),
|
|
kRegMaskAud3PlayCapMode = BIT(6),
|
|
kRegMaskAud4PlayCapMode = BIT(7),
|
|
kRegMaskAud5PlayCapMode = BIT(8),
|
|
kRegMaskAud6PlayCapMode = BIT(9),
|
|
kRegMaskAud7PlayCapMode = BIT(10),
|
|
kRegMaskAud8PlayCapMode = BIT(11),
|
|
kRegMaskQuadMode2 = BIT(12),
|
|
kRegMaskSmpte372Enable4 = BIT(13),
|
|
kRegMaskSmpte372Enable6 = BIT(14),
|
|
kRegMaskSmpte372Enable8 = BIT(15),
|
|
kRegMaskIndependentMode = BIT(16),
|
|
kRegMask2MFrameSupport = BIT(17),
|
|
kRegMaskAudioMixerPresent = BIT(18),
|
|
kRegMaskIsDNXIV = BIT(19),
|
|
kRegMask425FB12 = BIT(20),
|
|
kRegMask425FB34 = BIT(21),
|
|
kRegMask425FB56 = BIT(22),
|
|
kRegMask425FB78 = BIT(23),
|
|
kRegMaskRP188ModeCh3 = BIT(28),
|
|
kRegMaskRP188ModeCh4 = BIT(29),
|
|
kRegMaskRP188ModeCh5 = BIT(30),
|
|
kRegMaskRP188ModeCh6 = BIT(31),
|
|
kRegMaskRP188ModeCh7 = BIT(26),
|
|
kRegMaskRP188ModeCh8 = BIT(27),
|
|
|
|
// kRegGlobalControl3 (reg 108)
|
|
kRegMaskAnalogIOControl = BIT(1) + BIT(0),
|
|
kRegMaskAnalogIOControl_14 = BIT(0),
|
|
kRegMaskAnalogIOControl_58 = BIT(1),
|
|
kRegMaskQuadQuadMode = BIT(2),
|
|
kRegMaskQuadQuadMode2 = BIT(3),
|
|
kRegMaskQuadQuadSquaresMode = BIT(4),
|
|
kRegMaskVUMeterSelect = BIT(5),
|
|
kRegMaskFramePulseEnable = BIT(6),
|
|
kRegMaskFramePulseRefSelect = BIT(8) + BIT(9) + BIT(10) + BIT(11),
|
|
|
|
// Audio Control 2
|
|
kRegMaskAud1RateHigh = BIT(0),
|
|
kRegMaskAud2RateHigh = BIT(1),
|
|
kRegMaskAud3RateHigh = BIT(2),
|
|
kRegMaskAud4RateHigh = BIT(3),
|
|
kRegMaskAud5RateHigh = BIT(4),
|
|
kRegMaskAud6RateHigh = BIT(5),
|
|
kRegMaskAud7RateHigh = BIT(6),
|
|
kRegMaskAud8RateHigh = BIT(7),
|
|
|
|
// Channel Control - kRegCh1Control, kRegCh2Control, kRegCh3Control, kRegCh4Control
|
|
kRegMaskMode = BIT(0),
|
|
kRegMaskFrameFormat = BIT(1) + BIT(2) + BIT(3) + BIT(4),
|
|
kRegMaskAlphaFromInput2 = BIT(5),
|
|
kRegMaskFrameFormatHiBit = BIT(6), // KAM
|
|
kRegMaskChannelDisable = BIT(7),
|
|
kRegMaskWriteBack = BIT(8),
|
|
kRegMaskFrameOrientation = BIT(10),
|
|
kRegMaskQuarterSizeMode = BIT(11),
|
|
kRegMaskFrameBufferMode = BIT(12),
|
|
kKHRegMaskDownconvertInput = BIT(14),
|
|
kLSRegMaskVideoInputSelect = BIT(15),
|
|
kRegMaskDitherOn8BitInput = BIT(16),
|
|
kRegMaskQuality = BIT(17),
|
|
kRegMaskEncodeAsPSF = BIT(18),
|
|
kK2RegMaskFrameSize = BIT(21) + BIT(20),
|
|
kRegMaskChannelCompressed = BIT(22),
|
|
kRegMaskRGB8b10bCvtMode = BIT(23),
|
|
kRegMaskVBlankRGBRange = BIT(24),
|
|
kRegMaskQuality2 = BIT(25) + BIT(26),
|
|
kRegCh1BlackOutputMask = BIT(27), // KiPro black output bit
|
|
kRegMaskSonySRExpressBit = BIT(28),
|
|
kRegMaskFrameSizeSetBySW = BIT(29),
|
|
kRegMaskVidProcVANCShift = BIT(31),
|
|
|
|
// Video Crosspoint Control
|
|
kRegMaskVidXptFGVideo = BIT(0) + BIT(1) + BIT(2),
|
|
kRegMaskVidXptBGVideo = BIT(4) + BIT(5) + BIT(6),
|
|
kRegMaskVidXptFGKey = BIT(8) + BIT(9) + BIT(10),
|
|
kRegMaskVidXptBGKey = BIT(12) + BIT(13) + BIT(14),
|
|
kRegMaskVidXptSecVideo = BIT(16) + BIT(17) + BIT(18),
|
|
|
|
// Video Processing Control
|
|
kRegMaskVidProcMux1 = BIT(0) + BIT(1),
|
|
kRegMaskVidProcMux2 = BIT(2) + BIT(3),
|
|
kRegMaskVidProcMux3 = BIT(4) + BIT(5),
|
|
kRegMaskVidProcMux4 = BIT(6) + BIT(7),
|
|
kRegMaskVidProcMux5 = BIT(8) + BIT(9) + BIT(10),
|
|
kRegMaskVidProcLimiting = BIT(11) + BIT(12),
|
|
kRegMaskVidProcVancSource = BIT(13),
|
|
kRegMaskVidProcRGBRange = BIT(14),
|
|
kRegMaskVidProcFGMatteEnable = BIT(18),
|
|
kRegMaskVidProcBGMatteEnable = BIT(19),
|
|
kRegMaskVidProcFGControl = BIT(20) + BIT(21),
|
|
kRegMaskVidProcBGControl = BIT(22) + BIT(23),
|
|
kRegMaskVidProcMode = BIT(24) + BIT(25),
|
|
kRegMaskVidProcRGBModeSupported = BIT(26),
|
|
kRegMaskVidProcSyncFail = BIT(27),
|
|
kRegMaskVidProcSplitStd = BIT(28) + BIT(29) + BIT(30),
|
|
kRegMaskVidProcSubtitleEnable = BIT(31),
|
|
|
|
// kRegStatus
|
|
kRegMaskHardwareVersion = BIT(0) + BIT(1) + BIT(2) + BIT(3),
|
|
kRegMaskFPGAVersion = BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11),
|
|
kRegMaskLTCInPresent = BIT(17),
|
|
|
|
// Video Interrupt Control
|
|
kRegMaskIntEnableMask = BIT(5) + BIT(4) + BIT(3) + BIT(2) + BIT(1) + BIT(0),
|
|
|
|
// Audio Control
|
|
kRegMaskCaptureEnable = BIT(0),
|
|
kRegMaskNumBits = BIT(1), // shouldn't this be BIT(2)?
|
|
kRegMaskOutputTone = BIT(1),
|
|
kRegMask20BitMode = BIT(2),
|
|
kRegMaskLoopBack = BIT(3),
|
|
kRegMaskAudioTone = BIT(7),
|
|
kRegMaskResetAudioInput = BIT(8),
|
|
kRegMaskResetAudioOutput = BIT(9),
|
|
kRegMaskInputStartAtVBI = BIT(10), // New in 15.6
|
|
kRegMaskPauseAudio = BIT(11),
|
|
kRegMaskEmbeddedOutputMuteCh1 = BIT(12), // added for FS1
|
|
kRegMaskEmbeddedOutputSupressCh1 = BIT(13), // added for FS1 but available on other boards
|
|
kRegMaskOutputStartAtVBI = BIT(14), // New in 15.6
|
|
kRegMaskEmbeddedOutputSupressCh2 = BIT(15), // added for FS1 but available on other boards
|
|
kRegMaskNumChannels = BIT(16),
|
|
kRegMaskEmbeddedOutputMuteCh2 = BIT(17), // added for FS1
|
|
kRegMaskAudioRate = BIT(18),
|
|
kRegMaskEncodedAudioMode = BIT(19), // addded for FS1 but available on other boards
|
|
kRegMaskAudio16Channel = BIT(20),
|
|
kRegMaskMultiLinkAudio = BIT(23),
|
|
kRegMaskAudio8Channel = kRegMaskMultiLinkAudio,
|
|
kK2RegMaskKBoxAnalogMonitor = BIT(24) + BIT(25),
|
|
kK2RegMaskKBoxAudioInputSelect = BIT(26),
|
|
kK2RegMaskKBoxDetect = BIT(27),
|
|
kK2RegMaskBOCableDetect = BIT(28),
|
|
kK2RegMaskAudioLevel = BIT(29),
|
|
kFS1RegMaskAudioLevel = BIT(29)+BIT(30),
|
|
kK2RegResetAudioDAC = BIT(30),
|
|
kK2RegMaskAudioBufferSize = BIT(31),
|
|
kK2RegMaskAverageAudioLevel = 0xFFFFffff, // read the entire register
|
|
|
|
kFS1RegMaskAudioBufferSize = BIT(31),
|
|
kLHRegMaskResetAudioDAC = BIT(31),
|
|
// FS1 output control "Freeze (last good frame) On Input Loss"
|
|
kRegMaskLossOfInput = BIT(11),
|
|
|
|
// Audio Source Select
|
|
kRegMaskAudioSource = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kRegMaskEmbeddedAudioInput = BIT(16),
|
|
kRegMaskAudioAutoErase = BIT(19),
|
|
kRegMaskAnalogHDMIvsAES = BIT(20),
|
|
kRegMask3GbSelect = BIT(21),
|
|
kRegMaskEmbeddedAudioClock = BIT(22),
|
|
kRegMaskEmbeddedAudioInput2 = BIT(23),
|
|
kRegMaskAnalogAudioInGain = BIT(24),
|
|
kRegMaskAnalogAudioInJack = BIT(25),
|
|
|
|
// Input Status
|
|
kRegMaskInput1FrameRate = BIT(0)+BIT(1)+BIT(2),
|
|
kRegMaskInput1Geometry = BIT(4)+BIT(5)+BIT(6),
|
|
kRegMaskInput1Progressive = BIT(7),
|
|
kRegMaskInput2FrameRate = BIT(8)+BIT(9)+BIT(10),
|
|
kRegMaskInput2Geometry = BIT(12)+BIT(13)+BIT(14),
|
|
kRegMaskInput2Progressive = BIT(15),
|
|
kRegMaskReferenceFrameRate = BIT(16)+BIT(17)+BIT(18)+BIT(19),
|
|
kRegMaskReferenceFrameLines = BIT(20)+BIT(21)+BIT(22),
|
|
kRegMaskReferenceProgessive = BIT(23),
|
|
kRegMaskAESCh12Present = BIT(24),
|
|
kRegMaskAESCh34Present = BIT(25),
|
|
kRegMaskAESCh56Present = BIT(26),
|
|
kRegMaskAESCh78Present = BIT(27),
|
|
kRegMaskInput1FrameRateHigh = BIT(28),
|
|
kRegMaskInput2FrameRateHigh = BIT(29),
|
|
kRegMaskInput1GeometryHigh = BIT(30),
|
|
kRegMaskInput2GeometryHigh = BIT(31),
|
|
|
|
// RP-188 Source
|
|
kRegMaskRP188SourceSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
kRegMaskRP188DBB = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7),
|
|
|
|
// DMA Control
|
|
kRegMaskForce64 = BIT(4),
|
|
kRegMaskAutodetect64 = BIT(5),
|
|
kRegMaskFirmWareRev = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kRegMaskDMAPauseDisable = BIT(16),
|
|
|
|
// Color Correction Control - kRegCh1ColorCorrectionControl (68), kRegCh2ColorCorrectionControl (69)
|
|
kRegMaskSaturationValue = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9),
|
|
kRegMaskCCOutputBankSelect = BIT(16),
|
|
kRegMaskCCMode = BIT(17)+BIT(18),
|
|
kRegMaskCC5HostAccessBankSelect = BIT(20),
|
|
kRegMaskCC5OutputBankSelect = BIT(21),
|
|
kRegMaskLUT5Select = BIT(28),
|
|
kRegMaskLUTSelect = BIT(29),
|
|
kRegMaskCC3OutputBankSelect = BIT(30),
|
|
kRegMaskCC4OutputBankSelect = BIT(31),
|
|
|
|
// kRegCanDoStatus
|
|
kRegMaskCanDoValidXptROM = BIT(0),
|
|
kRegMaskCanDoAudioWaitForVBI = BIT(1),
|
|
|
|
// kRegLUTV2Control
|
|
kRegMaskLUT1Enable = BIT(0),
|
|
kRegMaskLUT2Enable = BIT(1),
|
|
kRegMaskLUT3Enable = BIT(2),
|
|
kRegMaskLUT4Enable = BIT(3),
|
|
kRegMaskLUT5Enable = BIT(4),
|
|
kRegMaskLUT6Enable = BIT(5),
|
|
kRegMaskLUT7Enable = BIT(6),
|
|
kRegMaskLUT8Enable = BIT(7),
|
|
kRegMaskLUT1HostAccessBankSelect = BIT(8),
|
|
kRegMaskLUT2HostAccessBankSelect = BIT(9),
|
|
kRegMaskLUT3HostAccessBankSelect = BIT(10),
|
|
kRegMaskLUT4HostAccessBankSelect = BIT(11),
|
|
kRegMaskLUT5HostAccessBankSelect = BIT(12),
|
|
kRegMaskLUT6HostAccessBankSelect = BIT(13),
|
|
kRegMaskLUT7HostAccessBankSelect = BIT(14),
|
|
kRegMaskLUT8HostAccessBankSelect = BIT(15),
|
|
kRegMaskLUT1OutputBankSelect = BIT(16),
|
|
kRegMaskLUT2OutputBankSelect = BIT(17),
|
|
kRegMaskLUT3OutputBankSelect = BIT(18),
|
|
kRegMaskLUT4OutputBankSelect = BIT(19),
|
|
kRegMaskLUT5OutputBankSelect = BIT(20),
|
|
kRegMaskLUT6OutputBankSelect = BIT(21),
|
|
kRegMaskLUT7OutputBankSelect = BIT(22),
|
|
kRegMaskLUT8OutputBankSelect = BIT(23),
|
|
kRegMask12BitLUTPlaneSelect = BIT(24)+BIT(25),
|
|
kRegMask12BitLUTSupport = BIT(28),
|
|
|
|
|
|
// RS422 Control
|
|
kRegMaskRS422TXEnable = BIT(0),
|
|
kRegMaskRS422TXFIFOEmpty = BIT(1),
|
|
kRegMaskRS422TXFIFOFull = BIT(2),
|
|
kRegMaskRS422RXEnable = BIT(3),
|
|
kRegMaskRS422RXFIFONotEmpty = BIT(4),
|
|
kRegMaskRS422RXFIFOFull = BIT(5),
|
|
kRegMaskRS422RXParityError = BIT(6),
|
|
kRegMaskRS422RXFIFOOverrun = BIT(7),
|
|
kRegMaskRS422Flush = BIT(6)+BIT(7),
|
|
kRegMaskRS422Present = BIT(8),
|
|
kRegMaskRS422TXInhibit = BIT(9),
|
|
kRegMaskRS422ParitySense = BIT(12), // 0 = Odd, 1 = Even
|
|
kRegMaskRS422ParityDisable = BIT(13), // 0 = Use bit 12 setting, 1 = No parity
|
|
kRegMaskRS422BaudRate = BIT(16)+BIT(17)+BIT(18),
|
|
|
|
|
|
// FS1 ProcAmp Control
|
|
kFS1RegMaskProcAmpC1Y = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11),
|
|
kFS1RegMaskProcAmpC1CB = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)+BIT(24)+BIT(25)+BIT(26)+BIT(27),
|
|
kFS1RegMaskProcAmpC1CR = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11),
|
|
kFS1RegMaskProcAmpC2CB = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)+BIT(24)+BIT(25)+BIT(26)+BIT(27),
|
|
kFS1RegMaskProcAmpC2CR = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11),
|
|
kFS1RegMaskProcAmpOffsetY = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)+BIT(24)+BIT(25)+BIT(26)+BIT(27),
|
|
|
|
|
|
kRegMaskAudioInDelay = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12),
|
|
kRegMaskAudioOutDelay = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)+BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28),
|
|
|
|
// FS1 Audio Delay
|
|
kFS1RegMaskAudioDelay = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12),
|
|
|
|
// Borg Audio Delay
|
|
kBorgRegMaskPlaybackEEAudioDelay = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kBorgRegMaskCaputreAudioDelay = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)+BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
|
|
// kRegOutputTimingControl
|
|
kBorgRegMaskOutTimingCtrlHorzOfs = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12),
|
|
kBorgRegMaskOutTimingCtrlVertOfs = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)+BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28),
|
|
|
|
|
|
// FS1 I2C
|
|
kFS1RegMaskI2C1ControlWrite = BIT(0),
|
|
kFS1RegMaskI2C1ControlRead = BIT(1),
|
|
kFS1RegMaskI2C1ControlBusy = BIT(2),
|
|
kFS1RegMaskI2C1ControlError = BIT(3),
|
|
kFS1RegMaskI2C2ControlWrite = BIT(4),
|
|
kFS1RegMaskI2C2ControlRead = BIT(5),
|
|
kFS1RegMaskI2C2ControlBusy = BIT(6),
|
|
kFS1RegMaskI2C2ControlError = BIT(7),
|
|
|
|
kFS1RegMaskI2CAddress = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4) + BIT(5)+BIT(6)+BIT(7),
|
|
kFS1RegMaskI2CSubAddress = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kFS1RegMaskI2CWriteData = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4) + BIT(5)+BIT(6)+BIT(7),
|
|
kFS1RegMaskI2CReadData = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
|
|
// kRegFS1ReferenceSelect (in Reg 95)
|
|
kRegMaskLTCLoopback = BIT(10),
|
|
kFS1RefMaskLTCOnRefInSelect = BIT(4),
|
|
kRegMaskLTCOnRefInSelect = BIT(5),
|
|
kFS1RefMaskLTCEmbeddedOutEnable = BIT(8),
|
|
kFS1RegMaskReferenceInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3),
|
|
kFS1RegMaskColorFIDSubcarrierReset = BIT(14),
|
|
kFS1RegMaskFreezeOutput = BIT(15),
|
|
kFS1RegMaskProcAmpInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kFS1RegMaskSecondAnalogOutInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
// FS1 AFD Mode
|
|
kFS1RegMaskAFDReceived_Code = BIT(3)+BIT(2)+BIT(1)+BIT(0),
|
|
kFS1RegMaskAFDReceived_AR = BIT(4),
|
|
kFS1RegMaskAFDReceived_VANCPresent = BIT(7),
|
|
kFS1RegMaskUpconvertAutoAFDEnable = BIT(20),
|
|
kFS1RegMaskUpconvert2AFDDefaultHoldLast = BIT(21),
|
|
kFS1RegMaskDownconvertAutoAFDEnable = BIT(24),
|
|
kFS1RegMaskDownconvertAFDDefaultHoldLast = BIT(25),
|
|
kFS1RegMaskDownconvert2AutoAFDEnable = BIT(28),
|
|
kFS1RegMaskDownconvert2AFDDefaultHoldLast = BIT(29),
|
|
|
|
// FS1 AFD Inserter
|
|
kFS1RegMaskAFDVANCInserter_Code = BIT(3)+BIT(2)+BIT(1)+BIT(0),
|
|
kFS1RegMaskAFDVANCInserter_AR = BIT(4),
|
|
kFS1RegMaskAFDVANCInserter_Mode = BIT(13)+BIT(12),
|
|
kFS1RegMaskAFDVANCInserter_Line = BIT(26)+BIT(25)+BIT(24)+BIT(23)+BIT(22)+BIT(21)+BIT(20)+BIT(19)+BIT(18)+BIT(17)+BIT(16),
|
|
|
|
// FS1 Audio Channel Mapping
|
|
kFS1RegMaskAudioChannelMapping_Gain = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4) + BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9),
|
|
kFS1RegMaskAudioChannelMapping_Phase = BIT(15),
|
|
kFS1RegMaskAudioChannelMapping_Source = BIT(21)+BIT(20)+BIT(19)+BIT(18)+BIT(17)+BIT(16),
|
|
kFS1RegMaskAudioChannelMapping_Mute = BIT(31),
|
|
|
|
// FS1 Output Timing Fine Phase Adjust
|
|
kRegMaskOutputTimingFinePhase = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4) + BIT(5)+BIT(6)+BIT(7)+BIT(8),
|
|
|
|
//kRegAnalogInputStatus
|
|
kRegMaskAnalogInputSD = BIT(14),
|
|
kRegMaskAnalogInputIntegerRate = BIT(15),
|
|
kRegMaskAnalogCompositeLocked = BIT(16),
|
|
kRegMaskAnalogCompositeFormat625 = BIT(18),
|
|
|
|
//kRegAnalogInputControl (Note - on some boards, ADC mode is set in Reg 128, kK2RegAnalogOutControl!)
|
|
kRegMaskAnalogInputADCMode = BIT(4)+BIT(3)+BIT(2)+BIT(1)+BIT(0),
|
|
|
|
//kRegHDMIOut3DControl
|
|
kRegMaskHDMIOut3DPresent = BIT(3),
|
|
kRegMaskHDMIOut3DMode = BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
|
|
//kRegHDMIOutControl
|
|
kRegMaskHDMIOutVideoStd = BIT(2)+BIT(1)+BIT(0),
|
|
kRegMaskHDMIOutV2VideoStd = BIT(3)+BIT(2)+BIT(1)+BIT(0),
|
|
kRegMaskHDMIOut8ChGroupSelect = BIT(5),
|
|
kRegMaskHDMIV2TxBypass = BIT(7),
|
|
kLHIRegMaskHDMIOutColorSpace = BIT(8),
|
|
kLHIRegMaskHDMIOutFPS = BIT(12)+BIT(11)+BIT(10)+BIT(9),
|
|
kRegMaskHDMIOutProgressive = BIT(13),
|
|
kLHIRegMaskHDMIOutBitDepth = BIT(14),
|
|
kRegMaskHDMIV2YCColor = BIT(15),
|
|
kRegMaskHDMIOutAudioFormat = BIT(17)+BIT(16),
|
|
kRegMaskHDMISampling = BIT(19)+BIT(18),
|
|
kRegMaskHDMIVOBD = BIT(21)+BIT(20),
|
|
kRegMaskSourceIsRGB = BIT(23),
|
|
kRegMaskHDMIOutPowerDown = BIT(25),
|
|
kRegMaskHDMITxEnable = BIT(26),
|
|
kRegMaskHDMIRxEnable = BIT(27),
|
|
kRegMaskHDMIOutRange = BIT(28),
|
|
kRegMaskHDMIOutAudioCh = BIT(29),
|
|
kLHIRegMaskHDMIOutDVI = BIT(30),
|
|
|
|
//kRegHDMIInputStatus
|
|
kRegMaskInputStatusLock = BIT(0), // rename to kRegMaskAnalogInputStatusLock
|
|
kRegMaskStable = BIT(1),
|
|
kLHIRegMaskHDMIInputColorSpace = BIT(2),
|
|
kLHIRegMaskHDMIInputBitDepth = BIT(3),
|
|
kRegMaskHDMIInV2VideoStd = BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9),
|
|
kLHIRegMaskHDMIOutputEDIDRGB = BIT(10),
|
|
kLHIRegMaskHDMIOutputEDID10Bit = BIT(11),
|
|
kLHIRegMaskHDMIInput2ChAudio = BIT(12),
|
|
kRegMaskHDMIInputProgressive = BIT(13),
|
|
kRegMaskVideoSD = BIT(14),
|
|
kLHIRegMaskHDMIOutputEDIDDVI = BIT(15),
|
|
kRegMaskHDMIInAudioRate = BIT(19)+BIT(18)+BIT(17)+BIT(16),
|
|
kRegMaskAudioWorkLength = BIT(23)+BIT(22)+BIT(21)+BIT(20),
|
|
kRegMaskInputStatusStd = BIT(24)+BIT(25)+BIT(26),
|
|
kLHIRegMaskHDMIInputProtocol = BIT(27),
|
|
kRegMaskInputStatusFPS = BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegHDMIInputControl
|
|
kRegMaskHDMIOutForceConfig = BIT(1),
|
|
kRegMaskHDMIAudioPairSelect = BIT(3)+BIT(2),
|
|
kRegMaskHDMISampleRateConverterEnable = BIT(4),
|
|
kRegMaskHDMISwapInputAudCh34 = BIT(5),
|
|
kRegMaskHDMISwapOutputAudCh34 = BIT(6),
|
|
kRegMaskHDMIOutPrefer420 = BIT(7),
|
|
kRegMaskHDMIInColorDepth = BIT(13)+BIT(12),
|
|
kRegMaskHDMIInColorSpace = BIT(15)+BIT(14),
|
|
kRegMaskHDMIOutAudioRate = BIT(17)+BIT(16),
|
|
kRegMaskHDMIOutSourceSelect = BIT(23)+BIT(22)+BIT(21)+BIT(20),
|
|
kRegMaskHDMIOutCropEnable = BIT(24),
|
|
kRegMaskHDMIOutForceHPD = BIT(25),
|
|
kRegMaskHDMIOut12Bit = BIT(26),
|
|
kRegMaskHDMIDebug = BIT(27),
|
|
kRegMaskHDMIInputRange = BIT(28),
|
|
kRegMaskHDMIOutAudio2ChannelSelect = BIT(30)+BIT(29),
|
|
kRegMaskHDMIInfoRange = BIT(31),
|
|
|
|
//kRegHDMIInputControl / kRegHDMIOutControl
|
|
kRegMaskHDMIColorSpace = BIT(4)+BIT(5),
|
|
kRegMaskHDMIPolarity = BIT(16)+BIT(17)+BIT(18)+BIT(19),
|
|
|
|
//kK2RegAnalogOutControl - (controls Analog Inputs also, for some boards)
|
|
kK2RegMaskVideoDACMode = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4),
|
|
kFS1RegMaskVideoDAC2Mode = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12),
|
|
kLHIRegMaskVideoDACStandard = BIT(13)+BIT(14)+BIT(15),
|
|
kLSRegMaskVideoADCMode = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20),
|
|
kLHIRegMaskVideoDACMode = BIT(21)+BIT(22)+BIT(23)+BIT(24),
|
|
kLHIRegMaskVideoDACSetup = BIT(21), // bitwise interpretation of kLHIRegMaskVideoDACMode
|
|
kLHIRegMaskVideoDACJapan = BIT(22), // bitwise interpretation of kLHIRegMaskVideoDACMode
|
|
kLHIRegMaskVideoDACRGB = BIT(23), // bitwise interpretation of kLHIRegMaskVideoDACMode
|
|
kLHIRegMaskVideoDACComponent = BIT(24), // bitwise interpretation of kLHIRegMaskVideoDACMode
|
|
kK2RegMaskOutHTiming = BIT(31)+BIT(30)+BIT(29)+BIT(28)+BIT(27)+BIT(26)+BIT(25)+BIT(24),
|
|
|
|
//kK2RegSDIOut1Control + kK2RegSDIOut2Control + kK2RegSDIOut3Control + kK2RegSDIOut4Control + kK2RegAnalogOutControl
|
|
kK2RegMaskSDIOutStandard = BIT(0)+BIT(1)+BIT(2),
|
|
kK2RegMaskSDI1Out_2Kx1080Mode = BIT(3),
|
|
kLHRegMaskVideoOutputDigitalSelect = BIT(4) + BIT(5),
|
|
kK2RegMaskSDIOutHBlankRGBRange = BIT(7),
|
|
kLHRegMaskVideoOutputAnalogSelect = BIT(8) + BIT(9),
|
|
kRegMaskSDIOut6GbpsMode = BIT(16),
|
|
kRegMaskSDIOut12GbpsMode = BIT(17),
|
|
kRegMaskRGBLevelA = BIT(22),
|
|
kRegMaskSDIOutLevelAtoLevelB = BIT(23),
|
|
kLHIRegMaskSDIOut3GbpsMode = BIT(24),
|
|
kLHIRegMaskSDIOutSMPTELevelBMode = BIT(25),
|
|
kK2RegMaskVPIDInsertionEnable = BIT(26),
|
|
kK2RegMaskVPIDInsertionOverwrite = BIT(27),
|
|
kK2RegMaskSDIOutDS1AudioSelect = BIT(28)+BIT(30),
|
|
kK2RegMaskSDIOutDS2AudioSelect = BIT(29)+BIT(31),
|
|
|
|
//kK2RegConversionControl and kK2Reg2ndConversionControl,
|
|
kK2RegMaskConverterOutStandard = BIT(12)+BIT(13)+BIT(14),
|
|
kK2RegMaskConverterOutRate = BIT(27)+BIT(28)+BIT(29)+BIT(30),
|
|
kK2RegMaskUpConvertMode = BIT(8)+BIT(9)+BIT(10),
|
|
kK2RegMaskDownConvertMode = BIT(4)+BIT(5),
|
|
kK2RegMaskConverterInStandard = BIT(0)+BIT(1)+BIT(2),
|
|
kK2RegMaskConverterInRate = BIT(23)+BIT(24)+BIT(25)+BIT(26),
|
|
kK2RegMaskConverterPulldown = BIT(6),
|
|
kK2RegMaskUCPassLine21 = BIT(16)+BIT(17),
|
|
kK2RegMaskIsoConvertMode = BIT(20)+BIT(21)+BIT(22),
|
|
kK2RegMaskDeinterlaceMode = BIT(15),
|
|
kK2RegMaskEnableConverter = BIT(31),
|
|
|
|
//kK2RegFrameSync1Control and kK2RegFrameSync2Control
|
|
kK2RegMaskFrameSyncControlFrameDelay = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29),
|
|
kK2RegMaskFrameSyncControlStandard = BIT(8)+BIT(9)+BIT(10),
|
|
kK2RegMaskFrameSyncControlGeometry = BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskFrameSyncControlFrameFormat = BIT(0)+BIT(1)+BIT(2)+BIT(3),
|
|
|
|
//kK2RegXptSelectGroup1
|
|
kK2RegMaskCompressionModInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
kK2RegMaskConversionModInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskColorSpaceConverterInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskXptLUTInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
|
|
//kK2RegXptSelectGroup2
|
|
kK2RegMaskDuallinkOutInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
kK2RegMaskFrameSync2InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskFrameSync1InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskFrameBuffer1InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
|
|
//kK2RegXptSelectGroup3
|
|
kK2RegMaskCSC1KeyInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
kK2RegMaskSDIOut2InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskSDIOut1InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskAnalogOutInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
|
|
//kK2RegXptSelectGroup4
|
|
kK2RegMaskMixerBGKeyInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
kK2RegMaskMixerBGVidInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskMixerFGKeyInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskMixerFGVidInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
|
|
//kK2RegXptSelectGroup5
|
|
kK2RegMaskCSC2KeyInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
kK2RegMaskCSC2VidInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskXptLUT2InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskFrameBuffer2InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
|
|
//kK2RegXptSelectGroup6
|
|
kK2RegMaskWaterMarkerInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskIICTInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskHDMIOutInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskSecondConverterInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kK2RegXptSelectGroup7
|
|
kK2RegMaskWaterMarker2InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskIICT2InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskDuallinkOut2InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
|
|
//kK2RegXptSelectGroup8
|
|
kK2RegMaskSDIOut3InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskSDIOut4InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskSDIOut5InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
|
|
//kRegCh1ControlExtended
|
|
//kRegCh2ControlExtended
|
|
kK2RegMaskPulldownMode = BIT(2),
|
|
|
|
//kK2RegXptSelectGroup9
|
|
kK2RegMaskMixer2FGVidInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskMixer2FGKeyInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskMixer2BGVidInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskMixer2BGKeyInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kK2RegXptSelectGroup10
|
|
kK2RegMaskSDIOut1DS2InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskSDIOut2DS2InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
|
|
//kK2RegXptSelectGroup11
|
|
kK2RegMaskDuallinkIn1InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskDuallinkIn1DSInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskDuallinkIn2InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskDuallinkIn2DSInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kK2RegXptSelectGroup12
|
|
kK2RegMaskXptLUT3InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskXptLUT4InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskXptLUT5InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskXpt3DLUT1InputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kK2RegXptSelectGroup13
|
|
kK2RegMaskFrameBuffer3InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskFrameBuffer4InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
|
|
//kK2RegXptSelectGroup14
|
|
kK2RegMaskSDIOut3DS2InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskSDIOut5DS2InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskSDIOut4DS2InputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup15
|
|
kK2RegMaskDuallinkIn3InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskDuallinkIn3DSInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskDuallinkIn4InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskDuallinkIn4DSInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup16
|
|
kK2RegMaskDuallinkOut3InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskDuallinkOut4InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskDuallinkOut5InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
|
|
//kK2RegXptSelectGroup17
|
|
kK2RegMaskCSC3VidInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskCSC3KeyInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskCSC4VidInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskCSC4KeyInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup18
|
|
kK2RegMaskCSC5VidInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskCSC5KeyInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
|
|
//kRegXptSelectGroup19
|
|
kK2RegMask4KDCQ1InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMask4KDCQ2InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMask4KDCQ3InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMask4KDCQ4InputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup20
|
|
kK2RegMaskHDMIOutV2Q1InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskHDMIOutV2Q2InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskHDMIOutV2Q3InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskHDMIOutV2Q4InputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup21
|
|
kK2RegMaskFrameBuffer5InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskFrameBuffer6InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskFrameBuffer7InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskFrameBuffer8InputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup22
|
|
kK2RegMaskSDIOut6InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskSDIOut6DS2InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskSDIOut7InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskSDIOut7DS2InputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup23
|
|
kK2RegMaskCSC7VidInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskCSC7KeyInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskCSC8VidInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskCSC8KeyInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup24
|
|
kK2RegMaskXptLUT6InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskXptLUT7InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskXptLUT8InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
|
|
//kRegXptSelectGroup25
|
|
kK2RegMaskDuallinkIn5InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskDuallinkIn5DSInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskDuallinkIn6InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskDuallinkIn6DSInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup26
|
|
kK2RegMaskDuallinkIn7InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskDuallinkIn7DSInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskDuallinkIn8InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskDuallinkIn8DSInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup27
|
|
kK2RegMaskDuallinkOut6InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskDuallinkOut7InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskDuallinkOut8InputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
|
|
//kRegXptSelectGroup28
|
|
kK2RegMaskMixer3FGVidInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskMixer3FGKeyInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskMixer3BGVidInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskMixer3BGKeyInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup29
|
|
kK2RegMaskMixer4FGVidInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskMixer4FGKeyInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskMixer4BGVidInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskMixer4BGKeyInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup30
|
|
kK2RegMaskSDIOut8InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskSDIOut8DS2InputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskCSC6VidInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskCSC6KeyInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup32
|
|
kK2RegMask425Mux1AInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMask425Mux1BInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMask425Mux2AInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMask425Mux2BInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup33
|
|
kK2RegMask425Mux3AInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMask425Mux3BInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMask425Mux4AInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMask425Mux4BInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup34
|
|
kK2RegMaskFrameBuffer1BInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskFrameBuffer2BInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskFrameBuffer3BInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskFrameBuffer4BInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup35
|
|
kK2RegMaskFrameBuffer5BInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskFrameBuffer6BInputSelect = BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
kK2RegMaskFrameBuffer7BInputSelect = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23),
|
|
kK2RegMaskFrameBuffer8BInputSelect = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
|
|
//kRegXptSelectGroup36
|
|
kK2RegMaskMultiLinkOutInputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kK2RegMaskMultiLinkOutDS2InputSelect = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
|
|
//kK2RegCSCoefficients1_2
|
|
//kK2RegCSC2oefficients1_2,
|
|
//kK2RegCSC3oefficients1_2,
|
|
//kK2RegCSC4oefficients1_2,
|
|
//kK2RegCSC5Coefficients1_2,
|
|
//kK2RegCSC6Coefficients1_2,
|
|
//kK2RegCSC7Coefficients1_2,
|
|
//kK2RegCSC8Coefficients1_2,
|
|
kK2RegMaskVidKeySyncStatus = BIT(28),
|
|
kK2RegMaskMakeAlphaFromKeySelect = BIT(29),
|
|
kK2RegMaskColorSpaceMatrixSelect = BIT(30),
|
|
kK2RegMaskUseCustomCoefSelect = BIT(31),
|
|
|
|
//kRegCSCoefficients3_4,
|
|
//kRegCS2Coefficients3_4,
|
|
//kRegCS3Coefficients3_4,
|
|
//kRegCS4Coefficients3_4,
|
|
//kRegCS5Coefficients3_4,
|
|
//kRegCS6Coefficients3_4,
|
|
//kRegCS7Coefficients3_4,
|
|
//kRegCS8Coefficients3_4,
|
|
kK2RegMaskXena2RGBRange = BIT(31),
|
|
|
|
//kK2RegCSCoefficients5_6,
|
|
kK2RegMask2piCSC1 = BIT(28),
|
|
|
|
//kK2RegCSCoefficients5_6,
|
|
kK2RegMask2piCSC5 = BIT(28),
|
|
|
|
//custom coefficients
|
|
kK2RegMaskCustomCoefficientLow = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10),
|
|
kK2RegMaskCustomCoefficientHigh = BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)+BIT(24)+BIT(25)+BIT(26),
|
|
|
|
// Enhanced Color Space Converter contol
|
|
kK2RegMaskEnhancedCSCInputPixelFormat = BIT(0)+BIT(1),
|
|
kK2RegMaskEnhancedCSCOutputPixelFormat = BIT(4)+BIT(5),
|
|
kK2RegMaskEnhancedCSCChromaEdgeControl = BIT(8)+BIT(9),
|
|
kK2RegMaskEnhancedCSCChromaFilterSelect = BIT(12)+BIT(13),
|
|
kK2RegMaskEnhancedCSCEnable = BIT(29),
|
|
kK2RegMaskEnhancedCSC4KMode = BIT(28),
|
|
|
|
kK2RegMaskEnhancedCSCKeySource = BIT(0)+BIT(1),
|
|
kK2RegMaskEnhancedCSCKeyOutputRange = BIT(4),
|
|
|
|
// Xena2K and Konax video processing
|
|
kK2RegMaskXena2FgVidProcInputControl = BIT(20)+BIT(21),
|
|
kK2RegMaskXena2BgVidProcInputControl = BIT(22)+BIT(23),
|
|
kK2RegMaskXena2VidProcMode = BIT(24)+BIT(25),
|
|
kK2RegMaskXena2VidProcSplitStd = BIT(28) + BIT(29) + BIT(30),
|
|
|
|
// 12(13 with sign) bit custom coefficients - backwards compatible with the 10(11 with sign) bit soft and hardware - jac
|
|
kK2RegMaskCustomCoefficient12BitLow = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12),
|
|
kK2RegMaskCustomCoefficient12BitHigh = BIT(14)+BIT(15)+BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)+BIT(24)+BIT(25)+BIT(26),
|
|
|
|
//kRegLTCStatusControl (see register 233 -- kRegLTCStatusControl)
|
|
kRegMaskLTC1InPresent = BIT(0),
|
|
kRegMaskLTC1InBypass = BIT(4),
|
|
kRegMaskLTC2InPresent = BIT(8),
|
|
kRegMaskLTC2InBypass = BIT(12),
|
|
|
|
// kRegAudioOutputSourceMap
|
|
kRegMaskMonitorSource = BIT(21)+BIT(20)+BIT(19)+BIT(18)+BIT(17)+BIT(16),
|
|
kRegMaskHDMIOutAudioSource = BIT(31)+BIT(30)+BIT(29)+BIT(28)+BIT(27)+BIT(26)+BIT(25)+BIT(24),
|
|
|
|
// kRegSDIInput3GStatus
|
|
kRegMaskSDIIn3GbpsMode = BIT(0),
|
|
kRegMaskSDIIn3GbpsSMPTELevelBMode = BIT(1),
|
|
kRegMaskSDIIn1LevelBtoLevelA = BIT(2),
|
|
kRegMaskSDIIn16GbpsMode = BIT(6),
|
|
kRegMaskSDIIn112GbpsMode = BIT(7),
|
|
kRegMaskSDIInVPIDLinkAValid = BIT(4),
|
|
kRegMaskSDIInVPIDLinkBValid = BIT(5),
|
|
kRegMaskSDIIn23GbpsMode = BIT(8),
|
|
kRegMaskSDIIn23GbpsSMPTELevelBMode = BIT(9),
|
|
kRegMaskSDIIn2LevelBtoLevelA = BIT(10),
|
|
kRegMaskSDIIn2VPIDLinkAValid = BIT(12),
|
|
kRegMaskSDIIn2VPIDLinkBValid = BIT(13),
|
|
kRegMaskSDIIn26GbpsMode = BIT(14),
|
|
kRegMaskSDIIn212GbpsMode = BIT(15),
|
|
kRegMaskSDIInTsiMuxSyncFail = BIT(16)+BIT(17)+BIT(18)+BIT(19),
|
|
|
|
|
|
// kRegSDIInput3GStatus2
|
|
kRegMaskSDIIn33GbpsMode = BIT(0),
|
|
kRegMaskSDIIn33GbpsSMPTELevelBMode = BIT(1),
|
|
kRegMaskSDIIn3LevelBtoLevelA = BIT(2),
|
|
kRegMaskSDIIn3VPIDLinkAValid = BIT(4),
|
|
kRegMaskSDIIn3VPIDLinkBValid = BIT(5),
|
|
kRegMaskSDIIn36GbpsMode = BIT(6),
|
|
kRegMaskSDIIn312GbpsMode = BIT(7),
|
|
kRegMaskSDIIn43GbpsMode = BIT(8),
|
|
kRegMaskSDIIn43GbpsSMPTELevelBMode = BIT(9),
|
|
kRegMaskSDIIn4LevelBtoLevelA = BIT(10),
|
|
kRegMaskSDIIn4VPIDLinkAValid = BIT(12),
|
|
kRegMaskSDIIn4VPIDLinkBValid = BIT(13),
|
|
kRegMaskSDIIn46GbpsMode = BIT(14),
|
|
kRegMaskSDIIn412GbpsMode = BIT(15),
|
|
|
|
// kRegSDI5678Input3GStatus
|
|
kRegMaskSDIIn53GbpsMode = BIT(0),
|
|
kRegMaskSDIIn53GbpsSMPTELevelBMode = BIT(1),
|
|
kRegMaskSDIIn5LevelBtoLevelA = BIT(2),
|
|
kRegMaskSDIIn5VPIDLinkAValid = BIT(4),
|
|
kRegMaskSDIIn5VPIDLinkBValid = BIT(5),
|
|
kRegMaskSDIIn56GbpsMode = BIT(6),
|
|
kRegMaskSDIIn512GbpsMode = BIT(7),
|
|
kRegMaskSDIIn63GbpsMode = BIT(8),
|
|
kRegMaskSDIIn63GbpsSMPTELevelBMode = BIT(9),
|
|
kRegMaskSDIIn6LevelBtoLevelA = BIT(10),
|
|
kRegMaskSDIIn6VPIDLinkAValid = BIT(12),
|
|
kRegMaskSDIIn6VPIDLinkBValid = BIT(13),
|
|
kRegMaskSDIIn66GbpsMode = BIT(14),
|
|
kRegMaskSDIIn612GbpsMode = BIT(15),
|
|
kRegMaskSDIIn73GbpsMode = BIT(16),
|
|
kRegMaskSDIIn73GbpsSMPTELevelBMode = BIT(17),
|
|
kRegMaskSDIIn7LevelBtoLevelA = BIT(18),
|
|
kRegMaskSDIIn7VPIDLinkAValid = BIT(20),
|
|
kRegMaskSDIIn7VPIDLinkBValid = BIT(21),
|
|
kRegMaskSDIIn76GbpsMode = BIT(22),
|
|
kRegMaskSDIIn712GbpsMode = BIT(23),
|
|
kRegMaskSDIIn83GbpsMode = BIT(24),
|
|
kRegMaskSDIIn83GbpsSMPTELevelBMode = BIT(25),
|
|
kRegMaskSDIIn8LevelBtoLevelA = BIT(26),
|
|
kRegMaskSDIIn8VPIDLinkAValid = BIT(28),
|
|
kRegMaskSDIIn8VPIDLinkBValid = BIT(29),
|
|
kRegMaskSDIIn86GbpsMode = BIT(30),
|
|
kRegMaskSDIIn812GbpsMode = BIT(31),
|
|
|
|
// kRegVPID
|
|
kRegMaskVPIDBitDepth = BIT(1)+BIT(0),
|
|
kRegmaskVPIDLuminance = BIT(4),
|
|
kRegMaskVPIDChannel = BIT(7)+BIT(6),
|
|
kRegMaskVPIDDualLinkChannel = BIT(7)+BIT(6)+BIT(5),
|
|
kRegMaskVPIDSampling = BIT(11)+BIT(10)+BIT(9)+BIT(8),
|
|
kRegMaskVPIDColorimetry = BIT(12)+BIT(13),
|
|
kRegMaskVPIDColorimetryAltLow = BIT(12),
|
|
kRegMaskVPIDImageAspect16x9Alt = BIT(13),
|
|
kRegMaskVPIDHorizontalSampling = BIT(14),
|
|
kRegMaskVPIDColorimetryAltHigh = BIT(15),
|
|
kRegMaskVPIDImageAspect16x9 = BIT(15),
|
|
kRegMaskVPIDPictureRate = BIT(19)+BIT(18)+BIT(17)+BIT(16),
|
|
kRegMaskVPIDXferChars = BIT(20)+BIT(21),
|
|
kRegMaskVPIDProgressivePicture = BIT(22),
|
|
kRegMaskVPIDProgressiveTransport = BIT(23),
|
|
kRegMaskVPIDStandard = BIT(24)+BIT(25)+BIT(26)+BIT(27)+BIT(28)+BIT(29)+BIT(30)+BIT(31),
|
|
kRegMaskVPIDVersionID = BIT(31),
|
|
#if !defined (NTV2_DEPRECATE)
|
|
kRegMaskVPIDDynamicRange = BIT(4)+BIT(3),
|
|
#endif
|
|
|
|
//Borg Test Pattern Generator
|
|
kRegMaskTPGChromaSample = BIT(9)+BIT(8)+BIT(7)+BIT(6)+BIT(5)+BIT(4)+BIT(3)+BIT(2)+BIT(1)+BIT(0),
|
|
kRegMaskTPGLineBuffer = BIT(11)+BIT(10),
|
|
kRegMaskTPGFrameRate = BIT(15)+BIT(14)+BIT(13)+BIT(12),
|
|
kRegMaskTPGLuma = BIT(25)+BIT(24)+BIT(23)+BIT(22)+BIT(21)+BIT(20)+BIT(19)+BIT(18)+BIT(17)+BIT(16),
|
|
kRegMaskTPGMulti = BIT(26),
|
|
kRegMaskTPGReset = BIT(27),
|
|
kRegMaskTPGStandard = BIT(30) + BIT(29) + BIT(28),
|
|
kRegMaskTPGWriteEnable = BIT(31),
|
|
|
|
// Bones Actel Registers
|
|
kRegMaskCFS1 = BIT(0) + BIT(1),
|
|
kRegMaskCFS2 = BIT(2) + BIT(3) ,
|
|
|
|
// Audio Channel Control 2 or 8 channel playback mask
|
|
kRegAudControlMask = BIT(5),
|
|
|
|
// Stereo Compressor Control
|
|
kRegMaskStereoCompressorOutputMode = BIT(3)+BIT(2)+BIT(1)+BIT(0),
|
|
kRegMaskStereoCompressorFlipMode = BIT(7)+BIT(6)+BIT(5)+BIT(4),
|
|
kRegMaskStereoCompressorFlipLeftHorz = BIT(4),
|
|
kRegMaskStereoCompressorFlipLeftVert = BIT(5),
|
|
kRegMaskStereoCompressorFlipRightHorz = BIT(6),
|
|
kRegMaskStereoCompressorFlipRightVert = BIT(7),
|
|
kRegMaskStereoCompressorFormat = BIT(10)+BIT(9)+BIT(8),
|
|
kRegMaskStereoCompressorLeftSource = BIT(23)+BIT(22)+BIT(21)+BIT(20)+BIT(19)+BIT(18)+BIT(17)+BIT(16),
|
|
kRegMaskStereoCompressorRightSource = BIT(31)+BIT(30)+BIT(29)+BIT(28)+BIT(27)+BIT(26)+BIT(25)+BIT(24),
|
|
|
|
// SDI Direction Control
|
|
kRegMaskSDI5Transmit = BIT(24),
|
|
kRegMaskSDI6Transmit = BIT(25),
|
|
kRegMaskSDI7Transmit = BIT(26),
|
|
kRegMaskSDI8Transmit = BIT(27),
|
|
kRegMaskSDI1Transmit = BIT(28),
|
|
kRegMaskSDI2Transmit = BIT(29),
|
|
kRegMaskSDI3Transmit = BIT(30),
|
|
kRegMaskSDI4Transmit = BIT(31),
|
|
|
|
// SDI watchdog control
|
|
kRegMaskSDIRelayControl12 = BIT(0),
|
|
kRegMaskSDIRelayControl34 = BIT(1),
|
|
kRegMaskSDIWatchdogEnable12 = BIT(4),
|
|
kRegMaskSDIWatchdogEnable34 = BIT(5),
|
|
kRegMaskSDIRelayPosition12 = BIT(8),
|
|
kRegMaskSDIRelayPosition34 = BIT(9),
|
|
kRegMaskSDIWatchdogStatus = BIT(12),
|
|
|
|
// 4K Down Convert
|
|
kRegMask4KDCRGBMode = BIT(0),
|
|
kRegMask4KDCYCC444Mode = BIT(1),
|
|
kRegMask4KDCPSFInMode = BIT(2),
|
|
kRegMask4KDCPSFOutMode = BIT(3),
|
|
|
|
// Quadrant Rasterizer Control
|
|
kRegMaskRasterMode = BIT(0)+BIT(1),
|
|
kRegMaskTsiIO = BIT(2),
|
|
kRegMaskRasterLevelB = BIT(4),
|
|
kRegMaskRasterDecimate = BIT(8),
|
|
|
|
// kRegRXSDI1Status, kRegRXSDI2Status, etc
|
|
kRegMaskSDIInUnlockCount = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskSDIInLocked = BIT(16),
|
|
kRegMaskSDIInVpidValidA = BIT(20),
|
|
kRegMaskSDIInVpidValidB = BIT(21),
|
|
kRegMaskSDIInTRSError = BIT(24),
|
|
|
|
kRegMaskSDIInCRCErrorCountA = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskSDIInCRCErrorCountB = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMask2MFrameSize = BIT(4)+BIT(3)+BIT(2)+BIT(1)+BIT(0),
|
|
kRegMaskChannelBar = BIT(24)+BIT(23)+BIT(22)+BIT(21)+BIT(20)+BIT(19)+BIT(18)+BIT(17)+BIT(16),
|
|
|
|
kRegMaskPCMControlA1P1_2 = BIT(0),
|
|
kRegMaskPCMControlA1P3_4 = BIT(1),
|
|
kRegMaskPCMControlA1P5_6 = BIT(2),
|
|
kRegMaskPCMControlA1P7_8 = BIT(3),
|
|
kRegMaskPCMControlA1P9_10 = BIT(4),
|
|
kRegMaskPCMControlA1P11_12 = BIT(5),
|
|
kRegMaskPCMControlA1P13_14 = BIT(6),
|
|
kRegMaskPCMControlA1P15_16 = BIT(7),
|
|
|
|
kRegMaskPCMControlA2P1_2 = BIT(8),
|
|
kRegMaskPCMControlA2P3_4 = BIT(9),
|
|
kRegMaskPCMControlA2P5_6 = BIT(10),
|
|
kRegMaskPCMControlA2P7_8 = BIT(11),
|
|
kRegMaskPCMControlA2P9_10 = BIT(12),
|
|
kRegMaskPCMControlA2P11_12 = BIT(13),
|
|
kRegMaskPCMControlA2P13_14 = BIT(14),
|
|
kRegMaskPCMControlA2P15_16 = BIT(15),
|
|
|
|
kRegMaskPCMControlA3P1_2 = BIT(16),
|
|
kRegMaskPCMControlA3P3_4 = BIT(17),
|
|
kRegMaskPCMControlA3P5_6 = BIT(18),
|
|
kRegMaskPCMControlA3P7_8 = BIT(19),
|
|
kRegMaskPCMControlA3P9_10 = BIT(20),
|
|
kRegMaskPCMControlA3P11_12 = BIT(21),
|
|
kRegMaskPCMControlA3P13_14 = BIT(22),
|
|
kRegMaskPCMControlA3P15_16 = BIT(23),
|
|
|
|
kRegMaskPCMControlA4P1_2 = BIT(24),
|
|
kRegMaskPCMControlA4P3_4 = BIT(25),
|
|
kRegMaskPCMControlA4P5_6 = BIT(26),
|
|
kRegMaskPCMControlA4P7_8 = BIT(27),
|
|
kRegMaskPCMControlA4P9_10 = BIT(28),
|
|
kRegMaskPCMControlA4P11_12 = BIT(29),
|
|
kRegMaskPCMControlA4P13_14 = BIT(30),
|
|
kRegMaskPCMControlA4P15_16 = BIT(31),
|
|
|
|
kRegMaskPCMControlA5P1_2 = BIT(0),
|
|
kRegMaskPCMControlA5P3_4 = BIT(1),
|
|
kRegMaskPCMControlA5P5_6 = BIT(2),
|
|
kRegMaskPCMControlA5P7_8 = BIT(3),
|
|
kRegMaskPCMControlA5P9_10 = BIT(4),
|
|
kRegMaskPCMControlA5P11_12 = BIT(5),
|
|
kRegMaskPCMControlA5P13_14 = BIT(6),
|
|
kRegMaskPCMControlA5P15_16 = BIT(7),
|
|
|
|
kRegMaskPCMControlA6P1_2 = BIT(8),
|
|
kRegMaskPCMControlA6P3_4 = BIT(9),
|
|
kRegMaskPCMControlA6P5_6 = BIT(10),
|
|
kRegMaskPCMControlA6P7_8 = BIT(11),
|
|
kRegMaskPCMControlA6P9_10 = BIT(12),
|
|
kRegMaskPCMControlA6P11_12 = BIT(13),
|
|
kRegMaskPCMControlA6P13_14 = BIT(14),
|
|
kRegMaskPCMControlA6P15_16 = BIT(15),
|
|
|
|
kRegMaskPCMControlA7P1_2 = BIT(16),
|
|
kRegMaskPCMControlA7P3_4 = BIT(17),
|
|
kRegMaskPCMControlA7P5_6 = BIT(18),
|
|
kRegMaskPCMControlA7P7_8 = BIT(19),
|
|
kRegMaskPCMControlA7P9_10 = BIT(20),
|
|
kRegMaskPCMControlA7P11_12 = BIT(21),
|
|
kRegMaskPCMControlA7P13_14 = BIT(22),
|
|
kRegMaskPCMControlA7P15_16 = BIT(23),
|
|
|
|
kRegMaskPCMControlA8P1_2 = BIT(24),
|
|
kRegMaskPCMControlA8P3_4 = BIT(25),
|
|
kRegMaskPCMControlA8P5_6 = BIT(26),
|
|
kRegMaskPCMControlA8P7_8 = BIT(27),
|
|
kRegMaskPCMControlA8P9_10 = BIT(28),
|
|
kRegMaskPCMControlA8P11_12 = BIT(29),
|
|
kRegMaskPCMControlA8P13_14 = BIT(30),
|
|
kRegMaskPCMControlA8P15_16 = BIT(31),
|
|
|
|
kRegFanHiMask = BIT(16),
|
|
kRegThermalMask = BIT(17) + BIT(18) + BIT(19),
|
|
|
|
//kRegHDMIHDR.... 330-336
|
|
kRegMaskHDMIHDRGreenPrimaryX = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskHDMIHDRGreenPrimaryY = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskHDMIHDRBluePrimaryX = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskHDMIHDRBluePrimaryY = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskHDMIHDRRedPrimaryX = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskHDMIHDRRedPrimaryY = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskHDMIHDRWhitePointX = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskHDMIHDRWhitePointY = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskHDMIHDRMaxMasteringLuminance = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskHDMIHDRMinMasteringLuminance = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskHDMIHDRMaxContentLightLevel = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskHDMIHDRMaxFrameAverageLightLevel = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
|
|
kRegMaskHDMIHDRNonContantLuminance = BIT(0),
|
|
kRegMaskHDMIHDRDolbyVisionEnable = BIT(6),
|
|
kRegMaskHDMIHDREnable = BIT(7),
|
|
kRegMaskElectroOpticalTransferFunction = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23),
|
|
kRegMaskHDRStaticMetadataDescriptorID = BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
|
|
kRegMaskAudioMixerMainInputSelect = BIT(2) + BIT(1) + BIT(0),
|
|
kRegMaskAudioMixerAux1x2CHInput = BIT(6) + BIT(5) + BIT(4),
|
|
kRegMaskAudioMixerAux2x2CHInput = BIT(10) + BIT(9) + BIT(8),
|
|
kRegMaskAudioMixerChannelSelect = BIT(2) + BIT(1) + BIT(0),
|
|
kRegMaskAudioMixerOutputChannelsMute = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerOutputChannel1Mute = BIT(0),
|
|
kRegMaskAudioMixerOutputChannel2Mute = BIT(1),
|
|
kRegMaskAudioMixerOutputChannel3Mute = BIT(2),
|
|
kRegMaskAudioMixerOutputChannel4Mute = BIT(3),
|
|
kRegMaskAudioMixerOutputChannel5Mute = BIT(4),
|
|
kRegMaskAudioMixerOutputChannel6Mute = BIT(5),
|
|
kRegMaskAudioMixerOutputChannel7Mute = BIT(6),
|
|
kRegMaskAudioMixerOutputChannel8Mute = BIT(7),
|
|
kRegMaskAudioMixerOutputChannel9Mute = BIT(8),
|
|
kRegMaskAudioMixerOutputChannel10Mute = BIT(9),
|
|
kRegMaskAudioMixerOutputChannel11Mute = BIT(10),
|
|
kRegMaskAudioMixerOutputChannel12Mute = BIT(11),
|
|
kRegMaskAudioMixerOutputChannel13Mute = BIT(12),
|
|
kRegMaskAudioMixerOutputChannel14Mute = BIT(13),
|
|
kRegMaskAudioMixerOutputChannel15Mute = BIT(14),
|
|
kRegMaskAudioMixerOutputChannel16Mute = BIT(15),
|
|
kRegMaskAudioMixerMainInputEnable = BIT(16)+BIT(17),
|
|
kRegMaskAudioMixerAux1InputEnable = BIT(18)+BIT(19),
|
|
kRegMaskAudioMixerAux2InputEnable = BIT(20)+BIT(21),
|
|
kRegMaskAudioMixerAux1Channel1Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerAux1Channel2Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerAux2Channel1Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerAux2Channel2Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerMainChannel1Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerMainChannel2Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerMainChannel3Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerMainChannel4Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerMainChannel5Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerMainChannel6Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerMainChannel7Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerMainChannel8Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerMainChannel9Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerMainChannel10Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerMainChannel11Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerMainChannel12Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerMainChannel13Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerMainChannel14Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerMainChannel15Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerMainChannel16Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerMainMixedOutputChannel1Level = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerMainMixedOutputChannel2Level = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerInputLeftLevel = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kRegMaskAudioMixerInputRightLevel = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
kRegMaskAudioMixerLevelSampleCount = BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
|
|
kRegMaskRotaryEncoderValue = BIT(7)+BIT(6)+BIT(5)+BIT(4)+BIT(3)+BIT(2)+BIT(1)+BIT(0),
|
|
kRegMaskRotaryEncoderGain = BIT(13)+BIT(12)+BIT(11)+BIT(10)+BIT(9)+BIT(8),
|
|
|
|
kRegMaskLUTAddress = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15) + \
|
|
BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29),
|
|
kRegMaskLUTLoad = BIT(31),
|
|
|
|
kRegMaskMRStandard = BIT(3) + BIT(2) + BIT(1) + BIT(0),
|
|
kRegMaskMRFrameLocation = BIT(15) + BIT(14) + BIT(13) + BIT(12) + BIT(11) + BIT(10) + BIT(9) + BIT(8),
|
|
kRegMaskMRBypass = BIT(20),
|
|
kRegMaskMREnable = BIT(24),
|
|
kRegMaskMRSupport = BIT(2) + BIT(1) + BIT(0)
|
|
|
|
#if !defined (NTV2_DEPRECATE)
|
|
,
|
|
// kRegSDIInput3GStatus
|
|
kLHIRegMaskSDIIn3GbpsMode = BIT(0),
|
|
kLHIRegMaskSDIIn3GbpsSMPTELevelBMode = BIT(1),
|
|
kLHIRegMaskSDIInVPIDLinkAValid = BIT(4),
|
|
kLHIRegMaskSDIInVPIDLinkBValid = BIT(5),
|
|
kLHIRegMaskSDIIn23GbpsMode = BIT(8),
|
|
kLHIRegMaskSDIIn23GbpsSMPTELevelBMode = BIT(9),
|
|
kLHIRegMaskSDIIn2VPIDLinkAValid = BIT(12),
|
|
kLHIRegMaskSDIIn2VPIDLinkBValid = BIT(13),
|
|
|
|
// kRegSDIInput3GStatus2
|
|
kLHIRegMaskSDIIn33GbpsMode = BIT(0),
|
|
kLHIRegMaskSDIIn33GbpsSMPTELevelBMode = BIT(1),
|
|
kLHIRegMaskSDIIn3VPIDLinkAValid = BIT(4),
|
|
kLHIRegMaskSDIIn3VPIDLinkBValid = BIT(5),
|
|
kLHIRegMaskSDIIn43GbpsMode = BIT(8),
|
|
kLHIRegMaskSDIIn43GbpsSMPTELevelBMode = BIT(9),
|
|
kLHIRegMaskSDIIn4VPIDLinkAValid = BIT(12),
|
|
kLHIRegMaskSDIIn4VPIDLinkBValid = BIT(13),
|
|
//
|
|
// Borg Fusion Registers
|
|
//
|
|
|
|
// Boot FPGA and BoardID
|
|
kRegMaskBorgFusionBootFPGAVer = BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kRegMaskBorgFusionBoardID = BIT(0)+BIT(1)+BIT(2),
|
|
|
|
// Codec and convert FPGA configuration control
|
|
kRegMaskBorgFusionCodecFPGAProgram = BIT(0),
|
|
kRegMaskBorgFusionCodecFPGAInit = BIT(1),
|
|
kRegMaskBorgFusionCodecFPGADone = BIT(2),
|
|
|
|
kRegMaskBorgFusionConvertFPGAProgram = BIT(4),
|
|
kRegMaskBorgFusionConvertFPGAInit = BIT(5),
|
|
kRegMaskBorgFusionConvertFPGADone = BIT(6),
|
|
|
|
// Panel Push buttons debounced and SATA drive present state
|
|
kRegMaskBorgFusionPushButtonSlotDebounced = BIT(0),
|
|
kRegMaskBorgFusionPushButtonAdjustDownDebounced = BIT(1),
|
|
kRegMaskBorgFusionPushButtonAdjustUpDebounced = BIT(2),
|
|
kRegMaskBorgFusionPushButtonDeleteClipDebounced = BIT(3),
|
|
kRegMaskBorgFusionPushButtonSelectDownDebounced = BIT(4),
|
|
kRegMaskBorgFusionPushButtonSelectUpDebounced = BIT(5),
|
|
kRegMaskBorgFusionPushButtonFastFwdDebounced = BIT(6),
|
|
kRegMaskBorgFusionPushButtonRecordDebounced = BIT(7),
|
|
kRegMaskBorgFusionPushButtonPlayDebounced = BIT(8),
|
|
kRegMaskBorgFusionPushButtonStopDebounced = BIT(9),
|
|
kRegMaskBorgFusionPushButtonRewindDebounced = BIT(10),
|
|
kRegMaskBorgFusionPushButtonMediaDebounced = BIT(11),
|
|
kRegMaskBorgFusionPushButtonConfigDebounced = BIT(12),
|
|
kRegMaskBorgFusionPushButtonStatusDebounced = BIT(13),
|
|
kRegMaskBorgFusionPushButtonSATADrivePresentDebounced = BIT(14),
|
|
kRegMaskBorgFusionPushButtonPowerDebounced = BIT(15),
|
|
|
|
// Panel Push buttons and SATA drive present changes
|
|
kRegMaskBorgFusionPushButtonSlotChange = BIT(0),
|
|
kRegMaskBorgFusionPushButtonAdjustDownChange = BIT(1),
|
|
kRegMaskBorgFusionPushButtonAdjustUpChange = BIT(2),
|
|
kRegMaskBorgFusionPushButtonDeleteClipChange = BIT(3),
|
|
kRegMaskBorgFusionPushButtonSelectDownChange = BIT(4),
|
|
kRegMaskBorgFusionPushButtonSelectUpChange = BIT(5),
|
|
kRegMaskBorgFusionPushButtonFastFwdChange = BIT(6),
|
|
kRegMaskBorgFusionPushButtonRecordChange = BIT(7),
|
|
kRegMaskBorgFusionPushButtonPlayChange = BIT(8),
|
|
kRegMaskBorgFusionPushButtonStopChange = BIT(9),
|
|
kRegMaskBorgFusionPushButtonRewindChange = BIT(10),
|
|
kRegMaskBorgFusionPushButtonMediaChange = BIT(11),
|
|
kRegMaskBorgFusionPushButtonConfigChange = BIT(12),
|
|
kRegMaskBorgFusionPushButtonStatusChange = BIT(13),
|
|
kRegMaskBorgFusionPushButtonSATADrivePresentChange = BIT(14),
|
|
kRegMaskBorgFusionPushButtonPowerButtonChange = BIT(15),
|
|
|
|
// LED Pulse Width Modulation Threshholds
|
|
kRegMaskBorgFusionPWMThreshExpressCard2 = BIT(0)+BIT(1)+BIT(2)+BIT(3),
|
|
kRegMaskBorgFusionPWMThreshExpressCard1 = BIT(4)+BIT(5)+BIT(6)+BIT(7),
|
|
kRegMaskBorgFusionPWMThreshPower = BIT(8)+BIT(9)+BIT(10)+BIT(11),
|
|
kRegMaskBonesFusionPWMThreshLCDBacklightLED = BIT(12)+BIT(13)+BIT(14)+BIT(15),
|
|
|
|
// Power control - System
|
|
kRegMaskBorgFusionPowerCtrlWiFiReset = BIT(0),
|
|
kRegMaskBorgFusionPowerCtrlFirewirePower = BIT(1),
|
|
kRegMaskBorgFusionPowerCtrlGigEthReset = BIT(2),
|
|
kRegMaskBorgFusionPowerCtrlPCIExpClockStop = BIT(3),
|
|
|
|
// Power control - Storage devices - Borg Fusion
|
|
kRegMaskBorgFusionPowerCtrlPCIExpCard1_3_3vPower = BIT(8), // Express Card 1 3.3v power
|
|
kRegMaskBorgFusionPowerCtrlPCIExpCard1_1_5vPower = BIT(9), // Express Card 1 1.5v power
|
|
kRegMaskBorgFusionPowerCtrlPCIExpCard2_3_3vPower = BIT(10), // Express Card 2 3.3v power
|
|
kRegMaskBorgFusionPowerCtrlPCIExpCard2_1_5vPower = BIT(11), // Express Card 2 1.5v power
|
|
kRegMaskBorgFusionPowerCtrlSata_12vPower = BIT(12), // SATA Drive 12v power
|
|
|
|
// Power control - Storage devices - Bones Actel
|
|
kRegMaskBonesActelPowerCtrlCFSlot2_BridgeReset = BIT(8), // Bones Actel CF Slot 2 (CPU) Bridge Reset
|
|
kRegMaskBonesActelPowerCtrlCFSlot2_Power = BIT(9), // Bones Actel CF Slot 2 (CPU) Power
|
|
kRegMaskBonesActelPowerCtrlCFSlot1_Power = BIT(10), // Bones Actel CF Slot 1 (VIDeo) Power
|
|
kRegMaskBonesActelPowerCtrlCFSlot1_BridgeReset = BIT(11), // Bones Actel CF Slot 1 (VIDeo) Bridge Reset
|
|
|
|
// Power control - Storage devices - Barclay Actel Fusion
|
|
kRegMaskBarclayFusionPowerCtrlPS1Active = BIT(6), // Barclay Fusion Power Supply 1 active bit
|
|
kRegMaskBarclayFusionPowerCtrlPS2Active = BIT(5), // Barclay Fusion Power Supply 2 active bit
|
|
|
|
kRegMaskBarclayFusionIdentifyLEDCtrl = BIT(1), //Barclay Identify LED On/Off bit, Rear LED //RS
|
|
|
|
// Power control - Pushbutton LEDs
|
|
kRegMaskBorgFusionPowerCtrlPCIExpCard2LED = BIT(13),
|
|
kRegMaskBorgFusionPowerCtrlPCIExpCard1LED = BIT(14),
|
|
kRegMaskBorgFusionPowerCtrlPowerButtonLED = BIT(15),
|
|
|
|
// IRQ3n Interrupt control
|
|
kRegMaskBorgFusionIRQ3nIntCtrlPushButtonChangeEnable = BIT(0),
|
|
kRegMaskBorgFusionIRQ3nIntCtrlInputVoltageLow9vEnable = BIT(1),
|
|
kRegMaskBorgFusionIRQ3nIntCtrlDisplayFIFOFullEnable = BIT(2),
|
|
kRegMaskBorgFusionIRQ3nIntCtrlSATAPresentChangeEnable = BIT(3),
|
|
kRegMaskBorgFusionIRQ3nIntCtrlTemp1HighEnable = BIT(4),
|
|
kRegMaskBorgFusionIRQ3nIntCtrlTemp2HighEnable = BIT(5),
|
|
kRegMaskBorgFusionIRQ3nIntCtrlPowerButtonChangeEnable = BIT(6),
|
|
|
|
// IRQ3n Interrupt source
|
|
kRegMaskBorgFusionIRQ3nIntSrcPushButtonChange= BIT(0),
|
|
kRegMaskBorgFusionIRQ3nIntSrcInputVoltageLow9v= BIT(1),
|
|
kRegMaskBorgFusionIRQ3nIntSrcDisplayFIFOFull= BIT(2),
|
|
kRegMaskBorgFusionIRQ3nIntSrcSATAPresentChange= BIT(3),
|
|
kRegMaskBorgFusionIRQ3nIntSrcTemp1High= BIT(4),
|
|
kRegMaskBorgFusionIRQ3nIntSrcTemp2High= BIT(5),
|
|
kRegMaskBorgFusionIRQ3nIntSrcPowerButtonChange= BIT(6),
|
|
|
|
// Noritake Display Control/Status
|
|
kRegMaskBorgFusionDisplayCtrlReset = BIT (0),
|
|
kRegMaskBorgFusionDisplayStatusBusyRaw = BIT (1), // Not needed by CPU, used internally by FPGA
|
|
kRegMaskBorgFusionDisplayStatusInterfaceBusy = BIT (7), // FIFO full
|
|
|
|
// Analog ADC flags - battery
|
|
kRegMaskBorgFusionAnalogFlagsPowerLTE9v = BIT(0), // +12 v supply <= 9.0 v battery critical
|
|
kRegMaskBorgFusionAnalogFlagsPowerLTE10v = BIT(1), // +12 v supply <= 10.0 v battery depleting
|
|
kRegMaskBorgFusionAnalogFlagsPowerLTE11v = BIT(2), // +12 v supply <= 11.0 v battery depleting
|
|
kRegMaskBorgFusionAnalogFlagsPowerGTE13v = BIT(3), // +12 v supply >= 13.0 v battery charging
|
|
|
|
// Analog ADC flags - temperature sensor
|
|
kRegMaskBorgFusionAnalogFlagsPowerTemp1High = BIT(4), // Temp sensor 1 > 65 C
|
|
kRegMaskBorgFusionAnalogFlagsPowerTemp2High = BIT(5), // Temp sensor 2 > 65 C
|
|
|
|
// Bones Actel Compact Flash Slot Debounced Card Present
|
|
kRegMaskBonesActelCFSlot1_Present = BIT(1)+BIT(0),
|
|
kRegMaskBonesActelCFSlot2_Present = BIT(3)+BIT(2),
|
|
|
|
// Bones Actel Compact Flash Slot Changes Present
|
|
kRegMaskBonesActelCFSlot1_Changes = BIT(1)+BIT(0),
|
|
kRegMaskBonesActelCFSlot2_Changes = BIT(3)+BIT(2),
|
|
// Pan (2K crop) - Xena 2
|
|
kRegMaskPanMode = BIT(30) + BIT(31),
|
|
kRegMaskPanOffsetH = BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7)+BIT(8)+BIT(9)+BIT(10)+BIT(11),
|
|
kRegMaskPanOffsetV = BIT(12)+BIT(13)+BIT(14)+BIT(15)+BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)
|
|
#endif // !defined (NTV2_DEPRECATE)
|
|
|
|
} RegisterMask;
|
|
|
|
typedef enum
|
|
{
|
|
// Global Control
|
|
kRegShiftFrameRate = 0,
|
|
kRegShiftFrameRateHiBit = 22,
|
|
kRegShiftGeometry = 3,
|
|
kRegShiftStandard = 7,
|
|
kRegShiftRefSource = 10,
|
|
kRegShiftRefInputVoltage = 12,
|
|
kRegShiftSmpte372 = 15,
|
|
kRegShiftLED = 16,
|
|
kRegShiftRegClocking = 20,
|
|
kRegShiftDualLinkInput = 23,
|
|
kRegShiftQuadTsiEnable = 24,
|
|
kRegShiftBankSelect = 25,
|
|
kRegShiftDualLinKOutput = 27,
|
|
kRegShiftRP188ModeCh1 = 28,
|
|
kRegShiftRP188ModeCh2 = 29,
|
|
kRegShiftCCHostAccessBankSelect = 30,
|
|
|
|
// Global Control 2
|
|
kRegShiftRefSource2 = 0,
|
|
kRegShiftPCRReferenceEnable = 1,
|
|
kRegShiftQuadMode = 3,
|
|
kRegShiftAud1PlayCapMode = 4,
|
|
kRegShiftAud2PlayCapMode = 5,
|
|
kRegShiftAud3PlayCapMode = 6,
|
|
kRegShiftAud4PlayCapMode = 7,
|
|
kRegShiftAud5PlayCapMode = 8,
|
|
kRegShiftAud6PlayCapMode = 9,
|
|
kRegShiftAud7PlayCapMode = 10,
|
|
kRegShiftAud8PlayCapMode = 11,
|
|
kRegShiftQuadMode2 = 12,
|
|
kRegShiftSmpte372Enable4 = 13,
|
|
kRegShiftSmpte372Enable6 = 14,
|
|
kRegShiftSmpte372Enable8 = 15,
|
|
kRegShiftIndependentMode = 16,
|
|
kRegShift2MFrameSupport = 17,
|
|
kRegShiftAudioMixerPresent = 18,
|
|
kRegShiftIsDNXIV = 19,
|
|
kRegShift425FB12 = 20,
|
|
kRegShift425FB34 = 21,
|
|
kRegShift425FB56 = 22,
|
|
kRegShift425FB78 = 23,
|
|
kRegShiftRP188ModeCh3 = 28,
|
|
kRegShiftRP188ModeCh4 = 29,
|
|
kRegShiftRP188ModeCh5 = 30,
|
|
kRegShiftRP188ModeCh6 = 31,
|
|
kRegShiftRP188ModeCh7 = 26,
|
|
kRegShiftRP188ModeCh8 = 27,
|
|
|
|
// kRegGlobalControl3 (reg 108)
|
|
kRegShiftAnalogIOControl = 0,
|
|
kRegShiftQuadQuadMode = 2,
|
|
kRegShiftQuadQuadMode2 = 3,
|
|
kRegShiftQuadQuadSquaresMode = 4,
|
|
kRegShiftVUMeterSelect = 5,
|
|
kRegShiftFramePulseEnable = 6,
|
|
kRegShiftFramePulseRefSelect = 8,
|
|
|
|
// Audio Control 2
|
|
kRegShiftAud1RateHigh = 0,
|
|
kRegShiftAud2RateHigh = 1,
|
|
kRegShiftAud3RateHigh = 2,
|
|
kRegShiftAud4RateHigh = 3,
|
|
kRegShiftAud5RateHigh = 4,
|
|
kRegShiftAud6RateHigh = 5,
|
|
kRegShiftAud7RateHigh = 6,
|
|
kRegShiftAud8RateHigh = 7,
|
|
|
|
// Channel Control - kRegCh1Control, kRegCh2Control, kRegCh3Control, kRegCh4Control
|
|
kRegShiftMode = 0,
|
|
kRegShiftFrameFormat = 1,
|
|
kRegShiftFrameFormatHiBit = 6, // KAM
|
|
kRegShiftAlphaFromInput2 = 5,
|
|
kRegShiftChannelDisable = 7,
|
|
kRegShiftWriteBack = 8,
|
|
kRegShiftFrameOrientation = 10,
|
|
kRegShiftQuarterSizeMode = 11,
|
|
kRegShiftFrameBufferMode = 12,
|
|
kKHRegShiftDownconvertInput = 14,
|
|
kLSRegShiftVideoInputSelect = 15,
|
|
kRegShiftDitherOn8BitInput = 16,
|
|
kRegShiftQuality = 17,
|
|
kRegShiftEncodeAsPSF = 18,
|
|
kK2RegShiftFrameSize = 20,
|
|
kRegShiftChannelCompressed = 22,
|
|
kRegShiftRGB8b10bCvtMode = 23,
|
|
kRegShiftVBlankRGBRangeMode = 24, // Deprecated
|
|
kRegShiftVBlankRGBRange = 24,
|
|
kRegShiftQuality2 = 25,
|
|
kRegCh1BlackOutputShift = 27, // KiPro bit set results in black output video and muted audio in capture mode, black output video in playback
|
|
kRegShiftSonySRExpressBit = 28,
|
|
kRegShiftFrameSizeSetBySW = 29,
|
|
kRegShiftVidProcVANCShift = 31,
|
|
|
|
// Video Crosspoint Control
|
|
kRegShiftVidXptFGVideo = 0,
|
|
kRegShiftVidXptBGVideo = 4,
|
|
kRegShiftVidXptFGKey = 8,
|
|
kRegShiftVidXptBGKey = 12,
|
|
kRegShiftVidXptSecVideo = 16,
|
|
|
|
// Video Processing Control
|
|
kRegShiftVidProcMux1 = 0,
|
|
kRegShiftVidProcMux2 = 2,
|
|
kRegShiftVidProcMux3 = 4,
|
|
kRegShiftVidProcMux4 = 6,
|
|
kRegShiftVidProcMux5 = 8,
|
|
kRegShiftVidProcLimiting = 11,
|
|
kRegShiftVidProcVancSource = 13,
|
|
kRegShiftVidProcRGBRange = 14,
|
|
kRegShiftVidProcFGMatteEnable = 18,
|
|
kRegShiftVidProcBGMatteEnable = 19,
|
|
kRegShiftVidProcFGControl = 20,
|
|
kRegShiftVidProcBGControl = 22,
|
|
kRegShiftVidProcMode = 24,
|
|
kRegShiftVidProcRGBModeSupported = 26,
|
|
kRegShiftVidProcSyncFail = 27,
|
|
kRegShiftVidProcSplitStd = 28,
|
|
kRegShiftVidProcSubtitleEnable = 31,
|
|
|
|
|
|
// Note: See more bitfields for this register below, in the 'Xena2K and Konax Video Processing.' section
|
|
|
|
// kRegStatus
|
|
kRegShiftHardwareVersion = 0,
|
|
kRegShiftFPGAVersion = 4,
|
|
kRegShiftLTCInPresent = 17,
|
|
|
|
// Video Interrupt Control
|
|
kRegShiftIntEnableMask = 0,
|
|
|
|
// Audio Control
|
|
kRegShiftCaptureEnable = 0,
|
|
kRegShiftNumBits = 1, // shouldn't this be 2?
|
|
kRegShiftOutputTone = 1,
|
|
kRegShift20BitMode = 2,
|
|
kRegShiftLoopBack = 3,
|
|
kRegShiftAudioTone = 7,
|
|
kRegShiftResetAudioInput = 8,
|
|
kRegShiftResetAudioOutput = 9,
|
|
kRegShiftInputStartAtVBI = 10, // New in 15.6
|
|
kRegShiftPauseAudio = 11,
|
|
kRegShiftEmbeddedOutputMuteCh1 = 12, // added for FS1
|
|
kRegShiftEmbeddedOutputSupressCh1 = 13, // added for FS1 but available on other boards
|
|
kRegShiftOutputStartAtVBI = 14, // New in 15.6
|
|
kRegShiftEmbeddedOutputSupressCh2 = 15, // added for FS1 but available on other boards
|
|
kRegShiftNumChannels = 16,
|
|
kRegShiftEmbeddedOutputMuteCh2 = 17, // added for FS1
|
|
kRegShiftAudioRate = 18,
|
|
kRegShiftEncodedAudioMode = 19,
|
|
kRegShiftAudio16Channel = 20,
|
|
kRegShiftMultiLinkAudio = 23,
|
|
kRegShiftAudio8Channel = kRegShiftMultiLinkAudio,
|
|
kK2RegShiftKBoxAnalogMonitor = 24,
|
|
kK2RegShiftKBoxAudioInputSelect = 26,
|
|
kK2RegShiftKBoxDetect = 27,
|
|
kK2RegShiftBOCableDetect = 28,
|
|
kK2RegShiftAudioLevel = 29,
|
|
kK2RegShiftAverageAudioLevel = 0,
|
|
kFS1RegShiftAudioLevel = 29,
|
|
kK2RegShiftAudioBufferSize = 31,
|
|
kLHRegShiftResetAudioDAC = 31,
|
|
|
|
// Audio Source Select
|
|
kRegShiftAudioSource = 0,
|
|
kRegShiftEmbeddedAudioInput = 16,
|
|
kRegShiftAudioAutoErase = 19,
|
|
kRegShiftAnalogHDMIvsAES = 20,
|
|
kRegShift3GbSelect = 21,
|
|
kRegShiftEmbeddedAudioClock = 22,
|
|
kRegShiftEmbeddedAudioInput2 = 23,
|
|
kRegShiftAnalogAudioInGain = 24,
|
|
kRegShiftAnalogAudioInJack = 25,
|
|
|
|
kRegShiftLossOfInput = 11,
|
|
|
|
// Input Status
|
|
kRegShiftInput1FrameRate = 0,
|
|
kRegShiftInput1Geometry = 4,
|
|
kRegShiftInput1Progressive = 7,
|
|
kRegShiftInput2FrameRate = 8,
|
|
kRegShiftInput2Geometry = 12,
|
|
kRegShiftInput2Progressive = 15,
|
|
kRegShiftReferenceFrameRate = 16,
|
|
kRegShiftReferenceFrameLines = 20,
|
|
kRegShiftReferenceProgessive = 23,
|
|
kRegShiftAESCh12Present = 24,
|
|
kRegShiftAESCh34Present = 25,
|
|
kRegShiftAESCh56Present = 26,
|
|
kRegShiftAESCh78Present = 27,
|
|
kRegShiftInput1FrameRateHigh = 28,
|
|
kRegShiftInput2FrameRateHigh = 29,
|
|
kRegShiftInput1GeometryHigh = 30,
|
|
kRegShiftInput2GeometryHigh = 31,
|
|
|
|
// RP-188 Source
|
|
kRegShiftRP188Source = 24,
|
|
kRegShiftRP188DBB = 0,
|
|
|
|
// DMA Control
|
|
kRegShiftForce64 = 4,
|
|
kRegShiftAutodetect64 = 5,
|
|
kRegShiftFirmWareRev = 8,
|
|
kRegShiftDMAPauseDisable = 16,
|
|
|
|
// Color Correction Control
|
|
kRegShiftSaturationValue = 0,
|
|
kRegShiftCCOutputBankSelect = 16,
|
|
kRegShiftCCMode = 17,
|
|
kRegShiftCC5HostAccessBankSelect = 20,
|
|
kRegShiftCC5OutputBankSelect = 21,
|
|
kRegShiftLUT5Select = 28,
|
|
kRegShiftLUTSelect = 29,
|
|
kRegShiftCC3OutputBankSelect = 30,
|
|
kRegShiftCC4OutputBankSelect = 31,
|
|
|
|
// kRegCanDoStatus
|
|
kRegShiftCanDoValidXptROM = 0,
|
|
kRegShiftCanDoAudioWaitForVBI = 1,
|
|
|
|
// kRegLUTV2Control
|
|
kRegShiftLUT1Enable = 0,
|
|
kRegShiftLUT2Enable = 1,
|
|
kRegShiftLUT3Enable = 2,
|
|
kRegShiftLUT4Enable = 3,
|
|
kRegShiftLUT5Enable = 4,
|
|
kRegShiftLUT6Enable = 5,
|
|
kRegShiftLUT7Enable = 6,
|
|
kRegShiftLUT8Enable = 7,
|
|
kRegShiftLUT1HostAccessBankSelect = 8,
|
|
kRegShiftLUT2HostAccessBankSelect = 9,
|
|
kRegShiftLUT3HostAccessBankSelect = 10,
|
|
kRegShiftLUT4HostAccessBankSelect = 11,
|
|
kRegShiftLUT5HostAccessBankSelect = 12,
|
|
kRegShiftLUT6HostAccessBankSelect = 13,
|
|
kRegShiftLUT7HostAccessBankSelect = 14,
|
|
kRegShiftLUT8HostAccessBankSelect = 15,
|
|
kRegShiftLUT1OutputBankSelect = 16,
|
|
kRegShiftLUT2OutputBankSelect = 17,
|
|
kRegShiftLUT3OutputBankSelect = 18,
|
|
kRegShiftLUT4OutputBankSelect = 19,
|
|
kRegShiftLUT5OutputBankSelect = 20,
|
|
kRegShiftLUT6OutputBankSelect = 21,
|
|
kRegShiftLUT7OutputBankSelect = 22,
|
|
kRegShiftLUT8OutputBankSelect = 23,
|
|
kRegShift12BitLUTPlaneSelect = 24,
|
|
kRegShift12BitLUTSupport = 28,
|
|
|
|
// RS422 Control
|
|
kRegShiftRS422TXEnable = 0,
|
|
kRegShiftRS422TXFIFOEmpty = 1,
|
|
kRegShiftRS422TXFIFOFull = 2,
|
|
kRegShiftRS422RXEnable = 3,
|
|
kRegShiftRS422RXFIFONotEmpty = 4,
|
|
kRegShiftRS422RXFIFOFull = 5,
|
|
kRegShiftRS422RXParityError = 6,
|
|
kRegShiftRS422Flush = 6,
|
|
kRegShiftRS422RXFIFOOverrun = 7,
|
|
kRegShiftRS422Present = 8,
|
|
kRegShiftRS422TXInhibit = 9,
|
|
kRegShiftRS422ParitySense = 12,
|
|
kRegShiftRS422ParityDisable = 13,
|
|
kRegShiftRS422BaudRate = 16,
|
|
|
|
|
|
// FS1 ProcAmp Control
|
|
kFS1RegShiftProcAmpC1Y = 0,
|
|
kFS1RegShiftProcAmpC1CB = 16,
|
|
kFS1RegShiftProcAmpC1CR = 0,
|
|
kFS1RegShiftProcAmpC2CB = 16,
|
|
kFS1RegShiftProcAmpC2CR = 0,
|
|
kFS1RegShiftProcAmpOffsetY = 16,
|
|
|
|
kRegShiftAudioInDelay = 0,
|
|
kRegShiftAudioOutDelay = 16,
|
|
|
|
// FS1 Audio Delay
|
|
kFS1RegShiftAudioDelay = 0,
|
|
|
|
// Borg Audio Delay
|
|
kBorgRegShiftPlaybackEEAudioDelay = 0,
|
|
kBorgRegShiftCaputreAudioDelay = 16,
|
|
|
|
// kRegOutputTimingControl
|
|
kBorgRegShiftOutTimingCtrlHorzOfs = 0,
|
|
kBorgRegShiftOutTimingCtrlVertOfs = 16,
|
|
|
|
// FS1 I2C
|
|
kFS1RegShiftI2C1ControlWrite = 0,
|
|
kFS1RegShiftI2C1ControlRead = 1,
|
|
kFS1RegShiftI2C1ControlBusy = 2,
|
|
kFS1RegShiftI2C1ControlError = 3,
|
|
kFS1RegShiftI2C2ControlWrite = 4,
|
|
kFS1RegShiftI2C2ControlRead = 5,
|
|
kFS1RegShiftI2C2ControlBusy = 6,
|
|
kFS1RegShiftI2C2ControlError = 7,
|
|
|
|
kFS1RegShiftI2CAddress = 0,
|
|
kFS1RegShiftI2CSubAddress = 8,
|
|
kFS1RegShiftI2CWriteData = 0,
|
|
kFS1RegShiftI2CReadData = 8,
|
|
|
|
//kRegFS1ReferenceSelect
|
|
kRegShiftLTCLoopback = 10,
|
|
kFS1RegShiftReferenceInputSelect = 0,
|
|
kFS1RefShiftLTCOnRefInSelect = 4,
|
|
kRegShiftLTCOnRefInSelect = 5,
|
|
kFS1RefShiftLTCEmbeddedOutEnable = 8,
|
|
kFS1RegShiftColorFIDSubcarrierReset = 14,
|
|
kFS1RegShiftFreezeOutput = 15,
|
|
kFS1RegShiftProcAmpInputSelect = 16,
|
|
kFS1RegShiftSecondAnalogOutInputSelect = 24,
|
|
|
|
// FS1 AFD Mode
|
|
kFS1RegShiftAFDReceived_Code = 0,
|
|
kFS1RegShiftAFDReceived_AR = 4,
|
|
kFS1RegShiftAFDReceived_VANCPresent = 7,
|
|
kFS1RegShiftUpconvertAutoAFDEnable = 20,
|
|
kFS1RegShiftUpconvert2AFDDefaultHoldLast = 21,
|
|
kFS1RegShiftDownconvertAutoAFDEnable = 24,
|
|
kFS1RegShiftDownconvertAFDDefaultHoldLast = 25,
|
|
kFS1RegShiftDownconvert2AutoAFDEnable = 28,
|
|
kFS1RegShiftDownconvert2AFDDefaultHoldLast = 29,
|
|
|
|
// FS1 AFD Inserter
|
|
kFS1RegShiftAFDVANCInserter_Code = 0,
|
|
kFS1RegShiftAFDVANCInserter_AR = 4,
|
|
kFS1RegShiftAFDVANCInserter_Mode = 12,
|
|
kFS1RegShiftAFDVANCInserter_Line = 16,
|
|
|
|
// FS1 Audio Channel Mapping
|
|
kFS1RegShiftAudioChannelMapping_Gain = 0,
|
|
kFS1RegShiftAudioChannelMapping_Phase = 15,
|
|
kFS1RegShiftAudioChannelMapping_Source = 16,
|
|
kFS1RegShiftAudioChannelMapping_Mute = 31,
|
|
|
|
// FS1 Output Timing Fine Phase Adjust
|
|
kRegShiftOutputTimingFinePhase = 0,
|
|
|
|
//kRegAnalogInputStatus
|
|
kRegShiftAnalogInputSD = 14,
|
|
kRegShiftAnalogInputIntegerRate = 15,
|
|
kRegShiftAnalogCompositeLocked = 16,
|
|
kRegShiftAnalogCompositeFormat625 = 18,
|
|
|
|
//kRegAnalogInputControl
|
|
kRegShiftAnalogInputADCMode = 0,
|
|
|
|
//kRegHDMIOut3DControl
|
|
kRegShiftHDMIOut3DPresent = 3,
|
|
kRegShiftHDMIOut3DMode = 4,
|
|
|
|
//kRegHDMIOutControl
|
|
kRegShiftHDMIOutVideoStd = 0,
|
|
kRegShiftHDMIOut8ChGroupSelect = 5,
|
|
kLHIRegShiftHDMIDownStreamDeviceYCbCrMode = 6,
|
|
kLHIRegShiftHDMIDownStreamDevice10BitMode = 7,
|
|
kRegShiftHDMIV2TxBypass = 7,
|
|
kLHIRegShiftHDMIOutColorSpace = 8,
|
|
kLHIRegShiftHDMIOutFPS = 9,
|
|
kRegShiftHDMIOutProgressive = 13,
|
|
kLHIRegShiftHDMIOutBitDepth = 14,
|
|
kRegShiftHDMISampling = 18,
|
|
kRegShiftHDMIVOBD = 20,
|
|
kRegShiftSourceIsRGB = 23,
|
|
kRegShiftHDMIOutPowerDown = 25,
|
|
kRegShiftHDMIOutRange = 28,
|
|
kRegShiftHDMIOutAudioCh = 29,
|
|
kLHIRegShiftHDMIOutDVI = 30,
|
|
|
|
//kRegHDMIInputStatus
|
|
kRegShiftInputStatusLock = 0,
|
|
kRegShiftStable = 1,
|
|
kLHIRegShiftHDMIInputColorSpace = 2,
|
|
kLHIRegShiftHDMIInputBitDepth = 3,
|
|
kRegShiftHDMIInV2VideoStd = 4,
|
|
kLHIRegShiftHDMIOutputEDIDRGB = 10,
|
|
kLHIRegShiftHDMIOutputEDID10Bit = 11,
|
|
kLHIRegShiftHDMIInput2ChAudio = 12,
|
|
kRegShiftHDMIInputProgressive = 13,
|
|
kLHIRegShiftHDMIOutputEDIDDVI = 15,
|
|
kRegShiftHDMIInAudioRate = 16,
|
|
kRegShiftAudioWorkLength = 20,
|
|
kRegShiftInputStatusStd = 24,
|
|
kLHIRegShiftHDMIInputProtocol = 27,
|
|
kRegShiftInputStatusFPS = 28,
|
|
|
|
//kRegHDMIInputControl
|
|
kRegShiftHDMIOutForceConfig = 1,
|
|
kRegShiftHDMIAudioPairSelect = 2,
|
|
kRegShiftHDMISampleRateConverterEnable = 4,
|
|
kRegShiftHDMISwapInputAudCh34 = 5,
|
|
kRegShiftHDMISwapOutputAudCh34 = 6,
|
|
kRegShiftHDMIOutPrefer420 = 7,
|
|
kRegShiftHDMIOutAudioFormat = 8,
|
|
kRegShiftHDMIInColorDepth = 12,
|
|
kRegShiftHDMIInColorSpace = 14,
|
|
kRegShiftHDMIOutAudioRate = 16,
|
|
kRegShiftHDMIOutSourceSelect = 20,
|
|
kRegShiftHDMIOutCropEnable = 24,
|
|
kRegShiftHDMIOutForceHPD = 25,
|
|
kRegShiftHDMIOut12Bit = 26,
|
|
kRegShiftHDMIDebug = 27,
|
|
kRegShiftHDMIInputRange = 28,
|
|
kRegShiftHDMIOutAudio2ChannelSelect = 29,
|
|
kRegShiftHDMIInfoRange = 31,
|
|
|
|
//kRegHDMIInputControl / kRegHDMIOutControl ???
|
|
kRegShiftHDMIColorSpace = 4,
|
|
kRegShiftHDMIPolarity = 16,
|
|
|
|
//kK2RegAnalogOutControl,
|
|
kK2RegShiftVideoDACMode = 0,
|
|
kFS1RegShiftVideoDAC2Mode = 8,
|
|
kLHIRegShiftVideoDACStandard = 13,
|
|
kLSRegShiftVideoADCMode = 16,
|
|
kLHIRegShiftVideoDACMode = 21, // 4 bit enum equivalent of bit 21-24
|
|
kLHIRegShiftVideoDACSetup = 21,
|
|
kLHIRegShiftVideoDACJapan = 22,
|
|
kLHIRegShiftVideoDACRGB = 23,
|
|
kLHIRegShiftVideoDACComponent = 24,
|
|
kK2RegShiftOutHTiming = 24,
|
|
|
|
//kK2RegSDIOut1Control + kRegK2SDIOut2Control + kK2RegAnalogOutControl
|
|
kK2RegShiftSDIOutStandard = 0,
|
|
kK2RegShiftSDI1Out_2Kx1080Mode = 3,
|
|
kLHRegShiftVideoOutputDigitalSelect = 4,
|
|
kK2RegShiftSDIOutHBlankRGBRange = 7,
|
|
kLHRegShiftVideoOutputAnalogSelect = 8,
|
|
kRegShiftSDIOut6GbpsMode = 16,
|
|
kRegShiftSDIOut12GbpsMode = 17,
|
|
kRegShiftRGBLevelA = 22,
|
|
kRegShiftSDIOutLevelAtoLevelB = 23,
|
|
kLHIRegShiftSDIOut3GbpsMode = 24,
|
|
kLHIRegShiftSDIOutSMPTELevelBMode = 25,
|
|
kK2RegShiftVPIDInsertionEnable = 26,
|
|
kK2RegShiftVPIDInsertionOverwrite = 27,
|
|
kK2RegShiftSDIOutDS1AudioSelect = 28,//30,
|
|
kK2RegShiftSDIOutDS2AudioSelect = 29,//31,
|
|
|
|
//kK2RegConversionControl,
|
|
kK2RegShiftConverterOutStandard = 12,
|
|
kK2RegShiftConverterOutRate = 27,
|
|
kK2RegShiftUpConvertMode = 8,
|
|
kK2RegShiftDownConvertMode = 4,
|
|
kK2RegShiftConverterInStandard = 0,
|
|
kK2RegShiftConverterInRate = 23,
|
|
kK2RegShiftConverterPulldown = 6,
|
|
kK2RegShiftUCPassLine21 = 16,
|
|
kK2RegShiftUCAutoLine21 = 17,
|
|
kK2RegShiftIsoConvertMode = 20,
|
|
kK2RegShiftDeinterlaceMode = 15,
|
|
kK2RegShiftEnableConverter = 31,
|
|
|
|
//kK2RegFrameSync1Control and kK2RegFrameSync2Control
|
|
kK2RegShiftFrameSyncControlFrameDelay = 24,
|
|
kK2RegShiftFrameSyncControlStandard = 8,
|
|
kK2RegShiftFrameSyncControlGeometry = 4,
|
|
kK2RegShiftFrameSyncControlFrameFormat = 0,
|
|
|
|
//kK2RegXptSelectGroup1
|
|
kK2RegShiftCompressionModInputSelect = 24,
|
|
kK2RegShiftConversionModInputSelect = 16,
|
|
kK2RegShiftColorSpaceConverterInputSelect = 8,
|
|
kK2RegShiftXptLUTInputSelect = 0,
|
|
|
|
//kK2RegXptSelectGroup2
|
|
kK2RegShiftDuallinkOutInputSelect = 24,
|
|
kK2RegShiftFrameSync2InputSelect = 16,
|
|
kK2RegShiftFrameSync1InputSelect = 8,
|
|
kK2RegShiftFrameBuffer1InputSelect = 0,
|
|
|
|
//kK2RegXptSelectGroup3
|
|
kK2RegShiftCSC1KeyInputSelect = 24,
|
|
kK2RegShiftSDIOut2InputSelect = 16,
|
|
kK2RegShiftSDIOut1InputSelect = 8,
|
|
kK2RegShiftAnalogOutInputSelect = 0,
|
|
|
|
//kK2RegXptSelectGroup4
|
|
kK2RegShiftMixerBGKeyInputSelect = 24,
|
|
kK2RegShiftMixerBGVidInputSelect = 16,
|
|
kK2RegShiftMixerFGKeyInputSelect = 8,
|
|
kK2RegShiftMixerFGVidInputSelect = 0,
|
|
|
|
//kK2RegXptSelectGroup5
|
|
kK2RegShiftCSC2KeyInputSelect = 24,
|
|
kK2RegShiftCSC2VidInputSelect = 16,
|
|
kK2RegShiftXptLUT2InputSelect = 8,
|
|
kK2RegShiftFrameBuffer2InputSelect = 0,
|
|
|
|
//kK2RegXptSelectGroup6
|
|
kK2RegShiftSecondConverterInputSelect = 24,
|
|
kK2RegShiftHDMIOutInputSelect = 16,
|
|
kK2RegShiftIICTInputSelect = 8,
|
|
kK2RegShiftWaterMarkerInputSelect = 0,
|
|
|
|
//kK2RegXptSelectGroup7
|
|
kK2RegShiftDuallinkOut2InputSelect = 16,
|
|
kK2RegShiftIICT2InputSelect = 8,
|
|
kK2RegShiftWaterMarker2InputSelect = 0,
|
|
|
|
//kK2RegXptSelectGroup8
|
|
kK2RegShiftSDIOut5InputSelect = 16,
|
|
kK2RegShiftSDIOut4InputSelect = 8,
|
|
kK2RegShiftSDIOut3InputSelect = 0,
|
|
|
|
//kRegCh1ControlExtended
|
|
//kRegCh2ControlExtended
|
|
kK2RegShiftPulldownMode = 2,
|
|
|
|
//kK2RegXptSelectGroup9
|
|
kK2RegShiftMixer2BGKeyInputSelect = 24,
|
|
kK2RegShiftMixer2BGVidInputSelect = 16,
|
|
kK2RegShiftMixer2FGKeyInputSelect = 8,
|
|
kK2RegShiftMixer2FGVidInputSelect = 0,
|
|
|
|
//kK2RegXptSelectGroup10
|
|
kK2RegShiftSDIOut2DS2InputSelect = 8,
|
|
kK2RegShiftSDIOut1DS2InputSelect = 0,
|
|
|
|
//kK2RegXptSelectGroup11
|
|
kK2RegShiftDuallinkIn1InputSelect = 0,
|
|
kK2RegShiftDuallinkIn1DSInputSelect = 8,
|
|
kK2RegShiftDuallinkIn2InputSelect = 16,
|
|
kK2RegShiftDuallinkIn2DSInputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup12
|
|
kK2RegShiftXptLUT3InputSelect = 0,
|
|
kK2RegShiftXptLUT4InputSelect = 8,
|
|
kK2RegShiftXptLUT5InputSelect = 16,
|
|
kK2RegShiftXpt3DLUT1InputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup13
|
|
kK2RegShiftFrameBuffer3InputSelect = 0,
|
|
kK2RegShiftFrameBuffer4InputSelect = 16,
|
|
|
|
//kK2RegXptSelectGroup14
|
|
kK2RegShiftSDIOut3DS2InputSelect = 8,
|
|
kK2RegShiftSDIOut5DS2InputSelect = 16,
|
|
kK2RegShiftSDIOut4DS2InputSelect = 24,
|
|
|
|
//kRegXptSelectGroup15
|
|
kK2RegShiftDuallinkIn3InputSelect = 0,
|
|
kK2RegShiftDuallinkIn3DSInputSelect = 8,
|
|
kK2RegShiftDuallinkIn4InputSelect = 16,
|
|
kK2RegShiftDuallinkIn4DSInputSelect = 24,
|
|
|
|
//kRegXptSelectGroup16
|
|
kK2RegShiftDuallinkOut3InputSelect = 0,
|
|
kK2RegShiftDuallinkOut4InputSelect = 8,
|
|
kK2RegShiftDuallinkOut5InputSelect = 16,
|
|
|
|
//kK2RegXptSelectGroup17
|
|
kK2RegShiftCSC3VidInputSelect = 0,
|
|
kK2RegShiftCSC3KeyInputSelect = 8,
|
|
kK2RegShiftCSC4VidInputSelect = 16,
|
|
kK2RegShiftCSC4KeyInputSelect = 24,
|
|
|
|
//kRegXptSelectGroup18
|
|
kK2RegShiftCSC5VidInputSelect = 0,
|
|
kK2RegShiftCSC5KeyInputSelect = 8,
|
|
|
|
//kRegXptSelectGroup19
|
|
kK2RegShift4KDCQ1InputSelect = 0,
|
|
kK2RegShift4KDCQ2InputSelect = 8,
|
|
kK2RegShift4KDCQ3InputSelect = 16,
|
|
kK2RegShift4KDCQ4InputSelect = 24,
|
|
|
|
//kRegXptSelectGroup20
|
|
kK2RegShiftHDMIOutV2Q1InputSelect = 0,
|
|
kK2RegShiftHDMIOutV2Q2InputSelect = 8,
|
|
kK2RegShiftHDMIOutV2Q3InputSelect = 16,
|
|
kK2RegShiftHDMIOutV2Q4InputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup21
|
|
kK2RegShiftFrameBuffer5InputSelect = 0,
|
|
kK2RegShiftFrameBuffer6InputSelect = 8,
|
|
kK2RegShiftFrameBuffer7InputSelect = 16,
|
|
kK2RegShiftFrameBuffer8InputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup22
|
|
kK2RegShiftSDIOut6InputSelect = 0,
|
|
kK2RegShiftSDIOut6DS2InputSelect = 8,
|
|
kK2RegShiftSDIOut7InputSelect = 16,
|
|
kK2RegShiftSDIOut7DS2InputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup30
|
|
kK2RegShiftSDIOut8InputSelect = 0,
|
|
kK2RegShiftSDIOut8DS2InputSelect = 8,
|
|
kK2RegShiftCSC6VidInputSelect = 16,
|
|
kK2RegShiftCSC6KeyInputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup23
|
|
kK2RegShiftCSC7VidInputSelect = 0,
|
|
kK2RegShiftCSC7KeyInputSelect = 8,
|
|
kK2RegShiftCSC8VidInputSelect = 16,
|
|
kK2RegShiftCSC8KeyInputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup24
|
|
kK2RegShiftXptLUT6InputSelect = 0,
|
|
kK2RegShiftXptLUT7InputSelect = 8,
|
|
kK2RegShiftXptLUT8InputSelect = 16,
|
|
|
|
//kK2RegXptSelectGroup25
|
|
kK2RegShiftDuallinkIn5InputSelect = 0,
|
|
kK2RegShiftDuallinkIn5DSInputSelect = 8,
|
|
kK2RegShiftDuallinkIn6InputSelect = 16,
|
|
kK2RegShiftDuallinkIn6DSInputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup26
|
|
kK2RegShiftDuallinkIn7InputSelect = 0,
|
|
kK2RegShiftDuallinkIn7DSInputSelect = 8,
|
|
kK2RegShiftDuallinkIn8InputSelect = 16,
|
|
kK2RegShiftDuallinkIn8DSInputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup27
|
|
kK2RegShiftDuallinkOut6InputSelect = 0,
|
|
kK2RegShiftDuallinkOut7InputSelect = 8,
|
|
kK2RegShiftDuallinkOut8InputSelect = 16,
|
|
|
|
//kK2RegXptSelectGroup28
|
|
kK2RegShiftMixer3FGVidInputSelect = 0,
|
|
kK2RegShiftMixer3FGKeyInputSelect = 8,
|
|
kK2RegShiftMixer3BGVidInputSelect = 16,
|
|
kK2RegShiftMixer3BGKeyInputSelect = 24,
|
|
|
|
//kK2RegXptSelectGroup29
|
|
kK2RegShiftMixer4FGVidInputSelect = 0,
|
|
kK2RegShiftMixer4FGKeyInputSelect = 8,
|
|
kK2RegShiftMixer4BGVidInputSelect = 16,
|
|
kK2RegShiftMixer4BGKeyInputSelect = 24,
|
|
|
|
//kRegXptSelectGroup31
|
|
kK2RegShift425Mux1AInputSelect = 0,
|
|
kK2RegShift425Mux1BInputSelect = 8,
|
|
kK2RegShift425Mux2AInputSelect = 16,
|
|
kK2RegShift425Mux2BInputSelect = 24,
|
|
|
|
//kRegXptSelectGroup32
|
|
kK2RegShift425Mux3AInputSelect = 0,
|
|
kK2RegShift425Mux3BInputSelect = 8,
|
|
kK2RegShift425Mux4AInputSelect = 16,
|
|
kK2RegShift425Mux4BInputSelect = 24,
|
|
|
|
//kRegXptSelectGroup33
|
|
kK2RegShiftFrameBuffer1BInputSelect = 0,
|
|
kK2RegShiftFrameBuffer2BInputSelect = 8,
|
|
kK2RegShiftFrameBuffer3BInputSelect = 16,
|
|
kK2RegShiftFrameBuffer4BInputSelect = 24,
|
|
|
|
//kRegXptSelectGroup36
|
|
kK2RegShiftMultiLinkOutInputSelect = 0,
|
|
kK2RegShiftMultiLinkOutDS2InputSelect = 8,
|
|
|
|
//kRegXptSelectGroup34
|
|
kK2RegShiftFrameBuffer5BInputSelect = 0,
|
|
kK2RegShiftFrameBuffer6BInputSelect = 8,
|
|
kK2RegShiftFrameBuffer7BInputSelect = 16,
|
|
kK2RegShiftFrameBuffer8BInputSelect = 24,
|
|
|
|
//kK2RegCSCoefficients1_2
|
|
kK2RegShiftVidKeySyncStatus = 28,
|
|
kK2RegShiftMakeAlphaFromKeySelect = 29,
|
|
kK2RegShiftColorSpaceMatrixSelect = 30,
|
|
kK2RegShiftUseCustomCoefSelect = 31,
|
|
//kK2RegCSCoefficients3_4
|
|
kK2RegShiftXena2RGBRange = 31,
|
|
|
|
//kK2RegCSCoefficients5_6,
|
|
kK2RegShift2piCSC1 = 28,
|
|
|
|
//kK2RegCSCoefficients5_6,
|
|
kK2RegShift2piCSC5 = 28,
|
|
|
|
kK2RegShiftCustomCoefficientLow = 0,
|
|
kK2RegShiftCustomCoefficientHigh = 16,
|
|
|
|
// Enhanced Color Space Converter contol
|
|
kK2RegShiftEnhancedCSCInputPixelFormat = 0,
|
|
kK2RegShiftEnhancedCSCOutputPixelFormat = 4,
|
|
kK2RegShiftEnhancedCSCChromaEdgeControl = 8,
|
|
kK2RegShiftEnhancedCSCChromaFilterSelect = 12,
|
|
kK2RegShiftEnhancedCSCEnable = 29,
|
|
kK2RegShiftEnhancedCSC4KMode = 28,
|
|
|
|
kK2RegShiftEnhancedCSCKeySource = 0,
|
|
kK2RegShiftEnhancedCSCKeyOutputRange = 4,
|
|
|
|
// Xena2K and Konax Video Processing.
|
|
kK2RegShiftXena2FgVidProcInputControl = 20,
|
|
kK2RegShiftXena2BgVidProcInputControl = 22,
|
|
kK2RegShiftXena2VidProcMode = 24,
|
|
kK2RegShiftXena2VidProcSplitStd = 28,
|
|
kK2RegShiftVidProcSubtitleEnable = 31,
|
|
|
|
// the newer 13(12) bit coefficients end on bit 14 unlike the
|
|
// 11(10) bit ones on 16 - jac
|
|
kK2RegShiftCustomCoefficient12BitLow = 0,
|
|
kK2RegShiftCustomCoefficient12BitHigh = 14,
|
|
|
|
//kRegLTCStatusControl
|
|
kRegShiftLTC1InPresent = 0,
|
|
kRegShiftLTC1Bypass = 4,
|
|
kRegShiftLTC2InPresent = 8,
|
|
kRegShiftLTC2Bypass = 12,
|
|
|
|
// kRegAudioOutputSourceMap
|
|
kRegShiftMonitorSource = 16,
|
|
kRegShiftHDMIOutAudioSource = 24,
|
|
|
|
// kRegSDIInput3GStatus
|
|
kRegShiftSDIIn3GbpsMode = 0,
|
|
kRegShiftSDIIn3GbpsSMPTELevelBMode = 1,
|
|
kRegShiftSDIIn1LevelBtoLevelA = 2,
|
|
kRegShiftSDIInVPIDLinkAValid = 4,
|
|
kRegShiftSDIInVPIDLinkBValid = 5,
|
|
kRegShiftSDIIn16GbpsMode = 6,
|
|
kRegShiftSDIIn112GbpsMode = 7,
|
|
kRegShiftSDIIn23GbpsMode = 8,
|
|
kRegShiftSDIIn23GbpsSMPTELevelBMode = 9,
|
|
kRegShiftSDIIn2LevelBtoLevelA = 10,
|
|
kRegShiftSDIIn2VPIDLinkAValid = 12,
|
|
kRegShiftSDIIn2VPIDLinkBValid = 13,
|
|
kRegShiftSDIIn26GbpsMode = 14,
|
|
kRegShiftSDIIn212GbpsMode = 15,
|
|
kRegShiftSDIInTsiMuxSyncFail = 16,
|
|
|
|
// kRegSDIInput3GStatus2
|
|
kRegShiftSDIIn33GbpsMode = 0,
|
|
kRegShiftSDIIn33GbpsSMPTELevelBMode = 1,
|
|
kRegShiftSDIIn3LevelBtoLevelA = 2,
|
|
kRegShiftSDIIn3VPIDLinkAValid = 4,
|
|
kRegShiftSDIIn3VPIDLinkBValid = 5,
|
|
kRegShiftSDIIn36GbpsMode = 6,
|
|
kRegShiftSDIIn312GbpsMode = 7,
|
|
kRegShiftSDIIn43GbpsMode = 8,
|
|
kRegShiftSDIIn43GbpsSMPTELevelBMode = 9,
|
|
kRegShiftSDIIn4LevelBtoLevelA = 10,
|
|
kRegShiftSDIIn4VPIDLinkAValid = 12,
|
|
kRegShiftSDIIn4VPIDLinkBValid = 13,
|
|
kRegShiftSDIIn46GbpsMode = 14,
|
|
kRegShiftSDIIn412GbpsMode = 15,
|
|
|
|
// kRegSDI5678Input3GStatus
|
|
kRegShiftSDIIn53GbpsMode = 0,
|
|
kRegShiftSDIIn53GbpsSMPTELevelBMode = 1,
|
|
kRegShiftSDIIn5LevelBtoLevelA = 2,
|
|
kRegShiftSDIIn5VPIDLinkAValid = 4,
|
|
kRegShiftSDIIn5VPIDLinkBValid = 5,
|
|
kRegShiftSDIIn56GbpsMode = 6,
|
|
kRegShiftSDIIn512GbpsMode = 7,
|
|
kRegShiftSDIIn63GbpsMode = 8,
|
|
kRegShiftSDIIn63GbpsSMPTELevelBMode = 9,
|
|
kRegShiftSDIIn6LevelBtoLevelA = 10,
|
|
kRegShiftSDIIn6VPIDLinkAValid = 12,
|
|
kRegShiftSDIIn6VPIDLinkBValid = 13,
|
|
kRegShiftSDIIn66GbpsMode = 14,
|
|
kRegShiftSDIIn612GbpsMode = 15,
|
|
kRegShiftSDIIn73GbpsMode = 16,
|
|
kRegShiftSDIIn73GbpsSMPTELevelBMode = 17,
|
|
kRegShiftSDIIn7LevelBtoLevelA = 18,
|
|
kRegShiftSDIIn7VPIDLinkAValid = 20,
|
|
kRegShiftSDIIn7VPIDLinkBValid = 21,
|
|
kRegShiftSDIIn76GbpsMode = 22,
|
|
kRegShiftSDIIn712GbpsMode = 23,
|
|
kRegShiftSDIIn83GbpsMode = 24,
|
|
kRegShiftSDIIn83GbpsSMPTELevelBMode = 25,
|
|
kRegShiftSDIIn8LevelBtoLevelA = 26,
|
|
kRegShiftSDIIn8VPIDLinkAValid = 28,
|
|
kRegShiftSDIIn8VPIDLinkBValid = 29,
|
|
kRegShiftSDIIn86GbpsMode = 30,
|
|
kRegShiftSDIIn812GbpsMode = 31,
|
|
|
|
// kRegVPID
|
|
kRegShiftVPIDBitDepth = 0,
|
|
kRegShiftVPIDLuminance = 4,
|
|
kRegShiftVPIDDualLinkChannel = 5,
|
|
kRegShiftVPIDChannel = 6,
|
|
kRegShiftVPIDSampling = 8,
|
|
kRegShiftVPIDColorimetry = 12,
|
|
kRegShiftVPIDColorimetryAltLow = 12,
|
|
kRegShiftVPIDImageAspect16x9Alt = 13,
|
|
kRegShiftVPIDHorizontalSampling = 14,
|
|
kRegShiftVPIDColorimetryAltHigh = 15,
|
|
kRegShiftVPIDImageAspect16x9 = 15,
|
|
kRegShiftVPIDPictureRate = 16,
|
|
kRegShiftVPIDXferChars = 20,
|
|
kRegShiftVPIDProgressivePicture = 22,
|
|
kRegShiftVPIDProgressiveTransport = 23,
|
|
kRegShiftVPIDStandard = 24,
|
|
kRegShiftVPIDVersionID = 31,
|
|
#if !defined (NTV2_DEPRECATE)
|
|
kRegShiftVPIDDynamicRange = 3,
|
|
#endif
|
|
|
|
// Borg Test Pattern Generator
|
|
kRegShiftTPGChromaSample = 0,
|
|
kRegShiftTPGLineBuffer = 10,
|
|
kRegShiftTPGFrameRate = 12,
|
|
kRegShiftTPGLuma = 16,
|
|
kRegShiftTPGMulti = 26,
|
|
kRegShiftTPGReset = 27,
|
|
kRegShiftTPGStandard = 28,
|
|
kRegShiftTPGWriteEnable = 31,
|
|
|
|
// Audio Channel Control 2 or 8 channel playback shift
|
|
kRegAudControlShift = 5,
|
|
|
|
// Stereo Compressor control shift
|
|
kRegShiftStereoCompressorOutputMode = 0,
|
|
kRegShiftStereoCompressorFlipMode = 4,
|
|
kRegShiftStereoCompressorFlipLeftHorz = 4,
|
|
kRegShiftStereoCompressorFlipLeftVert = 5,
|
|
kRegShiftStereoCompressorFlipRightHorz = 6,
|
|
kRegShiftStereoCompressorFlipRightVert = 7,
|
|
kRegShiftStereoCompressorFormat = 8,
|
|
kRegShiftStereoCompressorLeftSource = 16,
|
|
kRegShiftStereoCompressorRightSource = 24,
|
|
|
|
// SDI Direction Control Shift
|
|
kRegShiftSDI5Transmit = 24,
|
|
kRegShiftSDI6Transmit = 25,
|
|
kRegShiftSDI7Transmit = 26,
|
|
kRegShiftSDI8Transmit = 27,
|
|
kRegShiftSDI1Transmit = 28,
|
|
kRegShiftSDI2Transmit = 29,
|
|
kRegShiftSDI3Transmit = 30,
|
|
kRegShiftSDI4Transmit = 31,
|
|
|
|
// SDI watchdog control
|
|
kRegShiftSDIRelayControl12 = 0,
|
|
kRegShiftSDIRelayControl34 = 1,
|
|
kRegShiftSDIWatchdogEnable12 = 4,
|
|
kRegShiftSDIWatchdogEnable34 = 5,
|
|
kRegShiftSDIRelayPosition12 = 8,
|
|
kRegShiftSDIRelayPosition34 = 9,
|
|
kRegShiftSDIWatchdogStatus = 12,
|
|
|
|
kShiftDisplayMode = 4,
|
|
|
|
// 4K Down Convert
|
|
kRegShift4KDCRGBMode = 0,
|
|
kRegShift4KDCYCC444Mode = 1,
|
|
kRegShift4KDCPSFInMode = 2,
|
|
kRegShift4KDCPSFOutMode = 3,
|
|
|
|
// Quadrant Rasterizer Control
|
|
kRegShiftRasterMode = 0,
|
|
kRegShiftTsiIO = 2,
|
|
kRegShiftRasterLevelB = 4,
|
|
kRegShiftRasterDecimate = 8,
|
|
|
|
// kRegRXSDI1Status, kRegRXSDI2Status, etc
|
|
kRegShiftSDIInUnlockCount = 0,
|
|
kRegShiftSDIInLocked = 16,
|
|
kRegShiftSDIInVpidValidA = 20,
|
|
kRegShiftSDIInVpidValidB = 21,
|
|
kRegShiftSDIInTRSError = 24,
|
|
kRegShiftSDIInCRCErrorCountA = 0,
|
|
kRegShiftSDIInCRCErrorCountB = 16,
|
|
|
|
kRegShift2MFrameSize = 0,
|
|
kRegShiftChannelBar = 16,
|
|
|
|
kRegShiftPCMControlA1P1_2 = 0,
|
|
kRegShiftPCMControlA1P3_4 = 1,
|
|
kRegShiftPCMControlA1P5_6 = 2,
|
|
kRegShiftPCMControlA1P7_8 = 3,
|
|
kRegShiftPCMControlA1P9_10 = 4,
|
|
kRegShiftPCMControlA1P11_12 = 5,
|
|
kRegShiftPCMControlA1P13_14 = 6,
|
|
kRegShiftPCMControlA1P15_16 = 7,
|
|
|
|
kRegShiftPCMControlA2P1_2 = 8,
|
|
kRegShiftPCMControlA2P3_4 = 9,
|
|
kRegShiftPCMControlA2P5_6 = 10,
|
|
kRegShiftPCMControlA2P7_8 = 11,
|
|
kRegShiftPCMControlA2P9_10 = 12,
|
|
kRegShiftPCMControlA2P11_12 = 13,
|
|
kRegShiftPCMControlA2P13_14 = 14,
|
|
kRegShiftPCMControlA2P15_16 = 15,
|
|
|
|
kRegShiftPCMControlA3P1_2 = 16,
|
|
kRegShiftPCMControlA3P3_4 = 17,
|
|
kRegShiftPCMControlA3P5_6 = 18,
|
|
kRegShiftPCMControlA3P7_8 = 19,
|
|
kRegShiftPCMControlA3P9_10 = 20,
|
|
kRegShiftPCMControlA3P11_12 = 21,
|
|
kRegShiftPCMControlA3P13_14 = 22,
|
|
kRegShiftPCMControlA3P15_16 = 23,
|
|
|
|
kRegShiftPCMControlA4P1_2 = 24,
|
|
kRegShiftPCMControlA4P3_4 = 25,
|
|
kRegShiftPCMControlA4P5_6 = 26,
|
|
kRegShiftPCMControlA4P7_8 = 27,
|
|
kRegShiftPCMControlA4P9_10 = 28,
|
|
kRegShiftPCMControlA4P11_12 = 29,
|
|
kRegShiftPCMControlA4P13_14 = 30,
|
|
kRegShiftPCMControlA4P15_16 = 31,
|
|
|
|
kRegShiftPCMControlA5P1_2 = 0,
|
|
kRegShiftPCMControlA5P3_4 = 1,
|
|
kRegShiftPCMControlA5P5_6 = 2,
|
|
kRegShiftPCMControlA5P7_8 = 3,
|
|
kRegShiftPCMControlA5P9_10 = 4,
|
|
kRegShiftPCMControlA5P11_12 = 5,
|
|
kRegShiftPCMControlA5P13_14 = 6,
|
|
kRegShiftPCMControlA5P15_16 = 7,
|
|
|
|
kRegShiftPCMControlA6P1_2 = 8,
|
|
kRegShiftPCMControlA6P3_4 = 9,
|
|
kRegShiftPCMControlA6P5_6 = 10,
|
|
kRegShiftPCMControlA6P7_8 = 11,
|
|
kRegShiftPCMControlA6P9_10 = 12,
|
|
kRegShiftPCMControlA6P11_12 = 13,
|
|
kRegShiftPCMControlA6P13_14 = 14,
|
|
kRegShiftPCMControlA6P15_16 = 15,
|
|
|
|
kRegShiftPCMControlA7P1_2 = 16,
|
|
kRegShiftPCMControlA7P3_4 = 17,
|
|
kRegShiftPCMControlA7P5_6 = 18,
|
|
kRegShiftPCMControlA7P7_8 = 19,
|
|
kRegShiftPCMControlA7P9_10 = 20,
|
|
kRegShiftPCMControlA7P11_12 = 21,
|
|
kRegShiftPCMControlA7P13_14 = 22,
|
|
kRegShiftPCMControlA7P15_16 = 23,
|
|
|
|
kRegShiftPCMControlA8P1_2 = 24,
|
|
kRegShiftPCMControlA8P3_4 = 25,
|
|
kRegShiftPCMControlA8P5_6 = 26,
|
|
kRegShiftPCMControlA8P7_8 = 27,
|
|
kRegShiftPCMControlA8P9_10 = 28,
|
|
kRegShiftPCMControlA8P11_12 = 29,
|
|
kRegShiftPCMControlA8P13_14 = 30,
|
|
kRegShiftPCMControlA8P15_16 = 31,
|
|
|
|
kRegFanHiShift = 16,
|
|
kRegThermalShift = 17,
|
|
|
|
//kRegHDMIHDR.... 330-336
|
|
kRegShiftHDMIHDRGreenPrimaryX = 0,
|
|
kRegShiftHDMIHDRGreenPrimaryY = 16,
|
|
kRegShiftHDMIHDRBluePrimaryX = 0,
|
|
kRegShiftHDMIHDRBluePrimaryY = 16,
|
|
kRegShiftHDMIHDRRedPrimaryX = 0,
|
|
kRegShiftHDMIHDRRedPrimaryY = 16,
|
|
kRegShiftHDMIHDRWhitePointX = 0,
|
|
kRegShiftHDMIHDRWhitePointY = 16,
|
|
kRegShiftHDMIHDRMaxMasteringLuminance = 0,
|
|
kRegShiftHDMIHDRMinMasteringLuminance = 16,
|
|
kRegShiftHDMIHDRMaxContentLightLevel = 0,
|
|
kRegShiftHDMIHDRMaxFrameAverageLightLevel = 16,
|
|
|
|
kRegShiftHDMIHDRNonContantLuminance = 0,
|
|
kRegShiftHDMIHDRDolbyVisionEnable = 6,
|
|
kRegShiftHDMIHDREnable = 7,
|
|
kRegShiftElectroOpticalTransferFunction = 16,
|
|
kRegShiftHDRStaticMetadataDescriptorID = 24,
|
|
|
|
kRegShiftAudioMixerMainInputSelect = 0,
|
|
kRegShiftAudioMixerAux1x2CHInput = 4,
|
|
kRegShiftAudioMixerAux2x2CHInput = 8,
|
|
kRegShiftAudioMixerChannelSelect = 0,
|
|
kRegShiftAudioMixerOutputChannelsMute = 0,
|
|
kRegShiftAudioMixerOutputChannel1Mute = 0,
|
|
kRegShiftAudioMixerOutputChannel2Mute = 1,
|
|
kRegShiftAudioMixerOutputChannel3Mute = 2,
|
|
kRegShiftAudioMixerOutputChannel4Mute = 3,
|
|
kRegShiftAudioMixerOutputChannel5Mute = 4,
|
|
kRegShiftAudioMixerOutputChannel6Mute = 5,
|
|
kRegShiftAudioMixerOutputChannel7Mute = 6,
|
|
kRegShiftAudioMixerOutputChannel8Mute = 7,
|
|
kRegShiftAudioMixerOutputChannel9Mute = 8,
|
|
kRegShiftAudioMixerOutputChannel10Mute = 9,
|
|
kRegShiftAudioMixerOutputChannel11Mute = 10,
|
|
kRegShiftAudioMixerOutputChannel12Mute = 11,
|
|
kRegShiftAudioMixerOutputChannel13Mute = 12,
|
|
kRegShiftAudioMixerOutputChannel14Mute = 13,
|
|
kRegShiftAudioMixerOutputChannel15Mute = 14,
|
|
kRegShiftAudioMixerOutputChannel16Mute = 15,
|
|
kRegShiftAudioMixerMainInputEnable = 16,
|
|
kRegShiftAudioMixerAux1InputEnable = 18,
|
|
kRegShiftAudioMixerAux2InputEnable = 20,
|
|
kRegShiftAudioMixerAux1Channel1Level = 0,
|
|
kRegShiftAudioMixerAux1Channel2Level = 16,
|
|
kRegShiftAudioMixerAux2Channel1Level = 0,
|
|
kRegShiftAudioMixerAux2Channel2Level = 16,
|
|
kRegShiftAudioMixerMainChannel1Level = 0,
|
|
kRegShiftAudioMixerMainChannel2Level = 16,
|
|
kRegShiftAudioMixerMainChannel3Level = 0,
|
|
kRegShiftAudioMixerMainChannel4Level = 16,
|
|
kRegShiftAudioMixerMainChannel5Level = 0,
|
|
kRegShiftAudioMixerMainChannel6Level = 16,
|
|
kRegShiftAudioMixerMainChannel7Level = 0,
|
|
kRegShiftAudioMixerMainChannel8Level = 16,
|
|
kRegShiftAudioMixerMainChannel9Level = 0,
|
|
kRegShiftAudioMixerMainChannel10Level = 16,
|
|
kRegShiftAudioMixerMainChannel11Level = 0,
|
|
kRegShiftAudioMixerMainChannel12Level = 16,
|
|
kRegShiftAudioMixerMainChannel13Level = 0,
|
|
kRegShiftAudioMixerMainChannel14Level = 16,
|
|
kRegShiftAudioMixerMainChannel15Level = 0,
|
|
kRegShiftAudioMixerMainChannel16Level = 16,
|
|
kRegShiftAudioMixerMainMixedOutputChannel1Level = 0,
|
|
kRegShiftAudioMixerMainMixedOutputChannel2Level = 16,
|
|
kRegShiftAudioMixerInputLeftLevel = 0,
|
|
kRegShiftAudioMixerInputRightLevel = 16,
|
|
kRegShiftAudioMixerLevelSampleCount = 8,
|
|
|
|
kRegShiftRotaryEncoderValue = 0,
|
|
kRegShiftRotaryEncoderGain = 8,
|
|
|
|
kRegShiftLUTAddress = 0,
|
|
kRegShiftLUTLoad = 31,
|
|
|
|
kRegShiftMRStandard = 0,
|
|
kRegShiftMRFrameLocation = 8,
|
|
kRegShiftMRBypass = 20,
|
|
kRegShiftMREnable = 24,
|
|
kRegShiftMRSupport = 0
|
|
|
|
#if !defined (NTV2_DEPRECATE)
|
|
,
|
|
// kRegSDIInput3GStatus
|
|
kLHIRegShiftSDIIn3GbpsMode = 0,
|
|
kLHIRegShiftSDIIn3GbpsSMPTELevelBMode = 1,
|
|
kLHIRegShiftSDIInVPIDLinkAValid = 4,
|
|
kLHIRegShiftSDIInVPIDLinkBValid = 5,
|
|
kLHIRegShiftSDIIn23GbpsMode = 8,
|
|
kLHIRegShiftSDIIn23GbpsSMPTELevelBMode = 9,
|
|
kLHIRegShiftSDIIn2VPIDLinkAValid = 12,
|
|
kLHIRegShiftSDIIn2VPIDLinkBValid = 13,
|
|
|
|
// kRegSDIInput3GStatus2
|
|
kLHIRegShiftSDIIn33GbpsMode = 0,
|
|
kLHIRegShiftSDIIn33GbpsSMPTELevelBMode = 1,
|
|
kLHIRegShiftSDIIn3VPIDLinkAValid = 4,
|
|
kLHIRegShiftSDIIn3VPIDLinkBValid = 5,
|
|
kLHIRegShiftSDIIn43GbpsMode = 8,
|
|
kLHIRegShiftSDIIn43GbpsSMPTELevelBMode = 9,
|
|
kLHIRegShiftSDIIn4VPIDLinkAValid = 12,
|
|
kLHIRegShiftSDIIn4VPIDLinkBValid = 13,
|
|
//
|
|
// Borg Fusion Registers
|
|
//
|
|
|
|
// Boot FPGA and BoardID
|
|
kRegShiftBorgFusionBootFPGAVer = 4,
|
|
kRegShiftBorgFusionBoardID = 0,
|
|
|
|
// Codec and convert FPGA configuration control
|
|
kRegShiftBorgFusionCodecFPGAProgram = 0,
|
|
kRegShiftBorgFusionCodecFPGAInit = 1,
|
|
kRegShiftBorgFusionCodecFPGADone = 2,
|
|
|
|
kRegShiftBorgFusionConvertFPGAProgram = 4,
|
|
kRegShiftBorgFusionConvertFPGAInit = 5,
|
|
kRegShiftBorgFusionConvertFPGADone = 6,
|
|
|
|
// Panel Push buttons debounced and SATA drive present state
|
|
kRegShiftBorgFusionPushButtonStatusDebounced = 0,
|
|
kRegShiftBorgFusionPushButtonConfigDebounced = 1,
|
|
kRegShiftBorgFusionPushButtonMediaDebounced = 2,
|
|
kRegShiftBorgFusionPushButtonRewindDebounced = 3,
|
|
kRegShiftBorgFusionPushButtonStopDebounced = 4,
|
|
kRegShiftBorgFusionPushButtonPlayDebounced = 5,
|
|
kRegShiftBorgFusionPushButtonRecordDebounced = 6,
|
|
kRegShiftBorgFusionPushButtonFastFwdDebounced = 7,
|
|
kRegShiftBorgFusionPushButtonSelectUpDebounced = 8,
|
|
kRegShiftBorgFusionPushButtonSelectDownDebounced = 9,
|
|
kRegShiftBorgFusionPushButtonDeleteClipDebounced = 10,
|
|
kRegShiftBorgFusionPushButtonAdjustUpDebounced = 11,
|
|
kRegShiftBorgFusionPushButtonAdjustDownDebounced = 12,
|
|
kRegShiftBorgFusionPushButtonSlotDebounced = 13,
|
|
kRegShiftBorgFusionPushButtonSATADrivePresentDebounced = 14,
|
|
|
|
// Panel Push buttons and SATA drive present changes
|
|
kRegShiftBorgFusionPushButtonStatusChange = 0,
|
|
kRegShiftBorgFusionPushButtonConfigChange = 1,
|
|
kRegShiftBorgFusionPushButtonMediaChange = 2,
|
|
kRegShiftBorgFusionPushButtonRewindChange = 3,
|
|
kRegShiftBorgFusionPushButtonStopChange = 4,
|
|
kRegShiftBorgFusionPushButtonPlayChange = 5,
|
|
kRegShiftBorgFusionPushButtonRecordChange = 6,
|
|
kRegShiftBorgFusionPushButtonFastFwdChange = 7,
|
|
kRegShiftBorgFusionPushButtonSelectUpChange = 8,
|
|
kRegShiftBorgFusionPushButtonSelectDownChange = 9,
|
|
kRegShiftBorgFusionPushButtonDeleteClipChange = 10,
|
|
kRegShiftBorgFusionPushButtonAdjustUpChange = 11,
|
|
kRegShiftBorgFusionPushButtonAdjustDownChange = 12,
|
|
kRegShiftBorgFusionPushButtonSlotChange = 13,
|
|
kRegShiftBorgFusionPushButtonSATADrivePresentChange = 14,
|
|
|
|
// LED Pulse Width Modulation Threshholds
|
|
kRegShiftBorgFusionPWMThreshExpressCard2 = 0,
|
|
kRegShiftBorgFusionPWMThreshExpressCard1 = 4,
|
|
kRegShiftBorgFusionPWMThreshPower = 8,
|
|
kRegShiftBorgFusionPWMThreshLCDBacklightLED = 12,
|
|
|
|
|
|
// Power control - System
|
|
kRegShiftBorgFusionPowerCtrlWiFiReset = 0,
|
|
kRegShiftBorgFusionPowerCtrlFirewirePower = 1,
|
|
kRegShiftBorgFusionPowerCtrlGigEthReset = 2,
|
|
kRegShiftBorgFusionPowerCtrlPCIExpClockStop = 3,
|
|
|
|
// Power control - Storage devices
|
|
kRegShiftBorgFusionPowerCtrlPCIExpCard1_3_3vPower = 8, // Express Card 1 3.3v power
|
|
kRegShiftBorgFusionPowerCtrlPCIExpCard1_1_5vPower = 9, // Express Card 1 1.5v power
|
|
kRegShiftBorgFusionPowerCtrlPCIExpCard2_3_3vPower = 10, // Express Card 2 3.3v power
|
|
kRegShiftBorgFusionPowerCtrlPCIExpCard2_1_5vPower = 11, // Express Card 2 1.5v power
|
|
kRegShiftBorgFusionPowerCtrlSata_12vPower = 12, // SATA Drive 12v power
|
|
|
|
kRegShiftBonesActelPowerCtrlCFSlot2_BridgeReset = 8,
|
|
kRegShiftBonesActelPowerCtrlCFSlot2_Power = 9, // Compact Flash S2 Power
|
|
kRegShiftBonesActelPowerCtrlCFSlot1_Power = 10, // Compact Flash S1 Power
|
|
kRegShiftBonesActelPowerCtrlCFSlot1_BridgeReset = 11,
|
|
|
|
// Power control - Pushbutton LEDs
|
|
kRegShiftBorgFusionPowerCtrlPCIExpCard2LED = 13,
|
|
kRegShiftBorgFusionPowerCtrlPCIExpCard1LED = 14,
|
|
kRegShiftBorgFusionPowerCtrlPowerButtonLED = 15,
|
|
|
|
// IRQ3n Interrupt control
|
|
kRegShiftBorgFusionIRQ3nIntCtrlPushButtonChangeEnable = 0,
|
|
kRegShiftBorgFusionIRQ3nIntCtrlInputVoltageLow9vEnable = 1,
|
|
kRegShiftBorgFusionIRQ3nIntCtrlDisplayFIFOFullEnable = 2,
|
|
kRegShiftBorgFusionIRQ3nIntCtrlSATAPresentChangeEnable = 3,
|
|
kRegShiftBorgFusionIRQ3nIntCtrlTemp1HighEnable = 4,
|
|
kRegShiftBorgFusionIRQ3nIntCtrlTemp2HighEnable = 5,
|
|
kRegShiftBorgFusionIRQ3nIntCtrlPowerButtonChangeEnable = 6,
|
|
|
|
// IRQ3n Interrupt source
|
|
kRegShiftBorgFusionIRQ3nIntSrcPushButtonChange= 0,
|
|
kRegShiftBorgFusionIRQ3nIntSrcInputVoltageLow9v= 1,
|
|
kRegShiftBorgFusionIRQ3nIntSrcDisplayFIFOFull= 2,
|
|
kRegShiftBorgFusionIRQ3nIntSrcSATAPresentChange= 3,
|
|
kRegShiftBorgFusionIRQ3nIntSrcTemp1High= 4,
|
|
kRegShiftBorgFusionIRQ3nIntSrcTemp2High= 5,
|
|
kRegShiftBorgFusionIRQ3nIntSrcPowerButtonChange= 6,
|
|
|
|
// Noritake Display Control/Status
|
|
kRegShiftBorgFusionDisplayCtrlReset = 0,
|
|
kRegShiftBorgFusionDisplayStatusBusyRaw = 1, // Not needed by CPU, used internally by FPGA
|
|
kRegShiftBorgFusionDisplayStatusInterfaceBusy = 7, // FIFO full
|
|
|
|
// Analog ADC flags - battery
|
|
kRegShiftBorgFusionAnalogFlagsPowerLTE9v = 0, // +12 v supply <= 9.0 v battery critical
|
|
kRegShiftBorgFusionAnalogFlagsPowerLTE10v = 1, // +12 v supply <= 10.0 v battery depleting
|
|
kRegShiftBorgFusionAnalogFlagsPowerLTE11v = 2, // +12 v supply <= 11.0 v battery depleting
|
|
kRegShiftBorgFusionAnalogFlagsPowerGTE13v = 3, // +12 v supply >= 13.0 v battery charging
|
|
|
|
// Analog ADC flags - temperature sensor
|
|
kRegShiftBorgFusionAnalogFlagsPowerTemp1High = 4, // Temp sensor 1 > 65 C
|
|
kRegShiftBorgFusionAnalogFlagsPowerTemp2High = 5, // Temp sensor 2 > 65 C
|
|
// Pan (2K crop) - Xena 2
|
|
kRegShiftPanMode = 30,
|
|
kRegShiftPanOffsetV = 0,
|
|
kRegShiftPanOffsetH = 12
|
|
#endif // !defined (NTV2_DEPRECATE)
|
|
|
|
} RegisterShift;
|
|
|
|
|
|
// NWL Registers
|
|
|
|
// For the Mac we define an offset. This is done so that read/write register can easily identify an NWL register from a VP register.
|
|
// This is necessary since the NWL registers lives in another PCI BAR and these offsets conflict with normal VP registers. With this
|
|
// offset the driver knows which mapped BAR to use. Windows maps individual registers at start so this isn't necessary for Windows.
|
|
#ifdef AJAMac
|
|
#define NWL_REG_START 18000
|
|
#else
|
|
#define NWL_REG_START 0
|
|
#endif
|
|
|
|
typedef enum
|
|
{
|
|
kRegNwlS2C1Capabilities = 0x0000+(NWL_REG_START),
|
|
kRegNwlS2C1ControlStatus = 0x0001+(NWL_REG_START),
|
|
kRegNwlS2C1ChainStartAddressLow = 0x0002+(NWL_REG_START),
|
|
kRegNwlS2C1ChainStartAddressHigh = 0x0003+(NWL_REG_START),
|
|
kRegNwlS2C1HardwareTime = 0x0004+(NWL_REG_START),
|
|
kRegNwlS2C1ChainCompleteByteCount = 0x0005+(NWL_REG_START),
|
|
|
|
kRegNwlS2C2Capabilities = 0x0040+(NWL_REG_START),
|
|
kRegNwlS2C2ControlStatus = 0x0041+(NWL_REG_START),
|
|
kRegNwlS2C2ChainStartAddressLow = 0x0042+(NWL_REG_START),
|
|
kRegNwlS2C2ChainStartAddressHigh = 0x0043+(NWL_REG_START),
|
|
kRegNwlS2C2HardwareTime = 0x0044+(NWL_REG_START),
|
|
kRegNwlS2C2ChainCompleteByteCount = 0x0045+(NWL_REG_START),
|
|
|
|
kRegNwlC2S1Capabilities = 0x0800+(NWL_REG_START),
|
|
kRegNwlC2S1ControlStatus = 0x0801+(NWL_REG_START),
|
|
kRegNwlC2S1ChainStartAddressLow = 0x0802+(NWL_REG_START),
|
|
kRegNwlC2S1ChainStartAddressHigh = 0x0803+(NWL_REG_START),
|
|
kRegNwlC2S1HardwareTime = 0x0804+(NWL_REG_START),
|
|
kRegNwlC2S1ChainCompleteByteCount = 0x0805+(NWL_REG_START),
|
|
|
|
kRegNwlC2S2Capabilities = 0x0840+(NWL_REG_START),
|
|
kRegNwlC2S2ControlStatus = 0x0841+(NWL_REG_START),
|
|
kRegNwlC2S2ChainStartAddressLow = 0x0842+(NWL_REG_START),
|
|
kRegNwlC2S2ChainStartAddressHigh = 0x0843+(NWL_REG_START),
|
|
kRegNwlC2S2HardwareTime = 0x0844+(NWL_REG_START),
|
|
kRegNwlC2S2ChainCompleteByteCount = 0x0845+(NWL_REG_START),
|
|
|
|
kRegNwlCommonControlStatus = 0x1000+(NWL_REG_START),
|
|
kRegNwlCommonBackEndCoreVersion = 0x1001+(NWL_REG_START),
|
|
kRegNwlCommonPCIExpressCoreVersion = 0x1002+(NWL_REG_START),
|
|
kRegNwlCommonUserVersion = 0x1003+(NWL_REG_START)
|
|
|
|
} NwlRegisterNum;
|
|
|
|
// This is an aid for utility routines that maintain tables indexed by a register number, like spinlocks
|
|
typedef enum
|
|
{
|
|
kRegNwlS2C1CapabilitiesIndex, // 0
|
|
kRegNwlS2C1ControlStatusIndex, // 1
|
|
kRegNwlS2C1ChainStartAddressLowIndex, // 2
|
|
kRegNwlS2C1ChainStartAddressHighIndex, // 3
|
|
kRegNwlS2C1HardwareTimeIndex, // 4
|
|
kRegNwlS2C1ChainCompleteByteCountIndex, // 5
|
|
|
|
kRegNwlS2C2CapabilitiesIndex, // 6
|
|
kRegNwlS2C2ControlStatusIndex, // 7
|
|
kRegNwlS2C2ChainStartAddressLowIndex, // 8
|
|
kRegNwlS2C2ChainStartAddressHighIndex, // 9
|
|
kRegNwlS2C2HardwareTimeIndex, // 10
|
|
kRegNwlS2C2ChainCompleteByteCountIndex, // 11
|
|
|
|
kRegNwlC2S1CapabilitiesIndex, // 12
|
|
kRegNwlC2S1ControlStatusIndex, // 13
|
|
kRegNwlC2S1ChainStartAddressLowIndex, // 14
|
|
kRegNwlC2S1ChainStartAddressHighIndex, // 15
|
|
kRegNwlC2S1HardwareTimeIndex, // 16
|
|
kRegNwlC2S1ChainCompleteByteCountIndex, // 17
|
|
|
|
kRegNwlC2S2CapabilitiesIndex, // 18
|
|
kRegNwlC2S2ControlStatusIndex, // 19
|
|
kRegNwlC2S2ChainStartAddressLowIndex, // 20
|
|
kRegNwlC2S2ChainStartAddressHighIndex, // 21
|
|
kRegNwlC2S2HardwareTimeIndex, // 22
|
|
kRegNwlC2S2ChainCompleteByteCountIndex, // 23
|
|
|
|
kRegNwlCommonControlStatusIndex, // 24
|
|
kRegNwlCommonBackEndCoreVersionIndex, // 25
|
|
kRegNwlCommonPCIExpressCoreVersionIndex, // 26
|
|
kRegNwlCommonUserVersionIndex, // 27
|
|
|
|
NUM_NWL_REGS
|
|
} NwlRegisterIndex;
|
|
|
|
typedef enum
|
|
{
|
|
kRegMaskNwlCapabilitiesPresent = BIT(0),
|
|
kRegMaskNwlCapabilitiesEngineDirection = BIT(1),
|
|
kRegMaskNwlCapabilitiesEngineType = (BIT(2)+BIT(3)),
|
|
kRegMaskNwlCapabilitiesEngineNumber = (BIT(8)+BIT(9)+BIT(10)+BIT(11)+BIT(12)+BIT(13)+BIT(14)+BIT(15)),
|
|
kRegMaskNwlCapabilitiesAddressSize = (BIT(16)+BIT(17)+BIT(18)+BIT(19)+BIT(20)+BIT(21)+BIT(22)+BIT(23)),
|
|
|
|
kRegMaskNwlControlStatusInterruptEnable = BIT(0),
|
|
kRegMaskNwlControlStatusInterruptActive = BIT(1),
|
|
kRegMaskNwlControlStatusChainStart = BIT(8),
|
|
kRegMaskNwlControlStatusDmaResetRequest = BIT(9),
|
|
kRegMaskNwlControlStatusChainRunning = BIT(10),
|
|
kRegMaskNwlControlStatusChainComplete = BIT(11),
|
|
kRegMaskNwlControlStatusChainErrorShort = BIT(12),
|
|
kRegMaskNwlControlStatusChainSoftwareShort = BIT(13),
|
|
kRegMaskNwlControlStatusChainHardwareShort = BIT(14),
|
|
kRegMaskNwlControlStatusAlignmentError = BIT(15),
|
|
kRegMaskNwlControlStatusDmaReset = BIT(23),
|
|
|
|
kRegMaskNwlCommonDmaInterruptEnable = BIT(0),
|
|
kRegMaskNwlCommonDmaInterruptActive = BIT(1),
|
|
kRegMaskNwlCommonDmaInterruptPending = BIT(2),
|
|
kRegMaskNwlCommonInterruptMode = BIT(3),
|
|
kRegMaskNwlCommonUserInterruptEnable = BIT(4),
|
|
kRegMaskNwlCommonUserInterruptActive = BIT(5),
|
|
kRegMaskNwlCommonMaxPayloadSize = (BIT(8)+BIT(9)+BIT(10)),
|
|
kRegMaskNwlCommonMaxReadRequestSize = (BIT(12)+BIT(13) +BIT(14)),
|
|
kRegMaskNwlCommonS2CInterruptStatus0 = BIT(16),
|
|
kRegMaskNwlCommonS2CInterruptStatus1 = BIT(17),
|
|
kRegMaskNwlCommonS2CInterruptStatus2 = BIT(18),
|
|
kRegMaskNwlCommonS2CInterruptStatus3 = BIT(19),
|
|
kRegMaskNwlCommonS2CInterruptStatus4 = BIT(20),
|
|
kRegMaskNwlCommonS2CInterruptStatus5 = BIT(21),
|
|
kRegMaskNwlCommonS2CInterruptStatus6 = BIT(22),
|
|
kRegMaskNwlCommonS2CInterruptStatus7 = BIT(23),
|
|
kRegMaskNwlCommonC2SInterruptStatus0 = BIT(24),
|
|
kRegMaskNwlCommonC2SInterruptStatus1 = BIT(25),
|
|
kRegMaskNwlCommonC2SInterruptStatus2 = BIT(26),
|
|
kRegMaskNwlCommonC2SInterruptStatus3 = BIT(27),
|
|
kRegMaskNwlCommonC2SInterruptStatus4 = BIT(28),
|
|
kRegMaskNwlCommonC2SInterruptStatus5 = BIT(29),
|
|
kRegMaskNwlCommonC2SInterruptStatus6 = BIT(30),
|
|
kRegMaskNwlCommonC2SInterruptStatus7 = BIT(31)
|
|
|
|
} NwlRegisterMask;
|
|
|
|
typedef enum
|
|
{
|
|
kRegShiftNwlCapabilitiesPresent = 0,
|
|
kRegShiftNwlCapabilitiesEngineDirection = 1,
|
|
kRegShiftNwlCapabilitiesEngineType = 2,
|
|
kRegShiftNwlCapabilitiesEngineNumber = 8,
|
|
kRegShiftNwlCapabilitiesAddressSize = 16,
|
|
|
|
kRegShiftNwlControlStatusInterruptEnable = 0,
|
|
kRegShiftNwlControlStatusInterruptActive = 1,
|
|
kRegShiftNwlControlStatusChainStart = 8,
|
|
kRegShiftNwlControlStatusDmaResetRequest = 9,
|
|
kRegShiftNwlControlStatusChainRunning = 10,
|
|
kRegShiftNwlControlStatusChainComplete = 11,
|
|
kRegShiftNwlControlStatusChainErrorShort = 12,
|
|
kRegShiftNwlControlStatusChainSoftwareShort = 13,
|
|
kRegShiftNwlControlStatusChainHardwareShort = 14,
|
|
kRegShiftNwlControlStatusAlignmentError = 15,
|
|
kRegShiftNwlControlStatusDmaReset = 23,
|
|
|
|
kRegShiftNwlCommonDmaInterruptEnable = 0,
|
|
kRegShiftNwlCommonDmaInterruptActive = 1,
|
|
kRegShiftNwlCommonDmaInterruptPending = 2,
|
|
kRegShiftNwlCommonInterruptMode = 3,
|
|
kRegShiftNwlCommonUserInterruptEnable = 4,
|
|
kRegShiftNwlCommonUserInterruptActive = 5,
|
|
kRegShiftNwlCommonMaxPayloadSize = 8,
|
|
kRegShiftNwlCommonMaxReadRequestSize = 12,
|
|
kRegShiftNwlCommonS2CInterruptStatus0 = 16,
|
|
kRegShiftNwlCommonS2CInterruptStatus1 = 17,
|
|
kRegShiftNwlCommonS2CInterruptStatus2 = 18,
|
|
kRegShiftNwlCommonS2CInterruptStatus3 = 19,
|
|
kRegShiftNwlCommonS2CInterruptStatus4 = 20,
|
|
kRegShiftNwlCommonS2CInterruptStatus5 = 21,
|
|
kRegShiftNwlCommonS2CInterruptStatus6 = 22,
|
|
kRegShiftNwlCommonS2CInterruptStatus7 = 23,
|
|
kRegShiftNwlCommonC2SInterruptStatus0 = 24,
|
|
kRegShiftNwlCommonC2SInterruptStatus1 = 25,
|
|
kRegShiftNwlCommonC2SInterruptStatus2 = 26,
|
|
kRegShiftNwlCommonC2SInterruptStatus3 = 27,
|
|
kRegShiftNwlCommonC2SInterruptStatus4 = 28,
|
|
kRegShiftNwlCommonC2SInterruptStatus5 = 29,
|
|
kRegShiftNwlCommonC2SInterruptStatus6 = 30,
|
|
kRegShiftNwlCommonC2SInterruptStatus7 = 31
|
|
|
|
} NwlRegisterShift;
|
|
|
|
// XLNX Registers
|
|
#define XLNX_MAX_CHANNELS 4
|
|
#define XLNX_REG_TARGET_SIZE 0x400
|
|
#define XLNX_REG_CHANNEL_SIZE 0x40
|
|
#define XLNX_SUBSYSTEM_ID 0x1fc
|
|
|
|
typedef enum
|
|
{
|
|
kRegXlnxTargetChannelH2C = 0x0,
|
|
kRegXlnxTargetChannelC2H = 0x1,
|
|
kRegXlnxTargetIRQ = 0x2,
|
|
kRegXlnxTargetConfig = 0x3,
|
|
kRegXlnxTargetSgdmaH2C = 0x4,
|
|
kRegXlnxTargetSgdmaC2H = 0x5,
|
|
kRegXlnxTargetSgdmaCommon = 0x6,
|
|
kRegXlnxTargetMsiX = 0x8
|
|
} XlnxRegisterTarget;
|
|
|
|
typedef enum
|
|
{
|
|
kRegXlnxChannelIdentifier = 0x00,
|
|
kRegXlnxChannelControl = 0x01,
|
|
kRegXlnxChannelControlW1S = 0x02,
|
|
kRegXlnxChannelControlW1C = 0x03,
|
|
kRegXlnxChannelStatus = 0x10,
|
|
kRegXlnxChannelStatusRC = 0x11,
|
|
kRegXlnxChannelDescCompleteCount = 0x12,
|
|
kRegXlnxChannelAlignments = 0x13,
|
|
kRegXlnxChannelPollModeAddressLow = 0x22,
|
|
kRegXlnxChannelPollModeAddressHigh = 0x23,
|
|
kRegXlnxChannelInterruptEnable = 0x24,
|
|
kRegXlnxChannelInterruptEnableW1S = 0x25,
|
|
kRegXlnxChannelInterruptEnableW1C = 0x26,
|
|
kRegXlnxChannelPerfControl = 0x30,
|
|
kRegXlnxChannelPerfCycleCountLow = 0x31,
|
|
kRegXlnxChannelPerfCycleCountHigh = 0x32,
|
|
kRegXlnxChannelPerfDataCountLow = 0x33,
|
|
kRegXlnxChannelPerfDataCountHigh = 0x34,
|
|
kRegXlnxChannelUserMaxReadRequestSize = 0x44,
|
|
|
|
kRegXlnxIrqIdentifier = 0x00,
|
|
kRegXlnxIrqUserInterruptEnable = 0x01,
|
|
kRegXlnxIrqUserInterruptEnableW1S = 0x02,
|
|
kRegXlnxIrqUserInterruptEnableW1C = 0x03,
|
|
kRegXlnxIrqChannelInterruptEnable = 0x04,
|
|
kRegXlnxIrqChannelInterruptEnableW1S = 0x05,
|
|
kRegXlnxIrqChannelInterruptEnableW1C = 0x06,
|
|
kRegXlnxIrqUserInterruptRequest = 0x10,
|
|
kRegXlnxIrqChannelInterruptRequest = 0x11,
|
|
kRegXlnxIrqUserInterruptPending = 0x12,
|
|
kRegXlnxIrqChannelInterruptPending = 0x13,
|
|
|
|
kRegXlnxSgdmaIdentifier = 0x00,
|
|
kRegXlnxSgdmaDescAddressLow = 0x20,
|
|
kRegXlnxSgdmaDescAddressHigh = 0x21,
|
|
kRegXlnxSgdmaDescAdjacent = 0x22,
|
|
kRegXlnxSgdmaDescCredits = 0x23
|
|
|
|
} XlnxRegisterNum;
|
|
|
|
typedef enum
|
|
{
|
|
kRegMaskXlnxSubsystemId = 0xfff00000,
|
|
kRegMaskXlnxTarget = 0x000f0000,
|
|
kRegMaskXlnxStreamInterface = 0x00008000,
|
|
kRegMaskXlnxIdTarget = 0x00000f00,
|
|
kRegMaskXlnxVersion = 0x000000ff,
|
|
|
|
kRegMaskXlnxStreamWriteBackDisable = 0x08000000,
|
|
kRegMaskXlnxPollModeWriteBackEnable = 0x04000000,
|
|
kRegMaskXlnxNonIncAddressMode = 0x02000000,
|
|
kRegMaskXlnxRun = 0x00000001,
|
|
|
|
kRegMaskXlnxAddressAlignment = 0x00ff0000,
|
|
kRegMaskXlnxTransferAlignment = 0x0000ff00,
|
|
kRegMaskXlnxAddressBits = 0x000000ff,
|
|
|
|
kRegMaskXlnxIntDescError = 0x00f80000,
|
|
kRegMaskXlnxIntWriteError = 0x0007c000,
|
|
kRegMaskXlnxIntReadError = 0x00003e00,
|
|
kRegMaskXlnxIntIdleStop = 0x00000040,
|
|
kRegMaskXlnxIntInvalidLength = 0x00000020,
|
|
kRegMaskXlnxIntMagicStop = 0x00000010,
|
|
kRegMaskXlnxIntAlignMismatch = 0x00000008,
|
|
kRegMaskXlnxIntDescComplete = 0x00000004,
|
|
kRegMaskXlnxIntDescStop = 0x00000002,
|
|
|
|
kRegMaskXlnxPerfRun = 0x00000004,
|
|
kRegMaskXlnxPerfClear = 0x00000002,
|
|
kRegMaskXlnxPerfAuto = 0x00000001,
|
|
|
|
kRegMaskXlnxPerfCycleCountMax = 0x00010000,
|
|
kRegMaskXlnxPerfCycleCountHigh = 0x000003ff,
|
|
|
|
kRegMaskXlnxPerfDataCountMax = 0x00010000,
|
|
kRegMaskXlnxPerfDataCountHigh = 0x000003ff,
|
|
|
|
kRegMaskXlnxUserMaxReadRequestEff = 0x00000070,
|
|
kRegMaskXlnxUserMaxReadRequestPgm = 0x00000007
|
|
|
|
} XlnxRegisterMask;
|
|
|
|
typedef enum
|
|
{
|
|
kRegShiftXlnxSubsystemId = 20,
|
|
kRegShiftXlnxTarget = 16,
|
|
kRegShiftXlnxStreamInterface = 15,
|
|
kRegShiftXlnxIdTarget = 8,
|
|
kRegShiftXlnxVersion = 0,
|
|
|
|
kRegShiftXlnxStreamWriteBackDisable = 27,
|
|
kRegShiftXlnxPollModeWriteBackEnable = 26,
|
|
kRegShiftXlnxNonIncAddressMode = 25,
|
|
kRegShiftXlnxRun = 0,
|
|
|
|
kRegShiftXlnxAddressAlignment = 16,
|
|
kRegShiftXlnxTransferAlignment = 8,
|
|
kRegShiftXlnxAddressBits = 0,
|
|
|
|
kRegShiftXlnxIntDescError = 19,
|
|
kRegShiftXlnxIntWriteError = 14,
|
|
kRegShiftXlnxIntReadError = 9,
|
|
kRegShiftXlnxIntIdleStop = 6,
|
|
kRegShiftXlnxIntInvalidLength = 5,
|
|
kRegShiftXlnxIntMagicStop = 4,
|
|
kRegShiftXlnxIntAlignMismatch = 3,
|
|
kRegShiftXlnxIntDescComplete = 2,
|
|
kRegShiftXlnxIntDescStop = 1,
|
|
|
|
kRegShiftXlnxPerfRun = 2,
|
|
kRegShiftXlnxPerfClear = 1,
|
|
kRegShiftXlnxPerfAuto = 0,
|
|
|
|
kRegShiftXlnxPerfCycleCountMax = 16,
|
|
kRegShiftXlnxPerfCycleCountHigh = 0,
|
|
|
|
kRegShiftXlnxPerfDataCountMax = 16,
|
|
kRegShiftXlnxPerfDataCountHigh = 0,
|
|
|
|
kRegShiftXlnxUserMaxReadRequestEff = 4,
|
|
kRegShiftXlnxUserMaxReadRequestPgm = 0
|
|
|
|
} XlnxRegisterShift;
|
|
|
|
// P2P Registers
|
|
|
|
typedef enum
|
|
{
|
|
kRegMaskMessageInterruptStatusChannel1 = BIT(0),
|
|
kRegMaskMessageInterruptStatusChannel2 = BIT(1),
|
|
kRegMaskMessageInterruptStatusChannel3 = BIT(2),
|
|
kRegMaskMessageInterruptStatusChannel4 = BIT(3),
|
|
kRegMaskMessageInterruptControlEnable1 = BIT(0),
|
|
kRegMaskMessageInterruptControlEnable2 = BIT(1),
|
|
kRegMaskMessageInterruptControlEnable3 = BIT(2),
|
|
kRegMaskMessageInterruptControlEnable4 = BIT(3),
|
|
kRegMaskMessageInterruptControlEnable5 = BIT(4),
|
|
kRegMaskMessageInterruptControlEnable6 = BIT(5),
|
|
kRegMaskMessageInterruptControlEnable7 = BIT(6),
|
|
kRegMaskMessageInterruptControlEnable8 = BIT(7),
|
|
kRegMaskMessageInterruptControlClear1 = BIT(16),
|
|
kRegMaskMessageInterruptControlClear2 = BIT(17),
|
|
kRegMaskMessageInterruptControlClear3 = BIT(18),
|
|
kRegMaskMessageInterruptControlClear4 = BIT(19),
|
|
kRegMaskMessageInterruptControlClear5 = BIT(20),
|
|
kRegMaskMessageInterruptControlClear6 = BIT(21),
|
|
kRegMaskMessageInterruptControlClear7 = BIT(22),
|
|
kRegMaskMessageInterruptControlClear8 = BIT(23)
|
|
} MessageRegisterMask;
|
|
|
|
|
|
typedef enum
|
|
{
|
|
kRegShiftMessageInterruptStatusChannel1 = 0,
|
|
kRegShiftMessageInterruptStatusChannel2 = 1,
|
|
kRegShiftMessageInterruptStatusChannel3 = 2,
|
|
kRegShiftMessageInterruptStatusChannel4 = 3,
|
|
kRegShiftMessageInterruptControlEnable1 = 0,
|
|
kRegShiftMessageInterruptControlEnable2 = 1,
|
|
kRegShiftMessageInterruptControlEnable3 = 2,
|
|
kRegShiftMessageInterruptControlEnable4 = 3,
|
|
kRegShiftMessageInterruptControlClear1 = 16,
|
|
kRegShiftMessageInterruptControlClear2 = 17,
|
|
kRegShiftMessageInterruptControlClear3 = 18,
|
|
kRegShiftMessageInterruptControlClear4 = 19
|
|
} MessageRegisterShift;
|
|
|
|
|
|
#define kTransferFlagVideoDMA1 (BIT(0)) // use dma channel 1 for video transfer
|
|
#define kTransferFlagVideoDMA2 (BIT(1)) // use dma channel 2 for video transfer
|
|
#define kTransferFlagVideoDMA3 (BIT(2)) // use dma channel 3 for video tranfer
|
|
#define kTransferFlagVideoDMA4 (BIT(3)) // use dma channel 4 for video transfer
|
|
#define kTransferFlagVideoDMAAny (BIT(0)+BIT(1)+BIT(2)+BIT(3))
|
|
#define kTransferFlagAudioDMA1 (BIT(4)) // use dma channel 1 for audio transfer
|
|
#define kTransferFlagAudioDMA2 (BIT(5)) // use dma channel 2 for audio transfer
|
|
#define kTransferFlagAudioDMA3 (BIT(6)) // use dma channel 3 for audio transfer
|
|
#define kTransferFlagAudioDMA4 (BIT(7)) // use dma channel 4 for audio transfer
|
|
#define kTransferFlagAudioDMAAny (BIT(4)+BIT(5)+BIT(6)+BIT(7))
|
|
#define kTransferFlagDMAAny (BIT(0)+BIT(1)+BIT(2)+BIT(3)+BIT(4)+BIT(5)+BIT(6)+BIT(7))
|
|
#define kTransferFlagQuadFrame (BIT(8)) // transfer a quad hd or 4k frame
|
|
#define kTransferFlagP2PPrepare (BIT(9)) // prepare p2p target for synchronous transfer (no message)
|
|
#define kTransferFlagP2PComplete (BIT(10)) // complete synchronous p2p transfer
|
|
#define kTransferFlagP2PTarget (BIT(11)) // prepare p2p target for asynchronous transfer (with message)
|
|
#define kTransferFlagP2PTransfer (BIT(12)) // transfer to p2p sync or async target
|
|
|
|
#define MAX_FRAMEBUFFERS 512 // Max for Corvid88
|
|
|
|
#define KONAIP_REGS_START 0x40000
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined (NTV2_DEPRECATE)
|
|
//----------------------- HDNTV ---------------------------------
|
|
|
|
// Board-type-specific defines NOTE: Either KSD, KHD, or HDNTV needs to be defined.
|
|
#define HDNTV_NTV2_DEVICENAME ("hdntv")
|
|
|
|
// Offset in Base Address 1 Space to Channel 2 Frame Buffer
|
|
#define HDNTV_CHANNEL2_OFFSET (0x2000000) // 32 MBytes
|
|
|
|
// Size of each frame buffer
|
|
#define HDNTV_FRAMEBUFFER_SIZE (0x800000) // 8 MBytes
|
|
|
|
#define HDNTV_NUM_FRAMEBUFFERS (8)
|
|
|
|
#define HDNTV_NTV2_VERTICALINTERRUPT_GLOBAL_EVENT_NAME "_HDVerticalInterruptSignalEvent"
|
|
// the event name shared among all Windows NT
|
|
// This name to be appended to the actual Win32Name
|
|
#define HDNTV_NTV2_CHANGE_GLOBAL_EVENT_NAME "_HDChangeSignalEvent"
|
|
|
|
|
|
//----------------------- Xena KHD ---------------------------------
|
|
|
|
// Offset in Base Address 1 Space to Channel 2 Frame Buffer
|
|
#define KHD_CHANNEL2_OFFSET (0x2000000) // 32 MBytes
|
|
|
|
// Size of each frame buffer
|
|
#define KHD_FRAMEBUFFER_SIZE (0x800000) // 8 MBytes
|
|
|
|
#define KHD_NUM_FRAMEBUFFERS (32)
|
|
|
|
#define KHD_NTV2_VERTICALINTERRUPT_GLOBAL_EVENT_NAME "_HDVerticalInterruptSignalEvent"
|
|
// the event name shared among all Windows NT
|
|
// This name to be appended to the actual Win32Name
|
|
#define KHD_NTV2_CHANGE_GLOBAL_EVENT_NAME "_HDChangeSignalEvent"
|
|
|
|
//
|
|
// 2K Specific....only on HD22(for now) boards when in 2K standard
|
|
//
|
|
#define XENA_FRAMEBUFFERSIZE_2K (0x1000000)
|
|
#define XENA_NUMFRAMEBUFFERS_2K (16)
|
|
|
|
//----------------------- Xena KSD ---------------------------------
|
|
|
|
// Offset in Base Address 1 Space to Channel 2 Frame Buffer
|
|
#define KSD_CHANNEL2_OFFSET (0x800000) // 8 MBytes
|
|
|
|
// Size of each frame buffer
|
|
#define KSD_FRAMEBUFFER_SIZE (0x200000) // 2 MBytes
|
|
|
|
#define KSD_NUM_FRAMEBUFFERS (64)
|
|
|
|
#define KSD_NTV2_VERTICALINTERRUPT_GLOBAL_EVENT_NAME "_SDVerticalInterruptSignalEvent"
|
|
// the event name shared among all Windows NT
|
|
// This name to be appended to the actual Win32Name
|
|
#define KSD_NTV2_CHANGE_GLOBAL_EVENT_NAME "_SDChangeSignalEvent"
|
|
|
|
|
|
//----------------------- AJA KONA ---------------------------------
|
|
|
|
// Offset in Base Address 1 Space to Channel 2 Frame Buffer
|
|
#define KONA_CHANNEL2_OFFSET (0x2000000) // 32 MBytes
|
|
|
|
// Size of each frame buffer
|
|
#define KONA_FRAMEBUFFER_SIZE (0x800000) // 8 MBytes
|
|
|
|
#define KONA_NUM_FRAMEBUFFERS (32)
|
|
|
|
#define KHD_NTV2_VERTICALINTERRUPT_GLOBAL_EVENT_NAME "_HDVerticalInterruptSignalEvent"
|
|
// the event name shared among all Windows NT
|
|
// This name to be appended to the actual Win32Name
|
|
#define KHD_NTV2_CHANGE_GLOBAL_EVENT_NAME "_HDChangeSignalEvent"
|
|
|
|
|
|
//----------------------- AJA XENALS ---------------------------------
|
|
|
|
// Offset in Base Address 1 Space to Channel 2 Frame Buffer
|
|
#define XENALS_CHANNEL2_OFFSET (0x2000000) // 32 MBytes..not applicable
|
|
|
|
// Size of each frame buffer
|
|
#define XENALS_FRAMEBUFFER_SIZE (0x800000) // 8 MBytes
|
|
|
|
// the event name shared among all Windows NT
|
|
// This name to be appended to the actual Win32Name
|
|
#define XENALS_NUM_FRAMEBUFFERS (32)
|
|
|
|
//----------------------- AJA FS1 ---------------------------------
|
|
|
|
// Offset in Base Address 1 Space to Channel 2 Frame Buffer
|
|
#define FS1_CHANNEL2_OFFSET (0x0) // Framebuffers not accessible to processor
|
|
|
|
// Size of each frame buffer
|
|
#define FS1_FRAMEBUFFER_SIZE (0x0) // Framebuffers not accessible to processor
|
|
|
|
// the event name shared among all Windows NT
|
|
// This name to be appended to the actual Win32Name
|
|
#define FS1_NUM_FRAMEBUFFERS (0)
|
|
#define FS1_NTV2_VERTICALINTERRUPT_GLOBAL_EVENT_NAME "_FS1VerticalInterruptSignalEvent"
|
|
|
|
// the event name shared among all Windows NT
|
|
// This name to be appended to the actual Win32Name
|
|
#define FS1_NTV2_CHANGE_GLOBAL_EVENT_NAME "_FS1ChangeSignalEvent"
|
|
|
|
//----------------------- AJA BORG ---------------------------------
|
|
|
|
// Offset in Base Address 1 Space to Channel 2 Frame Buffer
|
|
// #define BORG_CHANNEL2_OFFSET (0) // not applicable
|
|
|
|
//-------------------- Defines for 32 1MB frame buffers (28 1MB video frame buffers and 1 4MB audio buffer)
|
|
// Size of each frame buffer
|
|
//#define BORG_FRAMEBUFFER_SIZE (0x100000) // 1 MBytes
|
|
//#define BORG_NUM_FRAMEBUFFERS (32)
|
|
|
|
//-------------------- Defines for 24 1.125MB frame buffers (24 1.125MB video frame buffers and 1 4MB audio buffer)
|
|
// this totals 27 MB video frame, 1 MB unused gap, and 1 4MB audio buffer based 4 MB below top of memory
|
|
|
|
#define BORG_FRAMEBUFFER_SIZE (0x120000) // 1.125 MBytes
|
|
// this define is left at 32 for practical purposes to locate audio buffer at 4 MB below top of memory (32 - 4 = 28)
|
|
// in reality, there are only 24 video frame buffers, but if you look at usage of this define, it is best left at 32
|
|
#define BORG_NUM_FRAMEBUFFERS (32) // 32 * 1.125 = 36
|
|
#define BONES_NUM_FRAMEBUFFERS (99) // 99 * 1.125 = ~112 MB
|
|
#endif // NTV2_DEPRECATE
|
|
|
|
//----------------------- AJA XENA2 ---------------------------------
|
|
|
|
// Offset in Base Address 1 Space to Channel 2 Frame Buffer
|
|
#define XENA2_CHANNEL2_OFFSET (0x2000000) // 32 MBytes..not applicable
|
|
|
|
// Size of each frame buffer
|
|
#define XENA2_FRAMEBUFFER_SIZE (0x800000) // 8 MBytes
|
|
|
|
// the event name shared among all Windows NT
|
|
// This name to be appended to the actual Win32Name
|
|
#define XENA2_NUM_FRAMEBUFFERS (16)
|
|
#define XENA2_NTV2_VERTICALINTERRUPT_GLOBAL_EVENT_NAME "_Xena2VerticalInterruptSignalEvent"
|
|
|
|
// the event name shared among all Windows NT
|
|
// This name to be appended to the actual Win32Name
|
|
#define KHD_NTV2_CHANGE_GLOBAL_EVENT_NAME "_HDChangeSignalEvent"
|
|
|
|
|
|
//
|
|
// Special defines
|
|
//
|
|
#define NTV2_MIN_FRAMEBUFFERSIZE KSD_FRAMEBUFFER_SIZE
|
|
#define NTV2_MAX_FRAMEBUFFERSIZE KHD_FRAMEBUFFER_SIZE
|
|
#define NTV2_MIN_FRAMEBUFFERS HDNTV_NUM_FRAMEBUFFERS
|
|
#if defined(XENA2)
|
|
#define NTV2_MAX_FRAMEBUFFERS MAX_FRAMEBUFFERS
|
|
#else
|
|
#define NTV2_MAX_FRAMEBUFFERS BONES_NUM_FRAMEBUFFERS
|
|
#endif
|
|
|
|
#define NTV2_UART_FIFO_SIZE (127)
|
|
|
|
#define NTV2_PROGRAM_READY_BIT ( BIT_8 )
|
|
#define NTV2_PROGRAM_DONE_BIT ( BIT_9 )
|
|
#define NTV2_PROGRAM_RESET_BIT ( BIT_10 )
|
|
|
|
/* PORT C(7) is output (default) */
|
|
#define NTV2_FS1_FALLBACK_MODE_BIT ( BIT_11 )
|
|
|
|
/* PORT C(7) is input/3-state */
|
|
#define NTV2_FS1_CPLD_ENH_MODE_BIT ( BIT_12 )
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// Enums used to specify Property actions with interrupts
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef enum _INTERRUPT_ENUMS_
|
|
{
|
|
eVerticalInterrupt, // 0
|
|
eOutput1 = eVerticalInterrupt,
|
|
eInterruptMask, // 1
|
|
eInput1, // 2
|
|
eInput2, // 3
|
|
eAudio, // 4
|
|
eAudioInWrap, // 5
|
|
eAudioOutWrap, // 6
|
|
eDMA1, // 7
|
|
eDMA2, // 8
|
|
eDMA3, // 9
|
|
eDMA4, // 10
|
|
eChangeEvent, // 11
|
|
eGetIntCount, // 12
|
|
eWrapRate, // 13
|
|
eUartTx, // 14
|
|
eUart1Tx = eUartTx,
|
|
eUartRx, // 15
|
|
eUart1Rx = eUartRx,
|
|
eAuxVerticalInterrupt, // 16
|
|
ePushButtonChange, // 17
|
|
eLowPower, // 18
|
|
eDisplayFIFO, // 19
|
|
eSATAChange, // 20
|
|
eTemp1High, // 21
|
|
eTemp2High, // 22
|
|
ePowerButtonChange, // 23
|
|
eInput3, // 24
|
|
eInput4, // 25
|
|
eUartTx2, // 26
|
|
eUart2Tx = eUartTx2,
|
|
eUartRx2, // 27
|
|
eUart2Rx = eUartRx2,
|
|
eHDMIRxV2HotplugDetect, // 28
|
|
eInput5, // 29
|
|
eInput6, // 30
|
|
eInput7, // 31
|
|
eInput8, // 32
|
|
eInterruptMask2, // 33
|
|
eOutput2, // 34
|
|
eOutput3, // 35
|
|
eOutput4, // 36
|
|
eOutput5, // 37
|
|
eOutput6, // 38
|
|
eOutput7, // 39
|
|
eOutput8, // 40
|
|
eNumInterruptTypes // This must be last // 41
|
|
} INTERRUPT_ENUMS;
|
|
|
|
|
|
#define MAX_NUM_EVENT_CODES (eNumInterruptTypes)
|
|
#define NTV2_IS_VALID_INTERRUPT_ENUM(__e__) ((__e__) >= eOutput1 && (__e__) < eNumInterruptTypes)
|
|
#define NTV2_IS_INPUT_INTERRUPT(__e__) ( (__e__) == eInput1 \
|
|
|| (__e__) == eInput2 \
|
|
|| (__e__) == eInput3 \
|
|
|| (__e__) == eInput4 \
|
|
|| (__e__) == eInput5 \
|
|
|| (__e__) == eInput6 \
|
|
|| (__e__) == eInput7 \
|
|
|| (__e__) == eInput8 )
|
|
|
|
#define NTV2_IS_OUTPUT_INTERRUPT(__e__) ( (__e__) == eOutput1 \
|
|
|| (__e__) == eOutput2 \
|
|
|| (__e__) == eOutput3 \
|
|
|| (__e__) == eOutput4 \
|
|
|| (__e__) == eOutput5 \
|
|
|| (__e__) == eOutput6 \
|
|
|| (__e__) == eOutput7 \
|
|
|| (__e__) == eOutput8 )
|
|
|
|
|
|
// Some Mac only ENUMS that had to be moved over to get Win/Linux code to compile,
|
|
// so these are only used by the Mac.
|
|
typedef enum
|
|
{
|
|
kFreeRun,
|
|
kReferenceIn,
|
|
kVideoIn
|
|
} ReferenceSelect;
|
|
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
typedef std::vector <ULWord> NTV2ULWordVector; ///< @brief An ordered sequence of ULWords.
|
|
|
|
/**
|
|
@brief Streams a human-readable dump of the given NTV2ULWordVector into the specified output stream.
|
|
@param[in] inObj Specifies the NTV2ULWordVector to be printed on the output stream.
|
|
@param inOutStream Specifies the output stream to receive the dump. Defaults to std::cout.
|
|
@return A non-constant reference to the given output stream.
|
|
**/
|
|
AJAExport std::ostream & NTV2PrintULWordVector (const NTV2ULWordVector & inObj, std::ostream & inOutStream = std::cout); // New in SDK 16.0
|
|
|
|
typedef std::vector <NTV2Channel> NTV2ChannelList; ///< @brief An ordered sequence of NTV2Channel values.
|
|
typedef NTV2ChannelList::const_iterator NTV2ChannelListConstIter; ///< @brief A handy const iterator into an NTV2ChannelList.
|
|
|
|
/**
|
|
@brief Streams a human-readable dump of the given NTV2ChannelList into the specified output stream.
|
|
@param[in] inObj Specifies the NTV2ChannelList to be streamed to the output stream.
|
|
@param inCompact Use 'true' for a compact display (the default); otherwise use 'false' for a long-format.
|
|
@param inOutStream Specifies the output stream to receive the dump. Defaults to std::cout.
|
|
@return A non-constant reference to the given output stream.
|
|
**/
|
|
AJAExport std::ostream & NTV2PrintChannelList (const NTV2ChannelList & inObj, const bool inCompact = true, std::ostream & inOutStream = std::cout); // New in SDK 16.0
|
|
|
|
/**
|
|
@return A human-readable string containing a dump of the channel list.
|
|
@param[in] inObj Specifies the NTV2ChannelList to be converted.
|
|
@param inCompact Use 'true' for a compact display (the default); otherwise use 'false' for a long-format.
|
|
**/
|
|
AJAExport std::string NTV2ChannelListToStr (const NTV2ChannelList & inObj, const bool inCompact = true); // New in SDK 16.0
|
|
|
|
typedef std::set <NTV2Channel> NTV2ChannelSet; ///< @brief A set of distinct NTV2Channel values.
|
|
typedef NTV2ChannelSet::const_iterator NTV2ChannelSetConstIter; ///< @brief A handy const iterator into an NTV2ChannelSet.
|
|
|
|
/**
|
|
@brief Streams a human-readable dump of the given NTV2ChannelSet into the specified output stream.
|
|
@param[in] inObj Specifies the NTV2ChannelSet to be streamed to the output stream.
|
|
@param inCompact Use 'true' for a compact display (the default); otherwise use 'false' for a long-format.
|
|
@param inOutStream Specifies the output stream to receive the dump. Defaults to std::cout.
|
|
@return A non-constant reference to the given output stream.
|
|
**/
|
|
AJAExport std::ostream & NTV2PrintChannelSet (const NTV2ChannelSet & inObj, const bool inCompact = true, std::ostream & inOutStream = std::cout); // New in SDK 16.0
|
|
|
|
/**
|
|
@return A human-readable string containing a dump of the channel set.
|
|
@param[in] inObj Specifies the NTV2ChannelSet to be converted.
|
|
@param inCompact Use 'true' for a compact display (the default); otherwise use 'false' for a long-format.
|
|
**/
|
|
AJAExport std::string NTV2ChannelSetToStr (const NTV2ChannelSet & inObj, const bool inCompact = true); // New in SDK 16.0
|
|
|
|
/**
|
|
@param[in] inFirstChannel Specifies the first NTV2Channel.
|
|
@param inNumChannels Specifies the number of channels.
|
|
@return An NTV2ChannelSet having the specified contiguous range of channels.
|
|
**/
|
|
AJAExport NTV2ChannelSet NTV2MakeChannelSet (const NTV2Channel inFirstChannel, const UWord inNumChannels = 1); // New in SDK 16.0
|
|
|
|
/**
|
|
@param[in] inChannels Specifies the NTV2Channels that should go into the NTV2ChannelSet.
|
|
@return An NTV2ChannelSet having the same channels as contained in the specified list.
|
|
**/
|
|
AJAExport NTV2ChannelSet NTV2MakeChannelSet (const NTV2ChannelList inChannels); // New in SDK 16.0
|
|
|
|
/**
|
|
@param[in] inFirstChannel Specifies the first NTV2Channel.
|
|
@param inNumChannels Specifies the number of channels.
|
|
@return An NTV2ChannelList having the specified contiguous range of channels.
|
|
**/
|
|
AJAExport NTV2ChannelList NTV2MakeChannelList (const NTV2Channel inFirstChannel, const UWord inNumChannels = 1); // New in SDK 16.0
|
|
|
|
/**
|
|
@param[in] inChannels Specifies the NTV2Channels that should go into the NTV2ChannelList.
|
|
@return An NTV2ChannelList having the same channels as contained in the specified set.
|
|
**/
|
|
AJAExport NTV2ChannelList NTV2MakeChannelList (const NTV2ChannelSet inChannels); // New in SDK 16.0
|
|
|
|
|
|
typedef std::set <NTV2AudioSystem> NTV2AudioSystemSet; ///< @brief A set of distinct NTV2AudioSystem values. New in SDK 16.2.
|
|
typedef NTV2AudioSystemSet::const_iterator NTV2AudioSystemSetConstIter; ///< @brief A handy const iterator into an NTV2AudioSystemSet. New in SDK 16.2.
|
|
|
|
/**
|
|
@brief Streams a human-readable dump of the given NTV2AudioSystemSet into the specified output stream.
|
|
@param[in] inObj Specifies the NTV2AudioSystemSet to be streamed to the output stream.
|
|
@param inCompact Use 'true' for a compact display (the default); otherwise use 'false' for a long-format.
|
|
@param inOutStream Specifies the output stream to receive the dump. Defaults to std::cout.
|
|
@return A non-constant reference to the given output stream.
|
|
**/
|
|
AJAExport std::ostream & NTV2PrintAudioSystemSet (const NTV2AudioSystemSet & inObj, const bool inCompact = true, std::ostream & inOutStream = std::cout); // New in SDK 16.2
|
|
|
|
/**
|
|
@return A human-readable string containing a dump of the NTV2AudioSystemSet.
|
|
@param[in] inObj Specifies the NTV2AudioSystemSet to be render.
|
|
@param inCompact Use 'true' for a compact display (the default); otherwise use 'false' for a long-format.
|
|
**/
|
|
AJAExport std::string NTV2AudioSystemSetToStr (const NTV2AudioSystemSet & inObj, const bool inCompact = true); // New in SDK 16.2
|
|
|
|
/**
|
|
@param[in] inFirstAudioSystem Specifies the first NTV2AudioSystem.
|
|
@param inCount Specifies the number of audio systems.
|
|
@return An NTV2AudioSystemSet having the specified contiguous range of NTV2AudioSystems.
|
|
**/
|
|
AJAExport NTV2AudioSystemSet NTV2MakeAudioSystemSet (const NTV2AudioSystem inFirstAudioSystem, const UWord inCount = 1); // New in SDK 16.2
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
|
|
|
|
/**
|
|
@brief Everything needed to call CNTV2Card::ReadRegister or CNTV2Card::WriteRegister functions.
|
|
**/
|
|
typedef struct NTV2RegInfo
|
|
{
|
|
ULWord registerNumber; ///< @brief My register number to use in a ReadRegister or WriteRegister call.
|
|
ULWord registerValue; ///< @brief My register value to use in a ReadRegister or WriteRegister call.
|
|
ULWord registerMask; ///< @brief My register mask value to use in a ReadRegister or WriteRegister call.
|
|
ULWord registerShift; ///< @brief My register shift value to use in a ReadRegister or WriteRegister call.
|
|
|
|
#if !defined(NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs me from the given parameters.
|
|
@param[in] inRegNum Specifies the register number to use. If not specified, defaults to zero.
|
|
@param[in] inRegValue Specifies the register value to use. If not specified, defaults to zero.
|
|
@param[in] inRegMask Specifies the bit mask to use. If not specified, defaults to 0xFFFFFFFF.
|
|
@param[in] inRegShift Specifies the shift to use. If not specified, defaults to zero.
|
|
**/
|
|
AJAExport NTV2RegInfo (const ULWord inRegNum = 0, const ULWord inRegValue = 0, const ULWord inRegMask = 0xFFFFFFFF, const ULWord inRegShift = 0)
|
|
: registerNumber (inRegNum),
|
|
registerValue (inRegValue),
|
|
registerMask (inRegMask),
|
|
registerShift (inRegShift)
|
|
{
|
|
}
|
|
|
|
/**
|
|
@brief Sets me from the given parameters.
|
|
@param[in] inRegNum Specifies the register number to use.
|
|
@param[in] inRegValue Specifies the register value to use.
|
|
@param[in] inRegMask Specifies the bit mask to use. If not specified, defaults to 0xFFFFFFFF.
|
|
@param[in] inRegShift Specifies the shift to use. If not specified, defaults to zero.
|
|
**/
|
|
AJAExport inline void Set (const ULWord inRegNum, const ULWord inRegValue, const ULWord inRegMask = 0xFFFFFFFF, const ULWord inRegShift = 0)
|
|
{registerNumber = inRegNum; registerValue = inRegValue; registerMask = inRegMask; registerShift = inRegShift;}
|
|
/**
|
|
@brief Invalidates me, setting my register number, value, mask and shift values to 0xFFFFFFFF.
|
|
**/
|
|
AJAExport inline void MakeInvalid (void) {registerNumber = registerValue = registerMask = registerShift = 0xFFFFFFFF;}
|
|
|
|
/**
|
|
@return True if I'm considered "valid", or false if my register number, value, mask and shift values are all 0xFFFFFFFF.
|
|
**/
|
|
AJAExport inline bool IsValid (void) const {return registerNumber != 0xFFFFFFFF || registerValue != 0xFFFFFFFF || registerMask != 0xFFFFFFFF || registerShift != 0xFFFFFFFF;}
|
|
|
|
/**
|
|
@return True if I'm identical to the right-hand-side NTV2RegInfo.
|
|
@param[in] inRHS Specifies the right-hand-side NTV2RegInfo that will be compared to me.
|
|
@note To synthesize the other comparison operators (!=, <=, >, >=), in client code, add "#include <utility>", and "using namespace std::rel_ops;".
|
|
**/
|
|
AJAExport inline bool operator == (const NTV2RegInfo & inRHS) const {return registerNumber == inRHS.registerNumber && registerValue == inRHS.registerValue
|
|
&& registerMask == inRHS.registerMask && registerShift == inRHS.registerShift;}
|
|
/**
|
|
@return True if I'm less than the right-hand-side NTV2RegInfo.
|
|
@param[in] inRHS Specifies the right-hand-side NTV2RegInfo that will be compared to me.
|
|
@note To synthesize the other comparison operators (!=, <=, >, >=), in client code, add "#include <utility>", and "using namespace std::rel_ops;".
|
|
**/
|
|
AJAExport bool operator < (const NTV2RegInfo & inRHS) const;
|
|
|
|
/**
|
|
@brief Renders me to the given output stream in a human-readable format.
|
|
@param outputStream Specifies the output stream in which to Print my contents.
|
|
@param inAsCode Deprecated as of SDK 16.0 -- use PrintCode instead. Defaults to false.
|
|
If true, renders me as source code.
|
|
@return The output stream.
|
|
**/
|
|
AJAExport std::ostream & Print (std::ostream & outputStream, const bool inAsCode = false) const;
|
|
|
|
/**
|
|
@brief Renders me to the given output stream as source code using a "WriteRegister" function call.
|
|
@param outputStream Specifies the output stream to write into.
|
|
@param[in] inRadix Optionally specifies the radix to use for the my register value. Defaults to hexadecimal (base 16).
|
|
@param[in] inDeviceID Optionally specifies the ::NTV2DeviceID for properly interpreting my register values.
|
|
@return The output stream.
|
|
**/
|
|
AJAExport std::ostream & PrintCode (std::ostream & outputStream, const int inRadix = 16, const NTV2DeviceID inDeviceID = DEVICE_ID_INVALID) const; // New in SDK 16.0, added inDeviceID in 16.2
|
|
#endif // not NTV2_BUILDING_DRIVER
|
|
} NTV2RegInfo;
|
|
|
|
|
|
typedef NTV2RegInfo NTV2ReadWriteRegisterSingle; ///< @brief This is an alias for NTV2RegInfo -- everything needed to make a future ReadRegister or WriteRegister call.
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
typedef std::vector <NTV2RegInfo> NTV2RegisterWrites, NTV2RegWrites; ///< @brief An ordered sequence of zero or more NTV2RegInfo structs intended for WriteRegister.
|
|
typedef NTV2RegWrites::const_iterator NTV2RegisterWritesConstIter, NTV2RegWritesConstIter; ///< @brief A handy const (read-only) iterator for iterating over the contents of an NTV2RegisterWrites instance.
|
|
typedef NTV2RegWrites::iterator NTV2RegisterWritesIter, NTV2RegWritesIter; ///< @brief A handy non-const iterator for iterating over the contents of an NTV2RegisterWrites instance.
|
|
typedef NTV2RegWrites NTV2RegisterReads, NTV2RegReads; ///< @brief An ordered sequence of zero or more NTV2RegInfo structs intended for ReadRegister.
|
|
typedef NTV2RegWritesConstIter NTV2RegisterReadsConstIter, NTV2RegReadsConstIter; ///< @brief A handy const (read-only) iterator for iterating over the contents of an NTV2RegisterReads instance.
|
|
typedef NTV2RegWritesIter NTV2RegisterReadsIter, NTV2RegReadsIter; ///< @brief A handy non-const iterator for iterating over the contents of an NTV2RegisterReads instance.
|
|
|
|
/**
|
|
@brief Returns a const iterator to the first entry in the NTV2RegInfo collection with a matching register number.
|
|
@param[in] inRegNum Specifies the register number of interest.
|
|
@param[in] inRegInfos Specifies the NTV2RegInfo collection to search.
|
|
@return A const_iterator that references the entry in the NTV2RegInfo collection, or "end()" if not found.
|
|
**/
|
|
AJAExport NTV2RegReadsConstIter FindFirstMatchingRegisterNumber (const uint32_t inRegNum, const NTV2RegReads & inRegInfos);
|
|
|
|
/**
|
|
@brief Writes the given NTV2RegInfo to the specified output stream.
|
|
@param inOutStream Specifies the output stream to receive the human-readable representation of the NTV2RegInfo instance.
|
|
@param[in] inObj Specifies the NTV2RegInfo instance to print to the output stream.
|
|
@return A non-constant reference to the specified output stream.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2RegInfo & inObj);
|
|
|
|
/**
|
|
@brief Writes the given NTV2RegisterWrites to the specified output stream.
|
|
@param inOutStream Specifies the output stream to receive the human-readable representation of the NTV2RegisterWrites instance.
|
|
@param[in] inObj Specifies the NTV2RegisterWrites instance to print to the output stream.
|
|
@return A non-constant reference to the specified output stream.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2RegisterWrites & inObj);
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
|
|
|
|
typedef struct NTV2RoutingEntry
|
|
{
|
|
ULWord registerNum;
|
|
ULWord mask;
|
|
ULWord shift;
|
|
ULWord value;
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2RoutingEntry & operator = (const NTV2RegInfo & inRHS); ///< @brief Assigns an NTV2RegInfo to me.
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
} NTV2RoutingEntry; ///< @deprecated Formerly used by the CNTV2SignalRouter
|
|
|
|
#define MAX_ROUTING_ENTRIES 32
|
|
|
|
typedef struct
|
|
{
|
|
ULWord numEntries;
|
|
NTV2RoutingEntry routingEntry [MAX_ROUTING_ENTRIES];
|
|
} NTV2RoutingTable; ///< @deprecated Formerly used by the CNTV2SignalRouter
|
|
|
|
#if !defined (NTV2_DEPRECATE)
|
|
typedef NTV2RoutingEntry Xena2RoutingEntry; ///< @deprecated 'Xena' is obsolete.
|
|
typedef NTV2RoutingTable Xena2RoutingTable; ///< @deprecated 'Xena' is obsolete.
|
|
#endif // if !defined (NTV2_DEPRECATE)
|
|
|
|
|
|
// Color Space Convert Custom Coefficients
|
|
typedef struct
|
|
{
|
|
ULWord Coefficient1;
|
|
ULWord Coefficient2;
|
|
ULWord Coefficient3;
|
|
ULWord Coefficient4;
|
|
ULWord Coefficient5;
|
|
ULWord Coefficient6;
|
|
ULWord Coefficient7;
|
|
ULWord Coefficient8;
|
|
ULWord Coefficient9;
|
|
ULWord Coefficient10;
|
|
} ColorSpaceConverterCustomCoefficients, NTV2CSCCustomCoeffs;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
// RP188 data structure used in AutoCirculate
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef struct RP188_STRUCT {
|
|
ULWord DBB;
|
|
ULWord Low; // | BG 4 | Secs10 | BG 3 | Secs 1 | BG 2 | Frms10 | BG 1 | Frms 1 |
|
|
ULWord High; // | BG 8 | Hrs 10 | BG 7 | Hrs 1 | BG 6 | Mins10 | BG 5 | Mins 1 |
|
|
} RP188_STRUCT;
|
|
|
|
|
|
#define RP188_STRUCT_SET(_struct_,_dbb_,_lo_,_hi_) do \
|
|
{ \
|
|
(_struct_).DBB = (_dbb_); \
|
|
(_struct_).Low = (_lo_); \
|
|
(_struct_).High = (_hi_); \
|
|
} while (false)
|
|
|
|
#define RP188_PSTRUCT_SET(_pStruct_,_dbb_,_lo_,_hi_) do \
|
|
{ \
|
|
(_pStruct_)->DBB = (_dbb_); \
|
|
(_pStruct_)->Low = (_lo_); \
|
|
(_pStruct_)->High = (_hi_); \
|
|
} while (false)
|
|
|
|
// convenience masks to extract fields in .Low and .High words
|
|
#define RP188_FRAMEUNITS_MASK 0x0000000F // Frames (units digit) in bits 3- 0 of .Low word
|
|
#define RP188_FRAMETENS_MASK 0x00000300 // Frames (tens digit) in bits 9- 8 of .Low word
|
|
#define RP188_SECONDUNITS_MASK 0x000F0000 // Seconds (units digit) in bits 19-16 of .Low word
|
|
#define RP188_SECONDTENS_MASK 0x07000000 // Seconds (tens digit) in bits 26-24 of .Low word
|
|
#define RP188_LOW_TIME_MASK (RP188_FRAMEUNITS_MASK | RP188_FRAMETENS_MASK | RP188_SECONDUNITS_MASK | RP188_SECONDTENS_MASK)
|
|
|
|
#define RP188_MINUTESUNITS_MASK 0x0000000F // Minutes (units digit) in bits 3- 0 of .High word
|
|
#define RP188_MINUTESTENS_MASK 0x00000700 // Minutes (tens digit) in bits 10- 8 of .High word
|
|
#define RP188_HOURUNITS_MASK 0x000F0000 // Hours (units digit) in bits 19-16 of .High word
|
|
#define RP188_HOURTENS_MASK 0x03000000 // Hours (tens digit) in bits 25-24 of .High word
|
|
#define RP188_HIGH_TIME_MASK (RP188_MINUTESUNITS_MASK | RP188_MINUTESTENS_MASK | RP188_HOURUNITS_MASK | RP188_HOURTENS_MASK)
|
|
|
|
// private bit flags added to the RP188 DBB word
|
|
#define NEW_RP188_RCVD 0x00010000 // new RP188 data was received on ANY of the channels (LTC, VITC, etc.) (capture only)
|
|
#define NEW_SELECT_RP188_RCVD 0x00020000 // new RP188 data was received on the selected channel (capture only)
|
|
#define RP188_720P_FRAMEID 0x00400000 // 720p FrameID (capture only - set by driver software)
|
|
#define RP188_CHANGED_FLAG 0x00800000 // RP188 data changed compared to last frame (capture only - set by driver software)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
// Color Correction data structure used in AutoCirculate
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
// Color Corrector has 3 tables(usually R, G and B). Each table has 1024 entries
|
|
// with 2 entries per 32 bit word....therefore 512 32 bit words per table.
|
|
#define NTV2_COLORCORRECTOR_WORDSPERTABLE (512) // number of ULONG words in EACH color table
|
|
#define NTV2_COLORCORRECTOR_TOTALWORDS (NTV2_COLORCORRECTOR_WORDSPERTABLE * 3) // total number of ULONG words in all 3 tables
|
|
#define NTV2_COLORCORRECTOR_TABLESIZE (NTV2_COLORCORRECTOR_TOTALWORDS * 4) // total length in bytes of all 3 tables: numWords * numColors * bytes/word
|
|
|
|
// 12 bit Color Corrector has 3 tables(usually R, G and B). Each table has 4096 entries
|
|
// with 2 entries per 32 bit word....therefore 2048 32 bit words per table.
|
|
#define NTV2_12BIT_COLORCORRECTOR_WORDSPERTABLE (2048) // number of ULONG words in EACH color table
|
|
#define NTV2_12BIT_COLORCORRECTOR_TOTALWORDS (NTV2_12BIT_COLORCORRECTOR_WORDSPERTABLE * 3) // total number of ULONG words in all 3 tables
|
|
#define NTV2_12BIT_COLORCORRECTOR_TABLESIZE (NTV2_12BIT_COLORCORRECTOR_TOTALWORDS * 4) // total length in bytes of all 3 tables: numWords * numColors * bytes/word
|
|
|
|
|
|
typedef struct NTV2ColorCorrectionInfo_64 {
|
|
NTV2ColorCorrectionMode mode;
|
|
UWord_ saturationValue; /// only used in 3way color correction mode.
|
|
Pointer64 ccLookupTables; /// R,G, and B lookup tables already formated for our hardware.
|
|
/// Buffer needs to be NTV2_COLORCORRECTOR_TABLESIZE.
|
|
} NTV2ColorCorrectionInfo_64;
|
|
|
|
|
|
typedef struct {
|
|
NTV2ColorCorrectionMode mode;
|
|
UWord_ saturationValue; /// only used in 3way color correction mode.
|
|
ULWord* ccLookupTables; /// R,G, and B lookup tables already formated for our hardware.
|
|
/// Buffer needs to be NTV2_COLORCORRECTOR_TABLESIZE.
|
|
} NTV2ColorCorrectionInfo;
|
|
|
|
typedef struct {
|
|
NTV2ColorCorrectionMode mode;
|
|
UWord_ saturationValue; /// only used in 3way color correction mode.
|
|
ULWord* POINTER_32 ccLookupTables; /// R,G, and B lookup tables already formated for our hardware.
|
|
/// Buffer needs to be NTV2_COLORCORRECTOR_TABLESIZE.
|
|
} NTV2ColorCorrectionInfo_32;
|
|
|
|
// within each 32-bit LUT word, bits <31:22> = LUT[2i+1], bits <15:6> = LUT[2i]
|
|
#define kRegColorCorrectionLUTOddShift 22
|
|
#define kRegColorCorrectionLUTEvenShift 6
|
|
|
|
// the base BYTE offsets (from PCI Config Base Address 0) of the three Color Correction LUTs
|
|
// Note: if using these with GetRegisterBaseAddress() be sure to divide by 4 to get WORD offset!
|
|
#define kColorCorrectionLUTOffset_Red (0x0800)
|
|
#define kColorCorrectionLUTOffset_Green (0x1000)
|
|
#define kColorCorrectionLUTOffset_Blue (0x1800)
|
|
|
|
// within each 32-bit LUT word, bits <31:22> = LUT[2i+1], bits <15:6> = LUT[2i]
|
|
#define kRegColorCorrection12BitLUTOddShift 16
|
|
#define kRegColorCorrection12BitLUTEvenShift 0
|
|
|
|
#define kRegColorCorrection10To12BitLUTOddShift 18
|
|
#define kRegColorCorrection10To12BitLUTEvenShift 2
|
|
|
|
// Note: there is code that assumes that the three LUTs are contiguous. So if this relationship
|
|
// changes (i.e. there are "gaps" between tables) then code will need to change!
|
|
#define kColorCorrectionLUTOffset_Base (0x0800) // BYTE offset
|
|
#define kColorCorrection12BitLUTOffset_Base (0xe000) // BYTE offset
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
// VidProc data structure used in AutoCirculate
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef enum
|
|
{
|
|
AUTOCIRCVIDPROCMODE_MIX,
|
|
AUTOCIRCVIDPROCMODE_HORZWIPE,
|
|
AUTOCIRCVIDPROCMODE_VERTWIPE,
|
|
AUTOCIRCVIDPROCMODE_KEY,
|
|
AUTOCIRCVIDPROCMODE_INVALID
|
|
} AutoCircVidProcMode;
|
|
|
|
#define NTV2_IS_VALID_AUTOCIRCVIDPROCMODE(__m__) ((__m__) >= AUTOCIRCVIDPROCMODE_MIX && (__m__) < AUTOCIRCVIDPROCMODE_INVALID)
|
|
|
|
|
|
|
|
typedef struct AutoCircVidProcInfo
|
|
{
|
|
AutoCircVidProcMode mode;
|
|
NTV2Crosspoint foregroundVideoCrosspoint;
|
|
NTV2Crosspoint backgroundVideoCrosspoint;
|
|
NTV2Crosspoint foregroundKeyCrosspoint;
|
|
NTV2Crosspoint backgroundKeyCrosspoint;
|
|
Fixed_ transitionCoefficient; // 0-0x10000
|
|
Fixed_ transitionSoftness; // 0-0x10000
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
public:
|
|
AJAExport explicit AutoCircVidProcInfo ();
|
|
#endif // user-space clients only
|
|
} AutoCircVidProcInfo;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
// CustomAncData data structure used in AutoCirculate
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
typedef struct
|
|
{
|
|
ULWord Group1;
|
|
ULWord Group2;
|
|
ULWord Group3;
|
|
ULWord Group4;
|
|
} CUSTOM_ANC_STRUCT;
|
|
|
|
#define OBSOLETE_ANC_STRUCT CUSTOM_ANC_STRUCT
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////
|
|
// Control
|
|
////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef enum _AutoCircCommand_
|
|
{
|
|
eInitAutoCirc,
|
|
eStartAutoCirc,
|
|
eStopAutoCirc,
|
|
ePauseAutoCirc,
|
|
eGetAutoCirc,
|
|
eGetFrameStamp,
|
|
eFlushAutoCirculate,
|
|
ePrerollAutoCirculate,
|
|
eTransferAutoCirculate,
|
|
eAbortAutoCirc,
|
|
eStartAutoCircAtTime,
|
|
eTransferAutoCirculateEx,
|
|
eTransferAutoCirculateEx2,
|
|
eGetFrameStampEx2,
|
|
eSetCaptureTask,
|
|
eSetActiveFrame,
|
|
AUTO_CIRC_NUM_COMMANDS,
|
|
AUTO_CIRC_COMMAND_INVALID = AUTO_CIRC_NUM_COMMANDS
|
|
} NTV2AutoCirculateCommand, NTV2AutoCircCmd, AUTO_CIRC_COMMAND;
|
|
|
|
|
|
/**
|
|
@brief Describes the state of an AutoCirculate channel. See ::AUTOCIRCULATE_STATUS.
|
|
**/
|
|
typedef enum
|
|
{
|
|
NTV2_AUTOCIRCULATE_DISABLED = 0, ///< @brief The AutoCirculate channel is stopped.
|
|
NTV2_AUTOCIRCULATE_INIT, ///< @brief The AutoCirculate channel is initializing, waiting for CNTV2Card::AutoCirculateStart to be called.
|
|
NTV2_AUTOCIRCULATE_STARTING, ///< @brief The AutoCirculate channel is starting, waiting for the first VBI and/or call to CNTV2Card::AutoCirculateTransfer.
|
|
NTV2_AUTOCIRCULATE_PAUSED, ///< @brief The AutoCirculate channel is paused.
|
|
NTV2_AUTOCIRCULATE_STOPPING, ///< @brief The AutoCirculate channel is stopping.
|
|
NTV2_AUTOCIRCULATE_RUNNING, ///< @brief The AutoCirculate channel is running.
|
|
NTV2_AUTOCIRCULATE_STARTING_AT_TIME, ///< @brief The AutoCirculate channel is starting, waiting for the start time specified in the call to CNTV2Card::AutoCirculateStart to arrive.
|
|
NTV2_AUTOCIRCULATE_INVALID
|
|
} NTV2AutoCirculateState;
|
|
|
|
#define NTV2_IS_VALID_AUTO_CIRC_STATE(__m__) ((__m__) >= NTV2_AUTOCIRCULATE_DISABLED && (__m__) < NTV2_AUTOCIRCULATE_INVALID)
|
|
|
|
|
|
/**
|
|
@brief Describes the task mode state. See also: \ref devicesharing
|
|
**/
|
|
typedef enum
|
|
{
|
|
NTV2_DISABLE_TASKS, ///< @brief 0: Disabled: Device is completely configured by controlling application(s) -- no driver involvement.
|
|
NTV2_STANDARD_TASKS, ///< @brief 1: Standard/Retail: Device is completely controlled by AJA ControlPanel, service/daemon, and driver.
|
|
NTV2_OEM_TASKS, ///< @brief 2: OEM: Device is configured by controlling application(s), with minimal driver involvement.
|
|
NTV2_TASK_MODE_INVALID = 0xFF
|
|
} NTV2EveryFrameTaskMode, NTV2TaskMode;
|
|
|
|
#define NTV2_IS_VALID_TASK_MODE(__m__) ((__m__) == NTV2_DISABLE_TASKS || (__m__) == NTV2_STANDARD_TASKS || (__m__) == NTV2_OEM_TASKS)
|
|
#define NTV2_IS_STANDARD_TASKS(__m__) ((__m__) == NTV2_STANDARD_TASKS)
|
|
#define NTV2_IS_DRIVER_ACTIVE_TASKS(__m__) ((__m__) == NTV2_STANDARD_TASKS || (__m__) == NTV2_OEM_TASKS)
|
|
|
|
|
|
typedef enum
|
|
{
|
|
NTV2_FREEZE_BITFILE = BIT(30),
|
|
NTV2_DRIVER_TASKS = BIT(28)
|
|
} NTV2DebugReg;
|
|
|
|
|
|
#ifdef AJAMac
|
|
#pragma pack(4) // removes 64 bit alignment on non-64 bit fields
|
|
#endif
|
|
|
|
// Structure used for GetAutoCirculate
|
|
typedef struct
|
|
{
|
|
NTV2Crosspoint channelSpec; // Not used by Windows.
|
|
NTV2AutoCirculateState state;
|
|
LWord startFrame;
|
|
LWord endFrame;
|
|
LWord activeFrame; // Current Frame# actually being output (or input), -1, if not active
|
|
ULWord64 rdtscStartTime; // Performance Counter at start
|
|
ULWord64 audioClockStartTime; // Register 28 with Wrap Logic
|
|
ULWord64 rdtscCurrentTime; // Performance Counter at time of call
|
|
ULWord64 audioClockCurrentTime; // Register 28 with Wrap Logic
|
|
ULWord framesProcessed;
|
|
ULWord framesDropped;
|
|
ULWord bufferLevel; // how many buffers ready to record or playback in driver
|
|
BOOL_ bWithAudio;
|
|
BOOL_ bWithRP188;
|
|
BOOL_ bFbfChange;
|
|
BOOL_ bFboChange ;
|
|
BOOL_ bWithColorCorrection;
|
|
BOOL_ bWithVidProc;
|
|
BOOL_ bWithCustomAncData;
|
|
} AUTOCIRCULATE_STATUS_STRUCT;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
AUTO_CIRC_COMMAND eCommand;
|
|
NTV2Crosspoint channelSpec;
|
|
|
|
LWord lVal1;
|
|
LWord lVal2;
|
|
LWord lVal3;
|
|
LWord lVal4;
|
|
LWord lVal5;
|
|
LWord lVal6;
|
|
|
|
BOOL_ bVal1;
|
|
BOOL_ bVal2;
|
|
BOOL_ bVal3;
|
|
BOOL_ bVal4;
|
|
BOOL_ bVal5;
|
|
BOOL_ bVal6;
|
|
BOOL_ bVal7;
|
|
BOOL_ bVal8;
|
|
|
|
Pointer64 pvVal1;
|
|
Pointer64 pvVal2;
|
|
Pointer64 pvVal3;
|
|
Pointer64 pvVal4;
|
|
|
|
} AUTOCIRCULATE_DATA_64;
|
|
|
|
|
|
typedef struct AUTOCIRCULATE_DATA
|
|
{
|
|
AUTO_CIRC_COMMAND eCommand;
|
|
NTV2Crosspoint channelSpec;
|
|
|
|
LWord lVal1;
|
|
LWord lVal2;
|
|
LWord lVal3;
|
|
LWord lVal4;
|
|
LWord lVal5;
|
|
LWord lVal6;
|
|
|
|
BOOL_ bVal1;
|
|
BOOL_ bVal2;
|
|
BOOL_ bVal3;
|
|
BOOL_ bVal4;
|
|
BOOL_ bVal5;
|
|
BOOL_ bVal6;
|
|
BOOL_ bVal7;
|
|
BOOL_ bVal8;
|
|
|
|
void* pvVal1;
|
|
void* pvVal2;
|
|
void* pvVal3;
|
|
void* pvVal4;
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
public:
|
|
AJAExport explicit AUTOCIRCULATE_DATA (const AUTO_CIRC_COMMAND inCommand = AUTO_CIRC_COMMAND_INVALID, const NTV2Crosspoint inCrosspoint = NTV2CROSSPOINT_INVALID);
|
|
#endif // user-space clients only
|
|
} AUTOCIRCULATE_DATA;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
AUTO_CIRC_COMMAND eCommand;
|
|
NTV2Crosspoint channelSpec;
|
|
|
|
LWord lVal1;
|
|
LWord lVal2;
|
|
LWord lVal3;
|
|
LWord lVal4;
|
|
LWord lVal5;
|
|
LWord lVal6;
|
|
|
|
BOOL_ bVal1;
|
|
BOOL_ bVal2;
|
|
BOOL_ bVal3;
|
|
BOOL_ bVal4;
|
|
BOOL_ bVal5;
|
|
BOOL_ bVal6;
|
|
BOOL_ bVal7;
|
|
BOOL_ bVal8;
|
|
|
|
void* POINTER_32 pvVal1;
|
|
void* POINTER_32 pvVal2;
|
|
void* POINTER_32 pvVal3;
|
|
void* POINTER_32 pvVal4;
|
|
|
|
} AUTOCIRCULATE_DATA_32;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
// GetFrameStamp
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef struct
|
|
{
|
|
NTV2Crosspoint channelSpec; // Ignored in Windows
|
|
|
|
//
|
|
// Information from the requested frame (#FRAMESTAMP_CONTROL_STRUCT:frameNum
|
|
//
|
|
|
|
// Clock (System PerformanceCounter under Windows) at time of play or record.
|
|
// audioClockTimeStamp is preferred, but not available on all boards. (See comments below at 'currentTime' member.)
|
|
LWord64 frameTime;
|
|
|
|
//! The frame requested or -1 if not available
|
|
ULWord frame;
|
|
|
|
//! 48kHz clock (in reg 28, extended to 64 bits) at time of play or record.
|
|
ULWord64 audioClockTimeStamp; // Register 28 with Wrap Logic
|
|
|
|
//! The address that was used to transfer
|
|
ULWord audioExpectedAddress;
|
|
|
|
//! For record - first position in buffer of audio (includes base offset)
|
|
ULWord audioInStartAddress; // AudioInAddress at the time this Frame was stamped.
|
|
|
|
//! For record - end position (exclusive) in buffer of audio (includes base offset)
|
|
ULWord audioInStopAddress; // AudioInAddress at the Frame AFTER this Frame was stamped.
|
|
|
|
//! For play - first position in buffer of audio
|
|
ULWord audioOutStopAddress; // AudioOutAddress at the time this Frame was stamped.
|
|
|
|
//! For play - end position (exclusive) in buffer of audio
|
|
ULWord audioOutStartAddress; // AudioOutAddress at the Frame AFTER this Frame was stamped.
|
|
|
|
//! Total audio and video bytes transfered
|
|
ULWord bytesRead;
|
|
|
|
/** The actaul start sample when this frame was started in VBI
|
|
* This may be used to check sync against audioInStartAddress (Play) or
|
|
* audioOutStartAddress (Record). In record it will always be equal, but
|
|
* in playback if the clocks drift or the user supplies non aligned
|
|
* audio sizes, then this will give the current difference from expected
|
|
* vs actual position. To be useful, play audio must be clocked in at
|
|
* the correct rate.
|
|
*/
|
|
ULWord startSample;
|
|
|
|
//
|
|
// Information from the current (active) frame
|
|
//
|
|
|
|
//! Current processor time ... on Windows, this is derived from KeQueryPerformanceCounter.
|
|
// This is the finest-grained counter available from the OS.
|
|
// The granularity of this counter can vary depending on the PC's HAL.
|
|
// audioClockCurrentTime is the recommended time-stamp to use instead of this (but is not available on all boards)!
|
|
LWord64 currentTime; //! Last vertical blank frame for this channel's auto-circulate. (at the time of the IOCTL_NTV2_GET_FRAMESTAMP)
|
|
ULWord currentFrame;
|
|
|
|
//! Last vertical blank timecode (RP-188)
|
|
RP188_STRUCT currentRP188; // ignored if withRP188 is false
|
|
|
|
//! Vertical blank start of current frame
|
|
LWord64 currentFrameTime;
|
|
|
|
//! 48kHz clock in reg 28 extended to 64 bits
|
|
ULWord64 audioClockCurrentTime; // Register 28 with Wrap Logic
|
|
// audioClockCurrentTime (from 48 kHz on-board clock) is consistent and accurate!
|
|
// but is not available on the XenaSD-22.
|
|
|
|
//! As set by play
|
|
ULWord currentAudioExpectedAddress;
|
|
|
|
//! As found by isr
|
|
ULWord currentAudioStartAddress;
|
|
|
|
//! At Call Field0 or Field1 _currently_ being OUTPUT (at the time of the IOCTL_NTV2_GET_FRAMESTAMP)
|
|
ULWord currentFieldCount;
|
|
ULWord currentLineCount; //! At Call Line# _currently_ being OUTPUT (at the time of the IOCTL_NTV2_GET_FRAMESTAMP)
|
|
ULWord currentReps; //! Contains validCount (Play - reps remaining, Record - drops on frame)
|
|
ULWord currenthUser; //! User cookie at last vblank
|
|
} FRAME_STAMP_STRUCT;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
NTV2Crosspoint channelSpec; // specify Input or Output channel for desired Frame
|
|
NTV2AutoCirculateState state; // current state
|
|
LWord transferFrame; // framebuffer number the frame transferred to, -1 on error
|
|
ULWord bufferLevel; // how many buffers ready to record or playback
|
|
ULWord framesProcessed;
|
|
ULWord framesDropped;
|
|
FRAME_STAMP_STRUCT frameStamp; // record. framestramp for that frame,playback
|
|
ULWord audioBufferSize;
|
|
ULWord audioStartSample;
|
|
} AUTOCIRCULATE_TRANSFER_STATUS_STRUCT, *PAUTOCIRCULATE_TRANSFER_STATUS_STRUCT;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
NTV2Crosspoint channelSpec; // Specify Input or Output channel for desired Frame
|
|
Pointer64 videoBuffer; // Keep 64 bit aligned for performance reasons
|
|
ULWord videoBufferSize;
|
|
ULWord videoDmaOffset; // Must be initialized, 64 bit aligned
|
|
Pointer64 audioBuffer; // Keep 64 bit aligned for performance reasons
|
|
ULWord audioBufferSize;
|
|
ULWord audioStartSample; // To ensure correct alignment in audio buffer .. NOT USED in Windows... audio now always starts at sample zero.
|
|
ULWord audioNumChannels; // 1-6 NOTE!!! only 6 supported at this time
|
|
ULWord frameRepeatCount; // NOTE!!! not supported yet.
|
|
RP188_STRUCT rp188; // Ignored if withRP188 is false
|
|
LWord desiredFrame; // -1 if you want driver to find next available
|
|
ULWord hUser; // A user cookie returned by frame stamp
|
|
ULWord transferFlags; // disableAudioDMA is no longer used
|
|
BOOL_ bDisableExtraAudioInfo; // No 24 byte 0 at front or size info in buffer
|
|
NTV2FrameBufferFormat frameBufferFormat; // Should be initialized, but can be overridden
|
|
NTV2VideoFrameBufferOrientation frameBufferOrientation;
|
|
NTV2ColorCorrectionInfo_64 colorCorrectionInfo;
|
|
AutoCircVidProcInfo vidProcInfo;
|
|
CUSTOM_ANC_STRUCT customAncInfo; ///< @brief This field is obsolete. Do not use.
|
|
// The following params are for cases when you need to DMA multiple discontiguous "segments" of a video frame. One example
|
|
// would be when a frame in Host memory is not "packed", i.e. there are extra "padding" bytes at the end of each row.
|
|
// In this case you would set videoBufferSize to the number of active bytes per row, videoNumSegments to the number of rows,
|
|
// and videoSegmentHostPitch to the number of bytes from the beginning of one row to the next. In this example,
|
|
// videoSegmentCardPitch would be equal to videoBufferSize (i.e. the frame is packed in board memory).
|
|
// Another example would be DMAing a sub-section of a frame. In this case set videoBufferSize to the number of bytes in
|
|
// one row of the subsection, videoNumSegments to the number of rows in the subsection, videoSegmentHostPitch to the rowBytes
|
|
// of the entire frame in Host Memory, and videoSegmentCardPitch to the rowBytes of the entire frame in board memory.
|
|
// Note: setting videoNumSegments to 0 or 1 defaults to original behavior (i.e. DMA one complete packed frame)
|
|
ULWord videoNumSegments; // Number of segments of size videoBufferSize to DMA (i.e. numLines)
|
|
ULWord videoSegmentHostPitch; // Offset (in bytes) between the beginning of one host segment and the beginning of the next host segment (i.e. host rowBytes)
|
|
ULWord videoSegmentCardPitch; // Offset (in bytes) between the beginning of one board segment and the beginning of the next board segment (i.e. board memory rowBytes)
|
|
NTV2QuarterSizeExpandMode videoQuarterSizeExpand; // Turns on the "quarter-size expand" (2x H + 2x V) hardware
|
|
//ULWord * ancBuffer; // Host ANC data buffer. If NULL, none transferred.
|
|
//ULWord ancBufferSize; // Capture: before xfer: specifies max size of host ancBuffer; after xfer: actual number of ANC data bytes xferred
|
|
// Playout: specifies number of ANC data bytes to xfer from host ancBuffer to device
|
|
// If zero, none transferred.
|
|
} AUTOCIRCULATE_TRANSFER_STRUCT_64, *PAUTOCIRCULATE_TRANSFER_STRUCT_64;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
NTV2Crosspoint channelSpec; // specify Input or Output channel for desired Frame
|
|
ULWord * videoBuffer; // Keep 64 bit aligned for performance reasons
|
|
ULWord videoBufferSize;
|
|
ULWord videoDmaOffset; // must be initialized, 64 bit aligned
|
|
ULWord * audioBuffer; // Keep 64 bit aligned for performance reasons
|
|
ULWord audioBufferSize;
|
|
ULWord audioStartSample; // To ensure correct alignment in audio buffer .. NOT USED in Windows... audio now always starts at sample zero.
|
|
ULWord audioNumChannels; // 1-6 NOTE!!! only 6 supported at this time
|
|
ULWord frameRepeatCount; // NOTE!!! not supported yet.
|
|
RP188_STRUCT rp188; // Ignored if withRP188 is false
|
|
LWord desiredFrame; // -1 if you want driver to find next available
|
|
ULWord hUser; // A user cookie returned by frame stamp
|
|
ULWord transferFlags; // disableAudioDMA is no longer used
|
|
BOOL_ bDisableExtraAudioInfo; // No 24 byte 0 at front or size info in buffer
|
|
NTV2FrameBufferFormat frameBufferFormat; // Should be initialized, but can be overridden
|
|
NTV2VideoFrameBufferOrientation frameBufferOrientation;
|
|
NTV2ColorCorrectionInfo colorCorrectionInfo;
|
|
AutoCircVidProcInfo vidProcInfo;
|
|
CUSTOM_ANC_STRUCT customAncInfo; ///< @brief This field is obsolete. Do not use.
|
|
// The following params are for cases when you need to DMA multiple discontiguous "segments" of a video frame. One example
|
|
// would be when a frame in Host memory is not "packed", i.e. there are extra "padding" bytes at the end of each row.
|
|
// In this case you would set videoBufferSize to the number of active bytes per row, videoNumSegments to the number of rows,
|
|
// and videoSegmentHostPitch to the number of bytes from the beginning of one row to the next. In this example,
|
|
// videoSegmentCardPitch would be equal to videoBufferSize (i.e. the frame is packed in board memory).
|
|
// Another example would be DMAing a sub-section of a frame. In this case set videoBufferSize to the number of bytes in
|
|
// one row of the subsection, videoNumSegments to the number of rows in the subsection, videoSegmentHostPitch to the rowBytes
|
|
// of the entire frame in Host Memory, and videoSegmentCardPitch to the rowBytes of the entire frame in board memory.
|
|
// Note: setting videoNumSegments to 0 or 1 defaults to original behavior (i.e. DMA one complete packed frame)
|
|
ULWord videoNumSegments; // Number of segments of size videoBufferSize to DMA (i.e. numLines)
|
|
ULWord videoSegmentHostPitch; // Offset (in bytes) between the beginning of one host segment and the beginning of the next host segment (i.e. host rowBytes)
|
|
ULWord videoSegmentCardPitch; // Offset (in bytes) between the beginning of one board segment and the beginning of the next board segment (i.e. board memory rowBytes)
|
|
NTV2QuarterSizeExpandMode videoQuarterSizeExpand; // Turns on the "quarter-size expand" (2x H + 2x V) hardware
|
|
//ULWord * ancBuffer; // Host ANC data buffer. If NULL, none transferred.
|
|
//ULWord ancBufferSize; // Capture: before xfer: specifies max size of host ancBuffer; after xfer: actual number of ANC data bytes xferred
|
|
// Playout: specifies number of ANC data bytes to xfer from host ancBuffer to device
|
|
// If zero, none transferred.
|
|
|
|
} AUTOCIRCULATE_TRANSFER_STRUCT, *PAUTOCIRCULATE_TRANSFER_STRUCT;
|
|
|
|
|
|
typedef struct
|
|
{
|
|
NTV2Crosspoint channelSpec; // Specify Input or Output channel for desired Frame
|
|
ULWord * POINTER_32 videoBuffer; // Keep 64 bit aligned for performance reasons
|
|
ULWord videoBufferSize;
|
|
ULWord videoDmaOffset; // Must be initialized, 64 bit aligned
|
|
ULWord * POINTER_32 audioBuffer; // Keep 64 bit aligned for performance reasons
|
|
ULWord audioBufferSize;
|
|
ULWord audioStartSample; // To ensure correct alignment in audio buffer .. NOT USED in Windows... audio now always starts at sample zero.
|
|
ULWord audioNumChannels; // 1-6 NOTE!!! only 6 supported at this time
|
|
ULWord frameRepeatCount; // NOTE!!! not supported yet.
|
|
RP188_STRUCT rp188; // Ignored if withRP188 is false
|
|
LWord desiredFrame; // -1 if you want driver to find next available
|
|
ULWord hUser; // A user cookie returned by frame stamp
|
|
ULWord transferFlags; // disableAudioDMA is no longer used
|
|
BOOL_ bDisableExtraAudioInfo; // No 24 byte 0 at front or size info in buffer .. NOT USED in Windows, extra audio no longer supported
|
|
NTV2FrameBufferFormat frameBufferFormat; // Should be initialized, but can be overridden
|
|
NTV2VideoFrameBufferOrientation frameBufferOrientation;
|
|
NTV2ColorCorrectionInfo_32 colorCorrectionInfo;
|
|
AutoCircVidProcInfo vidProcInfo;
|
|
CUSTOM_ANC_STRUCT customAncInfo; ///< @brief This field is obsolete. Do not use.
|
|
// The following params are for cases when you need to DMA multiple discontiguous "segments" of a video frame. One example
|
|
// would be when a frame in Host memory is not "packed", i.e. there are extra "padding" bytes at the end of each row.
|
|
// In this case you would set videoBufferSize to the number of active bytes per row, videoNumSegments to the number of rows,
|
|
// and videoSegmentHostPitch to the number of bytes from the beginning of one row to the next. In this example,
|
|
// videoSegmentCardPitch would be equal to videoBufferSize (i.e. the frame is packed in board memory).
|
|
// Another example would be DMAing a sub-section of a frame. In this case set videoBufferSize to the number of bytes in
|
|
// one row of the subsection, videoNumSegments to the number of rows in the subsection, videoSegmentHostPitch to the rowBytes
|
|
// of the entire frame in Host Memory, and videoSegmentCardPitch to the rowBytes of the entire frame in board memory.
|
|
// Note: setting videoNumSegments to 0 or 1 defaults to original behavior (i.e. DMA one complete packed frame)
|
|
ULWord videoNumSegments; // Number of segments of size videoBufferSize to DMA (i.e. numLines)
|
|
ULWord videoSegmentHostPitch; // Offset (in bytes) between the beginning of one host segment and the beginning of the next host segment (i.e. host rowBytes)
|
|
ULWord videoSegmentCardPitch; // Offset (in bytes) between the beginning of one board segment and the beginning of the next board segment (i.e. board memory rowBytes)
|
|
NTV2QuarterSizeExpandMode videoQuarterSizeExpand; // Turns on the "quarter-size expand" (2x H + 2x V) hardware
|
|
//ULWord * POINTER_32 ancBuffer; // Host ANC data buffer. If NULL, none transferred.
|
|
//ULWord ancBufferSize; // Capture: before xfer: specifies max size of host ancBuffer; after xfer: actual number of ANC data bytes xferred
|
|
// Playout: specifies number of ANC data bytes to xfer from host ancBuffer to device
|
|
// If zero, none transferred.
|
|
} AUTOCIRCULATE_TRANSFER_STRUCT_32, *PAUTOCIRCULATE_TRANSFER_STRUCT_32;
|
|
|
|
|
|
// Structure for autocirculate peer to peer transfers. For p2p target specify kTransferFlagP2PPrepare
|
|
// for completion using kTransferFlagP2PComplete or kTransferFlagP2PTarget for completion with message transfer.
|
|
// Autocirculate will write an AUTOCIRCULATE_P2P_STRUCT to the video buffer specified to the target. Pass this
|
|
// buffer as the video buffer to the autocirculate p2p source (kTransferFlagP2PTransfer) to do the p2p transfer.
|
|
// For completion with kTransferFlagP2PComplete specify the transferFrame from the kTransferFlagP2PPrepare.
|
|
typedef struct
|
|
{
|
|
ULWord p2pSize; // size of p2p structure
|
|
ULWord p2pflags; // p2p transfer flags
|
|
ULWord64 videoBusAddress; // frame buffer bus address
|
|
ULWord64 messageBusAddress; // message register bus address (0 if not required)
|
|
ULWord videoBusSize; // size of the video aperture (bytes)
|
|
ULWord messageData; // message data (write to message bus address to complete video transfer)
|
|
} AUTOCIRCULATE_P2P_STRUCT, *PAUTOCIRCULATE_P2P_STRUCT, CHANNEL_P2P_STRUCT, *PCHANNEL_P2P_STRUCT;
|
|
|
|
|
|
#define AUTOCIRCULATE_TASK_VERSION 0x00000001
|
|
#define AUTOCIRCULATE_TASK_MAX_TASKS 128
|
|
|
|
/**
|
|
@brief These are the available AutoCirculate task types.
|
|
**/
|
|
typedef enum
|
|
{
|
|
eAutoCircTaskNone,
|
|
eAutoCircTaskRegisterWrite, // AutoCircRegisterTask
|
|
eAutoCircTaskRegisterRead, // AutoCircRegisterTask
|
|
eAutoCircTaskTimeCodeWrite, // AutoCircTimeCodeTask
|
|
eAutoCircTaskTimeCodeRead, // AutoCircTimeCodeTask
|
|
MAX_NUM_AutoCircTaskTypes
|
|
} AutoCircTaskType;
|
|
|
|
|
|
#define NTV2_IS_VALID_TASK_TYPE(_x_) ((_x_) > eAutoCircTaskNone && (_x_) < MAX_NUM_AutoCircTaskTypes)
|
|
|
|
#define NTV2_IS_REGISTER_READ_TASK(_x_) ((_x_) == eAutoCircTaskRegisterRead)
|
|
#define NTV2_IS_REGISTER_WRITE_TASK(_x_) ((_x_) == eAutoCircTaskRegisterWrite)
|
|
#define NTV2_IS_REGISTER_TASK(_x_) (NTV2_IS_REGISTER_WRITE_TASK (_x_) || NTV2_IS_REGISTER_READ_TASK (_x_))
|
|
|
|
#define NTV2_IS_TIMECODE_READ_TASK(_x_) ((_x_) == eAutoCircTaskTimeCodeRead)
|
|
#define NTV2_IS_TIMECODE_WRITE_TASK(_x_) ((_x_) == eAutoCircTaskTimeCodeWrite)
|
|
#define NTV2_IS_TIMECODE_TASK(_x_) (NTV2_IS_TIMECODE_WRITE_TASK (_x_) || NTV2_IS_TIMECODE_READ_TASK (_x_))
|
|
|
|
|
|
typedef struct
|
|
{
|
|
ULWord regNum;
|
|
ULWord mask;
|
|
ULWord shift;
|
|
ULWord value;
|
|
} AutoCircRegisterTask;
|
|
|
|
typedef struct
|
|
{
|
|
RP188_STRUCT TCInOut1;
|
|
RP188_STRUCT TCInOut2;
|
|
RP188_STRUCT LTCEmbedded;
|
|
RP188_STRUCT LTCAnalog;
|
|
RP188_STRUCT LTCEmbedded2;
|
|
RP188_STRUCT LTCAnalog2;
|
|
RP188_STRUCT TCInOut3;
|
|
RP188_STRUCT TCInOut4;
|
|
RP188_STRUCT TCInOut5;
|
|
RP188_STRUCT TCInOut6;
|
|
RP188_STRUCT TCInOut7;
|
|
RP188_STRUCT TCInOut8;
|
|
RP188_STRUCT LTCEmbedded3;
|
|
RP188_STRUCT LTCEmbedded4;
|
|
RP188_STRUCT LTCEmbedded5;
|
|
RP188_STRUCT LTCEmbedded6;
|
|
RP188_STRUCT LTCEmbedded7;
|
|
RP188_STRUCT LTCEmbedded8;
|
|
} AutoCircTimeCodeTask;
|
|
|
|
typedef struct AutoCircGenericTask
|
|
{
|
|
AutoCircTaskType taskType;
|
|
union
|
|
{
|
|
AutoCircRegisterTask registerTask;
|
|
AutoCircTimeCodeTask timeCodeTask;
|
|
} u;
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
public:
|
|
AJAExport explicit AutoCircGenericTask () {u.registerTask.regNum = u.registerTask.mask = u.registerTask.shift = u.registerTask.value = 0;}
|
|
#endif // user-space clients only
|
|
} AutoCircGenericTask;
|
|
|
|
typedef struct
|
|
{
|
|
ULWord taskVersion;
|
|
ULWord taskSize;
|
|
ULWord numTasks;
|
|
ULWord maxTasks;
|
|
Pointer64 taskArray;
|
|
ULWord reserved0;
|
|
ULWord reserved1;
|
|
ULWord reserved2;
|
|
ULWord reserved3;
|
|
} AUTOCIRCULATE_TASK_STRUCT_64, *PAUTOCIRCULATE_TASK_STRUCT_64;
|
|
|
|
typedef struct
|
|
{
|
|
ULWord taskVersion;
|
|
ULWord taskSize;
|
|
ULWord numTasks;
|
|
ULWord maxTasks;
|
|
AutoCircGenericTask* taskArray;
|
|
ULWord reserved0;
|
|
ULWord reserved1;
|
|
ULWord reserved2;
|
|
ULWord reserved3;
|
|
} AUTOCIRCULATE_TASK_STRUCT, *PAUTOCIRCULATE_TASK_STRUCT;
|
|
|
|
typedef struct
|
|
{
|
|
ULWord taskVersion;
|
|
ULWord taskSize;
|
|
ULWord numTasks;
|
|
ULWord maxTasks;
|
|
AutoCircGenericTask* POINTER_32 taskArray;
|
|
ULWord reserved0;
|
|
ULWord reserved1;
|
|
ULWord reserved2;
|
|
ULWord reserved3;
|
|
} AUTOCIRCULATE_TASK_STRUCT_32, *PAUTOCIRCULATE_TASK_STRUCT_32;
|
|
|
|
|
|
// Information about the currently programmed Xilinx .bit file
|
|
#define NTV2_BITFILE_DATETIME_STRINGLENGTH (16)
|
|
#define NTV2_BITFILE_DESIGNNAME_STRINGLENGTH (100)
|
|
#define NTV2_BITFILE_PARTNAME_STRINGLENGTH (16)
|
|
// Increment this when you change the bitfile information structure
|
|
// And be sure to update the driver so it can handle the new version.
|
|
#define NTV2_BITFILE_STRUCT_VERSION (4)
|
|
|
|
// There is room for up to 4kbytes after the audio in the last frame,
|
|
// but a 4KB data struct overflows the stack in the ioctl routine in
|
|
// the driver under Linux.
|
|
//#define NTV2_BITFILE_RESERVED_ULWORDS (244)
|
|
//#define NTV2_BITFILE_RESERVED_ULWORDS (243) // added bitFileType
|
|
//#define NTV2_BITFILE_RESERVED_ULWORDS (239) // added designName
|
|
//#define NTV2_BITFILE_RESERVED_ULWORDS (235) // added partName
|
|
#define NTV2_BITFILE_RESERVED_ULWORDS (234) // added whichFPGA
|
|
|
|
typedef struct {
|
|
ULWord checksum; // Platform-dependent. Deprecated on Linux.
|
|
ULWord structVersion; // Version of this structure
|
|
ULWord structSize; // Total size of this structure
|
|
|
|
ULWord numBytes; // Xilinx bitfile bytecount
|
|
char dateStr[NTV2_BITFILE_DATETIME_STRINGLENGTH]; // Date Xilinx bitfile compiled
|
|
char timeStr[NTV2_BITFILE_DATETIME_STRINGLENGTH]; // Time Xilinx bitfile compiled
|
|
char designNameStr[NTV2_BITFILE_DESIGNNAME_STRINGLENGTH];
|
|
|
|
ULWord bitFileType; // NTV2BitfileType
|
|
|
|
char partNameStr[NTV2_BITFILE_PARTNAME_STRINGLENGTH]; // Part name (v4)
|
|
NTV2XilinxFPGA whichFPGA;
|
|
|
|
ULWord reserved[NTV2_BITFILE_RESERVED_ULWORDS];
|
|
|
|
} BITFILE_INFO_STRUCT,*PBITFILE_INFO_STRUCT;
|
|
|
|
|
|
typedef struct {
|
|
NTV2DMAEngine dmaEngine;
|
|
ULWord dmaFlags; // flags passed into DMA currently bit 1 is set for to indicate weird 4096 10bit YUV 4K frame
|
|
|
|
Pointer64 dmaHostBuffer; // vitrual address of host buffer
|
|
ULWord dmaSize; // number of bytes to DMA
|
|
ULWord dmaCardFrameNumber; // card frame number
|
|
ULWord dmaCardFrameOffset; // offset (in bytes) into card frame to begin DMA
|
|
ULWord dmaNumberOfSegments; // number of segments of size videoBufferSize to DMA
|
|
ULWord dmaSegmentSize; // size of each segment (if videoNumSegments > 1)
|
|
ULWord dmaSegmentHostPitch; // offset (in bytes) between the beginning of one host-memory segment and the beginning of the next host-memory segment
|
|
ULWord dmaSegmentCardPitch; // offset (in bytes) between the beginning of one Kona-memory segment and the beginning of the next Kona-memory segment
|
|
|
|
BOOL_ dmaToCard; // direction of DMA transfer
|
|
|
|
} DMA_TRANSFER_STRUCT_64 ,*PDMA_TRANSFER_STRUCT_64;
|
|
|
|
|
|
// NOTE: Max bitfilestruct size was NTV2_AUDIO_READBUFFEROFFSET - NTV2_AUDIO_WRAPADDRESS
|
|
// but is now practically unlimited.
|
|
|
|
// The following structure is used to retrieve the timestamp values of the last video
|
|
// interrupts. Use GetInterruptTimeStamps(&
|
|
typedef struct {
|
|
LWord64 lastOutputVerticalTimeStamp;
|
|
LWord64 lastInput1VerticalTimeStamp;
|
|
LWord64 lastInput2VerticalTimeStamp;
|
|
} INTERRUPT_TIMESTAMP_STRUCT,*PINTERRUPT_TIMESTAMP_STRUCT;
|
|
|
|
// System status calls and structs associated with specific opcodes
|
|
|
|
typedef enum
|
|
{
|
|
SSC_GetFirmwareProgress, // return firmware progress informaiton
|
|
SSC_End // end of list
|
|
} SystemStatusCode;
|
|
|
|
typedef enum
|
|
{
|
|
kProgramStateEraseMainFlashBlock,
|
|
kProgramStateEraseSecondFlashBlock,
|
|
kProgramStateEraseFailSafeFlashBlock,
|
|
kProgramStateProgramFlash,
|
|
kProgramStateVerifyFlash,
|
|
kProgramStateFinished,
|
|
kProgramStateEraseBank3,
|
|
kProgramStateProgramBank3,
|
|
kProgramStateVerifyBank3,
|
|
kProgramStateEraseBank4,
|
|
kProgramStateProgramBank4,
|
|
kProgramStateVerifyBank4,
|
|
kProgramStateErasePackageInfo,
|
|
kProgramStateProgramPackageInfo,
|
|
kProgramStateVerifyPackageInfo,
|
|
kProgramStateCalculating
|
|
} ProgramState;
|
|
|
|
typedef enum {
|
|
kProgramCommandReadID=0x9F,
|
|
kProgramCommandWriteEnable=0x06,
|
|
kProgramCommandWriteDisable=0x04,
|
|
kProgramCommandReadStatus=0x05,
|
|
kProgramCommandWriteStatus=0x01,
|
|
kProgramCommandReadFast=0x0B,
|
|
kProgramCommandPageProgram=0x02,
|
|
kProgramCommandSectorErase=0xD8,
|
|
kProgramCommandBankWrite=0x17
|
|
} ProgramCommand;
|
|
|
|
typedef struct {
|
|
ULWord programTotalSize;
|
|
ULWord programProgress;
|
|
ProgramState programState;
|
|
} SSC_GET_FIRMWARE_PROGRESS_STRUCT;
|
|
|
|
// System control calls and structs associated with specific opcodes
|
|
|
|
typedef enum
|
|
{
|
|
SCC_Test, // just a test for now
|
|
SCC_End // end of list
|
|
} SystemControlCode;
|
|
|
|
typedef struct {
|
|
ULWord param1; // test parameter 1
|
|
ULWord param2; // test parameter 2
|
|
} SCC_TEST_STRUCT;
|
|
|
|
|
|
// Build information
|
|
#define NTV2_BUILD_STRINGLENGTH (1024)
|
|
#define NTV2_BUILD_STRUCT_VERSION (0)
|
|
|
|
#define NTV2_BUILD_RESERVED_BYTES (1016)
|
|
|
|
typedef struct {
|
|
ULWord structVersion; // Version of this structure
|
|
ULWord structSize; // Total size of this structure
|
|
|
|
char buildStr[NTV2_BUILD_STRINGLENGTH]; // User-defined build string
|
|
unsigned char reserved[NTV2_BUILD_RESERVED_BYTES];
|
|
|
|
} BUILD_INFO_STRUCT,*PBUILD_INFO_STRUCT;
|
|
|
|
|
|
#ifdef AJAMac
|
|
#pragma options align=reset
|
|
#endif
|
|
|
|
// used to filter the vout menu display
|
|
typedef enum
|
|
{
|
|
kUndefinedFilterFormats = 0, // Undefined
|
|
kDropFrameFormats = BIT(0), // 23.98 / 29.97 / 59.94
|
|
kNonDropFrameFormats = BIT(1), // 24 / 30 / 60
|
|
kEuropeanFormats = BIT(2), // 25 / 50
|
|
k1080ProgressiveFormats = BIT(3), // 1080p 23.98/24/29.97/30 (exclude 1080psf)
|
|
kREDFormats = BIT(4), // RED's odd geometries
|
|
k2KFormats = BIT(5), // 2K formats
|
|
k4KFormats = BIT(6) // 4K formats
|
|
|
|
} ActiveVideoOutSelect;
|
|
|
|
// STUFF moved from ntv2macinterface.h that is now common
|
|
typedef enum DesktopFrameBuffStatus
|
|
{
|
|
kDesktopFBIniting = 0, // waiting for Finder? Window Mgr? to discover us
|
|
kDesktopFBOff = 1, // Running - not in use
|
|
kDesktopFBOn = 2 // Running - in-use as Mac Desktop
|
|
|
|
} DesktopFrameBuffStatus;
|
|
|
|
|
|
typedef enum SharedPrefsPermissions
|
|
{
|
|
kSharedPrefsRead = 0,
|
|
kSharedPrefsReadWrite = 1
|
|
|
|
} SharedPrefsPermissions;
|
|
|
|
|
|
#if !defined(R2_DEPRECATED)
|
|
|
|
typedef enum TimelapseUnits
|
|
{
|
|
kTimelapseFrames = 0, // frames
|
|
kTimelapseSeconds = 1, // seconds
|
|
kTimelapseMinutes = 2, // minutes
|
|
kTimelapseHours = 3 // hours
|
|
|
|
} TimelapseUnits;
|
|
|
|
typedef enum
|
|
{
|
|
kDefaultModeDesktop, // deprecated
|
|
kDefaultModeVideoIn,
|
|
kDefaultModeBlack, // deprecated
|
|
kDefaultModeHold,
|
|
kDefaultModeTestPattern,
|
|
kDefaultModeUnknown
|
|
} DefaultVideoOutMode;
|
|
|
|
typedef enum
|
|
{
|
|
kHDMIOutCSCAutoDetect,
|
|
kHDMIOutCSCAutoSet,
|
|
kHDMIOutCSCRGB8bit,
|
|
kHDMIOutCSCRGB10bit,
|
|
kHDMIOutCSCRGB12bit,
|
|
kHDMIOutCSCYCbCr8bit, // deprecated
|
|
kHDMIOutCSCYCbCr10bit
|
|
} HDMIOutColorSpaceMode;
|
|
|
|
typedef enum
|
|
{
|
|
kHDMIOutProtocolAutoDetect,
|
|
kHDMIOutProtocolAutoSet,
|
|
kHDMIOutProtocolHDMI,
|
|
kHDMIOutProtocolDVI
|
|
} HDMIOutProtocolMode;
|
|
|
|
typedef enum
|
|
{
|
|
kHDMIOutStereoOff,
|
|
kHDMIOutStereoAuto,
|
|
kHDMIOutStereoSideBySide,
|
|
kHDMIOutStereoTopBottom,
|
|
kHDMIOutStereoFramePacked
|
|
|
|
} HDMIOutStereoSelect;
|
|
|
|
enum TestPatternFormat
|
|
{
|
|
kPatternFormatAuto,
|
|
kPatternFormatYUV10b,
|
|
kPatternFormatRGB10b,
|
|
kPatternFormatYUV8b,
|
|
kPatternFormatRGB8b,
|
|
kPatternFormatRGB12b
|
|
};
|
|
|
|
// deprecated - NTV2TestPatternSelect
|
|
// note: this order mimics (somewhat) that of NTV2TestPatternSelect in "ntv2testpatterngen.h"
|
|
typedef enum
|
|
{
|
|
kTestPatternColorBar100, // 100% Bars
|
|
kTestPatternColorBar75, // 75% Bars
|
|
kTestPatternRamp, // Ramp
|
|
kTestPatternMultiburst, // Mulitburst
|
|
kTestPatternLinesweep, // Line Sweep
|
|
kTestPatternPathological, // Pathological
|
|
kTestPatternFlatField, // Flat Field (50%)
|
|
kTestPatternMultiPattern, // a swath of everything
|
|
kTestPatternBlack, // Black
|
|
kTestPatternBorder, // Border
|
|
kTestPatternCustom // Custom ("Load File...")
|
|
|
|
} TestPatternSelect;
|
|
|
|
|
|
#endif //R2_DEPRECATED
|
|
|
|
|
|
|
|
typedef enum
|
|
{
|
|
kRP188SourceEmbeddedLTC = 0x0, // NOTE these values are same as RP188 DBB channel select
|
|
kRP188SourceEmbeddedVITC1 = 0x1,
|
|
kRP188SourceEmbeddedVITC2 = 0x2,
|
|
kRP188SourceLTCPort = 0xFE
|
|
} RP188SourceFilterSelect;
|
|
|
|
#if !defined(NTV2_DEPRECATE_15_2)
|
|
typedef RP188SourceFilterSelect RP188SourceSelect;
|
|
#endif // !defined(NTV2_DEPRECATE_15_2)
|
|
|
|
|
|
// Masks
|
|
enum
|
|
{
|
|
// kRegUserState1
|
|
kMaskInputFormatSelect = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7),
|
|
kMaskPrimaryFormatSelect = BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
kMaskSecondaryFormatSelect = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23),
|
|
kMaskAnalogInBlackLevel = BIT(24),
|
|
kMaskAnalogInputType = BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
|
|
//kRegIoHDGlobalStatus
|
|
kMaskStandBusyStatus = BIT(2),
|
|
|
|
// kRegIoHDGlobalControl
|
|
kMaskStandAloneMode = BIT(0) + BIT(1) + BIT(2),
|
|
kMaskDisplayMode = BIT(4) + BIT(5) + BIT(6) + BIT(7),
|
|
kMaskDisplayModeTCType = BIT(8) + BIT(9) + BIT(10) + BIT(11), // TimecodeFormat - when set to zero, Timecode type follows primary format
|
|
|
|
// kVRegStartupStatusFlags
|
|
kMaskStartComplete = BIT(0),
|
|
kMaskDesktopDisplayReady = BIT(1),
|
|
kMaskDaemonInitialized = BIT(2)
|
|
};
|
|
|
|
// isoch streams (channels)
|
|
enum DriverStartPhase
|
|
{
|
|
kStartPhase1 = 1, // These start out at 1 because they become a bit setting
|
|
kStartPhase2 = 2
|
|
};
|
|
|
|
typedef enum
|
|
{
|
|
kPrimarySecondaryDisplayMode,
|
|
kPrimaryTimecodeDisplayMode
|
|
} IoHDDisplayMode;
|
|
|
|
#define KONA_DEBUGFILTER_STRINGLENGTH 128
|
|
typedef struct
|
|
{
|
|
char includeString[KONA_DEBUGFILTER_STRINGLENGTH];
|
|
char excludeString[KONA_DEBUGFILTER_STRINGLENGTH];
|
|
} KonaDebugFilterStringInfo;
|
|
|
|
|
|
#if !defined(NTV2_DEPRECATE_15_6)
|
|
typedef struct
|
|
{
|
|
NTV2RelayState manualControl12;
|
|
NTV2RelayState manualControl34;
|
|
NTV2RelayState relayPosition12;
|
|
NTV2RelayState relayPosition34;
|
|
NTV2RelayState watchdogStatus;
|
|
bool watchdogEnable12;
|
|
bool watchdogEnable34;
|
|
ULWord watchdogTimeout;
|
|
} NTV2SDIWatchdogState;
|
|
#endif // !defined(NTV2_DEPRECATE_15_6)
|
|
|
|
typedef enum
|
|
{
|
|
maskEnableHancY = BIT(0),
|
|
shiftEnableHancY = 0,
|
|
maskEnableVancY = BIT(4),
|
|
shiftEnableVancY = 4,
|
|
maskEnableHancC = BIT(8),
|
|
shiftEnableHancC = 8,
|
|
maskEnableVancC = BIT(12),
|
|
shiftEnableVancC = 12,
|
|
maskSetProgressive = BIT(16),
|
|
shiftSetProgressive = 16,
|
|
maskSyncro = BIT(24) + BIT(25),
|
|
shiftSyncro = 24,
|
|
maskDisableExtractor = BIT(28),
|
|
shiftDisableExtractor = 28,
|
|
maskEnableSDMux = BIT(30),
|
|
shiftEnableSDMux = 30,
|
|
maskGrabLSBs = BIT(31),
|
|
shiftGrabLSBs = 31,
|
|
maskField1CutoffLine = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10),
|
|
shiftField1CutoffLine = 0,
|
|
maskField2CutoffLine = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26),
|
|
shiftField2CutoffLine = 16,
|
|
maskTotalBytesIn = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) +
|
|
BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15) +
|
|
BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23),
|
|
shiftTotalBytesIn = 0,
|
|
maskTotalOverrun = BIT(28),
|
|
shiftTotalOverrun = 28,
|
|
maskField1BytesIn = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) +
|
|
BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15) +
|
|
BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23),
|
|
shiftField1BytesIn = 0,
|
|
maskField1Overrun = BIT(28),
|
|
shiftField1Overrun = 28,
|
|
maskField2BytesIn = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) +
|
|
BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15) +
|
|
BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23),
|
|
shiftField2BytesIn = 0,
|
|
maskField2Overrun = BIT(28),
|
|
shiftField2Overrun = 28,
|
|
maskField1StartLine = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10),
|
|
shiftField1StartLine = 0,
|
|
maskField2StartLine = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26),
|
|
shiftField2StartLine = 16,
|
|
maskTotalFrameLines = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10),
|
|
shiftTotalFrameLines = 0,
|
|
maskFIDHi = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10),
|
|
shiftFIDHi = 0,
|
|
maskFIDLow = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26),
|
|
shiftFIDLow = 16,
|
|
maskPktIgnore_1_5_9_13_17 = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7),
|
|
shiftPktIgnore_1_5_9_13_17 = 0,
|
|
maskPktIgnore_2_6_10_14_18 = BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
shiftPktIgnore_2_6_10_14_18 = 8,
|
|
maskPktIgnore_3_7_11_15_19 = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23),
|
|
shiftPktIgnore_3_7_11_15_19 = 16,
|
|
maskPktIgnore_4_8_12_16_20 = BIT(24) + BIT(25) + BIT(26) + BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
shiftPktIgnore_4_8_12_16_20 = 24,
|
|
maskField1AnalogStartLine = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10),
|
|
shiftField1AnalogStartLine = 0,
|
|
maskField2AnalogStartLine = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26),
|
|
shiftField2AnalogStartLine = 16
|
|
} ANCExtMaskShift;
|
|
|
|
typedef enum
|
|
{
|
|
regAncExt_FIRST,
|
|
regAncExtControl = regAncExt_FIRST, // Reg 0 - Control register
|
|
regAncExtField1StartAddress, // Reg 1 - f1_start_address[31:0]
|
|
regAncExtField1EndAddress, // Reg 2 - f1_end_address[31:0]
|
|
regAncExtField2StartAddress, // Reg 3 - f2_start_addr[31:0]
|
|
regAncExtField2EndAddress, // Reg 4 - f2_end_address[31:0]
|
|
regAncExtFieldCutoffLine, // Reg 5 - f2_cutoff_line[10:0], f1_cutoff_line[10:0]
|
|
regAncExtTotalStatus, // Reg 6 - mem_sz_overrun, total_bytes[15:0]
|
|
regAncExtField1Status, // Reg 7 - mem_sz_overrun_f1, total_bytes_f1[15:0]
|
|
regAncExtField2Status, // Reg 8 - mem_sz_overrun_f2, total_bytes_f2[15:0]
|
|
regAncExtFieldVBLStartLine, // Reg 9 - f2_vbl_start[10:0], f1_vbl_start[10:0]
|
|
regAncExtTotalFrameLines, // Reg 10 - total_lines[10:0]
|
|
regAncExtFID, // Reg 11 - fid_low[10:0], fid_hi[10:0]
|
|
regAncExtIgnorePacketReg_1_2_3_4, // Reg 12 - Packet Ignore bytes
|
|
regAncExtIgnorePktsReg_First = regAncExtIgnorePacketReg_1_2_3_4,
|
|
regAncExtIgnorePacketReg_5_6_7_8, // Reg 13 - Packet Ignore bytes
|
|
regAncExtIgnorePacketReg_9_10_11_12, // Reg 14 - Packet Ignore bytes
|
|
regAncExtIgnorePacketReg_13_14_15_16, // Reg 15 - Packet Ignore bytes
|
|
regAncExtIgnorePacketReg_17_18_19_20, // Reg 16 - Packet Ignore bytes
|
|
regAncExtIgnorePktsReg_Last = regAncExtIgnorePacketReg_17_18_19_20,
|
|
regAncExtAnalogStartLine, // Reg 17 - analog_start_line[10:0]
|
|
regAncExtField1AnalogYFilter, // Reg 18 - analog_line_y_f1[31:0] - one bit per F1 line past analog_start_line, 1=captureAnalogY, 0=normal
|
|
regAncExtField2AnalogYFilter, // Reg 19 - analog_line_y_f2[31:0] - one bit per F2 line past analog_start_line, 1=captureAnalogY, 0=normal
|
|
regAncExtField1AnalogCFilter, // Reg 20 - analog_line_c_f1[31:0] - one bit per F1 line past analog_start_line, 1=captureAnalogC, 0=normal
|
|
regAncExtField2AnalogCFilter, // Reg 21 - analog_line_c_f2[31:0] - one bit per F2 line past analog_start_line, 1=captureAnalogC, 0=normal
|
|
regAncExtTwoFrameCadenceDetect, // Reg 22 - not used in NTV2
|
|
regAncExtRP188Type, // Reg 23 - not used in NTV2
|
|
regAncExtTimecodeStatus0_31, // Reg 24 - not used in NTV2
|
|
regAncExtTimecodeStatus32_63, // Reg 25 - not used in NTV2
|
|
regAncExtTimecodeStatusDBB, // Reg 26 - not used in NTV2
|
|
regAncExtAnalogActiveLineLength, // Reg 27 - analog active line length
|
|
regAncExt_LAST
|
|
} ANCExtRegisters;
|
|
|
|
typedef enum
|
|
{
|
|
regAncIns_FIRST,
|
|
regAncInsFieldBytes = regAncIns_FIRST,
|
|
regAncInsControl,
|
|
regAncInsField1StartAddr,
|
|
regAncInsField2StartAddr,
|
|
regAncInsPixelDelay,
|
|
regAncInsActiveStart,
|
|
regAncInsLinePixels,
|
|
regAncInsFrameLines,
|
|
regAncInsFieldIDLines,
|
|
regAncInsPayloadIDControl,
|
|
regAncInsPayloadID,
|
|
regAncInsBlankCStartLine,
|
|
regAncInsBlankField1CLines,
|
|
regAncInsBlankField2CLines,
|
|
regAncInsFieldBytesHigh,
|
|
regAncInsReserved15,
|
|
regAncInsRtpPayloadID,
|
|
regAncInsRtpSSRC,
|
|
regAncInsIpChannel,
|
|
regAncIns_LAST
|
|
} ANCInsRegisters;
|
|
|
|
typedef enum
|
|
{
|
|
maskInsField1Bytes = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10) + BIT(11) + BIT(12) + BIT(13) + BIT(14) + BIT(15),
|
|
shiftInsField1Bytes = 0,
|
|
maskInsField2Bytes = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + +BIT(27) + BIT(28) + BIT(29) + BIT(30) + BIT(31),
|
|
shiftInsField2Bytes = 16,
|
|
maskInsEnableHancY = BIT(0),
|
|
shiftInsEnableHancY = 0,
|
|
maskInsEnableVancY = BIT(4),
|
|
shiftInsEnableVancY = 4,
|
|
maskInsEnableHancC = BIT(8),
|
|
shiftInsEnableHancC = 8,
|
|
maskInsEnableVancC = BIT(12),
|
|
shiftInsEnableVancC = 12,
|
|
maskInsSetProgressive = BIT(24),
|
|
shiftInsSetProgressive = 24,
|
|
maskInsDisableInserter = BIT(28),
|
|
shiftInsDisableInserter = 28,
|
|
maskInsExtendedMode = BIT(29),
|
|
shiftInsExtendedMode = 29,
|
|
maskInsEnablePktSplitSD = BIT(31),
|
|
shiftInsEnablePktSplitSD = 31,
|
|
maskInsHancDelay = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9),
|
|
shiftINsHancDelay = 0,
|
|
maskInsVancDelay = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26),
|
|
shiftInsVancDelay = 16,
|
|
maskInsField1FirstActive = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10),
|
|
shiftInsField1FirstActive = 0,
|
|
maskInsField2FirstActive = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26),
|
|
shiftInsField2FirstActive = 16,
|
|
maskInsActivePixelsInLine = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10),
|
|
shiftInsActivePixelsInLine = 0,
|
|
maskInsTotalPixelsInLine = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26) + BIT(27),
|
|
shiftInsTotalPixelsInLine = 16,
|
|
maskInsTotalLinesPerFrame = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10),
|
|
shiftInsTotalLinesPerFrame = 0,
|
|
maskInsFieldIDHigh = BIT(0) + BIT(1) + BIT(2) + BIT(3) + BIT(4) + BIT(5) + BIT(6) + BIT(7) + BIT(8) + BIT(9) + BIT(10),
|
|
shiftInsFieldIDHigh = 0,
|
|
maskInsFieldIDLow = BIT(16) + BIT(17) + BIT(18) + BIT(19) + BIT(20) + BIT(21) + BIT(22) + BIT(23) + BIT(24) + BIT(25) + BIT(26),
|
|
shiftInsFieldIDLow = 16
|
|
|
|
} ANCInsMaskShift;
|
|
|
|
|
|
// Driver Version ULWord encode/decode macros
|
|
// Introduced in SDK 15.0
|
|
// Common ULWord format on all platforms:
|
|
//
|
|
// 3 2 1
|
|
// 10987654321098765432109876543210
|
|
// TTXMMMMMMMmmmmmmPPPPPPbbbbbbbbbb
|
|
//
|
|
// MMMMMMM: [28:22] major version number (7 bits, 0-127)
|
|
// mmmmmm: [21:16] minor version number (6 bits, 0-63)
|
|
// PPPPPP: [15:10] point release number (6 bits, 0-63)
|
|
// bbbbbbbbbb: [9:0] build number (10 bits, 0-1023)
|
|
// TT: [31:30] build type (0=release, 1=beta, 2=alpha, 3=dev)
|
|
#if defined(__CPLUSPLUS__) || defined(__cplusplus)
|
|
#define NTV2DriverVersionEncode(__maj__, __min__, __pt__, __bld__) ((ULWord(__maj__) & 0x0000007F) << 22) \
|
|
| ((ULWord(__min__) & 0x0000003F) << 16) \
|
|
| ((ULWord(__pt__ ) & 0x0000003F) << 10) \
|
|
| ((ULWord(__bld__) & 0x000003FF) << 0)
|
|
#define NTV2DriverVersionDecode_Major(__vers__) ((ULWord(__vers__) >> 22) & 0x0000007F)
|
|
#define NTV2DriverVersionDecode_Minor(__vers__) ((ULWord(__vers__) >> 16) & 0x0000003F)
|
|
#define NTV2DriverVersionDecode_Point(__vers__) ((ULWord(__vers__) >> 10) & 0x0000003F)
|
|
#define NTV2DriverVersionDecode_Build(__vers__) ((ULWord(__vers__) >> 0) & 0x000003FF)
|
|
#else
|
|
#define NTV2DriverVersionEncode(__maj__, __min__, __pt__, __bld__) (((ULWord)(__maj__) & 0x0000007F) << 22) \
|
|
| (((ULWord)(__min__) & 0x0000003F) << 16) \
|
|
| (((ULWord)(__pt__ ) & 0x0000003F) << 10) \
|
|
| (((ULWord)(__bld__) & 0x000003FF) << 0)
|
|
#define NTV2DriverVersionDecode_Major(__vers__) (((ULWord)(__vers__) >> 22) & 0x0000007F)
|
|
#define NTV2DriverVersionDecode_Minor(__vers__) (((ULWord)(__vers__) >> 16) & 0x0000003F)
|
|
#define NTV2DriverVersionDecode_Point(__vers__) (((ULWord)(__vers__) >> 10) & 0x0000003F)
|
|
#define NTV2DriverVersionDecode_Build(__vers__) (((ULWord)(__vers__) >> 0) & 0x000003FF)
|
|
#endif
|
|
#define NTV2DriverVersionBuildTypeToOrdinal(__ch__) ((__ch__) == 'd' ? 3UL : ((__ch__) == 'a' ? 2UL : ((__ch__) == 'b' ? 1UL : 0UL)))
|
|
#define NTV2DriverVersionEncodedBuildType (NTV2DriverVersionBuildTypeToOrdinal(AJA_NTV2_SDK_BUILD_TYPE[0]) << 30)
|
|
|
|
// Pack/Unpack SDK version in & out of ULWord:
|
|
#define NTV2SDKVersionEncode NTV2DriverVersionEncode
|
|
#define NTV2SDKVersionDecode_Major NTV2DriverVersionDecode_Major
|
|
#define NTV2SDKVersionDecode_Minor NTV2DriverVersionDecode_Minor
|
|
#define NTV2SDKVersionDecode_Point NTV2DriverVersionDecode_Point
|
|
#define NTV2SDKVersionDecode_Build NTV2DriverVersionDecode_Build
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////// BEGIN NEW AUTOCIRCULATE API
|
|
|
|
#if AJATargetBigEndian
|
|
#if defined(__CPLUSPLUS__) || defined(__cplusplus)
|
|
#define NTV2_4CC(_str_) ( (uint32_t((UByte*(_str_))[0]) << 0) | \
|
|
(uint32_t((UByte*(_str_))[1]) << 8) | \
|
|
(uint32_t((UByte*(_str_))[2]) << 16) | \
|
|
(uint32_t((UByte*(_str_))[3]) << 24))
|
|
|
|
#define NTV2_FOURCC(_a_,_b_,_c_,_d_) ( ((uint32_t(_a_)) << 0) | \
|
|
((uint32_t(_b_)) << 8) | \
|
|
((uint32_t(_c_)) << 16) | \
|
|
((uint32_t(_d_)) << 24))
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
#define NTV2_4CC_AS_STRING(_x_) std::string (1, ((_x_) & 0x000000FF) >> 0) + \
|
|
std::string (1, ((_x_) & 0x0000FF00) >> 8) + \
|
|
std::string (1, ((_x_) & 0x00FF0000) >> 16) + \
|
|
std::string (1, ((_x_) & 0xFF000000) >> 24)
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
#else
|
|
#define NTV2_4CC(_str_) ( ((uint32_t)(((UByte *)(_str_))[0]) << 0) | \
|
|
((uint32_t)(((UByte *)(_str_))[1]) << 8) | \
|
|
((uint32_t)(((UByte *)(_str_))[2]) << 16) | \
|
|
((uint32_t)(((UByte *)(_str_))[3]) << 24))
|
|
|
|
#define NTV2_FOURCC(_a_,_b_,_c_,_d_) ( (((uint32_t)(_a_)) << 0) | \
|
|
(((uint32_t)(_b_)) << 8) | \
|
|
(((uint32_t)(_c_)) << 16) | \
|
|
(((uint32_t)(_d_)) << 24))
|
|
#endif // C
|
|
#else
|
|
#if defined(__CPLUSPLUS__) || defined(__cplusplus)
|
|
#define NTV2_4CC(_str_) ( (uint32_t((UByte*(_str_))[3]) << 0) | \
|
|
(uint32_t((UByte*(_str_))[2]) << 8) | \
|
|
(uint32_t((UByte*(_str_))[1]) << 16) | \
|
|
(uint32_t((UByte*(_str_))[0]) << 24))
|
|
|
|
#define NTV2_FOURCC(_a_,_b_,_c_,_d_) ( ((uint32_t(_a_)) << 24) | \
|
|
((uint32_t(_b_)) << 16) | \
|
|
((uint32_t(_c_)) << 8) | \
|
|
((uint32_t(_d_)) << 0) )
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
#define NTV2_4CC_AS_STRING(_x_) std::string(1, char((uint32_t(_x_) & 0xFF000000) >> 24)) + \
|
|
std::string(1, char((uint32_t(_x_) & 0x00FF0000) >> 16)) + \
|
|
std::string(1, char((uint32_t(_x_) & 0x0000FF00) >> 8)) + \
|
|
std::string(1, char((uint32_t(_x_) & 0x000000FF) >> 0))
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
#else
|
|
#define NTV2_4CC(_str_) ( ((uint32_t)(((UByte *)(_str_))[3]) << 0) | \
|
|
((uint32_t)(((UByte *)(_str_))[2]) << 8) | \
|
|
((uint32_t)(((UByte *)(_str_))[1]) << 16) | \
|
|
((uint32_t)(((UByte *)(_str_))[0]) << 24))
|
|
|
|
#define NTV2_FOURCC(_a_,_b_,_c_,_d_) ( (((uint32_t)(_a_)) << 24) | \
|
|
(((uint32_t)(_b_)) << 16) | \
|
|
(((uint32_t)(_c_)) << 8) | \
|
|
(((uint32_t)(_d_)) << 0) )
|
|
#endif // C
|
|
#endif // else Little-Endian
|
|
|
|
|
|
/**
|
|
@brief 32-bit host addresses go into the upper 4 bytes of the ULWord64, while the lower 4 bytes contain 0xBAADF00D.
|
|
64-bit host addresses consume the entire ULWord64.
|
|
**/
|
|
#define NTV2_POINTER_TO_ULWORD64(__p__) ((sizeof (int *) == 4) ? (ULWord64 (ULWord64 (__p__) << 32) | 0x00000000BAADF00D) : ULWord64 (__p__))
|
|
|
|
#define NTV2_CURRENT_HEADER_VERSION 0 ///< @brief Current version of NTV2_HEADER struct, originally 0
|
|
#define NTV2_CURRENT_TRAILER_VERSION 0 ///< @brief Current version of NTV2_TRAILER struct, originally 0
|
|
|
|
#define AUTOCIRCULATE_STRUCT_VERSION 0 ///< @brief Version number of AutoCirculate structures, originally 0
|
|
|
|
#define NTV2_HEADER_TAG NTV2_FOURCC ('N', 'T', 'V', '2') ///< @brief Identifies the struct header
|
|
#define NTV2_TRAILER_TAG NTV2_FOURCC ('n', 't', 'v', '2') ///< @brief Identifies the struct trailer
|
|
|
|
#define NTV2_IS_VALID_HEADER_TAG(_x_) ((_x_) == NTV2_HEADER_TAG)
|
|
#define NTV2_IS_VALID_TRAILER_TAG(_x_) ((_x_) == NTV2_TRAILER_TAG)
|
|
|
|
#define NTV2_TYPE_VIRTUAL_DATA_RW NTV2_FOURCC ('v', 'd', 'a', 't') ///< @brief Identifies NTV2VirtualData struct
|
|
#define NTV2_TYPE_BANKGETSET NTV2_FOURCC ('b', 'n', 'k', 'S') ///< @brief Identifies NTV2BankSelGetSetRegs struct
|
|
#define AUTOCIRCULATE_TYPE_STATUS NTV2_FOURCC ('s', 't', 'a', 't') ///< @brief Identifies AUTOCIRCULATE_STATUS struct
|
|
#define AUTOCIRCULATE_TYPE_XFER NTV2_FOURCC ('x', 'f', 'e', 'r') ///< @brief Identifies AUTOCIRCULATE_TRANSFER struct
|
|
#define AUTOCIRCULATE_TYPE_XFERSTATUS NTV2_FOURCC ('x', 'f', 's', 't') ///< @brief Identifies AUTOCIRCULATE_TRANSFER_STATUS struct
|
|
#define AUTOCIRCULATE_TYPE_TASK NTV2_FOURCC ('t', 'a', 's', 'k') ///< @brief Identifies AUTOCIRCULATE_TASK struct
|
|
#define AUTOCIRCULATE_TYPE_FRAMESTAMP NTV2_FOURCC ('s', 't', 'm', 'p') ///< @brief Identifies FRAME_STAMP struct
|
|
#define AUTOCIRCULATE_TYPE_GETREGS NTV2_FOURCC ('r', 'e', 'g', 'R') ///< @brief Identifies NTV2GetRegisters struct
|
|
#define AUTOCIRCULATE_TYPE_SETREGS NTV2_FOURCC ('r', 'e', 'g', 'W') ///< @brief Identifies NTV2SetRegisters struct
|
|
#define AUTOCIRCULATE_TYPE_SDISTATS NTV2_FOURCC ('s', 'd', 'i', 'S') ///< @brief Identifies NTV2SDIStatus struct
|
|
#define NTV2_TYPE_AJADEBUGLOGGING NTV2_FOURCC ('d', 'b', 'l', 'g') ///< @brief Identifies NTV2DebugLogging struct
|
|
#define NTV2_TYPE_AJABUFFERLOCK NTV2_FOURCC ('b', 'f', 'l', 'k') ///< @brief Identifies NTV2BufferLock struct
|
|
#define NTV2_TYPE_AJABITSTREAM NTV2_FOURCC ('b', 't', 's', 't') ///< @brief Identifies NTV2Bitstream struct
|
|
|
|
#define NTV2_IS_VALID_STRUCT_TYPE(_x_) ( (_x_) == AUTOCIRCULATE_TYPE_STATUS || \
|
|
(_x_) == AUTOCIRCULATE_TYPE_XFER || \
|
|
(_x_) == AUTOCIRCULATE_TYPE_XFERSTATUS || \
|
|
(_x_) == AUTOCIRCULATE_TYPE_TASK || \
|
|
(_x_) == AUTOCIRCULATE_TYPE_FRAMESTAMP || \
|
|
(_x_) == AUTOCIRCULATE_TYPE_GETREGS || \
|
|
(_x_) == AUTOCIRCULATE_TYPE_SETREGS || \
|
|
(_x_) == AUTOCIRCULATE_TYPE_SDISTATS || \
|
|
(_x_) == NTV2_TYPE_BANKGETSET || \
|
|
(_x_) == NTV2_TYPE_VIRTUAL_DATA_RW || \
|
|
(_x_) == NTV2_TYPE_AJADEBUGLOGGING || \
|
|
(_x_) == NTV2_TYPE_AJABUFFERLOCK || \
|
|
(_x_) == NTV2_TYPE_AJABITSTREAM )
|
|
|
|
|
|
// NTV2_POINTER FLAGS
|
|
#define NTV2_POINTER_ALLOCATED BIT(0) ///< @brief Allocated using Allocate function?
|
|
#define NTV2_POINTER_PAGE_ALIGNED BIT(1) ///< @brief Allocated page-aligned?
|
|
|
|
|
|
// AUTOCIRCULATE OPTION FLAGS
|
|
#define AUTOCIRCULATE_WITH_RP188 BIT(0) ///< @brief Use this to AutoCirculate with RP188
|
|
#define AUTOCIRCULATE_WITH_LTC BIT(1) ///< @brief Use this to AutoCirculate with analog LTC
|
|
#define AUTOCIRCULATE_WITH_FBFCHANGE BIT(2) ///< @brief Use this to AutoCirculate with the possibility of frame buffer format changes
|
|
#define AUTOCIRCULATE_WITH_FBOCHANGE BIT(3) ///< @brief Use this to AutoCirculate with the possibility of frame buffer orientation changes
|
|
#define AUTOCIRCULATE_WITH_COLORCORRECT BIT(4) ///< @brief Use this to AutoCirculate with color correction
|
|
#define AUTOCIRCULATE_WITH_VIDPROC BIT(5) ///< @brief Use this to AutoCirculate with video processing
|
|
#define AUTOCIRCULATE_WITH_ANC BIT(6) ///< @brief Use this to AutoCirculate with ancillary data
|
|
#define AUTOCIRCULATE_WITH_AUDIO_CONTROL BIT(7) ///< @brief Use this to AutoCirculate with no audio but with audio control
|
|
#define AUTOCIRCULATE_WITH_FIELDS BIT(8) ///< @brief Use this to AutoCirculate with fields as frames for interlaced formats
|
|
#define AUTOCIRCULATE_WITH_HDMIAUX BIT(9) ///< @brief Use this to AutoCirculate with HDMI auxiliary data
|
|
#define AUTOCIRCULATE_WITH_MULTILINK_AUDIO1 BIT(10) ///< @brief Use this to AutoCirculate with base audiosystem controlling base AudioSystem + 1
|
|
#define AUTOCIRCULATE_WITH_MULTILINK_AUDIO2 BIT(11) ///< @brief Use this to AutoCirculate with base audiosystem controlling base AudioSystem + 2
|
|
#define AUTOCIRCULATE_WITH_MULTILINK_AUDIO3 BIT(12) ///< @brief Use this to AutoCirculate with base audiosystem controlling base AudioSystem + 3
|
|
|
|
#define AUTOCIRCULATE_FRAME_FULL BIT(20) ///< @brief Frame contains a full image
|
|
#define AUTOCIRCULATE_FRAME_FIELD0 BIT(21) ///< @brief Frame contains field 0 of an interlaced image (first field in time)
|
|
#define AUTOCIRCULATE_FRAME_FIELD1 BIT(22) ///< @brief Frame contains field 1 of an interlaced image (second field in time)
|
|
|
|
#define AUTOCIRCULATE_P2P_PREPARE BIT(28) ///< @brief prepare p2p target for synchronous transfer (no message)
|
|
#define AUTOCIRCULATE_P2P_COMPLETE BIT(29) ///< @brief complete synchronous p2p transfer
|
|
#define AUTOCIRCULATE_P2P_TARGET BIT(30) ///< @brief prepare p2p target for asynchronous transfer (with message)
|
|
#define AUTOCIRCULATE_P2P_TRANSFER BIT(31) ///< @brief transfer to p2p sync or async target
|
|
|
|
#define DMABUFFERLOCK_LOCK BIT(0) ///< @brief Used in ::NTV2BufferLock to page lock a buffer.
|
|
#define DMABUFFERLOCK_UNLOCK_ALL BIT(1) ///< @brief Used in ::NTV2BufferLock to unlock all locked buffers.
|
|
#define DMABUFFERLOCK_MAP BIT(2) ///< @brief Used in ::NTV2BufferLock to IO map a buffer.
|
|
#define DMABUFFERLOCK_UNLOCK BIT(3) ///< @brief Used in ::NTV2BufferLock to unlock a buffer.
|
|
#define DMABUFFERLOCK_AUTO BIT(4) ///< @brief Used in ::NTV2BufferLock to auto page lock buffers.
|
|
#define DMABUFFERLOCK_MANUAL BIT(5) ///< @brief Used in ::NTV2BufferLock to manual page lock buffers.
|
|
#define DMABUFFERLOCK_MAX_SIZE BIT(6) ///< @brief Used in ::NTV2BufferLock to set max locked size.
|
|
#define DMABUFFERLOCK_RDMA BIT(7) ///< @brief Used in ::NTV2BufferLock to page lock a rdma buffer
|
|
|
|
// Bitstream flags
|
|
#define BITSTREAM_WRITE BIT(0) ///< @brief Used in ::NTV2Bitstream to write a bitstream
|
|
#define BITSTREAM_FRAGMENT BIT(1) ///< @brief Used in ::NTV2Bitstream to indicate bitstream is a fragment
|
|
#define BITSTREAM_SWAP BIT(2) ///< @brief Used in ::NTV2Bitstream to byte swap bitstream data
|
|
#define BITSTREAM_RESET_CONFIG BIT(3) ///< @brief Used in ::NTV2Bitstream to reset config
|
|
#define BITSTREAM_RESET_MODULE BIT(4) ///< @brief Used in ::NTV2Bitstream to reset module
|
|
#define BITSTREAM_READ_REGISTERS BIT(5) ///< @brief Used in ::NTV2Bitstream to get status registers
|
|
|
|
// Bitstream registers
|
|
#define BITSTREAM_EXT_CAP 0 ///< @brief Extended capability register
|
|
#define BITSTREAM_VENDOR_HEADER 1 ///< @brief Vendor-specific register
|
|
#define BITSTREAM_JTAG_ID 2 ///< @brief JTAG ID register
|
|
#define BITSTREAM_VERSION 3 ///< @brief Bitstream version register
|
|
#define BITSTREAM_MCAP_STATUS 4 ///< @brief MCAP status register
|
|
#define BITSTREAM_MCAP_CONTROL 5 ///< @brief MCAP control register
|
|
#define BITSTREAM_MCAP_DATA 6 ///< @brief MCAP data register
|
|
#define BITSTREAM_NUM_REGISTERS 7 ///< @brief Number of MCAP registes
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
Convenience macros that delimit the new structs.
|
|
For driver builds, the structs are simply structs.
|
|
For client builds, the structs are classes with the appropriate __declspec(dllexport) or __declspec(dllimport) decorations.
|
|
**/
|
|
#define NTV2_STRUCT_BEGIN(__struct_name__) class AJAExport __struct_name__ {public:
|
|
#define NTV2_STRUCT_END(__struct_name__) };
|
|
#define NTV2_BEGIN_PRIVATE private:
|
|
#define NTV2_END_PRIVATE public:
|
|
|
|
#if defined (_DEBUG)
|
|
#define NTV2_IS_STRUCT_VALID_IMPL(__hr__,__tr__) bool NTV2_IS_STRUCT_VALID (void) const {return __hr__.IsValid() && __tr__.IsValid();}
|
|
#define NTV2_ASSERT_STRUCT_VALID do {NTV2_ASSERT (NTV2_IS_STRUCT_VALID ());} while (false)
|
|
#else
|
|
#define NTV2_IS_STRUCT_VALID_IMPL(__hr__,__tr__)
|
|
#define NTV2_ASSERT_STRUCT_VALID
|
|
#endif
|
|
|
|
// Convenience macros for compactly formatting ostream output...
|
|
#define Hex(__x__) std::hex << (__x__) << std::dec
|
|
#define xHex(__x__) "0x" << Hex(__x__)
|
|
#define HexN(__x__,__n__) std::hex << std::setw(int(__n__)) << (__x__) << std::dec
|
|
#define xHexN(__x__,__n__) "0x" << HexN((__x__),(__n__))
|
|
#define Hex0N(__x__,__n__) std::hex << std::setw(int(__n__)) << std::setfill('0') << (__x__) << std::dec << std::setfill(' ')
|
|
#define xHex0N(__x__,__n__) "0x" << Hex0N((__x__),(__n__))
|
|
#define HEX(__x__) std::hex << std::uppercase << (__x__) << std::dec << std::nouppercase
|
|
#define xHEX(__x__) "0x" << HEX(__x__)
|
|
#define HEXN(__x__,__n__) std::hex << std::uppercase << std::setw(int(__n__)) << (__x__) << std::dec << std::nouppercase
|
|
#define xHEXN(__x__,__n__) "0x" << HEXN((__x__),(__n__))
|
|
#define HEX0N(__x__,__n__) std::hex << std::uppercase << std::setw(int(__n__)) << std::setfill('0') << (__x__) << std::dec << std::setfill(' ') << std::nouppercase
|
|
#define xHEX0N(__x__,__n__) "0x" << HEX0N((__x__),(__n__))
|
|
#define DEC(__x__) std::dec << std::right << (__x__)
|
|
#define DECN(__x__,__n__) std::dec << std::setw(int(__n__)) << std::right << (__x__)
|
|
#define DEC0N(__x__,__n__) std::dec << std::setw(int(__n__)) << std::setfill('0') << std::right << (__x__) << std::dec << std::setfill(' ')
|
|
#define OCT(__x__) std::oct << (__x__) << std::dec
|
|
#define OCT0N(__x__,__n__) std::oct << std::setw(int(__n__)) << std::setfill('0') << (__x__) << std::dec << std::setfill(' ')
|
|
#define oOCT(__x__) "o" << std::oct << (__x__) << std::dec
|
|
#define oOCT0N(__x__,__n__) "o" << std::oct << std::setw(int(__n__)) << std::setfill('0') << (__x__) << std::dec << std::setfill(' ')
|
|
#define BIN064(__x__) std::bitset<8>((uint64_t(__x__)&0xFF00000000000000)>>56) << "." \
|
|
<< std::bitset<8>((uint64_t(__x__)&0x00FF000000000000)>>48) << "." \
|
|
<< std::bitset<8>((uint64_t(__x__)&0x0000FF0000000000)>>40) << "." \
|
|
<< std::bitset<8>((uint64_t(__x__)&0x000000FF00000000)>>32) << "." \
|
|
<< std::bitset<8>((uint64_t(__x__)&0x00000000FF000000)>>24) << "." \
|
|
<< std::bitset<8>((uint64_t(__x__)&0x0000000000FF0000)>>16) << "." \
|
|
<< std::bitset<8>((uint64_t(__x__)&0x000000000000FF00)>>8) << "." \
|
|
<< std::bitset<8>( uint64_t(__x__)&0x00000000000000FF)
|
|
#define BIN032(__x__) std::bitset<8>((uint32_t(__x__)&0xFF000000)>>24) << "." \
|
|
<< std::bitset<8>((uint32_t(__x__)&0x00FF0000)>>16) << "." \
|
|
<< std::bitset<8>((uint32_t(__x__)&0x0000FF00)>>8) << "." \
|
|
<< std::bitset<8>( uint32_t(__x__)&0x000000FF)
|
|
#define BIN016(__x__) std::bitset<8>((uint16_t(__x__)&0xFF00)>>8) << "." \
|
|
<< std::bitset<8>( uint16_t(__x__)&0x00FF)
|
|
#define BIN012(__x__) std::bitset<12>((uint16_t(__x__)&0x0FFF))
|
|
#define BIN010(__x__) std::bitset<10>((uint16_t(__x__)&0x03FF))
|
|
#define BIN08(__x__) std::bitset<8>(uint8_t(__x__))
|
|
#define BIN04(__x__) std::bitset<4>(uint8_t(__x__))
|
|
#define BIN0N(__x__,__n__) std::bitset<__n__>(uint8_t(__x__))
|
|
#define bBIN064(__x__) "b" << BIN064(__x__)
|
|
#define bBIN032(__x__) "b" << BIN032(__x__)
|
|
#define bBIN016(__x__) "b" << BIN016(__x__)
|
|
#define bBIN012(__x__) "b" << BIN012(__x__)
|
|
#define bBIN010(__x__) "b" << BIN010(__x__)
|
|
#define bBIN08(__x__) "b" << BIN08(__x__)
|
|
#define bBIN04(__x__) "b" << BIN04(__x__)
|
|
#define bBIN0N(__x__,__n__) "b" << BIN0N(__x__,__n__)
|
|
#define fDEC(__x__,__w__,__p__) std::dec << std::fixed << std::setw(__w__) << std::setprecision(__p__) << (__x__)
|
|
#else
|
|
#define NTV2_STRUCT_BEGIN(__struct_name__) typedef struct __struct_name__ {
|
|
#define NTV2_STRUCT_END(__struct_name__) } __struct_name__;
|
|
#define NTV2_BEGIN_PRIVATE
|
|
#define NTV2_END_PRIVATE
|
|
#define NTV2_IS_STRUCT_VALID_IMPL(__hr__,__tr__)
|
|
#define NTV2_ASSERT_STRUCT_VALID
|
|
#endif
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
typedef std::vector<uint8_t> UByteSequence; ///< @brief An ordered sequence of UByte (uint8_t) values.
|
|
typedef UByteSequence::const_iterator UByteSequenceConstIter; ///< @brief A handy const iterator for iterating over a UByteSequence.
|
|
typedef UByteSequence::iterator UByteSequenceIter; ///< @brief A handy non-const iterator for iterating over a UByteSequence.
|
|
|
|
typedef std::vector<uint16_t> UWordSequence; ///< @brief An ordered sequence of UWord (uint16_t) values.
|
|
typedef UWordSequence::const_iterator UWordSequenceConstIter; ///< @brief A handy const iterator for iterating over a UWordSequence.
|
|
typedef UWordSequence::iterator UWordSequenceIter; ///< @brief A handy non-const iterator for iterating over a UWordSequence.
|
|
|
|
typedef std::vector<uint32_t> ULWordSequence; ///< @brief An ordered sequence of ULWord (uint32_t) values.
|
|
typedef ULWordSequence::const_iterator ULWordSequenceConstIter; ///< @brief A handy const iterator for iterating over a ULWordSequence.
|
|
typedef ULWordSequence::iterator ULWordSequenceIter; ///< @brief A handy non-const iterator for iterating over a ULWordSequence.
|
|
|
|
typedef std::vector<uint64_t> ULWord64Sequence; ///< @brief An ordered sequence of ULWord64 (uint64_t) values.
|
|
typedef ULWord64Sequence::const_iterator ULWord64SequenceConstIter; ///< @brief A handy const iterator for iterating over a ULWord64Sequence.
|
|
typedef ULWord64Sequence::iterator ULWord64SequenceIter; ///< @brief A handy non-const iterator for iterating over a ULWord64Sequence.
|
|
#endif // NTV2_BUILDING_DRIVER
|
|
|
|
|
|
#if defined (AJAMac)
|
|
#pragma pack (push, 4)
|
|
#endif // defined (AJAMac)
|
|
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Describes a segmented data transfer (copy or move) from a source memory location to a destination location,
|
|
with independent pitch and direction attributes for source and destination.
|
|
The simplest transfer, of course, has a single segment.
|
|
@details A segmented transfer is described by these attributes:
|
|
- A starting source and destination offset, in elements;
|
|
- A source and destination pitch (span between segments, in elements);
|
|
- A segment length, in elements;
|
|
- A segment count.
|
|
The element size defaults to 1 byte per element, must be power-of-2, and cannot be larger than 8 bytes.
|
|
There are also some optional attributes:
|
|
- Optional "source vertical flip" flag to indicate that the source offset is interpreted as an offset,
|
|
in elements, from the bottom of the source buffer, and during the transfer, the source pitch is
|
|
subtracted instead of added. Defaults to normal "from top" source offset reference.
|
|
- Optional "destination vertical flip" flag to indicate that the destination offset is interpreted as
|
|
an offset, in elements, from the bottom of the destination buffer, and during the transfer, the
|
|
destination pitch is subtracted instead of added. Defaults to normal "from top" destination offset
|
|
reference.
|
|
**/
|
|
class AJAExport NTV2SegmentedXferInfo
|
|
{
|
|
public:
|
|
/**
|
|
@brief Constructs me as empty/invalid.
|
|
**/
|
|
NTV2SegmentedXferInfo()
|
|
: mFlags (0),
|
|
mNumSegments (0),
|
|
mElementsPerSegment (0),
|
|
mInitialSrcOffset (0),
|
|
mInitialDstOffset (0),
|
|
mSrcElementsPerRow (0),
|
|
mDstElementsPerRow (0) {setElementLength(1);}
|
|
|
|
/**
|
|
@name Inquiry -- Essentials
|
|
**/
|
|
///@{
|
|
inline bool isValid (void) const {return getSegmentCount() && getSegmentLength() ? true : false;} ///< @return True if valid (i.e. a non-zero segment count and segment length); otherwise false.
|
|
inline ULWord getSegmentCount (void) const {return mNumSegments;} ///< @return The number of segments.
|
|
inline ULWord getSegmentLength (void) const {return mElementsPerSegment;} ///< @return The segment length, in elements.
|
|
inline ULWord getSourceOffset (void) const {return mInitialSrcOffset;} ///< @return The offset, in elements, to the start of the first source segment.
|
|
inline ULWord getDestOffset (void) const {return mInitialDstOffset;} ///< @return The offset, in elements, to the start of the first destination segment.
|
|
inline ULWord getSourcePitch (void) const {return mSrcElementsPerRow;} ///< @return The number of elements between each source row.
|
|
inline ULWord getDestPitch (void) const {return mDstElementsPerRow;} ///< @return The number of elements between each destination row.
|
|
///@}
|
|
|
|
/**
|
|
@name Inquiry
|
|
**/
|
|
///@{
|
|
inline ULWord getElementLength (void) const {return ULWord(1 << (mFlags & 3));} ///< @return The size of each element, in bytes.
|
|
inline bool isSourceBottomUp (void) const {return mFlags & BIT(8) ? true : false;} ///< @return True if source rows should be traversed bottom-to-top; otherwise false.
|
|
inline bool isSourceTopDown (void) const {return mFlags & BIT(8) ? false : true;} ///< @return True if source rows should be traversed top-to-bottom; otherwise false.
|
|
inline bool isDestBottomUp (void) const {return mFlags & BIT(9) ? true : false;} ///< @return True if destination rows should be traversed bottom-to-top; otherwise false.
|
|
inline bool isDestTopDown (void) const {return mFlags & BIT(9) ? false : true;} ///< @return True if destination rows should be traversed top-to-bottom; otherwise false.
|
|
inline ULWord getTotalElements (void) const {return getSegmentCount() * getSegmentLength();} ///< @return The total number of elements (i.e. the product of the segment count and length).
|
|
inline ULWord getTotalBytes (void) const {return getTotalElements() * getElementLength();} ///< @return The total number of bytes.
|
|
|
|
/**
|
|
@return The offset to the first element immediately past the last source segment.
|
|
**/
|
|
inline ULWord getSourceEndOffset (void) const // New in SDK 16.0
|
|
{return getSourceOffset() + getSourcePitch() * getSegmentCount() + getSegmentLength();}
|
|
|
|
/**
|
|
@return The offset to the first element immediately past the last destination segment.
|
|
**/
|
|
inline ULWord getDestEndOffset (void) const // New in SDK 16.0
|
|
{return getDestOffset() + getDestPitch() * getSegmentCount() + getSegmentLength();}
|
|
|
|
/**
|
|
@brief Writes a human-readable description of me into a given output stream.
|
|
@param inStrm A non-constant reference to the output stream that will receive the description.
|
|
@param[in] inDumpSegments If true, also dumps a description of each segment. Defaults to false.
|
|
@return A reference to the output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inStrm, const bool inDumpSegments = false) const;
|
|
|
|
/**
|
|
@param[in] inInclDecl If true, the default, include a declaration statement in the source code.
|
|
@return A string containing C++ source code that, when compiled, will result in a NTV2SegmentedXferInfo
|
|
instance that will perfectly match me.
|
|
**/
|
|
std::string getSourceCode (const bool inInclDecl = true) const; // New in SDK 16.0
|
|
|
|
/**
|
|
@param[in] inElementOffset Specifies the element offset of interest.
|
|
@return True if the element is contained within me.
|
|
**/
|
|
bool containsElementAtOffset (const ULWord inElementOffset) const; // New in SDK 16.0
|
|
|
|
/**
|
|
@param[in] inRHS Specifies the NTV2SegmentedXferInfo to compare with me.
|
|
@return True if not equal.
|
|
@note The element sizes must match (though this ought to be compensated for in the comparison).
|
|
**/
|
|
bool operator != (const NTV2SegmentedXferInfo & inRHS) const; // New in SDK 16.0
|
|
|
|
/**
|
|
@param[in] inRHS Specifies the NTV2SegmentedXferInfo to compare with me.
|
|
@return True if equal.
|
|
@note The element sizes must match (though this ought to be compensated for in the comparison).
|
|
**/
|
|
inline bool operator == (const NTV2SegmentedXferInfo & inRHS) const {return !(*this != inRHS);} // New in SDK 16.0
|
|
///@}
|
|
|
|
/**
|
|
@name Changing
|
|
**/
|
|
///@{
|
|
|
|
NTV2SegmentedXferInfo & reset (void); ///< @brief Resets me to an invalid (all zero) state.
|
|
|
|
/**
|
|
@brief Sets both my segment count and length.
|
|
@param[in] inNumSegs My new segment count.
|
|
@param[in] inSegLength My new segment length, in elements.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setSegmentInfo (const ULWord inNumSegs, const ULWord inSegLength)
|
|
{return setSegmentCount(inNumSegs).setSegmentLength(inSegLength);}
|
|
|
|
/**
|
|
@brief Sets my segment count.
|
|
@param[in] inNumSegments My new segment count.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setSegmentCount (const ULWord inNumSegments)
|
|
{mNumSegments = inNumSegments; return *this;}
|
|
|
|
/**
|
|
@brief Sets my segment length.
|
|
@param[in] inNumElements My new segment length, in elements.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setSegmentLength (const ULWord inNumElements)
|
|
{mElementsPerSegment = inNumElements; return *this;}
|
|
|
|
/**
|
|
@brief A convenience function that sets both my source offset and pitch.
|
|
@param[in] inOffset The new offset, in elements, to the start of the first source segment.
|
|
@param[in] inPitch The new number of elements between each source row.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setSourceInfo (const ULWord inOffset, const ULWord inPitch)
|
|
{return setSourceOffset(inOffset).setSourcePitch(inPitch);}
|
|
|
|
/**
|
|
@brief Sets my source offset.
|
|
@param[in] inOffset The new offset, in elements, to the start of the first source segment.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setSourceOffset (const ULWord inOffset)
|
|
{mInitialSrcOffset = inOffset; return *this;}
|
|
|
|
/**
|
|
@brief Sets my source pitch.
|
|
@param[in] inPitch The new number of elements between each source row.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setSourcePitch (const ULWord inPitch)
|
|
{mSrcElementsPerRow = inPitch; return *this;}
|
|
|
|
/**
|
|
@brief Sets my source direction.
|
|
@param[in] inTopDown Specify true to traverse the source segments top-to-bottom; otherwise specify false for bottom-to-top.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setSourceDirection (const bool inTopDown)
|
|
{ mFlags &= (0xFFFFFFFF - BIT(8));
|
|
if (!inTopDown)
|
|
mFlags |= BIT(8);
|
|
return *this;
|
|
}
|
|
|
|
/**
|
|
@brief A convenience function that sets both my destination offset and pitch.
|
|
@param[in] inOffset The new offset, in elements, to the start of the first destination segment.
|
|
@param[in] inPitch The new number of elements between each destination row.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setDestInfo (const ULWord inOffset, const ULWord inPitch)
|
|
{return setDestOffset(inOffset).setDestPitch(inPitch);}
|
|
|
|
/**
|
|
@brief Sets my destination offset.
|
|
@param[in] inOffset The new offset, in elements, to the start of the first destination segment.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setDestOffset (const ULWord inOffset) {mInitialDstOffset = inOffset; return *this;}
|
|
|
|
/**
|
|
@brief Sets my destination pitch.
|
|
@param[in] inPitch The new number of elements between each destination row.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setDestPitch (const ULWord inPitch) {mDstElementsPerRow = inPitch; return *this;}
|
|
|
|
/**
|
|
@brief Sets my destination scan direction.
|
|
@param[in] inTopDown Specify true to traverse the destination segments top-to-bottom; otherwise specify false for bottom-to-top.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setDestDirection (const bool inTopDown) {mFlags = (0xFFFFFFFF - BIT(9)); if (!inTopDown) mFlags |= BIT(9); return *this;}
|
|
|
|
/**
|
|
@brief Sets my element length.
|
|
@param[in] inBytesPerElement The new element size, in bytes. Must be a power of two (1, 2, 4, or 8).
|
|
@note This function does not transform any of my offsets, pitches or lengths.
|
|
@return A reference to me.
|
|
**/
|
|
inline NTV2SegmentedXferInfo & setElementLength (const ULWord inBytesPerElement)
|
|
{
|
|
if (inBytesPerElement && inBytesPerElement < 9)
|
|
if (!(inBytesPerElement & (inBytesPerElement - 1))) // Power of 2?
|
|
{
|
|
ULWord num(inBytesPerElement), lengthBits(0);
|
|
while (num >>= 1)
|
|
lengthBits++;
|
|
mFlags = (mFlags & ~3UL) | (lengthBits & 3UL);
|
|
}
|
|
return *this;
|
|
}
|
|
/**
|
|
@brief Swaps my source and destination offsets and pitches.
|
|
@return A reference to me.
|
|
**/
|
|
NTV2SegmentedXferInfo & swapSourceAndDestination (void); // New in SDK 16.0
|
|
///@}
|
|
|
|
private:
|
|
ULWord mFlags; ///< @brief Lowest 2 bits determines element size, kRegMaskFrameOrientation is bit 10
|
|
ULWord mNumSegments; ///< @brief Number of segments to transfer (i.e. row count).
|
|
ULWord mElementsPerSegment; ///< @brief Size of each segment, in elements.
|
|
ULWord mInitialSrcOffset; ///< @brief Initial source offset, in elements.
|
|
ULWord mInitialDstOffset; ///< @brief Initial destination offset, in elements.
|
|
ULWord mSrcElementsPerRow; ///< @brief Source pitch (i.e. the span, in elements, between the starting elements of adjacent segments on the source).
|
|
ULWord mDstElementsPerRow; ///< @brief Destination pitch (i.e. the span, in elements, between the starting elements of adjacent segments on the destination).
|
|
};
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
|
|
/**
|
|
@brief A generic user-space buffer object that has an address and a length.
|
|
Used most often to share an arbitrary-sized chunk of host memory with the NTV2 kernel driver
|
|
through a CNTV2DriverInterface::NTV2Message call.
|
|
|
|
- For a static or global buffer, simply construct from the variable:
|
|
@code
|
|
static ULWord pFoo [1000];
|
|
{
|
|
NTV2_POINTER foo (pFoo, sizeof (pFoo));
|
|
. . .
|
|
} // When foo goes out of scope, it won't try to free pFoo
|
|
@endcode
|
|
- For stack-based buffers, simply construct from the variable:
|
|
@code
|
|
{
|
|
ULWord pFoo [100];
|
|
NTV2_POINTER foo (pFoo, sizeof (pFoo));
|
|
. . .
|
|
} // No need to do anything, as both foo and pFoo are automatically freed when they go out of scope
|
|
@endcode
|
|
- For a buffer you allocate and free yourself:
|
|
@code
|
|
NTV2_POINTER foo (new Bar [1], sizeof (Bar));
|
|
. . .
|
|
delete [] (Bar*) foo.GetHostPointer (); // You must free the memory yourself
|
|
@endcode
|
|
- For a 2K-byte buffer that's allocated and freed automatically by the SDK:
|
|
@code
|
|
{
|
|
NTV2_POINTER foo (2048);
|
|
::memset (foo.GetHostPointer(), 0, foo.GetByteCount());
|
|
. . .
|
|
} // The memory is freed automatically when foo goes out of scope
|
|
@endcode
|
|
@note This struct uses a constructor to properly initialize itself.
|
|
Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2_POINTER)
|
|
NTV2_BEGIN_PRIVATE
|
|
ULWord64 fUserSpacePtr; ///< @brief User space pointer. Do not set directly. Use constructor or Set method.
|
|
ULWord fByteCount; ///< @brief The (maximum) size of the buffer pointed to by fUserSpacePtr, in bytes.
|
|
/// Do not set directly. Instead, use the constructor or the Set method.
|
|
ULWord fFlags; ///< @brief Reserved for future use
|
|
#if defined (AJAMac)
|
|
ULWord64 fKernelSpacePtr; ///< @brief Reserved -- Mac driver use only
|
|
ULWord64 fIOMemoryDesc; ///< @brief Reserved -- Mac driver use only
|
|
ULWord64 fIOMemoryMap; ///< @brief Reserved -- Mac driver use only
|
|
#else
|
|
ULWord64 fKernelHandle; ///< @brief Reserved -- driver use only
|
|
#endif
|
|
NTV2_END_PRIVATE
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@name Construction & Destruction
|
|
**/
|
|
///@{
|
|
/**
|
|
@brief Constructs me from a client-supplied address and size.
|
|
@param[in] pInUserPointer Specifies the user-space virtual memory address. The client is entirely responsible for it.
|
|
Ignored if inByteCount is zero.
|
|
@param[in] inByteCount Specifies the byte count. Ignored if pInUserPointer is NULL.
|
|
**/
|
|
explicit NTV2_POINTER (const void * pInUserPointer, const size_t inByteCount);
|
|
|
|
/**
|
|
@brief Constructs me from a client-specified byte count.
|
|
In this case, I assume full responsibility for automatically freeing the memory I allocate.
|
|
@param[in] inByteCount Optionally specifies the size of the allocated buffer, in bytes. Defaults to zero.
|
|
If non-zero, causes Allocate to be called, and if successful, automatically zeroes the buffer.
|
|
If zero (the default), I don't allocate anything, and my host pointer will be NULL.
|
|
**/
|
|
NTV2_POINTER (const size_t inByteCount = 0);
|
|
|
|
/**
|
|
@brief Constructs me from another NTV2_POINTER instance.
|
|
@param[in] inObj NTV2_POINTER instance to "deep" copy into me.
|
|
**/
|
|
explicit NTV2_POINTER (const NTV2_POINTER & inObj);
|
|
|
|
/**
|
|
@brief My destructor. If I'm responsible for the memory, I free it here.
|
|
**/
|
|
~NTV2_POINTER ();
|
|
///@}
|
|
|
|
/**
|
|
@name Inquiry
|
|
**/
|
|
///@{
|
|
/**
|
|
@return My user-space host virtual address, as seen by the host process.
|
|
**/
|
|
inline void * GetHostPointer (void) const
|
|
{
|
|
if (sizeof(int*) == 4)
|
|
return reinterpret_cast <void*>((fUserSpacePtr & 0xFFFFFFFF00000000) >> 32);
|
|
else
|
|
return reinterpret_cast <void*>(fUserSpacePtr);
|
|
}
|
|
|
|
/**
|
|
@return My "raw" user-space host virtual address.
|
|
@note On 32-bit platforms, the true address is found in the most significant 4 bytes of the ULWord64 value.
|
|
**/
|
|
inline ULWord64 GetRawHostPointer (void) const {return fUserSpacePtr;}
|
|
|
|
/**
|
|
@return My size, in bytes.
|
|
**/
|
|
inline ULWord GetByteCount (void) const {return fByteCount;}
|
|
|
|
/**
|
|
@return True if my host storage was allocated by my Allocate function; otherwise false if my host storage
|
|
address and size was provided by the client application.
|
|
**/
|
|
inline bool IsAllocatedBySDK (void) const {return fFlags & NTV2_POINTER_ALLOCATED ? true : false;}
|
|
|
|
/**
|
|
@return True if my host storage was provided by the client application; otherwise false if it was allocated
|
|
by my Allocate function.
|
|
**/
|
|
inline bool IsProvidedByClient (void) const {return fFlags & NTV2_POINTER_ALLOCATED ? false : true;}
|
|
|
|
/**
|
|
@return True if my user-space pointer is NULL, or my size is zero.
|
|
**/
|
|
inline bool IsNULL (void) const {return GetHostPointer() == AJA_NULL || GetByteCount() == 0;}
|
|
|
|
/**
|
|
@return True if my host pointer is non-NULL and my byte count is non-zero; otherwise false.
|
|
**/
|
|
inline operator bool() const {return !IsNULL();}
|
|
|
|
/**
|
|
@return My size, in bytes, as a size_t.
|
|
**/
|
|
inline operator size_t() const {return size_t(GetByteCount());} // New in SDK 16.0
|
|
|
|
/**
|
|
@param[in] inByteOffset Specifies the offset from the start (or end) of my memory buffer.
|
|
Must be less than my size (see GetByteCount).
|
|
@param[in] inFromEnd Specify 'true' to reference the end of my buffer.
|
|
Specify 'false' (the default) to reference the start of my buffer.
|
|
@return The host address of the given byte. Returns NULL upon failure.
|
|
**/
|
|
void * GetHostAddress (const ULWord inByteOffset, const bool inFromEnd = false) const;
|
|
|
|
/**
|
|
@brief Searches me for the given scalar value of type T starting at a given index position.
|
|
@param[in] inValue Specifies the scalar value to be searched for.
|
|
@param inOutIndex On entry, specifies where searching begins.
|
|
On exit, receives the index of the matching value.
|
|
Negative indexes search backward from the end of the buffer, where -1
|
|
is the last T in the buffer (with the highest physical memory address).
|
|
@return True if successfully found; otherwise false.
|
|
**/
|
|
template<typename T> bool Find (const T & inValue, int & inOutIndex) const // New in SDK 16.0
|
|
{
|
|
const bool isAscending(inOutIndex >= 0);
|
|
if (isAscending && inOutIndex >= int(GetByteCount()))
|
|
return false; // Past end
|
|
if (!isAscending && (1 - inOutIndex) >= int(GetByteCount()))
|
|
return false; // Before start
|
|
const T * pValues(*this);
|
|
const int maxNdx(int(GetByteCount()) / sizeof(T));
|
|
if (isAscending)
|
|
{
|
|
for (int ndx(inOutIndex); ndx < maxNdx; ndx++)
|
|
if (pValues[ndx] == inValue)
|
|
{inOutIndex = ndx; return true;}
|
|
}
|
|
else
|
|
{
|
|
const int minNdx(0 - maxNdx);
|
|
for (int ndx(inOutIndex); ndx >= minNdx; ndx++)
|
|
if (pValues[maxNdx + ndx] == inValue)
|
|
{inOutIndex = ndx; return true;}
|
|
}
|
|
inOutIndex = 0;
|
|
return false; // Not found
|
|
}
|
|
|
|
/**
|
|
@return True if the given memory buffer's contents are identical to my own.
|
|
@param[in] inBuffer Specifies the memory buffer whose contents are to be compared with mine.
|
|
@param[in] inByteOffset Specifies the byte offset to start comparing. Defaults to the first byte.
|
|
@param[in] inByteCount Specifies the maximum number of bytes to compare. Defaults to 0xFFFFFFFF (entire buffer).
|
|
**/
|
|
bool IsContentEqual (const NTV2_POINTER & inBuffer, const ULWord inByteOffset = 0, const ULWord inByteCount = 0xFFFFFFFF) const;
|
|
|
|
/**
|
|
@brief Assuming my contents and the contents of the given buffer comprise ring buffers that periodically get overwritten
|
|
in contiguous variable-length chunks, answers with the contiguous byte range that differs between the two.
|
|
@param[in] inBuffer Specifies the memory buffer whose contents are to be compared with mine. Contents are
|
|
assumed to comprise a ring buffer, where data periodically gets overwritten in chunks.
|
|
@param[out] outByteOffsetFirst Receives the offset, in bytes, from the start of the buffer, of the first byte of the contiguous
|
|
range that's different.
|
|
Zero indicates the first byte in the buffer.
|
|
If equal to NTV2_POINTER::GetByteCount(), then both buffers are identical.
|
|
If greater than 'outByteOffsetLast', then a wrap condition exists (see Note).
|
|
@param[out] outByteOffsetLast Receives the offset, in bytes, from the start of the buffer, of the last byte of the contiguous
|
|
range that's different.
|
|
Zero indicates the first byte in the buffer.
|
|
If equal to NTV2_POINTER::GetByteCount(), then both buffers are identical.
|
|
If less than 'outByteOffsetFirst', a wrap condition exists (see Note).
|
|
@note If a wrap condition exists -- i.e., the contiguous byte range that differs starts near the end and wraps around
|
|
to near the front -- then 'outByteOffsetFirst' will be greater than 'outByteOffsetLast'.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetRingChangedByteRange (const NTV2_POINTER & inBuffer, ULWord & outByteOffsetFirst, ULWord & outByteOffsetLast) const;
|
|
///@}
|
|
|
|
/**
|
|
@name Changing
|
|
**/
|
|
///@{
|
|
/**
|
|
@brief Allocates (or re-allocates) my user-space storage using the given byte count.
|
|
I assume full responsibility for any memory that I allocate.
|
|
@param[in] inByteCount Specifies the number of bytes to allocate.
|
|
Specifying zero is the same as calling Set(NULL, 0).
|
|
@param[in] inPageAligned Optionally specifies page alignment. If true, allocates a
|
|
page-aligned block. If false (default), uses operator new.
|
|
@return True if successful; otherwise false.
|
|
@note Any memory that I was referencing prior to this call that I was responsible for will automatically be freed.
|
|
**/
|
|
bool Allocate (const size_t inByteCount, const bool inPageAligned = false);
|
|
|
|
/**
|
|
@brief Deallocates my user-space storage (if I own it -- i.e. from a prior call to Allocate).
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool Deallocate (void);
|
|
|
|
/**
|
|
@brief Fills me with the given scalar value.
|
|
@param[in] inValue The scalar value to fill me with.
|
|
@return True if I'm currently allocated; otherwise false.
|
|
**/
|
|
template<typename T> bool Fill (const T & inValue)
|
|
{
|
|
T * pT (reinterpret_cast<T*>(GetHostPointer()));
|
|
const size_t loopCount(GetByteCount() / sizeof(T));
|
|
if (pT)
|
|
for (size_t n(0); n < loopCount; n++)
|
|
pT[n] = inValue;
|
|
return pT ? true : false;
|
|
}
|
|
|
|
/**
|
|
@brief Fills a portion of me with the given scalar value.
|
|
@param[in] inValue The scalar value.
|
|
@param[in] inXferInfo Describes the (destination) portion of me to be filled.
|
|
@return True if successful; otherwise false.
|
|
@note Offsets and lengths are checked. The function will return false for any overflow or underflow.
|
|
**/
|
|
template<typename T> bool Fill (const T & inValue, const NTV2SegmentedXferInfo & inXferInfo)
|
|
{
|
|
if (!inXferInfo.isValid())
|
|
return false;
|
|
// Fill a temporary buffer to hold all the segment data...
|
|
NTV2_POINTER segData(inXferInfo.getElementLength() * inXferInfo.getSegmentCount() * inXferInfo.getSegmentLength());
|
|
if (!segData.Fill(inValue))
|
|
return false; // Fill failed
|
|
|
|
// Copy the segment data into me...
|
|
ULWord srcOffset (0);
|
|
ULWord dstOffset (inXferInfo.getDestOffset() * inXferInfo.getElementLength());
|
|
const ULWord dstPitch (inXferInfo.getDestPitch() * inXferInfo.getElementLength());
|
|
const ULWord bytesPerSeg (inXferInfo.getSegmentLength() * inXferInfo.getElementLength());
|
|
for (ULWord segNdx(0); segNdx < inXferInfo.getSegmentCount(); segNdx++)
|
|
{
|
|
const void * pSrc (segData.GetHostAddress(srcOffset));
|
|
void * pDst (GetHostAddress(dstOffset));
|
|
if (!pSrc) return false;
|
|
if (!pDst) return false;
|
|
if (dstOffset + bytesPerSeg > GetByteCount())
|
|
return false; // memcpy will write past end
|
|
::memcpy (pDst, pSrc, bytesPerSeg);
|
|
srcOffset += bytesPerSeg; // Bump src offset
|
|
dstOffset += dstPitch; // Bump dst offset
|
|
} // for each segment
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
@brief Assigns me from another NTV2_POINTER instance.
|
|
@param[in] inRHS Specifies the NTV2_POINTER instance to assign ("deep" copy) to me.
|
|
**/
|
|
NTV2_POINTER & operator = (const NTV2_POINTER & inRHS);
|
|
|
|
/**
|
|
@brief Sets (or resets) me from a client-supplied address and size.
|
|
@param[in] pInUserPointer Specifies the user-space virtual memory address. The client is entirely responsible for it.
|
|
Ignored if inByteCount is zero.
|
|
@param[in] inByteCount Specifies the byte count. Ignored if pInUserPointer is NULL.
|
|
@return True if both pInUserPointer and inByteCount agree (i.e. if pInUserPointer
|
|
and inByteCount are both zero, or if they're both non-zero); otherwise false
|
|
if they don't agree (i.e. one is non-zero and the other is zero, or vice-versa).
|
|
@note Any memory that I was referencing prior to this call that I was responsible for will automatically be freed.
|
|
**/
|
|
bool Set (const void * pInUserPointer, const size_t inByteCount);
|
|
|
|
/**
|
|
@brief Sets (or resets) me from a client-supplied address and size.
|
|
@param[in] pInUserPointer Specifies the user-space virtual memory address. The client is entirely responsible for it.
|
|
Ignored if inByteCount is zero.
|
|
@param[in] inByteCount Specifies the byte count. Ignored if pInUserPointer is NULL.
|
|
@param[in] inValue Specifies the value to fill the buffer with.
|
|
@return True if both pInUserPointer and inByteCount agree (i.e. if pInUserPointer and inByteCount
|
|
are both zero, or if they're both non-zero); otherwise false if they don't agree (i.e. one
|
|
is non-zero and the other is zero, or vice-versa).
|
|
@note Any memory that I was referencing prior to this call that I was responsible for will automatically be freed.
|
|
**/
|
|
bool SetAndFill (const void * pInUserPointer, const size_t inByteCount, const UByte inValue);
|
|
|
|
/**
|
|
@brief Replaces my contents from the given memory buffer without resizing me.
|
|
@param[in] inBuffer Specifies the memory buffer whose contents are to be copied into my own.
|
|
If this buffer is larger than I am, I am not resized; instead, only
|
|
those bytes that fit in me will be copied.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool SetFrom (const NTV2_POINTER & inBuffer);
|
|
|
|
/**
|
|
@brief Replaces my contents from the given memory buffer, resizing me to the new byte count.
|
|
@param[in] pInSrcBuffer Specifies the memory buffer whose contents are to be copied into my own.
|
|
@param[in] inByteCount Specifies the number of bytes to be copied.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool CopyFrom (const void * pInSrcBuffer, const ULWord inByteCount);
|
|
|
|
/**
|
|
@brief Copies bytes from the given memory buffer into me.
|
|
@param[in] inSrcBuffer Specifies the source memory buffer to be copied into me.
|
|
@param[in] inSrcByteOffset Specifies the offset, in bytes, at which reading will commence in the source buffer.
|
|
@param[in] inDstByteOffset Specifies the offset, in bytes, at which writing will commence in me.
|
|
@param[in] inByteCount Specifies the total number of bytes to copy.
|
|
@return True if successful; otherwise false.
|
|
@note The offsets and byte counts are checked against the existing sizes of the two buffers.
|
|
The function will return false for any overflow.
|
|
**/
|
|
bool CopyFrom (const NTV2_POINTER & inSrcBuffer, const ULWord inSrcByteOffset, const ULWord inDstByteOffset, const ULWord inByteCount);
|
|
|
|
/**
|
|
@brief Copies data segments from a given buffer into me.
|
|
@param[in] inSrcBuffer Specifies the source memory buffer to be copied into me.
|
|
@param[in] inXferInfo The segmented transfer info.
|
|
@return True if successful; otherwise false.
|
|
@note Offsets and lengths are checked. The function will return false for any overflow or underflow.
|
|
**/
|
|
bool CopyFrom (const NTV2_POINTER & inSrcBuffer, const NTV2SegmentedXferInfo & inXferInfo);
|
|
|
|
/**
|
|
@brief Swaps my underlying buffer with another's.
|
|
@param[in] inBuffer Specifies the NTV2_POINTER I'll swap buffers with.
|
|
@return True if successful; otherwise false.
|
|
@note The buffers must have identical sizes, and must have equal ownership attributes.
|
|
@note AJA recommends not using this function to swap NTV2_POINTERs that were allocated in different
|
|
executable modules (e.g., on Windows, an NTV2_POINTER that was allocated in a DLL with another
|
|
that was allocated in an EXE).
|
|
**/
|
|
bool SwapWith (NTV2_POINTER & inBuffer);
|
|
|
|
/**
|
|
@brief Byte-swaps my contents 64-bits at a time.
|
|
@return True if successful; otherwise false.
|
|
@note If my size (in bytes) is not evenly divisible by 8, the very last byte(s) won't get swapped.
|
|
**/
|
|
bool ByteSwap64 (void); // New in SDK 16.0
|
|
|
|
/**
|
|
@brief Byte-swaps my contents 32-bits at a time.
|
|
@return True if successful; otherwise false.
|
|
@note If my size (in bytes) is not evenly divisible by 4, the very last byte(s) won't get swapped.
|
|
**/
|
|
bool ByteSwap32 (void); // New in SDK 16.0
|
|
|
|
/**
|
|
@brief Byte-swaps my contents 16-bits at a time.
|
|
@return True if successful; otherwise false.
|
|
@note If my size (in bytes) is not evenly divisible by 2, the very last byte won't get swapped.
|
|
**/
|
|
bool ByteSwap16 (void); // New in SDK 16.0
|
|
///@}
|
|
|
|
/**
|
|
@name Debugging/Printing
|
|
**/
|
|
///@{
|
|
/**
|
|
@brief Prints a human-readable representation of me into the given output stream.
|
|
@param inOutStream The output stream to receive my human-readable representation.
|
|
@return A reference to the given output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
/**
|
|
@param inDumpMaxBytes If non-zero, includes a hex dump of my contents up to the number of specified bytes (64 maximum).
|
|
@return A string containing a human-readable representation of me.
|
|
**/
|
|
std::string AsString (UWord inDumpMaxBytes = 0) const;
|
|
|
|
/**
|
|
@brief Dumps me in hex/octal/decimal, with/without Ascii, to the given output stream.
|
|
@param inOutputStream Output stream that will receive the dump. Defaults to std::cout.
|
|
@param inStartByteOffset The starting offset, in bytes, where the dump will start.
|
|
@param inByteCount The number of bytes to be dumped. If zero, all bytes will be dumped.
|
|
@param inRadix Specifies the radix of the dumped memory values.
|
|
16=hex, 10=decimal, 8=octal, 2=binary -- all others disallowed.
|
|
@param inBytesPerGroup Number of bytes to dump per contiguous group of numbers. Defaults to 4.
|
|
@param inGroupsPerLine Number of contiguous groups of numbers to dump per output line.
|
|
If zero, no grouping is done, and address & ASCII display is suppressed.
|
|
Defaults to 8.
|
|
@param inAddressRadix Specifies the radix of the address column.
|
|
0=omit, 2=binary, 8=octal, 10=decimal, 16=hex -- all others disallowed.
|
|
Defaults to 0.
|
|
@param inShowAscii If True, show ASCII characters; otherwise no ASCII characters.
|
|
Overridden to false if inGroupsPerLine is zero. Defaults to false.
|
|
@param inAddrOffset Specifies a value to be added to the addresses that appear in the dump.
|
|
Ignored if inGroupsPerLine is zero.
|
|
@return A non-constant reference to the output stream that received the dump.
|
|
**/
|
|
std::ostream & Dump ( std::ostream & inOutputStream = std::cout,
|
|
const size_t inStartByteOffset = 0,
|
|
const size_t inByteCount = 0,
|
|
const size_t inRadix = 16,
|
|
const size_t inBytesPerGroup = 4,
|
|
const size_t inGroupsPerLine = 8,
|
|
const size_t inAddressRadix = 0,
|
|
const bool inShowAscii = false,
|
|
const size_t inAddrOffset = 0) const;
|
|
|
|
/**
|
|
@brief Dumps me in hex/octal/decimal, with/without Ascii, into the given string.
|
|
@param inOutputString String that will receive the dump. Appends the dump to the end of
|
|
whatever is already in the string.
|
|
@param inStartByteOffset The starting offset, in bytes, where the dump will start.
|
|
@param inByteCount The number of bytes to be dumped. If zero, all bytes will be dumped.
|
|
@param inRadix Specifies the radix of the dumped memory values.
|
|
16=hex, 10=decimal, 8=octal, 2=binary -- all others disallowed.
|
|
@param inBytesPerGroup Number of bytes to dump per contiguous group of numbers. Defaults to 4.
|
|
@param inGroupsPerLine Number of contiguous groups of numbers to dump per output line.
|
|
If zero, no grouping is done, and address & ASCII display is suppressed.
|
|
Defaults to 8.
|
|
@param inAddressRadix Specifies the radix of the address column.
|
|
0=omit, 2=binary, 8=octal, 10=decimal, 16=hex -- all others disallowed.
|
|
Defaults to 0.
|
|
@param inShowAscii If True, show ASCII characters; otherwise no ASCII characters.
|
|
Overridden to false if inGroupsPerLine is zero. Defaults to false.
|
|
@param inAddrOffset Specifies a value to be added to the addresses that appear in the dump.
|
|
Ignored if inGroupsPerLine is zero.
|
|
@return A reference to the output string that received the dump.
|
|
**/
|
|
std::string & Dump ( std::string & inOutputString,
|
|
const size_t inStartByteOffset = 0,
|
|
const size_t inByteCount = 0,
|
|
const size_t inRadix = 16,
|
|
const size_t inBytesPerGroup = 4,
|
|
const size_t inGroupsPerLine = 8,
|
|
const size_t inAddressRadix = 0,
|
|
const bool inShowAscii = false,
|
|
const size_t inAddrOffset = 0) const;
|
|
///@}
|
|
|
|
/**
|
|
@name Data Access
|
|
**/
|
|
///@{
|
|
/**
|
|
@return My host address casted to a const T pointer.
|
|
**/
|
|
template<typename T> operator const T*() const {return reinterpret_cast<const T*>(GetHostPointer());} // New in SDK 16.0
|
|
|
|
/**
|
|
@return My host address casted to a non-const T pointer.
|
|
**/
|
|
template<typename T> operator T*() const {return reinterpret_cast<T*>(GetHostPointer());} // New in SDK 16.0
|
|
|
|
/**
|
|
@brief Resets an NTV2_POINTER instance to reference a contiguous segment of my memory buffer.
|
|
@param[out] outPtr The NTV2_POINTER to be reset to my sub-segment.
|
|
@param[in] inByteOffset Specifies the offset, in bytes, where the segment starts.
|
|
@param[in] inByteCount Specifies the segment length, in bytes.
|
|
@return The specified NTV2_POINTER. It will be set to null/empty upon failure.
|
|
@note The offset and byte count are both checked against my buffer size.
|
|
**/
|
|
NTV2_POINTER & Segment (NTV2_POINTER & outPtr, const ULWord inByteOffset, const ULWord inByteCount) const;
|
|
|
|
/**
|
|
@return A copy of the value at the given zero-based index position.
|
|
@param[in] inIndex Specifies the zero-based index position (e.g. 0 is first value at start of my memory).
|
|
If negative, indexes from the end of my memory (e.g. -1 is last value).
|
|
@warning Bad index values will result in access violation exceptions.
|
|
**/
|
|
inline uint8_t U8 (const int inIndex) const {const uint8_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()) + inIndex : inIndex];} // New in SDK 16.0
|
|
|
|
/**
|
|
@return A writeable (non-const) reference to the value at the given zero-based index position.
|
|
@param[in] inIndex Specifies the zero-based index position (e.g. 0 is first value at start of my memory).
|
|
If negative, indexes from the end of my memory (e.g. -1 is last value).
|
|
@warning Bad index values will result in access violation exceptions.
|
|
**/
|
|
inline uint8_t & U8 (const int inIndex) {uint8_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()) + inIndex : inIndex];} // New in SDK 16.0
|
|
|
|
inline int8_t I8 (const int inIndex) const {const int8_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline int8_t & I8 (const int inIndex) {int8_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline uint16_t U16 (const int inIndex) const {const uint16_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/2) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline uint16_t & U16 (const int inIndex) {uint16_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/2) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline int16_t I16 (const int inIndex) const {const int16_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/2) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline int16_t & I16 (const int inIndex) {int16_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/2) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline uint32_t U32 (const int inIndex) const {const uint32_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/4) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline uint32_t & U32 (const int inIndex) {uint32_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/4) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline int32_t I32 (const int inIndex) const {const int32_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/4) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline int32_t & I32 (const int inIndex) {int32_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/4) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline uint64_t U64 (const int inIndex) const {const uint64_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/8) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline uint64_t & U64 (const int inIndex) {uint64_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/8) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline int64_t I64 (const int inIndex) const {const int64_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/8) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline int64_t & I64 (const int inIndex) {int64_t* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/8) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline float FL (const int inIndex) const {const float* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/sizeof(float)) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline float & FL (const int inIndex) {float* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/sizeof(float)) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline double DBL (const int inIndex) const {const double* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/sizeof(double)) + inIndex : inIndex];} // New in SDK 16.0
|
|
inline double & DBL (const int inIndex) {double* pVal(*this); return pVal[inIndex < 0 ? int(GetByteCount()/sizeof(double)) + inIndex : inIndex];} // New in SDK 16.0
|
|
///@}
|
|
|
|
/**
|
|
@name Vector Conversion
|
|
**/
|
|
///@{
|
|
/**
|
|
@brief Answers with my contents as a vector of unsigned 16-bit values.
|
|
@param[out] outU64s Receives my contents as a vector of unsigned 64-bit values.
|
|
@param[in] inU64Offset The starting offset, in 64-bit words, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 64-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 64-bit values may be less than this, depending on my size.
|
|
Defaults to 16.
|
|
@param[in] inByteSwap Specifies if the resulting values will be byte-swapped or not.
|
|
Specify 'true' to byte-swap; specify 'false' to return the normal, unswapped values.
|
|
Defaults to 'false'.
|
|
@return True if successful; otherwise false.
|
|
@note If my length is not evenly divisible by 8, my last bytes won't appear in the resulting vector.
|
|
**/
|
|
bool GetU64s (ULWord64Sequence & outU64s, const size_t inU64Offset = 0, const size_t inMaxSize = 16, const bool inByteSwap = false) const;
|
|
|
|
/**
|
|
@return My contents as a vector of unsigned 64-bit values.
|
|
@param[in] inU64Offset The starting offset, in 64-bit words, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 64-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 64-bit values may be less than this, depending on my size.
|
|
Defaults to 16.
|
|
@param[in] inByteSwap Specifies if the resulting values will be byte-swapped or not.
|
|
Specify 'true' to byte-swap; specify 'false' to return the normal, unswapped values.
|
|
Defaults to 'false'.
|
|
@note If my length is not evenly divisible by 8, my last bytes won't appear in the resulting vector.
|
|
**/
|
|
inline ULWord64Sequence GetU64s (const size_t inU64Offset = 0, const size_t inMaxSize = 16, const bool inByteSwap = false) const {ULWord64Sequence result; GetU64s(result, inU64Offset, inMaxSize, inByteSwap); return result;}
|
|
|
|
/**
|
|
@brief Answers with my contents as a vector of unsigned 32-bit values.
|
|
@param[out] outU32s Receives my contents as a vector of unsigned 32-bit values.
|
|
@param[in] inU32Offset The starting offset, in 32-bit words, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 32-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 32-bit values may be less than this, depending on my size.
|
|
Defaults to 32.
|
|
@param[in] inByteSwap Specifies if the resulting values will be byte-swapped or not.
|
|
Specify 'true' to byte-swap; specify 'false' to return the normal, unswapped values.
|
|
Defaults to 'false'.
|
|
@return True if successful; otherwise false.
|
|
@note If my length is not evenly divisible by 4, my last bytes won't appear in the resulting vector.
|
|
**/
|
|
bool GetU32s (ULWordSequence & outU32s, const size_t inU32Offset = 0, const size_t inMaxSize = 32, const bool inByteSwap = false) const;
|
|
|
|
/**
|
|
@return My contents as a vector of unsigned 32-bit values.
|
|
@param[in] inU32Offset The starting offset, in 32-bit words, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 32-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 32-bit values may be less than this, depending on my size.
|
|
Defaults to 32.
|
|
@param[in] inByteSwap Specifies if the resulting values will be byte-swapped or not.
|
|
Specify 'true' to byte-swap; specify 'false' to return the normal, unswapped values.
|
|
Defaults to 'false'.
|
|
@note If my length is not evenly divisible by 4, my last bytes won't appear in the resulting vector.
|
|
**/
|
|
inline ULWordSequence GetU32s (const size_t inU32Offset = 0, const size_t inMaxSize = 32, const bool inByteSwap = false) const {ULWordSequence result; GetU32s(result, inU32Offset, inMaxSize, inByteSwap); return result;}
|
|
|
|
/**
|
|
@brief Answers with my contents as a vector of unsigned 16-bit values.
|
|
@param[out] outU16s Receives my contents as a vector of unsigned 16-bit values.
|
|
@param[in] inU16Offset The starting offset, in 16-bit words, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 16-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 16-bit values may be less than this, depending on my size.
|
|
Defaults to 64.
|
|
@param[in] inByteSwap Specifies if the resulting values will be byte-swapped or not.
|
|
Specify 'true' to byte-swap; specify 'false' to return the normal, unswapped values.
|
|
Defaults to 'false'.
|
|
@return True if successful; otherwise false.
|
|
@note If my length is not evenly divisible by 2, my last byte won't appear in the resulting vector.
|
|
**/
|
|
bool GetU16s (UWordSequence & outU16s, const size_t inU16Offset = 0, const size_t inMaxSize = 64, const bool inByteSwap = false) const;
|
|
|
|
/**
|
|
@return My contents as a vector of unsigned 16-bit values.
|
|
@param[in] inU16Offset The starting offset, in 16-bit words, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 16-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 16-bit values may be less than this, depending on my size.
|
|
Defaults to 64.
|
|
@param[in] inByteSwap Specifies if the resulting values will be byte-swapped or not.
|
|
Specify 'true' to byte-swap; specify 'false' to return the normal, unswapped values.
|
|
Defaults to 'false'.
|
|
@note If my length is not evenly divisible by 2, my last byte won't appear in the resulting vector.
|
|
**/
|
|
inline UWordSequence GetU16s (const size_t inU16Offset = 0, const size_t inMaxSize = 64, const bool inByteSwap = false) const {UWordSequence result; GetU16s(result, inU16Offset, inMaxSize, inByteSwap); return result;}
|
|
|
|
/**
|
|
@brief Answers with my contents as a vector of unsigned 8-bit values.
|
|
@param[out] outU8s Receives my contents as a vector of unsigned 8-bit values.
|
|
@param[in] inU8Offset The starting offset, in bytes, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 8-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 8-bit values may be less than this, depending on my size.
|
|
Defaults to 128.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetU8s (UByteSequence & outU8s, const size_t inU8Offset = 0, const size_t inMaxSize = 128) const;
|
|
|
|
/**
|
|
@return My contents as a vector of unsigned 8-bit values.
|
|
@param[in] inU8Offset The starting offset, in bytes, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 8-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 8-bit values may be less than this, depending on my size.
|
|
Defaults to 128.
|
|
**/
|
|
inline UByteSequence GetU8s (const size_t inU8Offset = 0, const size_t inMaxSize = 128) const {UByteSequence result; GetU8s(result, inU8Offset, inMaxSize); return result;}
|
|
|
|
/**
|
|
@brief Answers with my contents as a character string.
|
|
@param[out] outString Receives the character string copied verbatim from my contents.
|
|
@param[in] inU8Offset The starting offset, in bytes, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 8-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 8-bit values may be less than this, depending on my size.
|
|
Defaults to 128.
|
|
@return True if successful; otherwise false.
|
|
@note This function blindly copies my contents into the outgoing string, without checking for validity.
|
|
**/
|
|
bool GetString (std::string & outString, const size_t inU8Offset = 0, const size_t inMaxSize = 128) const;
|
|
|
|
/**
|
|
@return My contents as a character string.
|
|
@param[in] inU8Offset The starting offset, in bytes, where copying will commence.
|
|
@param[in] inMaxSize Specifies the maximum number of 8-bit values to be returned.
|
|
Use zero for unlimited.
|
|
The actual number of returned 8-bit values may be less than this, depending on my size.
|
|
Defaults to 128.
|
|
@note This function blindly copies my contents into the outgoing string, without checking for validity.
|
|
**/
|
|
inline std::string GetString (const size_t inU8Offset = 0, const size_t inMaxSize = 128) const {std::string result; GetString(result, inU8Offset, inMaxSize); return result;}
|
|
|
|
/**
|
|
@brief Copies a vector of unsigned 64-bit values into me.
|
|
@param[in] inU64s The vector of unsigned 64-bit values to be copied into me.
|
|
@param[in] inU64Offset Specifies my starting offset (of 64-bit values) at which the vector values will be written.
|
|
Defaults to zero.
|
|
@param[in] inByteSwap Specifies if the 64-bit values will be byte-swapped or not before being written into me.
|
|
Specify 'true' to byte-swap; otherwise specify 'false'. Defaults to 'false'.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool PutU64s (const ULWord64Sequence & inU64s, const size_t inU64Offset = 0, const bool inByteSwap = false);
|
|
|
|
/**
|
|
@brief Copies a vector of unsigned 32-bit values into me.
|
|
@param[in] inU32s The vector of unsigned 32-bit values to be copied into me.
|
|
@param[in] inU32Offset Specifies my starting offset (of 32-bit values) at which the vector values will be written.
|
|
Defaults to zero.
|
|
@param[in] inByteSwap Specifies if the 32-bit values will be byte-swapped or not before being written into me.
|
|
Specify 'true' to byte-swap; otherwise specify 'false'. Defaults to 'false'.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool PutU32s (const ULWordSequence & inU32s, const size_t inU32Offset = 0, const bool inByteSwap = false);
|
|
|
|
/**
|
|
@brief Copies a vector of unsigned 16-bit values into me.
|
|
@param[in] inU16s The vector of unsigned 16-bit values to be copied into me.
|
|
@param[in] inU16Offset Specifies my starting offset (of 16-bit values) at which the vector values will be written.
|
|
Defaults to zero.
|
|
@param[in] inByteSwap Specifies if the 16-bit values will be byte-swapped or not before being written into me.
|
|
Specify 'true' to byte-swap; otherwise specify 'false'. Defaults to 'false'.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool PutU16s (const UWordSequence & inU16s, const size_t inU16Offset = 0, const bool inByteSwap = false);
|
|
|
|
/**
|
|
@brief Copies a vector of unsigned 8-bit values into me.
|
|
@param[in] inU8s The vector of unsigned 8-bit values to be copied into me.
|
|
@param[in] inU8Offset Specifies my starting byte offset at which the vector values will be written.
|
|
Defaults to zero.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool PutU8s (const UByteSequence & inU8s, const size_t inU8Offset = 0);
|
|
///@}
|
|
|
|
/**
|
|
@name Default Page Size
|
|
**/
|
|
///@{
|
|
/**
|
|
@return Default page size, in bytes.
|
|
**/
|
|
static size_t DefaultPageSize (void);
|
|
|
|
/**
|
|
@brief Changes the default page size for use in future page-aligned allocations.
|
|
@param[in] inNewSize The new page size value, in bytes. Must be a power of 2.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
static bool SetDefaultPageSize (const size_t inNewSize);
|
|
///@}
|
|
#endif // user-space clients only
|
|
NTV2_STRUCT_END (NTV2_POINTER)
|
|
|
|
|
|
/**
|
|
@brief This struct replaces the old RP188_STRUCT.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2_RP188)
|
|
ULWord fDBB;
|
|
ULWord fLo; ///< @brief | BG 4 | Secs10 | BG 3 | Secs 1 | BG 2 | Frms10 | BG 1 | Frms 1 |
|
|
ULWord fHi; ///< @brief | BG 8 | Hrs 10 | BG 7 | Hrs 1 | BG 6 | Mins10 | BG 5 | Mins 1 |
|
|
|
|
#if defined (NTV2_BUILDING_DRIVER)
|
|
#define NTV2_RP188_from_RP188_STRUCT(_n_,_r_) { (_n_).fDBB = (_r_).DBB; \
|
|
(_n_).fLo = (_r_).Low; \
|
|
(_n_).fHi = (_r_).High; }
|
|
|
|
#define NTV2_RP188P_from_RP188_STRUCT(_np_,_r_) { (_np_)->fDBB = (_r_).DBB; \
|
|
(_np_)->fLo = (_r_).Low; \
|
|
(_np_)->fHi = (_r_).High; }
|
|
|
|
#define RP188_STRUCT_from_NTV2_RP188(_r_,_n_) { (_r_).DBB = (_n_).fDBB; \
|
|
(_r_).Low = (_n_).fLo; \
|
|
(_r_).High = (_n_).fHi; }
|
|
|
|
#define RP188_STRUCT_from_NTV2_RP188P(_r_,_np_) { (_r_).DBB = (_np_)->fDBB; \
|
|
(_r_).Low = (_np_)->fLo; \
|
|
(_r_).High = (_np_)->fHi; }
|
|
|
|
#define NTV2_RP188_IS_VALID(_n_) ((_n_).fDBB != 0xFFFFFFFF || (_n_).fLo != 0xFFFFFFFF || (_n_).fHi != 0xFFFFFFFF)
|
|
#else
|
|
/**
|
|
@brief Constructs an NTV2_RP188 from each of its DBB, low and high ULWord components.
|
|
@param[in] inDBB Specifies the DBB field.
|
|
@param[in] inLow Specifies the "low" field, which contains seconds and frames.
|
|
@param[in] inHigh Specifies the "high" field, which contains hours and minutes.
|
|
@note If no parameters are specified, a default "invalid" structure is created.
|
|
**/
|
|
inline explicit NTV2_RP188 (const ULWord inDBB = 0xFFFFFFFF, const ULWord inLow = 0xFFFFFFFF, const ULWord inHigh = 0xFFFFFFFF) : fDBB (inDBB), fLo (inLow), fHi (inHigh) {}
|
|
|
|
/**
|
|
@brief Constructs an NTV2_RP188 from the given RP188_STRUCT.
|
|
@param[in] inOldRP188 Specifies the RP188_STRUCT to copy.
|
|
**/
|
|
inline explicit NTV2_RP188 (const RP188_STRUCT & inOldRP188) : fDBB (inOldRP188.DBB), fLo (inOldRP188.Low), fHi (inOldRP188.High) {}
|
|
|
|
/**
|
|
@brief Answers true if I'm valid, or false if I'm not valid.
|
|
**/
|
|
inline bool IsValid (void) const {return fDBB != 0xFFFFFFFF || fLo != 0xFFFFFFFF || fHi != 0xFFFFFFFF;}
|
|
|
|
/**
|
|
@brief Assigns a given RP188_STRUCT to me.
|
|
@param[in] inRHS The RP188_STRUCT to assign to me.
|
|
@return A non-constant reference to myself.
|
|
**/
|
|
inline NTV2_RP188 & operator = (const RP188_STRUCT & inRHS) {fDBB = inRHS.DBB; fLo = inRHS.Low; fHi = inRHS.High; return *this;}
|
|
|
|
/**
|
|
@param[in] inRHS The RP188_STRUCT to compare with me.
|
|
@return True if the right-hand-size argument is not equal to me.
|
|
**/
|
|
inline bool operator != (const RP188_STRUCT & inRHS) const {return fDBB != inRHS.DBB || fLo != inRHS.Low || fHi != inRHS.High;}
|
|
|
|
/**
|
|
@brief Sets my fields from the given DBB, low and high ULWord components.
|
|
@param[in] inDBB Specifies the DBB field.
|
|
@param[in] inLow Specifies the "low" field, which contains seconds and frames.
|
|
@param[in] inHigh Specifies the "high" field, which contains hours and minutes.
|
|
**/
|
|
inline void Set (const ULWord inDBB = 0xFFFFFFFF, const ULWord inLow = 0xFFFFFFFF, const ULWord inHigh = 0xFFFFFFFF) {fDBB = inDBB; fLo = inLow; fHi = inHigh;}
|
|
|
|
/**
|
|
@brief Converts me into an RP188_STRUCT.
|
|
@return An equivalent RP188_STRUCT.
|
|
**/
|
|
inline operator RP188_STRUCT () const {RP188_STRUCT result; result.DBB = fDBB; result.Low = fLo; result.High = fHi; return result;}
|
|
|
|
/**
|
|
@return True if I'm valid.
|
|
**/
|
|
inline operator bool () const {return IsValid();}
|
|
#endif // user-space clients only
|
|
NTV2_STRUCT_END (NTV2_RP188)
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
typedef std::vector <NTV2_RP188> NTV2TimeCodeList; ///< @brief An ordered sequence of zero or more NTV2_RP188 structures.
|
|
/// An NTV2TCIndex enum value can be used as an index into the list
|
|
/// (the list size should equal NTV2_MAX_NUM_TIMECODE_INDEXES).
|
|
typedef NTV2TimeCodeList::const_iterator NTV2TimeCodeListConstIter; ///< @brief A handy const interator for iterating over an NTV2TimeCodeList.
|
|
//typedef NTV2TimeCodeList::iterator NTV2TimeCodeListIter;
|
|
typedef std::map <NTV2TCIndex, NTV2_RP188> NTV2TimeCodes; ///< @brief A mapping of NTV2TCIndex enum values to NTV2_RP188 structures.
|
|
typedef NTV2TimeCodes::const_iterator NTV2TimeCodesConstIter; ///< @brief A handy const interator for iterating over NTV2TCIndex/NTV2TimeCodeList pairs.
|
|
|
|
typedef std::set <NTV2TCIndex> NTV2TCIndexes; ///< @brief A set of distinct NTV2TCIndex values.
|
|
typedef NTV2TCIndexes::const_iterator NTV2TCIndexesConstIter; ///< @brief A handy const interator for iterating over an NTV2TCIndexes set.
|
|
|
|
/**
|
|
@brief Appends the given NTV2_RP188 struct to the specified NTV2TimeCodeList.
|
|
@param inOutList Specifies the NTV2TimeCodeList to be appended to.
|
|
@param[in] inRP188 Specifies the NTV2_RP188 to append to the list.
|
|
@return A non-constant reference to the specified NTV2TimeCodeList.
|
|
**/
|
|
NTV2TimeCodeList & operator << (NTV2TimeCodeList & inOutList, const NTV2_RP188 & inRP188);
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
|
|
|
|
/**
|
|
@brief For devices that support it (see ::NTV2DeviceCanDoSDIErrorChecks ), this struct reports SDI input error status information.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2SDIInputStatus)
|
|
UWord mCRCTallyA; ///< @brief The number of lines having a CRC error was detected in the "B" stream of the SDI link
|
|
/// since this tally was last reset.
|
|
UWord mCRCTallyB; ///< @brief The number of lines having a CRC error was detected in the "A" stream of the SDI link
|
|
/// since this tally was last reset.
|
|
ULWord mUnlockTally; ///< @brief The number of times "RX Locked" went inactive since this tally was last reset.
|
|
//ULWord64 mFrameTally; ///< @brief The number of frames that have been detected on the SDI input since this tally was last reset.
|
|
ULWord64 mFrameRefClockCount; ///< @brief This count is incremented on each 148.xx reference clock, and latched at EAV for each frame.
|
|
ULWord64 mGlobalClockCount; ///< @brief This count is incremented on each 148.xx reference clock.
|
|
bool mFrameTRSError; ///< @brief If true, SAV/EAV was missing, or the SDI framer had to realign, or "RX Locked" went
|
|
/// inactive. This is updated once per frame (unless vertical timing is absent on the input).
|
|
bool mLocked; ///< @brief If true, a valid SDI transport was detected in the received data stream.
|
|
/// If false, at least 15 consecutive lines in the received stream had TRS errors.
|
|
bool mVPIDValidA; ///< @brief If true, at least one valid SMPTE 352 packet was received over the last four VBI periods.
|
|
bool mVPIDValidB; ///< @brief If true, at least one valid SMPTE 352 packet was received over the last four VBI periods.
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs a default NTV2SDIInputStatus.
|
|
**/
|
|
explicit NTV2SDIInputStatus ();
|
|
|
|
/**
|
|
@brief Constructs a default NTV2SDIInputStatus.
|
|
**/
|
|
void Clear (void);
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me into the given output stream.
|
|
@param inOutStream The output stream to receive my human-readable representation.
|
|
@return A reference to the given output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2SDIInputStatus)
|
|
|
|
|
|
/**
|
|
@brief Reports HDMI output status information.
|
|
@note This struct uses a constructor to properly initialize itself.
|
|
Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2HDMIOutputStatus)
|
|
bool mEnabled; ///< @brief The output is enabled
|
|
bool mPixel420; ///< @brief The output pixels are 420 format
|
|
NTV2HDMIColorSpace mColorSpace; ///< @brief The output color space (RGB or YCbCr)
|
|
NTV2HDMIRange mRGBRange; ///< @brief The RGB output range (SMPTE or full)
|
|
NTV2HDMIProtocol mProtocol; ///< @brief The output protocol (HDMI vs DVI)
|
|
NTV2Standard mVideoStandard; ///< @brief The output standard
|
|
NTV2FrameRate mVideoRate; ///< @brief The output frame rate
|
|
NTV2HDMIBitDepth mVideoBitDepth; ///< @brief The output bit depth
|
|
NTV2AudioFormat mAudioFormat; ///< @brief The output audio format
|
|
NTV2AudioRate mAudioRate; ///< @brief The output audio rate
|
|
NTV2HDMIAudioChannels mAudioChannels; ///< @brief Number of output audio channels
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs a default NTV2HDMIOutputStatus.
|
|
**/
|
|
explicit NTV2HDMIOutputStatus () {Clear();}
|
|
|
|
/**
|
|
@brief Constructs a NTV2HDMIOutputStatus from a register data value.
|
|
@param[in] inData The status register value.
|
|
**/
|
|
explicit NTV2HDMIOutputStatus (const ULWord inData) {Clear(); SetFromRegValue(inData);}
|
|
|
|
void Clear (void); ///< @brief Resets me to an invalid state.
|
|
|
|
/**
|
|
@brief Sets my fields from the given status register value.
|
|
@param[in] inData The status register value.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool SetFromRegValue (const ULWord inData);
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me into the given output stream.
|
|
@param inOutStream The output stream to receive my human-readable representation.
|
|
@return A reference to the given output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2HMDIOutputStatus)
|
|
|
|
|
|
/**
|
|
@brief All new NTV2 structs start with this common header.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2_HEADER)
|
|
NTV2_BEGIN_PRIVATE
|
|
ULWord fHeaderTag; ///< @brief A special FourCC to identify a structure header & detect endianness, set when created
|
|
ULWord fType; ///< @brief A special FourCC to identify a structure type ('stat', 'xfer', 'task', etc.), set when created
|
|
ULWord fHeaderVersion; ///< @brief The version of this header structure, set when created, originally zero
|
|
ULWord fVersion; ///< @brief The version of the structure that follows this header, set when created, originally zero
|
|
ULWord fSizeInBytes; ///< @brief The total size of the struct, in bytes, including header, body and trailer, set when created
|
|
ULWord fPointerSize; ///< @brief The size, in bytes, of a pointer on the host, set when created
|
|
ULWord fOperation; ///< @brief An operation to perform -- currently unused -- reserved for future use -- set when created
|
|
ULWord fResultStatus; ///< @brief The result status of the operation (zero if success or non-zero failure code), cleared when created, set by driver
|
|
NTV2_END_PRIVATE
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs a default NTV2_HEADER having the proper tag, version, and the given type and size.
|
|
@param[in] inStructureType Specifies the structure type.
|
|
@param[in] inSizeInBytes Specifies the total size of the structure.
|
|
**/
|
|
explicit NTV2_HEADER (const ULWord inStructureType, const ULWord inSizeInBytes);
|
|
|
|
/**
|
|
@brief Returns my total size, in bytes, including header, body, and trailer.
|
|
@return My size, in bytes.
|
|
**/
|
|
inline ULWord GetSizeInBytes (void) const {return fSizeInBytes;}
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me into the given output stream.
|
|
@param inOutStream The output stream to receive my human-readable representation.
|
|
@return A reference to the given output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
/**
|
|
@return True if my tag and type fields are valid; otherwise false.
|
|
**/
|
|
inline bool IsValid (void) const {return NTV2_IS_VALID_HEADER_TAG (fHeaderTag) && NTV2_IS_VALID_STRUCT_TYPE (fType);}
|
|
#endif // user-space clients only
|
|
NTV2_STRUCT_END (NTV2_HEADER)
|
|
|
|
|
|
/**
|
|
@brief All new NTV2 structs end with this common trailer.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2_TRAILER)
|
|
ULWord fTrailerVersion; ///< @brief Trailer version, set when created. Before SDK 15.1: always zero; 15.1 or later: set to calling SDK version (packed).
|
|
ULWord fTrailerTag; ///< @brief A special FourCC to identify the tail end of an NTV2 structure
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
explicit NTV2_TRAILER (); ///< @brief Constructs a default NTV2_TRAILER having the proper version and tag.
|
|
|
|
/**
|
|
@return True if my tag is valid; otherwise false.
|
|
**/
|
|
inline bool IsValid (void) const {return NTV2_IS_VALID_TRAILER_TAG (fTrailerTag);}
|
|
#endif // user-space clients only
|
|
NTV2_STRUCT_END (NTV2_TRAILER)
|
|
|
|
|
|
/**
|
|
@brief This struct is used to augment the default full-frame AutoCirculate DMA transfer to accommodate multiple discontiguous
|
|
"segments" of a video frame. The \ref ntv2fieldburn demo app shows how this can be used. Other examples:
|
|
- An in-host-memory frame has extra "padding" bytes at the end of each row.
|
|
In this case, set NTV2SegmentedDMAInfo::acNumActiveBytesPerRow to the number of active bytes per row,
|
|
NTV2SegmentedDMAInfo::acNumSegments to the number of rows, NTV2SegmentedDMAInfo::acSegmentHostPitch
|
|
to the number of bytes from the beginning of one row to the next. In this example,
|
|
NTV2SegmentedDMAInfo::acSegmentDevicePitch would equal NTV2SegmentedDMAInfo::acNumActiveBytesPerRow
|
|
(i.e. the frame is packed in device memory).
|
|
- To DMA a sub-section of a frame, set NTV2SegmentedDMAInfo::acNumActiveBytesPerRow to the number of bytes
|
|
that comprise one row of the subsection, then NTV2SegmentedDMAInfo::acNumSegments to the number of rows
|
|
in the subsection, NTV2SegmentedDMAInfo::acSegmentHostPitch to the bytes-per-row of the entire frame in host
|
|
memory, and NTV2SegmentedDMAInfo::acSegmentDevicePitch to the bytes-per-row of the entire frame in device memory.
|
|
@note IMPORTANT: For segmented DMAs, the ::AUTOCIRCULATE_TRANSFER::acVideoBuffer.fByteCount field holds the segment
|
|
byte count (i.e., the number of bytes to transfer per segment.
|
|
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
@todo Create a new field in the ::NTV2SegmentedDMAInfo structure to eliminate the necessity of setting
|
|
::AUTOCIRCULATE_TRANSFER::acVideoBuffer.fByteCount to store the segmented transfer's bytes-per-segment value.
|
|
|
|
@note Setting NTV2SegmentedDMAInfo::acNumSegments to 0 or 1 defaults to normal non-segmented DMA behavior
|
|
(i.e. DMA one complete, packed frame).
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2SegmentedDMAInfo)
|
|
ULWord acNumSegments; ///< @brief Number of segments of size ::AUTOCIRCULATE_TRANSFER::acVideoBuffer.fByteCount
|
|
/// to transfer. Zero or 1 means normal (unsegmented) transfer.
|
|
ULWord acNumActiveBytesPerRow; ///< @brief Number of active bytes in a row of video.
|
|
ULWord acSegmentHostPitch; ///< @brief Offset, in bytes, between the start of one host segment and the start of
|
|
/// the next host segment (i.e. host memory bytes-per-row).
|
|
ULWord acSegmentDevicePitch; ///< @brief Offset, in bytes, between the start of one device segment and the start of
|
|
/// the next device segment (i.e. device memory bytes-per-row).
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs a disabled NTV2SegmentedDMAInfo struct.
|
|
**/
|
|
explicit NTV2SegmentedDMAInfo ();
|
|
|
|
/**
|
|
@brief Constructs an NTV2SegmentedDMAInfo struct from a segment count, a host pitch, and device pitch value.
|
|
@param[in] inNumSegments Specifies the number of segments (lines) to DMA.
|
|
@param[in] inNumActiveBytesPerRow Specifies the number of active bytes in a row of video.
|
|
@param[in] inHostBytesPerRow Specifies the offset, in bytes, between two adjacent segments on the host.
|
|
@param[in] inDeviceBytesPerRow Specifies the offset, in bytes, between two adjacent segments on the device.
|
|
**/
|
|
explicit NTV2SegmentedDMAInfo (const ULWord inNumSegments, const ULWord inNumActiveBytesPerRow, const ULWord inHostBytesPerRow, const ULWord inDeviceBytesPerRow);
|
|
|
|
/**
|
|
@brief Sets the NTV2SegmentedDMAInfo struct members.
|
|
@param[in] inNumSegments Specifies the number of segments (lines) to DMA.
|
|
If 1 or zero, performs a Reset, and the remaining parameters are ignored.
|
|
@param[in] inNumActiveBytesPerRow Specifies the number of active bytes in a row of video.
|
|
@param[in] inHostBytesPerRow Specifies the offset, in bytes, between two adjacent segments on the host.
|
|
@param[in] inDeviceBytesPerRow Specifies the offset, in bytes, between two adjacent segments on the device.
|
|
**/
|
|
void Set (const ULWord inNumSegments, const ULWord inNumActiveBytesPerRow, const ULWord inHostBytesPerRow, const ULWord inDeviceBytesPerRow);
|
|
|
|
/**
|
|
@brief Resets the NTV2SegmentedDMAInfo struct members to their default values (normal, non-segmented AutoCirculate DMA transfers).
|
|
**/
|
|
void Reset (void);
|
|
|
|
/**
|
|
@return My segment count.
|
|
**/
|
|
inline ULWord GetSegmentCount (void) const {return acNumSegments;}
|
|
|
|
/**
|
|
@return True if I'm currently active (i.e., I have more than one segment; otherwise false.
|
|
**/
|
|
inline bool IsSegmented (void) const {return GetSegmentCount() > 1;}
|
|
#endif // user-space clients only
|
|
NTV2_STRUCT_END (NTV2SegmentedDMAInfo)
|
|
|
|
|
|
/**
|
|
@brief Color correction data used with AUTOCIRCULATE_WITH_COLORCORRECT option.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2ColorCorrectionData)
|
|
NTV2ColorCorrectionMode ccMode; ///< @brief My mode (off, RGB, YCbCr, or 3-way)
|
|
ULWord ccSaturationValue; ///< @brief My saturation value, used only in 3-way color correction mode.
|
|
|
|
/**
|
|
@brief RGB lookup tables pre-formatted for AJA hardware as a contiguous block of NTV2_COLORCORRECTOR_TABLESIZE bytes.
|
|
This field is owned by the SDK, which is wholly responsible for allocating and/or freeing it. If empty, no color
|
|
correction tables will be transferred. Use the Getter/Setter methods to get/set this field.
|
|
**/
|
|
NTV2_POINTER ccLookupTables;
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs a default NTV2ColorCorrectionData struct.
|
|
**/
|
|
explicit NTV2ColorCorrectionData ();
|
|
|
|
/**
|
|
@brief My destructor, which frees my private color correction table buffer.
|
|
**/
|
|
~NTV2ColorCorrectionData ();
|
|
|
|
/**
|
|
@brief Frees my private color correction table buffer and resets my mode to "invalid".
|
|
**/
|
|
void Clear (void);
|
|
|
|
/**
|
|
@return True if my mode is valid and not "Off", and my color correction tables are allocated.
|
|
**/
|
|
inline bool IsActive (void) const {return NTV2_IS_ACTIVE_COLOR_CORRECTION_MODE (ccMode) && ccLookupTables.GetHostPointer ();}
|
|
|
|
/**
|
|
@brief Sets this struct from the given mode, saturation and table data, replacing any existing mode, saturation and table data.
|
|
@param[in] inMode Specifies the color correction mode.
|
|
@param[in] inSaturation Specifies the saturation value (valid only for 3-way color correction mode).
|
|
@param[in] pInTableData Specifies a valid, non-NULL pointer to a buffer that's at least NTV2_COLORCORRECTOR_TABLESIZE
|
|
bytes long, that contains the table data to copy into my private buffer.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool Set (const NTV2ColorCorrectionMode inMode, const ULWord inSaturation, const void * pInTableData);
|
|
|
|
NTV2_BEGIN_PRIVATE
|
|
inline explicit NTV2ColorCorrectionData (const NTV2ColorCorrectionData & inObj) : ccLookupTables (0) {(void) inObj;} ///< @brief You can't construct an NTV2ColorCorrectionData from another.
|
|
inline NTV2ColorCorrectionData & operator = (const NTV2ColorCorrectionData & inRHS) {(void) inRHS; return *this;} ///< @brief You cannot assign NTV2ColorCorrectionData instances.
|
|
NTV2_END_PRIVATE
|
|
#endif // user-space clients only
|
|
NTV2_STRUCT_END (NTV2ColorCorrectionData)
|
|
|
|
|
|
/**
|
|
@brief This is returned from the CNTV2Card::AutoCirculateGetStatus function.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (AUTOCIRCULATE_STATUS)
|
|
NTV2_HEADER acHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
NTV2Crosspoint acCrosspoint; ///< @brief The crosspoint (channel number with direction)
|
|
NTV2AutoCirculateState acState; ///< @brief Current AutoCirculate state.
|
|
LWord acStartFrame; ///< @brief First frame to circulate. FIXFIXFIX Why is this signed? CHANGE TO ULWord??
|
|
LWord acEndFrame; ///< @brief Last frame to circulate. FIXFIXFIX Why is this signed? CHANGE TO ULWord??
|
|
LWord acActiveFrame; ///< @brief Current frame actually being captured/played when CNTV2Card::AutoCirculateGetStatus called. FIXFIXFIX CHANGE TO ULWord??
|
|
ULWord64 acRDTSCStartTime; ///< @brief Timestamp of the first VBI received after CNTV2Card::AutoCirculateStart called, using host OS system clock.
|
|
ULWord64 acAudioClockStartTime; ///< @brief Timestamp of the first VBI received after CNTV2Card::AutoCirculateStart called, using "64-bit clean" value of the device's 48kHz audio clock (::kRegAud1Counter register).
|
|
ULWord64 acRDTSCCurrentTime; ///< @brief Timestamp when CNTV2Card::AutoCirculateGetStatus called, using the host OS system clock.
|
|
ULWord64 acAudioClockCurrentTime; ///< @brief Timestamp when CNTV2Card::AutoCirculateGetStatus called, using "64-bit clean" value of the device's 48kHz audio clock (::kRegAud1Counter register).
|
|
ULWord acFramesProcessed; ///< @brief Total number of frames successfully processed since CNTV2Card::AutoCirculateStart called.
|
|
ULWord acFramesDropped; ///< @brief Total number of frames dropped since CNTV2Card::AutoCirculateStart called
|
|
ULWord acBufferLevel; ///< @brief Number of buffered frames in driver ready to capture or play
|
|
ULWord acOptionFlags; ///< @brief AutoCirculate options used when CNTV2Card::AutoCirculateInitForInput or CNTV2Card::AutoCirculateInitForOutput called (e.g., AUTOCIRCULATE_WITH_RP188, etc.).
|
|
NTV2AudioSystem acAudioSystem; ///< @brief The audio system being used for this channel (NTV2_AUDIOSYSTEM_INVALID if none)
|
|
NTV2_TRAILER acTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs a default AUTOCIRCULATE_STATUS struct for the given NTV2Crosspoint.
|
|
**/
|
|
explicit AUTOCIRCULATE_STATUS (const NTV2Crosspoint inCrosspoint = NTV2CROSSPOINT_CHANNEL1);
|
|
|
|
/**
|
|
@brief Copies my data into the given AUTOCIRCULATE_STATUS_STRUCT.
|
|
@param[out] outOldStruct Specifies the old AUTOCIRCULATE_STATUS_STRUCT that is to receive the copied data.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool CopyTo (AUTOCIRCULATE_STATUS_STRUCT & outOldStruct);
|
|
|
|
/**
|
|
@brief Copies the given AUTOCIRCULATE_STATUS_STRUCT into me.
|
|
@param[in] inOldStruct Specifies the old AUTOCIRCULATE_STATUS_STRUCT that is to supply the copied data.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool CopyFrom (const AUTOCIRCULATE_STATUS_STRUCT & inOldStruct);
|
|
|
|
/**
|
|
@brief Clears my data.
|
|
**/
|
|
void Clear (void);
|
|
|
|
/**
|
|
@return The number of frames being auto-circulated.
|
|
**/
|
|
inline ULWord GetFrameCount (void) const {return IsStopped() ? 0 : ULWord (acEndFrame - acStartFrame + 1);}
|
|
|
|
/**
|
|
@return The total number of frames dropped since AutoCirculateStart called.
|
|
**/
|
|
inline ULWord GetDroppedFrameCount (void) const {return acFramesDropped;}
|
|
|
|
/**
|
|
@return The total number of frames successfully processed (not dropped) since AutoCirculateStart called.
|
|
**/
|
|
inline ULWord GetProcessedFrameCount (void) const {return acFramesProcessed;}
|
|
|
|
/**
|
|
@return The number of buffered frames in the driver ready to capture or play.
|
|
**/
|
|
inline ULWord GetBufferLevel (void) const {return acBufferLevel;}
|
|
|
|
/**
|
|
@return The number of "unoccupied" output (playout) frames the device's AutoCirculate channel can currently accommodate.
|
|
**/
|
|
inline ULWord GetNumAvailableOutputFrames (void) const {return GetFrameCount () > acBufferLevel ? GetFrameCount () - acBufferLevel : 0;}
|
|
|
|
/**
|
|
@return True if the device's AutoCirculate channel is ready to accept at least one more output frame.
|
|
**/
|
|
inline bool CanAcceptMoreOutputFrames (void) const {return GetNumAvailableOutputFrames () > 1;}
|
|
|
|
/**
|
|
@return True if there's at least one captured frame that's ready to transfer from the device to the host; otherwise false.
|
|
**/
|
|
inline bool HasAvailableInputFrame (void) const {return acBufferLevel > 1;}
|
|
|
|
/**
|
|
@return The current active frame number.
|
|
**/
|
|
inline LWord GetActiveFrame (void) const {return acActiveFrame;}
|
|
|
|
/**
|
|
@return The first frame number.
|
|
**/
|
|
inline uint16_t GetStartFrame (void) const {return uint16_t(acStartFrame);}
|
|
|
|
/**
|
|
@return The last frame number.
|
|
**/
|
|
inline uint16_t GetEndFrame (void) const {return uint16_t(acEndFrame);}
|
|
|
|
/**
|
|
@return My current state.
|
|
**/
|
|
inline NTV2AutoCirculateState GetState (void) const {return acState;}
|
|
|
|
/**
|
|
@return My audio system. If NTV2_AUDIOSYSTEM_INVALID, then no audio is being captured/played.
|
|
**/
|
|
inline NTV2AudioSystem GetAudioSystem (void) const {return acAudioSystem;}
|
|
|
|
/**
|
|
@return True if my state is currently NTV2_AUTOCIRCULATE_RUNNING; otherwise false.
|
|
**/
|
|
inline bool IsRunning (void) const {return GetState () == NTV2_AUTOCIRCULATE_RUNNING;}
|
|
|
|
/**
|
|
@return True if my state is currently NTV2_AUTOCIRCULATE_STARTING or NTV2_AUTOCIRCULATE_STARTING_AT_TIME; otherwise false.
|
|
**/
|
|
inline bool IsStarting (void) const {return GetState () == NTV2_AUTOCIRCULATE_STARTING || GetState () == NTV2_AUTOCIRCULATE_STARTING_AT_TIME;}
|
|
|
|
/**
|
|
@return True if my state is currently NTV2_AUTOCIRCULATE_DISABLED; otherwise false.
|
|
**/
|
|
inline bool IsStopped (void) const {return GetState () == NTV2_AUTOCIRCULATE_DISABLED;}
|
|
|
|
/**
|
|
@return True if my state is currently NTV2_AUTOCIRCULATE_STOPPING; otherwise false.
|
|
**/
|
|
inline bool IsStopping (void) const {return GetState () == NTV2_AUTOCIRCULATE_STOPPING;}
|
|
|
|
/**
|
|
@return True if my state is currently NTV2_AUTOCIRCULATE_PAUSED; otherwise false.
|
|
**/
|
|
inline bool IsPaused (void) const {return GetState () == NTV2_AUTOCIRCULATE_PAUSED;}
|
|
|
|
/**
|
|
@return True if circulating with audio; otherwise false.
|
|
**/
|
|
inline bool WithAudio (void) const {return NTV2_IS_VALID_AUDIO_SYSTEM (GetAudioSystem ());}
|
|
|
|
/**
|
|
@return The option flags.
|
|
**/
|
|
inline ULWord OptionFlags (void) const {return acOptionFlags;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if operating the custom Anc inserter/extractor; otherwise false.
|
|
**/
|
|
inline bool WithCustomAnc (void) const {return OptionFlags() & AUTOCIRCULATE_WITH_ANC;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if capturing/playing RP188 timecode; otherwise false.
|
|
**/
|
|
inline bool WithRP188 (void) const {return OptionFlags() & AUTOCIRCULATE_WITH_RP188;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if capturing/playing analog LTC timecode; otherwise false.
|
|
**/
|
|
inline bool WithLTC (void) const {return OptionFlags() & AUTOCIRCULATE_WITH_LTC;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if AUTOCIRCULATE_WITH_FBFCHANGE enabled; otherwise false.
|
|
**/
|
|
inline bool WithFBFChange (void) const {return OptionFlags() & AUTOCIRCULATE_WITH_FBFCHANGE;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if AUTOCIRCULATE_WITH_FBOCHANGE enabled; otherwise false.
|
|
**/
|
|
inline bool WithFBOChange (void) const {return OptionFlags() & AUTOCIRCULATE_WITH_FBOCHANGE;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if AUTOCIRCULATE_WITH_COLORCORRECT enabled; otherwise false.
|
|
**/
|
|
inline bool WithColorCorrect (void) const {return OptionFlags() & AUTOCIRCULATE_WITH_COLORCORRECT;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if AUTOCIRCULATE_WITH_VIDPROC enabled; otherwise false.
|
|
**/
|
|
inline bool WithVidProc (void) const {return OptionFlags() & AUTOCIRCULATE_WITH_VIDPROC;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if running in field mode; otherwise false.
|
|
**/
|
|
inline bool IsFieldMode (void) const {return OptionFlags() & AUTOCIRCULATE_WITH_FIELDS;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if capturing/playing with HDMI auxiliary data; otherwise false.
|
|
**/
|
|
inline bool WithHDMIAuxData (void) const {return OptionFlags() & AUTOCIRCULATE_WITH_HDMIAUX;} // New in SDK 16.0
|
|
|
|
/**
|
|
@return True if capturing; otherwise false.
|
|
**/
|
|
inline bool IsInput (void) const {return NTV2_IS_INPUT_CROSSPOINT(acCrosspoint);}
|
|
|
|
/**
|
|
@return True if playing out; otherwise false.
|
|
**/
|
|
inline bool IsOutput (void) const {return NTV2_IS_OUTPUT_CROSSPOINT(acCrosspoint);}
|
|
|
|
/**
|
|
@return The NTV2Mode, whether NTV2_MODE_OUTPUT, NTV2_MODE_INPUT or NTV2_MODE_INVALID (if stopped).
|
|
**/
|
|
inline NTV2Mode GetMode (void) const {return IsStopped() ? NTV2_MODE_INVALID : (IsInput() ? NTV2_MODE_INPUT : NTV2_MODE_OUTPUT);} // New in SDK 15.5
|
|
|
|
/**
|
|
@return My channel.
|
|
**/
|
|
NTV2Channel GetChannel (void) const;
|
|
|
|
/**
|
|
@return A string containing the human-readable data for the given zero-based index value.
|
|
@param[in] inIndexNum A zero-based index number that specifies which member data value to return.
|
|
**/
|
|
std::string operator [] (const unsigned inIndexNum) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(acHeader,acTrailer)
|
|
#endif // user-space clients only
|
|
NTV2_STRUCT_END (AUTOCIRCULATE_STATUS)
|
|
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
typedef std::set <ULWord> NTV2RegisterNumberSet; ///< @brief A set of distinct ULWord values.
|
|
typedef NTV2RegisterNumberSet NTV2RegNumSet; ///< @brief A set of distinct NTV2RegisterNumbers.
|
|
typedef NTV2RegNumSet::const_iterator NTV2RegNumSetConstIter; ///< @brief A const iterator that iterates over a set of distinct NTV2RegisterNumbers.
|
|
typedef NTV2RegNumSet::iterator NTV2RegNumSetIter; ///< @brief A non-constant iterator that iterates over a set of distinct NTV2RegisterNumbers.
|
|
|
|
/**
|
|
@brief Adds the given register number to the specified NTV2RegisterNumberSet.
|
|
@param inOutSet Specifies the NTV2RegisterNumberSet to be added to.
|
|
@param[in] inRegisterNumber Specifies the NTV2RegisterNumber to add to the set.
|
|
@return A non-constant reference to the specified NTV2RegisterNumberSet.
|
|
**/
|
|
NTV2RegisterNumberSet & operator << (NTV2RegisterNumberSet & inOutSet, const ULWord inRegisterNumber);
|
|
|
|
typedef std::map <ULWord, ULWord> NTV2RegisterValueMap; ///< @brief A mapping of distinct NTV2RegisterNumbers to their corresponding ULWord values.
|
|
typedef NTV2RegisterValueMap::const_iterator NTV2RegValueMapConstIter; ///< @brief A const iterator that iterates over NTV2RegisterValueMap entries.
|
|
typedef NTV2RegisterValueMap::iterator NTV2RegValueMapIter; ///< @brief A non-constant iterator that iterates over NTV2RegisterValueMap entries.
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
|
|
|
|
/**
|
|
@brief This is used by the CNTV2Card::ReadRegisters function.
|
|
@note There is no need to access any of this structure's fields directly. Simply call the CNTV2Card instance's ReadRegisters function.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2GetRegisters) // AUTOCIRCULATE_TYPE_GETREGS
|
|
NTV2_BEGIN_PRIVATE
|
|
NTV2_HEADER mHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
ULWord mInNumRegisters; ///< @brief The number of registers to read in one batch.
|
|
NTV2_POINTER mInRegisters; ///< @brief Array of register numbers to be read in one batch. The SDK owns this memory.
|
|
ULWord mOutNumRegisters; ///< @brief The number of registers successfully read.
|
|
NTV2_POINTER mOutGoodRegisters; ///< @brief Array of register numbers that were read successfully. The SDK owns this memory.
|
|
NTV2_POINTER mOutValues; ///< @brief Array of register values that were read successfully. The SDK owns this memory.
|
|
NTV2_TRAILER mTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
NTV2_END_PRIVATE
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs an NTV2GetRegisters struct from the given NTV2RegisterNumberSet.
|
|
@param[in] inRegisterNumbers A set of distinct NTV2RegisterNumbers to copy into the mRegisters field.
|
|
If omitted, defaults to an empty set.
|
|
**/
|
|
explicit NTV2GetRegisters (const NTV2RegNumSet & inRegisterNumbers = NTV2RegNumSet ());
|
|
|
|
explicit NTV2GetRegisters (NTV2RegisterReads & inRegReads);
|
|
|
|
/**
|
|
@brief Resets me, starting over, now using the given NTV2RegisterNumberSet.
|
|
@param[in] inRegisterNumbers A set of distinct NTV2RegisterNumbers to copy into my mInRegisters field.
|
|
**/
|
|
bool ResetUsing (const NTV2RegNumSet & inRegisterNumbers);
|
|
|
|
/**
|
|
@brief Resets me, starting over, using the given NTV2RegisterReads vector.
|
|
@param[in] inRegReads A vector of NTV2RegInfo values to use for my mInRegisters field.
|
|
@note The mask and shift fields of the NTV2RegInfo values are ignored.
|
|
**/
|
|
bool ResetUsing (const NTV2RegisterReads & inRegReads);
|
|
|
|
/**
|
|
@brief Returns an NTV2RegNumSet built from my mOutGoodRegisters field.
|
|
@param[out] outGoodRegNums Receives the set of "good" registers.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetGoodRegisters (NTV2RegNumSet & outGoodRegNums) const;
|
|
|
|
/**
|
|
@brief Returns an NTV2RegisterValueMap built from my mOutGoodRegisters and mOutValues fields.
|
|
@param[out] outValues Receives the register/value map.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetRegisterValues (NTV2RegisterValueMap & outValues) const;
|
|
|
|
/**
|
|
@brief Returns a vector of NTV2RegInfo values built from my mOutGoodRegisters and mOutValues fields.
|
|
@param[out] outValues Receives the register values.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetRegisterValues (NTV2RegisterReads & outValues) const;
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me to the given output stream.
|
|
@param inOutStream Specifies the output stream to use.
|
|
@return A reference to the output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(mHeader,mTrailer)
|
|
|
|
NTV2_BEGIN_PRIVATE
|
|
inline explicit NTV2GetRegisters (const NTV2GetRegisters & inObj) : mHeader(0xFEFEFEFE, 0), mInRegisters(0), mOutGoodRegisters(0), mOutValues(0)
|
|
{(void) inObj;} ///< @brief You cannot construct an NTV2GetRegisters from another.
|
|
inline NTV2GetRegisters & operator = (const NTV2GetRegisters & inRHS) {(void) inRHS; return *this;} ///< @brief You cannot assign NTV2GetRegisters.
|
|
NTV2_END_PRIVATE
|
|
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2GetRegisters)
|
|
|
|
|
|
/**
|
|
@brief This is used by the CNTV2Card::WriteRegisters function.
|
|
@note There is no need to access any of this structure's fields directly. Simply call the CNTV2Card instance's WriteRegisters function.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2SetRegisters) // AUTOCIRCULATE_TYPE_SETREGS
|
|
NTV2_HEADER mHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
ULWord mInNumRegisters; ///< @brief The number of NTV2RegInfo's to be set.
|
|
NTV2_POINTER mInRegInfos; ///< @brief Read-only array of NTV2RegInfo structs to be set. The SDK owns this memory.
|
|
ULWord mOutNumFailures; ///< @brief The number of registers unsuccessfully written.
|
|
NTV2_POINTER mOutBadRegIndexes; ///< @brief Array of UWords containing index numbers of the register writes that failed. The SDK owns this memory.
|
|
NTV2_TRAILER mTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs an NTV2SetRegisters struct from the given NTV2RegisterWrites collection.
|
|
@param[in] inRegWrites An ordered collection of NTV2ReadWriteRegisterSingle structs to be copied into my mInRegInfos field.
|
|
If omitted, defaults to an empty collection.
|
|
**/
|
|
NTV2SetRegisters (const NTV2RegisterWrites & inRegWrites = NTV2RegisterWrites ());
|
|
|
|
/**
|
|
@brief Resets me, starting over, now using the given NTV2RegisterNumberSet.
|
|
@param[in] inRegWrites An ordered collection of NTV2ReadWriteRegisterSingle structs to be copied into my mInRegInfos field.
|
|
If omitted, defaults to an empty collection.
|
|
**/
|
|
bool ResetUsing (const NTV2RegisterWrites & inRegWrites);
|
|
|
|
/**
|
|
@brief Returns an NTV2RegisterWrites built from my mOutBadRegInfos field.
|
|
@param[out] outFailedRegWrites Receives the list of failed writes.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetFailedRegisterWrites (NTV2RegisterWrites & outFailedRegWrites) const;
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me to the given output stream.
|
|
@param inOutStream Specifies the output stream to use.
|
|
@return A reference to the output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(mHeader,mTrailer)
|
|
|
|
NTV2_BEGIN_PRIVATE
|
|
inline explicit NTV2SetRegisters (const NTV2SetRegisters & inObj) : mHeader(0xFEFEFEFE, 0), mInNumRegisters(0), mInRegInfos(0), mOutNumFailures(0), mOutBadRegIndexes(0)
|
|
{(void) inObj;} ///< @brief You cannot construct an NTV2SetRegisters from another.
|
|
inline NTV2SetRegisters & operator = (const NTV2SetRegisters & inRHS) {(void) inRHS; return *this;} ///< @brief You cannot assign NTV2SetRegisters.
|
|
NTV2_END_PRIVATE
|
|
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2SetRegisters)
|
|
|
|
|
|
/**
|
|
@brief This is used to atomically perform bank-selected register reads or writes.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2BankSelGetSetRegs) // NTV2_TYPE_BANKGETSET
|
|
NTV2_HEADER mHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
ULWord mIsWriting; ///< @brief If non-zero, register(s) will be written; otherwise, register(s) will be read.
|
|
NTV2_POINTER mInBankInfos; ///< @brief Bank select NTV2RegInfo. The SDK owns this memory.
|
|
NTV2_POINTER mInRegInfos; ///< @brief NTV2RegInfo array of registers be read/written. The SDK owns this memory.
|
|
NTV2_TRAILER mTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs an NTV2BankSelGetSetRegs struct for atomically reading or writing the given bank-selected register.
|
|
@param[in] inBankSelect The bank select register info.
|
|
@param[in] inRegInfo The register info of the register to be read or written.
|
|
@param[in] inDoWrite Specify 'true' to write the register value; otherwise use 'false'. Defaults to 'false'.
|
|
**/
|
|
explicit NTV2BankSelGetSetRegs (const NTV2RegInfo & inBankSelect, const NTV2RegInfo & inRegInfo, const bool inDoWrite = false);
|
|
|
|
/**
|
|
@return The NTV2RegInfo at the given zero-based index position.
|
|
@param inIndex0 Specifies the zero-based index of the NTV2RegInfo to retrieve from my array.
|
|
**/
|
|
NTV2RegInfo GetRegInfo (const UWord inIndex0 = 0) const;
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me to the given output stream.
|
|
@param inOutStream Specifies the output stream to use.
|
|
@return A reference to the output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(mHeader,mTrailer)
|
|
|
|
NTV2_BEGIN_PRIVATE
|
|
inline explicit NTV2BankSelGetSetRegs (const NTV2BankSelGetSetRegs & inObj) : mHeader(0xFEFEFEFE, 0), mIsWriting(false), mInBankInfos(0), mInRegInfos(0)
|
|
{(void) inObj;} ///< @brief You cannot construct an NTV2BankSelGetSetRegs from another.
|
|
inline NTV2BankSelGetSetRegs & operator = (const NTV2BankSelGetSetRegs & inRHS) {(void) inRHS; return *this;} ///< @brief You cannot assign NTV2BankSelGetSetRegs.
|
|
NTV2_END_PRIVATE
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2BankSelGetSetRegs)
|
|
|
|
|
|
/**
|
|
@brief This is used to perform virtual data reads or writes.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2VirtualData) // NTV2_TYPE_VIRTUAL_DATA_RW
|
|
NTV2_HEADER mHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
ULWord mTag; ///< @brief Tag for virtual data. This value is used to recal saved data by tag.
|
|
ULWord mIsWriting; ///< @brief If non-zero, virtual data will be written; otherwise, virtual data will be read.
|
|
NTV2_POINTER mVirtualData; ///< @brief Pointer object to virtual data. The SDK owns this memory.
|
|
NTV2_TRAILER mTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs an NTV2VirtualData struct for reading or writing virtual data.
|
|
@param[in] inTag The tag to use.
|
|
@param[in] inVirtualData Pointer to vitrual data.
|
|
@param[in] inVirtualDataSize The size of the virtual data.
|
|
@param[in] inDoWrite True if writing, false if reading.
|
|
**/
|
|
explicit NTV2VirtualData (const ULWord inTag, const void* inVirtualData, const size_t inVirtualDataSize, const bool inDoWrite = false);
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me to the given output stream.
|
|
@param inOutStream Specifies the output stream to use.
|
|
@return A reference to the output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(mHeader,mTrailer)
|
|
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2VirtualData)
|
|
|
|
|
|
/**
|
|
@brief This is used by the CNTV2Card::ReadSDIStatistics function.
|
|
@note There is no need to access any of this structure's fields directly. Simply call the CNTV2Card instance's ReadSDIStatistics function.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2SDIInStatistics) // AUTOCIRCULATE_TYPE_SDISTATS
|
|
NTV2_BEGIN_PRIVATE
|
|
NTV2_HEADER mHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
NTV2_POINTER mInStatistics; ///< @brief Array of NTV2SDIStatus s to be read in one batch. The SDK owns this memory.
|
|
NTV2_TRAILER mTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
NTV2_END_PRIVATE
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs an NTV2GetSDIStatistics struct and initializes it to its default state.
|
|
**/
|
|
NTV2SDIInStatistics ();
|
|
|
|
/**
|
|
@brief Resets the struct to its initialized state.
|
|
**/
|
|
void Clear (void);
|
|
|
|
/**
|
|
@brief Answers with the NTV2SDIInputStatus for the given SDI input spigot.
|
|
@param[out] outStatus Receives the NTV2SDIInputStatus for the given SDI input.
|
|
@param[in] inSDIInputIndex0 Specifies the zero-based index of the SDI input of interest.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetSDIInputStatus (NTV2SDIInputStatus & outStatus, const UWord inSDIInputIndex0 = 0);
|
|
|
|
/**
|
|
@return A non-const reference to the NTV2SDIInputStatus record for the given SDI input.
|
|
@param[in] inSDIInputIndex0 Specifies the zero-based index of the SDI input of interest.
|
|
**/
|
|
NTV2SDIInputStatus & operator [] (const size_t inSDIInputIndex0); // New in SDK 16.0
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me to the given output stream.
|
|
@param inOutStream Specifies the output stream to use.
|
|
@return A reference to the output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(mHeader,mTrailer)
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2SDIInStatistics)
|
|
|
|
|
|
/**
|
|
@brief This is returned by the CNTV2Card::AutoCirculateGetFrameStamp function, and is also embedded in the AUTOCIRCULATE_TRANSFER struct
|
|
returned from CNTV2Card::AutoCirculateTransfer. If used as its own CNTV2DriverInterface::NTV2Message (the new API version of the old CNTV2Card::GetFrameStamp call),
|
|
pass the NTV2Channel in the least significant byte of FRAME_STAMP::acFrameTime, and the requested frame in FRAME_STAMP::acRequestedFrame.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (FRAME_STAMP) // AUTOCIRCULATE_TYPE_FRAMESTAMP
|
|
NTV2_HEADER acHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
LWord64 acFrameTime; ///< @brief On exit, contains host OS clock at time of capture/play.
|
|
///< On entry, contains ::NTV2Channel of interest, but only for new API ::FRAME_STAMP message.
|
|
ULWord acRequestedFrame; ///< @brief The frame requested (0xFFFFFFFF == "not available"), including for new API (::FRAME_STAMP message).
|
|
ULWord64 acAudioClockTimeStamp; ///< @brief Number of 10MHz ticks at moment of play or record, based on 48kHz clock (from register 28).
|
|
ULWord acAudioExpectedAddress; ///< @brief The address that was used to transfer
|
|
ULWord acAudioInStartAddress; ///< @brief For record - first position in buffer of audio (includes base offset) -- AudioInAddress at the time this Frame was stamped
|
|
ULWord acAudioInStopAddress; ///< @brief For record - end position (exclusive) in buffer of audio (includes base offset) -- AudioInAddress at the Frame AFTER this Frame was stamped
|
|
ULWord acAudioOutStopAddress; ///< @brief For play - first position in buffer of audio -- AudioOutAddress at the time this Frame was stamped
|
|
ULWord acAudioOutStartAddress; ///< @brief For play - end position (exclusive) in buffer of audio -- AudioOutAddress at the Frame AFTER it was stamped
|
|
ULWord acTotalBytesTransferred; ///< @brief Total audio and video bytes transferred
|
|
ULWord acStartSample; ///< @brief The actual start sample when this frame was started in VBI, which may be used to check sync against
|
|
///< acAudioInStartAddress (Play) or acAudioOutStartAddress (Record). In record it will always be equal,
|
|
///< but in playback if the clocks drift or the user supplies non aligned audio sizes, then this will
|
|
///< give the current difference from expected versus actual position. To be useful, playback audio must
|
|
///< be clocked in at the correct rate.
|
|
/**
|
|
@name Current (Active) Frame Information
|
|
**/
|
|
///@{
|
|
|
|
/**
|
|
@brief Intended for capture, this is a sequence of ::NTV2_RP188 values received from the device (in ::NTV2TCIndex order).
|
|
If empty, no timecodes will be transferred. This field is ignored if ::AUTOCIRCULATE_WITH_RP188 option is not set.
|
|
@note This field is owned by the SDK, which is responsible for allocating and/or freeing it.
|
|
Call FRAME_STAMP::GetInputTimeCodes or FRAME_STAMP::GetInputTimeCode to retrieve the timecodes stored in this field.
|
|
**/
|
|
NTV2_POINTER acTimeCodes;
|
|
LWord64 acCurrentTime; ///< @brief Current processor time, derived from the finest-grained counter available on the host OS.
|
|
///< Granularity can vary depending on the HAL. FRAME_STAMP::acAudioClockCurrentTime is the recommended time-stamp to use instead of this.
|
|
ULWord acCurrentFrame; ///< @brief Last vertical blank frame for this autocirculate channel (when CNTV2Card::AutoCirculateGetFrameStamp was called)
|
|
LWord64 acCurrentFrameTime; ///< @brief Vertical blank start of current frame
|
|
ULWord64 acAudioClockCurrentTime; ///< @brief Current time expressed as a count of 10MHz ticks, based on 48kHz clock (from register 28).
|
|
ULWord acCurrentAudioExpectedAddress; // FIXFIXFIX Document What is this?!
|
|
ULWord acCurrentAudioStartAddress; ///< @brief As set by play
|
|
ULWord acCurrentFieldCount; ///< @brief As found by ISR at Call Field0 or Field1 _currently_ being OUTPUT (when CNTV2Card::AutoCirculateGetFrameStamp was called)
|
|
ULWord acCurrentLineCount; ///< @brief At Call Line# _currently_ being OUTPUT (at the time of the IOCTL_NTV2_GET_FRAMESTAMP)
|
|
ULWord acCurrentReps; ///< @brief Contains validCount (Playout: on repeated frames, number of reps remaining; Record: drops on frame)
|
|
ULWord64 acCurrentUserCookie; ///< @brief The frame's AUTOCIRCULATE_TRANSFER::acInUserCookie value that was set when CNTV2Card::AutoCirculateTransfer was called.
|
|
/// This can tell clients which frame was on-air at the last VBI.
|
|
ULWord acFrame; ///< @brief Record/capture -- current frame number
|
|
NTV2_SHOULD_BE_DEPRECATED (NTV2_RP188 acRP188); ///< @brief Deprecated -- call FRAME_STAMP::GetInputTimeCode instead.
|
|
|
|
///@}
|
|
NTV2_TRAILER acTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs a default FRAME_STAMP structure.
|
|
**/
|
|
explicit FRAME_STAMP ();
|
|
|
|
/**
|
|
@brief Constructs me from another FRAME_STAMP.
|
|
@param[in] inObj Specifies the FRAME_STAMP to be copied.
|
|
**/
|
|
FRAME_STAMP (const FRAME_STAMP & inObj);
|
|
|
|
/**
|
|
@brief My destructor.
|
|
**/
|
|
~FRAME_STAMP ();
|
|
|
|
/**
|
|
@brief Sets my fields from the given FRAME_STAMP_STRUCT.
|
|
@param[in] inOldStruct Specifies the FRAME_STAMP_STRUCT that is to be copied into me.
|
|
**/
|
|
bool SetFrom (const FRAME_STAMP_STRUCT & inOldStruct);
|
|
|
|
/**
|
|
@brief Copies my fields into the given FRAME_STAMP_STRUCT.
|
|
@param[out] outOldStruct Specifies the FRAME_STAMP_STRUCT that is to be copied from me.
|
|
**/
|
|
bool CopyTo (FRAME_STAMP_STRUCT & outOldStruct) const;
|
|
|
|
/**
|
|
@brief Returns all RP188 timecodes associated with the frame in NTV2TCIndex order.
|
|
@param[out] outValues Receives the NTV2TimeCodeList that was transferred from the device.
|
|
An NTV2TCIndex enum value can be used to index into the list to fetch the desired timecode of interest.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetInputTimeCodes (NTV2TimeCodeList & outValues) const;
|
|
|
|
/**
|
|
@brief Returns only those timecodes from the frame that are associated with a given SDI input.
|
|
@param[out] outTimeCodes Receives the timecode values.
|
|
@param[in] inSDIInput Specifies the SDI input of interest, expressed as an ::NTV2Channel.
|
|
@param[in] inValidOnly Optionally specifies if only valid timecodes should be returned. Defaults to true.
|
|
Specify false to return all timecode values associated with the channel of interest,
|
|
even if they're not valid.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetInputTimeCodes (NTV2TimeCodes & outTimeCodes, const NTV2Channel inSDIInput, const bool inValidOnly = true) const;
|
|
|
|
/**
|
|
@brief Answers with a specific timecode captured in my acTimeCodes member.
|
|
@param[out] outTimeCode Receives the requested timecode value.
|
|
@param[in] inTCIndex Specifies which NTV2TCIndex to use. Defaults to NTV2_TCINDEX_SDI1.
|
|
@note Note that specifying an SDI input source that's not connected to the framestore associated with the
|
|
channel being AutoCirculated will likely result in a timecode that's not frame-accurate.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetInputTimeCode (NTV2_RP188 & outTimeCode, const NTV2TCIndex inTCIndex = NTV2_TCINDEX_SDI1) const;
|
|
|
|
/**
|
|
@brief Answers with the NTV2SDIInputStatus for the given SDI input spigot.
|
|
@param[out] outStatus Receives the NTV2SDIInputStatus for the given SDI input.
|
|
@param[in] inSDIInputIndex0 Specifies the zero-based index of the SDI input of interest.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetSDIInputStatus (NTV2SDIInputStatus & outStatus, const UWord inSDIInputIndex0 = 0) const;
|
|
|
|
/**
|
|
@brief Sets one of my input timecodes.
|
|
@param[in] inTCNdx Specifies which timecode (slot) to set.
|
|
@param[in] inTimecode Specifies the timecode data to write.
|
|
@return True if successful; otherwise false.
|
|
@note This function is provided for internal SDK use only.
|
|
**/
|
|
bool SetInputTimecode (const NTV2TCIndex inTCNdx, const NTV2_RP188 & inTimecode);
|
|
|
|
/**
|
|
@param[in] inRHS The FRAME_STAMP to be assigned (copied) into me.
|
|
@return A reference to me.
|
|
**/
|
|
FRAME_STAMP & operator = (const FRAME_STAMP & inRHS);
|
|
|
|
/**
|
|
@return A string containing the human-readable data for the given zero-based index value.
|
|
@param[in] inIndexNum A zero-based index number that specifies which member data value to return.
|
|
**/
|
|
std::string operator [] (const unsigned inIndexNum) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(acHeader,acTrailer)
|
|
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (FRAME_STAMP)
|
|
|
|
|
|
/**
|
|
@brief This object is embedded in the AUTOCIRCULATE_TRANSFER struct that's returned from the CNTV2Card::AutoCirculateTransfer function,
|
|
and contains status information about the transfer and the state of AutoCirculate.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (AUTOCIRCULATE_TRANSFER_STATUS) // AUTOCIRCULATE_TYPE_XFERSTATUS
|
|
NTV2_HEADER acHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
NTV2AutoCirculateState acState; ///< @brief Current AutoCirculate state after the transfer
|
|
LWord acTransferFrame; ///< @brief Frame buffer number the frame was transferred to/from. (-1 if failed)
|
|
ULWord acBufferLevel; ///< @brief The number of frames ready to record/play after the transfer.
|
|
ULWord acFramesProcessed; ///< @brief Total number of frames successfully processed since AutoCirculateStart.
|
|
ULWord acFramesDropped; ///< @brief Total number of frames dropped since AutoCirculateStart.
|
|
FRAME_STAMP acFrameStamp; ///< @brief Frame stamp for the transferred frame.
|
|
ULWord acAudioTransferSize; ///< @brief Number of bytes captured into the audio buffer.
|
|
ULWord acAudioStartSample; ///< @brief Starting audio sample (valid for capture only).
|
|
ULWord acAncTransferSize; ///< @brief Total ancillary data bytes for field 1 transferred (capture only).
|
|
ULWord acAncField2TransferSize;///< @brief Total ancillary data bytes for field 2 transferred (capture only).
|
|
NTV2_TRAILER acTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs a default AUTOCIRCULATE_TRANSFER_STATUS structure.
|
|
**/
|
|
explicit AUTOCIRCULATE_TRANSFER_STATUS ();
|
|
|
|
/**
|
|
@return My FRAME_STAMP member.
|
|
**/
|
|
inline const FRAME_STAMP & GetFrameStamp (void) const {return acFrameStamp;}
|
|
|
|
/**
|
|
@return The frame buffer number the frame was transferred to or from (or -1 if the transfer failed).
|
|
**/
|
|
inline LWord GetTransferFrame (void) const {return acTransferFrame;}
|
|
|
|
/**
|
|
@return My state after the transfer.
|
|
**/
|
|
inline NTV2AutoCirculateState GetState (void) const {return acState;}
|
|
|
|
/**
|
|
@return My buffer level after the transfer.
|
|
**/
|
|
inline ULWord GetBufferLevel (void) const {return acBufferLevel;}
|
|
|
|
/**
|
|
@return The total number of frames successfully processed (not dropped) since AutoCirculateStart called.
|
|
**/
|
|
inline ULWord GetProcessedFrameCount (void) const {return acFramesProcessed;}
|
|
|
|
/**
|
|
@return The total number of frames dropped since AutoCirculateStart called.
|
|
**/
|
|
inline ULWord GetDroppedFrameCount (void) const {return acFramesDropped;}
|
|
|
|
/**
|
|
@return The number of audio bytes deposited/transferred into the host audio buffer after
|
|
the last successful CNTV2Card::AutoCirculateTransfer.
|
|
**/
|
|
inline ULWord GetCapturedAudioByteCount (void) const {return acAudioTransferSize;}
|
|
|
|
/**
|
|
@return The number of ancillary data bytes deposited/transferred into the host anc buffer after
|
|
the last successful CNTV2Card::AutoCirculateTransfer.
|
|
@param[in] inField2 Specify \c true for Field 2; otherwise \c false (the default) for Field 1 (or progessive).
|
|
**/
|
|
inline ULWord GetCapturedAncByteCount (const bool inField2 = false) const {return inField2 ? acAncField2TransferSize : acAncTransferSize;}
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(acHeader,acTrailer)
|
|
|
|
NTV2_BEGIN_PRIVATE
|
|
inline explicit AUTOCIRCULATE_TRANSFER_STATUS (const AUTOCIRCULATE_TRANSFER_STATUS & inObj) : acHeader(0xFEFEFEFE, 0) {(void) inObj;} ///< @brief You cannot construct an AUTOCIRCULATE_TRANSFER_STATUS from another.
|
|
inline AUTOCIRCULATE_TRANSFER_STATUS & operator = (const AUTOCIRCULATE_TRANSFER_STATUS & inRHS) {(void) inRHS; return *this;} ///< @brief You cannot assign AUTOCIRCULATE_TRANSFER_STATUSs.
|
|
NTV2_END_PRIVATE
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (AUTOCIRCULATE_TRANSFER_STATUS)
|
|
|
|
|
|
/**
|
|
@brief This object specifies the information that will be transferred to or from the AJA device in the CNTV2Card::AutoCirculateTransfer
|
|
function call. It will be used by the device driver only if the AUTOCIRCULATE_WITH_ANC option was used in the call to
|
|
CNTV2Card::AutoCirculateInitForInput or CNTV2Card::AutoCirculateInitForOutput.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (AUTOCIRCULATE_TRANSFER)
|
|
NTV2_HEADER acHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
|
|
/**
|
|
@brief The host video buffer. This field is owned by the client application, and thus is responsible for allocating and/or freeing it.
|
|
If the pointer is NULL or the size is zero, no video will be transferred. AJA recommends keeping this buffer 64-bit aligned
|
|
and page-aligned for best performance. Use the AUTOCIRCULATE_TRANSFER::SetVideoBuffer method to set or reset this field.
|
|
**/
|
|
NTV2_POINTER acVideoBuffer;
|
|
|
|
/**
|
|
@brief The host audio buffer. This field is owned by the client application, and thus is responsible for allocating and/or freeing it.
|
|
If the pointer is NULL or the size is zero, no audio will be transferred. AJA recommends keeping this buffer 64-bit aligned
|
|
and page-aligned for best performance. Use the AUTOCIRCULATE_TRANSFER::SetAudioBuffer method to set or reset this field.
|
|
**/
|
|
NTV2_POINTER acAudioBuffer;
|
|
|
|
/**
|
|
@brief The host ancillary data buffer. This field is owned by the client application, and thus is responsible for allocating and/or
|
|
freeing it. If the pointer is NULL or the size is zero, no ancillary data will be transferred.
|
|
Use the AUTOCIRCULATE_TRANSFER::SetAncBuffers method to set or reset this field.
|
|
@note If non-empty (i.e., non-NULL), be sure that the pointer address is aligned to the nearest 8-byte boundary. AJA recommends
|
|
using a full 2048-byte buffer. For playout, its content should be compatible with what's documented in \ref ancillarydata
|
|
and all subsequent bytes in the buffer should be zero. For capture, AJA recommends clearing (zeroing) the buffer prior to
|
|
each transfer.
|
|
**/
|
|
NTV2_POINTER acANCBuffer;
|
|
|
|
/**
|
|
@brief The host "Field 2" ancillary data buffer. This field is owned by the client application, and thus is responsible for allocating
|
|
and/or freeing it. If the pointer is NULL or the size is zero, no "Field 2" ancillary data will be transferred.
|
|
Use the AUTOCIRCULATE_TRANSFER::SetAncBuffers method to set or reset this field.
|
|
@note If non-empty (i.e., non-NULL), be sure that the pointer address is aligned to the nearest 8-byte boundary. AJA recommends
|
|
using a full 2048-byte buffer. For playout, its content should be compatible with what's documented in \ref ancillarydata
|
|
and all subsequent bytes in the buffer should be zero. For capture, AJA recommends clearing (zeroing) the buffer prior to
|
|
each transfer.
|
|
**/
|
|
NTV2_POINTER acANCField2Buffer;
|
|
|
|
/**
|
|
@brief Intended for playout, this is an ordered sequence of NTV2_RP188 values to send to the device. If empty, no timecodes will
|
|
be transferred. This field is ignored if AUTOCIRCULATE_WITH_RP188 option is not set.
|
|
@note This field is owned by the SDK, which is responsible for allocating and/or freeing it.
|
|
Use my AUTOCIRCULATE_TRANSFER::SetOutputTimeCodes or AUTOCIRCULATE_TRANSFER::SetOutputTimeCode methods to change this field.
|
|
**/
|
|
NTV2_POINTER acOutputTimeCodes;
|
|
|
|
/**
|
|
@brief Contains status information that's valid after CNTV2Card::AutoCirculateTransfer returns, including the driver buffer level, number of
|
|
frames processed or dropped, audio and anc transfer byte counts, and a complete FRAME_STAMP that has even more detailed
|
|
clocking information.
|
|
**/
|
|
AUTOCIRCULATE_TRANSFER_STATUS acTransferStatus;
|
|
|
|
/**
|
|
@brief Intended for playout, an optional app-specific cookie value that tags this frame, such that if this same tag appears in
|
|
acTransferStatus.acFrameStamp.acCurrentUserCookie after AutoCirculateTransfer returns, or if it appears in the FRAME_STAMP's
|
|
acCurrentUserCookie field after CNTV2Card::AutoCirculateGetFrameStamp returns, identifies when the frame was on-the-air.
|
|
**/
|
|
ULWord64 acInUserCookie;
|
|
|
|
/**
|
|
@brief Optional byte offset into the device frame buffer. Defaults to zero. If non-zero, should be a multiple of the line length,
|
|
or else bad video will likely result. On capture, this specifies where the first byte in the device video buffer will be
|
|
read from (and that byte will end up in the first byte position in the host video buffer. Conversely, on playout, this
|
|
specifies where the first byte from the host video buffer will end up in the device video buffer.
|
|
**/
|
|
ULWord acInVideoDMAOffset;
|
|
|
|
NTV2SegmentedDMAInfo acInSegmentedDMAInfo; ///< @brief Optional segmented DMA info, for use with specialized data transfers.
|
|
NTV2ColorCorrectionData acColorCorrection; ///< @brief Color correction data. This field is ignored if AUTOCIRCULATE_WITH_COLORCORRECT option is not set.
|
|
NTV2FrameBufferFormat acFrameBufferFormat; ///< @brief Specifies the frame buffer format to change to. Ignored if AUTOCIRCULATE_WITH_FBFCHANGE option is not set.
|
|
NTV2VideoFrameBufferOrientation acFrameBufferOrientation; ///< @brief Specifies the frame buffer orientation to change to. Ignored if AUTOCIRCULATE_WITH_FBOCHANGE option is not set.
|
|
AutoCircVidProcInfo acVidProcInfo; ///< @brief Specifies the mixer/keyer transition to make. Ignored if AUTOCIRCULATE_WITH_VIDPROC option is not set.
|
|
NTV2QuarterSizeExpandMode acVideoQuarterSizeExpand; ///< @brief Turns on the "quarter-size expand" (2x H + 2x V) hardware. Defaults to off (1:1).
|
|
|
|
NTV2_POINTER acHDMIAuxData;
|
|
|
|
/**
|
|
@name Lesser-used and Deprecated Members
|
|
**/
|
|
///@{
|
|
ULWord acPeerToPeerFlags; //// @brief Used to control P2P transfers.
|
|
ULWord acFrameRepeatCount; ///< @brief Intended for playout. The number of times to repeat the frame being transferred.
|
|
LWord acDesiredFrame; ///< @brief Used to specify a different frame in the circulate ring to transfer to/from.
|
|
NTV2_SHOULD_BE_DEPRECATED(NTV2_RP188 acRP188); ///< @brief Will be deprecated -- use AUTOCIRCULATE_TRANSFER::SetOutputTimeCode instead.
|
|
NTV2_SHOULD_BE_DEPRECATED(NTV2Crosspoint acCrosspoint); ///< @brief Will be deprecated -- used internally by the SDK. Will be removed when the driver changes to use NTV2Channel/NTV2Mode.
|
|
///@}
|
|
NTV2_TRAILER acTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@name Construction & Destruction
|
|
**/
|
|
///@{
|
|
explicit AUTOCIRCULATE_TRANSFER (); ///< @brief Constructs a default AUTOCIRCULATE_TRANSFER struct.
|
|
~AUTOCIRCULATE_TRANSFER (); ///< @brief My default destructor, which frees all allocatable fields that I own.
|
|
|
|
/**
|
|
@brief Constructs an AUTOCIRCULATE_TRANSFER object to use in a CNTV2Card::AutoCirculateTransfer call.
|
|
@param pInVideoBuffer Specifies a pointer to the host video buffer. On capture, this buffer will be written during the DMA operation.
|
|
On playout, this buffer will be read during the DMA operation. If NULL, no video will be transferred.
|
|
@param inVideoByteCount On capture, specifies the maximum capacity of the host video buffer, in bytes.
|
|
On playout, specifies the number of video bytes to transfer from the host buffer.
|
|
If zero, no video will be transferred.
|
|
@param pInAudioBuffer Optionally specifies a pointer to the host audio buffer. On capture, audio data will be DMA'd to this buffer.
|
|
On playout, audio data will be read from this buffer. If NULL, no audio will be transferred.
|
|
Defaults to NULL.
|
|
@param inAudioByteCount Optionally specifies the maximum capacity of the host audio buffer, in bytes. If zero, no audio will be transferred.
|
|
Defaults to zero.
|
|
@param pInANCBuffer Optionally specifies a pointer to the host ancillary data buffer. On capture, ancillary data will be DMA'd into this buffer.
|
|
On playout, ancillary data will be read from this buffer. If NULL, no Field 1 ancillary data will be transferred.
|
|
Defaults to NULL.
|
|
@param inANCByteCount Optionally specifies the maximum capacity of the Field 1 host ancillary data buffer, in bytes.
|
|
If zero, no ancillary data (progressive or interlaced F1) will be transferred. Defaults to zero.
|
|
@param pInANCF2Buffer Optionally specifies a pointer to the Field 2 host ancillary data buffer. On capture, ancillary data will be DMA'd into this buffer.
|
|
On playout, ancillary data will be read from this buffer. If NULL, no ancillary data will be transferred.
|
|
Defaults to NULL.
|
|
@param inANCF2ByteCount Optionally specifies the maximum capacity of the Field 2 host ancillary data buffer, in bytes.
|
|
If zero, no ancillary data (interlaced F2) will be transferred. Defaults to zero.
|
|
**/
|
|
explicit AUTOCIRCULATE_TRANSFER (ULWord * pInVideoBuffer, const ULWord inVideoByteCount, ULWord * pInAudioBuffer = AJA_NULL,
|
|
const ULWord inAudioByteCount = 0, ULWord * pInANCBuffer = AJA_NULL, const ULWord inANCByteCount = 0,
|
|
ULWord * pInANCF2Buffer = AJA_NULL, const ULWord inANCF2ByteCount = 0);
|
|
/**
|
|
@brief Resets the struct to its initialized state, with timecode capture disabled, freeing all buffers that were allocated by the SDK.
|
|
(Buffers set by the client application are zeroed but not freed.)
|
|
**/
|
|
void Clear (void);
|
|
|
|
NTV2_BEGIN_PRIVATE
|
|
inline explicit AUTOCIRCULATE_TRANSFER (const AUTOCIRCULATE_TRANSFER & inObj)
|
|
: acHeader(0xFEFEFEFE, 0), acVideoBuffer(0), acAudioBuffer(0),
|
|
acANCBuffer(0), acANCField2Buffer(0), acOutputTimeCodes(0), acHDMIAuxData(0)
|
|
{(void) inObj;} ///< @brief You cannot construct an AUTOCIRCULATE_TRANSFER from another.
|
|
inline AUTOCIRCULATE_TRANSFER & operator = (const AUTOCIRCULATE_TRANSFER & inRHS) {(void) inRHS; return *this;} ///< @brief You cannot assign AUTOCIRCULATE_TRANSFERs.
|
|
NTV2_END_PRIVATE
|
|
///@}
|
|
|
|
/**
|
|
@name Buffer Management
|
|
**/
|
|
///@{
|
|
/**
|
|
@brief Sets my buffers for use in a subsequent call to CNTV2Card::AutoCirculateTransfer.
|
|
@param pInVideoBuffer Specifies a pointer to the host video buffer. On capture, this buffer will be written during the DMA operation.
|
|
On playout, this buffer will be read during the DMA operation. If NULL, no video will be transferred.
|
|
@param inVideoByteCount On capture, specifies the maximum capacity of the host video buffer, in bytes.
|
|
On playout, specifies the number of video bytes to transfer from the host buffer.
|
|
If zero, no video will be transferred.
|
|
@param pInAudioBuffer Specifies a pointer to the host audio buffer. On capture, audio data will be DMA'd to this buffer.
|
|
On playout, audio data will be read from this buffer. If NULL, no audio will be transferred.
|
|
@param inAudioByteCount On capture, specifies the maximum capacity of the host audio buffer, in bytes.
|
|
On playout, specifies the number of audio bytes (and therefore audio samples) to transfer from the host buffer.
|
|
If zero, no audio will be transferred.
|
|
@param pInANCBuffer Specifies a pointer to the host ancillary data buffer. On capture, ancillary data will be DMA'd into this buffer.
|
|
On playout, ancillary data will be read from this buffer. If NULL, no ancillary data will be transferred.
|
|
@param inANCByteCount On capture, specifies the maximum capacity of the host ancillary data buffer, in bytes. After the transfer,
|
|
it will contain the actual number of bytes transferred.
|
|
On playout, specifies the number of ancillary data bytes to transfer from the host buffer.
|
|
If zero, no ancillary data will be transferred.
|
|
@param pInANCF2Buffer Optionally specifies a pointer to the Field 2 host ancillary data buffer. On capture, ancillary data for Field 2
|
|
(interlaced video formats only) will be DMA'd into this buffer.
|
|
On playout, ancillary data for Field 2 (interlaced video formats only) will be read from this buffer.
|
|
If NULL, no Field 2 ancillary data will be transferred. Defaults to NULL.
|
|
@param inANCF2ByteCount Optionally specifies the maximum capacity of the Field 2 host ancillary data buffer, in bytes.
|
|
If zero, no ancillary data (interlaced F2) will be transferred. Defaults to zero.
|
|
**/
|
|
bool SetBuffers (ULWord * pInVideoBuffer, const ULWord inVideoByteCount,
|
|
ULWord * pInAudioBuffer, const ULWord inAudioByteCount,
|
|
ULWord * pInANCBuffer, const ULWord inANCByteCount,
|
|
ULWord * pInANCF2Buffer = AJA_NULL, const ULWord inANCF2ByteCount = 0);
|
|
|
|
/**
|
|
@brief Sets my video buffer for use in a subsequent call to CNTV2Card::AutoCirculateTransfer.
|
|
@param pInVideoBuffer Specifies a pointer to the host video buffer. On capture, this buffer will be written during the DMA operation.
|
|
On playout, this buffer will be read during the DMA operation. If NULL, no video data will be transferred.
|
|
@param inVideoByteCount Specifies the maximum capacity of the host video buffer, in bytes, or the maximum number of video data bytes to transfer.
|
|
If zero, no video data will be transferred.
|
|
@return True if successful; otherwise false.
|
|
@note Having the \c pInAudioBuffer address start on at least an 8-byte boundary or even better, on a page boundary,
|
|
and the \c inAudioByteCount be a multiple of 8-bytes (or optimally a multiple of a page) increases PCIe DMA
|
|
efficiency on most modern operating systems.
|
|
**/
|
|
bool SetVideoBuffer (ULWord * pInVideoBuffer, const ULWord inVideoByteCount);
|
|
|
|
/**
|
|
@brief Sets my audio buffer for use in a subsequent call to CNTV2Card::AutoCirculateTransfer.
|
|
@param pInAudioBuffer Specifies a pointer to the host audio buffer. On capture, audio data will be DMA'd into this buffer.
|
|
On playout, audio data will be DMA'd from this buffer. If NULL, no audio data will be transferred.
|
|
@param inAudioByteCount On capture, specifies the maximum capacity of the host audio buffer, in bytes; on playout, specifies
|
|
the number of audio bytes (and therefore audio samples) to transfer. If zero, no audio data will be transferred.
|
|
@return True if successful; otherwise false.
|
|
@note Having the \c pInAudioBuffer address start on at least an 8-byte boundary or even better, on a page boundary, increases PCIe
|
|
DMA efficiency on most modern operating systems.
|
|
**/
|
|
bool SetAudioBuffer (ULWord * pInAudioBuffer, const ULWord inAudioByteCount);
|
|
|
|
/**
|
|
@brief Sets my ancillary data buffers for use in a subsequent call to CNTV2Card::AutoCirculateTransfer.
|
|
@param pInANCBuffer Specifies a pointer to the host ancillary data buffer. On capture, ancillary data will be DMA'd into this buffer.
|
|
On playout, ancillary data will be read from this buffer. If NULL, no ancillary data will be transferred.
|
|
@param inANCByteCount On capture, specifies the maximum capacity of the host ancillary data buffer, in bytes. After the transfer,
|
|
it will contain the actual number of bytes transferred.
|
|
On playout, specifies the number of ancillary data bytes to transfer from the host buffer.
|
|
If zero, no ancillary data will be transferred.
|
|
@param pInANCF2Buffer Optionally specifies a pointer to the Field 2 host ancillary data buffer. On capture, ancillary data for Field 2
|
|
(interlaced video formats only) will be DMA'd into this buffer.
|
|
On playout, ancillary data for Field 2 (interlaced video formats only) will be read from this buffer.
|
|
If NULL, no Field 2 ancillary data will be transferred. Defaults to NULL.
|
|
@param inANCF2ByteCount Optionally specifies the maximum capacity of the Field 2 host ancillary data buffer, in bytes, or the maximum
|
|
number of Field 2 ancillary data bytes to transfer. If zero, no F2 ancillary data will be transferred.
|
|
Defaults to zero.
|
|
@note If using a non-NULL pointer address for either \c pInANCBuffer or \c pInANCF2Buffer, be sure they're aligned to the nearest 8-byte boundary.
|
|
@note If using a non-zero byte count, AJA recommends using a 2048-byte buffer (per field). There's no need to fill the entire buffer,
|
|
but the data it contains should be compatible with what's documented in \ref anccapture or \ref ancplayout (as appropriate).
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool SetAncBuffers (ULWord * pInANCBuffer, const ULWord inANCByteCount,
|
|
ULWord * pInANCF2Buffer = AJA_NULL, const ULWord inANCF2ByteCount = 0);
|
|
/**
|
|
@return My video buffer.
|
|
**/
|
|
inline const NTV2_POINTER & GetVideoBuffer (void) const {return acVideoBuffer;}
|
|
|
|
/**
|
|
@return My audio buffer.
|
|
**/
|
|
inline const NTV2_POINTER & GetAudioBuffer (void) const {return acAudioBuffer;}
|
|
|
|
/**
|
|
@param[in] inField2 Specify true for Field2. Defaults to false (Field1).
|
|
@return My ancillary data buffer.
|
|
**/
|
|
inline const NTV2_POINTER & GetAncBuffer (const bool inField2 = false) const {return inField2 ? acANCField2Buffer : acANCBuffer;}
|
|
///@}
|
|
|
|
/**
|
|
@name Timecode
|
|
**/
|
|
///@{
|
|
|
|
/**
|
|
@brief Intended for playout, replaces the contents of my acOutputTimeCodes member.
|
|
@param[in] inValues Specifies the NTV2TimeCodes map to transfer to the device.
|
|
@return True if successful; otherwise false.
|
|
@note The NTV2TimeCodes map should be populated only with timecodes that make sense for the AutoCirculate
|
|
channel that's in use, otherwise the timecode output of other channels may be affected.
|
|
@note To work right, CNTV2Card::AutoCirculateInitForOutput must have been initialized with the AUTOCIRCULATE_WITH_RP188 option.
|
|
**/
|
|
bool SetOutputTimeCodes (const NTV2TimeCodes & inValues);
|
|
|
|
/**
|
|
@brief Intended for playout, sets one element of my acOutputTimeCodes member.
|
|
@param[in] inTimecode Specifies the timecode value.
|
|
@param[in] inTCIndex Specifies which NTV2TCIndex to use. Defaults to NTV2_TCINDEX_SDI1.
|
|
@note Note that specifying an SDI output destination that's not connected to the framestore associated with the
|
|
channel being AutoCirculated can result in the wrong timecode being transmitted from another AutoCirculate
|
|
channel's SDI output(s).
|
|
@note To work right, CNTV2Card::AutoCirculateInitForOutput must have been initialized with the AUTOCIRCULATE_WITH_RP188 option.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool SetOutputTimeCode (const NTV2_RP188 & inTimecode, const NTV2TCIndex inTCIndex = NTV2_TCINDEX_SDI1);
|
|
|
|
/**
|
|
@brief Intended for playout, replaces all elements of my acOutputTimeCodes member with the given timecode value.
|
|
@param[in] inTimecode Specifies the timecode value to use for all possible embedded (VITC, ATC-LTC) and analog timecode outputs for the device.
|
|
@param[in] inIncludeF2 Specify true to include Field2 timecode values (VITC2), or false to exclude them. Defaults to true.
|
|
@note Note that specifying an SDI output destination that's not connected to the framestore associated with the
|
|
AutoCirculate channel can result in the wrong timecode being transmitted from another channel's SDI output(s).
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool SetAllOutputTimeCodes (const NTV2_RP188 & inTimecode, const bool inIncludeF2 = true);
|
|
|
|
/**
|
|
@brief Intended for capture, answers with the timecodes captured in my acTransferStatus member's acFrameStamp member.
|
|
@param[out] outValues Receives the NTV2TimeCodeList that was transferred from the device.
|
|
(An NTV2TCIndex value can be used as in index in the list.)
|
|
@return True if successful; otherwise false.
|
|
@note To work right, CNTV2Card::AutoCirculateInitForInput must have been initialized with the AUTOCIRCULATE_WITH_RP188 option.
|
|
**/
|
|
bool GetInputTimeCodes (NTV2TimeCodeList & outValues) const;
|
|
|
|
/**
|
|
@brief Intended for capture, answers with a specific timecode captured in my acTransferStatus member's
|
|
acFrameStamp member's acTimeCodes member.
|
|
@param[out] outTimeCode Receives the requested timecode value.
|
|
@param[in] inTCIndex Specifies which NTV2TCIndex to use. Defaults to NTV2_TCINDEX_SDI1.
|
|
@note Note that specifying an SDI input source that's not connected to the framestore associated with the
|
|
channel being AutoCirculated will likely result in a timecode that's not frame-accurate.
|
|
@note To work right, CNTV2Card::AutoCirculateInitForInput must have been initialized with the AUTOCIRCULATE_WITH_RP188 option.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetInputTimeCode (NTV2_RP188 & outTimeCode, const NTV2TCIndex inTCIndex = NTV2_TCINDEX_SDI1) const;
|
|
|
|
/**
|
|
@brief Retrieves the timecodes from the captured frame that are associated with the given SDI input.
|
|
@param[out] outTimeCodes Receives the timecode values as a mapping of ::NTV2TCIndex values to ::NTV2_RP188 objects.
|
|
@param[in] inSDIInput Specifies the SDI input of interest as an ::NTV2Channel. Defaults to ::NTV2_CHANNEL1 (SDI In 1).
|
|
@param[in] inValidOnly Optionally specifies if only valid timecodes should be returned. Defaults to true.
|
|
Specify false to return all timecode values associated with the SDI input of interest,
|
|
even if they're not valid.
|
|
@note Note that specifying an SDI input source that's not connected to the framestore associated with the
|
|
channel being AutoCirculated will likely result in a timecode that's not frame-accurate.
|
|
@note To work right, CNTV2Card::AutoCirculateInitForInput must have been initialized with the AUTOCIRCULATE_WITH_RP188 option.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool GetInputTimeCodes (NTV2TimeCodes & outTimeCodes, const NTV2Channel inSDIInput = NTV2_CHANNEL1, const bool inValidOnly = true) const;
|
|
///@}
|
|
|
|
/**
|
|
@name Miscellaneous
|
|
**/
|
|
///@{
|
|
|
|
/**
|
|
@brief Intended for playout, replaces my current acUserCookie value with the new value.
|
|
@param[in] inUserCookie Specifies the new cookie value.
|
|
@return True if successful; otherwise false.
|
|
@note This is useful in playout applications that need to know when a specific frame was actually transmitted on-air.
|
|
By calling this method with a unique tag (or application-specific pointer address), and monitoring the FRAME_STAMP
|
|
after calling CNTV2Card::AutoCirculateTransfer or CNTV2Card::AutoCirculateGetFrameStamp, you can tell if/when the
|
|
frame went on-the-air.
|
|
**/
|
|
inline bool SetFrameUserCookie (const ULWord64 & inUserCookie) {acInUserCookie = inUserCookie; return true;}
|
|
|
|
/**
|
|
@brief Sets my acFrameBufferFormat value to the given new value (if valid and circulating with AUTOCIRCULATE_WITH_FBFCHANGE option).
|
|
@param[in] inNewFormat Specifies the new frame buffer format value to change to. Must be a valid format for the device.
|
|
@return True if successful; otherwise false.
|
|
@note This function call is ignored if CNTV2Card::AutoCirculateInitForInput or CNTV2Card::AutoCirculateInitForOutput were
|
|
called without the AUTOCIRCULATE_WITH_FBFCHANGE option set.
|
|
**/
|
|
bool SetFrameBufferFormat (const NTV2FrameBufferFormat inNewFormat);
|
|
|
|
/**
|
|
@brief Enables quarter-size expansion mode.
|
|
**/
|
|
inline void EnableQuarterSizeExpandMode (void) {acVideoQuarterSizeExpand = NTV2_QuarterSizeExpandOn;}
|
|
|
|
/**
|
|
@brief Enables quarter-size expansion mode.
|
|
**/
|
|
inline void DisableQuarterSizeExpandMode (void) {acVideoQuarterSizeExpand = NTV2_QuarterSizeExpandOff;}
|
|
|
|
/**
|
|
@return True if quarter-size expansion mode is enabled.
|
|
**/
|
|
inline bool IsQuarterSizeExpandModeEnabled (void) const {return acVideoQuarterSizeExpand == NTV2_QuarterSizeExpandOn;}
|
|
|
|
/**
|
|
@brief Returns a constant reference to my AUTOCIRCULATE_TRANSFER_STATUS.
|
|
@return A constant reference to my AUTOCIRCULATE_TRANSFER_STATUS.
|
|
**/
|
|
inline const AUTOCIRCULATE_TRANSFER_STATUS & GetTransferStatus (void) const {return acTransferStatus;}
|
|
|
|
/**
|
|
@brief Returns a constant reference to my FRAME_STAMP.
|
|
@return A constant reference to my FRAME_STAMP.
|
|
**/
|
|
inline const FRAME_STAMP & GetFrameInfo (void) const {return acTransferStatus.acFrameStamp;}
|
|
|
|
/**
|
|
@return The number of audio bytes deposited/transferred into the host audio buffer after
|
|
the last successful CNTV2Card::AutoCirculateTransfer.
|
|
**/
|
|
inline ULWord GetCapturedAudioByteCount (void) const {return acTransferStatus.GetCapturedAudioByteCount();}
|
|
|
|
inline NTV2_DEPRECATED_f(ULWord GetAudioByteCount (void) const) {return GetCapturedAudioByteCount ();} ///< @deprecated Use GetCapturedAudioByteCount instead.
|
|
|
|
/**
|
|
@return The number of ancillary data bytes deposited/transferred into the host anc buffer after
|
|
the last successful CNTV2Card::AutoCirculateTransfer.
|
|
@param[in] inField2 Specify true to obtain the Field 2 ancillary byte count.
|
|
Specify false (the default) to return the Field 1 (or progessive) ancillary byte count.
|
|
**/
|
|
inline ULWord GetCapturedAncByteCount (const bool inField2 = false) const {return acTransferStatus.GetCapturedAncByteCount(inField2);}
|
|
inline NTV2_SHOULD_BE_DEPRECATED(ULWord GetAncByteCount (const bool inField2 = false) const) {return GetCapturedAncByteCount(inField2);} ///< @deprecated Use GetCapturedAncByteCount instead.
|
|
|
|
/**
|
|
@return My current frame buffer format.
|
|
**/
|
|
inline NTV2FrameBufferFormat GetFrameBufferFormat (void) const {return acFrameBufferFormat;}
|
|
|
|
/**
|
|
@return The frame number that was transferred (or -1 if failed).
|
|
**/
|
|
inline LWord GetTransferFrameNumber (void) const {return acTransferStatus.GetTransferFrame();}
|
|
///@}
|
|
|
|
/**
|
|
@name Segmented DMAs
|
|
**/
|
|
///@{
|
|
/**
|
|
@brief Enables segmented DMAs given a segment count, a host pitch, and device pitch value.
|
|
@param[in] inNumSegments Specifies the number of segments (lines) to DMA. If zero or 1, this actually disables segmented DMAs,
|
|
and the remaining parameters are ignored.
|
|
@param[in] inNumActiveBytesPerLine Specifies the number of active bytes in a line of video.
|
|
@param[in] inHostBytesPerLine Specifies the offset, in bytes, between two adjacent segments on the host.
|
|
@param[in] inDeviceBytesPerLine Specifies the offset, in bytes, between two adjacent segments on the device.
|
|
@return True if successful; otherwise false.
|
|
@note IMPORTANT: For segmented DMAs, the AUTOCIRCULATE_TRANSFER::acVideoBuffer.fByteCount field holds the segment byte count (i.e.,
|
|
the number of bytes to transfer per segment.
|
|
@todo Add a new \c inNumBytesPerSegment parameter to eliminate the necessity of setting AUTOCIRCULATE_TRANSFER::acVideoBuffer.fByteCount
|
|
to store the bytes-per-segment value.
|
|
**/
|
|
bool EnableSegmentedDMAs (const ULWord inNumSegments, const ULWord inNumActiveBytesPerLine,
|
|
const ULWord inHostBytesPerLine, const ULWord inDeviceBytesPerLine);
|
|
/**
|
|
@brief Disables segmented DMAs, performing a Reset on my acInSegmentedDMAInfo.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool DisableSegmentedDMAs (void);
|
|
|
|
/**
|
|
@return True if segmented DMAs are currently enabled; otherwise false.
|
|
**/
|
|
bool SegmentedDMAsEnabled (void) const;
|
|
///@}
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(acHeader,acTrailer)
|
|
#endif // user-space clients only
|
|
NTV2_STRUCT_END (AUTOCIRCULATE_TRANSFER)
|
|
|
|
|
|
/**
|
|
@brief This is used to enable or disable AJADebug logging in the driver.
|
|
@note This struct uses a constructor to properly initialize itself. Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2DebugLogging)
|
|
NTV2_HEADER mHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
NTV2_POINTER mSharedMemory; ///< @brief Virtual address of AJADebug shared memory in calling process' context,
|
|
// and its length. The AJADebug logging facility owns and manages this memory.
|
|
// If NULL or zero length, debug logging will be disabled in the driver.
|
|
// If non-NULL and zero length, debug logging will be enabled in the driver.
|
|
ULWord mReserved[32]; ///< @brief Reserved for future expansion.
|
|
NTV2_TRAILER mTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@brief Constructs an NTV2DebugLogging struct.
|
|
@param[in] inEnable False to disable (the default), or True to enable.
|
|
**/
|
|
explicit NTV2DebugLogging (const bool inEnable = false);
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me to the given output stream.
|
|
@param inOutStream Specifies the output stream to use.
|
|
@return A reference to the output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(mHeader, mTrailer)
|
|
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2DebugLogging)
|
|
|
|
|
|
/**
|
|
@brief This is used to prelock a video/audio/anc buffer used as the source or target of DMA transfers.
|
|
The driver will page-lock the buffer immediately, so it won't have to be done for each DMA transfer.
|
|
This will reduce transfer time and CPU overhead at the cost of locking physical memory.
|
|
@note This struct uses a constructor to properly initialize itself.
|
|
Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2BufferLock)
|
|
NTV2_HEADER mHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
NTV2_POINTER mBuffer; ///< @brief Virtual address of a buffer to prelock, and its length.
|
|
// A NULL buffer (or zero length) releases all locked buffers.
|
|
ULWord mFlags; ///< @brief Action flags (lock, unlock, etc)
|
|
ULWord64 mMaxLockSize; ///< @brief Max locked bytes.
|
|
ULWord mReserved[30]; ///< @brief Reserved for future expansion.
|
|
NTV2_TRAILER mTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@name Construction & Destruction
|
|
**/
|
|
///@{
|
|
explicit NTV2BufferLock (); ///< @brief Constructs a default NTV2BufferLock struct.
|
|
inline ~NTV2BufferLock () {} ///< @brief My default destructor, which frees all allocatable fields that I own.
|
|
|
|
/**
|
|
@brief Constructs an NTV2BufferLock object to use in a CNTV2Card::DMABufferLock call.
|
|
@param inBuffer Specifies the memory to be locked for DMA operations.
|
|
@param inFlags Specifies action flags (e.g. ::DMABUFFERLOCK_LOCK, etc.).
|
|
**/
|
|
explicit NTV2BufferLock (const NTV2_POINTER & inBuffer, const ULWord inFlags);
|
|
|
|
/**
|
|
@brief Constructs an NTV2BufferLock object to use in a CNTV2Card::DMABufferLock call.
|
|
@param pInBuffer Specifies a pointer to the host buffer. This buffer will be locked for DMA operations.
|
|
@param inByteCount Specifies a the length of the buffer to lock in bytes.
|
|
@param inFlags Specifies action flags (lock, unlock, etc)
|
|
**/
|
|
explicit NTV2BufferLock (const ULWord * pInBuffer, const ULWord inByteCount, const ULWord inFlags);
|
|
|
|
/**
|
|
@brief Constructs an NTV2BufferLock object to use in a CNTV2Card::DMABufferLock call.
|
|
@param inMaxLockSize Specifies the maximum lock size in bytes
|
|
@param inFlags Specifies action flags (lock, unlock, etc)
|
|
**/
|
|
explicit NTV2BufferLock (const ULWord64 inMaxLockSize, const ULWord inFlags); // New in SDK 16.0
|
|
///@}
|
|
|
|
/**
|
|
@name Changing
|
|
**/
|
|
///@{
|
|
/**
|
|
@brief Sets the buffer to lock for use in a subsequent call to CNTV2Card::DMABufferLock.
|
|
@param inBuffer Specifies the memory to be locked for DMA operations.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool SetBuffer (const NTV2_POINTER & inBuffer);
|
|
|
|
/**
|
|
@brief Sets the buffer to lock for use in a subsequent call to CNTV2Card::DMABufferLock.
|
|
@param pInBuffer Specifies a pointer to the host buffer. This buffer will be locked for DMA operations.
|
|
@param inByteCount Specifies a the length of the buffer to lock in bytes.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
inline bool SetBuffer (const ULWord * pInBuffer, const ULWord inByteCount)
|
|
{
|
|
return SetBuffer(NTV2_POINTER(pInBuffer, inByteCount));
|
|
}
|
|
|
|
/**
|
|
@brief Sets the action flags for use in a subsequent call to CNTV2Card::DMABufferLock.
|
|
@param inFlags Specifies action flags (lock, unlock, etc)
|
|
**/
|
|
inline void SetFlags (const ULWord inFlags) {NTV2_ASSERT_STRUCT_VALID; mFlags = inFlags;}
|
|
|
|
/**
|
|
@brief Sets the maximum lock size for use in a subsequent call to CNTV2Card::DMABufferLock.
|
|
@param inNumBytes Specifies maximum lock size, in bytes.
|
|
**/
|
|
inline void SetMaxLockSize (const ULWord64 inNumBytes) {NTV2_ASSERT_STRUCT_VALID; mMaxLockSize = inNumBytes;} // New in SDK 16.0
|
|
|
|
/**
|
|
@brief Resets the struct to its initialized state.
|
|
@note This does not release locked buffers.
|
|
**/
|
|
inline void Clear (void)
|
|
{
|
|
SetBuffer(NTV2_POINTER());
|
|
SetFlags(0);
|
|
SetMaxLockSize(0);
|
|
}
|
|
///@}
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me to the given output stream.
|
|
@param inOutStream Specifies the output stream to use.
|
|
@return A reference to the output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(mHeader, mTrailer)
|
|
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2BufferLock)
|
|
|
|
|
|
/**
|
|
@brief This is used for bitstream maintainance. (New in SDK 16.0)
|
|
@note This struct uses a constructor to properly initialize itself.
|
|
Do not use <b>memset</b> or <b>bzero</b> to initialize or "clear" it.
|
|
**/
|
|
NTV2_STRUCT_BEGIN (NTV2Bitstream)
|
|
NTV2_HEADER mHeader; ///< @brief The common structure header -- ALWAYS FIRST!
|
|
NTV2_POINTER mBuffer; ///< @brief Virtual address of a bitstream buffer and its length.
|
|
ULWord mFlags; ///< @brief Action flags (lock, unlock, etc)
|
|
ULWord mStatus; ///< @brief Action status
|
|
ULWord mRegisters[16]; ///< @brief Register data
|
|
ULWord mReserved[32]; ///< @brief Reserved for future expansion.
|
|
NTV2_TRAILER mTrailer; ///< @brief The common structure trailer -- ALWAYS LAST!
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
/**
|
|
@name Construction & Destruction
|
|
**/
|
|
///@{
|
|
explicit NTV2Bitstream (); ///< @brief Constructs a default NTV2Bitstream struct.
|
|
inline ~NTV2Bitstream () {} ///< @brief My default destructor, which frees all allocatable fields that I own.
|
|
|
|
/**
|
|
@brief Constructs an NTV2Bitstream object to use in a CNTV2Card::LoadBitstream call.
|
|
@param inBuffer Specifies the memory containing the bitstream to load.
|
|
@param inFlags Specifies action flags (fragment swap, etc.).
|
|
**/
|
|
explicit NTV2Bitstream (const NTV2_POINTER & inBuffer, const ULWord inFlags);
|
|
|
|
/**
|
|
@brief Constructs an NTV2Bitstream object to use in a CNTV2Card::LoadBitstream call.
|
|
@param pInBuffer Specifies a pointer to the host buffer containing the bitstream to load.
|
|
@param inByteCount Specifies a the length of the bitstream in bytes.
|
|
@param inFlags Specifies action flags (fragment, swap, etc)
|
|
**/
|
|
explicit NTV2Bitstream (const ULWord * pInBuffer, const ULWord inByteCount, const ULWord inFlags);
|
|
///@}
|
|
|
|
/**
|
|
@name Changing
|
|
**/
|
|
///@{
|
|
/**
|
|
@brief Sets the buffer to lock for use in a subsequent call to CNTV2Card::LoadBitstream.
|
|
@param inBuffer Specifies the memory containing the bitstream to load.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
bool SetBuffer (const NTV2_POINTER & inBuffer);
|
|
|
|
/**
|
|
@brief Sets the buffer to lock for use in a subsequent call to CNTV2Card::LoadBitstream.
|
|
@param pInBuffer Specifies a pointer to the host buffer contiaining the bitstread to load.
|
|
@param inByteCount Specifies a the length of the buffer to load in bytes.
|
|
@return True if successful; otherwise false.
|
|
**/
|
|
inline bool SetBuffer (const ULWord * pInBuffer, const ULWord inByteCount) {return SetBuffer(NTV2_POINTER(pInBuffer, inByteCount));}
|
|
|
|
/**
|
|
@brief Sets the action flags for use in a subsequent call to CNTV2Card::LoadBitstream.
|
|
@param inFlags Specifies action flags (fragment, swap, etc)
|
|
**/
|
|
inline void SetFlags (const ULWord inFlags) {NTV2_ASSERT_STRUCT_VALID; mFlags = inFlags;}
|
|
|
|
/**
|
|
@brief Resets the struct to its initialized state.
|
|
**/
|
|
inline void Clear (void) {SetBuffer(NTV2_POINTER());}
|
|
///@}
|
|
|
|
/**
|
|
@brief Prints a human-readable representation of me to the given output stream.
|
|
@param inOutStream Specifies the output stream to use.
|
|
@return A reference to the output stream.
|
|
**/
|
|
std::ostream & Print (std::ostream & inOutStream) const;
|
|
|
|
NTV2_IS_STRUCT_VALID_IMPL(mHeader, mTrailer)
|
|
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
NTV2_STRUCT_END (NTV2Bitstream)
|
|
|
|
|
|
#if !defined (NTV2_BUILDING_DRIVER)
|
|
typedef std::set <NTV2VideoFormat> NTV2VideoFormatSet; ///< @brief A set of distinct NTV2VideoFormat values.
|
|
typedef NTV2VideoFormatSet::const_iterator NTV2VideoFormatSetConstIter; ///< @brief A handy const iterator for iterating over an NTV2VideoFormatSet.
|
|
|
|
typedef std::set <NTV2FrameBufferFormat> NTV2FrameBufferFormatSet; ///< @brief A set of distinct NTV2FrameBufferFormat values.
|
|
typedef NTV2FrameBufferFormatSet::const_iterator NTV2FrameBufferFormatSetConstIter; ///< @brief A handy const iterator for iterating over an NTV2FrameBufferFormatSet.
|
|
|
|
typedef std::set <NTV2FrameGeometry> NTV2GeometrySet; ///< @brief A set of distinct NTV2FrameGeometry values.
|
|
typedef NTV2GeometrySet::const_iterator NTV2GeometrySetConstIter; ///< @brief A handy const iterator for iterating over an NTV2GeometrySet.
|
|
|
|
typedef std::set <NTV2Standard> NTV2StandardSet; ///< @brief A set of distinct NTV2Standard values.
|
|
typedef NTV2StandardSet::const_iterator NTV2StandardSetConstIter; ///< @brief A handy const iterator for iterating over an NTV2StandardSet.
|
|
|
|
typedef std::set <NTV2InputSource> NTV2InputSourceSet; ///< @brief A set of distinct NTV2InputSource values.
|
|
typedef NTV2InputSourceSet::const_iterator NTV2InputSourceSetConstIter; ///< @brief A handy const iterator for iterating over an NTV2InputSourceSet.
|
|
|
|
typedef std::set <NTV2OutputDestination> NTV2OutputDestinations; ///< @brief A set of distinct NTV2OutputDestination values.
|
|
typedef NTV2OutputDestinations::const_iterator NTV2OutputDestinationsConstIter; ///< @brief A handy const iterator for iterating over an NTV2OutputDestinations.
|
|
|
|
/**
|
|
@brief Prints the given ::UWordSequence contents into the given output stream.
|
|
@param inOutStream The stream into which the given ::UWordSequence will be printed.
|
|
@param[in] inData Specifies the ::UWordSequence to be streamed.
|
|
@return The "inOStream" that was specified.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const UWordSequence & inData);
|
|
|
|
/**
|
|
@brief Prints the given ::ULWordSequence contents into the given output stream.
|
|
@param inOutStream The stream into which the given ::ULWordSequence will be printed.
|
|
@param[in] inData Specifies the ::ULWordSequence to be streamed.
|
|
@return The "inOStream" that was specified.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const ULWordSequence & inData);
|
|
|
|
/**
|
|
@brief Prints the given ::ULWord64Sequence contents into the given output stream.
|
|
@param inOutStream The stream into which the given ::ULWord64Sequence will be printed.
|
|
@param[in] inData Specifies the ::ULWord64Sequence to be streamed.
|
|
@return The "inOStream" that was specified.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const ULWord64Sequence & inData);
|
|
|
|
/**
|
|
@return A string that contains the human-readable representation of the given ::NTV2AutoCirculateState value.
|
|
@param[in] inState Specifies the ::NTV2AutoCirculateState of interest.
|
|
**/
|
|
AJAExport std::string NTV2AutoCirculateStateToString (const NTV2AutoCirculateState inState);
|
|
|
|
/**
|
|
@brief Returns a set of distinct ::NTV2VideoFormat values supported on the given device.
|
|
@param[in] inDeviceID Specifies the ::NTV2DeviceID of the device of interest.
|
|
@param[out] outFormats Receives the set of distinct ::NTV2VideoFormat values supported by the device.
|
|
@return True if successful; otherwise false.
|
|
@todo This needs to be moved to a C++ compatible "device features" module.
|
|
**/
|
|
AJAExport bool NTV2DeviceGetSupportedVideoFormats (const NTV2DeviceID inDeviceID, NTV2VideoFormatSet & outFormats);
|
|
|
|
/**
|
|
@brief Prints the given ::NTV2VideoFormatSet contents into the given output stream.
|
|
@param inOStream The stream into which the human-readable list will be written.
|
|
@param[in] inFormats Specifies the set of video formats to be streamed.
|
|
@return The "inOStream" that was specified.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOStream, const NTV2VideoFormatSet & inFormats);
|
|
|
|
/**
|
|
@brief Returns a set of distinct ::NTV2FrameBufferFormat values supported on the given device.
|
|
@param[in] inDeviceID Specifies the ::NTV2DeviceID of the device of interest.
|
|
@param[out] outFormats Receives the set of distinct ::NTV2FrameBufferFormat values supported by the device.
|
|
@return True if successful; otherwise false.
|
|
@todo This needs to be moved to a C++ compatible "device features" module.
|
|
**/
|
|
AJAExport bool NTV2DeviceGetSupportedPixelFormats (const NTV2DeviceID inDeviceID, NTV2FrameBufferFormatSet & outFormats);
|
|
|
|
/**
|
|
@brief Prints the given ::NTV2FrameBufferFormatSet contents into the given output stream.
|
|
@param inOStream The stream into which the human-readable list will be written.
|
|
@param[in] inFormats Specifies the set of pixel formats to be streamed.
|
|
@return The "inOStream" that was specified.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOStream, const NTV2FrameBufferFormatSet & inFormats);
|
|
|
|
/**
|
|
@brief Appends the given ::NTV2FrameBufferFormatSet contents into the given set.
|
|
@param inOutSet The set to which the other set will be appended.
|
|
@param[in] inSet Specifies the set whose contents will be appended.
|
|
@return A reference to the modified set.
|
|
**/
|
|
AJAExport NTV2FrameBufferFormatSet & operator += (NTV2FrameBufferFormatSet & inOutSet, const NTV2FrameBufferFormatSet inSet);
|
|
|
|
/**
|
|
@brief Returns a set of distinct ::NTV2Standard values supported on the given device.
|
|
@param[in] inDeviceID Specifies the ::NTV2DeviceID of the device of interest.
|
|
@param[out] outStandards Receives the set of distinct ::NTV2Standard values supported by the device.
|
|
@return True if successful; otherwise false.
|
|
@todo This needs to be moved to a C++ compatible "device features" module.
|
|
**/
|
|
AJAExport bool NTV2DeviceGetSupportedStandards (const NTV2DeviceID inDeviceID, NTV2StandardSet & outStandards);
|
|
|
|
/**
|
|
@brief Prints the given ::NTV2StandardSet contents into the given output stream.
|
|
@param inOStream The stream into which the human-readable list will be written.
|
|
@param[in] inStandards Specifies the set of ::NTV2Standard values to be streamed.
|
|
@return The "inOStream" that was specified.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOStream, const NTV2StandardSet & inStandards);
|
|
|
|
/**
|
|
@brief Appends the given ::NTV2StandardSet contents into the given set.
|
|
@param inOutSet The set to which the other set will be appended.
|
|
@param[in] inSet Specifies the set whose contents will be appended.
|
|
@return A reference to the modified set.
|
|
**/
|
|
AJAExport NTV2StandardSet & operator += (NTV2StandardSet & inOutSet, const NTV2StandardSet inSet);
|
|
|
|
/**
|
|
@brief Returns a set of distinct ::NTV2FrameGeometry values supported on the given device.
|
|
@param[in] inDeviceID Specifies the ::NTV2DeviceID of the device of interest.
|
|
@param[out] outGeometries Receives the set of distinct ::NTV2FrameGeometry values supported by the device.
|
|
@return True if successful; otherwise false.
|
|
@todo Needs to be moved to a C++ compatible "device features" module.
|
|
**/
|
|
AJAExport bool NTV2DeviceGetSupportedGeometries (const NTV2DeviceID inDeviceID, NTV2GeometrySet & outGeometries);
|
|
|
|
/**
|
|
@brief Prints the given ::NTV2GeometrySet contents into the given output stream.
|
|
@param inOStream The stream into which the human-readable list will be written.
|
|
@param[in] inGeometries Specifies the set of ::NTV2FrameGeometry values to be streamed.
|
|
@return The "inOStream" that was specified.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOStream, const NTV2GeometrySet & inGeometries);
|
|
|
|
/**
|
|
@brief Appends the given ::NTV2GeometrySet contents into the given set.
|
|
@param inOutSet The set to which the other set will be appended.
|
|
@param[in] inSet Specifies the set whose contents will be appended.
|
|
@return A reference to the modified set.
|
|
**/
|
|
AJAExport NTV2GeometrySet & operator += (NTV2GeometrySet & inOutSet, const NTV2GeometrySet inSet);
|
|
|
|
/**
|
|
@brief Prints the given ::NTV2InputSourceSet contents into the given output stream.
|
|
@param inOStream The stream into which the human-readable list will be written.
|
|
@param[in] inSet Specifies the set to be streamed.
|
|
@return The "inOStream" that was specified.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOStream, const NTV2InputSourceSet & inSet);
|
|
|
|
/**
|
|
@brief Appends the given ::NTV2InputSourceSet's contents into the given set.
|
|
@param inOutSet The set to which the other set will be appended.
|
|
@param[in] inSet Specifies the set whose contents will be appended.
|
|
@return A reference to the modified set.
|
|
**/
|
|
AJAExport NTV2InputSourceSet & operator += (NTV2InputSourceSet & inOutSet, const NTV2InputSourceSet & inSet);
|
|
|
|
/**
|
|
@brief Prints the given ::NTV2OutputDestinations' contents into the given output stream.
|
|
@param inOStream The stream into which the human-readable list will be written.
|
|
@param[in] inSet Specifies the set to be streamed.
|
|
@return The "inOStream" that was specified.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOStream, const NTV2OutputDestinations & inSet); // New in SDK 16.0
|
|
|
|
/**
|
|
@brief Appends the given ::NTV2OutputDestinations' contents into the given set.
|
|
@param inOutSet The set to which the other set will be appended.
|
|
@param[in] inSet Specifies the set whose contents will be appended.
|
|
@return A reference to the modified set.
|
|
**/
|
|
AJAExport NTV2OutputDestinations & operator += (NTV2OutputDestinations & inOutSet, const NTV2OutputDestinations & inSet); // New in SDK 16.0
|
|
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2_HEADER to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2_HEADER to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2_HEADER & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2_TRAILER to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2_TRAILER to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2_TRAILER & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2_POINTER to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2_POINTER to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2_POINTER & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2_RP188 struct to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2_RP188 struct to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2_RP188 & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2TimeCodeList to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2TimeCodeList to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2TimeCodeList & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2TimeCodes map to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2TimeCodes map to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2TimeCodes & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2TCIndexes to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2TCIndexes set to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2TCIndexes & inObj);
|
|
|
|
/**
|
|
@brief Appends the given ::NTV2TCIndexes contents into the given set.
|
|
@param inOutSet The set to which the other set will be appended.
|
|
@param[in] inSet Specifies the set whose contents will be appended.
|
|
@return A reference to the modified set.
|
|
**/
|
|
AJAExport NTV2TCIndexes & operator += (NTV2TCIndexes & inOutSet, const NTV2TCIndexes & inSet);
|
|
|
|
/**
|
|
@brief Streams the given ::FRAME_STAMP to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::FRAME_STAMP to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const FRAME_STAMP & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::AUTOCIRCULATE_STATUS to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::AUTOCIRCULATE_STATUS to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const AUTOCIRCULATE_STATUS & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2SegmentedDMAInfo to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2SegmentedDMAInfo to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2SegmentedDMAInfo & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::AUTOCIRCULATE_TRANSFER to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::AUTOCIRCULATE_TRANSFER to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const AUTOCIRCULATE_TRANSFER & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::FRAME_STAMP to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::FRAME_STAMP to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const FRAME_STAMP & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::AUTOCIRCULATE_TRANSFER_STATUS to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::AUTOCIRCULATE_TRANSFER_STATUS to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const AUTOCIRCULATE_TRANSFER_STATUS & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2RegisterNumberSet to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2RegisterNumberSet to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2RegisterNumberSet & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2RegisterValueMap to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2RegisterValueMap to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2RegisterValueMap & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::AutoCircVidProcInfo to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::AutoCircVidProcInfo to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const AutoCircVidProcInfo & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2ColorCorrectionData to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2ColorCorrectionData to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStream, const NTV2ColorCorrectionData & inObj);
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2GetRegisters to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2GetRegisters to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport inline std::ostream & operator << (std::ostream & inOutStream, const NTV2GetRegisters & inObj) {return inObj.Print (inOutStream);}
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2SetRegisters to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2SetRegisters to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport inline std::ostream & operator << (std::ostream & inOutStream, const NTV2SetRegisters & inObj) {return inObj.Print (inOutStream);}
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2BankSelGetSetRegs to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2BankSelGetSetRegs to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport inline std::ostream & operator << (std::ostream & inOutStream, const NTV2BankSelGetSetRegs & inObj) {return inObj.Print (inOutStream);}
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2SDIInStatistics to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2SDIInStatistics to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport inline std::ostream & operator << (std::ostream & inOutStream, const NTV2SDIInStatistics & inObj) {return inObj.Print (inOutStream);}
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2SDIInputStatus to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the ::NTV2SDIInputStatus to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport inline std::ostream & operator << (std::ostream & inOutStream, const NTV2SDIInputStatus & inObj) {return inObj.Print (inOutStream);}
|
|
|
|
/**
|
|
@brief Streams the given ::NTV2SegmentedXferInfo to the specified ostream in a human-readable format.
|
|
@param inOutStrm Specifies the ostream to use.
|
|
@param[in] inXferInfo Specifies the ::NTV2SegmentedXferInfo to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport std::ostream & operator << (std::ostream & inOutStrm, const NTV2SegmentedXferInfo & inXferInfo);
|
|
|
|
/**
|
|
@brief Streams the given NTV2DebugLogging struct to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the NTV2DebugLogging to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport inline std::ostream & operator << (std::ostream & inOutStream, const NTV2DebugLogging & inObj) {return inObj.Print (inOutStream);}
|
|
|
|
/**
|
|
@brief Streams the given NTV2BufferLock struct to the specified ostream in a human-readable format.
|
|
@param inOutStream Specifies the ostream to use.
|
|
@param[in] inObj Specifies the NTV2BufferLock to be streamed.
|
|
@return The ostream being used.
|
|
**/
|
|
AJAExport inline std::ostream & operator << (std::ostream & inOutStream, const NTV2BufferLock & inObj) {return inObj.Print (inOutStream);}
|
|
#endif // !defined (NTV2_BUILDING_DRIVER)
|
|
|
|
#if defined (AJAMac)
|
|
#pragma pack (pop)
|
|
#endif // defined (AJAMac)
|
|
////////////////////////////////////////////////////////////////////////////////////////////// END NEW AUTOCIRCULATE API
|
|
|
|
|
|
// maximum number of hevc streams
|
|
#define HEVC_STREAM_MAX 4
|
|
|
|
// maximum number of gpio ports
|
|
#define HEVC_GPIO_MAX 64
|
|
|
|
// version string maximum size (bytes)
|
|
#define HEVC_VERSION_STRING_SIZE 64
|
|
|
|
// picture and encoded information additional data size (bytes)
|
|
#define HEVC_ADDITIONAL_DATA_SIZE ((4 + 4 + 256) * 16)
|
|
|
|
// codec state flags
|
|
#define HEVC_STATE_FLAG_VIDEO_STARTED 0x00000001U // codec video input capture started
|
|
|
|
// transfer flags
|
|
#define HEVC_TRANSFER_FLAG_IS_LAST_FRAME 0x00000001U // last stream frame
|
|
|
|
// driver io status codes
|
|
#define HEVC_STATUS_SUCCESS 0x00000001U
|
|
|
|
// fatal error registers
|
|
#define HEVC_FATAL_ERROR_INFO_REG 0x08000100U // codec error register base
|
|
#define HEVC_FATAL_ERROR_INFO_COUNT 64 // number of codec error registers
|
|
|
|
// driver debug register output enable bits
|
|
#define HEVC_DEBUG_DRIVER_REGISTER 0x080000FCU // register address of debug bits
|
|
#define HEVC_DEBUG_MASK_INFO 0x00000001 // general probe and cleanup
|
|
#define HEVC_DEBUG_MASK_WARNING 0x00000002 // general warinings
|
|
#define HEVC_DEBUG_MASK_ERROR 0x00000004 // general erros
|
|
#define HEVC_DEBUG_MASK_INT_PRIMARY 0x00000008 // primary interrupt info
|
|
#define HEVC_DEBUG_MASK_INT_COMMAND 0x00000010 // command tasklet info
|
|
#define HEVC_DEBUG_MASK_INT_VEI 0x00000020 // raw stream tasklet info
|
|
#define HEVC_DEBUG_MASK_INT_SEO 0x00000040 // encoded stream tasklet info
|
|
#define HEVC_DEBUG_MASK_INT_ERROR 0x00000080 // interrupt errors
|
|
#define HEVC_DEBUG_MASK_REGISTER_INFO 0x00000100 // register read/write info
|
|
#define HEVC_DEBUG_MASK_REGISTER_STATE 0x00000200 // detailed register access info
|
|
#define HEVC_DEBUG_MASK_REGISTER_ERROR 0x00000400 // register access errors
|
|
#define HEVC_DEBUG_MASK_COMMAND_INFO 0x00000800 // command queue info
|
|
#define HEVC_DEBUG_MASK_COMMAND_STATE 0x00001000 // detailed command processing info
|
|
#define HEVC_DEBUG_MASK_COMMAND_ERROR 0x00002000 // command queue errors
|
|
#define HEVC_DEBUG_MASK_STREAM_INFO 0x00004000 // stream (dma) queue info
|
|
#define HEVC_DEBUG_MASK_STREAM_STATE 0x00008000 // detailed stream processing info
|
|
#define HEVC_DEBUG_MASK_STREAM_COPY 0x00010000 // stream data copy info
|
|
#define HEVC_DEBUG_MASK_STREAM_SEGMENT 0x00020000 // stream data segment info
|
|
#define HEVC_DEBUG_MASK_STREAM_FRAME 0x00040000 // stream vif frame info
|
|
#define HEVC_DEBUG_MASK_STREAM_ERROR 0x00080000 // stream queue errors
|
|
#define HEVC_DEBUG_MASK_MEMORY_ALLOC 0x00100000 // buffer memory allocation info
|
|
#define HEVC_DEBUG_MASK_MEMORY_ERROR 0x00200000 // buffer memory allocation errors
|
|
#define HEVC_DEBUG_MASK_DMA_INFO 0x00400000 // dma send info
|
|
#define HEVC_DEBUG_MASK_DMA_DESCRIPTOR 0x00800000 // dma descriptor dump
|
|
#define HEVC_DEBUG_MASK_DMA_ERROR 0x01000000 // dma errors
|
|
#define HEVC_DEBUG_MASK_STATUS_INFO 0x02000000 // status info requests
|
|
#define HEVC_DEBUG_MASK_RESERVED_0 0x04000000
|
|
#define HEVC_DEBUG_MASK_RESERVED_1 0x08000000
|
|
#define HEVC_DEBUG_MASK_RESERVED_2 0x10000000
|
|
#define HEVC_DEBUG_MASK_RESERVED_3 0x20000000
|
|
#define HEVC_DEBUG_MASK_RESERVED_4 0x40000000
|
|
#define HEVC_DEBUG_MASK_RESERVED_5 0x80000000
|
|
|
|
// ntv2 gpio input registers
|
|
#define HEVC_NTV2_GPIO_REGISTER_LOW 510
|
|
#define HEVC_NTV2_GPIO_REGISTER_HIGH 511
|
|
|
|
|
|
// hevc version information
|
|
typedef struct HevcVersion
|
|
{
|
|
ULWord major;
|
|
ULWord minor;
|
|
ULWord point;
|
|
ULWord build;
|
|
} HevcVersion;
|
|
|
|
// pci id information
|
|
typedef struct HevcPciId
|
|
{
|
|
ULWord vendor;
|
|
ULWord device;
|
|
ULWord subVendor;
|
|
ULWord subDevice;
|
|
} HevcPciId;
|
|
|
|
// hevc device mode
|
|
typedef enum HevcDeviceMode
|
|
{
|
|
Hevc_DeviceMode_Unknown,
|
|
Hevc_DeviceMode_Codec, // codec mode
|
|
Hevc_DeviceMode_Maintenance, // maintenance mode
|
|
Hevc_DeviceMode_Size
|
|
} HevcDeviceMode;
|
|
|
|
// hevc device information message
|
|
typedef struct HevcDeviceInfo
|
|
{
|
|
HevcVersion driverVersion; // driver version
|
|
HevcVersion mcpuVersion; // firmware versions
|
|
char systemFirmware[HEVC_VERSION_STRING_SIZE];
|
|
char standardFirmwareSingle[HEVC_VERSION_STRING_SIZE];
|
|
char standardFirmwareMultiple[HEVC_VERSION_STRING_SIZE];
|
|
char userFirmwareSingle[HEVC_VERSION_STRING_SIZE];
|
|
char userFirmwareMultiple[HEVC_VERSION_STRING_SIZE];
|
|
HevcPciId pciId; // pci ids
|
|
HevcDeviceMode deviceMode; // hardware device mode
|
|
bool mcpuVersionCheck; // mcpu version supported
|
|
bool systemVersionCheck; // system version supported
|
|
bool standardSingleCheck; // standard firmware single version supported
|
|
bool standardMultipleCheck; // standard fimwrare multiple version supported
|
|
bool pciIdCheck; // pci id supported
|
|
} HevcDeviceInfo;
|
|
|
|
// hevc register
|
|
typedef struct HevcDeviceRegister
|
|
{
|
|
ULWord address; // register address
|
|
ULWord writeValue; // register write value
|
|
ULWord readValue; // register read value
|
|
ULWord mask; // register value mask
|
|
ULWord shift; // register value shift
|
|
bool write; // write flag
|
|
bool read; // read flag
|
|
bool forceBar4; // force bar4 access
|
|
} HevcDeviceRegister;
|
|
|
|
// hevc main state
|
|
typedef enum HevcMainState
|
|
{
|
|
Hevc_MainState_Unknown,
|
|
Hevc_MainState_Boot, // codec has booted
|
|
Hevc_MainState_Init, // initialize codec
|
|
Hevc_MainState_Encode, // configure encoding (load firmware?)
|
|
Hevc_MainState_Error, // codec must be reset
|
|
Hevc_MainState_Size
|
|
} HevcMainState;
|
|
|
|
// encoder mode
|
|
typedef enum HevcEncodeMode
|
|
{
|
|
Hevc_EncodeMode_Unknown,
|
|
Hevc_EncodeMode_Single, // encode a sigle stream
|
|
Hevc_EncodeMode_Multiple, // encode multiple streams
|
|
Hevc_EncodeMode_Size
|
|
} HevcEncodeMode;
|
|
|
|
// encoder firmware type
|
|
typedef enum HevcFirmwareType
|
|
{
|
|
Hevc_FirmwareType_Unknown,
|
|
Hevc_FirmwareType_Standard, // encode firmware standard
|
|
Hevc_FirmwareType_User, // encode firmware user
|
|
Hevc_FirmwareType_Size
|
|
} HevcFirmwareType;
|
|
|
|
// hevc video interface state
|
|
typedef enum HevcVifState
|
|
{
|
|
Hevc_VifState_Unknown,
|
|
Hevc_VifState_Stop, // video interface stop
|
|
Hevc_VifState_Start, // video interface start
|
|
Hevc_VifState_Size
|
|
} HevcVifState;
|
|
|
|
// hevc video input state
|
|
typedef enum HevcVinState
|
|
{
|
|
Hevc_VinState_Unknown,
|
|
Hevc_VinState_Stop, // video input stop
|
|
Hevc_VinState_Start, // video input start
|
|
Hevc_VinState_Size
|
|
} HevcVinState;
|
|
|
|
// hevc encoder state
|
|
typedef enum HevcEhState
|
|
{
|
|
Hevc_EhState_Unknown,
|
|
Hevc_EhState_Stop, // encoder stop
|
|
Hevc_EhState_Start, // encoder start
|
|
Hevc_EhState_ReadyToStop, // encoder ready to stop
|
|
Hevc_EhState_Size
|
|
} HevcEhState;
|
|
|
|
// hevc gpio control
|
|
typedef enum HevcGpioControl
|
|
{
|
|
Hevc_GpioControl_Unknown,
|
|
Hevc_GpioControl_Function, // configure gpio port function
|
|
Hevc_GpioControl_Direction, // configure gpio port direction
|
|
Hevc_GpioControl_Set, // set gpio port value
|
|
Hevc_GpioControl_Get, // get pgio port value
|
|
Hevc_GpioControl_Size
|
|
} HevcGpioControl;
|
|
|
|
// hevc gpio function
|
|
typedef enum HevcGpioFunction
|
|
{
|
|
Hevc_GpioFunction_Unknown,
|
|
Hevc_GpioFunction_Gpio, // gpio function is gpio
|
|
Hevc_GpioFunction_Peripheral, // gpio function is peripheral
|
|
Hevc_GpioFunction_Size
|
|
} HevcGpioFunction;
|
|
|
|
// hevc gpio direction
|
|
typedef enum HevcGpioDirection
|
|
{
|
|
Hevc_GpioDirection_Unknown,
|
|
Hevc_GpioDirection_Input, // gpio direction is input
|
|
Hevc_GpioDirection_Output, // gpio direction is output
|
|
Hevc_GpioDirection_Size
|
|
} HevcGpioDirection;
|
|
|
|
// hevc gpio value
|
|
typedef enum HevcGpioValue
|
|
{
|
|
Hevc_GpioValue_Unknown,
|
|
Hevc_GpioValue_Low, // gpio direction is input
|
|
Hevc_GpioValue_High, // gpio direction is output
|
|
Hevc_GpioValue_Size
|
|
} HevcGpioValue;
|
|
|
|
typedef enum HevcChangeSequence
|
|
{
|
|
Hevc_ChangeSequence_Unknown,
|
|
Hevc_ChangeSequence_Enabled,
|
|
Hevc_ChangeSequence_Disabled,
|
|
Hevc_ChangeSequence_Size
|
|
} HevcChangeSequence;
|
|
|
|
// hevc change param target
|
|
#define Hevc_ParamTarget_None 0x00000000
|
|
#define Hevc_ParamTarget_Vbr 0x00000001 // change variable bitrate
|
|
#define Hevc_ParamTarget_Cbr 0x00000002 // change constant bitrate
|
|
#define Hevc_ParamTarget_Resolution 0x00000004 // change size, crop, pan, etc.
|
|
#define Hevc_ParamTarget_Frame_Rate 0x00000008 // change frame rate
|
|
#define Hevc_ParamTarget_All 0x0000000f
|
|
|
|
// hevc commands
|
|
typedef enum HevcCommand
|
|
{
|
|
Hevc_Command_Unknown,
|
|
Hevc_Command_MainState, // set main state
|
|
Hevc_Command_VinState, // set video input state
|
|
Hevc_Command_EhState, // set encoder state
|
|
Hevc_Command_Gpio, // control gpio
|
|
Hevc_Command_Reset, // reset codec
|
|
Hevc_Command_ChangeParam, // change dynamic params during encode
|
|
Hevc_Command_ChangePicture, // change picture type
|
|
Hevc_Command_Size
|
|
} HevcCommand;
|
|
|
|
// hevc command information
|
|
typedef struct HevcDeviceCommand
|
|
{
|
|
HevcCommand command; // command type
|
|
// main state command info
|
|
HevcMainState mainState; // set main state
|
|
HevcEncodeMode encodeMode; // set encoder mode
|
|
HevcFirmwareType firmwareType; // set encode firmware type
|
|
// vin/eh state command info
|
|
HevcVinState vinState; // set video input state
|
|
HevcEhState ehState; // set encoder state
|
|
ULWord streamBits; // command applies to each stream bit
|
|
// gpio command info
|
|
HevcGpioControl gpioControl; // gpio control type
|
|
ULWord gpioNumber; // gpio port number (function, direction, set, get)
|
|
HevcGpioFunction gpioFunction; // gpio port function (function)
|
|
HevcGpioDirection gpioDirection; // gpio port direction (direction)
|
|
HevcGpioValue gpioValue; // gpio port value (set, get)
|
|
// change encode params
|
|
ULWord paramTarget; // parameters to change
|
|
ULWord paramStreamId; // stream id
|
|
HevcChangeSequence changeSequence; // start new sequence (vbr)
|
|
ULWord maxBitRate; // maximum bitrate (vbr)
|
|
ULWord aveBitRate; // average bitrate (vbr and cbr)
|
|
ULWord minBitRate; // minimum bitrate (vbr)
|
|
ULWord seqEndPicNumber; // last picture number of sequence (resolution and frame rate)
|
|
ULWord hSizeEh; // resolution parameters
|
|
ULWord vSizeEh;
|
|
ULWord cropLeft;
|
|
ULWord cropRight;
|
|
ULWord cropTop;
|
|
ULWord cropBottom;
|
|
ULWord panScanRectLeft;
|
|
ULWord panScanRectRight;
|
|
ULWord panScanRectTop;
|
|
ULWord panScanRectBottom;
|
|
ULWord videoSignalType;
|
|
ULWord videoFormat;
|
|
ULWord videoFullRangeFlag;
|
|
ULWord colourDescriptionPresentFlag;
|
|
ULWord colourPrimaries;
|
|
ULWord transferCharacteristics;
|
|
ULWord matrixCoeffs;
|
|
ULWord aspectRatioIdc;
|
|
ULWord sarWidth;
|
|
ULWord sarHeight;
|
|
ULWord frameRateCode; // frame rate parameter
|
|
// change picture type
|
|
ULWord picType; // picture type
|
|
ULWord picStreamId; // stream id
|
|
ULWord gopEndPicNumber; // last picture number of gop
|
|
// general command flags
|
|
ULWord flags; // command flags
|
|
} HevcDeviceCommand;
|
|
|
|
// hevc stream types
|
|
typedef enum HevcStream
|
|
{
|
|
Hevc_Stream_Unknown,
|
|
Hevc_Stream_VideoRaw, // raw data stream
|
|
Hevc_Stream_VideoEnc, // encoded data stream
|
|
Hevc_Stream_Size
|
|
} HevcStream;
|
|
|
|
// hevc picture data (raw streams)
|
|
typedef struct HevcPictureData
|
|
{
|
|
ULWord serialNumber; // serial number (application data)
|
|
ULWord ptsValueLow; // presentation time stamp (90kHz)
|
|
ULWord ptsValueHigh; // pts high bit only (33 bit roll over)
|
|
ULWord pictureNumber; // start with 1 and increment for each picture
|
|
ULWord numAdditionalData; // number of additional data entries
|
|
} HevcPictureData;
|
|
|
|
// hevc picture information (raw streams)
|
|
typedef struct HevcPictureInfo
|
|
{
|
|
HevcPictureData pictureData; // raw stream picture data
|
|
//
|
|
// additional data format
|
|
// u32 additional_data_type
|
|
// u32 additional_data_size (256 bytes max)
|
|
// u8... additional_data_payload
|
|
// ... more additional data
|
|
//
|
|
// additional data types
|
|
// 1 = sei data
|
|
// 2 = passthrough data (to encoded additional data of encoded frame)
|
|
// 4 = cancel sei on every gop (set additional size to 0)
|
|
//
|
|
// sei data format
|
|
// u8 user_sei_location
|
|
// u8 user_sei_type
|
|
// u8 user_sei_length
|
|
// u8... user_sei_payload
|
|
//
|
|
// user sei location
|
|
// 2 = every gop head picture
|
|
// 3 = this picture only
|
|
//
|
|
// passthrough data format
|
|
// u8... passthrough_data_payload
|
|
//
|
|
UByte additionalData[HEVC_ADDITIONAL_DATA_SIZE];
|
|
} HevcPictureInfo;
|
|
|
|
// hevc encoded stream data (encoded streams)
|
|
typedef struct HevcEncodedData
|
|
{
|
|
ULWord serialNumber; // serial number (from picture information)
|
|
ULWord esOffsetLow; // encoded stream frame location (?)
|
|
ULWord esOffsetHigh; // es frame location high 32 bits
|
|
ULWord esSize; // encoded stream frame size (?)
|
|
ULWord ptsValueLow; // presentation time stamp (picture information)
|
|
ULWord ptsValueHigh; // pts high bit (33 bit roll over)
|
|
ULWord dtsValueLow; // decoding time stamp (90 kHz)
|
|
ULWord dtsValueHigh; // dts high bit (33 bit roll over)
|
|
ULWord itcValueLow; // internal time clock (90 kHz)
|
|
ULWord itcValueHigh; // itc high bit (33 bit roll over)
|
|
ULWord itcExtension; // internal time extension (27 MHz)
|
|
ULWord temporalId; // temporal ID
|
|
ULWord esIdrType; // 0 = not IDR, 1 = IDR, 3 = IDR command
|
|
ULWord pictureType; // 0 = I-frame, 1 = P-frame, 2 = B-frame
|
|
ULWord nalOffset; // offset to the nal top of the idr/i picture
|
|
ULWord cpbValue; // codec picture buffer occupancy value
|
|
ULWord esHSize; // horizontal resolution
|
|
ULWord esVSize; // vertical resolution
|
|
ULWord esUnitsInTick; // frame duration (2x eh param value for half rate)
|
|
ULWord esBitRate; // bit rate (Kbps)
|
|
ULWord esEndFlag; // 0 = not end of sequence, 1 = end of sequence
|
|
ULWord esLastFrame; // 0xffffffff = last frame
|
|
ULWord reserved0;
|
|
ULWord reserved1;
|
|
ULWord reserved2;
|
|
ULWord reserved3;
|
|
ULWord reserved4;
|
|
ULWord reserved5;
|
|
ULWord reserved6;
|
|
ULWord reserved7;
|
|
ULWord numAdditionalData; // number of additional data entries
|
|
} HevcEncodedData;
|
|
|
|
// hevc encode stream information (encoded streams)
|
|
typedef struct HevcEncodedInfo
|
|
{
|
|
HevcEncodedData encodedData; // encoded stream data
|
|
UByte additionalData[HEVC_ADDITIONAL_DATA_SIZE];
|
|
} HevcEncodedInfo;
|
|
|
|
// hevc stream transfer information
|
|
typedef struct HevcDeviceTransfer
|
|
{
|
|
HevcStream streamType; // transfer stream type
|
|
ULWord streamId; // transfer stream id
|
|
|
|
UByte* pVideoBuffer; // video buffer
|
|
ULWord videoBufferSize; // total video buffer size
|
|
ULWord videoDataSize; // video data size in buffer
|
|
|
|
ULWord segVideoPitch; // video segment pitch
|
|
ULWord segCodecPitch; // codec segment pitch
|
|
ULWord segSize; // segment size
|
|
ULWord segCount; // number of segments
|
|
|
|
UByte* pInfoBuffer; // information buffer (picture or encoded)
|
|
ULWord infoBufferSize; // total information buffer size
|
|
ULWord infoDataSize; // information size in buffer
|
|
|
|
LWord64 encodeTime; // frame encode time (100ns host system clock)
|
|
ULWord flags; // transfer flags (see above for last frame flag)
|
|
} HevcDeviceTransfer;
|
|
|
|
// hevc gpio port status
|
|
typedef struct hevc_gpio_state
|
|
{
|
|
HevcGpioFunction function; // gpio last set port function
|
|
HevcGpioDirection direction; // gpio last set port direction
|
|
HevcGpioValue setValue; // gpio last set value
|
|
HevcGpioValue getValue; // gpio last get value
|
|
} HevcGpioState;
|
|
|
|
// hevc stream statistics (nsec, bytes)
|
|
typedef struct hevc_stream_statistics
|
|
{
|
|
LWord64 transferCount; // number of transfers queued
|
|
LWord64 minTransferTime; // minimum time between transfers
|
|
LWord64 avrTransferTime; // average time between transfers
|
|
LWord64 maxTransferTime; // maximum time between transfers
|
|
LWord64 minTransferSize; // minimum transfer size
|
|
LWord64 maxTransferSize; // maximum transfer size
|
|
LWord64 avrTransferSize; // average transfer size
|
|
LWord64 minCopyDuration; // time for io thread to copy frames
|
|
LWord64 maxCopyDuration; // to/from bounce buffer
|
|
LWord64 avrCopyDuration;
|
|
LWord64 minEnqueueDuration; // time from io thread enqueue
|
|
LWord64 maxEnqueueDuration; // to send to codec
|
|
LWord64 avrEnqueueDuration;
|
|
LWord64 minSendDuration; // time from send to codec
|
|
LWord64 maxSendDuration; // to codec acknowledge
|
|
LWord64 avrSendDuration;
|
|
LWord64 minDmaDuration; // time from codec acknowledge
|
|
LWord64 maxDmaDuration; // to codec dma completion
|
|
LWord64 avrDmaDuration;
|
|
LWord64 minDequeueDuration; // time from io thread enqueue
|
|
LWord64 maxDequeueDuration; // to io thread dequeue
|
|
LWord64 avrDequeueDuration;
|
|
} HevcStreamStatistics;
|
|
|
|
// hevc status information
|
|
typedef struct HevcDeviceStatus
|
|
{
|
|
HevcMainState mainState; // codec main state
|
|
HevcEncodeMode encodeMode; // codec encode mode
|
|
HevcFirmwareType firmwareType; // codec firmware type
|
|
|
|
HevcVifState vifState[HEVC_STREAM_MAX]; // video interface state
|
|
HevcVinState vinState[HEVC_STREAM_MAX]; // video input state
|
|
HevcEhState ehState[HEVC_STREAM_MAX]; // encoder state
|
|
HevcGpioState gpioState[HEVC_GPIO_MAX]; // gpio state
|
|
|
|
LWord64 commandCount; // number of commands processed
|
|
LWord64 rawTransferCount; // number of raw transfers processed
|
|
LWord64 encTransferCount; // number of encoded transfers processed
|
|
|
|
ULWord commandQueueLevel; // number of commands in command queue
|
|
ULWord rawTransferQueueLevel; // number of transfers in raw transfer queue
|
|
ULWord encTransferQueueLevel; // number of transfers in encoded transfer queue
|
|
} HevcDeviceStatus;
|
|
|
|
// hevc debug information
|
|
typedef struct HevcDeviceDebug
|
|
{
|
|
HevcDeviceStatus deviceStatus; // device status structure
|
|
|
|
HevcStreamStatistics rawStats[HEVC_STREAM_MAX]; // raw stream statistics
|
|
HevcStreamStatistics encStats[HEVC_STREAM_MAX]; // encoded stream statistics
|
|
ULWord queueLevel[HEVC_STREAM_MAX]; // stream queue level
|
|
ULWord clearRawStatsBits; // stream bits to clear raw stream statistics
|
|
ULWord clearEncStatsBits; // stream bits to clear encodec stream statistics
|
|
|
|
ULWord cmdContCount; // codec command continuity count
|
|
ULWord cmdAckContCount; // codec command acknowledge count
|
|
ULWord cmdMsgContCount; // codec command message count
|
|
ULWord rawContCount; // raw dma continuity count
|
|
ULWord rawAckContCount; // raw dma acknowledge count
|
|
ULWord rawMsgContCount; // raw dma message count
|
|
ULWord encContCount; // encoded dma continuity count
|
|
ULWord encAckContCount; // encoded dma acnowledge count
|
|
ULWord encMsgContCount; // encoded dma message count
|
|
} HevcDeviceDebug;
|
|
|
|
// hevc driver ioctl message types
|
|
typedef enum HevcMessageId
|
|
{
|
|
Hevc_MessageId_Unknown,
|
|
Hevc_MessageId_Info, // get device information
|
|
Hevc_MessageId_Register, // write/read codec register
|
|
Hevc_MessageId_Command, // send a codec command
|
|
Hevc_MessageId_Transfer, // transfer codec stream data
|
|
Hevc_MessageId_Status, // get codec status
|
|
Hevc_MessageId_Debug, // get debug information
|
|
Hevc_MessageId_Size
|
|
} HevcMessageId;
|
|
|
|
// hevc common driver ioctl message header
|
|
typedef struct hevcMessageHeader
|
|
{
|
|
HevcMessageId type;
|
|
ULWord size;
|
|
ULWord status;
|
|
ULWord reverved0;
|
|
ULWord reverved1;
|
|
ULWord reverved2;
|
|
} HevcMessageHeader;
|
|
|
|
// hevc stream transfer data
|
|
typedef struct HevcTransferData
|
|
{
|
|
HevcStream streamType;
|
|
ULWord streamId;
|
|
ULWord64 videoBuffer;
|
|
ULWord videoBufferSize;
|
|
ULWord videoDataSize;
|
|
ULWord segVideoPitch;
|
|
ULWord segCodecPitch;
|
|
ULWord segSize;
|
|
ULWord segCount;
|
|
ULWord64 infoBuffer;
|
|
ULWord infoBufferSize;
|
|
ULWord infoDataSize;
|
|
LWord64 encodeTime;
|
|
ULWord flags;
|
|
} HevcTransferData;
|
|
|
|
// hevc driver device information message
|
|
typedef struct HevcMessageInfo
|
|
{
|
|
HevcMessageHeader header;
|
|
HevcDeviceInfo data;
|
|
} HevcMessageInfo;
|
|
|
|
// hevc driver register message
|
|
typedef struct HevcMessageRegister
|
|
{
|
|
HevcMessageHeader header;
|
|
HevcDeviceRegister data;
|
|
} HevcMessageRegister;
|
|
|
|
// hevc driver command message
|
|
typedef struct HevcMessageCommand
|
|
{
|
|
HevcMessageHeader header;
|
|
HevcDeviceCommand data;
|
|
} HevcMessageCommand;
|
|
|
|
// hevc driver transfer message
|
|
typedef struct HevcMessageTransfer
|
|
{
|
|
HevcMessageHeader header;
|
|
HevcTransferData data;
|
|
} HevcMessageTransfer;
|
|
|
|
// hevc driver status message
|
|
typedef struct HevcMessageStatus
|
|
{
|
|
HevcMessageHeader header;
|
|
HevcDeviceStatus data;
|
|
} HevcMessageStatus;
|
|
|
|
// hevc driver debug message
|
|
typedef struct HevcMessageDebug
|
|
{
|
|
HevcMessageHeader header;
|
|
HevcDeviceDebug data;
|
|
} HevcMessageDebug;
|
|
|
|
typedef struct HDRRegValues{
|
|
uint16_t greenPrimaryX;
|
|
uint16_t greenPrimaryY;
|
|
uint16_t bluePrimaryX;
|
|
uint16_t bluePrimaryY;
|
|
uint16_t redPrimaryX;
|
|
uint16_t redPrimaryY;
|
|
uint16_t whitePointX;
|
|
uint16_t whitePointY;
|
|
uint16_t maxMasteringLuminance;
|
|
uint16_t minMasteringLuminance;
|
|
uint16_t maxContentLightLevel;
|
|
uint16_t maxFrameAverageLightLevel;
|
|
uint8_t electroOpticalTransferFunction;
|
|
uint8_t staticMetadataDescriptorID;
|
|
}HDRRegValues;
|
|
|
|
typedef struct HDRFloatValues{
|
|
float greenPrimaryX;
|
|
float greenPrimaryY;
|
|
float bluePrimaryX;
|
|
float bluePrimaryY;
|
|
float redPrimaryX;
|
|
float redPrimaryY;
|
|
float whitePointX;
|
|
float whitePointY;
|
|
uint16_t maxMasteringLuminance;
|
|
float minMasteringLuminance;
|
|
uint16_t maxContentLightLevel;
|
|
uint16_t maxFrameAverageLightLevel;
|
|
uint8_t electroOpticalTransferFunction;
|
|
uint8_t staticMetadataDescriptorID;
|
|
}HDRFloatValues;
|
|
|
|
typedef struct HDRDriverValues{
|
|
uint16_t greenPrimaryX;
|
|
uint16_t greenPrimaryY;
|
|
uint16_t bluePrimaryX;
|
|
uint16_t bluePrimaryY;
|
|
uint16_t redPrimaryX;
|
|
uint16_t redPrimaryY;
|
|
uint16_t whitePointX;
|
|
uint16_t whitePointY;
|
|
uint16_t maxMasteringLuminance;
|
|
uint16_t minMasteringLuminance;
|
|
uint16_t maxContentLightLevel;
|
|
uint16_t maxFrameAverageLightLevel;
|
|
uint8_t electroOpticalTransferFunction;
|
|
uint8_t staticMetadataDescriptorID;
|
|
uint8_t luminance;
|
|
}HDRDriverValues;
|
|
|
|
#define NTV2_IS_VALID_HDR_PRIMARY(__val__) ((__val__) <= 0x0000C350)
|
|
#define NTV2_IS_VALID_HDR_MASTERING_LUMINENCE(__val__) (true)
|
|
#define NTV2_IS_VALID_HDR_LIGHT_LEVEL(__val__) (true)
|
|
|
|
#endif // NTV2PUBLICINTERFACE_H
|