2005-04-17 02:20:36 +04:00
/* Bt832 CMOS Camera Video Processor (VP)
2005-06-24 09:05:07 +04:00
The Bt832 CMOS Camera Video Processor chip connects a Quartsight CMOS
2005-04-17 02:20:36 +04:00
color digital camera directly to video capture devices via an 8 - bit ,
4 : 2 : 2 YUV or YCrCb video interface .
i2c addresses : 0x88 or 0x8a
*/
/* The 64 registers: */
// Input Processor
# define BT832_OFFSET 0
# define BT832_RCOMP 1
# define BT832_G1COMP 2
# define BT832_G2COMP 3
# define BT832_BCOMP 4
// Exposures:
# define BT832_FINEH 5
# define BT832_FINEL 6
# define BT832_COARSEH 7
# define BT832_COARSEL 8
# define BT832_CAMGAIN 9
// Main Processor:
# define BT832_M00 10
# define BT832_M01 11
# define BT832_M02 12
# define BT832_M10 13
# define BT832_M11 14
# define BT832_M12 15
# define BT832_M20 16
# define BT832_M21 17
# define BT832_M22 18
# define BT832_APCOR 19
# define BT832_GAMCOR 20
// Level Accumulator Inputs
# define BT832_VPCONTROL2 21
# define BT832_ZONECODE0 22
# define BT832_ZONECODE1 23
# define BT832_ZONECODE2 24
# define BT832_ZONECODE3 25
// Level Accumulator Outputs:
# define BT832_RACC 26
# define BT832_GACC 27
# define BT832_BACC 28
# define BT832_BLACKACC 29
# define BT832_EXP_AGC 30
# define BT832_LACC0 31
# define BT832_LACC1 32
# define BT832_LACC2 33
# define BT832_LACC3 34
# define BT832_LACC4 35
# define BT832_LACC5 36
# define BT832_LACC6 37
# define BT832_LACC7 38
// System:
# define BT832_VP_CONTROL0 39
# define BT832_VP_CONTROL1 40
# define BT832_THRESH 41
# define BT832_VP_TESTCONTROL0 42
# define BT832_VP_DMCODE 43
# define BT832_ACB_CONFIG 44
# define BT832_ACB_GNBASE 45
# define BT832_ACB_MU 46
# define BT832_CAM_TEST0 47
# define BT832_AEC_CONFIG 48
# define BT832_AEC_TL 49
# define BT832_AEC_TC 50
# define BT832_AEC_TH 51
// Status:
# define BT832_VP_STATUS 52
# define BT832_VP_LINECOUNT 53
# define BT832_CAM_DEVICEL 54 // e.g. 0x19
# define BT832_CAM_DEVICEH 55 // e.g. 0x40 == 0x194 Mask0, 0x194 = 404 decimal (VVL-404 camera)
# define BT832_CAM_STATUS 56
# define BT832_56_CAMERA_PRESENT 0x20
//Camera Setups:
# define BT832_CAM_SETUP0 57
# define BT832_CAM_SETUP1 58
# define BT832_CAM_SETUP2 59
# define BT832_CAM_SETUP3 60
// System:
# define BT832_DEFCOR 61
# define BT832_VP_TESTCONTROL1 62
# define BT832_DEVICE_ID 63
# define BT832_DEVICE_ID__31 0x31 // Bt832 has ID 0x31
2005-06-24 09:05:07 +04:00
/* STMicroelectronivcs VV5404 camera module
2005-04-17 02:20:36 +04:00
i2c : 0x20 : sensor address
i2c : 0xa0 : eeprom for ccd defect map
*/
# define VV5404_device_h 0x00 // 0x19
# define VV5404_device_l 0x01 // 0x40
# define VV5404_status0 0x02
# define VV5404_linecountc 0x03 // current line counter
# define VV5404_linecountl 0x04
# define VV5404_setup0 0x10
# define VV5404_setup1 0x11
# define VV5404_setup2 0x12
# define VV5404_setup4 0x14
# define VV5404_setup5 0x15
# define VV5404_fine_h 0x20 // fine exposure
# define VV5404_fine_l 0x21
# define VV5404_coarse_h 0x22 //coarse exposure
# define VV5404_coarse_l 0x23
# define VV5404_gain 0x24 // ADC pre-amp gain setting
# define VV5404_clk_div 0x25
# define VV5404_cr 0x76 // control register
# define VV5404_as0 0x77 // ADC setup register
// IOCTL
# define BT832_HEXDUMP _IOR('b',1,int)
# define BT832_REATTACH _IOR('b',2,int)
/* from BT8x8VXD/capdrv/dialogs.cpp */
/*
typedef enum { SVI , Logitech , Rockwell } CAMERA ;
static COMBOBOX_ENTRY gwCameraOptions [ ] =
{
{ SVI , " Silicon Vision 512N " } ,
{ Logitech , " Logitech VideoMan 1.3 " } ,
{ Rockwell , " Rockwell QuartzSight PCI 1.0 " }
} ;
// SRAM table values
//===========================================================================
typedef enum { TGB_NTSC624 , TGB_NTSC780 , TGB_NTSC858 , TGB_NTSC392 } TimeGenByte ;
BYTE SRAMTable [ ] [ 60 ] =
{
// TGB_NTSC624
{
0x33 , // size of table = 51
0x0E , 0xC0 , 0x00 , 0x00 , 0x90 , 0x02 , 0x03 , 0x10 , 0x03 , 0x06 ,
0x10 , 0x04 , 0x12 , 0x12 , 0x05 , 0x02 , 0x13 , 0x04 , 0x19 , 0x00 ,
0x04 , 0x39 , 0x00 , 0x06 , 0x59 , 0x08 , 0x03 , 0x85 , 0x08 , 0x07 ,
0x03 , 0x50 , 0x00 , 0x91 , 0x40 , 0x00 , 0x11 , 0x01 , 0x01 , 0x4D ,
0x0D , 0x02 , 0x03 , 0x11 , 0x01 , 0x05 , 0x37 , 0x00 , 0x37 , 0x21 , 0x00
} ,
// TGB_NTSC780
{
0x33 , // size of table = 51
0x0e , 0xc0 , 0x00 , 0x00 , 0x90 , 0xe2 , 0x03 , 0x10 , 0x03 , 0x06 ,
0x10 , 0x34 , 0x12 , 0x12 , 0x65 , 0x02 , 0x13 , 0x24 , 0x19 , 0x00 ,
0x24 , 0x39 , 0x00 , 0x96 , 0x59 , 0x08 , 0x93 , 0x85 , 0x08 , 0x97 ,
0x03 , 0x50 , 0x50 , 0xaf , 0x40 , 0x30 , 0x5f , 0x01 , 0xf1 , 0x7f ,
0x0d , 0xf2 , 0x03 , 0x11 , 0xf1 , 0x05 , 0x37 , 0x30 , 0x85 , 0x21 , 0x50
} ,
// TGB_NTSC858
{
0x33 , // size of table = 51
0x0c , 0xc0 , 0x00 , 0x00 , 0x90 , 0xc2 , 0x03 , 0x10 , 0x03 , 0x06 ,
0x10 , 0x34 , 0x12 , 0x12 , 0x65 , 0x02 , 0x13 , 0x24 , 0x19 , 0x00 ,
0x24 , 0x39 , 0x00 , 0x96 , 0x59 , 0x08 , 0x93 , 0x83 , 0x08 , 0x97 ,
0x03 , 0x50 , 0x30 , 0xc0 , 0x40 , 0x30 , 0x86 , 0x01 , 0x01 , 0xa6 ,
0x0d , 0x62 , 0x03 , 0x11 , 0x61 , 0x05 , 0x37 , 0x30 , 0xac , 0x21 , 0x50
} ,
// TGB_NTSC392
// This table has been modified to be used for Fusion Rev D
{
0x2A , // size of table = 42
0x06 , 0x08 , 0x04 , 0x0a , 0xc0 , 0x00 , 0x18 , 0x08 , 0x03 , 0x24 ,
0x08 , 0x07 , 0x02 , 0x90 , 0x02 , 0x08 , 0x10 , 0x04 , 0x0c , 0x10 ,
0x05 , 0x2c , 0x11 , 0x04 , 0x55 , 0x48 , 0x00 , 0x05 , 0x50 , 0x00 ,
0xbf , 0x0c , 0x02 , 0x2f , 0x3d , 0x00 , 0x2f , 0x3f , 0x00 , 0xc3 ,
0x20 , 0x00
}
} ;
//===========================================================================
// This is the structure of the camera specifications
//===========================================================================
typedef struct tag_cameraSpec
{
SignalFormat signal ; // which digital signal format the camera has
VideoFormat vidFormat ; // video standard
SyncVideoRef syncRef ; // which sync video reference is used
State syncOutput ; // enable sync output for sync video input?
DecInputClk iClk ; // which input clock is used
TimeGenByte tgb ; // which timing generator byte does the camera use
int HReset ; // select 64, 48, 32, or 16 CLKx1 for HReset
PLLFreq pllFreq ; // what synthesized frequency to set PLL to
VSIZEPARMS vSize ; // video size the camera produces
int lineCount ; // expected total number of half-line per frame - 1
BOOL interlace ; // interlace signal?
} CameraSpec ;
//===========================================================================
// <UPDATE REQUIRED>
// Camera specifications database. Update this table whenever camera spec
// has been changed or added/deleted supported camera models
//===========================================================================
static CameraSpec dbCameraSpec [ N_CAMERAOPTIONS ] =
{ // Silicon Vision 512N
{ Signal_CCIR656 , VFormat_NTSC , VRef_alignedCb , Off , DecClk_GPCLK , TGB_NTSC624 , 64 , KHz19636 ,
// Clkx1_HACTIVE, Clkx1_HDELAY, VActive, VDelay, linesPerField; lineCount, Interlace
{ 512 , 0x64 , 480 , 0x13 , 240 } , 0 , TRUE
} ,
// Logitech VideoMan 1.3
{ Signal_CCIR656 , VFormat_NTSC , VRef_alignedCb , Off , DecClk_GPCLK , TGB_NTSC780 , 64 , KHz24545 ,
// Clkx1_HACTIVE, Clkx1_HDELAY, VActive, VDelay, linesPerField; lineCount, Interlace
{ 640 , 0x80 , 480 , 0x1A , 240 } , 0 , TRUE
} ,
// Rockwell QuartzSight
// Note: Fusion Rev D (rev ID 0x02) and later supports 16 pixels for HReset which is preferable.
// Use 32 for earlier version of hardware. Clkx1_HDELAY also changed from 0x27 to 0x20.
{ Signal_CCIR656 , VFormat_NTSC , VRef_alignedCb , Off , DecClk_GPCLK , TGB_NTSC392 , 16 , KHz28636 ,
// Clkx1_HACTIVE, Clkx1_HDELAY, VActive, VDelay, linesPerField; lineCount, Interlace
{ 352 , 0x20 , 576 , 0x08 , 288 } , 607 , FALSE
}
} ;
*/
/*
The corresponding APIs required to be invoked are :
SetConnector ( ConCamera , TRUE / FALSE ) ;
SetSignalFormat ( spec . signal ) ;
SetVideoFormat ( spec . vidFormat ) ;
SetSyncVideoRef ( spec . syncRef ) ;
SetEnableSyncOutput ( spec . syncOutput ) ;
SetTimGenByte ( SRAMTable [ spec . tgb ] , SRAMTableSize [ spec . tgb ] ) ;
SetHReset ( spec . HReset ) ;
SetPLL ( spec . pllFreq ) ;
SetDecInputClock ( spec . iClk ) ;
SetVideoInfo ( spec . vSize ) ;
SetTotalLineCount ( spec . lineCount ) ;
SetInterlaceMode ( spec . interlace ) ;
*/
/* from web:
Video Sampling
Digital video is a sampled form of analog video . The most common sampling schemes in use today are :
2005-11-09 08:37:43 +03:00
Pixel Clock Horiz Horiz Vert
Rate Total Active
2005-04-17 02:20:36 +04:00
NTSC square pixel 12.27 MHz 780 640 525
NTSC CCIR - 601 13.5 MHz 858 720 525
NTSC 4F Sc 14.32 MHz 910 768 525
PAL square pixel 14.75 MHz 944 768 625
PAL CCIR - 601 13.5 MHz 864 720 625
PAL 4F Sc 17.72 MHz 1135 948 625
For the CCIR - 601 standards , the sampling is based on a static orthogonal sampling grid . The luminance component ( Y ) is sampled at 13.5 MHz , while the two color difference signals , Cr and Cb are sampled at half that , or 6.75 MHz . The Cr and Cb samples are colocated with alternate Y samples , and they are taken at the same position on each line , such that one sample is coincident with the 50 % point of the falling edge of analog sync . The samples are coded to either 8 or 10 bits per component .
*/
/* from DScaler:*/
/*
//===========================================================================
// CCIR656 Digital Input Support: The tables were taken from DScaler proyect
//
// 13 Dec 2000 - Michael Eskin, Conexant Systems - Initial version
//
//===========================================================================
// Timing generator SRAM table values for CCIR601 720x480 NTSC
//===========================================================================
2005-06-24 09:05:07 +04:00
// For NTSC CCIR656
2005-04-17 02:20:36 +04:00
BYTE BtCard : : SRAMTable_NTSC [ ] =
{
// SRAM Timing Table for NTSC
2005-06-24 09:05:07 +04:00
0x0c , 0xc0 , 0x00 ,
0x00 , 0x90 , 0xc2 ,
0x03 , 0x10 , 0x03 ,
0x06 , 0x10 , 0x34 ,
0x12 , 0x12 , 0x65 ,
0x02 , 0x13 , 0x24 ,
0x19 , 0x00 , 0x24 ,
0x39 , 0x00 , 0x96 ,
0x59 , 0x08 , 0x93 ,
2005-04-17 02:20:36 +04:00
0x83 , 0x08 , 0x97 ,
2005-06-24 09:05:07 +04:00
0x03 , 0x50 , 0x30 ,
0xc0 , 0x40 , 0x30 ,
0x86 , 0x01 , 0x01 ,
0xa6 , 0x0d , 0x62 ,
0x03 , 0x11 , 0x61 ,
0x05 , 0x37 , 0x30 ,
2005-04-17 02:20:36 +04:00
0xac , 0x21 , 0x50
} ;
//===========================================================================
// Timing generator SRAM table values for CCIR601 720x576 NTSC
//===========================================================================
// For PAL CCIR656
BYTE BtCard : : SRAMTable_PAL [ ] =
{
// SRAM Timing Table for PAL
0x36 , 0x11 , 0x01 ,
0x00 , 0x90 , 0x02 ,
0x05 , 0x10 , 0x04 ,
0x16 , 0x14 , 0x05 ,
0x11 , 0x00 , 0x04 ,
0x12 , 0xc0 , 0x00 ,
0x31 , 0x00 , 0x06 ,
0x51 , 0x08 , 0x03 ,
0x89 , 0x08 , 0x07 ,
0xc0 , 0x44 , 0x00 ,
0x81 , 0x01 , 0x01 ,
0xa9 , 0x0d , 0x02 ,
0x02 , 0x50 , 0x03 ,
0x37 , 0x3d , 0x00 ,
0xaf , 0x21 , 0x00 ,
} ;
*/