]> git.sesse.net Git - casparcg/blob - dependencies64/bluefish/include/BlueDriver_p.h
Merge commit 'fcda9226c39ea7752abb74d40f9e20fa79e88848' into 2.1.0
[casparcg] / dependencies64 / bluefish / include / BlueDriver_p.h
1 #pragma once
2 #define _BLUEDRIVER_P_H__
3 #define BLUE_UINT32     unsigned int
4 #define BLUE_INT32      int 
5 #define BLUE_UINT8      unsigned char
6 #define BLUE_INT8       char
7 #define BLUE_UINT16     unsigned short
8 #define BLUE_INT16      short
9
10
11
12 #if defined __linux__
13         #define BLUE_UINT64 unsigned long long
14         #define ULONG       unsigned long
15 #elif defined (__APPLE__)
16         #define BLUE_UINT64 unsigned long long
17         #define UINT32      BLUE_UINT32
18         #define INT32       BLUE_INT32
19         #define ULONG       unsigned long
20         #define BOOLEAN     BOOL
21 #elif defined (_WIN32)
22         #define BLUE_UINT64     unsigned __int64
23 #endif
24
25
26 /**
27  * This contains the enumerators that can be used to set the cards \n
28  * video output and also to determine the video mode of the incoming \n
29  * video signal.
30  */ 
31 typedef enum _EVideoMode
32 {
33         VID_FMT_PAL=0,
34         VID_FMT_NTSC=1,
35         VID_FMT_576I_5000=0,    /**< 720  x 576  50       Interlaced */
36         VID_FMT_486I_5994=1,    /**< 720  x 486  60/1.001 Interlaced */
37         VID_FMT_720P_5994,              /**< 1280 x 720  60/1.001 Progressive */
38         VID_FMT_720P_6000,              /**< 1280 x 720  60       Progressive */
39         VID_FMT_1080PSF_2397,   /**< 1920 x 1080 24/1.001 Segment Frame */
40         VID_FMT_1080PSF_2400,   /**< 1920 x 1080 24       Segment Frame */
41         VID_FMT_1080P_2397,             /**< 1920 x 1080 24/1.001 Progressive */
42         VID_FMT_1080P_2400,             /**< 1920 x 1080 24       Progressive */
43         VID_FMT_1080I_5000,             /**< 1920 x 1080 50       Interlaced */
44         VID_FMT_1080I_5994,             /**< 1920 x 1080 60/1.001 Interlaced */
45         VID_FMT_1080I_6000,             /**< 1920 x 1080 60       Interlaced */
46         VID_FMT_1080P_2500,             /**< 1920 x 1080 25       Progressive */
47         VID_FMT_1080P_2997,             /**< 1920 x 1080 30/1.001 Progressive */
48         VID_FMT_1080P_3000,             /**< 1920 x 1080 30       Progressive */
49         VID_FMT_HSDL_1498,              /**< 2048 x 1556 15/1.0   Segment Frame */
50         VID_FMT_HSDL_1500,              /**< 2048 x 1556 15                     Segment Frame */
51         VID_FMT_720P_5000,              /**< 1280 x 720  50                     Progressive */
52         VID_FMT_720P_2398,              /**< 1280 x 720  24/1.001       Progressive */
53         VID_FMT_720P_2400,              /**< 1280 x 720  24     Progressive */
54         VID_FMT_2048_1080PSF_2397=19,   /**< 2048 x 1080 24/1.001       Segment Frame */
55         VID_FMT_2048_1080PSF_2400=20,   /**< 2048 x 1080 24     Segment Frame */
56         VID_FMT_2048_1080P_2397=21,     /**< 2048 x 1080 24/1.001       progressive */ 
57         VID_FMT_2048_1080P_2400=22,     /**< 2048 x 1080 24     progressive  */
58         VID_FMT_1080PSF_2500=23,
59         VID_FMT_1080PSF_2997=24,
60         VID_FMT_1080PSF_3000=25,
61         VID_FMT_1080P_5000=26,
62         VID_FMT_1080P_5994=27,
63         VID_FMT_1080P_6000=28,
64         VID_FMT_720P_2500=29,
65         VID_FMT_720P_2997=30,
66         VID_FMT_720P_3000=31,
67         VID_FMT_DVB_ASI=32,
68         VID_FMT_2048_1080PSF_2500=33,
69         VID_FMT_2048_1080PSF_2997=34,
70         VID_FMT_2048_1080PSF_3000=35,
71         VID_FMT_2048_1080P_2500=36,
72         VID_FMT_2048_1080P_2997=37,
73         VID_FMT_2048_1080P_3000=38,
74         VID_FMT_2048_1080P_5000=39,
75         VID_FMT_2048_1080P_5994=40,
76         VID_FMT_2048_1080P_6000=41,
77         VID_FMT_1080P_4800=42,
78         VID_FMT_2048_1080P_4800=43,
79
80         VID_FMT_INVALID=44
81 } EVideoMode;
82
83 /**
84 @brief Use these enumerators to set the pixel format 
85                 that should be used by the video input and output 
86                 framestores.
87 */
88 typedef enum _EMemoryFormat
89 {
90         MEM_FMT_ARGB=0, /**< ARGB 4:4:4:4 */
91         MEM_FMT_BV10=1,
92         MEM_FMT_BV8=2,
93         MEM_FMT_YUVS=MEM_FMT_BV8,
94         MEM_FMT_V210=3, // Iridium HD (BAG1)
95         MEM_FMT_RGBA=4,
96         MEM_FMT_CINEON_LITTLE_ENDIAN=5,
97         MEM_FMT_ARGB_PC=6,
98         MEM_FMT_BGRA=MEM_FMT_ARGB_PC,
99         MEM_FMT_CINEON=7,
100         MEM_FMT_2VUY=8,
101         MEM_FMT_BGR=9,
102         MEM_FMT_BGR_16_16_16=10,
103         MEM_FMT_BGR_48 = MEM_FMT_BGR_16_16_16,
104         MEM_FMT_BGRA_16_16_16_16=11,
105         MEM_FMT_BGRA_64 = MEM_FMT_BGRA_16_16_16_16,
106         MEM_FMT_VUYA_4444=12,
107         MEM_FMT_V216=13,
108         MEM_FMT_Y210=14,
109         MEM_FMT_Y216=15,
110         MEM_FMT_RGB=16,
111         MEM_FMT_YUV_ALPHA=17,
112         MEM_FMT_RGB_16_16_16=18,
113         MEM_FMT_RGB_48 = MEM_FMT_RGB_16_16_16,
114         MEM_FMT_RGBA_16_16_16_16=19,
115         MEM_FMT_RGBA_64 = MEM_FMT_RGBA_16_16_16_16,
116         MEM_FMT_YCA8 = 20,
117         MEM_FMT_CYA8 = 21,
118         MEM_FMT_YUV_ALPHA_10 = 22,
119         MEM_FMT_YCA10 = 23,
120         MEM_FMT_CYA10 = 24,
121         MEM_FMT_YAC10 = 25,
122         MEM_FMT_CAY10 = 26,
123
124         MEM_FMT_INVALID = 27
125 } EMemoryFormat;
126
127 /**
128 @brief Used to control the video update type, 
129                 whether the card should capture/playback a
130                 video frame or field.
131 */
132 typedef enum _EUpdateMethod
133 {
134         UPD_FMT_FIELD=0,
135         UPD_FMT_FRAME,
136         UPD_FMT_FRAME_DISPLAY_FIELD1,
137         UPD_FMT_FRAME_DISPLAY_FIELD2,
138         UPD_FMT_INVALID,
139         UPD_FMT_FLAG_RETURN_CURRENT_UNIQUEID=0x80000000,/**< if this flag is used on epoch cards, function would 
140                                                                                                         return the unique id of the current frame as the return value.*/
141 } EUpdateMethod;
142
143 typedef enum _EResoFormat
144 {
145         RES_FMT_NORMAL=0,
146         RES_FMT_HALF,
147         RES_FMT_INVALID
148 } EResoFormat;
149
150 typedef enum _ECardType
151 {
152         CRD_BLUEDEEP_LT=0,              // D64 Lite
153         CRD_BLUEDEEP_SD,                // Iridium SD
154         CRD_BLUEDEEP_AV,                // Iridium AV
155         CRD_BLUEDEEP_IO,                // D64 Full
156         CRD_BLUEWILD_AV,                // D64 AV
157         CRD_IRIDIUM_HD,                 // * Iridium HD
158         CRD_BLUEWILD_RT,                // D64 RT
159         CRD_BLUEWILD_HD,                // * BadAss G2
160         CRD_REDDEVIL,                   // Iridium Full
161         CRD_BLUEDEEP_HD,                // * BadAss G2 variant, proposed, reserved
162         CRD_BLUE_EPOCH_2K = CRD_BLUEDEEP_HD,
163         CRD_BLUE_EPOCH_2K_HORIZON=CRD_BLUE_EPOCH_2K,
164         CRD_BLUEDEEP_HDS,               // * BadAss G2 variant, proposed, reserved
165         CRD_BLUE_ENVY,                  // Mini Din 
166         CRD_BLUE_PRIDE,                 //Mini Din Output 
167         CRD_BLUE_GREED,
168         CRD_BLUE_INGEST,
169         CRD_BLUE_SD_DUALLINK,
170         CRD_BLUE_CATALYST,
171         CRD_BLUE_SD_DUALLINK_PRO,
172         CRD_BLUE_SD_INGEST_PRO,
173         CRD_BLUE_SD_DEEPBLUE_LITE_PRO,
174         CRD_BLUE_SD_SINGLELINK_PRO,
175         CRD_BLUE_SD_IRIDIUM_AV_PRO,
176         CRD_BLUE_SD_FIDELITY,
177         CRD_BLUE_SD_FOCUS,
178         CRD_BLUE_SD_PRIME,
179         CRD_BLUE_EPOCH_2K_CORE,
180         CRD_BLUE_EPOCH_2K_ULTRA,
181         CRD_BLUE_EPOCH_HORIZON,
182         CRD_BLUE_EPOCH_CORE,
183         CRD_BLUE_EPOCH_ULTRA,
184         CRD_BLUE_CREATE_HD,
185         CRD_BLUE_CREATE_2K,
186         CRD_BLUE_CREATE_2K_ULTRA,
187         CRD_BLUE_CREATE_3D = CRD_BLUE_CREATE_2K,
188         CRD_BLUE_CREATE_3D_ULTRA = CRD_BLUE_CREATE_2K_ULTRA,
189         CRD_BLUE_SUPER_NOVA,
190         CRD_BLUE_SUPER_NOVA_S_PLUS,
191         CRD_BLUE_SUPER_NOVA_MICRO,
192         CRD_BLUE_NEUTRON = CRD_BLUE_SUPER_NOVA_MICRO,
193         CRD_BLUE_EPOCH_CG,
194         CRD_INVALID
195 } ECardType;
196
197
198 typedef enum _EHDCardSubType
199 {       
200         CRD_HD_FURY=1,
201         CRD_HD_VENGENCE=2,
202         CRD_HD_IRIDIUM_XP=3,
203         CRD_HD_IRIDIUM = 4,
204         CRD_HD_LUST=5,
205         CRD_HD_INVALID
206 }EHDCardSubType;
207
208 enum EEpochFirmwareProductID
209 {
210         ORAC_FILMPOST_FIRMWARE_PRODUCTID =                                                                      (0x01), //Epoch (2K) Horizon/Core/Ultra, Create/Create3D/Create3D Ultra
211         ORAC_BROADCAST_FIRMWARE_PRODUCTID =                                                                     (0x02), //Epoch (2K) Horizon/Core/Ultra, Create/Create3D/Create3D Ultra
212         ORAC_ASI_FIRMWARE_PRODUCTID =                                                                           (0x03), //Epoch (2K) Horizon/Core/Ultra
213         ORAC_4SDIINPUT_FIRMWARE_PRODUCTID =                                                                     (0x04), //Epoch Supernova/Supernova S+
214         ORAC_4SDIOUTPUT_FIRMWARE_PRODUCTID =                                                            (0x05), //Epoch Supernova/Supernova S+
215         ORAC_2SDIINPUT_2SDIOUTPUT_FIRMWARE_PRODUCTID =                                          (0x06), //Epoch Supernova/Supernova S+
216         ORAC_1SDIINPUT_3SDIOUTPUT_FIRMWARE_PRODUCTID =                                          (0x08), //Epoch Supernova/Supernova S+, deprecated
217         ORAC_INPUT_1SDI_1CHANNEL_OUTPUT_4SDI_3CHANNEL_FIRMWARE_PRODUCTID =      (0x09), //Epoch Supernova/Supernova S+
218         ORAC_INPUT_2SDI_2CHANNEL_OUTPUT_3SDI_2CHANNEL_FIRMWARE_PRODUCTID =      (0x0A), //Epoch Supernova/Supernova S+, deprecated
219         ORAC_INPUT_3SDI_3CHANNEL_OUTPUT_1SDI_1CHANNEL_FIRMWARE_PRODUCTID =      (0x0B), //Epoch Supernova/Supernova S+
220         ORAC_BNC_ASI_FIRMWARE_PRODUCTID =                                                                       (0x0C), //Epoch Supernova/Supernova S+
221         ORAC_NEUTRON_2_IN_0_OUT_FIRMWARE_PRODUCTID =                                            (0x0D), //Epoch Neutron
222         ORAC_NEUTRON_0_IN_2_OUT_FIRMWARE_PRODUCTID =                                            (0x0E), //Epoch Neutron
223         ORAC_NEUTRON_1_IN_1_OUT_FIRMWARE_PRODUCTID =                                            (0x0F), //Epoch Neutron
224         ORAC_NEUTRON_2_IN_0_OUT_SCALER_FIRMWARE_PRODUCTID =                                     (0x10), //Epoch Neutron
225         ORAC_NEUTRON_0_IN_2_OUT_SCALER_FIRMWARE_PRODUCTID =                                     (0x11), //Epoch Neutron
226         ORAC_NEUTRON_1_IN_1_OUT_SCALER_FIRMWARE_PRODUCTID =                                     (0x12), //Epoch Neutron
227         ORAC_NEUTRON_ASI_FIRMWARE_PRODUCTID =                                                           (0x13), //Epoch Neutron
228         ORAC_INPUT_1SDI_1CHANNEL_OUTPUT_3SDI_3CHANNEL_FIRMWARE_PRODUCTID =      (0x14), //Epoch Supernova/Supernova S+
229         ORAC_NEUTRON_1_IN_2_OUT_FIRMWARE_PRODUCTID =                                            (0x15), //Epoch Neutron
230         ORAC_NEUTRON_3_IN_0_OUT_FIRMWARE_PRODUCTID =                                            (0x16), //Epoch Neutron
231         ORAC_NEUTRON_0_IN_3_OUT_FIRMWARE_PRODUCTID =                                            (0x17), //Epoch Neutron
232         ORAC_INPUT_1SDI_1CHANNEL_OUTPUT_3SDI_2CHANNEL_FIRMWARE_PRODUCTID =      (0x18), //Epoch Supernova/Supernova S+
233 };
234
235 /**< @brief Use this enumerator to select the audio channels that should be captured  or played back.
236 */
237 typedef enum _BlueAudioChannelDesc
238 {
239         MONO_FLAG               = 0xC0000000,
240         MONO_CHANNEL_1  = 0x00000001,
241         MONO_CHANNEL_2  = 0x00000002,
242         MONO_CHANNEL_3  = 0x00000004,
243         MONO_CHANNEL_4  = 0x00000008,
244         MONO_CHANNEL_5  = 0x00000010,
245         MONO_CHANNEL_6  = 0x00000020,
246         MONO_CHANNEL_7  = 0x00000040,
247         MONO_CHANNEL_8  = 0x00000080,
248         MONO_CHANNEL_9  = 0x00000100,// to be used by analog audio output channels 
249         MONO_CHANNEL_10 = 0x00000200,// to be used by analog audio output channels 
250         MONO_CHANNEL_11 = 0x00000400,//actual channel 9
251         MONO_CHANNEL_12 = 0x00000800,//actual channel 10
252         MONO_CHANNEL_13 = 0x00001000,//actual channel 11
253         MONO_CHANNEL_14 = 0x00002000,//actual channel 12
254         MONO_CHANNEL_15 = 0x00004000,//actual channel 13
255         MONO_CHANNEL_16 = 0x00008000,//actual channel 14
256         MONO_CHANNEL_17 = 0x00010000,//actual channel 15
257         MONO_CHANNEL_18 = 0x00020000 //actual channel 16
258 }BlueAudioChannelDesc;
259
260
261 //----------------------------------------------------------------------------
262 /**<
263 Use this enumeraotor to set the type of pcm audio data.
264 */
265 typedef enum
266 {
267         AUDIO_CHANNEL_LOOPING_OFF               = 0x00000000, /**< deprecated not used any more */
268         AUDIO_CHANNEL_LOOPING                   = 0x00000001,/**< deprecated not used any more */
269         AUDIO_CHANNEL_LITTLEENDIAN              = 0x00000000, /**< if the audio data is little endian this flag must be set*/
270         AUDIO_CHANNEL_BIGENDIAN                 = 0x00000002,/**< if the audio data is big  endian this flag must be set*/
271         AUDIO_CHANNEL_OFFSET_IN_BYTES   = 0x00000004,/**< deprecated not used any more */
272         AUDIO_CHANNEL_16BIT                             = 0x00000008, /**< if the audio channel bit depth is 16 bits this flag must be set*/
273         AUDIO_CHANNEL_BLIP_PENDING              = 0x00000010,/**< deprecated not used any more */
274         AUDIO_CHANNEL_BLIP_COMPLETE             = 0x00000020,/**< deprecated not used any more */
275         AUDIO_CHANNEL_SELECT_CHANNEL    = 0x00000040,/**< deprecated not used any more */
276         AUDIO_CHANNEL_24BIT                             = 0x00000080/**< if the audio channel bit depth is 24 bits this flag must be set*/
277 } EAudioFlags;
278
279 /**
280 @desc Used to select Audio input source on new generation SD cards 
281 @remarks
282 This enumerator works only when used with ReadAudioSample function.
283 */
284 typedef enum
285 {
286         BLUE_AUDIO_AES =                0,                                      /** 8 channels of AES */
287         BLUE_AUDIO_ANALOG =             1,                                      /** 2 channels of analog audio */
288         BLUE_AUDIO_SDIA =               2,                                      /** deprecated, do not use */
289         BLUE_AUDIO_EMBEDDED =   BLUE_AUDIO_SDIA,        /** use BLUE_AUDIO_EMBEDDED for any embedded audio stream; the stream is associated with the SDK object (BlueVelvet4/BlueVelvetC) */
290         BLUE_AUDIO_SDIB =               3,                                      /** deprecated, do not use */
291         BLUE_AUDIO_AES_PAIR0 =  4,                                      /** deprecated, do not use */
292         BLUE_AUDIO_AES_PAIR1 =  5,                                      /** deprecated, do not use */
293         BLUE_AUDIO_AES_PAIR2 =  6,                                      /** deprecated, do not use */
294         BLUE_AUDIO_AES_PAIR3 =  7,                                      /** deprecated, do not use */
295         BLUE_AUDIO_SDIC =               8,                                      /** deprecated, do not use */
296         BLUE_AUDIO_SDID =               9,                                      /** deprecated, do not use */
297         BLUE_AUDIO_INVALID =    10
298 } Blue_Audio_Connector_Type;
299
300 typedef enum _EAudioRate
301 {
302         AUDIO_SAMPLE_RATE_48K=48000,
303         AUDIO_SAMPLE_RATE_96K=96000,
304         AUDIO_SAMPLE_RATE_UNKNOWN=-1
305 } EAudioRate;
306
307 /**<
308 @brief use this enumerator to define the color space of the video signal on the SDI cable
309 */
310 typedef enum _EConnectorSignalColorSpace
311 {
312         RGB_ON_CONNECTOR=0x00400000, /**< Use this enumerator if the colorspace of video data on the SDI cable is RGB <br/>
313                                                                                 When using dual link capture/playback , user can choose the 
314                                                                                 color space of the data. <br>
315                                                                                 In single link SDI the color space of the signal is always YUB*/
316         YUV_ON_CONNECTOR=0 /**<Use this enumerator if color space of video data on the SDI cable  is RGB.*/
317 }EConnectorSignalColorSpace;
318
319
320 /**<
321 @brief use this enumerator for controlling the dual link functionality.
322 */
323 typedef enum _EDualLinkSignalFormatType
324 {
325         Signal_FormatType_4224 =                        0,              /**< sets the card to work in  4:2:2:4 mode*/
326         Signal_FormatType_4444 =                        1,              /**< sets the card to work in  4:4:4 10 bit dual link mode*/
327         Signal_FormatType_444_10BitSDI =        Signal_FormatType_4444,
328         Signal_FormatType_444_12BitSDI =        0x4,    /**< sets the card to work in  4:4:4 12 bit dual link mode*/
329         Signal_FormatType_Independent_422 =     0x2,
330         Signal_FormatType_Key_Key =                     0x8000  /**< not used currently on epoch cards */
331         
332 }EDualLinkSignalFormatType;
333
334 enum ECardOperatingMode
335 {
336         CardOperatingMode_SingleLink =                  0x0,
337         CardOperatingMode_Independent_422 =             CardOperatingMode_SingleLink,
338         CardOperatingMode_DualLink =                    0x1,
339         CardOperatingMode_StereoScopic_422 =    0x3,
340         CardOperatingMode_Dependent_422 =               CardOperatingMode_StereoScopic_422,     /**< not used currently on epoch cards */
341         CardOperatingMode_DualLink_Dual3G =             0x4,
342 };
343
344 typedef enum _EPreDefinedColorSpaceMatrix
345 {
346         UNITY_MATRIX=0,
347         MATRIX_709_CGR=1,
348         MATRIX_RGB_TO_YUV_709_CGR=MATRIX_709_CGR,
349         MATRIX_709=2,
350         MATRIX_RGB_TO_YUV_709=MATRIX_709,
351         RGB_FULL_RGB_SMPTE=3,
352         MATRIX_601_CGR=4,
353         MATRIX_RGB_TO_YUV_601_CGR=MATRIX_601_CGR,
354         MATRIX_601=5,
355         MATRIX_RGB_TO_YUV_601=MATRIX_601,
356         MATRIX_SMPTE_274_CGR=6,
357         MATRIX_SMPTE_274=7,
358         MATRIX_VUYA=8,
359         UNITY_MATRIX_INPUT=9,
360         MATRIX_YUV_TO_RGB_709_CGR=10,
361         MATRIX_YUV_TO_RGB_709=11,
362         RGB_SMPTE_RGB_FULL=12,
363         MATRIX_YUV_TO_RGB_601_CGR=13,
364         MATRIX_YUV_TO_RGB_601=14,
365         MATRIX_USER_DEFINED=15,
366 }EPreDefinedColorSpaceMatrix;
367
368 /**< 
369 @brief this enumerator contains the status of the driver video/hanc fifo 
370 */
371 typedef enum
372 {
373         BLUE_FIFO_CLOSED=0, /**< Fifo has not been initialized*/
374         BLUE_FIFO_STARTING=1,/**< Fifo is starting */
375         BLUE_FIFO_RUNNING=2,/**< Fifo is running */
376         BLUE_FIFO_STOPPING=3,/**< Fifo is in the process of stopping */
377         BLUE_FIFO_PASSIVE=5,/**< Fifo is currently stopped or not active*/
378         BLUE_FIFO_STATUS_INVALID=10
379 }BlueVideoFifoStatus;
380
381 /**<
382 @brief use this enumerator to define the data range of the RGB video frame data.
383 */
384 typedef enum _ERGBDataRange
385 {
386         CGR_RANGE=0, /**<       In this mode RGB data expected by the user (capture) or provided by the user(playback) is 
387                                                 in the range of 0-255(8 bit) or 0-1023(10 bit0).<br/>
388                                                 driver uses this information to choose the appropriate YUV conversion matrices.*/
389         SMPTE_RANGE=1  /**<     In this mode RGB data expected by the user (capture) or provided by the user(playback) is 
390                                                 in the range of 16-235(8 bit) or 64-940(10 bit0).<br/>
391                                                 driver uses this information to choose the appropriate YUV conversion matrices.*/
392 }ERGBDataRange;
393
394 typedef enum _EHD_XCONNECTOR_MODE
395 {
396         SD_SDI=1,
397         HD_SDI=2
398 }EHD_XCONNECTOR_MODE;
399
400 /**< @brief  this enumerator can be used to set the image orienatation of the frame.                                                    
401 */
402 typedef enum _EImageOrientation
403 {
404         ImageOrientation_Normal=0,      /**< in this configuration , frame is top to bottom and left to right */
405         ImageOrientation_VerticalFlip=1, /**< in this configuration frame is bottom to top and left to right*/
406         ImageOrientation_Invalid=2,     
407 }EImageOrientation;
408
409 /**< @brief this enumerator defines the reference signal source that can be used with bluefish cards
410 */
411 typedef enum _EBlueGenlockSource
412 {
413         BlueGenlockBNC =                0,                      /** Genlock is used as reference signal source */
414         BlueSDIBNC =                    0x10000,        /** SDI input B  is used as reference signal source */
415         BlueSDI_B_BNC =                 BlueSDIBNC,
416         BlueSDI_A_BNC =                 0x20000,        /** SDI input A  is used as reference signal source */
417         BlueAnalog_BNC =                0x40000,        /** Analog input is used as reference signal source */
418         BlueSoftware =                  0x80000,
419         BlueFreeRunning =               BlueSoftware,
420         BlueGenlockAux =                0x100000,       /** auxiliary genlock connector on Epoch Neutron cards */
421         BlueInterlock =                 0x200000,       /** interlock connector on Epoch Neutron cards */
422 }EBlueGenlockSource;
423
424
425 typedef enum _EBlueVideoChannel 
426 {
427         BLUE_VIDEOCHANNEL_A=0,
428         BLUE_VIDEO_OUTPUT_CHANNEL_A=BLUE_VIDEOCHANNEL_A,
429         
430         BLUE_VIDEOCHANNEL_B=1,
431         BLUE_VIDEO_OUTPUT_CHANNEL_B=BLUE_VIDEOCHANNEL_B,
432         
433         BLUE_VIDEOCHANNEL_C=2,
434         BLUE_VIDEO_INPUT_CHANNEL_A=BLUE_VIDEOCHANNEL_C,
435
436         BLUE_VIDEOCHANNEL_D=3,
437         BLUE_VIDEO_INPUT_CHANNEL_B=BLUE_VIDEOCHANNEL_D,
438
439         BLUE_VIDEOCHANNEL_E=4,
440         BLUE_VIDEO_INPUT_CHANNEL_C=BLUE_VIDEOCHANNEL_E,
441
442         BLUE_VIDEOCHANNEL_F=5,
443         BLUE_VIDEO_INPUT_CHANNEL_D=BLUE_VIDEOCHANNEL_F,
444
445         BLUE_VIDEOCHANNEL_G=6,
446         BLUE_VIDEO_OUTPUT_CHANNEL_C=BLUE_VIDEOCHANNEL_G,
447
448         BLUE_VIDEOCHANNEL_H=7,
449         BLUE_VIDEO_OUTPUT_CHANNEL_D=BLUE_VIDEOCHANNEL_H,
450         
451         BLUE_OUTPUT_MEM_MODULE_A=BLUE_VIDEO_OUTPUT_CHANNEL_A,
452         BLUE_OUTPUT_MEM_MODULE_B=BLUE_VIDEO_OUTPUT_CHANNEL_B,
453         BLUE_INPUT_MEM_MODULE_A=BLUE_VIDEO_INPUT_CHANNEL_A,
454         BLUE_INPUT_MEM_MODULE_B=BLUE_VIDEO_INPUT_CHANNEL_B,
455         //BLUE_JETSTREAM_SCALER_MODULE_0=0x10,
456         //BLUE_JETSTREAM_SCALER_MODULE_1=0x11,
457         //BLUE_JETSTREAM_SCALER_MODULE_2=0x12,
458         //BLUE_JETSTREAM_SCALER_MODULE_3=0x13,
459
460         BLUE_VIDEOCHANNEL_INVALID=30
461 }EBlueVideoChannel;
462
463 typedef enum _EBlueVideoRouting
464 {
465         BLUE_VIDEO_LINK_INVALID=0,
466         BLUE_SDI_A_LINK1=4,
467         BLUE_SDI_A_LINK2=5,
468         BLUE_SDI_B_LINK1=6,
469         BLUE_SDI_B_LINK2=7,
470         BLUE_ANALOG_LINK1=8,
471         BLUE_ANALOG_LINK2=9,
472         BLUE_SDI_A_SINGLE_LINK=BLUE_SDI_A_LINK1,
473         BLUE_SDI_B_SINGLE_LINK=BLUE_SDI_B_LINK1,
474         BLUE_ANALOG_SINGLE_LINK=BLUE_ANALOG_LINK1
475
476 }EBlueVideoRouting;
477
478 typedef enum
479 {
480         BLUE_FIFO_NULL_ATTRIBUTE=0x0,
481         BLUE_FIFO_ECHOPORT_ENABLED=0x1,
482         BLUE_FIFO_STEPMODE = 0x2,
483         BLUE_FIFO_LOOPMODE = 0x4
484 }BlueVideoFifo_Attributes;
485
486 typedef enum _BlueAudioOutputDest
487 {
488         Blue_AnalogAudio_Output=0x0,
489         Blue_AES_Output=0x80000000,
490         Blue_Emb_Output=0x40000000,
491 }BlueAudioOutputDest;
492
493
494 /**<@brief this enumerator is not used need to be removed*/
495 typedef enum _BlueAudioInputSource
496 {
497         Blue_AES=0x10,
498         Blue_AnalogAudio=0x20,
499         Blue_SDIA_Embed=0x40,
500         Blue_SDIB_Embed=0x80,
501 }BlueAudioInputSource;
502
503 typedef enum _EBlueConnectorIdentifier
504 {
505         BLUE_CONNECTOR_INVALID = -1,
506         
507         // BNC connectors in order from top to bottom of shield
508         BLUE_CONNECTOR_BNC_A = 0,    // BNC closest to top of shield
509         BLUE_CONNECTOR_BNC_B,
510         BLUE_CONNECTOR_BNC_C,
511         BLUE_CONNECTOR_BNC_D,
512         BLUE_CONNECTOR_BNC_E,
513         BLUE_CONNECTOR_BNC_F,
514         BLUE_CONNECTOR_GENLOCK,
515         
516         BLUE_CONNECTOR_ANALOG_VIDEO_1 = 100,
517         BLUE_CONNECTOR_ANALOG_VIDEO_2,
518         BLUE_CONNECTOR_ANALOG_VIDEO_3,
519         BLUE_CONNECTOR_ANALOG_VIDEO_4,
520         BLUE_CONNECTOR_ANALOG_VIDEO_5,
521         BLUE_CONNECTOR_ANALOG_VIDEO_6,
522
523         BLUE_CONNECTOR_DVID_1 = 200,
524         BLUE_CONNECTOR_SDI_OUTPUT_A= BLUE_CONNECTOR_DVID_1,
525         BLUE_CONNECTOR_DVID_2,
526         BLUE_CONNECTOR_SDI_OUTPUT_B= BLUE_CONNECTOR_DVID_2,
527         BLUE_CONNECTOR_DVID_3,
528         BLUE_CONNECTOR_SDI_INPUT_A= BLUE_CONNECTOR_DVID_3,
529         BLUE_CONNECTOR_DVID_4,
530         BLUE_CONNECTOR_SDI_INPUT_B= BLUE_CONNECTOR_DVID_4,
531         BLUE_CONNECTOR_DVID_5,
532         BLUE_CONNECTOR_SDI_OUTPUT_C,
533         BLUE_CONNECTOR_SDI_OUTPUT_D,
534
535         BLUE_CONNECTOR_AES = 300,
536         BLUE_CONNECTOR_ANALOG_AUDIO_1,
537         BLUE_CONNECTOR_ANALOG_AUDIO_2,
538
539         BLUE_CONNECTOR_DVID_6,
540         BLUE_CONNECTOR_SDI_INPUT_C= BLUE_CONNECTOR_DVID_6,
541         BLUE_CONNECTOR_DVID_7,
542         BLUE_CONNECTOR_SDI_INPUT_D= BLUE_CONNECTOR_DVID_7,
543
544         //BLUE_CONNECTOR_RESOURCE_BLOCK=0x400,
545         //BLUE_CONNECTOR_JETSTREAM_SCALER_0=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_JETSTREAM_SCALER_MODULE_0),
546         //BLUE_CONNECTOR_JETSTREAM_SCALER_1=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_JETSTREAM_SCALER_MODULE_1),
547         //BLUE_CONNECTOR_JETSTREAM_SCALER_2=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_JETSTREAM_SCALER_MODULE_2),
548         //BLUE_CONNECTOR_JETSTREAM_SCALER_3=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_JETSTREAM_SCALER_MODULE_3),
549
550         //BLUE_CONNECTOR_OUTPUT_MEM_MODULE_A=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_OUTPUT_MEM_MODULE_A),
551         //BLUE_CONNECTOR_OUTPUT_MEM_MODULE_B=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_OUTPUT_MEM_MODULE_B),
552         //BLUE_CONNECTOR_INPUT_MEM_MODULE_A=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_INPUT_MEM_MODULE_A),
553         //BLUE_CONNECTOR_INPUT_MEM_MODULE_B=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_INPUT_MEM_MODULE_B),
554         //
555 }EBlueConnectorIdentifier;
556
557 typedef enum _EBlueConnectorSignalDirection
558 {
559         BLUE_CONNECTOR_SIGNAL_INVALID=-1,
560         BLUE_CONNECTOR_SIGNAL_INPUT=0,
561         BLUE_CONNECTOR_SIGNAL_OUTPUT=1,
562 }EBlueConnectorSignalDirection;
563
564 typedef enum _EBlueDynamicConnectorType
565 {
566         BLUE_DYNAMIC_CONNECTOR_TYPE_INVALID =   0,
567         BLUE_DYNAMIC_CONNECTOR_TYPE_OUTPUT =    1,
568         BLUE_DYNAMIC_CONNECTOR_TYPE_INPUT =             2,
569         BLUE_DYNAMIC_CONNECTOR_TYPE_GENLOCK =   3,
570 }EBlueDynamicConnectorType;
571
572 typedef enum _EBlueConnectorProperty
573 {
574         BLUE_INVALID_CONNECTOR_PROPERTY = -1,
575
576         //signal property
577         BLUE_CONNECTOR_PROP_INPUT_SIGNAL=0,
578         BLUE_CONNECTOR_PROP_OUTPUT_SIGNAL=1,
579
580         // Video output
581         BLUE_CONNECTOR_PROP_SDI = 0,
582         BLUE_CONNECTOR_PROP_YUV_Y,
583         BLUE_CONNECTOR_PROP_YUV_U,
584         BLUE_CONNECTOR_PROP_YUV_V,
585         BLUE_CONNECTOR_PROP_RGB_R,
586         BLUE_CONNECTOR_PROP_RGB_G,
587         BLUE_CONNECTOR_PROP_RGB_B,
588         BLUE_CONNECTOR_PROP_CVBS,
589         BLUE_CONNECTOR_PROP_SVIDEO_Y,
590         BLUE_CONNECTOR_PROP_SVIDEO_C,
591         
592         // Audio output
593         BLUE_CONNECTOR_PROP_AUDIO_AES = 0x2000,
594         BLUE_CONNECTOR_PROP_AUDIO_EMBEDDED,
595         BLUE_CONNECTOR_PROP_AUDIO_ANALOG,
596
597         
598         BLUE_CONNECTOR_PROP_SINGLE_LINK=0x3000,
599         BLUE_CONNECTOR_PROP_DUALLINK_LINK_1,
600         BLUE_CONNECTOR_PROP_DUALLINK_LINK_2,
601         BLUE_CONNECTOR_PROP_DUALLINK_LINK,
602
603         BLUE_CONNECTOR_PROP_STEREO_MODE_SIDE_BY_SIDE,
604         BLUE_CONNECTOR_PROP_STEREO_MODE_TOP_DOWN,
605         BLUE_CONNECTOR_PROP_STEREO_MODE_LINE_BY_LINE,
606
607 }EBlueConnectorProperty;
608
609 /*
610 typedef enum _BLUE_AUDIOINPUT_SOURCE
611 {
612         BLUE_AES_AUDIO_INPUT=0x10000,
613         BLUE_ANALOG_AUDIO_INPUT=0x20000,
614         BLUE_SDIA_AUDIO_INPUT=0x30000,
615         BLUE_SDIB_AUDIO_INPUT=0x40000
616 }BLUE_AUDIOINPUT_SOURCE;
617 */
618 /**
619 @desc use the values in this enumerator for controlling card property
620 */
621 typedef enum _EBlueCardProperty
622 {
623         VIDEO_DUAL_LINK_OUTPUT=0,/**<  Use this property to enable/diable cards dual link output property*/
624         VIDEO_DUAL_LINK_INPUT=1,/**<  Use this property to enable/diable cards dual link input property*/
625         VIDEO_DUAL_LINK_OUTPUT_SIGNAL_FORMAT_TYPE=2, /**<Use this property to select signal format type that should be used 
626                                                         when dual link output is enabled. Possible values this property can
627                                                         accept is defined in the enumerator EDualLinkSignalFormatType
628                                                                                                 */
629         VIDEO_DUAL_LINK_INPUT_SIGNAL_FORMAT_TYPE=3,/**< Use this property to select signal format type that should be used 
630                                                 when dual link input is enabled. Possible values this property can
631                                                 accept is defined in the enumerator EDualLinkSignalFormatType
632                                                 */
633         VIDEO_OUTPUT_SIGNAL_COLOR_SPACE=4,/**<  Use this property to select color space of the signal when dual link output is set to 
634                                         use 4:4:4/4:4:4:4 signal format type. Possible values this property can
635                                         accept is defined in the enumerator EConnectorSignalColorSpace
636                                         */
637         VIDEO_INPUT_SIGNAL_COLOR_SPACE=5,/**<   Use this property to select color space of the signal when dual link input is set to 
638                                         use 4:4:4/4:4:4:4 signal format type. Possible values this property can
639                                         accept is defined in the enumerator EConnectorSignalColorSpace
640                                         */
641         VIDEO_MEMORY_FORMAT=6, /**<Use this property to ser the pixel format that should be used by 
642                         video output channels.  Possible values this property can
643                         accept is defined in the enumerator EMemoryFormat
644                         */      
645         VIDEO_MODE=7,/**<Use this property to set the video mode that should be used by 
646                         video output channels.  Possible values this property can
647                         accept is defined in the enumerator EVideoMode
648                         */      //
649         VIDEO_UPDATE_TYPE=8,/**<Use this property to set the framestore update type that should be used by 
650                         video output channels.  Card can update video framestore at field/frame rate.
651                         Possible values this property can accept is defined in the enumerator EUpdateMethod
652                         */      
653         VIDEO_ENGINE=9,
654         VIDEO_IMAGE_ORIENTATION=10,/**< Use this property to set the image orientation of the video output framestore.
655                                 This property must be set before frame is transferred to on card memory using 
656                                 DMA transfer functions(system_buffer_write_async). It is recommended to use 
657                                 vertical flipped image orientation only on RGB pixel formats.
658                                 Possible values this property can accept is defined in the enumerator EImageOrientation
659                                 */
660         VIDEO_USER_DEFINED_COLOR_MATRIX=11,
661         VIDEO_PREDEFINED_COLOR_MATRIX=12,//EPreDefinedColorSpaceMatrix
662         VIDEO_RGB_DATA_RANGE=13,                /**<    Use this property to set the data range of RGB pixel format, user can specify 
663                                                                                         whether the RGB data is in either SMPTE or CGR range. Based on this information 
664                                                                                         driver is decide which color matrix should be used.
665                                                                                         Possible values this property can accept is defined in the enumerator ERGBDataRange
666                                                                                         For SD cards this property will set the input and the output to the specified value.
667                                                                                         For Epoch/Create/SuperNova cards this property will only set the output to the specified value.
668                                                                                         For setting the input on Epoch/Create/SuperNova cards see EPOCH_VIDEO_INPUT_RGB_DATA_RANGE*/
669         VIDEO_KEY_OVER_BLACK=14,                /**< this property is deprecated and no longer supported on epoch/create range of cards.*/      
670         VIDEO_KEY_OVER_INPUT_SIGNAL=15, /**< this property is deprecated and no longer supported on epoch/create range of cards.*/      
671         VIDEO_SET_DOWN_CONVERTER_VIDEO_MODE=16,/**< this property is deprecated and no longer supported on epoch/create range of cards.
672                                                 EHD_XCONNECTOR_MODE
673                                                 */
674         VIDEO_LETTER_BOX=17,
675         VIDEO_PILLOR_BOX_LEFT=18,
676         VIDEO_PILLOR_BOX_RIGHT=19,
677         VIDEO_PILLOR_BOX_TOP=20,
678         VIDEO_PILLOR_BOX_BOTTOM=21,
679         VIDEO_SAFE_PICTURE=22,
680         VIDEO_SAFE_TITLE=23,
681         VIDEO_INPUT_SIGNAL_VIDEO_MODE=24,       /**< Use this property to retreive the video input signal information on the 
682                                                                                         default video input channel used by that SDK object.
683                                                                                         When calling SetCardProperty with a valid video mode on this property, the SDK
684                                                                                         will will use this video mode "Hint" if the card buffers are set up despite there being a valid 
685                                                                                         input signal; the card buffers will be set up when calling one of these card properties:
686                                                                                                 VIDEO_INPUT_MEMORY_FORMAT
687                                                                                                 VIDEO_INPUT_UPDATE_TYPE
688                                                                                                 VIDEO_INPUT_ENGINE
689                                                                                         Note: QueryCardProperty(VIDEO_INPUT_SIGNAL_VIDEO_MODE) will still return the actual video input signal
690                                                                                 */
691         VIDEO_COLOR_MATRIX_MODE=25,
692         VIDEO_OUTPUT_MAIN_LUT=26,/**< this property is deprecated and no longer supported on epoch/create range of cards.*/
693         VIDEO_OUTPUT_AUX_LUT=27,/**< this property is deprecated and no longer supported on epoch/create range of cards.*/
694         VIDEO_LTC=28,           /**< this property is deprecated and no longer supported on epoch/create range of cards. To retreive/ outputting 
695                                 LTC information you can use the HANC decoding and encoding functions.*/
696         VIDEO_GPIO=29,  
697         VIDEO_PLAYBACK_FIFO_STATUS=30, /**< This property can be used to retreive how many frames are bufferd in the video playback fifo.*/
698         RS422_RX_BUFFER_LENGTH=31,
699         RS422_RX_BUFFER_FLUSH=32,
700         VIDEO_INPUT_UPDATE_TYPE=33,/**< Use this property to set the framestore update type that should be used by 
701                                 video input  channels.  Card can update video framestore at field/frame rate.
702                                 Possible values this property can accept is defined in the enumerator EUpdateMethod
703                                                                         */      
704         VIDEO_INPUT_MEMORY_FORMAT=34,/**<Use this property to set the pixel format that should be used by 
705                                         video input channels when it is capturing a frame from video input source.  
706                                         Possible values this property can accept is defined in the enumerator EMemoryFormat
707                                                                         */      
708         VIDEO_GENLOCK_SIGNAL=35,        /**< Use this property to retrieve video signal of the reference source that is used by the card.
709                                                                         This can also be used to select the reference signal source that should be used.
710                                                                         See application note AN004_Genlock.pdf for more information */
711         AUDIO_OUTPUT_PROP=36,   /**< this can be used to route PCM audio data onto respective audio output connectors. */
712         AUDIO_CHANNEL_ROUTING=AUDIO_OUTPUT_PROP,
713         AUDIO_INPUT_PROP=37,            /**<    Use this property to select audio input source that should be used when doing an audio capture.
714                                                                                 Possible values this property can accept is defined in the enumerator Blue_Audio_Connector_Type. */
715         VIDEO_ENABLE_LETTERBOX=38,
716         VIDEO_DUALLINK_OUTPUT_INVERT_KEY_COLOR=39,/**< this property is deprecated and no longer supported on epoch/create range of cards.*/
717         VIDEO_DUALLINK_OUTPUT_DEFAULT_KEY_COLOR=40,/**< this property is deprecated and no longer supported on epoch/create range of cards.*/
718         VIDEO_BLACKGENERATOR=41, /**< Use this property to control the black generator on the video output channel.
719                                                          */
720         VIDEO_INPUTFRAMESTORE_IMAGE_ORIENTATION=42,
721         VIDEO_INPUT_SOURCE_SELECTION=43, /**<   The video input source that should be used by the SDK default video input channel 
722                                         can be configured using this property.  
723                                         Possible values this property can accept is defined in the enumerator EBlueConnectorIdentifier.
724                                         */
725         DEFAULT_VIDEO_OUTPUT_CHANNEL=44,
726         DEFAULT_VIDEO_INPUT_CHANNEL=45,
727         VIDEO_REFERENCE_SIGNAL_TIMING=46,
728         EMBEDEDDED_AUDIO_OUTPUT=47, /**< the embedded audio output property can be configured using this property.
729                                         Possible values this property can accept is defined in the enumerator EBlueEmbAudioOutput.
730                                         */
731         EMBEDDED_AUDIO_OUTPUT=EMBEDEDDED_AUDIO_OUTPUT,
732         VIDEO_PLAYBACK_FIFO_FREE_STATUS=48, /**< this will return the number of free buffer in the fifo. 
733                                         If the video engine  is framestore this will give you the number of buffers that the framestore mode 
734                                         can you use with that video output channel.*/
735         VIDEO_IMAGE_WIDTH=49,           /**< selective output DMA: see application note AN008_SelectiveDMA.pdf for more details */
736         VIDEO_IMAGE_HEIGHT=50,          /**< selective output DMA: see application note AN008_SelectiveDMA.pdf for more details */
737         VIDEO_SELECTIVE_OUTPUT_DMA_DST_PITCH = VIDEO_IMAGE_WIDTH,       //pitch (bytes per line) of destination buffer (card memory)
738         VIDEO_SELECTIVE_OUTPUT_DMA_SRC_LINES = VIDEO_IMAGE_HEIGHT,      //number of video lines to extract from source image (system memory)
739         VIDEO_SCALER_MODE=51,
740         AVAIL_AUDIO_INPUT_SAMPLE_COUNT=52,
741         VIDEO_PLAYBACK_FIFO_ENGINE_STATUS=53,   /**< this will return the playback fifo status. The values returned by this property 
742                                                 are defined in the enumerator BlueVideoFifoStatus.
743                                                 */      
744         VIDEO_CAPTURE_FIFO_ENGINE_STATUS=54,    /**< this will return the capture  fifo status. 
745                                                 The values returned by this property are defined in the enumerator BlueVideoFifoStatus.
746                                                 */
747         VIDEO_2K_1556_PANSCAN=55,/**< this property is deprecated and no longer supported on epoch/create range of cards.*/
748         VIDEO_OUTPUT_ENGINE=56, /**< Use this property to set the video engine of the video output channels.
749                                 Possible values this property can accept is defined in the enumerator EEngineMode 
750                                 */
751         VIDEO_INPUT_ENGINE=57, /**< Use this property to set the video engine of the video input channels.
752                                 Possible values this property can accept is defined in the enumerator EEngineMode 
753                                 */
754         BYPASS_RELAY_A_ENABLE=58, /**< use this property to control the bypass relay on SDI A output.*/
755         BYPASS_RELAY_B_ENABLE=59, /**< use this property to control the bypass relay on SDI B output.*/
756         VIDEO_PREMULTIPLIER=60,
757         VIDEO_PLAYBACK_START_TRIGGER_POINT=61, /**< Using this property you can instruct the driver to start the 
758                                                 video playback fifo on a particular video output field count.
759                                                 Normally video playback fifo is started on the next video interrupt after 
760                                                 the video_playback_start call.*/
761         GENLOCK_TIMING=62,
762         VIDEO_IMAGE_PITCH=63,   /**< selective output DMA: see application note AN008_SelectiveDMA.pdf for more details */
763         VIDEO_IMAGE_OFFSET=64,  /**< currently not used; selective output DMA: see application note AN008_SelectiveDMA.pdf for more details */
764         VIDEO_SELECTIVE_OUTPUT_DMA_SRC_PITCH = VIDEO_IMAGE_PITCH,       //pitch (bytes per line) of source buffer (system memory)
765         VIDEO_INPUT_IMAGE_WIDTH=65,             /**< selective input DMA: see application note AN008_SelectiveDMA.pdf for more details */
766         VIDEO_INPUT_IMAGE_HEIGHT=66,    /**< selective input DMA: see application note AN008_SelectiveDMA.pdf for more details */
767         VIDEO_INPUT_IMAGE_PITCH=67,             /**< selective input DMA: see application note AN008_SelectiveDMA.pdf for more details */
768         VIDEO_INPUT_IMAGE_OFFSET=68,    /**< currently not used; selective input DMA: see application note AN008_SelectiveDMA.pdf for more details */
769         VIDEO_SELECTIVE_INPUT_DMA_SRC_PITCH = VIDEO_INPUT_IMAGE_WIDTH,  //pitch (bytes per line) of source buffer (card memory)
770         VIDEO_SELECTIVE_INPUT_DMA_SRC_LINES = VIDEO_INPUT_IMAGE_HEIGHT, //number of video lines to extract from source image (card memory)
771         VIDEO_SELECTIVE_INPUT_DMA_DST_PITCH = VIDEO_INPUT_IMAGE_PITCH,  //pitch (bytes per line) of destination buffer (system memory)
772         TIMECODE_RP188=69,      /**< this property is deprecated and no longer supported on epoch/create range of cards.*/
773         BOARD_TEMPERATURE=70,/**<This property can be used to retreive the Board temperature, core temperature and 
774                                 RPM of the Fan on epoch/create range of cards.<br/>
775                                 Use the macro's EPOCH_CORE_TEMP ,EPOCH_BOARD_TEMP and EPOCH_FAN_SPEED
776                                 to retireive the respective values from the property.<br/>                                                      
777                                                 */      
778         MR2_ROUTING=71, /**< Use this property to control the MR2 functionlity on epoch range of cards.
779                         Use the following macro with this property.<br/>
780                         1) EPOCH_SET_ROUTING --> for setting the source, destination and link type of the routing connection,<br/>
781                         2) EPOCH_ROUTING_GET_SRC_DATA --> for getting the routing source.<br/>
782                                                         The possible source and destination elements supported by the routing matrix are defined in the 
783                                                         enumerator EEpochRoutingElements.<br/>
784                         */
785         SAVEAS_POWERUP_SETTINGS=72,
786         VIDEO_CAPTURE_AVAIL_BUFFER_COUNT=73, /**< This property will return the number of captured frame avail in the fifo at present.
787                                                 If the video engine  is framestore this will give you the number of buffers that the framestore mode 
788                                                 can you use with that video input channel */
789         EPOCH_APP_WATCHDOG_TIMER=74,/**< Use this property to control the application  watchdog timer functionality. 
790                                         Possible values this property can accept is defined in the enumerator enum_blue_app_watchdog_timer_prop.
791                                 */      
792         EPOCH_RESET_VIDEO_INPUT_FIELDCOUNT=75, /**< Use this property to reset the field count on both the 
793                                                 video channels of the card. You can pass the value that 
794                                                 should be used as starting fieldcount after the reset.
795                                                 This property can be used to keep track  sync between left and right signal 
796                                                 when you are capturing in stereoscopic mode.
797                                         */
798         EPOCH_RS422_PORT_FLAGS=76,/**<  Use this property to set the master/slave property of the RS422 ports.
799                                 Possible values this property can accept is defined in the enumerator enum_blue_rs422_port_flags.
800                                 */
801         EPOCH_DVB_ASI_INPUT_TIMEOUT=77, /**< Current DVB ASI input firmware does not support this property in hardware,
802                                         this is a future addition.
803                                         Use this property to set the timeout  of the DVB ASI input stream. 
804                                         timeout is specified in  milliseconds.If hardware did not get the required no of                
805                                         packets( specified using EPOCH_DVB_ASI_INPUT_LATENCY_PACKET_COUNT)
806                                         within the period specified in the timeout, hardware would generate a video input interrupt
807                                         and it would be safe to read the dvb asi packet from the card.
808                                         */
809         EPOCH_DVB_ASI_INPUT_PACKING_FORMAT=78, /**< Use this property to specify the packing method that should be used 
810                                                 when capturing DVB ASI packets.
811                                                 The possible packing methods are defined in the enumerator enum_blue_dvb_asi_packing_format.*/
812         EPOCH_DVB_ASI_INPUT_LATENCY_PACKET_COUNT=79, /**< Use this property to set  how many asi packets should be captured by the card , before it 
813                                                         notifies the driver of available data using video input interrupt.<br/>
814                                                         */
815         VIDEO_PLAYBACK_FIFO_CURRENT_FRAME_UNIQUEID=80, /**< This property can be used to query the current unique id of 
816                                                         the frame that is being displayed currently by the video output channel. This 
817                                                         property is only usefull in the context of video fifo.<br/>
818                                                         You get a uniqueid when you present a frame using video_playback_present function.
819                                                         Alternative ways to get this information are <br/>
820                                                         1) using blue_wait_video_sync_async , the member current_display_frame_uniqueid contains the same information<br/>
821                                                         2) using wait_video_output_sync function on epoch cards, if 
822                                                         the flag UPD_FMT_FLAG_RETURN_CURRENT_UNIQUEID is appended with 
823                                                         either UPD_FMT_FRAME or UPD_FMT_FIELD , the return value of 
824                                                         the function wait_video_output_sync woukd contain the current display
825                                                         frames uniqueid.<br/>*/
826
827         EPOCH_DVB_ASI_INPUT_GET_PACKET_SIZE = 81,/**< use this property to get the size of each asi transport stream packet
828                                                         (whether it is 188 or 204.*/
829         EPOCH_DVB_ASI_INPUT_PACKET_COUNT = 82,/**< this property would give you the number of packets captured during the last 
830                                                 interrupt time frame. For ASI interrupt is generated if 
831                                                 hardware captured the requested number of packets or it hit the 
832                                                 timeout value
833                                                 */
834         EPOCH_DVB_ASI_INPUT_LIVE_PACKET_COUNT = 83,/**< this property would give you the number of packets that
835                                                 is being captured during the current interrupt time frame. 
836                                                 For ASI interrupt is generated when has hardware captured the 
837                                                 requested number of packets specified using  
838                                                 EPOCH_DVB_ASI_INPUT_LATENCY_PACKET_COUNT property.
839                                                 */
840         EPOCH_DVB_ASI_INPUT_AVAIL_PACKETS_IN_FIFO = 84,/**< This property would return the number of ASI packets 
841                                                         that has been captured into card memory , that
842                                                         can be retreived.
843                                                         This property is only valid when the video input 
844                                                         channel is being used in FIFO modes.
845                                                 */
846         EPOCH_ROUTING_SOURCE_VIDEO_MODE=VIDEO_SCALER_MODE,/**< Use this property to change the video mode that scaler should be set to.
847                                                         USe the macro SET_EPOCH_SCALER_MODE when using this property, as this macro 
848                                                         would allow you to select which one of the scaler blocks video mode should be updated.
849                                                         */
850         EPOCH_AVAIL_VIDEO_SCALER_COUNT=85,/**< This property would return available scaler processing block available on the card.*/
851         EPOCH_ENUM_AVAIL_VIDEO_SCALERS_ID=86,/**< You can enumerate the available scaler processing block available on the card using this property.
852                                         You pass in the index value as input parameter to get the scaler id that should be used.
853                                         Applications are recommended to use this property to query the available scaler id's 
854                                         rather than hardcoding a scaler id. As the scaler id's that you can use would vary based on
855                                         whether you have VPS0 or VPS1 boards loaded on the base board.
856                                         */
857         EPOCH_ALLOCATE_VIDEO_SCALER=87, /**< This is just a helper property for applications who need to use more than one scaler
858                                         and just wants to query the next available scaler from the driver pool, rather than hardcoding 
859                                         each thread to use a particular scaler.
860                                         Allocate a free scaler from the available scaler pool.
861                                         User has got the option to specify whether they want to use the scaler for 
862                                         use with a single link or dual link stream */
863         EPOCH_RELEASE_VIDEO_SCALER=88, /**< Release the previously allocated scaler processing block back to the free pool.
864                                         If the user passes in a value of 0, all the allocated scaler blocks in the driver are released.
865                                         So effectively
866                                         */
867         EPOCH_DMA_CARDMEMORY_PITCH=89,
868         EPOCH_OUTPUT_CHANNEL_AV_OFFSET=90,
869         EPOCH_SCALER_CHANNEL_MUX_MODE=91,
870         EPOCH_INPUT_CHANNEL_AV_OFFSET=92,
871         EPOCH_AUDIOOUTPUT_MANUAL_UCZV_GENERATION=93,    /* ASI firmware only */
872         EPOCH_SAMPLE_RATE_CONVERTER_BYPASS=94,          /** bypasses the sample rate converter for AES audio; only turn on for Dolby-E support
873                                                                                                  *      pass in a flag to signal which audio stereo pair should be bypassed:
874                                                                                                  *      bit 0:  AES channels 0 and 1
875                                                                                                  *      bit 1:  AES channels 2 and 3
876                                                                                                  *      bit 2:  AES channels 4 and 5
877                                                                                                  *      bit 3:  AES channels 6 and 7
878                                                                                                  *      For example: bypass the sample rate converter for channels 0 to 3: flag = 0x3;  */
879         EPOCH_GET_PRODUCT_ID=95,                                                /* returns the enum for the firmware type EEpochFirmwareProductID */
880         EPOCH_GENLOCK_IS_LOCKED=96,
881         EPOCH_DVB_ASI_OUTPUT_PACKET_COUNT=97,                   /* ASI firmware only */
882         EPOCH_DVB_ASI_OUTPUT_BIT_RATE=98,                               /* ASI firmware only */
883         EPOCH_DVB_ASI_DUPLICATE_OUTPUT_A=99,                    /* ASI firmware only */
884         EPOCH_DVB_ASI_DUPLICATE_OUTPUT_B=100,                   /* ASI firmware only */
885         EPOCH_SCALER_HORIZONTAL_FLIP=101,                               /* see SideBySide_3D sample application */
886         EPOCH_CONNECTOR_DIRECTION=102,                                  /* see application notes */
887         EPOCH_AUDIOOUTPUT_VALIDITY_BITS=103,                    /* ASI firmware only */
888         EPOCH_SIZEOF_DRIVER_ALLOCATED_MEMORY=104,       /* video buffer allocated in Kernel space; accessible in userland via system_buffer_map() */
889         INVALID_VIDEO_MODE_FLAG=105,                            /* returns the enum for VID_FMT_INVALID that this SDK/Driver was compiled with;
890                                                                                                 it changed between 5.9.x.x and 5.10.x.x driver branch and has to be handled differently for
891                                                                                                 each driver if the application wants to use the VID_FMT_INVALID flag and support both driver branches */
892         EPOCH_VIDEO_INPUT_VPID=106,                                     /* returns the VPID for the current video input signal. Input value is of type EBlueConnectorIdentifier */
893         EPOCH_LOW_LATENCY_DMA=107,                                      /* deprecated; use new feature EPOCH_SUBFIELD_INPUT_INTERRUPTS instead */
894         EPOCH_VIDEO_INPUT_RGB_DATA_RANGE=108,
895         EPOCH_DVB_ASI_OUTPUT_PACKET_SIZE=109,           /* firmware supports either 188 or 204 bytes per ASI packet; set to either
896                                                                                                         enum_blue_dvb_asi_packet_size_188_bytes or
897                                                                                                         enum_blue_dvb_asi_packet_size_204_bytes */
898         EPOCH_SUBFIELD_INPUT_INTERRUPTS=110,            /* similar to the EPOCH_LOW_LATENCY_DMA card feature, but this doesn't influence the DMA;
899                                                                                                         it simply adds interrupts between the frame/field interrupts that trigger when a corresponding
900                                                                                                         video chunk has been captured
901                                                                                                         required minimum driver: 5.10.1.8*/
902         EPOCH_AUDIOOUTPUT_METADATA_SETTINGS = 111,      /* Use the EAudioMetaDataSettings enumerator to change the audio output metadata settings */
903         EPOCH_HD_SDI_TRANSPORT = 112,                           /* output only: available modes are defined in the enum EHdSdiTransport; for inputs see EPOCH_HD_SDI_TRANSPORT_INPUT  */
904         CARD_FEATURE_STREAM_INFO = 113,                         /* only supported from driver 5.10.2.x; info on how many in/out SDI/ASI streams are supported */
905         CARD_FEATURE_CONNECTOR_INFO = 114,                      /* only supported from driver 5.10.2.x; info on which connectors are supported: SDI in/out, AES, RS422, LTC, GPIO */
906         EPOCH_HANC_INPUT_FLAGS = 115,                           /* this property can be queried to test flags being set in the HANC space (e.g. HANC_FLAGS_IS_ARRI_RECORD_FLAG_SET) */
907         EPOCH_INPUT_VITC = 116,                                         /* this property retrieves the current input VITC timecode; set .vt = VT_UI8 as this is a 64bit value;
908                                                                                                         only supported by SuperNova 2i/2o firmware version 75 and above */
909         EPOCH_RAW_VIDEO_INPUT_TYPE = 117,                       /* specifies if the raw/bayer input is ARRI 10/12 bit or Weisscam; set to 0 to revert back to normal SDI mode */
910         EPOCH_PCIE_CONFIG_INFO = 118,                           /* only supported from driver 5.10.2.x; provides info on PCIE maximum payload size and maximum read request siize */
911         EPOCH_4K_QUADLINK_CHANNEL = 119,                        /* use this property to set the 4K quadrant number for the current channel in 4K output mode; quadrant numbers are 1 - 4 */
912         EXTERNAL_LTC_SOURCE_SELECTION = 120,            /* use the enum EBlueExternalLtcSource to set the input source for the external LTC */
913         EPOCH_HD_SDI_TRANSPORT_INPUT = 121,                     /* can only be queried; return values are defined in the enum EHdSdiTransport. Input value is of type EBlueConnectorIdentifier */
914         CARD_CONNECTED_VIA_TB = 122,                            /* MAC only: use this to check if the Card is connected via ThunderBolt */
915         INTERLOCK_REFERENCE = 123,                                      /* this feature is only supported on Epoch Neutron cards; check application note AN004_Genlock.pdf for more information */
916         VIDEO_ONBOARD_KEYER = 124,                                      /* this property is currently only supported by Epoch Neutron cards; use the VIDEO_ONBOARD_KEYER_GET_STATUS macros for this property*/
917         EPOCH_OUTPUT_VITC_MANUAL_CONTROL = 125,         /* Epoch Neutron only: this property enables the feature to allow output of a custom VITC timecode on a field by field basis (low frame rates only); for high frame rates the conventional way (using the HANC buffer) must be used */
918         EPOCH_OUTPUT_VITC = 126,                                        /* Epoch Neutron only: this property sets the custom VITC timecode (64 bit value) on a field by field basis (for low frame rates only); set .vt = VT_UI8 as this is a 64bit value; */
919         EPOCH_INPUT_VITC_SOURCE = 127,                          /* this property selects the source for the card property EPOCH_INPUT_VITC for SD video modes; in SD video modes the VITC source can be either
920                                                                                                    from VBI space or from RP188 packets; the default (value = 0) is set to RP188; setting this to 1 will select VBI space as the source for EPOCH_INPUT_VITC; set .vt = VT_UI4 */
921         TWO_SAMPLE_INTERLEAVE_OUTPUT = 128,                     /* enables two sample interleave mode for 4K video modes using two output channels; options are: 0 = turn feature off, 1 = turn feature on */
922         TWO_SAMPLE_INTERLEAVE_INPUT = 129,                      /* enables two sample interleave mode for 4K video modes using two input channels; options are: 0 = turn feature off, 1 = turn feature on  */
923         BTC_TIMER = 130,                                                        /* BTC: Coordinated Bluefish Time; this timer has microsecond granularity and is started/reset when the driver starts; set .vt = VT_UI8 as this is a 64bit value; */
924         BFLOCK_SIGNAL_ENABLE = 131,                                     /* S+ cards can generate a proprietary lock signal on the S+ connector (connector 0); options are 0 = turn off signal (connector 0 will be copy of SDI A output); 1 = turn on lock signal output; set .vt = VT_UI4 */
925         AES_OUTPUT_ROUTING = 132,                                       /* set the stream source and source channels for the AES output; .vt = VT_UI4 */
926         MUTE_AES_OUTPUT_CHANNEL = 133,                          /* mute any of the AES output channels (0..7); to enable/disable mute use the SET_MUTE_AES_OUTPUT_CHANNEL macro; to query an AES output channels mute status
927                                                                                                    set VT.ulVal to the AES output channel number (0..7) then call QueryCardProperty(); the return value will be 1 = muted or 0 = enabled; set .vt to VT_UI4     */
928         FORCE_SD_VBI_OUTPUT_BUFFER_TO_V210 = 134,       /* this card property forces the VBI buffer to V210 memory format in SD video modes (default for HD video modes) so that it can handle 10 bit VANC packets.
929                                                                                                         set 1 = force to V210 or 0 = follow video memory fomat (default); set .vt to VT_UI4; when changing this property the video output mode and video output engine need to be set again manually! */
930         EMBEDDED_AUDIO_INPUT_INFO = 135,                        /*      this card property returns info on how which embedded audio input channels are available (channel mask for channels 1 - 16 in lower 16 bits).
931                                                                                                         it also returns the data payload for each channel (1 - 16) in the upper 16 bits (0 = embedded audio, 1 = other (e.g. Dolby Digital)) */
932
933         VIDEO_CARDPROPERTY_INVALID = 1000
934 }EBlueCardProperty;
935
936 typedef enum _EHdSdiTransport
937 {
938         HD_SDI_TRANSPORT_1_5G =                 0x1,                    /* HD as 1.5G */
939         HD_SDI_TRANSPORT_3G_LEVEL_A =   0x2,                    /* 3G Level A */
940         HD_SDI_TRANSPORT_3G_LEVEL_B =   0x3,                    /* 3G Level B */
941 }EHdSdiTransport;
942
943 typedef enum _EAudioMetaDataSettings
944 {
945         AUDIO_METADATA_KEEP_ALIVE = 0x1         /*      When setting this bit for the EPOCH_AUDIOOUTPUT_METADATA_SETTINGS card property the audio meta data (like RP188 timecode 
946                                                                                         will still be played out even after stopping audio playback; this is a static settings and only needs to be set once;
947                                                                                         it is channel based and can be changed for all output channels independently */
948 }EAudioMetaDataSettings;
949
950 typedef enum _EAnalogConnectorSignalType
951 {
952         ANALOG_OUTPUTSIGNAL_CVBS_Y_C=1,
953         ANALOG_OUTPUTSIGNAL_COMPONENT=2,
954         ANALOG_OUTPUTSIGNAL_RGB=4
955 }EAnalogConnectorSignalType;
956
957 /**<
958 @brief Use this enumerator to set the analog video signal types and connectors.
959 */
960 typedef enum _EAnalogInputConnectorType 
961 {
962 /* Composite input */
963         ANALOG_VIDEO_INPUT_CVBS_AIN1=0x00, /**<only available on Mini COAX */
964         ANALOG_VIDEO_INPUT_CVBS_AIN2=0x01, /**<available on both Mini COAX and Mini DIN*/
965         ANALOG_VIDEO_INPUT_CVBS_AIN3=0x02, /**<available on both Mini COAX and Mini DIN*/
966         ANALOG_VIDEO_INPUT_CVBS_AIN4=0x03, /**<only available on Mini COAX */
967         ANALOG_VIDEO_INPUT_CVBS_AIN5=0x04, /**<only available on Mini COAX */
968         ANALOG_VIDEO_INPUT_CVBS_AIN6=0x05, /**<available on both Mini COAX and Mini DIN */
969
970 /*svideo input*/
971 //Y_C is a synonym for svideo
972         ANALOG_VIDEO_INPUT_Y_C_AIN1_AIN4=0x06, /**<only available on Mini COAX*/
973         ANALOG_VIDEO_INPUT_Y_C_AIN2_AIN5=0x07, /**<only available on Mini COAX*/
974         ANALOG_VIDEO_INPUT_Y_C_AIN3_AIN6=0x08, /**<available on both Mini COAX and Mini DIN*/
975
976 /*YUV input*/
977         ANALOG_VIDEO_INPUT_YUV_AIN1_AIN4_AIN5=0x09, /**<only available on Mini COAX*/
978         ANALOG_VIDEO_INPUT_YUV_AIN2_AIN3_AIN6=0x0a, /**<available on both Mini COAX and Mini DIN*/
979         ANALOG_VIDEO_INPUT_USE_SDI_A=0x6F,      
980         ANALOG_VIDEO_INPUT_USE_SDI=0x7F,
981         GENERIC_ANALOG_VIDEO_SOURCE=0x8F,
982         ANALOG_VIDEO_INPUT_USE_SDI_B=ANALOG_VIDEO_INPUT_USE_SDI
983 }EAnalogInputConnectorType;
984
985
986 typedef enum {
987         ANALOG_VIDEO_INPUT_CONNECTOR,//EAnalogInputConnectorType
988         ANALOG_VIDEO_INPUT_PED,
989         ANALOG_VIDEO_INPUT_BRIGHTNESS,
990         ANALOG_VIDEO_INPUT_HUE,
991         ANALOG_VIDEO_INPUT_LUMA_GAIN,
992         ANALOG_VIDEO_INPUT_CHROMA_GAIN,
993         ANALOG_VIDEO_INPUT_AUTO_GAIN,
994         ANALOG_VIDEO_INPUT_LOAD_DEFAULT_SETTING,        
995         ANALOG_VIDEO_OUTPUT_PED,
996         ANALOG_VIDEO_OUTPUT_BRIGHTNESS,
997         ANALOG_VIDEO_OUTPUT_HUE,
998         ANALOG_VIDEO_OUTPUT_LUMA_GAIN,
999         ANALOG_VIDEO_OUTPUT_CHROMA_GAIN,        
1000         ANALOG_VIDEO_OUTPUT_SHARPNESS,
1001         ANALOG_VIDEO_OUTPUT_AUTO_GAIN,
1002         ANALOG_VIDEO_OUTPUT_LOAD_DEFAULT_SETTING,
1003         ANALOG_VIDEO_OUTPUT_SIGNAL_TYPE,//_EAnalogConnectorSignalType
1004         ANALOG_LOAD_BLUEFISH_DEFAULT_SETTING,
1005         ANALOG_SET_AS_POWERUP_SETTINGS,
1006         ANALOG_LOAD_POWERUP_SETTINGS,
1007         ANALOG_CONNECTOR_STATUS
1008 } AnalogCard_Property;
1009
1010 typedef struct {
1011         BLUE_INT32 inputConnector;                      //ANALOG_VIDEO_INPUT_CONNECTOR, EAnalogInputConnectorType
1012         BLUE_INT32 inputPed;                            //ANALOG_VIDEO_INPUT_PED,
1013         BLUE_INT32 inputBrightness;             //ANALOG_VIDEO_INPUT_BRIGHTNESS,
1014         BLUE_INT32 inputHue;                            //ANALOG_VIDEO_INPUT_HUE,
1015         BLUE_INT32 inputLumaGain;                       //ANALOG_VIDEO_INPUT_LUMA_GAIN,
1016         BLUE_INT32 inputChromaGain;             //ANALOG_VIDEO_INPUT_CHROMA_GAIN,
1017         BLUE_INT32 inputAutoGain;                       //ANALOG_VIDEO_INPUT_AUTO_GAIN,
1018         BLUE_INT32 outputPed;                           //ANALOG_VIDEO_OUTPUT_PED,
1019         BLUE_INT32 outputBrightness;            //ANALOG_VIDEO_OUTPUT_BRIGHTNESS,
1020         BLUE_INT32 outputHue;                           //ANALOG_VIDEO_OUTPUT_HUE,
1021         BLUE_INT32 outputYGain;                 //ANALOG_VIDEO_OUTPUT_Y_GAIN,
1022         BLUE_INT32 outputUGain;                 //ANALOG_VIDEO_OUTPUT_U_GAIN,
1023         BLUE_INT32 outputVGain;                 //ANALOG_VIDEO_OUTPUT_V_GAIN,
1024         BLUE_INT32 outputSharpness;             //ANALOG_VIDEO_OUTPUT_SHARPNESS,
1025         BLUE_INT32 outputAutoGain;                      //ANALOG_VIDEO_OUTPUT_AUTO_GAIN,
1026         BLUE_INT32 outputSignalTypes;           //EAnalogConnectorSignalType
1027 }AnalogCardState;
1028
1029 //----------------------------------------------------------------------------------------------------
1030 /**< brief Used to determine how video interrupts are handled*/
1031 typedef enum _EEngineMode
1032 {
1033         VIDEO_ENGINE_FRAMESTORE=0,      /**< framestore engine. In this mode user is responsible for 
1034                                                                          schduling a capture or playback after waiting for the 
1035                                                                          respective video sync;s*/
1036         VIDEO_ENGINE_PLAYBACK=1,        /**< Playback engine. In this mode there is a driver FIFO, which 
1037                                                                         is reponisble for scheudling a frame for  playback.
1038                                                                         User just adds video frames into the fifo.*/
1039         VIDEO_ENGINE_CAPTURE=2,         /**< Capture engine  In this mode there is a driver FIFO, which 
1040                                                                         is reponisble for scheudling a frame for capture.
1041                                                                         User just retreives video frames from the FIFO.*/
1042         VIDEO_ENGINE_PAGEFLIP=3,        /**< not supported any more */
1043         VIDEO_ENGINE_DUPLEX=4,          /**< Full Duplex video. This is a FIFO mode. Use this mode if you want 
1044                                                                 to capture and playback at the same time.*/
1045         VIDEO_ENGINE_INVALID
1046 } EEngineMode;
1047
1048 /**< use this enumerator for controlling emb audio output properties using the 
1049          property EMBEDDED_AUDIO_OUTPUT.        
1050 */
1051 typedef enum _EBlueEmbAudioOutput
1052 {
1053         blue_emb_audio_enable=0x1,      // Switches off/on  the whole HANC output from connecotrs associated with the channel
1054         blue_auto_aes_to_emb_audio_encoder=0x2, //control whether the auto aes to emb thread should be running or not.
1055         blue_emb_audio_group1_enable=0x4, /**< enables group1(ch 0-  3) emb audio */
1056         blue_emb_audio_group2_enable=0x8, /**< enables group2(ch 4-  7) emb audio */
1057         blue_emb_audio_group3_enable=0x10, /**< enables group3(ch 8-  11) emb audio */
1058         blue_emb_audio_group4_enable=0x20, /**< enables group4(ch 12-  16) emb audio */
1059         blue_enable_hanc_timestamp_pkt = 0x40
1060 }EBlueEmbAudioOutput;
1061
1062
1063 /**< Not used any more */
1064 typedef enum _EBufferTarget
1065 {
1066         BUFFER_TARGET_VIDEO=0,          // Generic R/W DMA
1067         BUFFER_TARGET_AUDIO,            // Special processing required for audio
1068         BUFFER_TARGET_VIDEO_8BIT,       // Special R/W DMA utilising 8 bit aperture
1069         BUFFER_TARGET_VIDEO_HALF,       // Special R/W DMA every second line (currently unused)
1070         BUFFER_TARGET_VIDEO_OUT,        // Updates video out register on DMA completion for write 
1071         BUFFER_TARGET_INVALID
1072 } EBufferTarget;
1073
1074 #define BUFFER_TYPE_VIDEO               (0)
1075 #define BUFFER_TYPE_AUDIO               (1)
1076 #define BUFFER_TYPE_VIDEO_8BIT  (2)     // use this when assigning a buffer to indicate DMA from aperture!
1077 #define BUFFER_TYPE_VIDEO_OUT   (3)     // On DMA start set video output address to DMA target
1078 #define BUFFER_TYPE_VIDEO_HALF  (4)     // DMA every second line...
1079
1080 // Buffer identifiers
1081 #define BUFFER_ID_AUDIO_IN              (0)
1082 #define BUFFER_ID_AUDIO_OUT             (1)
1083 #define BUFFER_ID_VIDEO0                (2)
1084 #define BUFFER_ID_VIDEO1                (3)
1085 #define BUFFER_ID_VIDEO2                (4)
1086 #define BUFFER_ID_VIDEO3                (5)
1087
1088 //#define       BUFFER_ID_USER_BASE             (6)
1089
1090
1091
1092 #define VIDEO_BORDER_TOP                (0x10000000)
1093 #define VIDEO_BORDER_BOTTOM             (0x20000000)
1094 #define VIDEO_BORDER_LEFT               (0x40000000)
1095 #define VIDEO_BORDER_RIGHT              (0x80000000)
1096
1097 typedef struct _AnalogCardPropStruct
1098 {
1099         BLUE_UINT32 VideoChannel;
1100         BLUE_INT32  prop;
1101         BLUE_INT32  value;
1102         BLUE_INT32  minValue;
1103         BLUE_INT32  maxValue;
1104         BLUE_INT32  bReadFlag;
1105 }AnalogCardPropStruct;
1106
1107 typedef enum _EConnectorSignalFormatType
1108 {
1109         Signal_Type_4444 =1,
1110         Signal_Type_4224 =0,
1111         Signal_Type_422=2
1112 }EConnectorSignalFormatType;
1113
1114 typedef enum _EDMADirection
1115 {
1116         DMA_WRITE=0,
1117         DMA_READ=1,
1118         DMA_INVALID=2
1119 }EDMADirection;                 
1120
1121
1122 typedef enum _MatrixColType
1123 {
1124         COL_BLUE_PB=0,
1125         COL_RED_PR=1,
1126         COL_GREEN_Y=2,
1127         COL_KEY=3
1128 }MatrixColType;
1129
1130
1131
1132
1133 /**< Bits defining supported features that can be used with VideoFeature_struct*/
1134 #define VIDEO_CAPS_INPUT_SDI                                    (0x00000001)    /**<  Capable of input of SDI Video */
1135 #define VIDEO_CAPS_OUTPUT_SDI                                   (0x00000002)    /**<  Capable of output of SDI Video */
1136 #define VIDEO_CAPS_INPUT_COMP                                   (0x00000004)    /**<  Capable of capturing Composite Video input */
1137 #define VIDEO_CAPS_OUTPUT_COMP                                  (0x00000008)    /**<  Capable of capturing Composite Video output */
1138
1139 #define VIDEO_CAPS_INPUT_YUV                                    (0x00000010)    /**<  Capable of capturing Component Video input */
1140 #define VIDEO_CAPS_OUTPUT_YUV                                   (0x00000020)    /**<  Capable of capturing Component Video output */
1141 #define VIDEO_CAPS_INPUT_SVIDEO                                 (0x00000040)    /**<  Capable of capturing SVideo input */
1142 #define VIDEO_CAPS_OUTPUT_SVIDEO                                (0x00000080)    /**<  Capable of capturing SVideo output */
1143
1144 #define VIDEO_CAPS_GENLOCK                                              (0x00000100)    /**<  Able to adjust Vert & Horiz timing */
1145 #define VIDEO_CAPS_VERTICAL_FLIP                                (0x00000200)    /**<  Able to flip rasterisation */
1146 #define VIDEO_CAPS_KEY_OUTPUT                                   (0x00000400)    /**<  Video keying output capable */
1147 #define VIDEO_CAPS_4444_OUTPUT                                  (0x00000800)    /**<  Capable of outputting 4444 (dual link) */
1148
1149 #define VIDEO_CAPS_DUALLINK_INPUT                               (0x00001000)    /**<  Dual Link input   */
1150 #define VIDEO_CAPS_INTERNAL_KEYER                               (0x00002000)    /**<  Has got an internal Keyer */
1151 #define VIDEO_CAPS_RGB_COLORSPACE_SDI_CONN              (0x00004000)    /**<  Support RGB colorspace  in on an  SDI connector  */
1152 #define VIDEO_CAPS_HAS_PILLOR_BOX                               (0x00008000)    /**<  Has got support for pillor box */
1153
1154 #define VIDEO_CAPS_OUTPUT_RGB                                   (0x00010000)    /**<  Has Analog RGB output connector  */
1155 #define VIDEO_CAPS_SCALED_RGB                                   (0x00020000)    /**<  Can scale RGB colour space */
1156 #define AUDIO_CAPS_PLAYBACK                                     (0x00040000)    /**<  Has got audio output */
1157 #define AUDIO_CAPS_CAPTURE                                              (0x00080000)
1158
1159 #define VIDEO_CAPS_DOWNCONVERTER                                (0x00100000)
1160 #define VIDEO_CAPS_DUALOUTPUT_422_IND_STREAM    (0x00200000)    /**<  Specifies whether the card supports Dual Indepenedent 422 output streams */
1161 #define VIDEO_CAPS_DUALINPUT_422_IND_STREAM             (0x00400000)    /**<  Specifies whether the card supports Dual Indepenedent 422 input streams */
1162
1163 #define VIDEO_CAPS_VBI_OUTPUT                                   (0x00800000)    /**<  Specifies whether the card supports VBI output */
1164 #define VIDEO_CAPS_VBI_INPUT                                    (0x04000000)    /**<  Specifies whether the card supports VBI input */  
1165
1166 #define VIDEO_CAPS_HANC_OUTPUT                                  (0x02000000)
1167 #define VIDEO_CAPS_HANC_INPUT                                   (0x04000000)
1168
1169 #define VIDEO_CAPS_FOUND_VPS0                                   VIDEO_CAPS_DOWNCONVERTER        /**< specifies whether the VPS0 scaler board was found on the card */
1170 #define VIDEO_CAPS_FOUND_VPS1                                   (0x10000000)                            /**< specifies whether the VPS1 scaler board was found on the card */
1171 #define VIDEO_CAPS_FOUND_VPIO                                   (0x20000000)                            /**< specifies whether the VPIO(DVI daughter board)board was found on the card */
1172
1173 /*
1174 #define VIDEO_CAPS_DUALOUTPUT_422_IND_STREAM    (0x00100000)    // Specifies whether the card supports Dual Indepenedent 422 output streams
1175 #define VIDEO_CAPS_DUALINPUT_422_IND_STREAM             (0x00200000)    // Specifies whether the card supports Dual Indepenedent 422 input streams
1176
1177 #define VIDEO_CAPS_VBI_OUTPUT                                   (0x00400000)
1178 #define VIDEO_CAPS_VBI_INPUT                                    (0x00800000)
1179
1180 #define VIDEO_CAPS_HANC_OUTPUT                                  (0x01000000)
1181 #define VIDEO_CAPS_HANC_INPUT                                   (0x02000000)
1182 */
1183
1184 #define BLUE_CARD_BUFFER_TYPE_OFFSET            (12)
1185 #define BLUE_DMA_DATA_TYPE_OFFSET                       (16)
1186 #define BLUE_DMA_FLAGS_OFFSET                           (20)
1187 #define GetDMACardBufferId(value)                       (value & 0xFFF)
1188 #define GetCardBufferType(value)                        ((value & 0xF000) >> BLUE_CARD_BUFFER_TYPE_OFFSET)
1189 #define GetDMADataType(value)                           ((value & 0xF0000) >> BLUE_DMA_DATA_TYPE_OFFSET)
1190 #define GetDMAFlags(value)                                      ((value & 0xF00000) >> (BLUE_DMA_FLAGS_OFFSET))
1191 #define GetEpochDMAFlags(value)                         ((value & 0xFF00000) >> (BLUE_DMA_FLAGS_OFFSET))
1192
1193
1194 #define Blue_DMABuffer(CardBufferType,BufferId,DataType)                ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \
1195                                                                                                                                 ( CardBufferType<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \
1196                                                                                                                                 ( ((ULONG)BufferId&0xFFF)) |0)
1197
1198 #define BlueImage_VBI_DMABuffer(BufferId,DataType)                              ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \
1199                                                                                                                                 ( BLUE_CARDBUFFER_IMAGE_VBI<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \
1200                                                                                                                                 ( ((ULONG)BufferId&0xFFF)) |0)
1201
1202 #define BlueImage_DMABuffer(BufferId,DataType)                                  ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \
1203                                                                                                                                 ( BLUE_CARDBUFFER_IMAGE<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \
1204                                                                                                                                 ( ((ULONG)BufferId&0xFFF)) |0)
1205
1206 #define BlueImage_VBI_HANC_DMABuffer(BufferId,DataType)                 ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \
1207                                                                                                                                 ( BLUE_CARDBUFFER_IMAGE_VBI_HANC<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \
1208                                                                                                                                 ( ((ULONG)BufferId&0xFFF)) |0)
1209
1210 #define BlueImage_HANC_DMABuffer(BufferId,DataType)                             ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \
1211                                                                                                                                 ( BLUE_CARDBUFFER_IMAGE_HANC<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \
1212                                                                                                                                 ( ((ULONG)BufferId&0xFFF)) |0)
1213
1214
1215 #define BlueBuffer(CardBufferType,BufferId)                     (((CardBufferType)<<BLUE_CARD_BUFFER_TYPE_OFFSET)|((BufferId&0xFFF))|0)
1216 #define BlueBuffer_Image_VBI(BufferId)                          (((BLUE_CARDBUFFER_IMAGE_VBI)<<BLUE_CARD_BUFFER_TYPE_OFFSET)|((BufferId&0xFFF))|0)
1217 #define BlueBuffer_Image(BufferId)                                      (((BLUE_CARDBUFFER_IMAGE)<<BLUE_CARD_BUFFER_TYPE_OFFSET)|((BufferId&0xFFF))|0)
1218 #define BlueBuffer_Image_VBI_HANC(BufferId)                     (((BLUE_CARDBUFFER_IMAGE_VBI_HANC)<<BLUE_CARD_BUFFER_TYPE_OFFSET)|((BufferId&0xFFF))|0)
1219 #define BlueBuffer_Image_HANC(BufferId)                         (((BLUE_CARDBUFFER_IMAGE_HANC)<<BLUE_CARD_BUFFER_TYPE_OFFSET)|((BufferId&0xFFF))|0)
1220 #define BlueBuffer_HANC(BufferId)                                       (((BLUE_CARDBUFFER_HANC)<<BLUE_CARD_BUFFER_TYPE_OFFSET)|((BufferId&0xFFF))|0)
1221
1222 #define BYPASS_RELAY_A                                                          (0x00000001) // enable bypass relay channel a when loading driver , only used in linux 
1223 #define BYPASS_RELAY_B                                                          (0x00000002) // enable bypass relay channel a when loading driver , only used in linux 
1224 typedef enum _EDMACardBufferType
1225 {
1226         BLUE_CARDBUFFER_IMAGE=0,
1227         BLUE_CARDBUFFER_IMAGE_VBI_HANC=1,
1228         BLUE_CARDBUFFER_IMAGE_VBI=2,
1229         BLUE_CARDBUFFER_AUDIO_OUT=3,
1230         BLUE_CARDBUFFER_AUDIO_IN=4,
1231         BLUE_CARDBUFFER_HANC=5,
1232         BLUE_CARDBUFFER_IMAGE_HANC=6,
1233         BLUE_CARDBUFFER_INVALID=6
1234 }EDMACardBufferType;
1235
1236 typedef enum _EDMADataType
1237 {
1238         BLUE_DATA_FRAME=0,
1239         BLUE_DATA_IMAGE=0,
1240         BLUE_DATA_FIELD1=1,
1241         BLUE_DATA_FIELD2=2,
1242         BLUE_DATA_VBI=3,
1243         BLUE_DATA_HANC=4,
1244         BLUE_DATA_AUDIO_IN=5,
1245         BLUE_DATA_AUDIO_OUT=6,
1246         BLUE_DATA_FRAME_RDOM=7,
1247         BLUE_DATA_FRAME_STEREO_LEFT=BLUE_DATA_FRAME,
1248         BLUE_DATA_FRAME_STEREO_RIGHT=8,
1249         BLUE_DMADATA_INVALID=9
1250 }EDMADataType;
1251
1252 typedef struct _AUXILLARY_VIDEO_INFO
1253 {
1254         BLUE_UINT32  video_channel_id;
1255         BLUE_UINT32  lVideoMode;
1256         BLUE_UINT32  lUniqueId;
1257         BLUE_UINT32  lInfoType;
1258         BLUE_UINT32  lMemFmt;
1259         BLUE_UINT32  lGpio;
1260         BLUE_UINT64  lLTC;
1261 }Auxillary_Video_Info;
1262
1263
1264 typedef enum _EBlueVideoAuxInfoType
1265 {
1266         BLUE_VIDEO_AUX_MEMFMT_CHANGE=1,
1267         BLUE_VIDEO_AUX_UPDATE_LTC=2,
1268         BLUE_VIDEO_AUX_UPDATE_GPIO=4,
1269         BLUE_VIDEO_AUX_VIDFMT_CHANGE=8,
1270
1271 }EBlueVideoAuxInfoType;
1272 // Max of 4 bits 
1273
1274 //AUDIO_OUTPUT_PROP/AUDIO_CHANNEL_ROUTING
1275 #define GET_ANALOG_AUDIO_LEFT_ROUTINGCHANNEL(value)                             (value&0xFF)
1276 #define GET_ANALOG_AUDIO_RIGHT_ROUTINGCHANNEL(value)                    ((value&0xFF00)>>8)
1277 #define SET_ANALOG_AUDIO_ROUTINGCHANNEL(left,right)                             (((right & 0xFF)<<8)|(left & 0xFF))
1278 #define SET_AUDIO_OUTPUT_ROUTINGCHANNEL(output_type,src_channel_id,_output_channel_id) ((1<<31)|((output_type&3)<<29)|((_output_channel_id &0x3F)<<23)|((src_channel_id & 0x3F)<<16))
1279 #define GET_AUDIO_OUTPUT_SRC_CHANNEL_ROUTING(value)                             ((value>>16) & 0x3F)
1280 #define GET_AUDIO_OUTPUT_CHANNEL_ROUTING(value)                                 ((value>>23) & 0x3F)
1281 #define GET_AUDIO_OUTPUT_TYPE_ROUTING(value)                                    ((value & 0x60000000)>>29)
1282
1283 //AES_OUTPUT_ROUTING
1284 #define SET_AES_OUTPUT_ROUTING(OutputVideoChannel, AudioSrcChannel, AudioDstChannel)    (((OutputVideoChannel & 0xFF) << 16) | ((AudioDstChannel & 0xFF) << 8) | (AudioSrcChannel & 0xFF))
1285 #define GET_AES_OUTPUT_ROUTING_STREAM(value)                                                                                    ((value >> 16) & 0xFF)
1286 #define GET_AES_OUTPUT_ROUTING_DST_CHANNEL(value)                                                                               ((value >> 8) & 0xFF)
1287 #define GET_AES_OUTPUT_ROUTING_SRC_CHANNEL(value)                                                                               (value & 0xFF)
1288
1289 //MUTE_AES_OUTPUT_CHANNEL
1290 #define SET_MUTE_AES_OUTPUT_CHANNEL(AudioDstChannel, Mute)      (((Mute & 0x1) << 31) | AudioDstChannel & 0xFF)
1291
1292 #define AUDIO_INPUT_SOURCE_SELECT_FLAG                                                  (1<<16) 
1293 #define AUDIO_INPUT_SOURCE_SELECT(SynchCount,AudioInputSource)  (AUDIO_INPUT_SOURCE_SELECT_FLAG|(SynchCount)|(AudioInputSource<<17))
1294
1295 struct blue_video_connection_routing_struct
1296 {
1297         BLUE_UINT32 video_channel;
1298         BLUE_UINT32 duallink_flag;
1299         BLUE_UINT32 link1_connector;
1300         BLUE_UINT32 link2_connector;
1301 };
1302
1303 #pragma pack(push, video_sync_struct, 1)
1304 typedef struct _blue_video_sync_struct
1305 {
1306         BLUE_UINT32     sync_wait_type;                 // field or frame (UPD_FMT_FIELD or UPD_FMT_FRAME)
1307         BLUE_UINT32     video_channel;                  // which video channel interrupt should the interrupt wait for, e.g. BLUE_VIDEO_INPUT_CHANNEL_A, BLUE_VIDEO_OUTPUT_CHANNEL_A, etc.
1308         BLUE_UINT32     timeout_video_msc;              // field count when to return or IGNORE_SYNC_WAIT_TIMEOUT_VALUE to return at next field/frame sync
1309         BLUE_UINT32     video_msc;                      // current video msc (field count)
1310         BLUE_UINT32 current_display_frame_id;       // current buffer id which is being displayed
1311         BLUE_UINT32 current_display_frame_uniqueid; // unique id associated with current buffer id which is being displayed
1312                                                                                                 // this is only valid when using fifo modes.
1313         BLUE_UINT16     subfield_interrupt;                             // subfield interrupt number; 0 == main frame sync
1314         BLUE_UINT16     subfield_lines;                                 // number of lines of video captured at this subfield interrupt
1315         BLUE_UINT64     btcTimeStamp;                                   // Coordinated Bluefish Time timestamp of field/frame which is currently being displayed
1316         BLUE_UINT8  pad[12];
1317 }blue_video_sync_struct;
1318
1319 struct blue_external_ltc_input_sync_struct
1320 {
1321         BLUE_UINT64 TimeCodeValue;
1322         BLUE_UINT32 TimeCodeIsValid;
1323         BLUE_UINT8  pad[20];
1324 };
1325 #pragma pack(pop,video_sync_struct)
1326
1327
1328 typedef enum _EBlueLUTType
1329 {
1330         BLUE_MAIN_LUT_B_Pb=0,
1331         BLUE_MAIN_LUT_G_Y=1,
1332         BLUE_MAIN_LUT_R_Pr=2,
1333         BLUE_AUX_LUT_B_Pb=3,
1334         BLUE_AUX_LUT_G_Y=4,
1335         BLUE_AUX_LUT_R_Pr=5,
1336 }EBlueLUTType;
1337
1338 #pragma pack(push, video_frame, 1)
1339 struct VideoFeature_struct 
1340 {
1341         BLUE_UINT32  Type;                   // Bluefish card type
1342         BLUE_UINT32  CardSubType;               
1343         BLUE_UINT32  Bus;                    // Which PIC bus (bridge) it is on
1344         BLUE_UINT32  Slot;                   // Which slot card is plugged into
1345         BLUE_UINT32  Feature;                //  Look at  the _EBlueFishCardFeatures  definition to know what each bit mean
1346         BLUE_UINT32  FirmwareVersion;
1347 };
1348
1349 struct blue_videoframe_info
1350 {
1351         BLUE_UINT64 ltcTimeCode;
1352         unsigned long videochannel;
1353         unsigned long BufferId;
1354         unsigned long Count;
1355         unsigned long DroppedFrameCount;
1356 };
1357
1358 struct blue_videoframe_info_ex
1359 {
1360         BLUE_UINT64             ltcTimeCode;            //LTC timecode, not used
1361         unsigned long   videochannel;           //the channel this frame was captured from
1362         long                    BufferId;                       //this buffer contains the captured frame
1363         unsigned long   Count;                          //total captured frames
1364         unsigned long   DroppedFrameCount;      //dropped frame count
1365         unsigned long   nFrameTimeStamp;        //field count the frame was captured at
1366         unsigned long   nVideoSignalType;       //video mode of this frame
1367         unsigned int    nASIPktCount;           //only for DVB-ASI; how many ASI packets are in this frame
1368         unsigned int    nASIPktSize;            //only for DVB-ASI; how many bytes per packet
1369         unsigned int    nAudioValidityBits;     //part of the channels status block for audio
1370         BLUE_UINT64             btcTimeStamp;           //Coordinated Bluefish Time timestamp
1371         unsigned char   ucVideoModeLinkA;       //only used in 1.5G dual link mode
1372         unsigned char   ucVideoModeLinkB;       //only used in 1.5G dual link mode
1373         unsigned char   pad[10];                        //not used
1374 };
1375
1376 struct blue_1d_lookup_table_struct
1377 {
1378         BLUE_UINT32 nVideoChannel;
1379         BLUE_UINT32  nLUTId;
1380         BLUE_UINT16 * pLUTData;
1381         BLUE_UINT32  nLUTElementCount;  
1382         BLUE_UINT8      pad[256];
1383 };
1384 #pragma pack(pop, video_frame)
1385
1386 #pragma pack(push, blue_dma_request, 1)
1387 struct blue_dma_request_struct
1388 {
1389         unsigned char * pBuffer;
1390         BLUE_UINT32 video_channel;
1391         BLUE_UINT32     BufferId;
1392         unsigned int BufferDataType;
1393         unsigned int FrameType;
1394         unsigned int BufferSize;
1395         unsigned int Offset;
1396         unsigned long   BytesTransferred;
1397         unsigned char pad[64];
1398 };
1399
1400 enum SerialPort_struct_flags
1401 {
1402         SerialPort_Read=1,
1403         SerialPort_Write=2,
1404         SerialPort_TX_Queue_Status=4,           
1405         SerialPort_RX_Queue_Status=8,
1406         SerialPort_RX_FlushBuffer=16,
1407         SerialPort_RX_IntWait_Return_On_Data=32,
1408         
1409 };
1410
1411 struct SerialPort_struct
1412 {
1413         unsigned char   Buffer[64];
1414         unsigned int    nBufLength;
1415         unsigned int    nSerialPortId;
1416         unsigned int    bFlag; // SerialPort_struct_flags 
1417         unsigned short  sTimeOut; 
1418 };
1419
1420
1421 struct blue_video_scaler_ceofficent
1422 {
1423         BLUE_UINT32 ioctl_read_only_flag;
1424         BLUE_UINT32 nScalerId;
1425         BLUE_UINT32 nScalerFilterType;
1426         BLUE_UINT32 nScalerCoefficentWeight[15];
1427 };
1428
1429 enum blue_video_scaler_param_flags
1430 {
1431         scaler_flags_set_destrect_as_framesize = 0x1,
1432 };
1433
1434 struct blue_video_scaler_param_struct
1435 {
1436         BLUE_UINT32 ioctl_read_only_flag;
1437         BLUE_UINT32 nScalerId;
1438         BLUE_UINT32 nSrcVideoHeight;
1439         BLUE_UINT32 nSrcVideoWidth;
1440         BLUE_UINT32 nSrcVideoYPos;
1441         BLUE_UINT32 nSrcVideoXPos;
1442         BLUE_UINT32 nDestVideoHeight;
1443         BLUE_UINT32 nDestVideoWidth;
1444         BLUE_UINT32 nDestVideoYPos;
1445         BLUE_UINT32 nDestVideoXPos;
1446         BLUE_UINT32 nHScaleFactor;
1447         BLUE_UINT32 nVScaleFactor;
1448         BLUE_UINT32 nScalerOutputVideoMode;
1449         BLUE_UINT32 nScalerParamFlags;
1450         BLUE_UINT32 nScalerOutputRasterVideoMode;
1451         BLUE_UINT32 nScalerOutputRasterHeight;
1452         BLUE_UINT32 nScalerOutputRasterWidth;
1453         BLUE_UINT32 pad[125];
1454 };
1455 #ifndef EXCLUDE_USERLAND_STRUCT
1456 struct blue_color_matrix_struct{
1457         BLUE_UINT32  VideoChannel;
1458         BLUE_UINT32 MatrixColumn; //MatrixColType enumerator defines this 
1459         double  Coeff_B;
1460         double  Coeff_R;
1461         double  Coeff_G;
1462         double  Coeff_K;
1463         double  const_value;
1464 };
1465 #endif
1466 #pragma pack(pop, blue_dma_request)
1467
1468 typedef enum _blue_output_hanc_ioctl_enum
1469 {
1470         blue_get_output_hanc_buffer =                                   0,
1471         blue_put_output_hanc_buffer =                                   1,
1472         blue_get_valid_silent_hanc_data_status =                3,
1473         blue_set_valid_silent_hanc_data_status =                4,
1474         blue_start_output_fifo =                                                5,
1475         blue_stop_output_fifo =                                                 6,
1476         blue_init_output_fifo =                                                 7,
1477         blue_get_queues_info =                                                  8,
1478         blue_get_output_fifo_info=blue_get_queues_info,
1479         blue_get_output_fifo_status =                                   9,
1480         blue_start_output_fifo_no_auto_turn_off =               10      // this is used when we don't really use the FIFO, but handle audio playback ourselves in DirectShow;
1481                                                                                                                 // need to make sure that our HANC output FIFO doesn't turn off audio as there are never any HANC frames to be played
1482 }blue_output_hanc_ioctl_enum;
1483
1484 typedef enum _blue_input_hanc_ioctl_enum
1485 {
1486         blue_get_input_hanc_buffer=0,
1487         blue_start_input_fifo=3,
1488         blue_stop_input_fifo=4,
1489         blue_init_input_fifo=5,
1490         blue_playthru_input_fifo=6,
1491         blue_release_input_hanc_buffer=7,
1492         blue_map_input_hanc_buffer=8,
1493         blue_unmap_input_hanc_buffer=9,
1494         blue_get_info_input_hanc_fifo=10,
1495         blue_get_input_rp188=11,
1496         blue_get_input_fifo_status=12,
1497 }blue_input_hanc_ioctl_enum;
1498
1499
1500 #define HANC_PLAYBACK_INIT                              (0x00000001)
1501 #define HANC_PLAYBACK_START                             (0x00000002)
1502 #define HANC_PLAYBACK_STOP                              (0x00000004)
1503
1504 #define HANC_CAPTURE_INIT                               (0x00000010)
1505 #define HANC_CAPTURE_START                              (0x00000020)
1506 #define HANC_CAPTURE_STOP                               (0x00000040)
1507 #define HANC_CAPTURE_PLAYTHRU                   (0x00000080)
1508
1509
1510 typedef enum _EOracFPGAConfigCMD
1511 {
1512         ORAC_FPGA_CONFIG_CMD_ERASE_SECTOR=0,
1513         ORAC_FPGA_CONFIG_CMD_UNLOCK_SECTOR=1,
1514         ORAC_FPGA_CONFIG_CMD_WRITE_DATA=2,
1515         ORAC_FPGA_CONFIG_CMD_STATUS=3,
1516         ORAC_FPGA_CONFIG_CMD_READMODE=4,
1517         ORAC_FPGA_CONFIG_RAW_WRITE=5,
1518         ORAC_FPGA_CONFIG_RAW_READ=6,
1519         ORAC_FPGA_CONFIG_CMD_READ_DATA=7,
1520         ORAC_FPGA_CONFIG_INIT=8,
1521         ORAC_FPGA_CONFIG_EXIT=9
1522 }EOracFPGAConfigCMD;
1523
1524
1525 #define ANALOG_CHANNEL_0 MONO_CHANNEL_9
1526 #define ANALOG_CHANNEL_1 MONO_CHANNEL_10
1527
1528 /*Assumes that the data is in stereo pairs not individual samples*/
1529 #define STEREO_PAIR_1   (MONO_CHANNEL_1|MONO_CHANNEL_2) /* Mono Channel 1 & Mono channel 2* together*/
1530 #define STEREO_PAIR_2   (MONO_CHANNEL_3|MONO_CHANNEL_4) /* Mono Channel 3 & Mono Channel 4* together*/
1531 #define STEREO_PAIR_3   (MONO_CHANNEL_5|MONO_CHANNEL_6) /* Mono Channel 5 & Mono Channel 6* together*/
1532 #define STEREO_PAIR_4   (MONO_CHANNEL_7|MONO_CHANNEL_8) /* Mono Channel 7 & Mono Channel 8* together*/
1533
1534 #define ANALOG_AUDIO_PAIR (ANALOG_CHANNEL_0|ANALOG_CHANNEL_1)
1535
1536 #define BLUE_LITTLE_ENDIAN      0
1537 #define BLUE_BIG_ENDIAN         1
1538
1539 #define GREED_SILENT_HANC_BUFFER1       250
1540 #define GREED_SILENT_HANC_BUFFER2       251
1541
1542 #define AES_SRC_BYPASS_CHANNEL_1_2 0x1
1543 #define AES_SRC_BYPASS_CHANNEL_3_4 0x2
1544 #define AES_SRC_BYPASS_CHANNEL_5_6 0x4
1545 #define AES_SRC_BYPASS_CHANNEL_7_8 0x8
1546
1547 typedef enum _EEpochRoutingElements
1548 {
1549         EPOCH_SRC_DEST_SCALER_0=0x1,
1550         EPOCH_SRC_DEST_SCALER_1,
1551         EPOCH_SRC_DEST_SCALER_2,
1552         EPOCH_SRC_DEST_SCALER_3,
1553
1554         EPOCH_SRC_SDI_INPUT_A,
1555         EPOCH_SRC_SDI_INPUT_B,
1556         EPOCH_SRC_SDI_INPUT_C,
1557         EPOCH_SRC_SDI_INPUT_D,
1558
1559         EPOCH_SRC_SDI_INPUT_A_3GB_LINK_A = EPOCH_SRC_SDI_INPUT_A,
1560         EPOCH_SRC_SDI_INPUT_B_3GB_LINK_A = EPOCH_SRC_SDI_INPUT_B,
1561         EPOCH_SRC_SDI_INPUT_C_3GB_LINK_A = EPOCH_SRC_SDI_INPUT_C,
1562         EPOCH_SRC_SDI_INPUT_D_3GB_LINK_A = EPOCH_SRC_SDI_INPUT_D,
1563
1564         EPOCH_DEST_SDI_OUTPUT_A,
1565         EPOCH_DEST_SDI_OUTPUT_B,
1566         EPOCH_DEST_SDI_OUTPUT_C,
1567         EPOCH_DEST_SDI_OUTPUT_D,
1568
1569         EPOCH_DEST_SDI_OUTPUT_A_3GB_LINK_A = EPOCH_DEST_SDI_OUTPUT_A,
1570         EPOCH_DEST_SDI_OUTPUT_B_3GB_LINK_A = EPOCH_DEST_SDI_OUTPUT_B,
1571         EPOCH_DEST_SDI_OUTPUT_C_3GB_LINK_A = EPOCH_DEST_SDI_OUTPUT_C,
1572         EPOCH_DEST_SDI_OUTPUT_D_3GB_LINK_A = EPOCH_DEST_SDI_OUTPUT_D,
1573
1574         EPOCH_SRC_OUTPUT_MEM_INTERFACE_CHA,
1575         EPOCH_SRC_OUTPUT_MEM_INTERFACE_CHB,
1576
1577         EPOCH_DEST_INPUT_MEM_INTERFACE_CHA,
1578         EPOCH_DEST_INPUT_MEM_INTERFACE_CHB,
1579
1580         EPOCH_DEST_AES_ANALOG_AUDIO_OUTPUT,
1581
1582         EPOCH_SRC_AV_SIGNAL_GEN,
1583         EPOCH_SRC_DEST_VPIO_SCALER_0,
1584         EPOCH_SRC_DEST_VPIO_SCALER_1,
1585
1586         EPOCH_DEST_VARIVUE_HDMI,
1587
1588         EPOCH_DEST_INPUT_MEM_INTERFACE_CHC,
1589         EPOCH_DEST_INPUT_MEM_INTERFACE_CHD,
1590
1591         EPOCH_SRC_OUTPUT_MEM_INTERFACE_CHC,
1592         EPOCH_SRC_OUTPUT_MEM_INTERFACE_CHD,
1593
1594         EPOCH_SRC_SDI_INPUT_A_3GB_LINK_B,
1595         EPOCH_SRC_SDI_INPUT_B_3GB_LINK_B,
1596         EPOCH_SRC_SDI_INPUT_C_3GB_LINK_B,
1597         EPOCH_SRC_SDI_INPUT_D_3GB_LINK_B,
1598
1599         EPOCH_DEST_SDI_OUTPUT_A_3GB_LINK_B,
1600         EPOCH_DEST_SDI_OUTPUT_B_3GB_LINK_B,
1601         EPOCH_DEST_SDI_OUTPUT_C_3GB_LINK_B,
1602         EPOCH_DEST_SDI_OUTPUT_D_3GB_LINK_B,
1603
1604         EPOCH_DEST_HDMI_OUTPUT,
1605         EPOCH_DEST_HDMI_OUTPUT_LINK_A = EPOCH_DEST_HDMI_OUTPUT,
1606         EPOCH_DEST_HDMI_OUTPUT_LINK_B,
1607
1608 }EEpochRoutingElements;
1609
1610
1611
1612 #define VPEnableFieldCountTrigger               ((BLUE_UINT64)1<<63)
1613 #define VPTriggerGetFieldCount(value)   ((BLUE_UINT64)value & 0xFFFFFFFF)
1614
1615 typedef enum _EBlueScalerFilterType
1616 {
1617         BlueScalerHorizontalYFilter=1,
1618         BlueScalerHorizontalCFilter=2,
1619         BlueScalerVerticalYFilter=3,
1620         BlueScalerVerticalCFilter=4,
1621 }EBlueScalerFilterType;
1622
1623
1624 typedef enum _EBFLockSignalType
1625 {
1626         BFLOCK_SIGNAL_UNKNOWN = 0x1000,
1627         BFLOCK_SIGNAL_2398 =    0x1001,
1628         BFLOCK_SIGNAL_2400 =    0x1002,
1629         BFLOCK_SIGNAL_2500 =    0x1003,
1630         BFLOCK_SIGNAL_2997 =    0x1004,
1631         BFLOCK_SIGNAL_3000 =    0x1005,
1632         BFLOCK_SIGNAL_4795 =    0x1006,
1633         BFLOCK_SIGNAL_4800 =    0x1007,
1634         BFLOCK_SIGNAL_5000 =    0x1008,
1635         BFLOCK_SIGNAL_5994 =    0x1009,
1636         BFLOCK_SIGNAL_6000 =    0x100A,
1637 }EBFLockSignalType;
1638
1639 #define SET_EPOCH_SCALER_MODE(scaler_id,video_mode) ((scaler_id <<16)|video_mode)
1640 #define GET_EPOCH_SCALER_MODE(value)                            (value&0xFFFF)
1641 #define GET_EPOCH_SCALER_ID(value)                                      ((value&0xFFFF0000)>>16)
1642
1643
1644 // use these macros for retreiving the temp and fan speed.
1645 // on epoch range of cards.
1646 #define EPOCH_CORE_TEMP(value)                                  (value & 0xFF)
1647 #define EPOCH_BOARD_TEMP(value)                                 ((value>>16) & 0xFF)
1648 #define EPOCH_FAN_SPEED(value)                                  ((value>>24) & 0xFF)
1649
1650 /** 
1651         @desc   use these macro for doing the MR2 routing  on epoch range of cards.
1652                         MR2 routing can be controlled using the property MR_ROUTING.
1653 */
1654 #define EPOCH_SET_ROUTING(routing_src,routing_dest,data_link_type) ((routing_src & 0xFF) | ((routing_dest & 0xFF)<<8) | ((data_link_type&0xFFFF)<<16))
1655 #define EPOCH_ROUTING_GET_SRC_DATA(value)               (value & 0xFF)
1656 #define EPOCH_ROUTING_GET_DEST_DATA(value)              ((value>>8) & 0xFF)
1657 #define EPOCH_ROUTING_GET_LINK_TYPE_DATA(value) ((value>>16) & 0xFFFF)
1658
1659 #define GPIO_TX_PORT_A  (1)
1660 #define GPIO_TX_PORT_B  (2)
1661
1662 #define EPOCH_GPIO_TX(port,value)       (port<<16|value) // if want to set each of the GPO 
1663                                                                                                         // ports individually you should use this macro.
1664                                                                                                         // without the macro it would set both the GPO
1665                                                                                                         // ports on the card
1666
1667 /**
1668         @desc   use these macros for controlling epoch application watch dog settings.
1669                         The card property EPOCH_APP_WATCHDOG_TIMER can be used to control 
1670                         the watchdog timer functionality.
1671 */
1672 enum enum_blue_app_watchdog_timer_prop
1673 {
1674         enum_blue_app_watchdog_timer_start_stop=(1<<31),                        // can be used to enable/disable timer 
1675         enum_blue_app_watchdog_timer_keepalive=(1<<30),                         // can be used to reset the timer value
1676         enum_blue_app_watchdog_timer_get_present_time=(1<<29),          // can query to get the value of the timer
1677         enum_blue_app_watchdog_get_timer_activated_status=(1<<28),      // can query to get whether the timer has been activated
1678         enum_blue_app_watchdog_get_timer_start_stop_status=(1<<27),     // can query whether the timer has been set.
1679         enum_blue_app_watchdog_enable_gpo_on_active=(1<<26), // using this enumerator you can tell the system that when 
1680                                                                                                                 // application watchdog timer has expired whether a GPO output should be triggered or not.
1681                                                                                                                 // you can use also use this  enumerator  to select
1682                                                                                                                 // which GPO output should be triggered with this. to use GPO port A pass a value of 
1683                                                                                                                 // GPIO_TX_PORT_A when this enumerator is used.
1684         enum_blue_hardware_watchdog_enable_gpo=(1<<25) // can be used to enable/disable GPO trigger when hardware watchdog timer has been 
1685                                                                                                         // triggered
1686 };
1687
1688 #define EPOCH_WATCHDOG_TIMER_SET_MACRO(prop,value) (prop|(value &0xFFFF))
1689 #define EPOCH_WATCHDOG_TIMER_QUERY_MACRO(prop) (prop)
1690 #define EPOCH_WATCHDOG_TIMER_GET_VALUE_MACRO(value) (value&0xFFFF)
1691
1692 enum enum_blue_rs422_port_flags
1693 {
1694         enum_blue_rs422_port_set_as_slave =(1<<0) // If this flag is set the RS422 port would be set to slave mode.
1695                                                                                           // by default port is setup to work in master mode , where it would be acting 
1696                                                                                           // as master in the transactions.                                                                                       
1697 };
1698 #define EPOCH_RS422_PORT_FLAG_SET_MACRO(portid,value)   ((portid&0x3)|(value<<3))
1699 #define EPOCH_RS422_PORT_FLAG_GET_FLAG_MACRO(value)             ((value>>3)&0xFFFF)
1700 #define EPOCH_RS422_PORT_FLAG_GET_PORTID_MACRO(value)   (value&0x3)
1701
1702
1703 enum enum_blue_dvb_asi_packing_format
1704 {
1705         enum_blue_dvb_asi_packed_format=1,/**< In this packing method the asi packets are stored as 188 or 204 bytes*/
1706         enum_blue_dvb_asi_packed_format_with_timestamp=2,/**< In this packing method the asi packets are stored as (8+188) or (8+204) bytes
1707                                                                                                                         The timestamp is stored at the begininig of the packet , using 8 bytes*/
1708         enum_blue_dvb_asi_256byte_container_format=3,
1709         enum_blue_dvb_asi_256byte_container_format_with_timestamp=4
1710 };
1711
1712 enum enum_blue_dvb_asi_packet_size
1713 {
1714         enum_blue_dvb_asi_packet_size_188_bytes = 1,
1715         enum_blue_dvb_asi_packet_size_204_bytes = 2
1716 };
1717
1718
1719 #define RS422_SERIALPORT_FLAG(timeout,port,RxFlushBuffer) (((unsigned long)(timeout)<<16)|(port & 0x3) | (RxFlushBuffer<<15))
1720 // use this macro with Wait_For_SerialPort_InputData,
1721 // if you you want the  function to return 
1722 // immediatelty when it gets byte in the serial RX port.
1723 #define RS422_SERIALPORT_FLAG2(timeout,port,RxFlushBuffer,RXIntWaitReturnOnAvailData) (((unsigned long)(timeout)<<16)|(port & 0x3) | (RxFlushBuffer<<15)|(RXIntWaitReturnOnAvailData<<14))
1724
1725 typedef enum _blue_blackgenerator_status
1726 {
1727         ENUM_BLACKGENERATOR_OFF =       0,      //producing normal video output
1728         ENUM_BLACKGENERATOR_ON =        1,      //producing black video output
1729         ENUM_BLACKGENERATOR_SDI_SYNC_OFF =      2       //no valid SDI signal is coming out of our SDI output connector; only available in Epoch ASI firmware
1730 }blue_blackgenerator_status;
1731
1732 typedef enum _EBlueExternalLtcSource
1733 {
1734         EXT_LTC_SRC_BREAKOUT_HEADER = 0,        //default; header on the PCB board/Shield
1735         EXT_LTC_SRC_GENLOCK_BNC = 1                     //Genlock BNC connector
1736 }EBlueExternalLtcSource;
1737
1738 ////the following macros are used with card property INTERLOCK_REFERENCE
1739 #define INTERLOCK_REFERENCE_GET_OUTPUT_ENABLED(value)           ((value)                & 0x01)
1740 #define INTERLOCK_REFERENCE_GET_INPUT_DETECTED(value)           ((value >> 1)   & 0x01)
1741 #define INTERLOCK_REFERENCE_GET_SLAVE_POSITION(value)           ((value >> 2)   & 0x1F)
1742
1743 //the following macros are used with card property CARD_FEATURE_STREAM_INFO
1744 #define CARD_FEATURE_GET_SDI_OUTPUT_STREAM_COUNT(value)         ((value)                & 0xF)
1745 #define CARD_FEATURE_GET_SDI_INPUT_STREAM_COUNT(value)          ((value >> 4)   & 0xF)
1746 #define CARD_FEATURE_GET_ASI_OUTPUT_STREAM_COUNT(value)         ((value >> 8)   & 0xF)
1747 #define CARD_FEATURE_GET_ASI_INPUT_STREAM_COUNT(value)          ((value >> 12)  & 0xF)
1748 #define CARD_FEATURE_GET_3G_SUPPORT(value)                                      ((value >> 13)  & 0xF)
1749
1750 //the following macros are used with card property CARD_FEATURE_CONNECTOR_INFO
1751 #define CARD_FEATURE_GET_SDI_OUTPUT_CONNECTOR_COUNT(value)      ((value)                & 0xF)
1752 #define CARD_FEATURE_GET_SDI_INPUT_CONNECTOR_COUNT(value)       ((value >> 4)   & 0xF)
1753 #define CARD_FEATURE_GET_AES_CONNECTOR_SUPPORT(value)           ((value >> 8)   & 0x1)
1754 #define CARD_FEATURE_GET_RS422_CONNECTOR_SUPPORT(value)         ((value >> 9)   & 0x1)
1755 #define CARD_FEATURE_GET_LTC_CONNECTOR_SUPPORT(value)           ((value >> 10)  & 0x1)
1756 #define CARD_FEATURE_GET_GPIO_CONNECTOR_SUPPORT(value)          ((value >> 11)  & 0x1)
1757 #define CARD_FEATURE_GET_HDMI_CONNECTOR_SUPPORT(value)          ((value >> 12)  & 0x1)
1758
1759 //the following macros are used with card property VIDEO_ONBOARD_KEYER
1760 #define VIDEO_ONBOARD_KEYER_GET_STATUS_ENABLED(value)                           ((value) & 0x1)
1761 #define VIDEO_ONBOARD_KEYER_GET_STATUS_OVER_BLACK(value)                        ((value) & 0x2)
1762 #define VIDEO_ONBOARD_KEYER_GET_STATUS_USE_INPUT_ANCILLARY(value)       ((value) & 0x4)
1763 #define VIDEO_ONBOARD_KEYER_GET_STATUS_DATA_IS_PREMULTIPLIED(value)     ((value) & 0x8)
1764 #define VIDEO_ONBOARD_KEYER_SET_STATUS_ENABLED(value)                           (value |= 0x1)
1765 #define VIDEO_ONBOARD_KEYER_SET_STATUS_DISABLED(value)                          (value &= ~(0x1))
1766 #define VIDEO_ONBOARD_KEYER_SET_STATUS_ENABLE_OVER_BLACK(value)         (value |= 0x2)
1767 #define VIDEO_ONBOARD_KEYER_SET_STATUS_DISABLE_OVER_BLACK(value)        (value &= ~(0x2))
1768 #define VIDEO_ONBOARD_KEYER_SET_STATUS_USE_INPUT_ANCILLARY(value)       (value |= 0x4)          //only use this setting when keying over valid input (input must also match output video mode), includes HANC and VANC
1769 #define VIDEO_ONBOARD_KEYER_SET_STATUS_USE_OUTPUT_ANCILLARY(value)      (value &= ~(0x4))
1770 #define VIDEO_ONBOARD_KEYER_SET_STATUS_DATA_IS_PREMULTIPLIED(value)     (value |= 0x8)
1771 #define VIDEO_ONBOARD_KEYER_SET_STATUS_DATA_IS_NOT_PREMULTIPLIED(value) (value &= ~(0x8))
1772
1773 //the following macros are used with card property EPOCH_HANC_INPUT_FLAGS
1774 #define HANC_FLAGS_IS_ARRI_RECORD_FLAG_SET(value)       ((value) & 0x1)
1775
1776 //the following macros are used with card property EPOCH_RAW_VIDEO_INPUT_TYPE
1777 #define RAW_VIDEO_INPUT_TYPE_IS_10BIT           (0x01)
1778 #define RAW_VIDEO_INPUT_TYPE_IS_12BIT           (0x02)
1779 #define RAW_VIDEO_INPUT_TYPE_IS_WEISSCAM        (0x10)
1780 #define RAW_VIDEO_INPUT_TYPE_IS_ARRI            (0x20)
1781
1782 //the following macros are used with card property EPOCH_PCIE_CONFIG_INFO
1783 #define PCIE_CONFIG_INFO_GET_MAX_PAYLOAD_SIZE(value) ((value) & 0xFFFF)
1784 #define PCIE_CONFIG_INFO_GET_MAX_READREQUEST_SIZE(value) ((value >> 16) & 0xFFFF)