Changeset 196
- Timestamp:
- 03/19/06 21:27:56 (3 years ago)
- Files:
-
- trunk/lib/cc3_ilp/cc3_color_track.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/cc3_ilp/cc3_color_track.c
r181 r196 19 19 uint8_t cc3_track_color(cc3_track_pkt_t *pkt) 20 20 { 21 uint16_t y, x;21 uint16_t y, x; 22 22 23 x=pkt->scratch_x;24 y=pkt->scratch_y;23 x=pkt->scratch_x; 24 y=pkt->scratch_y; 25 25 26 if( (pkt->lower_bound.channel[0]>pkt->upper_bound.channel[0]) ||27 (pkt->lower_bound.channel[1]>pkt->upper_bound.channel[1]) ||28 (pkt->lower_bound.channel[2]>pkt->upper_bound.channel[2]) ) return 0;29 pkt->num_pixels=0;30 pkt->x0=UINT16_MAX;31 pkt->y0=UINT16_MAX;32 pkt->x1=0;33 pkt->y1=0;34 pkt->centroid_x=0;35 pkt->centroid_y=0;26 if( (pkt->lower_bound.channel[0]>pkt->upper_bound.channel[0]) || 27 (pkt->lower_bound.channel[1]>pkt->upper_bound.channel[1]) || 28 (pkt->lower_bound.channel[2]>pkt->upper_bound.channel[2]) ) return 0; 29 pkt->num_pixels=0; 30 pkt->x0=UINT16_MAX; 31 pkt->y0=UINT16_MAX; 32 pkt->x1=0; 33 pkt->y1=0; 34 pkt->centroid_x=0; 35 pkt->centroid_y=0; 36 36 37 37 38 for(y=0; y<cc3_g_current_frame.height; y++ )39 for(x=0; x<cc3_g_current_frame.width; x++ )40 {38 for(y=0; y<cc3_g_current_frame.height; y++ ) 39 for(x=0; x<cc3_g_current_frame.width; x++ ) 40 { 41 41 bool pixel_good=0; 42 42 cc3_pixbuf_read(); 43 43 if(cc3_g_current_frame.coi==CC3_ALL ) { 44 if(cc3_g_current_pixel.channel[0]>=pkt->lower_bound.channel[0] &&45 cc3_g_current_pixel.channel[0]<=pkt->upper_bound.channel[0] &&46 cc3_g_current_pixel.channel[1]>=pkt->lower_bound.channel[1] &&47 cc3_g_current_pixel.channel[1]<=pkt->upper_bound.channel[1] &&48 cc3_g_current_pixel.channel[2]>=pkt->lower_bound.channel[2] &&49 cc3_g_current_pixel.channel[2]<=pkt->upper_bound.channel[2] ) pixel_good=1;44 if(cc3_g_current_pixel.channel[0]>=pkt->lower_bound.channel[0] && 45 cc3_g_current_pixel.channel[0]<=pkt->upper_bound.channel[0] && 46 cc3_g_current_pixel.channel[1]>=pkt->lower_bound.channel[1] && 47 cc3_g_current_pixel.channel[1]<=pkt->upper_bound.channel[1] && 48 cc3_g_current_pixel.channel[2]>=pkt->lower_bound.channel[2] && 49 cc3_g_current_pixel.channel[2]<=pkt->upper_bound.channel[2] ) pixel_good=1; 50 50 } else 51 {52 if(cc3_g_current_pixel.channel[cc3_g_current_frame.coi]>=pkt->lower_bound.channel[cc3_g_current_frame.coi] &&53 cc3_g_current_pixel.channel[cc3_g_current_frame.coi]<=pkt->upper_bound.channel[cc3_g_current_frame.coi] ) pixel_good=1;54 }51 { 52 if(cc3_g_current_pixel.channel[cc3_g_current_frame.coi]>=pkt->lower_bound.channel[cc3_g_current_frame.coi] && 53 cc3_g_current_pixel.channel[cc3_g_current_frame.coi]<=pkt->upper_bound.channel[cc3_g_current_frame.coi] ) pixel_good=1; 54 } 55 55 56 56 if(pixel_good) 57 {58 pkt->num_pixels++;59 if(pkt->x0 > x ) pkt->x0=x;60 if(pkt->y0 > y ) pkt->y0=y;61 if(pkt->x1 < x ) pkt->x1=x;62 if(pkt->y1 < y ) pkt->y1=y;63 pkt->centroid_x+=x;64 pkt->centroid_y+=y;65 }66 }57 { 58 pkt->num_pixels++; 59 if(pkt->x0 > x ) pkt->x0=x; 60 if(pkt->y0 > y ) pkt->y0=y; 61 if(pkt->x1 < x ) pkt->x1=x; 62 if(pkt->y1 < y ) pkt->y1=y; 63 pkt->centroid_x+=x; 64 pkt->centroid_y+=y; 65 } 66 } 67 67 68 68 69 if(pkt->num_pixels>0 )70 {71 // FIXME: Density hack to keep it an integer72 pkt->int_density=(pkt->num_pixels*1000) / ((pkt->x1 - pkt->x0)*(pkt->y1 - pkt->y0));73 pkt->centroid_x= pkt->centroid_x / pkt->num_pixels;74 pkt->centroid_y= pkt->centroid_y / pkt->num_pixels;69 if(pkt->num_pixels>0 ) 70 { 71 // FIXME: Density hack to keep it an integer 72 pkt->int_density=(pkt->num_pixels*1000) / ((pkt->x1 - pkt->x0)*(pkt->y1 - pkt->y0)); 73 pkt->centroid_x= pkt->centroid_x / pkt->num_pixels; 74 pkt->centroid_y= pkt->centroid_y / pkt->num_pixels; 75 75 76 }77 else78 {79 pkt->int_density=0;80 pkt->x0=0;81 pkt->y0=0;82 pkt->x1=0;83 pkt->y1=0;84 pkt->centroid_x=0;85 pkt->centroid_y=0;76 } 77 else 78 { 79 pkt->int_density=0; 80 pkt->x0=0; 81 pkt->y0=0; 82 pkt->x1=0; 83 pkt->y1=0; 84 pkt->centroid_x=0; 85 pkt->centroid_y=0; 86 86 87 }88 return 1;87 } 88 return 1; 89 89 } 90 90 … … 99 99 { 100 100 101 if( (pkt->lower_bound.channel[0]>pkt->upper_bound.channel[0]) ||102 (pkt->lower_bound.channel[1]>pkt->upper_bound.channel[1]) ||103 (pkt->lower_bound.channel[2]>pkt->upper_bound.channel[2]) ) return 0;104 pkt->num_pixels=0;105 pkt->x0=UINT16_MAX;106 pkt->y0=UINT16_MAX;107 pkt->x1=0;108 pkt->y1=0;109 pkt->centroid_x=0;110 pkt->centroid_y=0;111 pkt->scratch_x=0;112 pkt->scratch_y=0;113 return 1;101 if( (pkt->lower_bound.channel[0]>pkt->upper_bound.channel[0]) || 102 (pkt->lower_bound.channel[1]>pkt->upper_bound.channel[1]) || 103 (pkt->lower_bound.channel[2]>pkt->upper_bound.channel[2]) ) return 0; 104 pkt->num_pixels=0; 105 pkt->x0=UINT16_MAX; 106 pkt->y0=UINT16_MAX; 107 pkt->x1=0; 108 pkt->y1=0; 109 pkt->centroid_x=0; 110 pkt->centroid_y=0; 111 pkt->scratch_x=0; 112 pkt->scratch_y=0; 113 return 1; 114 114 } 115 115 116 116 uint8_t cc3_track_color_scanline(cc3_image_t *img, cc3_track_pkt_t *pkt) 117 117 { 118 uint32_t x,y;118 uint32_t x,y; 119 119 120 for(x=0; x<MAX_BINARY_WIDTH; x++ ) pkt->binary_scanline[x]=0;120 for(x=0; x<MAX_BINARY_WIDTH; x++ ) pkt->binary_scanline[x]=0; 121 121 122 for(y=pkt->scratch_y; y<(pkt->scratch_y+img->height); y++ )123 for(x=0; x<img->width; x++ )124 {122 for(y=pkt->scratch_y; y<(pkt->scratch_y+img->height); y++ ) 123 for(x=0; x<img->width; x++ ) 124 { 125 125 bool pixel_good=0; 126 126 cc3_pixel_t cp; … … 128 128 cc3_get_pixel( img, x, 0, &cp ); 129 129 if(cc3_g_current_frame.coi==CC3_ALL ) { 130 if(cp.channel[0]>=pkt->lower_bound.channel[0] &&131 cp.channel[0]<=pkt->upper_bound.channel[0] &&132 cp.channel[1]>=pkt->lower_bound.channel[1] &&133 cp.channel[1]<=pkt->upper_bound.channel[1] &&134 cp.channel[2]>=pkt->lower_bound.channel[2] &&135 cp.channel[2]<=pkt->upper_bound.channel[2] ) pixel_good=1;130 if(cp.channel[0]>=pkt->lower_bound.channel[0] && 131 cp.channel[0]<=pkt->upper_bound.channel[0] && 132 cp.channel[1]>=pkt->lower_bound.channel[1] && 133 cp.channel[1]<=pkt->upper_bound.channel[1] && 134 cp.channel[2]>=pkt->lower_bound.channel[2] && 135 cp.channel[2]<=pkt->upper_bound.channel[2] ) pixel_good=1; 136 136 } else 137 {138 if(cp.channel[cc3_g_current_frame.coi]>=pkt->lower_bound.channel[cc3_g_current_frame.coi] &&139 cp.channel[cc3_g_current_frame.coi]<=pkt->upper_bound.channel[cc3_g_current_frame.coi] ) pixel_good=1;140 }137 { 138 if(cp.channel[cc3_g_current_frame.coi]>=pkt->lower_bound.channel[cc3_g_current_frame.coi] && 139 cp.channel[cc3_g_current_frame.coi]<=pkt->upper_bound.channel[cc3_g_current_frame.coi] ) pixel_good=1; 140 } 141 141 142 /* pkt->binary_scanline[0]=0x01020304;143 pkt->binary_scanline[1]=0x05060708;144 pkt->binary_scanline[2]=0x090A0B0C;145 pkt->binary_scanline[3]=0x0D0E0F10;146 pkt->binary_scanline[4]=0x11121314;147 */ if(pixel_good)148 {149 uint8_t block,offset;150 block=x/8;151 offset=x%8;152 offset=7-offset;153 pkt->binary_scanline[block] |= (1<<offset);154 pkt->num_pixels++;155 if(pkt->x0 > x ) pkt->x0=x;156 if(pkt->y0 > y ) pkt->y0=y;157 if(pkt->x1 < x ) pkt->x1=x;158 if(pkt->y1 < y ) pkt->y1=y;159 pkt->centroid_x+=x;160 pkt->centroid_y+=y;161 }162 }142 /* pkt->binary_scanline[0]=0x01020304; 143 pkt->binary_scanline[1]=0x05060708; 144 pkt->binary_scanline[2]=0x090A0B0C; 145 pkt->binary_scanline[3]=0x0D0E0F10; 146 pkt->binary_scanline[4]=0x11121314; 147 */ if(pixel_good) 148 { 149 uint8_t block,offset; 150 block=x/8; 151 offset=x%8; 152 offset=7-offset; 153 pkt->binary_scanline[block] |= (1<<offset); 154 pkt->num_pixels++; 155 if(pkt->x0 > x ) pkt->x0=x; 156 if(pkt->y0 > y ) pkt->y0=y; 157 if(pkt->x1 < x ) pkt->x1=x; 158 if(pkt->y1 < y ) pkt->y1=y; 159 pkt->centroid_x+=x; 160 pkt->centroid_y+=y; 161 } 162 } 163 163 164 pkt->scratch_y=y;164 pkt->scratch_y=y; 165 165 166 return 1;166 return 1; 167 167 } 168 168 … … 171 171 uint8_t cc3_track_color_scanline_finish(cc3_track_pkt_t *pkt) 172 172 { 173 if(pkt->num_pixels>0 )174 {175 // FIXME: Density hack to keep it an integer176 pkt->int_density=(pkt->num_pixels*1000) / ((pkt->x1 - pkt->x0)*(pkt->y1 - pkt->y0));177 pkt->centroid_x= pkt->centroid_x / pkt->num_pixels;178 pkt->centroid_y= pkt->centroid_y / pkt->num_pixels;173 if(pkt->num_pixels>0 ) 174 { 175 // FIXME: Density hack to keep it an integer 176 pkt->int_density=(pkt->num_pixels*1000) / ((pkt->x1 - pkt->x0)*(pkt->y1 - pkt->y0)); 177 pkt->centroid_x= pkt->centroid_x / pkt->num_pixels; 178 pkt->centroid_y= pkt->centroid_y / pkt->num_pixels; 179 179 180 }181 else182 {183 pkt->int_density=0;184 pkt->x0=0;185 pkt->y0=0;186 pkt->x1=0;187 pkt->y1=0;188 pkt->centroid_x=0;189 pkt->centroid_y=0;180 } 181 else 182 { 183 pkt->int_density=0; 184 pkt->x0=0; 185 pkt->y0=0; 186 pkt->x1=0; 187 pkt->y1=0; 188 pkt->centroid_x=0; 189 pkt->centroid_y=0; 190 190 191 }191 } 192 192 193 193
