00001 #ifndef _SCANLINE_H_HEADER_INCLUDED
00002 #define _SCANLINE_H_HEADER_INCLUDED
00003
00004 #include "asvisual.h"
00005
00006 #ifdef __cplusplus
00007 extern "C" {
00008 #endif
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 typedef struct ASScanline
00055 {
00056 #define SCL_DO_BLUE (0x01<<ARGB32_BLUE_CHAN )
00057 #define SCL_DO_GREEN (0x01<<ARGB32_GREEN_CHAN)
00058 #define SCL_DO_RED (0x01<<ARGB32_RED_CHAN )
00059 #define SCL_DO_ALPHA (0x01<<ARGB32_ALPHA_CHAN)
00060 #define SCL_DO_COLOR (SCL_DO_RED|SCL_DO_GREEN|SCL_DO_BLUE)
00061 #define SCL_DO_ALL (SCL_DO_RED|SCL_DO_GREEN|SCL_DO_BLUE| \
00062 SCL_DO_ALPHA)
00063 #define SCL_RESERVED_MASK 0x0000FFFF
00064 #define SCL_CUSTOM_MASK 0xFFFF0000
00065 #define SCL_CUSTOM_OFFSET 16
00066
00067 CARD32 flags ;
00068 CARD32 *buffer ;
00069 CARD32 *blue, *green, *red, *alpha ;
00070 CARD32 *channels[IC_NUM_CHANNELS];
00071 CARD32 *xc3, *xc2, *xc1;
00072
00073
00074
00075 ARGB32 back_color;
00076 unsigned int width, shift;
00077 unsigned int offset_x ;
00078 }ASScanline;
00079
00080
00081 #define ASIM_DEMOSAIC_DEFAULT_STRIP_SIZE 5
00082
00083 typedef struct ASIMStrip
00084 {
00085 #define ASIM_SCL_InterpolatedH (0x01<<SCL_CUSTOM_OFFSET)
00086 #define ASIM_SCL_InterpolatedV (0x01<<(SCL_CUSTOM_OFFSET+ARGB32_CHANNELS))
00087 #define ASIM_SCL_InterpolatedAll (ASIM_SCL_InterpolatedV|ASIM_SCL_InterpolatedH)
00088
00089 #define ASIM_SCL_RGDiffCalculated (0x01<<(SCL_CUSTOM_OFFSET+ARGB32_CHANNELS*2))
00090 #define ASIM_SCL_BGDiffCalculated (0x01<<(SCL_CUSTOM_OFFSET+ARGB32_CHANNELS*2+1))
00091
00092 int size, width;
00093 ASScanline **lines;
00094 int start_line;
00095
00096 void **aux_data;
00097
00098 #define ASIM_SCL_MissingValue 0xF0000000
00099 #define ASIM_IsMissingValue(v) ((v)&0xF0000000)
00100
00101 #define ASIM_IsStripLineLoaded(sptr,l) ((sptr)->lines[l]->flags & SCL_DO_COLOR)
00102 #define ASIM_IsStripLineInterpolated(sptr,l) ((sptr)->lines[l]->flags & ASIM_SCL_Interpolated)
00103 }ASIMStrip;
00104
00105 typedef void (*ASIMStripLoader)(ASScanline *scl, CARD8 *data, int data_size);
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145 ASScanline* prepare_scanline( unsigned int width, unsigned int shift,
00146 ASScanline *reusable_memory, Bool BGR_mode);
00147 void free_scanline( ASScanline *sl, Bool reusable );
00148
00149
00150 void destroy_asim_strip (ASIMStrip **pstrip);
00151 ASIMStrip *create_asim_strip(unsigned int size, unsigned int width, int shift, int bgr);
00152 void advance_asim_strip (ASIMStrip *strip);
00153
00154
00155
00156 int load_asim_strip (ASIMStrip *strip, CARD8 *data, int data_size, int data_start_line, int data_row_size,
00157 ASIMStripLoader *line_loaders, int line_loaders_num);
00158 void decode_BG_12_be (ASScanline *scl, CARD8 *data, int data_size);
00159 void decode_GR_12_be (ASScanline *scl, CARD8 *data, int data_size);
00160 void decode_RG_12_be (ASScanline *scl, CARD8 *data, int data_size);
00161 void decode_GB_12_be (ASScanline *scl, CARD8 *data, int data_size);
00162
00163 void interpolate_asim_strip_custom_rggb2 (ASIMStrip *strip, ASFlagType filter, Bool force_all);
00164
00165 #ifdef __cplusplus
00166 }
00167 #endif
00168
00169 #endif