static void centre_and_rescale(float *verts, int numvertices) { float cx=0.0f, cy=0.0f, cz=0.0f, scale=0.0f; float minx=0.0f, miny=0.0f, minz=0.0f; float maxx=0.0f, maxy=0.0f, maxz=0.0f; int i; float *v = verts; minx = maxx = verts[0]; miny = maxy = verts[1]; minz = maxz = verts[2]; for (i=0; i<numvertices; i++) { float x = *v++; float y = *v++; float z = *v++; minx = vcos_min(minx, x); miny = vcos_min(miny, y); minz = vcos_min(minz, z); maxx = vcos_max(maxx, x); maxy = vcos_max(maxy, y); maxz = vcos_max(maxz, z); cx += x; cy += y; cz += z; } cx /= (float)numvertices; cy /= (float)numvertices; cz /= (float)numvertices; scale = 3.0f / (maxx-minx + maxy-miny + maxz-minz); v = verts; for (i=0; i<numvertices; i++) { *v = (*v-cx) * scale; v++; *v = (*v-cy) * scale; v++; *v = (*v-cz) * scale; v++; } }
/** Update the port stats, called per buffer. * */ static void mmal_port_update_port_stats(MMAL_PORT_T *port, MMAL_CORE_STATS_DIR direction) { MMAL_PORT_PRIVATE_CORE_T *core = port->priv->core; MMAL_CORE_STATISTICS_T *stats; unsigned stc = vcos_getmicrosecs(); vcos_mutex_lock(&core->stats_lock); stats = direction == MMAL_CORE_STATS_RX ? &core->stats.rx : &core->stats.tx; stats->buffer_count++; if (!stats->first_buffer_time) { stats->last_buffer_time = stats->first_buffer_time = stc; } else { stats->max_delay = vcos_max(stats->max_delay, stc-stats->last_buffer_time); stats->last_buffer_time = stc; } vcos_mutex_unlock(&core->stats_lock); }