/** * \file structures.h * \author NB - PhyTI * \version x.x * \date 20 decembre 2009 * * */ #ifndef _STRUCTURES_H #define _STRUCTURES_H /** * \def uint64 entier non signe 64 bits * \def int64 entier signe 64 bits * \def uint32 entier non signe 32 bits */ typedef unsigned long long int uint64 ; typedef unsigned int uint32; typedef long long int int64 ; typedef long int int32 ; typedef unsigned short t_cumul_1 ; typedef unsigned int t_cumul_x ; typedef unsigned long long t_cumul_x2 ; typedef unsigned int t_sum_1 ; typedef unsigned long long t_sum_x ; typedef unsigned long long t_sum_x2 ; /** * \struct pixel_cumul structures.h * * \brief structure des images cumulees * * Version d'algorithme sans SSE2 \n * les images cumulees correspondent a \n * [sum 1, sum x, sum x^2] \n * * Trois donnees a stocker de dynamique differente \n * * cas d'images en profondeur 16 bits \n * avec xum_x2 sur 64 bits => taill image sur 14 bits soit 16000 x 16000 \n * longueur des segments sur 15 bits * \verbatim sum_1 : 0/1 + 14b + 15b = 29b => unsigned int sum_x : 16b + 14b + 15b = 45b => unsigned long int sum_x2 : 32b + 14b + 15b = 61b => unsigned long int \endverbatim * * Avec la definition suivante, les contributions des segments * ne pourrons etre que positives. Le signe associe au segment devra * etre memorise par une autre variable (code_segment) */ struct pixel_cumul { uint32 sum_1; uint64 sum_x; uint64 sum_x2; } ; struct tcumuls { t_cumul_x x; t_cumul_x2 x2; }; /** * \struct snake_node structures.h * * \brief noeud du snake defini par liste chainee * * Cette structure memorise la position du noeud * ET les informations concernant le segment qui * part de ce noeud et va au noeud suivant dans * l'ordre trigo */ struct snake_node { /* contribution du segment allant de ce noeud */ /* au noeud suivant, defini dans l'ordre trigo */ /* l'union pixel_cumul est definie en premier */ /* pour permettre l'alignement memoire */ struct pixel_cumul contrib ; int code_segment ; /* signe de la contrib */ int freeman_in ; /* du noeud d'arrivee du segment (ordre trigo) */ int freeman_out ; /* du noeud de depart du segment (ordre trigo) */ uint32 nb_pixels ; uint32 posi ; /* position i du noeud */ uint32 posj ; /* position j du noeud */ uint32 centre_i ; /* centre i du segment */ uint32 centre_j ; /* centre j du segment */ int last_move ; /* dernier test deplacement accepte */ /* lien liste chainee snake2D */ struct snake_node *noeud_suiv ; /* dans le sens trigo */ struct snake_node *noeud_prec ; /* lien liste chainee snake3D */ }; struct snake_node_gpu { t_sum_1 sum_1 ; t_sum_x sum_x ; t_sum_x2 sum_x2; int code_segment ; /* signe de la contrib */ int freeman_in ; /* du noeud d'arrivee du segment (ordre trigo) */ int freeman_out ; /* du noeud de depart du segment (ordre trigo) */ uint32 nb_pixels ; uint32 posi ; /* position i du noeud */ uint32 posj ; /* position j du noeud */ uint32 centre_i ; /* centre i du segment */ uint32 centre_j ; /* centre j du segment */ int last_move ; /* dernier test deplacement accepte */ }; #endif