#include #include #include #include using namespace ARToolKitPlus; #ifdef AR_LITTLE_ENDIAN typedef union { int x; unsigned char y[4]; } SwapIntT; typedef union { ARFloat x; unsigned char y[8]; } SwapDoubleT; static void byteSwapInt( int *from, int *to ) { SwapIntT *w1, *w2; int i; w1 = (SwapIntT *)from; w2 = (SwapIntT *)to; for( i = 0; i < 4; i++ ) { w2->y[i] = w1->y[3-i]; } return; } static void byteSwapDouble( double *from, double *to ) { SwapDoubleT *w1, *w2; int i; w1 = (SwapDoubleT *)from; w2 = (SwapDoubleT *)to; for( i = 0; i < 8; i++ ) { w2->y[i] = w1->y[7-i]; } return; } static void byteswap( ARParamDouble *param ) { ARParamDouble wparam; int i, j; byteSwapInt( &(param->xsize), &(wparam.xsize) ); byteSwapInt( &(param->ysize), &(wparam.ysize) ); for( j = 0; j < 3; j++ ) { for( i = 0; i < 4; i++ ) { byteSwapDouble( &(param->mat[j][i]), &(wparam.mat[j][i]) ); } } for( i = 0; i < 4; i++ ) { byteSwapDouble( &(param->dist_factor[i]), &(wparam.dist_factor[i]) ); } *param = wparam; } #endif //AR_LITTLE_ENDIAN int main(int argc, char **argv) { FILE *fp; ARParamDouble param; char *srcfn, *destfn; if(argc!=3) { printf("usage: %s src dest\n",argv[0]); exit(1); } srcfn=argv[1]; destfn=argv[2]; printf("in loadFromFile\n"); fp = fopen( srcfn, "rb" ); if( fp == NULL ) { printf("fp==null\n"); return(false); } if(fread(¶m, sizeof(ARParamDouble), 1, fp ) != 1 ) { fclose(fp); printf("read error\n"); return(false); } #ifdef AR_LITTLE_ENDIAN byteswap( ¶m ); #endif fclose(fp); unsigned int i,j; //for(i=0; i<4; i++) this->dist_factor[i] = (ARFloat) param.dist_factor[i]; //this->xsize = (int) param.xsize; //this->ysize = (int) param.ysize; printf("mat:\n"); for(i=0; i<3; i++) { for(j=0; j<4; j++) { //this->mat[i][j] = (ARFloat) param.mat[i][j]; printf(" %f",(ARFloat)param.mat[i][j]); } printf("\n"); } if( ((ARFloat)param.mat[0][1] != 0.0) || ((ARFloat)param.mat[0][3] != 0.0) || ((ARFloat)param.mat[1][0] != 0.0) || ((ARFloat)param.mat[1][3] != 0.0) || ((ARFloat)param.mat[2][0] != 0.0) || ((ARFloat)param.mat[2][1] != 0.0) || ((ARFloat)param.mat[2][2] != 1.0) || ((ARFloat)param.mat[2][3] != 0.0)) { printf("warning mat fails check, preening..\n"); param.mat[0][1] = 0.0; param.mat[0][3] = 0.0; param.mat[1][0] = 0.0; param.mat[1][3] = 0.0; param.mat[2][0] = 0.0; param.mat[2][1] = 0.0; param.mat[2][2] = 1.0; param.mat[2][3] = 0.0; //return(false); } #ifdef AR_LITTLE_ENDIAN byteswap( ¶m ); #endif fp = fopen( destfn, "wb" ); if( fp == NULL ) { printf("fp==null\n"); return(false); } if(fwrite(¶m, sizeof(ARParamDouble), 1, fp ) != 1 ) { fclose(fp); printf("write error\n"); return(false); } fclose(fp); return 0; } /* ======================================================================== * PROJECT: ARToolKitPlus * ======================================================================== * This work is based on the original ARToolKit developed by * Hirokazu Kato * Mark Billinghurst * HITLab, University of Washington, Seattle * http://www.hitl.washington.edu/artoolkit/ * * Copyright of the derived and new portions of this work * (C) 2006 Graz University of Technology * * This framework is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This framework is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this framework; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * For further information please contact * Dieter Schmalstieg * * Graz University of Technology, * Institut for Computer Graphics and Vision, * Inffeldgasse 16a, 8010 Graz, Austria. * ======================================================================== ** @author Thomas Pintaric * * $Id: byteSwap.cxx 162 2006-04-19 21:28:10Z grabner $ * @file * ======================================================================== */