IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 33188


Ignore:
Timestamp:
Feb 1, 2012, 10:22:52 AM (14 years ago)
Author:
eugene
Message:

fix embarrassing byte-swap error in bitpix = -64 images

Location:
branches/eam_branches/ipp-20111122/Ohana/src/libfits/matrix
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20111122/Ohana/src/libfits/matrix/F_compress_M.c

    r28241 r33188  
    424424int gfits_byteswap_zdata (char *zdata, int Nzdata, int pixsize) {
    425425
     426# define DOSWAP(A,B) { char tmp = A; A = B; B = tmp; }
     427
    426428# ifdef BYTE_SWAP
    427429
    428430  int i;
    429   char tmp;
    430431
    431432  switch (pixsize) {
     
    435436    case 2:
    436437      for (i = 0; i < 2*Nzdata; i+=2) {
    437         tmp = zdata[i];
    438         zdata[i] = zdata[i+1];
    439         zdata[i+1] = tmp;
     438        DOSWAP (zdata[i+0], zdata[i+1]);
    440439      }
    441440      break;
     
    443442    case 4:
    444443      for (i = 0; i < 4*Nzdata; i+=4) {
    445         tmp = zdata[i+1];
    446         zdata[i+1] = zdata[i+2];
    447         zdata[i+2] = tmp;
    448         tmp = zdata[i];
    449         zdata[i] = zdata[i+3];
    450         zdata[i+3] = tmp;
     444        DOSWAP (zdata[i+0], zdata[i+3]);
     445        DOSWAP (zdata[i+1], zdata[i+2]);
    451446      }
    452447      break;
     
    454449    case 8:
    455450      for (i = 0; i < 8*Nzdata; i+=8) {
    456         tmp = zdata[i+0];
    457         zdata[i+0] = zdata[i+7];
    458         zdata[i+7] = tmp;
    459         tmp = zdata[i+1];
    460         zdata[i+1] = zdata[i+6];
    461         zdata[i+6] = tmp;
    462         tmp = zdata[i+2];
    463         zdata[i+2] = zdata[i+5];
    464         zdata[i+5] = tmp;
    465         tmp = zdata[i+3];
    466         zdata[i+3] = zdata[i+4];
    467         zdata[i+4] = tmp;
     451        DOSWAP (zdata[i+0], zdata[i+7]);
     452        DOSWAP (zdata[i+1], zdata[i+6]);
     453        DOSWAP (zdata[i+2], zdata[i+5]);
     454        DOSWAP (zdata[i+3], zdata[i+4]);
    468455      }
    469456      break;
  • branches/eam_branches/ipp-20111122/Ohana/src/libfits/matrix/F_load_M.c

    r28241 r33188  
    3838  }
    3939
     40# define DOSWAP(A,B) { char tmp = A; A = B; B = tmp; }
     41
    4042# ifdef BYTE_SWAP 
    4143 {
    4244  int perpix;
    43   unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7, tmp;
     45  unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7;
    4446
    4547  perpix = abs(header[0].bitpix) / 8;
     
    5557    if (perpix == 2) {
    5658      for (i = 0; i < nbytes; i+=2, byte0 += 2, byte1 += 2) {
    57         tmp = *byte0;
    58         *byte0 = *byte1;
    59         *byte1 = tmp;
     59        DOSWAP(*byte0, *byte1);
    6060      }
    6161    }
    6262    if (perpix == 4) {
    6363      for (i = 0; i < nbytes; i+=4, byte0 += 4, byte1 += 4, byte2 += 4, byte3 += 4) {
    64         tmp = *byte0;
    65         *byte0 = *byte3;
    66         *byte3 = tmp;
    67         tmp = *byte1;
    68         *byte1 = *byte2;
    69         *byte2 = tmp;
     64        DOSWAP (*byte0, *byte3);
     65        DOSWAP (*byte1, *byte2);
    7066      }
    7167    }
    7268    if (perpix == 8) {
    7369      for (i = 0; i < nbytes; i+=8, byte0 += 8, byte1 += 8, byte2 += 8, byte3 += 8, byte4 += 8, byte5 += 8, byte6 += 8, byte7 += 8) {
    74         tmp = *byte0;
    75         *byte0 = *byte7;
    76         *byte7 = tmp;
    77         tmp = *byte1;
    78         *byte1 = *byte6;
    79         *byte6 = tmp;
    80         tmp = *byte1;
    81         *byte2 = *byte5;
    82         *byte5 = tmp;
    83         tmp = *byte1;
    84         *byte3 = *byte4;
    85         *byte4 = tmp;
     70        DOSWAP (*byte0, *byte7);
     71        DOSWAP (*byte1, *byte6);
     72        DOSWAP (*byte2, *byte5);
     73        DOSWAP (*byte3, *byte4);
    8674      }
    8775    }
  • branches/eam_branches/ipp-20111122/Ohana/src/libfits/matrix/F_read_portion.c

    r28241 r33188  
    5252  fclose (f);
    5353
     54# define DOSWAP(A,B) { char tmp = A; A = B; B = tmp; }
     55
    5456# ifdef BYTE_SWAP 
    5557  {
    5658    off_t i;
    5759    int perpix;
    58     unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7, ctmp;
    59 
     60    unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7;
     61   
    6062    perpix = abs(header.bitpix) / 8;
    6163    if (perpix > 1) {
     
    7072      if (perpix == 2) {
    7173        for (i = 0; i < nbytes; i+=2, byte0 += 2, byte1 += 2) {
    72           ctmp = *byte0;
    73           *byte0 = *byte1;
    74           *byte1 = ctmp;
     74          DOSWAP(*byte0, *byte1);
    7575        }
    7676      }
    7777      if (perpix == 4) {
    7878        for (i = 0; i < nbytes; i+=4, byte0 += 4, byte1 += 4, byte2 += 4, byte3 += 4) {
    79           ctmp = *byte0;
    80           *byte0 = *byte3;
    81           *byte3 = ctmp;
    82           ctmp = *byte1;
    83           *byte1 = *byte2;
    84           *byte2 = ctmp;
     79          DOSWAP (*byte0, *byte3);
     80          DOSWAP (*byte1, *byte2);
    8581        }
    8682      }
    8783      if (perpix == 8) {
    8884        for (i = 0; i < nbytes; i+=8, byte0 += 8, byte1 += 8, byte2 += 8, byte3 += 8, byte4 += 8, byte5 += 8, byte6 += 8, byte7 += 8) {
    89           ctmp = *byte0;
    90           *byte0 = *byte7;
    91           *byte7 = ctmp;
    92           ctmp = *byte1;
    93           *byte1 = *byte6;
    94           *byte6 = ctmp;
    95           ctmp = *byte1;
    96           *byte2 = *byte5;
    97           *byte5 = ctmp;
    98           ctmp = *byte1;
    99           *byte3 = *byte4;
    100           *byte4 = ctmp;
     85          DOSWAP (*byte0, *byte7);
     86          DOSWAP (*byte1, *byte6);
     87          DOSWAP (*byte2, *byte5);
     88          DOSWAP (*byte3, *byte4);
    10189        }
    10290      }
  • branches/eam_branches/ipp-20111122/Ohana/src/libfits/matrix/F_read_segment.c

    r28241 r33188  
    9595  matrix[0].datasize = Nbytes;
    9696
     97# define DOSWAP(A,B) { char tmp = A; A = B; B = tmp; }
     98
    9799# ifdef BYTE_SWAP 
    98100 {
    99   unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7, ctmp;
     101  unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7;
    100102  int perpix;
    101103
     
    112114    if (perpix == 2) {
    113115      for (i = 0; i < nbytes; i+=2, byte0 += 2, byte1 += 2) {
    114         ctmp = *byte0;
    115         *byte0 = *byte1;
    116         *byte1 = ctmp;
     116        DOSWAP(*byte0, *byte1);
    117117      }
    118118    }
    119119    if (perpix == 4) {
    120120      for (i = 0; i < nbytes; i+=4, byte0 += 4, byte1 += 4, byte2 += 4, byte3 += 4) {
    121         ctmp = *byte0;
    122         *byte0 = *byte3;
    123         *byte3 = ctmp;
    124         ctmp = *byte1;
    125         *byte1 = *byte2;
    126         *byte2 = ctmp;
     121        DOSWAP (*byte0, *byte3);
     122        DOSWAP (*byte1, *byte2);
    127123      }
    128124    }
    129125    if (perpix == 8) {
    130126      for (i = 0; i < nbytes; i+=8, byte0 += 8, byte1 += 8, byte2 += 8, byte3 += 8, byte4 += 8, byte5 += 8, byte6 += 8, byte7 += 8) {
    131         ctmp = *byte0;
    132         *byte0 = *byte7;
    133         *byte7 = ctmp;
    134         ctmp = *byte1;
    135         *byte1 = *byte6;
    136         *byte6 = ctmp;
    137         ctmp = *byte1;
    138         *byte2 = *byte5;
    139         *byte5 = ctmp;
    140         ctmp = *byte1;
    141         *byte3 = *byte4;
    142         *byte4 = ctmp;
     127        DOSWAP (*byte0, *byte7);
     128        DOSWAP (*byte1, *byte6);
     129        DOSWAP (*byte2, *byte5);
     130        DOSWAP (*byte3, *byte4);
    143131      }
    144132    }
  • branches/eam_branches/ipp-20111122/Ohana/src/libfits/matrix/F_write_M.c

    r27435 r33188  
    3636    nbytes = FT_RECORD_SIZE * ((off_t) (matrix[0].datasize / FT_RECORD_SIZE));
    3737
     38# define DOSWAP(A,B) { char tmp = A; A = B; B = tmp; }
     39
    3840  /* this is a bit cumbersome: swap all words, write out file, then swap back... */
    3941# ifdef BYTE_SWAP 
    4042  {
    4143    off_t i;
    42     unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7, tmp;
     44    unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7;
    4345    int perpix;
    4446
     
    5557      if (perpix == 2) {
    5658        for (i = 0; i < nbytes; i+=2, byte0 += 2, byte1 += 2) {
    57           tmp = *byte0;
    58           *byte0 = *byte1;
    59           *byte1 = tmp;
     59          DOSWAP(*byte0, *byte1);
    6060        }
    6161      }
    6262      if (perpix == 4) {
    6363        for (i = 0; i < nbytes; i+=4, byte0 += 4, byte1 += 4, byte2 += 4, byte3 += 4) {
    64           tmp = *byte0;
    65           *byte0 = *byte3;
    66           *byte3 = tmp;
    67           tmp = *byte1;
    68           *byte1 = *byte2;
    69           *byte2 = tmp;
     64          DOSWAP (*byte0, *byte3);
     65          DOSWAP (*byte1, *byte2);
    7066        }
    7167      }
    7268      if (perpix == 8) {
    7369        for (i = 0; i < nbytes; i+=8, byte0 += 8, byte1 += 8, byte2 += 8, byte3 += 8, byte4 += 8, byte5 += 8, byte6 += 8, byte7 += 8) {
    74           tmp = *byte0;
    75           *byte0 = *byte7;
    76           *byte7 = tmp;
    77           tmp = *byte1;
    78           *byte1 = *byte6;
    79           *byte6 = tmp;
    80           tmp = *byte1;
    81           *byte2 = *byte5;
    82           *byte5 = tmp;
    83           tmp = *byte1;
    84           *byte3 = *byte4;
    85           *byte4 = tmp;
     70          DOSWAP (*byte0, *byte7);
     71          DOSWAP (*byte1, *byte6);
     72          DOSWAP (*byte2, *byte5);
     73          DOSWAP (*byte3, *byte4);
    8674        }
    8775      }
     
    9886  {
    9987    off_t i;
    100     unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7, tmp;
     88    unsigned char *byte0, *byte1, *byte2, *byte3, *byte4, *byte5, *byte6, *byte7;
    10189    int perpix;
    10290
     
    113101      if (perpix == 2) {
    114102        for (i = 0; i < nbytes; i+=2, byte0 += 2, byte1 += 2) {
    115           tmp = *byte0;
    116           *byte0 = *byte1;
    117           *byte1 = tmp;
     103          DOSWAP(*byte0, *byte1);
    118104        }
    119105      }
    120106      if (perpix == 4) {
    121107        for (i = 0; i < nbytes; i+=4, byte0 += 4, byte1 += 4, byte2 += 4, byte3 += 4) {
    122           tmp = *byte0;
    123           *byte0 = *byte3;
    124           *byte3 = tmp;
    125           tmp = *byte1;
    126           *byte1 = *byte2;
    127           *byte2 = tmp;
     108          DOSWAP (*byte0, *byte3);
     109          DOSWAP (*byte1, *byte2);
    128110        }
    129111      }
    130112      if (perpix == 8) {
    131113        for (i = 0; i < nbytes; i+=8, byte0 += 8, byte1 += 8, byte2 += 8, byte3 += 8, byte4 += 8, byte5 += 8, byte6 += 8, byte7 += 8) {
    132           tmp = *byte0;
    133           *byte0 = *byte7;
    134           *byte7 = tmp;
    135           tmp = *byte1;
    136           *byte1 = *byte6;
    137           *byte6 = tmp;
    138           tmp = *byte1;
    139           *byte2 = *byte5;
    140           *byte5 = tmp;
    141           tmp = *byte1;
    142           *byte3 = *byte4;
    143           *byte4 = tmp;
     114          DOSWAP (*byte0, *byte7);
     115          DOSWAP (*byte1, *byte6);
     116          DOSWAP (*byte2, *byte5);
     117          DOSWAP (*byte3, *byte4);
    144118        }
    145119      }
Note: See TracChangeset for help on using the changeset viewer.