From: ronag Date: Thu, 24 Nov 2011 16:28:36 +0000 (+0000) Subject: ntsc-audio-exp: Better synchronization of audio-cadence. X-Git-Tag: dependencies_subtree~6 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=7da2886d36f0d54646ee4c262d5e0f819572d125;p=casparcg ntsc-audio-exp: Better synchronization of audio-cadence. --- diff --git a/BluefishSDK_V5_10_0_42/Inc/BlueC_Api.h b/BluefishSDK_V5_10_0_42/Inc/BlueC_Api.h new file mode 100644 index 000000000..5831699e0 --- /dev/null +++ b/BluefishSDK_V5_10_0_42/Inc/BlueC_Api.h @@ -0,0 +1,107 @@ +// The following ifdef block is the standard way of creating macros which make exporting +// from a DLL simpler. All files within this DLL are compiled with the BLUEC_API_EXPORTS +// symbol defined on the command line. this symbol should not be defined on any project +// that uses this DLL. This way any other project whose source files include this file see +// BLUEC_API_API functions as being imported from a DLL, whereas this DLL sees symbols +// defined with this macro as being exported. +#ifdef BLUEFISH_EXPORTS +#define BLUE_CSDK_API __declspec(dllexport) +#else +#define BLUE_CSDK_API __declspec(dllimport) +#endif +#include "BlueTypes.h" +#include "BlueDriver_p.h" + +#define IGNORE_SYNC_WAIT_TIMEOUT_VALUE (0xFFFFFFFF) + + +#pragma once + +// +//typedef enum _blue_video_engine_flags +//{ +// BLUE_CAPTURE_PREVIEW_ON_OUTPUT_CHANNEL_A=0x1, +// BLUE_CAPTURE_PREVIEW_ON_OUTPUT_CHANNEL_B=0x2, +// BLUE_CAPTURE_PREVIEW_ON_OUTPUT_CHANNEL_C=0x3, +// BLUE_CAPTURE_PREVIEW_ON_OUTPUT_CHANNEL_D=0x4 +//}blue_video_engine_flags; +// +typedef enum _EBLUEDMA_DIRECTION +{ + BLUEDMA_WRITE=0, + BLUEDMA_READ=1, + BLUEDMA_INVALID=3 +}EBLUEDMA_DIRECTION; + +typedef struct _EBlueConnectorPropertySetting +{ + EBlueVideoChannel channel; + EBlueConnectorIdentifier connector; + EBlueConnectorSignalDirection signaldirection; + EBlueConnectorProperty propType; + VARIANT Value; +}EBlueConnectorPropertySetting; + + +typedef struct _blue_card_property +{ + EBlueVideoChannel video_channel; + EBlueCardProperty prop; + VARIANT value; +}blue_card_property; + + +extern "C" { +BLUE_CSDK_API unsigned int blue_device_count(); +BLUE_CSDK_API void * blue_attach_to_device(int device_id); +BLUE_CSDK_API BERR blue_detach_from_device(void ** device_handle); + +// +//BLUE_CSDK_API BERR blue_set_video_engine( void * device_handle, +// EBlueVideoChannel video_channel, +// EEngineMode * video_engine, +// BLUE_UINT32 video_engine_flag); +BLUE_CSDK_API BERR blue_video_dma( void * device_handle, + EBLUEDMA_DIRECTION dma_direction, + void * pFrameBuffer, + BLUE_UINT32 FrameSize, + BLUE_UINT32 BufferId, + BLUE_UINT32 * dma_bytes_transferred, + BLUE_UINT32 CardFrameOffset, + OVERLAPPED * pAsync + ); + + +/* + functions used to set the card property . This includes the video property + and the video connection/routing property. +*/ +BLUE_CSDK_API BERR blue_set_video_property( void * device_handle, + BLUE_UINT32 prop_count, + blue_card_property * card_prop); + +BLUE_CSDK_API BERR blue_get_video_property( void * device_handle, + BLUE_UINT32 prop_count, + blue_card_property * card_prop); + +BLUE_CSDK_API BERR blue_get_connector_property(void * device_handle, + BLUE_UINT32 VideoChannel, + BLUE_UINT32 *settingsCount, // In: element count of settings array + // Out: if settings is non-NULL, number of valid elements + // Out: if settings is NULL, number of elements required + EBlueConnectorPropertySetting *settings // Caller allocates/frees memory + ); + +BLUE_CSDK_API BERR blue_set_connector_property( + void * device_handle, + BLUE_UINT32 settingsCount, + EBlueConnectorPropertySetting *settings + ); + +//BLUE_CSDK_API BERR blue_wait_video_interrupt(void * device_handle, +// EBlueVideoChannel video_channel, +// EUpdateMethod upd_fmt, +// BLUE_UINT32 field_wait_count, +// BLUE_UINT32 *field_count +// ); +} \ No newline at end of file diff --git a/BluefishSDK_V5_10_0_42/Inc/BlueDriver_p.h b/BluefishSDK_V5_10_0_42/Inc/BlueDriver_p.h new file mode 100644 index 000000000..4d0bed683 --- /dev/null +++ b/BluefishSDK_V5_10_0_42/Inc/BlueDriver_p.h @@ -0,0 +1,1545 @@ +/* + $Id: BlueDriver_p.h,v 1.62.2.16 2011/10/26 05:33:18 tim Exp $ +*/ +#pragma once +#define _BLUEDRIVER_P_H__ +#define BLUE_UINT32 unsigned int +#define BLUE_INT32 int +#define BLUE_UINT8 unsigned char +#define BLUE_INT8 char +#define BLUE_UINT16 unsigned short +#define BLUE_INT16 short +#pragma once +#ifdef BLUE_LINUX_CODE +#define BLUE_UINT64 unsigned long long +//#include +#else +#define BLUE_UINT64 unsigned __int64 +#endif + +//#define ORAC_FILMPOST_FIRMWARE_PRODUCTID (0x1) +//#define ORAC_BROADCAST_FIRMWARE_PRODUCTID (0x2) +//#define ORAC_ASI_FIRMWARE_PRODUCTID (0x3) +//#define ORAC_4SDIINPUT_FIRMWARE_PRODUCTID (0x4) +//#define ORAC_4SDIOUTPUT_FIRMWARE_PRODUCTID (0x5) + + + +/** + * This contains the enumerators that can be used to set the cards \n + * video output and also to determine the video mode of the incoming \n + * video signal. + */ +typedef enum _EVideoMode +{ + VID_FMT_PAL=0, + VID_FMT_NTSC=1, + VID_FMT_576I_5000=0, /**< 720 x 576 50 Interlaced */ + VID_FMT_486I_5994=1, /**< 720 x 486 60/1.001 Interlaced */ + VID_FMT_720P_5994, /**< 1280 x 720 60/1.001 Progressive */ + VID_FMT_720P_6000, /**< 1280 x 720 60 Progressive */ + VID_FMT_1080PSF_2397, /**< 1920 x 1080 24/1.001 Segment Frame */ + VID_FMT_1080PSF_2400, /**< 1920 x 1080 24 Segment Frame */ + VID_FMT_1080P_2397, /**< 1920 x 1080 24/1.001 Progressive */ + VID_FMT_1080P_2400, /**< 1920 x 1080 24 Progressive */ + VID_FMT_1080I_5000, /**< 1920 x 1080 50 Interlaced */ + VID_FMT_1080I_5994, /**< 1920 x 1080 60/1.001 Interlaced */ + VID_FMT_1080I_6000, /**< 1920 x 1080 60 Interlaced */ + VID_FMT_1080P_2500, /**< 1920 x 1080 25 Progressive */ + VID_FMT_1080P_2997, /**< 1920 x 1080 30/1.001 Progressive */ + VID_FMT_1080P_3000, /**< 1920 x 1080 30 Progressive */ + VID_FMT_HSDL_1498, /**< 2048 x 1556 15/1.0 Segment Frame */ + VID_FMT_HSDL_1500, /**< 2048 x 1556 15 Segment Frame */ + VID_FMT_720P_5000, /**< 1280 x 720 50 Progressive */ + VID_FMT_720P_2398, /**< 1280 x 720 24/1.001 Progressive */ + VID_FMT_720P_2400, /**< 1280 x 720 24 Progressive */ + VID_FMT_2048_1080PSF_2397=19, /**< 2048 x 1080 24/1.001 Segment Frame */ + VID_FMT_2048_1080PSF_2400=20, /**< 2048 x 1080 24 Segment Frame */ + VID_FMT_2048_1080P_2397=21, /**< 2048 x 1080 24/1.001 progressive */ + VID_FMT_2048_1080P_2400=22, /**< 2048 x 1080 24 progressive */ + VID_FMT_1080PSF_2500=23, + VID_FMT_1080PSF_2997=24, + VID_FMT_1080PSF_3000=25, + VID_FMT_1080P_5000=26, + VID_FMT_1080P_5994=27, + VID_FMT_1080P_6000=28, + VID_FMT_720P_2500=29, + VID_FMT_720P_2997=30, + VID_FMT_720P_3000=31, + VID_FMT_DVB_ASI=32, + VID_FMT_2048_1080PSF_2500=33, + VID_FMT_2048_1080PSF_2997=34, + VID_FMT_2048_1080PSF_3000=35, + VID_FMT_2048_1080P_2500=36, + VID_FMT_2048_1080P_2997=37, + VID_FMT_2048_1080P_3000=38, + VID_FMT_2048_1080P_5000=39, + VID_FMT_2048_1080P_5994=40, + VID_FMT_2048_1080P_6000=41, + VID_FMT_INVALID=42 +} EVideoMode; + +/** +@brief Use these enumerators to set the pixel format + that should be used by the video input and output + framestores. +*/ +typedef enum _EMemoryFormat +{ + MEM_FMT_ARGB=0, /**< ARGB 4:4:4:4 */ + MEM_FMT_BV10=1, + MEM_FMT_BV8=2, + MEM_FMT_YUVS=MEM_FMT_BV8, + MEM_FMT_V210=3, // Iridium HD (BAG1) + MEM_FMT_RGBA=4, + MEM_FMT_CINEON_LITTLE_ENDIAN=5, + MEM_FMT_ARGB_PC=6, + MEM_FMT_BGRA=MEM_FMT_ARGB_PC, + MEM_FMT_CINEON=7, + MEM_FMT_2VUY=8, + MEM_FMT_BGR=9, + MEM_FMT_BGR_16_16_16=10, + MEM_FMT_BGRA_16_16_16_16=11, + MEM_FMT_VUYA_4444=12, + MEM_FMT_V216=13, + MEM_FMT_Y210=14, + MEM_FMT_Y216=15, + MEM_FMT_INVALID=16 +} EMemoryFormat; + +/** +@brief Used to control the video update type, + whether the card should capture/playback a + video frame or field. +*/ +typedef enum _EUpdateMethod +{ + UPD_FMT_FIELD=0, + UPD_FMT_FRAME, + UPD_FMT_FRAME_DISPLAY_FIELD1, + UPD_FMT_FRAME_DISPLAY_FIELD2, + UPD_FMT_INVALID, + UPD_FMT_FLAG_RETURN_CURRENT_UNIQUEID=0x80000000,/**< if this flag is used on epoch cards, function would + return the unique id of the current frame as the return value.*/ +} EUpdateMethod; + +typedef enum _EResoFormat +{ + RES_FMT_NORMAL=0, + RES_FMT_HALF, + RES_FMT_INVALID +} EResoFormat; + +typedef enum _ECardType +{ + CRD_BLUEDEEP_LT=0, // D64 Lite + CRD_BLUEDEEP_SD, // Iridium SD + CRD_BLUEDEEP_AV, // Iridium AV + CRD_BLUEDEEP_IO, // D64 Full + CRD_BLUEWILD_AV, // D64 AV + CRD_IRIDIUM_HD, // * Iridium HD + CRD_BLUEWILD_RT, // D64 RT + CRD_BLUEWILD_HD, // * BadAss G2 + CRD_REDDEVIL, // Iridium Full + CRD_BLUEDEEP_HD, // * BadAss G2 variant, proposed, reserved + CRD_BLUE_EPOCH_2K = CRD_BLUEDEEP_HD, + CRD_BLUE_EPOCH_2K_HORIZON=CRD_BLUE_EPOCH_2K, + CRD_BLUEDEEP_HDS, // * BadAss G2 variant, proposed, reserved + CRD_BLUE_ENVY, // Mini Din + CRD_BLUE_PRIDE, //Mini Din Output + CRD_BLUE_GREED, + CRD_BLUE_INGEST, + CRD_BLUE_SD_DUALLINK, + CRD_BLUE_CATALYST, + CRD_BLUE_SD_DUALLINK_PRO, + CRD_BLUE_SD_INGEST_PRO, + CRD_BLUE_SD_DEEPBLUE_LITE_PRO, + CRD_BLUE_SD_SINGLELINK_PRO, + CRD_BLUE_SD_IRIDIUM_AV_PRO, + CRD_BLUE_SD_FIDELITY, + CRD_BLUE_SD_FOCUS, + CRD_BLUE_SD_PRIME, + CRD_BLUE_EPOCH_2K_CORE, + CRD_BLUE_EPOCH_2K_ULTRA, + CRD_BLUE_EPOCH_HORIZON, + CRD_BLUE_EPOCH_CORE, + CRD_BLUE_EPOCH_ULTRA, + CRD_BLUE_CREATE_HD, + CRD_BLUE_CREATE_2K, + CRD_BLUE_CREATE_2K_ULTRA, + CRD_BLUE_CREATE_3D = CRD_BLUE_CREATE_2K, + CRD_BLUE_CREATE_3D_ULTRA = CRD_BLUE_CREATE_2K_ULTRA, + CRD_BLUE_SUPER_NOVA, + CRD_INVALID +} ECardType; + + +typedef enum _EHDCardSubType +{ + CRD_HD_FURY=1, + CRD_HD_VENGENCE=2, + CRD_HD_IRIDIUM_XP=3, + CRD_HD_IRIDIUM = 4, + CRD_HD_LUST=5, + CRD_HD_INVALID +}EHDCardSubType; + +enum EEpochFirmwareProductID +{ + ORAC_FILMPOST_FIRMWARE_PRODUCTID=(0x1), //Epoch/Create, standard firmware + ORAC_BROADCAST_FIRMWARE_PRODUCTID=(0x2), //Epoch + ORAC_ASI_FIRMWARE_PRODUCTID=(0x3), //Epoch + ORAC_4SDIINPUT_FIRMWARE_PRODUCTID=(0x4), //SuperNova + ORAC_4SDIOUTPUT_FIRMWARE_PRODUCTID=(0x5), //SuperNova + ORAC_2SDIINPUT_2SDIOUTPUT_FIRMWARE_PRODUCTID=(0x6), //SuperNova +}; + +/**< @brief Use this enumerator to select the audio channels that should be captured or played back. +*/ +typedef enum _BlueAudioChannelDesc +{ + MONO_FLAG = 0xC0000000, + MONO_CHANNEL_1 = 0x00000001, + MONO_CHANNEL_2 = 0x00000002, + MONO_CHANNEL_3 = 0x00000004, + MONO_CHANNEL_4 = 0x00000008, + MONO_CHANNEL_5 = 0x00000010, + MONO_CHANNEL_6 = 0x00000020, + MONO_CHANNEL_7 = 0x00000040, + MONO_CHANNEL_8 = 0x00000080, + MONO_CHANNEL_9 = 0x00000100,// to be used by analog audio output channels + MONO_CHANNEL_10 = 0x00000200,// to be used by analog audio output channels + MONO_CHANNEL_11 = 0x00000400,//actual channel 9 + MONO_CHANNEL_12 = 0x00000800,//actual channel 10 + MONO_CHANNEL_13 = 0x00001000,//actual channel 11 + MONO_CHANNEL_14 = 0x00002000,//actual channel 12 + MONO_CHANNEL_15 = 0x00004000,//actual channel 13 + MONO_CHANNEL_16 = 0x00008000,//actual channel 14 + MONO_CHANNEL_17 = 0x00010000,//actual channel 15 + MONO_CHANNEL_18 = 0x00020000 //actual channel 16 +}BlueAudioChannelDesc; + + +//---------------------------------------------------------------------------- +/**< +Use this enumeraotor to set the type of pcm audio data. +*/ +typedef enum +{ + AUDIO_CHANNEL_LOOPING_OFF = 0x00000000, /**< deprecated not used any more */ + AUDIO_CHANNEL_LOOPING = 0x00000001,/**< deprecated not used any more */ + AUDIO_CHANNEL_LITTLEENDIAN = 0x00000000, /**< if the audio data is little endian this flag must be set*/ + AUDIO_CHANNEL_BIGENDIAN = 0x00000002,/**< if the audio data is big endian this flag must be set*/ + AUDIO_CHANNEL_OFFSET_IN_BYTES = 0x00000004,/**< deprecated not used any more */ + AUDIO_CHANNEL_16BIT = 0x00000008, /**< if the audio channel bit depth is 16 bits this flag must be set*/ + AUDIO_CHANNEL_BLIP_PENDING = 0x00000010,/**< deprecated not used any more */ + AUDIO_CHANNEL_BLIP_COMPLETE = 0x00000020,/**< deprecated not used any more */ + AUDIO_CHANNEL_SELECT_CHANNEL = 0x00000040,/**< deprecated not used any more */ + AUDIO_CHANNEL_24BIT = 0x00000080/**< if the audio channel bit depth is 24 bits this flag must be set*/ +} EAudioFlags; + +/** +@desc Used to select Audio input source on new generation SD cards +@remarks +This enumerator works only when used with ReadAudioSample function. +*/ +typedef enum +{ + BLUE_AUDIO_AES=0, /**< Used to select All 8 channels of Digital Audio using AES/AES3id connector*/ + BLUE_AUDIO_ANALOG=1,/**< Used to select Analog audio*/ + BLUE_AUDIO_SDIA=2, /**< Used to select Emb audio from SDI A */ + BLUE_AUDIO_EMBEDDED=BLUE_AUDIO_SDIA, + BLUE_AUDIO_SDIB=3, /**< Used to select Emb audio from SDI B */ + BLUE_AUDIO_AES_PAIR0=4, /**< Used to select stereo pair 0 as audio input source. This is only supported on SD Greed Derivative cards.*/ + BLUE_AUDIO_AES_PAIR1=5,/**< Used to select stereo pair 1 as audio input source. This is only supported on SD Greed Derivative cards.*/ + BLUE_AUDIO_AES_PAIR2=6,/**< Used to select stereo pair 2 as audio input source. This is only supported on SD Greed Derivative cards.*/ + BLUE_AUDIO_AES_PAIR3=7,/**< Used to select stereo pair 3 as audio input source. This is only supported on SD Greed Derivative cards.*/ + BLUE_AUDIO_SDIC=8, /**< Used to select Emb audio from SDI C */ + BLUE_AUDIO_SDID=9, /**< Used to select Emb audio from SDI D */ + BLUE_AUDIO_INVALID=10 +} Blue_Audio_Connector_Type; + +typedef enum _EAudioRate +{ + AUDIO_SAMPLE_RATE_48K=48000, + AUDIO_SAMPLE_RATE_96K=96000, + AUDIO_SAMPLE_RATE_UNKNOWN=-1 +} EAudioRate; + +/**< +@brief use this enumerator to define the color space of the video signal on the SDI cable +*/ +typedef enum _EConnectorSignalColorSpace +{ + RGB_ON_CONNECTOR=0x00400000, /**< Use this enumerator if the colorspace of video data on the SDI cable is RGB
+ When using dual link capture/playback , user can choose the + color space of the data.
+ In single link SDI the color space of the signal is always YUB*/ + YUV_ON_CONNECTOR=0 /** + driver uses this information to choose the appropriate YUV conversion matrices.*/ + SMPTE_RANGE=1 /**< In this mode RGB data expected by the user (capture) or provided by the user(playback) is + in the range of 16-235(8 bit) or 64-940(10 bit0).
+ driver uses this information to choose the appropriate YUV conversion matrices.*/ +}ERGBDataRange; + +typedef enum _EHD_XCONNECTOR_MODE +{ + SD_SDI=1, + HD_SDI=2 +}EHD_XCONNECTOR_MODE; + +/**< @brief this enumerator can be used to set the image orienatation of the frame. +*/ +typedef enum _EImageOrientation +{ + ImageOrientation_Normal=0, /**< in this configuration , frame is top to bottom and left to right */ + ImageOrientation_VerticalFlip=1, /**< in this configuration frame is bottom to top and left to right*/ + ImageOrientation_Invalid=2, +}EImageOrientation; + +/**< @brief this enumerator defines the reference signal source that can be used with bluefish cards +*/ +typedef enum _EBlueGenlockSource +{ + BlueGenlockBNC=0, /**< Genlock is used as reference signal source */ + BlueSDIBNC=0x10000, /**< SDI input B is used as reference signal source */ + BlueSDI_B_BNC=BlueSDIBNC, + BlueSDI_A_BNC=0x20000,/**< SDI input A is used as reference signal source */ + BlueAnalog_BNC=0x40000, /**< Analog input is used as reference signal source */ + BlueSoftware=0x80000, +}EBlueGenlockSource; + + +typedef enum _EBlueVideoChannel +{ + BLUE_VIDEOCHANNEL_A=0, + BLUE_VIDEO_OUTPUT_CHANNEL_A=BLUE_VIDEOCHANNEL_A, + + BLUE_VIDEOCHANNEL_B=1, + BLUE_VIDEO_OUTPUT_CHANNEL_B=BLUE_VIDEOCHANNEL_B, + + BLUE_VIDEOCHANNEL_C=2, + BLUE_VIDEO_INPUT_CHANNEL_A=BLUE_VIDEOCHANNEL_C, + + BLUE_VIDEOCHANNEL_D=3, + BLUE_VIDEO_INPUT_CHANNEL_B=BLUE_VIDEOCHANNEL_D, + + BLUE_VIDEOCHANNEL_E=4, + BLUE_VIDEO_INPUT_CHANNEL_C=BLUE_VIDEOCHANNEL_E, + + BLUE_VIDEOCHANNEL_F=5, + BLUE_VIDEO_INPUT_CHANNEL_D=BLUE_VIDEOCHANNEL_F, + + BLUE_VIDEOCHANNEL_G=6, + BLUE_VIDEO_OUTPUT_CHANNEL_C=BLUE_VIDEOCHANNEL_G, + + BLUE_VIDEOCHANNEL_H=7, + BLUE_VIDEO_OUTPUT_CHANNEL_D=BLUE_VIDEOCHANNEL_H, + + BLUE_OUTPUT_MEM_MODULE_A=BLUE_VIDEO_OUTPUT_CHANNEL_A, + BLUE_OUTPUT_MEM_MODULE_B=BLUE_VIDEO_OUTPUT_CHANNEL_B, + BLUE_INPUT_MEM_MODULE_A=BLUE_VIDEO_INPUT_CHANNEL_A, + BLUE_INPUT_MEM_MODULE_B=BLUE_VIDEO_INPUT_CHANNEL_B, + //BLUE_JETSTREAM_SCALER_MODULE_0=0x10, + //BLUE_JETSTREAM_SCALER_MODULE_1=0x11, + //BLUE_JETSTREAM_SCALER_MODULE_2=0x12, + //BLUE_JETSTREAM_SCALER_MODULE_3=0x13, + + BLUE_VIDEOCHANNEL_INVALID=30 +}EBlueVideoChannel; + +typedef enum _EBlueVideoRouting +{ + BLUE_VIDEO_LINK_INVALID=0, + BLUE_SDI_A_LINK1=4, + BLUE_SDI_A_LINK2=5, + BLUE_SDI_B_LINK1=6, + BLUE_SDI_B_LINK2=7, + BLUE_ANALOG_LINK1=8, + BLUE_ANALOG_LINK2=9, + BLUE_SDI_A_SINGLE_LINK=BLUE_SDI_A_LINK1, + BLUE_SDI_B_SINGLE_LINK=BLUE_SDI_B_LINK1, + BLUE_ANALOG_SINGLE_LINK=BLUE_ANALOG_LINK1 + +}EBlueVideoRouting; + +typedef enum +{ + BLUE_FIFO_NULL_ATTRIBUTE=0x0, + BLUE_FIFO_ECHOPORT_ENABLED=0x1, + BLUE_FIFO_STEPMODE = 0x2, + BLUE_FIFO_LOOPMODE = 0x4 +}BlueVideoFifo_Attributes; + +typedef enum _BlueAudioOutputDest +{ + Blue_AnalogAudio_Output=0x0, + Blue_AES_Output=0x80000000, + Blue_Emb_Output=0x40000000, +}BlueAudioOutputDest; + + +/**<@brief this enumerator is not used need to be removed*/ +typedef enum _BlueAudioInputSource +{ + Blue_AES=0x10, + Blue_AnalogAudio=0x20, + Blue_SDIA_Embed=0x40, + Blue_SDIB_Embed=0x80, +}BlueAudioInputSource; + +typedef enum _EBlueConnectorIdentifier +{ + BLUE_CONNECTOR_INVALID = -1, + + // BNC connectors in order from top to bottom of shield + BLUE_CONNECTOR_BNC_A = 0, // BNC closest to top of shield + BLUE_CONNECTOR_BNC_B, + BLUE_CONNECTOR_BNC_C, + BLUE_CONNECTOR_BNC_D, + BLUE_CONNECTOR_BNC_E, + BLUE_CONNECTOR_BNC_F, + BLUE_CONNECTOR_GENLOCK, + + BLUE_CONNECTOR_ANALOG_VIDEO_1 = 100, + BLUE_CONNECTOR_ANALOG_VIDEO_2, + BLUE_CONNECTOR_ANALOG_VIDEO_3, + BLUE_CONNECTOR_ANALOG_VIDEO_4, + BLUE_CONNECTOR_ANALOG_VIDEO_5, + BLUE_CONNECTOR_ANALOG_VIDEO_6, + + BLUE_CONNECTOR_DVID_1 = 200, + BLUE_CONNECTOR_SDI_OUTPUT_A= BLUE_CONNECTOR_DVID_1, + BLUE_CONNECTOR_DVID_2, + BLUE_CONNECTOR_SDI_OUTPUT_B= BLUE_CONNECTOR_DVID_2, + BLUE_CONNECTOR_DVID_3, + BLUE_CONNECTOR_SDI_INPUT_A= BLUE_CONNECTOR_DVID_3, + BLUE_CONNECTOR_DVID_4, + BLUE_CONNECTOR_SDI_INPUT_B= BLUE_CONNECTOR_DVID_4, + BLUE_CONNECTOR_DVID_5, + BLUE_CONNECTOR_SDI_OUTPUT_C, + BLUE_CONNECTOR_SDI_OUTPUT_D, + + BLUE_CONNECTOR_AES = 300, + BLUE_CONNECTOR_ANALOG_AUDIO_1, + BLUE_CONNECTOR_ANALOG_AUDIO_2, + + BLUE_CONNECTOR_DVID_6, + BLUE_CONNECTOR_SDI_INPUT_C= BLUE_CONNECTOR_DVID_6, + BLUE_CONNECTOR_DVID_7, + BLUE_CONNECTOR_SDI_INPUT_D= BLUE_CONNECTOR_DVID_7, + + //BLUE_CONNECTOR_RESOURCE_BLOCK=0x400, + //BLUE_CONNECTOR_JETSTREAM_SCALER_0=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_JETSTREAM_SCALER_MODULE_0), + //BLUE_CONNECTOR_JETSTREAM_SCALER_1=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_JETSTREAM_SCALER_MODULE_1), + //BLUE_CONNECTOR_JETSTREAM_SCALER_2=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_JETSTREAM_SCALER_MODULE_2), + //BLUE_CONNECTOR_JETSTREAM_SCALER_3=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_JETSTREAM_SCALER_MODULE_3), + + //BLUE_CONNECTOR_OUTPUT_MEM_MODULE_A=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_OUTPUT_MEM_MODULE_A), + //BLUE_CONNECTOR_OUTPUT_MEM_MODULE_B=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_OUTPUT_MEM_MODULE_B), + //BLUE_CONNECTOR_INPUT_MEM_MODULE_A=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_INPUT_MEM_MODULE_A), + //BLUE_CONNECTOR_INPUT_MEM_MODULE_B=(BLUE_CONNECTOR_RESOURCE_BLOCK|BLUE_INPUT_MEM_MODULE_B), + // +}EBlueConnectorIdentifier; + +typedef enum _EBlueConnectorSignalDirection +{ + BLUE_CONNECTOR_SIGNAL_INVALID=-1, + BLUE_CONNECTOR_SIGNAL_INPUT=0, + BLUE_CONNECTOR_SIGNAL_OUTPUT=1, +}EBlueConnectorSignalDirection; + +typedef enum _EBlueConnectorProperty +{ + BLUE_INVALID_CONNECTOR_PROPERTY = -1, + + //signal property + BLUE_CONNECTOR_PROP_INPUT_SIGNAL=0, + BLUE_CONNECTOR_PROP_OUTPUT_SIGNAL=1, + + // Video output + BLUE_CONNECTOR_PROP_SDI = 0, + BLUE_CONNECTOR_PROP_YUV_Y, + BLUE_CONNECTOR_PROP_YUV_U, + BLUE_CONNECTOR_PROP_YUV_V, + BLUE_CONNECTOR_PROP_RGB_R, + BLUE_CONNECTOR_PROP_RGB_G, + BLUE_CONNECTOR_PROP_RGB_B, + BLUE_CONNECTOR_PROP_CVBS, + BLUE_CONNECTOR_PROP_SVIDEO_Y, + BLUE_CONNECTOR_PROP_SVIDEO_C, + + // Audio output + BLUE_CONNECTOR_PROP_AUDIO_AES = 0x2000, + BLUE_CONNECTOR_PROP_AUDIO_EMBEDDED, + BLUE_CONNECTOR_PROP_AUDIO_ANALOG, + + + BLUE_CONNECTOR_PROP_SINGLE_LINK=0x3000, + BLUE_CONNECTOR_PROP_DUALLINK_LINK_1, + BLUE_CONNECTOR_PROP_DUALLINK_LINK_2, + BLUE_CONNECTOR_PROP_DUALLINK_LINK, + + BLUE_CONNECTOR_PROP_STEREO_MODE_SIDE_BY_SIDE, + BLUE_CONNECTOR_PROP_STEREO_MODE_TOP_DOWN, + BLUE_CONNECTOR_PROP_STEREO_MODE_LINE_BY_LINE, + +}EBlueConnectorProperty; + +/* +typedef enum _BLUE_AUDIOINPUT_SOURCE +{ + BLUE_AES_AUDIO_INPUT=0x10000, + BLUE_ANALOG_AUDIO_INPUT=0x20000, + BLUE_SDIA_AUDIO_INPUT=0x30000, + BLUE_SDIB_AUDIO_INPUT=0x40000 +}BLUE_AUDIOINPUT_SOURCE; +*/ +/** +@desc use the values in this enumerator for controlling card property +*/ +typedef enum _EBlueCardProperty +{ + VIDEO_DUAL_LINK_OUTPUT=0,/**< Use this property to enable/diable cards dual link output property*/ + VIDEO_DUAL_LINK_INPUT=1,/**< Use this property to enable/diable cards dual link input property*/ + VIDEO_DUAL_LINK_OUTPUT_SIGNAL_FORMAT_TYPE=2, /** + Use the macro's EPOCH_CORE_TEMP ,EPOCH_BOARD_TEMP and EPOCH_FAN_SPEED + to retireive the respective values from the property.
+ */ + MR2_ROUTING=71, /**< Use this property to control the MR2 functionlity on epoch range of cards. + Use the following macro with this property.
+ 1) EPOCH_SET_ROUTING --> for setting the source, destination and link type of the routing connection,
+ 2) EPOCH_ROUTING_GET_SRC_DATA --> for getting the routing source.
+ The possible source and destination elements supported by the routing matrix are defined in the + enumerator EEpochRoutingElements.
+ */ + SAVEAS_POWERUP_SETTINGS=72, + VIDEO_CAPTURE_AVAIL_BUFFER_COUNT=73, /**< This property will return the number of captured frame avail in the fifo at present. + If the video engine is framestore this will give you the number of buffers that the framestore mode + can you use with that video input channel */ + EPOCH_APP_WATCHDOG_TIMER=74,/**< Use this property to control the application watchdog timer functionality. + Possible values this property can accept is defined in the enumerator enum_blue_app_watchdog_timer_prop. + */ + EPOCH_RESET_VIDEO_INPUT_FIELDCOUNT=75, /**< Use this property to reset the field count on both the + video channels of the card. You can pass the value that + should be used as starting fieldcount after the reset. + This property can be used to keep track sync between left and right signal + when you are capturing in stereoscopic mode. + */ + EPOCH_RS422_PORT_FLAGS=76,/**< Use this property to set the master/slave property of the RS422 ports. + Possible values this property can accept is defined in the enumerator enum_blue_rs422_port_flags. + */ + EPOCH_DVB_ASI_INPUT_TIMEOUT=77, /**< Current DVB ASI input firmware does not support this property in hardware, + this is a future addition. + Use this property to set the timeout of the DVB ASI input stream. + timeout is specified in milliseconds.If hardware did not get the required no of + packets( specified using EPOCH_DVB_ASI_INPUT_LATENCY_PACKET_COUNT) + within the period specified in the timeout, hardware would generate a video input interrupt + and it would be safe to read the dvb asi packet from the card. + */ + EPOCH_DVB_ASI_INPUT_PACKING_FORMAT=78, /**< Use this property to specify the packing method that should be used + when capturing DVB ASI packets. + The possible packing methods are defined in the enumerator enum_blue_dvb_asi_packing_format.*/ + 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 + notifies the driver of available data using video input interrupt.
+ */ + VIDEO_PLAYBACK_FIFO_CURRENT_FRAME_UNIQUEID=80, /**< This property can be used to query the current unique id of + the frame that is being displayed currently by the video output channel. This + property is only usefull in the context of video fifo.
+ You get a uniqueid when you present a frame using video_playback_present function. + Alternative ways to get this information are
+ 1) using blue_wait_video_sync_async , the member current_display_frame_uniqueid contains the same information
+ 2) using wait_video_output_sync function on epoch cards, if + the flag UPD_FMT_FLAG_RETURN_CURRENT_UNIQUEID is appended with + either UPD_FMT_FRAME or UPD_FMT_FIELD , the return value of + the function wait_video_output_sync woukd contain the current display + frames uniqueid.
*/ + + EPOCH_DVB_ASI_INPUT_GET_PACKET_SIZE = 81,/**< use this property to get the size of each asi transport stream packet + (whether it is 188 or 204.*/ + EPOCH_DVB_ASI_INPUT_PACKET_COUNT = 82,/**< this property would give you the number of packets captured during the last + interrupt time frame. For ASI interrupt is generated if + hardware captured the requested number of packets or it hit the + timeout value + */ + EPOCH_DVB_ASI_INPUT_LIVE_PACKET_COUNT = 83,/**< this property would give you the number of packets that + is being captured during the current interrupt time frame. + For ASI interrupt is generated when has hardware captured the + requested number of packets specified using + EPOCH_DVB_ASI_INPUT_LATENCY_PACKET_COUNT property. + */ + EPOCH_DVB_ASI_INPUT_AVAIL_PACKETS_IN_FIFO = 84,/**< This property would return the number of ASI packets + that has been captured into card memory , that + can be retreived. + This property is only valid when the video input + channel is being used in FIFO modes. + */ + EPOCH_ROUTING_SOURCE_VIDEO_MODE=VIDEO_SCALER_MODE,/**< Use this property to change the video mode that scaler should be set to. + USe the macro SET_EPOCH_SCALER_MODE when using this property, as this macro + would allow you to select which one of the scaler blocks video mode should be updated. + */ + EPOCH_AVAIL_VIDEO_SCALER_COUNT=85,/**< This property would return available scaler processing block available on the card.*/ + EPOCH_ENUM_AVAIL_VIDEO_SCALERS_ID=86,/**< You can enumerate the available scaler processing block available on the card using this property. + You pass in the index value as input parameter to get the scaler id that should be used. + Applications are recommended to use this property to query the available scaler id's + rather than hardcoding a scaler id. As the scaler id's that you can use would vary based on + whether you have VPS0 or VPS1 boards loaded on the base board. + */ + EPOCH_ALLOCATE_VIDEO_SCALER=87, /**< This is just a helper property for applications who need to use more than one scaler + and just wants to query the next available scaler from the driver pool, rather than hardcoding + each thread to use a particular scaler. + Allocate a free scaler from the available scaler pool. + User has got the option to specify whether they want to use the scaler for + use with a single link or dual link stream */ + EPOCH_RELEASE_VIDEO_SCALER=88, /**< Release the previously allocated scaler processing block back to the free pool. + If the user passes in a value of 0, all the allocated scaler blocks in the driver are released. + So effectively + */ + EPOCH_DMA_CARDMEMORY_PITCH=89, + EPOCH_OUTPUT_CHANNEL_AV_OFFSET=90, + EPOCH_SCALER_CHANNEL_MUX_MODE=91, + EPOCH_INPUT_CHANNEL_AV_OFFSET=92, + EPOCH_AUDIOOUTPUT_MANUAL_UCZV_GENERATION=93,/* ASI firmware only */ + EPOCH_SAMPLE_RATE_CONVERTER_BYPASS=94, + EPOCH_GET_PRODUCT_ID=95, /* returns the enum for the firmware type EEpochFirmwareProductID */ + EPOCH_GENLOCK_IS_LOCKED=96, + EPOCH_DVB_ASI_OUTPUT_PACKET_COUNT=97, /* ASI firmware only */ + EPOCH_DVB_ASI_OUTPUT_BIT_RATE=98, /* ASI firmware only */ + EPOCH_DVB_ASI_DUPLICATE_OUTPUT_A=99, /* ASI firmware only */ + EPOCH_DVB_ASI_DUPLICATE_OUTPUT_B=100, /* ASI firmware only */ + EPOCH_SCALER_HORIZONTAL_FLIP=101, /* see SideBySide_3D sample application */ + EPOCH_CONNECTOR_DIRECTION=102, /* see application notes */ + EPOCH_AUDIOOUTPUT_VALIDITY_BITS=103, /* ASI firmware only */ + EPOCH_SIZEOF_DRIVER_ALLOCATED_MEMORY=104, /* video buffer allocated in Kernel space; accessible in userland via system_buffer_map() */ + INVALID_VIDEO_MODE_FLAG=105, /* returns the enum for VID_FMT_INVALID that this SDK/Driver was compiled with; + it changed between 5.9.x.x and 5.10.x.x driver branch and has to be handled differently for + each driver if the application wants to use the VID_FMT_INVALID flag and support both driver branches */ + EPOCH_VIDEO_INPUT_VPID=106, /* returns the VPID for the current video input signal */ + EPOCH_LOW_LATENCY_DMA=107, /* not fully supported yet */ + EPOCH_VIDEO_INPUT_RGB_DATA_RANGE=108, + + VIDEO_CARDPROPERTY_INVALID=1000 +}EBlueCardProperty; + + +typedef enum _EAnalogConnectorSignalType +{ + ANALOG_OUTPUTSIGNAL_CVBS_Y_C=1, + ANALOG_OUTPUTSIGNAL_COMPONENT=2, + ANALOG_OUTPUTSIGNAL_RGB=4 +}EAnalogConnectorSignalType; + +/**< +@brief Use this enumerator to set the analog video signal types and connectors. +*/ +typedef enum _EAnalogInputConnectorType +{ +/* Composite input */ + ANALOG_VIDEO_INPUT_CVBS_AIN1=0x00, /**> BLUE_CARD_BUFFER_TYPE_OFFSET) +#define GetDMADataType(value) ((value & 0xF0000) >> BLUE_DMA_DATA_TYPE_OFFSET) +#define GetDMAFlags(value) ((value & 0xF00000) >> (BLUE_DMA_FLAGS_OFFSET)) + + +#define Blue_DMABuffer(CardBufferType,BufferId,DataType) ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \ + ( CardBufferType<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \ + ( ((ULONG)BufferId&0xFFF)) |0) + +#define BlueImage_VBI_DMABuffer(BufferId,DataType) ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \ + ( BLUE_CARDBUFFER_IMAGE_VBI<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \ + ( ((ULONG)BufferId&0xFFF)) |0) + +#define BlueImage_DMABuffer(BufferId,DataType) ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \ + ( BLUE_CARDBUFFER_IMAGE<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \ + ( ((ULONG)BufferId&0xFFF)) |0) + +#define BlueImage_VBI_HANC_DMABuffer(BufferId,DataType) ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \ + ( BLUE_CARDBUFFER_IMAGE_VBI_HANC<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \ + ( ((ULONG)BufferId&0xFFF)) |0) + +#define BlueImage_HANC_DMABuffer(BufferId,DataType) ( (((ULONG)DataType&0xF)<<(ULONG)BLUE_DMA_DATA_TYPE_OFFSET)| \ + ( BLUE_CARDBUFFER_IMAGE_HANC<<(ULONG)BLUE_CARD_BUFFER_TYPE_OFFSET) | \ + ( ((ULONG)BufferId&0xFFF)) |0) + + +#define BlueBuffer(CardBufferType,BufferId) (((CardBufferType)<>8) +#define SET_ANALOG_AUDIO_ROUTINGCHANNEL(left,right) (((right & 0xFF)<<8)|(left & 0xFF)) +#define SET_AUDIO_OUTPUT_ROUTINGCHANNEL(output_type,src_channel_id,_output_channel_id) ((1<<31)|((output_type&3)<<29)|((src_channel_id & 0x7F)<<16)|((_output_channel_id &0x3f)<<23)) +#define GET_AUDIO_OUTPUT_SRC_CHANNEL_ROUTING(value) ((value>>16) & 0x7F) +#define GET_AUDIO_OUTPUT_CHANNEL_ROUTING(value) ((value>>23) & 0x3F) +#define GET_AUDIO_OUTPUT_TYPE_ROUTING(value) ((value & 0x60000000)>>29) + +#define AUDIO_INPUT_SOURCE_SELECT_FLAG (1<<16) +#define AUDIO_INPUT_SOURCE_SELECT(SynchCount,AudioInputSource) (AUDIO_INPUT_SOURCE_SELECT_FLAG|(SynchCount)|(AudioInputSource<<17)) + +struct blue_video_connection_routing_struct +{ + BLUE_UINT32 video_channel; + BLUE_UINT32 duallink_flag; + BLUE_UINT32 link1_connector; + BLUE_UINT32 link2_connector; +}; + +#pragma pack(push, video_sync_struct, 1) +typedef struct _blue_video_sync_struct +{ + BLUE_UINT32 sync_wait_type;// field or frame + BLUE_UINT32 video_channel; // which video channel interrupt should the interrupt wait for + BLUE_UINT32 timeout_video_msc; //if the current video msc is equal to this one insert it into the queue. + BLUE_UINT32 video_msc; //current video msc + BLUE_UINT32 current_display_frame_id; // would give you the current frame id which is being displayed + BLUE_UINT32 current_display_frame_uniqueid; // would give you the unique id associated with current frame id which is being displayed + // this is only valid when using fifo modes. + BLUE_UINT8 pad[24]; +}blue_video_sync_struct; +#pragma pack(pop,video_sync_struct) + + +typedef enum _EBlueLUTType +{ + BLUE_MAIN_LUT_B_Pb=0, + BLUE_MAIN_LUT_G_Y=1, + BLUE_MAIN_LUT_R_Pr=2, + BLUE_AUX_LUT_B_Pb=3, + BLUE_AUX_LUT_G_Y=4, + BLUE_AUX_LUT_R_Pr=5, +}EBlueLUTType; + +#pragma pack(push, video_frame, 1) +struct VideoFeature_struct +{ + BLUE_UINT32 Type; // Bluefish card type + BLUE_UINT32 CardSubType; + BLUE_UINT32 Bus; // Which PIC bus (bridge) it is on + BLUE_UINT32 Slot; // Which slot card is plugged into + BLUE_UINT32 Feature; // Look at the _EBlueFishCardFeatures definition to know what each bit mean + BLUE_UINT32 FirmwareVersion; +}; + +struct blue_videoframe_info +{ + BLUE_UINT64 ltcTimeCode; + unsigned long videochannel; + unsigned long BufferId; + unsigned long Count; + unsigned long DroppedFrameCount; +}; + +struct blue_videoframe_info_ex +{ + BLUE_UINT64 ltcTimeCode; //LTC timecode + unsigned long videochannel; //the channel this frame was captured from + long BufferId; //this buffer contains the captured frame + unsigned long Count; //total captured frames + unsigned long DroppedFrameCount; //dropped frame count + unsigned long nFrameTimeStamp; //field count the frame was captured at + unsigned long nVideoSignalType; //video mode of this frame + unsigned int nASIPktCount; //only for DVB-ASI; how many ASI packets are in this frame + unsigned int nASIPktSize; //only for DVB-ASI; how many bytes per packet + unsigned int nAudioValidityBits; //part of the channels status block for audio + unsigned char pad[20]; //not used +}; + +struct blue_1d_lookup_table_struct +{ + BLUE_UINT32 nVideoChannel; + BLUE_UINT32 nLUTId; + BLUE_UINT16 * pLUTData; + BLUE_UINT32 nLUTElementCount; + BLUE_UINT8 pad[256]; +}; +#pragma pack(pop, video_frame) + +#pragma pack(push, blue_dma_request, 1) +struct blue_dma_request_struct +{ + unsigned char * pBuffer; + BLUE_UINT32 video_channel; + BLUE_UINT32 BufferId; + unsigned int BufferDataType; + unsigned int FrameType; + unsigned int BufferSize; + unsigned int Offset; + unsigned long BytesTransferred; + unsigned char pad[64]; +}; + +enum SerialPort_struct_flags +{ + SerialPort_Read=1, + SerialPort_Write=2, + SerialPort_TX_Queue_Status=4, + SerialPort_RX_Queue_Status=8, + SerialPort_RX_FlushBuffer=16, + SerialPort_RX_IntWait_Return_On_Data=32, + +}; + +struct SerialPort_struct +{ + unsigned char Buffer[64]; + unsigned int nBufLength; + unsigned int nSerialPortId; + unsigned int bFlag; // SerialPort_struct_flags + unsigned short sTimeOut; +}; + + +struct blue_video_scaler_ceofficent +{ + BLUE_UINT32 ioctl_read_only_flag; + BLUE_UINT32 nScalerId; + BLUE_UINT32 nScalerFilterType; + BLUE_UINT32 nScalerCoefficentWeight[15]; +}; + +enum blue_video_scaler_param_flags +{ + scaler_flags_set_destrect_as_framesize = 0x1, +}; + +struct blue_video_scaler_param_struct +{ + BLUE_UINT32 ioctl_read_only_flag; + BLUE_UINT32 nScalerId; + BLUE_UINT32 nSrcVideoHeight; + BLUE_UINT32 nSrcVideoWidth; + BLUE_UINT32 nSrcVideoYPos; + BLUE_UINT32 nSrcVideoXPos; + BLUE_UINT32 nDestVideoHeight; + BLUE_UINT32 nDestVideoWidth; + BLUE_UINT32 nDestVideoYPos; + BLUE_UINT32 nDestVideoXPos; + BLUE_UINT32 nHScaleFactor; + BLUE_UINT32 nVScaleFactor; + BLUE_UINT32 nScalerOutputVideoMode; + BLUE_UINT32 nScalerParamFlags; + BLUE_UINT32 pad[128]; +}; +#ifndef EXCLUDE_USERLAND_STRUCT +struct blue_color_matrix_struct{ + BLUE_UINT32 VideoChannel; + BLUE_UINT32 MatrixColumn; //MatrixColType enumerator defines this + double Coeff_B; + double Coeff_R; + double Coeff_G; + double Coeff_K; + double const_value; +}; +#endif +#pragma pack(pop, blue_dma_request) + +typedef enum _blue_output_hanc_ioctl_enum +{ + blue_get_output_hanc_buffer=0, + blue_put_output_hanc_buffer=1, + blue_get_valid_silent_hanc_data_status=3, + blue_set_valid_silent_hanc_data_status=4, + blue_start_output_fifo=5, + blue_stop_output_fifo=6, + blue_init_output_fifo=7, + blue_get_queues_info=8, + blue_get_output_fifo_info=blue_get_queues_info, + blue_get_output_fifo_status=9, + +}blue_output_hanc_ioctl_enum; + +typedef enum _blue_input_hanc_ioctl_enum +{ + blue_get_input_hanc_buffer=0, + blue_start_input_fifo=3, + blue_stop_input_fifo=4, + blue_init_input_fifo=5, + blue_playthru_input_fifo=6, + blue_release_input_hanc_buffer=7, + blue_map_input_hanc_buffer=8, + blue_unmap_input_hanc_buffer=9, + blue_get_info_input_hanc_fifo=10, + blue_get_input_rp188=11, + blue_get_input_fifo_status=12, +}blue_input_hanc_ioctl_enum; + + +#define HANC_PLAYBACK_INIT (0x00000001) +#define HANC_PLAYBACK_START (0x00000002) +#define HANC_PLAYBACK_STOP (0x00000004) + +#define HANC_CAPTURE_INIT (0x00000010) +#define HANC_CAPTURE_START (0x00000020) +#define HANC_CAPTURE_STOP (0x00000040) +#define HANC_CAPTURE_PLAYTHRU (0x00000080) + + +typedef enum _EOracFPGAConfigCMD +{ + ORAC_FPGA_CONFIG_CMD_ERASE_SECTOR=0, + ORAC_FPGA_CONFIG_CMD_UNLOCK_SECTOR=1, + ORAC_FPGA_CONFIG_CMD_WRITE_DATA=2, + ORAC_FPGA_CONFIG_CMD_STATUS=3, + ORAC_FPGA_CONFIG_CMD_READMODE=4, + ORAC_FPGA_CONFIG_RAW_WRITE=5, + ORAC_FPGA_CONFIG_RAW_READ=6, + ORAC_FPGA_CONFIG_CMD_READ_DATA=7, + ORAC_FPGA_CONFIG_INIT=8, + ORAC_FPGA_CONFIG_EXIT=9 +}EOracFPGAConfigCMD; + + +#define ANALOG_CHANNEL_0 MONO_CHANNEL_9 +#define ANALOG_CHANNEL_1 MONO_CHANNEL_10 + +/*Assumes that the data is in stereo pairs not individual samples*/ +#define STEREO_PAIR_1 (MONO_CHANNEL_1|MONO_CHANNEL_2) /* Mono Channel 1 & Mono channel 2* together*/ +#define STEREO_PAIR_2 (MONO_CHANNEL_3|MONO_CHANNEL_4) /* Mono Channel 3 & Mono Channel 4* together*/ +#define STEREO_PAIR_3 (MONO_CHANNEL_5|MONO_CHANNEL_6) /* Mono Channel 5 & Mono Channel 6* together*/ +#define STEREO_PAIR_4 (MONO_CHANNEL_7|MONO_CHANNEL_8) /* Mono Channel 7 & Mono Channel 8* together*/ + +#define ANALOG_AUDIO_PAIR (ANALOG_CHANNEL_0|ANALOG_CHANNEL_1) + +#define BLUE_LITTLE_ENDIAN 0 +#define BLUE_BIG_ENDIAN 1 + +#define GREED_SILENT_HANC_BUFFER1 250 +#define GREED_SILENT_HANC_BUFFER2 251 + +#define AES_SRC_BYPASS_CHANNEL_1_2 0x1 +#define AES_SRC_BYPASS_CHANNEL_3_4 0x2 +#define AES_SRC_BYPASS_CHANNEL_5_6 0x4 +#define AES_SRC_BYPASS_CHANNEL_7_8 0x8 + +typedef enum _EEpochRoutingElements +{ + EPOCH_SRC_DEST_SCALER_0=0x1, + EPOCH_SRC_DEST_SCALER_1, + EPOCH_SRC_DEST_SCALER_2, + EPOCH_SRC_DEST_SCALER_3, + + EPOCH_SRC_SDI_INPUT_A, + EPOCH_SRC_SDI_INPUT_B, + EPOCH_SRC_SDI_INPUT_C, + EPOCH_SRC_SDI_INPUT_D, + + EPOCH_DEST_SDI_OUTPUT_A, + EPOCH_DEST_SDI_OUTPUT_B, + EPOCH_DEST_SDI_OUTPUT_C, + EPOCH_DEST_SDI_OUTPUT_D, + + EPOCH_SRC_OUTPUT_MEM_INTERFACE_CHA, + EPOCH_SRC_OUTPUT_MEM_INTERFACE_CHB, + + EPOCH_DEST_INPUT_MEM_INTERFACE_CHA, + EPOCH_DEST_INPUT_MEM_INTERFACE_CHB, + + EPOCH_DEST_AES_ANALOG_AUDIO_OUTPUT, + + EPOCH_SRC_AV_SIGNAL_GEN, + EPOCH_SRC_DEST_VPIO_SCALER_0, + EPOCH_SRC_DEST_VPIO_SCALER_1, + + EPOCH_DEST_VARIVUE_HDMI, + + EPOCH_DEST_INPUT_MEM_INTERFACE_CHC, + EPOCH_DEST_INPUT_MEM_INTERFACE_CHD, + + EPOCH_SRC_OUTPUT_MEM_INTERFACE_CHC, + EPOCH_SRC_OUTPUT_MEM_INTERFACE_CHD, + +}EEpochRoutingElements; + + + +#define VPEnableFieldCountTrigger ((BLUE_UINT64)1<<63) +#define VPTriggerGetFieldCount(value) ((BLUE_UINT64)value & 0xFFFFFFFF) + +typedef enum _EBlueScalerFilterType +{ + BlueScalerHorizontalYFilter=1, + BlueScalerHorizontalCFilter=2, + BlueScalerVerticalYFilter=3, + BlueScalerVerticalCFilter=4, +}EBlueScalerFilterType; + + + +#define SET_EPOCH_SCALER_MODE(scaler_id,video_mode) ((scaler_id <<16)|video_mode) +#define GET_EPOCH_SCALER_MODE(value) (value&0xFFFF) +#define GET_EPOCH_SCALER_ID(value) ((value&0xFFFF0000)>>16) + + +// use these macros for retreiving the temp and fan speed. +// on epoch range of cards. +#define EPOCH_CORE_TEMP(value) (value & 0xFFFF) +#define EPOCH_BOARD_TEMP(value) ((value>>16) & 0xFF) +#define EPOCH_FAN_SPEED(value) ((value>>24) & 0xFF) + +/** + @desc use these macro for doing the MR2 routing on epoch range of cards. + MR2 routing can be controlled using the property MR_ROUTING. +*/ +#define EPOCH_SET_ROUTING(routing_src,routing_dest,data_link_type) ((routing_src & 0xFF) | ((routing_dest & 0xFF)<<8) | ((data_link_type&0xFFFF)<<16)) +#define EPOCH_ROUTING_GET_SRC_DATA(value) (value & 0xFF) +#define EPOCH_ROUTING_GET_DEST_DATA(value) ((value>>8) & 0xFF) +#define EPOCH_ROUTING_GET_LINK_TYPE_DATA(value) ((value>>16) & 0xFFFF) + +#define GPIO_TX_PORT_A (1) +#define GPIO_TX_PORT_B (2) + +#define EPOCH_GPIO_TX(port,value) (port<<16|value) // if want to set each of the GPO + // ports individually you should use this macro. + // without the macro it would set both the GPO + // ports on the card + +/** + @desc use these macros for controlling epoch application watch dog settings. + The card property EPOCH_APP_WATCHDOG_TIMER can be used to control + the watchdog timer functionality. +*/ +enum enum_blue_app_watchdog_timer_prop +{ + enum_blue_app_watchdog_timer_start_stop=(1<<31), // can be used to enable/disable timer + enum_blue_app_watchdog_timer_keepalive=(1<<30), // can be used to reset the timer value + enum_blue_app_watchdog_timer_get_present_time=(1<<29), // can query to get the value of the timer + enum_blue_app_watchdog_get_timer_activated_status=(1<<28), // can query to get whether the timer has been activated + enum_blue_app_watchdog_get_timer_start_stop_status=(1<<27), // can query whether the timer has been set. + enum_blue_app_watchdog_enable_gpo_on_active=(1<<26), // using this enumerator you can tell the system that when + // application watchdog timer has expired whether a GPO output should be triggered or not. + // you can use also use this enumerator to select + // which GPO output should be triggered with this. to use GPO port A pass a value of + // GPIO_TX_PORT_A when this enumerator is used. + enum_blue_hardware_watchdog_enable_gpo=(1<<25) // can be used to enable/disable GPO trigger when hardware watchdog timer has been + // triggered +}; + +#define EPOCH_WATCHDOG_TIMER_SET_MACRO(prop,value) (prop|(value &0xFFFF)) +#define EPOCH_WATCHDOG_TIMER_QUERY_MACRO(prop) (prop) +#define EPOCH_WATCHDOG_TIMER_GET_VALUE_MACRO(value) (value&0xFFFF) + +enum enum_blue_rs422_port_flags +{ + enum_blue_rs422_port_set_as_slave =(1<<0) // If this flag is set the RS422 port would be set to slave mode. + // by default port is setup to work in master mode , where it would be acting + // as master in the transactions. +}; +#define EPOCH_RS422_PORT_FLAG_SET_MACRO(portid,value) ((portid&0x3)|(value<<3)) +#define EPOCH_RS422_PORT_FLAG_GET_FLAG_MACRO(value) ((value>>3)&0xFFFF) +#define EPOCH_RS422_PORT_FLAG_GET_PORTID_MACRO(value) (value&0x3) + + +enum enum_blue_dvb_asi_packing_format +{ + enum_blue_dvb_asi_packed_format=1,/**< In this packing method the asi packets are stored as 188 or 204 bytes*/ + 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 + The timestamp is stored at the begininig of the packet , using 8 bytes*/ + enum_blue_dvb_asi_256byte_container_format=3, + enum_blue_dvb_asi_256byte_container_format_with_timestamp=4 +}; + + +#define RS422_SERIALPORT_FLAG(timeout,port,RxFlushBuffer) (((unsigned long)(timeout)<<16)|(port & 0x3) | (RxFlushBuffer<<15)) +// use this macro with Wait_For_SerialPort_InputData, +// if you you want the function to return +// immediatelty when it gets byte in the serial RX port. +#define RS422_SERIALPORT_FLAG2(timeout,port,RxFlushBuffer,RXIntWaitReturnOnAvailData) (((unsigned long)(timeout)<<16)|(port & 0x3) | (RxFlushBuffer<<15)|(RXIntWaitReturnOnAvailData<<14)) + +typedef enum _blue_blackgenerator_status +{ + ENUM_BLACKGENERATOR_OFF = 0, //producing normal video output + ENUM_BLACKGENERATOR_ON = 1, //producing black video output + ENUM_BLACKGENERATOR_SDI_SYNC_OFF = 2 //no valid SDI signal is coming out of our SDI output connector; only available in Epoch ASI firmware +}blue_blackgenerator_status; diff --git a/BluefishSDK_V5_10_0_42/Inc/BlueHANC.h b/BluefishSDK_V5_10_0_42/Inc/BlueHANC.h new file mode 100644 index 000000000..fbb3b3f73 --- /dev/null +++ b/BluefishSDK_V5_10_0_42/Inc/BlueHANC.h @@ -0,0 +1,372 @@ +#pragma once +#include "BlueDriver_p.h" + +#ifdef _WINDOWS +#pragma pack(push,1) +#endif + +#define BLUE_HANC_INVALID_DID (0x0) + +#define BLUE_HANC_AUDIOGROUP1 (0x2FF) +#define BLUE_HANC_AUDIOGROUP2 (0x1FD) +#define BLUE_HANC_AUDIOGROUP3 (0x1FB) +#define BLUE_HANC_AUDIOGROUP4 (0x2F9) +#define BLUE_HANC_RP188 (0x260) +#define BLUE_HANC_AUDIOGROUP1_CONTROL (0x1EF) +#define BLUE_HANC_AUDIOGROUP2_CONTROL (0x2EE) +#define BLUE_HANC_AUDIOGROUP3_CONTROL (0x2ED) +#define BLUE_HANC_AUDIOGROUP4_CONTROL (0x1EC) +#define BLUE_HANC_AUDIOGROUP1_EXTENDED (0x1FE) +#define BLUE_HANC_AUDIOGROUP2_EXTENDED (0x2FC) +#define BLUE_HANC_AUDIOGROUP3_EXTENDED (0x2FA) +#define BLUE_HANC_AUDIOGROUP4_EXTENDED (0x1F8) + + +#define HANC_PACKET_HEADER_CONST (0xBFFFFC00) + +#define BLUE_HANC_START_NEWLINE(line_number) ((0xC0000000)| (line_number << 16)) + +#define BLUE_HANC_CONTROL_WORD (0xC0000000) +#define BLUE_HANC_3DATA_PACKET_WORD (0x80000000) +#define BLUE_HANC_2DATA_PACKET_WORD (0x40000000) +#define BLUE_HANC_1DATA_PACKET_WORD (0x00000000) +#define BLUE_HANC_ENDOF_FRAME() ((0xC0000000)| (1 << 15)) + + +#define AESAUDIO_DATA_BLOCKSIZE (192) +#define MAX_HANC_BUFFER_SIZE (65536) //256*256 +#define MAX_HANC_BUFFER_SIZE_WITHOUT_HEADER (65536 - 0x20/4) //32 bytes = 8 * 4 (8 * UINT32) +#define MAX_HANC_BUFFER_SIZE_BYTES (256*1024) +#define MAX_HANC_BUFFER_SIZE_WITHOUT_HEADER_BYTES (256*1024 - 0x20) +/* +HANC Packet header structure +Contains 2 type of structure , +which makes it easier to parse the data +*/ + +struct GenericV210_structure +{ +#if defined(__LITTLE_ENDIAN__) || defined(_WINDOWS) || defined(BLUE_LINUX_CODE) + BLUE_UINT32 first_word:10,second_word:10,third_word:10,unused:2; +#else + BLUE_UINT32 unused:2,third_word:10,second_word:10,first_word:10; +#endif +#ifndef _WINDOWS +}__attribute__((packed)); +#else +}; +#endif + +union GenericV210_union +{ + struct GenericV210_structure v210_struct; + BLUE_UINT32 v210_word; +}; + +/* HANC packet header*/ +struct HancPacketHeaderStruct +{ +#if defined(__LITTLE_ENDIAN__) || defined(_WINDOWS) || defined(BLUE_LINUX_CODE) + union GenericV210_union ancillary_data_flag; // 0x0,0x3FF,0x3FF, This is a constant defined by smpte + union GenericV210_union packet_info; // first 10 bit word --> Data ID + // Commonly used Data ID packet values are + // 1) 0x2FF --> Group1 Embedded Audio packet + // 2) 0x1FD --> Group2 Embedded Audio Packet + // 3) 0x1FB --> Group3 Embedded Audio Packet + // 4) 0x2F9 --> Group4 Embedded Audio packet + // second 10 bit word --> Data Block Number + // This is used for type 1 packets. + // third 10 bit word --> Data Count + // This 10 bit word specifies the amount of user data + // that this hanc will contain. +#else + union GenericV210_union packet_info; + union GenericV210_union ancillary_data_flag; +#endif +#ifndef _WINDOWS +}__attribute__((packed)); +#else +}; +#endif + + +/* Audio SubFrame Packet */ +struct BlueAudioSubFrameStruct +{ +#if defined(__LITTLE_ENDIAN__) || defined(_WINDOWS) || defined(BLUE_LINUX_CODE) + BLUE_UINT32 ZBit:1, //bit 0 set to declare start of channel status word + Channel:2, //bit 1-2 + AudioData_0_5:6, //bit 3-8 + NotBit8:1, //bit 9 + AudioData_6_14:9, //bit 10-18 + NotBit18:1, //bit 19 use same value as NotBit8 (bit 9) + AudioData_15_19:5, //bit 20-24 + AESSampleValidityBit:1, //bit 25 + AESUserBit:1, //bit 26 + AESAudioChannelStatusBit:1, //bit 27 one bit of the channel status word + ParityBit:1, //bit 28 xor of all bits except (NotBit8 (bit 9) and NotBit18 (bit 19)) + NotBit31:1, //bit 29 not of ParityBit (bit 28) + akiraControlBits:2; //bit 30-31 +#else + BLUE_UINT32 akiraControlBits:2, + NotBit31:1, + ParityBit:1, + AESAudioChannelStatusBit:1, + AESUserBit:1, + AESSampleValidityBit:1, + AudioData_15_19:5, + NotBit18:1, + AudioData_6_14:9, + NotBit8:1, + AudioData_0_5:6, + Channel:2, + ZBit:1; +#endif + +#ifndef _WINDOWS +}__attribute__((packed)); +#else +}; +#endif + +union BlueAudioSubFrameHeader +{ + struct BlueAudioSubFrameStruct audioSubFrame; + BLUE_UINT32 BlueAudioSubFrameWord; + struct GenericV210_structure audioSubFrame_v210; +}; + +#define MAX_AUDIO_SUBFRAMES_IN_A_LINE (64) // 4 samples per audio group and 4 channesl for each audio group per sample + + +/* +Time code structure that the function expects is the same format as LTC time code +bits 0 - 3 :units of frame +bits 4 - 7: binary group1 +bits 8 - 9: tens of frame +bits 10 -11: flags +bits 12 -15: binary group2 +bits 16-19 : units of seconds +bits 20-23 : binary group3 + +bits 24 - 26: tens of seconds +bit 27 : flag +bits 28 - 31: group binary4 +bits 32 -35: units of minutes + +bits 36 - 39 :binary5 +bits 40 - 42: tens of minutes +bit 43 : flag +bits 44 - 47: binary group6 + +bits 48 - 51: units of hours +bits 52 - 55: binary group7 +bits 56 - 57: tens of hours +bits 58 - 59: flag +bits 60 - 63: binary8 + +*/ +struct LTC_TimeCode +{ +#if defined(__LITTLE_ENDIAN__) || defined(_WINDOWS) || defined(BLUE_LINUX_CODE) + BLUE_UINT64 unit_frame:4,binary1:4,ten_frame:2,drop_frame_flag:1,color_frame_flag:1, + binary2:4,unit_second:4,binary3:4,ten_second:3,unsued_1:1,binary4:4, + unit_minute:4,binary5:4,ten_minute:3,unsued_2:1,binary6:4,unit_hours:4, + binary7:4,ten_hours:2,unsued_3:2,binary8:4; +#else + BLUE_UINT64 binary8:4,unsued_3:2,ten_hours:2,binary7:4, + unit_hours:4,binary6:4,unused_2:1,ten_minute:3,binary5:4,unit_minute:4, + binary4:4,unused_1:1,ten_second:3,binary3:4,unit_second:4,binary2:4, + color_frame_flag:1,drop_frame_flag:1,ten_frame:2,binary1:4,unit_frame:4; +#endif + +#ifndef _WINDOWS +}__attribute__((packed)); +#else +}; +#endif + +struct LTC_TimeCode_union +{ + union + { + struct LTC_TimeCode struct_ltc; + BLUE_UINT64 lt_64_value; + }; +}; + +/* + This is used to unpack the timecode word properly and quickly + in RP188 each 4 bits of the timecode is put into a 10 bit word. + So this structure helps in decoding +*/ +struct nibble_struct +{ + BLUE_UINT8 first_half:4,second_half:4; + +#ifndef _WINDOWS +}__attribute__((packed)); +#else +}; +#endif + +struct TimeCode +{ + union + { + struct LTC_TimeCode struct_ltc; + BLUE_UINT64 ltc; + struct nibble_struct ltc_char[8]; + }; + +#ifndef _WINDOWS +}__attribute__((packed)); +#else +}; +#endif + +struct HANCTimeCodeStruct +{ +#if defined(__LITTLE_ENDIAN__) || defined(_WINDOWS) || defined(BLUE_LINUX_CODE) + BLUE_UINT32 zero_0:3, + DBB_0:1, + ANC_0:4, + partiy_0:1, + NotBit8_0:1, + zero_1:3, + DBB_1:1, + ANC_1:4, + partiy_1:1, + NotBit8_1:1, + zero_2:3, + DBB_2:1, + ANC_2:4, + partiy_2:1, + NotBit8_2:1, + akiraControlBits:2; +#else + BLUE_UINT32 akiraControlBits:2, + Notbit8_2:1, + partiy_2:1, + ANC_2:4, + DBB_2:1, + zero_2:3, + NotBit81_1:1, + partiy_1:1, + ANC_1:4, + DBB_1:1, + zero_1:3, + NotBit8_0:1, + partiy_0:1, + ANC_0:4, + DBB_0:1, + zero_0:3; +#endif + +#ifndef _WINDOWS +}__attribute__((packed)); +#else +}; +#endif + +union HANCTimeCode +{ + struct HANCTimeCodeStruct hanc_struct; + BLUE_UINT32 hanc_word; +}; + +struct BAG2VancTimeCodeStruct +{ +#if defined(__LITTLE_ENDIAN__) || defined(_WINDOWS) || defined(BLUE_LINUX_CODE) + BLUE_UINT16 zero_0:3, + DBB_0:1, + ANC_0:4, + partiy_0:1, + NotBit8_0:1; +#else + BLUE_UINT16 NotBit8_0:1, + partiy_0:1, + ANC_0:4, + DBB_0:1, + zero_0:3; +#endif + +#ifndef _WINDOWS +}__attribute__((packed)); +#else +}; +#endif + +union BAG2VancTimeCode +{ + struct BAG2VancTimeCodeStruct vanc_struct; + BLUE_UINT16 vanc_word; +}; + + +inline BLUE_UINT64 convert_countto_timecode(BLUE_UINT32 frame_count,BLUE_UINT32 framePerSec) +{ + unsigned int frames ,second,minutes ,hour ; + struct TimeCode rp188_timcode; + hour = frame_count/(60*60*framePerSec); + minutes = frame_count%(60*60*framePerSec); + second = minutes%(60*framePerSec); + frames = second %framePerSec; + second = second/(framePerSec); + minutes=minutes/(60*framePerSec); + rp188_timcode.ltc = 0; + rp188_timcode.struct_ltc.unit_frame = (frames%10); + rp188_timcode.struct_ltc.ten_frame = (frames/10); + rp188_timcode.struct_ltc.unit_second = (second%10); + rp188_timcode.struct_ltc.ten_second = (second/10); + rp188_timcode.struct_ltc.unit_minute = (minutes%10); + rp188_timcode.struct_ltc.ten_minute = (minutes/10); + rp188_timcode.struct_ltc.unit_hours = (hour%10); + rp188_timcode.struct_ltc.ten_hours = (hour/10); + + return rp188_timcode.ltc; +} + + +inline BLUE_UINT64 convert_timecode_to_count(BLUE_UINT64 timecode, + BLUE_UINT32 framePerSec, + unsigned int & frames , + unsigned int & second, + unsigned int & minutes , + unsigned int & hours) +{ + + struct TimeCode rp188_timecode; + rp188_timecode.ltc = timecode; + hours = (BLUE_UINT32)((unsigned int)rp188_timecode.struct_ltc.ten_hours*10)+(unsigned int)rp188_timecode.struct_ltc.unit_hours; + minutes = (BLUE_UINT32)((unsigned int)rp188_timecode.struct_ltc.ten_minute*10)+(unsigned int)rp188_timecode.struct_ltc.unit_minute; + second = (BLUE_UINT32)((unsigned int)rp188_timecode.struct_ltc.ten_second*10)+(unsigned int)rp188_timecode.struct_ltc.unit_second; + frames = (BLUE_UINT32)((unsigned int)rp188_timecode.struct_ltc.ten_frame*10)+(unsigned int)rp188_timecode.struct_ltc.unit_frame; + return rp188_timecode.ltc; +} + +// Determine endianess at run-time +inline BLUE_UINT32 Int32SwapBigLittle(const BLUE_UINT32 i) +{ + unsigned char c1, c2, c3, c4; + const int endian = 1; + #define is_bigendian() ( (*(char*) & endian) == 0 ) + + if (is_bigendian()) + { + c1 = i & 255; + c2 = (i >> 8) & 255; + c3 = (i >> 16) & 255; + c4 = (i >> 24) & 255; + + return ((int)c1 << 24) + ((int)c2 << 16) + ((int)c3 << 8) + c4; + } + else + { + return i; + } +} + +#ifdef _WINDOWS +#pragma pack(pop) +#endif \ No newline at end of file diff --git a/BluefishSDK_V5_10_0_42/Inc/BlueHancUtils.h b/BluefishSDK_V5_10_0_42/Inc/BlueHancUtils.h new file mode 100644 index 000000000..8af320d60 --- /dev/null +++ b/BluefishSDK_V5_10_0_42/Inc/BlueHancUtils.h @@ -0,0 +1,242 @@ +#pragma once +#ifndef BLUE_LINUX_CODE +#ifndef HANCUTILS_USE_STATIC_LIB + #ifdef HANCUTILS_EXPORTS + #define HANCUTILS_API __declspec(dllexport) + #elif defined(__APPLE__) + #define HANCUTILS_API + #define ATLTRACE printf + #else + #define HANCUTILS_API __declspec(dllimport) + #endif +#else + #define HANCUTILS_API +#endif +#else + #define HANCUTILS_API +typedef bool BOOL; +#endif +#include "BlueDriver_p.h" + + + + +extern "C" +{ +/** +@defgroup hanc_manipilation_function Embedded audio +@{ +*/ + +#pragma pack(push, hanc_struct, 1) + +/** +@brief The structure is used to extract/insert Embedded audio to and from the HANC stream of Greed and Leon based cards.*/ + +struct hanc_stream_info_struct +{ + BLUE_INT32 AudioDBNArray[4]; /**< Contains the DBN values that should be used for each of the embedded audio groups*/ + BLUE_INT32 AudioChannelStatusBlock[4]; /**< channel status block information for each of the embedded audio group*/ + BLUE_UINT32 flag_valid_time_code; /**< flag which identifies the validity of the time code member in the #hanc_stream_info_struct*/ + BLUE_UINT64 time_code; /**< RP188 time code that was extracted from the HANC buffer or RP188 timecode which should be inserted + into the HANC buffer*/ + BLUE_UINT32* hanc_data_ptr; /**< Hanc Buffer which should be used as the source or destination for either extraction or insertion */ + BLUE_UINT32 video_mode; /**< video mode which this hanc buffer which be used with. We need this information for do the required audio distribution + especially NTSC */ + BLUE_UINT64 ltc_time_code; + BLUE_UINT64 sd_vitc_time_code; + BLUE_UINT64 rp188_ltc_time_code; + BLUE_UINT32 pad[126]; +}; + +#define AUDIO_INPUT_SOURCE_EMB 0 +#define AUDIO_INPUT_SOURCE_AES 1 +struct hanc_decode_struct +{ + void* audio_pcm_data_ptr; // Buffer which would be used to store the extracted PCM + // audio data. Must be filled in by app before calling function. + BLUE_UINT32 audio_ch_required_mask; // which all audio channels should be extracted from the + // audio frame .Must be filled in by app before calling function. + BLUE_UINT32 type_of_sample_required;// type of destination audio channel + //ie 16 bit ,24 bit or 32 bit PCM data . + //Must be filled in by app before calling function. + BLUE_UINT32 no_audio_samples; // this would contain how many audio samples has been decoded from + // the hanc buffer. + BLUE_UINT64 timecodes[7]; // Would extract the timecode information from the audio frame. + void * raw_custom_anc_pkt_data_ptr; // This buffer would contain the raw ANC packets that was found in the orac hanc buffer. + // this would contain any ANC packets that is not of type embedded audio and RP188 TC. + //Must be filled in by app before calling function. can be NULL + BLUE_UINT32 sizeof_custom_anc_pkt_data_ptr; // size of the ANC buffer array + //Must be filled in by app before calling function. can be NULL + BLUE_UINT32 avail_custom_anc_pkt_data_bytes;// how many custom ANC packets has been decoded into raw_hanc_pkt_data_ptr + //Must be filled in by app before calling function. can be NULL + BLUE_UINT32 audio_input_source; // Used to select the audio input source. + // whether it is AES or Embedded. + //Must be filled in by app before calling function. + BLUE_UINT32 audio_temp_buffer[16]; // this is used to store split audio sample + // which did not contain all its audio channels + // in one audio frame + //Must be initialised to zero by app before first instantiating the function. + BLUE_UINT32 audio_split_buffer_mask; // The mask would be used to make a note of + // split audio sample information for a frame. + //Must be initialised to zero by app before first instantiating the function. + BLUE_UINT32 max_expected_audio_sample_count; // specify the maximum number of audio samples + // that the audio pcm buffer can contain. + //Must be filled in by app before calling function. + BLUE_UINT32 pad[124]; +}; + +#pragma pack(pop, hanc_struct) + +HANCUTILS_API BLUE_UINT32 encode_hanc_frame(struct hanc_stream_info_struct* hanc_stream_ptr, + void* audio_pcm_ptr, + BLUE_UINT32 no_audio_ch, + BLUE_UINT32 no_audio_samples, + BLUE_UINT32 nTypeOfSample, + BLUE_UINT32 emb_audio_flag); + +HANCUTILS_API BLUE_UINT32 encode_hanc_frame_ex( BLUE_UINT32 card_type, + struct hanc_stream_info_struct* hanc_stream_ptr, + void* audio_pcm_ptr, + BLUE_UINT32 no_audio_ch, + BLUE_UINT32 no_audio_samples, + BLUE_UINT32 nTypeOfSample, + BLUE_UINT32 emb_audio_flag); + + +HANCUTILS_API BLUE_UINT32 encode_hanc_frame_with_ucz( BLUE_UINT32 card_type, + struct hanc_stream_info_struct* hanc_stream_ptr, + void* audio_pcm_ptr, + BLUE_UINT32 no_audio_ch, + BLUE_UINT32 no_audio_samples, + BLUE_UINT32 nTypeOfSample, + BLUE_UINT32 emb_audio_flag, + BLUE_UINT8* pUCZBuffer); + +HANCUTILS_API BLUE_UINT32 create_embed_audiosample( void* raw_data_ptr, + BLUE_UINT32* emb_data_ptr, + BLUE_UINT32 channels_per_audio_sample, + BLUE_UINT32 bytes_per_ch, + BLUE_UINT32 no_samples, + BLUE_UINT32 emb_audio_flags, + BLUE_UINT8* Audio_Groups_DBN_Array, + BLUE_UINT8* Audio_Groups_statusblock_Array); + +HANCUTILS_API BLUE_UINT32* get_embed_audio_distribution_array(BLUE_UINT32 video_mode, BLUE_UINT32 sequence_no); +//HANCUTILS_API BLUE_UINT32 * GetAudioFrameSequence(BLUE_UINT32 video_output_standard); + +HANCUTILS_API bool hanc_stream_analyzer(BLUE_UINT32 *src_hanc_buffer,struct hanc_stream_info_struct * hanc_stream_ptr); +HANCUTILS_API bool orac_hanc_stream_analyzer(BLUE_UINT32 card_type,BLUE_UINT32 *src_hanc_buffer,struct hanc_decode_struct * decode_ptr,char * analyzer_output_file); +HANCUTILS_API bool hanc_decoder_ex( BLUE_UINT32 card_type, + BLUE_UINT32* src_hanc_buffer, + struct hanc_decode_struct* hanc_decode_struct_ptr); + +/** +@} +*/ + +/** +@defgroup vanc_manipilation_function vanc packet I/O +@{ +*/ + + +/** +@brief enumerator used by VANC manipulation function on HD cards to notify whether + VANC pakcet shoule be inserted/extracted from VANC Y buffers or VANC CbCr buffer. + This enumerator will only be used on HD video modes as it is the only with + 2 type of ANC bufers ir Y and CbCr. On SD Modes the ANC data is inserted across + both Y anc CbCr values. + +*/ +enum blue_vanc_pkt_type_enum +{ + blue_vanc_pkt_y_comp=0, /**< ANC pkt should be inserted/extracted from the Y component buffer*/ + blue_vanc_pkt_cbcr_comp=1 /**< ANC pkt should be inserted/extracted from the CbCr component buffer*/ +}; + +/*! +@brief Use this function to initialise VANC buffer before inserting any packets into the buffer +@param CardType type of bluefish card to which this vanc buffer was transferred to. +@param nVideoMode video mode under which this vanc buffer will be used. +@param pixels_per_line width in pixels of the vanc buffer that has to be initialised. +@param lines_per_frame height of the vanc buffer that has to be initialised. +@param pVancBuffer vanc buffer which has to be initialised. +@remarks. + +*/ +HANCUTILS_API BLUE_UINT32 blue_init_vanc_buffer(BLUE_UINT32 CardType,BLUE_UINT32 nVideoMode,BLUE_UINT32 pixels_per_line,BLUE_UINT32 lines_per_frame,BLUE_UINT32 * pVancBuffer); +/*! +@brief this function can be used to extract ANC packet from HD cards. Currently we can only extract packets in the VANC space. +@param CardType type of the card from which the vanc buffer was captured. +@param vanc_pkt_type This parameter denotes whether to search for the VANC packet in Y Space or Cb/Cr Space. + The values this parameter accepts are defined in the enumerator #blue_vanc_pkt_type_enum +@param src_vanc_buffer Vanc buffer which was captured from bluefish card +@param src_vanc_buffer_size size of the vanc buffer which should be parsed for the specified vanc packet +@param pixels_per_line specifies how many pixels are there in each line of VANC buffer +@param vanc_pkt_did specifies the DID of the Vanc packet which should be extracted from the buffer +@param vanc_pkt_sdid Returns the SDID of the extracted VANC packet +@param vanc_pkt_data_length returns the size of the extracted VANC packet. The size is specifed as number of UDW words + that was contained in the packet +@param vanc_pkt_data_ptr pointer to UDW of the VANC packets . The 10 bit UDW words are packed in a 16 bit integer. The bottom 10 bit of the + 16 bit word contains the UDW data. +@param vanc_pkt_line_no line number where the packet was found . + +@remarks. + +*/ +HANCUTILS_API BLUE_INT32 vanc_pkt_extract( + BLUE_UINT32 CardType, + BLUE_UINT32 vanc_pkt_type, + BLUE_UINT32 * src_vanc_buffer, + BLUE_UINT32 src_vanc_buffer_size, + BLUE_UINT32 pixels_per_line, + BLUE_UINT32 vanc_pkt_did, + BLUE_UINT16 * vanc_pkt_sdid, + BLUE_UINT16 * vanc_pkt_data_length, + BLUE_UINT16 * vanc_pkt_data_ptr, + BLUE_UINT16 * vanc_pkt_line_no); + +/** +@brief use this function to insert ANC packets into the VANC space of the HD cards. +@param CardType type of the card from which the vanc buffer was captured. +@param vanc_pkt_type This parameter denotes whether to search for the VANC packet in Y Space or Cb/Cr Space. + The values this parameter accepts are defined in the enumerator #blue_vanc_pkt_type_enum +@param vanc_pkt_line_no line in th VANC buffer where the ANC packet should inserted. +@param vanc_pkt_buffer vanc ANC packet which should be inserted into the VANC buffer. +@param vanc_pkt_buffer_size size of the ANC packet including the checksum ,ADF , SDID, DID and Data Count +@param dest_vanc_buffer VANC buffer into which the ANC packet will be inserted into. +@param pixels_per_line specifies how many pixels are there in each line of VANC buffer +*/ +HANCUTILS_API BLUE_INT32 vanc_pkt_insert( + BLUE_UINT32 CardType, + BLUE_UINT32 vanc_pkt_type, + BLUE_UINT32 vanc_pkt_line_no, + BLUE_UINT32 * vanc_pkt_buffer, + BLUE_UINT32 vanc_pkt_buffer_size, + BLUE_UINT32 * dest_vanc_buffer, + BLUE_UINT32 pixels_per_line); + +/** @} */ + +/** +@defgroup vanc_decode_encoder_helper ANC encoder/decoder + @{ +*/ +HANCUTILS_API BLUE_UINT32 decode_eia_708b_pkt(BLUE_UINT32 CardType,BLUE_UINT16 * vanc_pkt_data_ptr,BLUE_UINT16 pkt_udw_count,BLUE_UINT16 eia_pkt_subtype,BLUE_UINT8 * decoded_ch_str); +//#ifndef BLUE_LINUX_CODE +//HANCUTILS_API BLUE_UINT64 decode_rp188_packet(BLUE_UINT32 CardType,BLUE_UINT32 * src_vanc_buffer,BLUE_UINT32 UDW_Count,BLUE_UINT64 *rp188_dbb); +//HANCUTILS_API bool blue_vitc_decoder_8bit_fmt(BLUE_UINT8 * raw_vbi_ptr,BLUE_UINT32 pixels_per_line,BLUE_UINT32 mem_fmt,BLUE_UINT32 vitc_line_no,BLUE_UINT64 * vitc_time_code); +//HANCUTILS_API bool blue_vitc_decoder_10bit_v210(BLUE_UINT8 * raw_vbi_ptr, BLUE_UINT32 vitc_line_no, BLUE_UINT64 * vitc_time_code); +//HANCUTILS_API unsigned int create_rp188_pkt( +// BLUE_UINT32 cardType, +// BLUE_UINT32 * emb_data_ptr, +// BLUE_UINT32 line_no, +// BLUE_UINT32 start_new_line, +// BLUE_UINT64 timecode, +// BLUE_UINT64 rp188_dbb); +//#endif + + +/** @} */ +} diff --git a/BluefishSDK_V5_10_0_42/Inc/BlueTypes.h b/BluefishSDK_V5_10_0_42/Inc/BlueTypes.h new file mode 100644 index 000000000..800b69cd4 --- /dev/null +++ b/BluefishSDK_V5_10_0_42/Inc/BlueTypes.h @@ -0,0 +1,9 @@ +#pragma once + +#define BERR int +#define BLUE_UINT32 unsigned int +#define BLUE_INT32 int +#define BLUE_UINT64 unsigned __int64 +#define BLUE_UINT8 unsigned char +#define BLUE_INT8 char +#define BLUE_UINT16 unsigned short diff --git a/BluefishSDK_V5_10_0_42/Inc/BlueVelvet.h b/BluefishSDK_V5_10_0_42/Inc/BlueVelvet.h new file mode 100644 index 000000000..edb8fbdb7 --- /dev/null +++ b/BluefishSDK_V5_10_0_42/Inc/BlueVelvet.h @@ -0,0 +1,1340 @@ +/* +// ========================================================================== +// Bluefish444 BlueVelvet SDK library +// +// BlueVelvet.h +// Public Header +// +// developed by : Cameron Duffy (C) 2002 Bluefish444 P/L +// +// derived from work begun by Vizrt Austria (C) 2001. +// +// ========================================================================== + + $Id: BlueVelvet.h,v 1.32.8.1 2011/08/04 03:34:36 tim Exp $ +*/ +#ifndef _BLUEVELVET_H +#define _BLUEVELVET_H + +#ifdef BLUEFISH_EXPORTS +#define BLUEFISH_API __declspec(dllexport) +#else +#define BLUEFISH_API __declspec(dllimport) +#endif + +//#include "BlueVelvet_c.h" + +#define BLUE_UINT32 unsigned int +#define BLUE_INT32 int +#define BLUE_UINT8 unsigned char +#define BLUE_INT8 char +#define BLUE_UINT16 unsigned short +#define BLUE_INT16 short +#define BLUE_UINT64 unsigned __int64 + + +#ifndef BLUEVELVET_2_DLL +#define BLUEVELVET_SDK_VERSION3 +#endif + +#include "BlueDriver_p.h" + + +//---------------------------------------------------------------------------- +// Some simple macros and definitions +#define BLUEVELVET_MAX_DEVICES (5) // Maximum number of Blue Cards recognised by driver + +typedef int BErr; + +#define BLUE_OK(a) (!a) // Test for succcess of a method returning BErr +#define BLUE_FAIL(a) (a) // Test for failure of a method returning BErr +#define BLUE_PASS(a) (a>=0) // Use this where +ve return values still indicate success + + +//---------------------------------------------------------------------------- +// The class definition +class BLUEFISH_API CBlueVelvet +{ +public: + // 4.1 Startup Functions + //--------------------------------- + // 4.1.1 device_enumerate + // Counts accessible blue cards in target system. + virtual + BErr device_enumerate( + int& Devices + ) = 0; + + // 4.1.2 device_attach + // Attach the class instance to the indexed device. + virtual + BErr device_attach( + int DeviceId, + int do_audio // DEPRECATED; SET TO 0 + ) = 0; + + // 4.1.3 device_detach + // Detach the current device from the class instance. + virtual + BErr device_detach( + void + ) = 0; + + // 4.1.4 device_attach_audio + // Attach the class instance to the audio I/O component of the current device. + // DEPRECATED; DO NOT USE! + virtual + BErr device_attach_audio( + void + ) = 0; + + // 4.1.5 device_detach_audio + // Remove audio I/O components of the current device from the class instance. + // DEPRECATED; DO NOT USE! + virtual + BErr device_detach_audio( + void + ) = 0; + + // 4.1.6 device_attach_audio_in + // Attach the class instance to the audio IINPUT component of the current device. + // DEPRECATED; DO NOT USE! + virtual + BErr device_attach_audio_in( + void + ) = 0; + + // 4.1.7 device_detach_audio_in + // Remove audio INPUT component of the current device from the class instance. + // DEPRECATED; DO NOT USE! + virtual + BErr device_detach_audio_in( + void + ) = 0; + + // 4.1.8 device_attach_audio_out + // Attach the class instance to the audio OUTPUT component of the current device. + // DEPRECATED; DO NOT USE! + virtual + BErr device_attach_audio_out( + void + ) = 0; + + // 4.1.9 device_detach_audio_out + // Remove audio OUTPUT component of the current device from the class instance. + // DEPRECATED; DO NOT USE! + virtual + BErr device_detach_audio_out( + void + ) = 0; + + // 4.1.10 device_get_bar + // Get device Bar assets from driver + virtual + BErr device_get_bar( + unsigned long BarN, + void** ppAddress, + unsigned long& Length + ) = 0; + + + + // 4.2 Feature Assessment Functions + //--------------------------------- + // 4.2.1 has_timing_adjust + virtual + int has_timing_adjust( + int DeviceId=0 + ) = 0; + + // 4.2.2 has_vertical_flip + virtual + int has_vertical_flip( + int DeviceId=0 + ) = 0; + + // 4.2.3 has_half_res + virtual + int has_half_res( + int DeviceId=0 + ) = 0; + + // 4.2.4 has_dissolve + virtual + int has_dissolve( + int DeviceId=0 + ) = 0; + + // 4.2.5 has_aperture + virtual + int has_aperture( + int DeviceId=0 + ) = 0; + + // 4.2.6 has_input_sdi + virtual + int has_input_sdi( + int DeviceId=0 + ) = 0; + + // 4.2.7 has_output_sdi + virtual + int has_output_sdi( + int DeviceId=0 + ) = 0; + + // 4.2.8 has_input_composite + virtual + int has_input_composite( + int DeviceId=0 + ) = 0; + + // 4.2.9 has_output_composite + virtual + int has_output_composite( + int DeviceId=0 + ) = 0; + + // 4.2.10 has_input_yuv + virtual + int has_input_yuv( + int DeviceId=0 + ) = 0; + + // 4.2.11 has_output_yuv + virtual + int has_output_yuv( + int DeviceId=0 + ) = 0; + + // 4.2.12 has_output_rgb + virtual + int has_output_rgb( + int DeviceId=0 + ) = 0; + + // 4.2.13 has_input_svideo + virtual + int has_input_svideo( + int DeviceId=0 + ) = 0; + + // 4.2.14 has_output_svideo + virtual + int has_output_svideo( + int DeviceId=0 + ) = 0; + + // 4.2.15 has_output_key + virtual + int has_output_key( + int DeviceId=0 + ) = 0; + + // 4.2.16 has_output_key_v4444 + virtual + int has_output_key_v4444( + int DeviceId=0 + ) = 0; + + // 4.2.17 has_letterbox + virtual + int has_letterbox( + int DeviceId=0 + ) = 0; + + // 4.2.18 has_video_memory + virtual + int has_video_memory( + int DeviceId=0 + ) = 0; + + // 4.2.18 has_video_memory_base + virtual + int has_video_memory_base( + int DeviceId=0 + ) = 0; + + // 4.2.19 has_video_cardtype + virtual + int has_video_cardtype( + int DeviceId=0 + ) = 0; + + // 4.2.20 count_video_mode + virtual + int count_video_mode( + int DeviceId=0 + ) = 0; + + // 4.2.21 enum_video_mode + virtual + EVideoMode enum_video_mode( + int Index, + int DeviceId=0 + ) = 0; + + // 4.2.22 count_memory_format + virtual + int count_memory_format( + int DeviceId=0 + ) = 0; + + // 4.2.23 enum_memory_format + virtual + EMemoryFormat enum_memory_format( + int Index, + int DeviceId=0 + ) = 0; + + // 4.2.24 count_update_method + virtual + int count_update_method ( + int DeviceId=0 + ) = 0; + + // 4.2.25 enum_update_method + virtual + EUpdateMethod enum_update_method( + int Index, + int DeviceId=0 + ) = 0; + + // 4.2.26 has_audio_input + virtual + int has_audio_input( + int DeviceId=0 + ) = 0; + + // 4.2.27 has_audio_output + virtual + int has_audio_output( + int DeviceId=0 + ) = 0; + + // 4.2.28 count_audio_input_rate + virtual + int count_audio_input_rate( + int DeviceId=0 + ) = 0; + + // 4.2.29 count_audio_output_rate + virtual + int count_audio_output_rate( + int DeviceId=0 + ) = 0; + + // 4.2.30 enum_audio_input_rate + // Returns the enumeration for the Ith supported audio input rate. + virtual + EAudioRate enum_audio_input_rate( + int Index, + int DeviceId=0 + ) = 0; + + // 4.2.31 enum_audio_output_rate + // Returns the enumeration for the Ith supported audio output rate. + virtual + EAudioRate enum_audio_output_rate( + int Index, + int DeviceId=0 + ) = 0; + + + // 4.2.32 has_audio_playthru + virtual + int has_audio_playthru( + int DeviceId=0 + ) = 0; + + // 4.2.33 has_dma_control + virtual + int has_dma_control( + int DeviceId=0 + ) = 0; + + // 4.2.34 has_scaled_rgb + virtual + int has_scaled_rgb( + int DeviceId=0 + ) = 0; + + // 4.3 Control Functions + //--------------------------------- + // 4.3.1 set_timing_adjust + // Determines the video format of a signal applied to the Link A input. + virtual + BErr set_timing_adjust( + unsigned int HPhase, + unsigned int VPhase + ) = 0; + + // 4.3.2 set_vertical_flip + virtual + BErr set_vertical_flip( + int& On + ) = 0; + + // 4.3.3 set_output_key + virtual + BErr set_output_key( + int& On, + int& v4444, + int& Invert, + int& White + ) = 0; + + // 4.3.4 set_output_key_on + virtual + BErr set_output_key_on( + int& On + ) = 0; + + // 4.3.5 set_output_key_v4444 + virtual + BErr set_output_key_v4444( + int& v4444 + ) = 0; + + // 4.3.6 set_output_key_invert + virtual + BErr set_output_key_invert( + int& Invert + ) = 0; + + // 4.3.7 set_output_key_white + virtual + BErr set_output_key_white( + int& White + ) = 0; + + // 4.3.8 set_letterbox + virtual + BErr set_letterbox( + unsigned int& Lines, + int& Black + ) = 0; + + // 4.3.9 set_letterbox_lines + virtual + BErr set_letterbox_lines( + unsigned int& Lines + ) = 0; + + // 4.3.10 set_letterbox_black + virtual + BErr set_letterbox_black( + int& Black + ) = 0; + + // 4.3.11 set_safearea + virtual + BErr set_safearea( + int& Title, + int& Picture + ) = 0; + + // 4.3.12 set_safearea_title + virtual + BErr set_safearea_title( + int& Title + ) = 0; + + // 4.3.13 set_safearea_picture + virtual + BErr set_safearea_picture( + int& Picture + ) = 0; + + // 4.3.14 set_output_video + virtual + BErr set_output_video( + int& Enable + ) = 0; + + // 4.3.15 set_audio_rate + virtual + BErr set_audio_rate( + unsigned long& Rate + ) = 0; + + // 4.3.16 set_audio_playthrough + virtual + BErr set_audio_playthrough( + int& Playthru + ) = 0; + + // 4.3.17 wait_output_video_synch + virtual + BErr wait_output_video_synch( + unsigned long UpdFmt, + unsigned long& FieldCount + ) = 0; + + // 4.3.18 get_output_video_synch_count + virtual + BErr get_output_video_synch_count( + unsigned long& FieldCount + ) = 0; + + // 4.3.19 set_scaled_rgb + virtual + BErr set_scaled_rgb( + unsigned long& On + ) = 0; + + // 4.3.20 wait_pci_interrupt + virtual + BErr wait_pci_interrupt( + unsigned long Wait + ) = 0; + + // 4.3.21 get_audio_rate + virtual + BErr get_audio_rate( + unsigned long& Rate + ) = 0; + + // 4.3.22 wait_input_video_synch + virtual + BErr wait_input_video_synch( + unsigned long UpdFmt, + unsigned long& FieldCount + ) = 0; + + // 4.3.23 get_input_video_synch_count + virtual + BErr get_input_video_synch_count( + unsigned long& FieldCount + ) = 0; + + + // 4.4 Video STYLE Functions + //--------------------------------- + // 4.4.1 get_video_input_format + // Determines the video format of a signal applied to the Link A input. + virtual + BErr get_video_input_format( + unsigned long& VidFmt + ) = 0; + + // 4.4.2 get_video_genlock_format + // Determines the video format of a signal applied to the GENLOCK input. + virtual + BErr get_video_genlock_format( + unsigned long& VidFmt + ) = 0; + + // 4.4.3 get_video_output_format + // Determines the video format of the output signal. + virtual + BErr get_video_output_format( + unsigned long& VidFmt + ) = 0; + + // 4.4.4 set_video_output_format + // Changes the output signal video format of Link A output. + virtual + BErr set_video_output_format( + unsigned long& VidFmt + ) = 0; + + // 4.4.5 get_video_memory_format + // Determines the pixel format for blue card video buffers. + virtual + BErr get_video_memory_format( + unsigned long& MemFmt + ) = 0; + + // 4.4.6 set_video_memory_format + // Changes the pixel format for blue card video buffers. + virtual + BErr set_video_memory_format( + unsigned long& MemFmt + ) = 0; + + // 4.4.7 get_video_update_format + // Determines the update synchronisation style of the video buffers. + virtual + BErr get_video_update_format( + unsigned long& UpdFmt + ) = 0; + + // 4.4.8 set_video_update_format + // Changes the video synchronisation method. + virtual + BErr set_video_update_format( + unsigned long& UpdFmt + ) = 0; + // 4.4.9 get_video_zoom_format + // Determines the video resolution style of the video buffers. + virtual + BErr get_video_zoom_format( + unsigned long& ResFmt + ) = 0; + + // 4.4.10 set_video_zoom_format + // Changes the video resolution style of the video buffers. + virtual + BErr set_video_zoom_format( + unsigned long& ResFmt + ) = 0; + // 4.4.11 get_video_framestore_style + // Determines the video mode, memory format and update synchronisation + // styles of the blue card video buffers. + virtual + BErr get_video_framestore_style( + unsigned long& VidFmt, + unsigned long& MemFmt, + unsigned long& UpdFmt, + unsigned long& ResFmt + ) = 0; + + // 4.4.12 set_video_framestore_style + // Changes the video mode, memory format and update synchronisation styles. + virtual + BErr set_video_framestore_style( + unsigned long& VidFmt, + unsigned long& MemFmt, + unsigned long& UpdFmt, + unsigned long& ResFmt + ) = 0; + + // 4.4.13 get_video_engine + // Instruct the device driver to change the operational mode of the + // video engine. + virtual + BErr get_video_engine( + unsigned long& Mode + ) = 0; + + // 4.4.14 set_video_engine + // Instruct the device driver to change the operational mode of the + // video engine. + virtual + BErr set_video_engine( + unsigned long& Mode + ) = 0; + + + // 4.5 DMA Memory Functions + //--------------------------------- + // 4.5.1 system_buffer_map + // Obtains the virtual address of one of the driver managed system buffers. + virtual + BErr system_buffer_map( + void** ppAddress, + int BufferId + ) = 0; + + // 4.5.2 system_buffer_unmap + // Unmaps the virtual address of one of the driver managed system buffers + // from the process address space. + virtual + BErr system_buffer_unmap( + void* pAddress + ) = 0; + + // 4.5.3 system_buffer_assign + // Assign an arbitrary usermode buffer to a particular DMA function. + virtual + BErr system_buffer_assign( + void* pAddress, + unsigned long Id, + unsigned long Length, + unsigned long Target + ) = 0; + + // 4.5.4 system_buffer_write + // Instructs the DMA engine to begin a DMA write operation to the + // active blue card host buffer. + // DEPRECATED; DO NOT USE! USE system_buffer_write_async() instead + virtual + int system_buffer_write( + unsigned char* pPixels, + unsigned long Size, + unsigned long Offset=0 + ) = 0; + + // 4.5.5 system_buffer_read + // Instructs the DMA engine to begin a DMA read operation from the + // active blue card host buffer. + // DEPRECATED; DO NOT USE! USE system_buffer_read_async() instead + virtual + int system_buffer_read( + unsigned char* pPixels, + unsigned long Size, + unsigned long Offset=0 + ) = 0; + + virtual + int system_buffer_write_async( + unsigned char* pPixels, + unsigned long Size, + OVERLAPPED * pAsync, + unsigned long BufferID, + unsigned long Offset=0 + ) = 0; + + // 4.5.5 system_buffer_read + // Instructs the DMA engine to begin a DMA read operation from the + // active blue card host buffer. + virtual + int system_buffer_read_async( + unsigned char* pPixels, + unsigned long Size, + OVERLAPPED * pAsync, + unsigned long BufferID, + unsigned long Offset=0 + ) = 0; + + + // 4.6 Framestore Functions + //--------------------------------- + // 4.6.1 render_buffer_count + // Determines the number of buffers the blue card memory has been partitioned into. + virtual + BErr render_buffer_count( + unsigned long& Count + ) = 0; + + // 4.6.2 render_buffer_update + // Instructs the video digitiser to select a blue card buffer to rasterise. + virtual + BErr render_buffer_update( + unsigned long BufferId + ) = 0; + + // 4.6.3 render_buffer_update_b + // Instructs the video digitiser to select a blue card buffer as the video + // channel B source for real-time dissolves. + virtual + BErr render_buffer_update_b( + unsigned long BufferId + ) = 0; + + // 4.6.4 render_buffer_dissolve + // Set the percentage of Channel A over Channel B for real-time dissolve. + virtual + BErr render_buffer_dissolve( + unsigned long Dissolve + ) = 0; + + // 4.6.5 render_buffer_dissolve_a_b + // Set the video source for Channel A and Channel B and the dissolve + // percentage between them. + virtual + BErr render_buffer_dissolve_a_b( + unsigned long BufferId_A, + unsigned long BufferId_B, + unsigned long Dissolve + ) = 0; + + // 4.6.6 render_buffer_map + // Get the virtual address of the indexed blue card buffer. + virtual + BErr render_buffer_map( + void** pAddress, + unsigned long BufferId + ) = 0; + + // 4.6.7 render_buffer_map_aperture + // Get the virtual address of the 8-bit aperture for the indexed blue card buffer. + virtual + BErr render_buffer_map_aperture( + void** pAddress, + unsigned long BufferId + ) = 0; + + // 4.6.8 render_buffer_map_all + // Generates a table of the virtual addresses for all blue card buffers. + virtual + BErr render_buffer_map_all( + void** pTable, + unsigned long& Count + ) = 0; + + + // 4.6.9 render_buffer_map_aperture_all + // Generates a table of the virtual addresses for the 8-bit aperture + // of all blue card buffers. + virtual + BErr render_buffer_map_aperture_all( + void** pTable, + unsigned long& Count + ) = 0; + + // 4.6.10 render_buffer_select + // Specify which blue card buffer will become the target of future DMA transactions. + virtual + BErr render_buffer_select( + unsigned long BufferId + ) = 0; + + // 4.6.11 render_buffer_capture + // Specify which blue card buffer will be used for capture. + virtual + BErr render_buffer_capture( + unsigned long BufferId, + int On + ) = 0; + + // 4.6.12 render_buffer_sizeof + // Determine the maximum byte size of each blue card memory partition. + virtual + BErr render_buffer_sizeof( + unsigned long& Count, + unsigned long& Length, + unsigned long& Actual, + unsigned long& Golden + ) = 0; + + // 4.6.13 render_buffer_quantise + // Control whether blue card memory is repartitioned on style changes. + virtual + BErr render_buffer_quantise( + int On + ) = 0; + + // 4.7 Audio Functions + //--------------------------------- + // 4.7.1 audio_playback_start + // Start audio playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_start( + unsigned long Synch + ) = 0; + + // 4.7.2 audio_playback_stop + // Stop audio playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_stop( + void + ) = 0; + + // 4.7.3 audio_playback_stream + // Register a native interleaved audio file for playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_stream( + char* pName, + int Offset, + int Flags + ) = 0; + + // 4.7.4 audio_playback_stream_mono + // Register a native monophonic audio file for playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_stream_mono( + unsigned long Chan, + char* pName, + int Offset, + int Flags + ) = 0; + + // 4.7.5 audio_playback_stream_stereo + // Register a native stereophonic audio file for playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_stream_stereo( + unsigned long Pair, + char* pName, + int Offset, + int Flags + ) = 0; + + // 4.7.6 audio_playback_buffer + // Register a native 6-channel interleaved audio buffer for playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_buffer( + void* pGlobal, + unsigned long* pBuffer, + unsigned long Length, + unsigned long Chunk, + int (*pFunc)(void* pGlobal, unsigned long* pBuffer, int Offset, int Length), + int Flags + ) = 0; + + // 4.7.7 audio_playback_buffer_mono + // Register a native monophonic audio buffer for playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_buffer_mono( + unsigned long Chan, + void* pGlobal, + unsigned long* pBuffer, + unsigned long Length, + unsigned long Chunk, + int (*pFunc)(void* pGlobal, unsigned long* pBuffer, int Offset, int Length), + int Flags + ) = 0; + + // 4.7.8 audio_playback_buffer_stereo + // Register a native stereophonic audio buffer for playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_buffer_stereo( + unsigned long Pair, + void* pGlobal, + unsigned long* pBuffer, + unsigned long Length, + unsigned long Chunk, + int (*pFunc)(void* pGlobal, unsigned long* pBuffer, int Offset, int Length), + int Flags + ) = 0; + + // 4.7.9 audio_playback_deregister + // De-registers a native 6-channel interleaved audio source from playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_deregister( + void + ) = 0; + + // 4.7.10 audio_playback_deregister_mono + // De-registers a native monophonic audio source from playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_deregister_mono( + unsigned long Chan + ) = 0; + + // 4.7.11 audio_playback_deregister_stereo + // De-registers a native stereophonic audio source from playback. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_deregister_stereo( + unsigned long Pair + ) = 0; + + // 4.7.12 AudioHandlerPlay + // Moves source audio data streams into the playback buffer. + // DEPRECATED; DO NOT USE! + virtual + BErr AudioHandlerPlay( + unsigned long& Snooze + ) = 0; + + // 4.7.13 audio_capture_start + // Begin capturing audio. + virtual + BErr audio_capture_start( + unsigned long Synch, + unsigned long PlayThru + ) = 0; + + // 4.7.14 audio_capture_stop + // Stop capturing audio. + virtual + BErr audio_capture_stop( + void + ) = 0; + // 4.7.15 audio_capture_stream + // Register a file for capture of native interleaved audio. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_capture_stream ( + char* pName, + int Offset, + int Flags + ) = 0; + + // 4.7.16 audio_capture_stream_mono + // Register a file for capture of native monophonic audio. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_capture_stream_mono( + unsigned long Chan, + char* pName, + int Offset, + int Flags + ) = 0; + + // 4.7.17 audio_capture_stream_stereo + // Register a file for capture of native stereophonic audio. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_capture_stream_stereo( + unsigned long Pair, + char* pName, + int Offset, + int Flags + ) = 0; + + // 4.7.18 audio_capture_buffer + // Register a buffer for capture of native interleaved audio. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_capture_buffer( + void* pGlobal, + unsigned long* pBuffer, + unsigned long Length, + unsigned long Chunk, + int (*pFunc)(void* pGlobal, unsigned long* pBuffer, int Offset, int Length), + int Flags + ) = 0; + + // 4.7.19 audio_capture_buffer_mono + // Register a buffer for capture of native monophonic audio. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_capture_buffer_mono( + unsigned long Chan, + void* pGlobal, + unsigned long* pBuffer, + unsigned long Length, + unsigned long Chunk, + int (*pFunc)(void* pGlobal, unsigned long* pBuffer, int Offset, int Length), + int Flags + ) = 0; + + // 4.7.20 audio_capture_buffer_stereo + // Register a buffer for capture of native stereophonic audio. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_capture_buffer_stereo( + unsigned long Pair, + void* pGlobal, + unsigned long* pBuffer, + unsigned long Length, + unsigned long Chunk, + int (*pFunc)(void* pGlobal, unsigned long* pBuffer, int Offset, int Length), + int Flags + ) = 0; + + // 4.7.21 audio_capture_deregister + // De-registers a buffer from capture monitor thread. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_capture_deregister( + void + ) = 0; + + // 4.7.22 audio_capture_deregister_mono + // De-registers a single monophonic audio buffer from capture monitor thread. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_capture_deregister_mono( + unsigned long Chan + ) = 0; + + // 4.7.23 audio_capture_deregister_stereo + // De-registers a stereophonic audio buffer from capture monitor thread. + // DEPRECATED; DO NOT USE! + virtual + BErr audio_capture_deregister_stereo( + unsigned long Pair + ) = 0; + + + // 4.7.24 audio_playback_threshold + // Adjust the Chunk and Snooze times for the Audio Playback Monitor Thread + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_threshold( + unsigned long Chunk, + unsigned long Snooze + ) = 0; + + // 4.7.25 audio_capture_sample_count + // Number of samples captured. + // DEPRECATED; DO NOT USE! + virtual + ULONG audio_capture_sample_count() = 0; + + // 4.7.26 audio_capture_sample_count_mono + // Number of samples captured. + // DEPRECATED; DO NOT USE! + virtual + ULONG audio_capture_sample_count_mono(unsigned long Chan) = 0; + + // 4.7.27 audio_capture_sample_count_stereo + // Number of samples captured. + // DEPRECATED; DO NOT USE! + virtual + ULONG audio_capture_sample_count_stereo(unsigned long Pair) = 0; + + // 4.7.28 audio_playback_blip + // Channel is to be blipped + // DEPRECATED; DO NOT USE! + virtual + BErr audio_playback_blip( + int Channel + ) = 0; + + // 4.8 Video Engine Functions + //--------------------------------- + // 4.8.1 video_playback_start + // Start video playback. + virtual + BErr video_playback_start( + int Step, + int Loop + ) = 0; + + // 4.8.2 video_playback_stop + // Halts the video playback engine. + virtual + BErr video_playback_stop( + int Wait, + int Flush + ) = 0; + + // 4.8.3 video_playback_flush + // Flush all pending display requests from all Channels. + virtual + BErr video_playback_flush( + void + ) = 0; + + // 4.8.4 video_playback_flush_A + // Flush all pending display requests from Channel A. + // DEPRECATED; DO NOT USE! + virtual + BErr video_playback_flush_A( + void + ) = 0; + + // 4.8.5 video_playback_flush_B + // Flush all pending display requests from Channel-B. + // DEPRECATED; DO NOT USE! + virtual + BErr video_playback_flush_B( + void + ) = 0; + + // 4.8.6 video_playback_allocate + // Obtain the address of the next available video memory buffer. + virtual + BErr video_playback_allocate( + void** pAddress, + unsigned long& BufferId, + unsigned long& Underrun + ) = 0; + + // 4.8.7 video_playback_release + // Release physical blue card video buffer. + virtual + BErr video_playback_release( + unsigned long BufferId + ) = 0; + + // 4.8.8 video_playback_flush_display + // Remove a unique display request from the display lists. + virtual + BErr video_playback_flush_display( + unsigned long UniqueId + ) = 0; + + // 4.8.9 video_playback_release_flush + // Purges all pending display requests and returns the frame to the free list. + virtual + BErr video_playback_release_flush( + unsigned long BufferId + ) = 0; + + // 4.8.10 video_playback_present + // Present a buffer to the video playback engine Channel-A. + virtual + BErr video_playback_present( + unsigned long& UniqueId, + unsigned long BufferId, + unsigned long Count, + int Keep, + int Odd=0 + ) = 0; + + // 4.8.11 video_playback_present_dissolve + // Present a frame with a dissolve value to the video playback engine. + virtual + BErr video_playback_present_dissolve( + unsigned long& UniqueId, + unsigned long BufferId, + unsigned long Count, + unsigned long Dissolve, + int Keep, + int Odd=0 + ) = 0; + + // 4.8.12 video_playback_present_A + // Present a frame to the video playback engine that will be inserted into Channel-A. + // DEPRECATED; DO NOT USE! + virtual + BErr video_playback_present_A( + unsigned long& UniqueId, + unsigned long BufferId, + unsigned long Count, + unsigned long Dissolve, + int Synch_B, + int Keep, + int Odd=0 + ) = 0; + + // 4.8.13 video_playabck_present_B + // Present a frame to the video playback engine that will be inserted into Channel-B. + // DEPRECATED; DO NOT USE! + virtual + BErr video_playback_present_B( + unsigned long& UniqueId, + unsigned long BufferId, + unsigned long Count, + unsigned long Dissolve, + int Synch_A, + int Keep, + int Odd=0 + ) = 0; + + // 4.8.14 video_playback_present_detail + // The general purpose presentation function. + // DEPRECATED; DO NOT USE! + virtual + BErr video_playback_present_detail( + unsigned long& UniqueId, + unsigned long BufferId, + unsigned long Count, + unsigned long Dissolve, + unsigned long Flags + ) = 0; + + // 4.8.15 video_capture_start + // Instruct the device driver to begin capturing images into the video framestore. + virtual + BErr video_capture_start( + int Step=0 + ) = 0; + + // 4.8.16 video_capture_stop + // Instruct the device driver to stop the video capture. + virtual + BErr video_capture_stop( + void + ) = 0; + + // 4.8.17 video_capture_harvest + // Get the details about the next frame in a capture sequence. + virtual + BErr video_capture_harvest( + void** ppAddress, + unsigned long& BufferId, + unsigned long& Count, + unsigned long& Frames, + int CompostLater=0 + ) = 0; + + // not used for anything important... + // DEPRECATED; DO NOT USE! + virtual + BErr nudge_frame(LONG nudge) = 0; + + // 4.8.18 video_playback_pause + // Suspend or Resume playback + virtual + BErr video_playback_pause( + int Suspend + ) = 0; + + // 4.8.19 video_capture_compost + // Return a harvested frame for recycling + virtual + BErr video_capture_compost( + unsigned long BufferId + ) = 0; + +#ifdef BLUEVELVET_SDK_VERSION3 + virtual BErr set_onboard_keyer(int & On)=0; + virtual BErr get_onboard_keyer_status(int &On)=0; + virtual BErr get_timing_adjust(unsigned int & HPhase,unsigned int & VPhase,unsigned int & MaxHPhase,unsigned int & MaxVPhase) = 0; + virtual BErr get_letterbox_values(unsigned int& Lines,int & bBlackEnableFlag)=0; + virtual BErr get_safearea_info(int& Title,int& Picture)=0; + virtual int has_downconverter_bnc(int deviceId)=0; + virtual int has_onboard_keyer(int deviceId)=0; + virtual int has_duallink_input(int deviceId)=0; + virtual int has_programmable_colorspace_matrix(int deviceId)=0; + + virtual BErr SetMatrix_Col_Green_Y(double CoeffG_R,double CoeffG_G,double CoeffG_B,double constG)=0; + virtual BErr GetMatrix_Col_Green_Y(double & CoeffG_R,double & CoeffG_G,double & CoeffG_B,double & constG)=0; + + virtual BErr SetMatrix_Col_Red_PR(double CoeffR_R,double CoeffR_G,double CoeffR_B,double constR)=0; + virtual BErr GetMatrix_Col_Red_PR(double & CoeffR_R,double & CoeffR_G,double & CoeffR_B,double & constR)=0; + + virtual BErr SetMatrix_Col_Blue_PB(double CoeffB_R,double CoeffB_G,double CoeffB_B,double constB)=0; + virtual BErr GetMatrix_Col_Blue_PB(double & CoeffB_R,double & CoeffB_G,double & CoeffB_B,double & constB)=0; + + virtual BErr SetDualLink_Output_Conn_SignalColorSpace(unsigned long & signalType,unsigned long updateMatrixFlag)=0; + virtual BErr SetDualLink_Input(unsigned long & EnableDualLink)=0; + virtual BErr SetDualLink_Input_SignalFormatType(unsigned long &v4444)=0; + virtual BErr GetDualLink_InputProperty(unsigned long & DualLink,unsigned long & connSignalColorSpace,unsigned long & v4444)=0; + virtual BErr GetDualLink_OutputProperty(unsigned long & DualLink,unsigned long & connSignalColorSpace,unsigned long & v4444)=0; + + virtual BErr Set_DownConverterSignalType(unsigned long type)=0; + virtual BErr GetDownConverterSignalType(unsigned long & connSignalType)=0; + + virtual BErr SetDualLink_Input_Conn_SignalColorSpace(unsigned long & signalType)=0; + virtual int GetHDCardType(int nDeviceId)=0; + + // New Audio Interface + virtual BErr MaxAudioOutBufferSize(long & nSampleCount)=0; + virtual BErr GetAudioOutBufferFreeSpace(long & nSampleCount)=0; + virtual BErr wait_audio_output_interrupt(unsigned long & noQueuedSample,unsigned long & noFreeSample) = 0; + virtual BErr InitAudioPlaybackMode()=0; + virtual BErr StartAudioPlayback(int syncCount)=0; + virtual BErr StopAudioPlayback()=0; + virtual BErr WriteAudioSample(int nSampleType,void * pBuffer,long nNoSample,int bFlag,long nNoSamplesWritten)=0; + virtual BErr EndAudioPlaybackMode()=0; + virtual int GetPCIRevId()=0; +#endif + + // Need this so that derived destructor gets called + virtual ~CBlueVelvet(){} + HANDLE m_hDevice; // Handle to the blue card device driver +}; + + +//------------------------------------------------------------------------------------------------------------ +extern "C" { +//------------------------------------------------------------------------------------------------------------ +// 4.0.0 The Blue Velvet factory +BLUEFISH_API CBlueVelvet* BlueVelvetFactory(); + + +// 4.0.1 Who am I +BLUEFISH_API const char* BlueVelvetVersion(); + +// 4.0.2 Golden Value calculation +BLUEFISH_API unsigned long BlueVelvetGolden( + unsigned long VidFmt, + unsigned long MemFmt, + unsigned long UpdFmt + ); +// 4.0.3 Bytes Per Line calculation +BLUEFISH_API unsigned long BlueVelvetLineBytes( + unsigned long VidFmt, + unsigned long MemFmt + ); +// 4.0.4 Bytes Per Frame calculation +BLUEFISH_API unsigned long BlueVelvetFrameBytes( + unsigned long VidFmt, + unsigned long MemFmt, + unsigned long UpdFmt + ); + +// 4.0.5 Lines Per Frame calculation +BLUEFISH_API unsigned long BlueVelvetFrameLines( + unsigned long VidFmt, + unsigned long UpdFmt + ); + +// 4.0.6 Pixels per Line calculation +BLUEFISH_API unsigned long BlueVelvetLinePixels( + unsigned long VidFmt + ); + +BLUEFISH_API unsigned long BlueVelvetVBILines(unsigned long VidFmt,unsigned long FrameType); + +} + +#endif //_BLUEVELVET_H diff --git a/BluefishSDK_V5_10_0_42/Inc/BlueVelvet4.h b/BluefishSDK_V5_10_0_42/Inc/BlueVelvet4.h new file mode 100644 index 000000000..7f2588d6b --- /dev/null +++ b/BluefishSDK_V5_10_0_42/Inc/BlueVelvet4.h @@ -0,0 +1,146 @@ +#ifndef _BLUEVELVET4_H +#define _BLUEVELVET4_H + +#include "BlueVelvet.h" +#include "BlueC_Api.h" +typedef struct +{ + VARIANT maxRange; + VARIANT minRange; + VARIANT currentValue; + unsigned long uniqueSteps; +}AnalogPropertyValue; + + +class BLUEFISH_API CBlueVelvet4: virtual public CBlueVelvet +{ +public: + // Functions for new Analog Card Property + virtual BErr SetAnalogCardProperty(int propType,VARIANT & propValue)=0; + virtual BErr GetAnalogCardProperty(int propType,AnalogPropertyValue & propValue)=0; + virtual BErr GetAnalogCardProperty(int propType,VARIANT & propValue)=0; + + virtual BErr has_analog_connector(int DeviceId) = 0; + virtual int has_svideo_input(int DeviceId) = 0; + virtual int has_component_input(int DeviceId)=0; + virtual int has_composite_input(int DeviceId)=0; + virtual int has_svideo_output(int DeviceId)=0; + virtual int has_component_output(int DeviceId)=0; + virtual int has_analog_rgb_output(int DeviceId)=0; + virtual int has_composite_output(int DeviceId)=0; + + // Functions for new Audio Input architecture + // Functions for Future use not implemented + virtual BErr wait_audio_input_interrupt(unsigned long & noQueuedSample,unsigned long & noFreeSample) = 0; + virtual BErr InitAudioCaptureMode()=0; + virtual BErr StartAudioCapture(int syncCount)=0; + virtual BErr StopAudioCapture()=0; + virtual BErr ReadAudioSample(int nSampleType,void * pBuffer,long nNoSample,int bFlag,long nNoSamplesWritten)=0; + virtual BErr EndAudioCaptureMode()=0; + + + virtual BErr SetCardProperty(int propType,VARIANT & Value)=0; + virtual BErr QueryCardProperty(int propType,VARIANT & Value)=0; + + // RS422 Serial Port Functions + // Functions for Future use not implemented + virtual BErr Wait_For_SerialPort_InputData(unsigned long bFlag,unsigned long & NoDataAvailable)=0; + virtual int IsSerialPort_OutputBuffer_Full(unsigned long bFlag)=0; + virtual int Read_From_SerialPort(unsigned long bFlag,unsigned char * pBuffer,unsigned long ReadLength)=0; + virtual int Write_To_SerialPort(unsigned long bFlag,unsigned char * pBuffer,unsigned long WriteLength)=0; +}; + + + + +extern "C" { +BLUEFISH_API CBlueVelvet4* BlueVelvetFactory4(); +BLUEFISH_API void BlueVelvetDestroy(CBlueVelvet4* pObj); +// this would give you number of VANC/VBI line +BLUEFISH_API unsigned int BlueVelvetVANCLineCount(unsigned int CardType,unsigned long VidFmt,unsigned long FrameType); + +// this would give you golden value for the VANC frame size +BLUEFISH_API unsigned int BlueVelvetVANCGoldenValue( unsigned int CardType, + unsigned long VidFmt, + unsigned long MemFmt, + unsigned long FrameType); + +// this would give you number of bytes contained in a VANC line +BLUEFISH_API unsigned int BlueVelvetVANCLineBytes( unsigned int CardType, + unsigned long VidFmt, + unsigned long MemFmt); + +BLUEFISH_API unsigned int BlueVelvetBytesForGroupPixels(unsigned long MemFmt,unsigned int nPixelCount); +BLUEFISH_API BErr SetVideo_MetaDataInfo(CBlueVelvet4 * pSdk,LPOVERLAPPED pOverLap,ULONG FrameId,ULONG prop,VARIANT value); + +BLUEFISH_API BErr GetVideo_CaptureFrameInfo(CBlueVelvet4 * pSdk,LPOVERLAPPED pOverlap,struct blue_videoframe_info & video_capture_frame,int CompostLater); +BLUEFISH_API BErr GetVideo_CaptureFrameInfoEx(CBlueVelvet4 * pSdk,LPOVERLAPPED pOverlap,struct blue_videoframe_info_ex & video_capture_frame,int CompostLater,unsigned int *capture_fifo_size); + +BLUEFISH_API int GetHancQueuesInfo(CBlueVelvet4 * pSdk, LPOVERLAPPED pOverlap, UINT32 video_channel, UINT32* pFreeBuffers, UINT32* pMaximumBuffers, UINT32* pStatus); +BLUEFISH_API int GetHancBuffer(CBlueVelvet4 * pSdk,LPOVERLAPPED pOverlap,UINT32 video_channel); +BLUEFISH_API BERR PutHancBuffer(CBlueVelvet4 * pSdk,LPOVERLAPPED pOverlap,int hanc_buffer_id,UINT32 video_channel); +BLUEFISH_API BERR HancInputFifoControl(CBlueVelvet4 * pSdk,LPOVERLAPPED pOverlap,UINT32 video_channel, UINT32 control); +BLUEFISH_API BERR HancOutputFifoControl(CBlueVelvet4 * pSdk,LPOVERLAPPED pOverlap,UINT32 video_channel, UINT32 control); +BLUEFISH_API int GetHancInputBuffer(CBlueVelvet4* pSdk,LPOVERLAPPED pOverlap,UINT32 video_channel,UINT32* signal_type, UINT32* field_count); +BLUEFISH_API BLUE_UINT32 emb_audio_decoder( BLUE_UINT32 * src_hanc_buffer, + void * dest_data_ptr, + BLUE_UINT32 req_audio_sample_count, + BLUE_UINT32 required_audio_channels, + BLUE_UINT32 sample_type); +BLUEFISH_API BERR blue_wait_video_sync_async(CBlueVelvet4 * pSdk, + LPOVERLAPPED pOverlap, + blue_video_sync_struct * sync_struct); +BLUEFISH_API BERR blue_dma_read_async( CBlueVelvet4 * pSdk, + LPOVERLAPPED pOverlap, + struct blue_dma_request_struct *pUserDmaRequest); + + +BLUEFISH_API BERR blue_load_1D_lookup_table(CBlueVelvet4 * pSdk, struct blue_1d_lookup_table_struct * lut); + +BLUEFISH_API BERR blue_control_video_scaler(CBlueVelvet4 * pSdk, unsigned int nScalerId, + bool bOnlyReadValue, + float *pSrcVideoHeight, + float *pSrcVideoWidth, + float *pSrcVideoYPos, + float *pSrcVideoXPos, + float *pDestVideoHeight, + float *pDestVideoWidth, + float *pDestVideoYPos, + float *pDestVideoXPos); + +BLUEFISH_API BERR blue_Epoch_GetTimecodes(CBlueVelvet4 * pSdk, UINT32 VideoChannel, UINT64* pArray, UINT32* FieldCount); + +BLUEFISH_API unsigned int count_scaler_video_mode(CBlueVelvet4 * pSdk, + int device_id, + unsigned int video_channel, + unsigned int video_mode); +BLUEFISH_API EVideoMode enum_scaler_video_mode(CBlueVelvet4 * pSdk, + int device_id, + unsigned int video_channel, + unsigned int video_mode, + unsigned int index); +BLUEFISH_API BERR blue_video_scaler_filter_coefficent( CBlueVelvet4 * pSdk, + unsigned int nScalerId, + bool bOnlyReadValue, + unsigned int nFilterType, + float *pCoefficentWeightArray, + unsigned int nArrayElementCount + ); +BLUEFISH_API BERR blue_audioplayback_pause(CBlueVelvet4 * pSdk); +BLUEFISH_API BERR blue_audioplayback_resume(CBlueVelvet4 * pSdk, int syncCount); +BLUEFISH_API BERR GetHancQueuesInfoEx(CBlueVelvet4 * pSdk, + LPOVERLAPPED pOverlap, + UINT32 video_channel, + UINT32* pFreeBuffers, + UINT32* pMaximumBuffers, + UINT32 * pStatus, + UINT32 * pSamplesUsed, + UINT64 *pStartHancFifoTimeStamp, + UINT64 *pVideoSyncTimeStamp); + + +BLUEFISH_API BERR blue_color_matrix(CBlueVelvet4 * pSdk,bool bGetValue,blue_color_matrix_struct * color_matrix_ptr); +} + + +#endif //_BLUEVELVET4_H \ No newline at end of file diff --git a/BluefishSDK_V5_10_0_42/Inc/BlueVelvet_c.h b/BluefishSDK_V5_10_0_42/Inc/BlueVelvet_c.h new file mode 100644 index 000000000..def919b7c --- /dev/null +++ b/BluefishSDK_V5_10_0_42/Inc/BlueVelvet_c.h @@ -0,0 +1,131 @@ +/* +// ========================================================================== +// Bluefish444 BlueVelvet SDK library +// +// BlueSD_c.h +// Constants header +// LARGELY superseded by dynamic calculations + + + $Id: BlueVelvet_c.h,v 1.4 2002/10/02 00:29:53 cameron Exp $ +// +// developed by : Cameron Duffy (C) 2002 Bluefish444 P/L +// ========================================================================== +// +*/ + +//---------------------------------------------------------------------------- +#ifndef _BLUEVELVET_C_H +#define _BLUEVELVET_C_H + +//---------------------------------------------------------------------------------------------------------------------- +// File SUB-types supported +// +typedef enum +{ + EBlue_10BIT_NTSC=0, // 10 BIT NTSC + EBlue_10BIT_PAL, // 10 BIT PAL + EBlue_08BIT_NTSC, // 8 BIT NTSC + EBlue_08BIT_PAL, // 8 BIT PAL + EBlue_32BIT_NTSC, // 32 BIT NTSC (ARGB - uncompressed) + EBlue_32BIT_PAL // 32 BIT PAL (ARGB - uncompressed) +} EBlueFileId; + +// File subtype ID;s +#define BLUE_FILE_10BIT_NTSC 0 // 10 BIT NTSC +#define BLUE_FILE_10BIT_PAL 1 // 10 BIT PAL +#define BLUE_FILE_08BIT_NTSC 2 // 8 BIT NTSC +#define BLUE_FILE_08BIT_PAL 3 // 8 BIT PAL +#define BLUE_FILE_32BIT_NTSC 4 // 32 BIT NTSC (ARGB - uncompressed) +#define BLUE_FILE_32BIT_PAL 5 // 32 BIT PAL (ARGB - uncompressed) + +// File subtype FOURCC +#define BLUE_SUBTYPE_10BIT_NTSC 0x52594e5f //'RYN_' // 10 BIT NTSC +#define BLUE_SUBTYPE_10BIT_PAL 0x5259515f //'RYP_' // 10 BIT PAL +#define BLUE_SUBTYPE_08BIT_NTSC 0x52384e5f //'R8N_' // 8 BIT NTSC +#define BLUE_SUBTYPE_08BIT_PAL 0x5238515f //'R8P_' // 8 BIT PAL +#define BLUE_SUBTYPE_32BIT_NTSC 0x52524e5f //'RRN_' // 32 BIT NTSC (ARGB - uncompressed) +#define BLUE_SUBTYPE_32BIT_PAL 0x5252415f //'RRP_' // 32 BIT PAL (ARGB - uncompressed) + +#define BLUE_ROOTED_SUBTYPE 0x62626262 //'XXXX' +#define BLUE_FILE_NOVIDEO 0x62626262 //'XXXX' +#define BLUE_FILE_TYPE 0x5244565f //'RDV_' +#define BLUE_CLASS_ID 0x52444456 //'RDDV' + +// align this structure on 512 byte boundary! +typedef struct +{ + char name[20]; // "PREMIERE RDV_FILE"; + ULONG hasAudio; // See BLUE_SUBTYPE_??? + ULONG VideoSubtype; // See BLUE_SUBTYPE_??? + ULONG width; // width of frame in pixels + ULONG height; // height of frame in pixels (can get video mode) + ULONG rowbytes; // total bytes in row (can get mem format from this and width) + ULONG numFrames; // number of frames in file + ULONG frameOffset; // GOLDEN frame size + ULONG duration; // TDB - value = total number of frames + long scale; // TDB - scale = scale / samplesize = timebase + long sampleSize; // TDB - sampleSize = 1 or 100 if 29.97 fps + + ULONG gFmtVid; + ULONG gFmtMem; + ULONG gFmtUpd; + ULONG gFmtRes; + // 76 bytes + char orgtime[20]; // These fields map directly to those in imTimeInfoRec. + char alttime[20]; + char orgreel[40]; + char altreel[40]; + // 196 bytes + char logcomment[256]; + // 452 bytes +// char pad[512-452-4]; + char pad[56]; + // For disk speed to work, this structure MUST be a multiple of sector size + ULONG len; // Length of TRAILER, *always* last! +} RDV_File2_OLD; +//#define SIZE_RDV_FILE 512 + +#define kGoldenPageSize 4096 + +typedef struct +{ + char name[20]; // "PREMIERE RDV_FILE "; + ULONG hasAudio; // See BLUE_SUBTYPE_??? + ULONG VideoSubtype; // See BLUE_SUBTYPE_??? + ULONG width; // width of frame in pixels + ULONG height; // height of frame in pixels (can get video mode) + ULONG rowbytes; // total bytes in row (can get mem format from this and width) + ULONG numFrames; // number of frames in file + ULONG frameOffset; // GOLDEN frame size + ULONG duration; // TDB - value = total number of frames + long scale; // TDB - scale = scale / samplesize = timebase + long sampleSize; // TDB - sampleSize = 1 or 100 if 29.97 fps + + ULONG gFmtVid; + ULONG gFmtMem; + ULONG gFmtUpd; + ULONG gFmtRes; + // 76 bytes + char orgtime[20]; // These fields map directly to those in imTimeInfoRec. + char alttime[20]; + char orgreel[40]; + char altreel[40]; + // 196 bytes + char logcomment[256]; + // 452 bytes +// char pad[512-452-4]; + ULONG audioSampleRate; // 48000 or 96000 + ULONG numChannels; // 2, 4, or 6 + ULONG numAudioBlocks; // how many in the file? + // 464 bytes + char pad[36]; + + _int64 audioBlockOffsets[kGoldenPageSize * 4]; // something like 4.5 hours max length (enough for now I guess) + ULONG audioBlockSizes[kGoldenPageSize * 4]; + + // For disk speed to work, this structure MUST be a multiple of sector size + ULONG len; // Length of TRAILER, *always* last! +} RDV_File2; + +#endif //_BLUEVELVET_C_H diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters.lib b/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters.lib new file mode 100644 index 000000000..df9d7ae29 Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters.tlb b/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters.tlb new file mode 100644 index 000000000..375f0d0db Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters.tlb differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters64.lib b/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters64.lib new file mode 100644 index 000000000..d025f74a4 Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters64.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters64.tlb b/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters64.tlb new file mode 100644 index 000000000..03488f16a Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueFishFilters64.tlb differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils.lib b/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils.lib new file mode 100644 index 000000000..3a12d245c Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils64.lib b/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils64.lib new file mode 100644 index 000000000..802c71c63 Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils64.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils64_d.lib b/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils64_d.lib new file mode 100644 index 000000000..8e4e91b7d Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils64_d.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils_d.lib b/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils_d.lib new file mode 100644 index 000000000..81b767226 Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueHancUtils_d.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueVelvet3.lib b/BluefishSDK_V5_10_0_42/Lib/BlueVelvet3.lib new file mode 100644 index 000000000..7a901fad5 Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueVelvet3.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueVelvet3_d.lib b/BluefishSDK_V5_10_0_42/Lib/BlueVelvet3_d.lib new file mode 100644 index 000000000..0c01b58fd Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueVelvet3_d.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueVelvet64.lib b/BluefishSDK_V5_10_0_42/Lib/BlueVelvet64.lib new file mode 100644 index 000000000..2433a6eef Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueVelvet64.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueVelvet64_d.lib b/BluefishSDK_V5_10_0_42/Lib/BlueVelvet64_d.lib new file mode 100644 index 000000000..daa16a5ac Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueVelvet64_d.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueVelvetCom.lib b/BluefishSDK_V5_10_0_42/Lib/BlueVelvetCom.lib new file mode 100644 index 000000000..7b60e7a47 Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueVelvetCom.lib differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueVelvetCom.tlb b/BluefishSDK_V5_10_0_42/Lib/BlueVelvetCom.tlb new file mode 100644 index 000000000..49d16e62b Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueVelvetCom.tlb differ diff --git a/BluefishSDK_V5_10_0_42/Lib/BlueVelvetConstant.tlb b/BluefishSDK_V5_10_0_42/Lib/BlueVelvetConstant.tlb new file mode 100644 index 000000000..c9659007b Binary files /dev/null and b/BluefishSDK_V5_10_0_42/Lib/BlueVelvetConstant.tlb differ