comparison libmpcodecs/vd_sgi.c @ 18856:8f3099900d8c

correct handling of sgi compressed images on amd64, patch by Paul-Francois Fontigny - pff AT filmik-be
author reynaldo
date Fri, 30 Jun 2006 03:18:12 +0000
parents 87e03d96a4cd
children 1767c271d710
comparison
equal deleted inserted replaced
18855:a60bcf4969c3 18856:8f3099900d8c
153 /* decode a run length encoded sgi image */ 153 /* decode a run length encoded sgi image */
154 static void 154 static void
155 decode_rle_sgi(SGIInfo *info, unsigned char *data, mp_image_t *mpi) 155 decode_rle_sgi(SGIInfo *info, unsigned char *data, mp_image_t *mpi)
156 { 156 {
157 unsigned char *rle_data, *dest_row; 157 unsigned char *rle_data, *dest_row;
158 unsigned long *starttab; 158 uint32_t *starttab;
159 int y, z, xsize, ysize, zsize, chan_offset; 159 int y, z, xsize, ysize, zsize, chan_offset;
160 long start_offset; 160 long start_offset;
161 161
162 xsize = info->xsize; 162 xsize = info->xsize;
163 ysize = info->ysize; 163 ysize = info->ysize;
164 zsize = info->zsize; 164 zsize = info->zsize;
165 165
166 /* rle offset table is right after the header */ 166 /* rle offset table is right after the header */
167 starttab = (long*)(data + SGI_HEADER_LEN); 167 starttab = (uint32_t*)(data + SGI_HEADER_LEN);
168 168
169 for (z = 0; z < zsize; z++) { 169 for (z = 0; z < zsize; z++) {
170 170
171 /* set chan_offset so RGB ends up BGR */ 171 /* set chan_offset so RGB ends up BGR */
172 chan_offset = (zsize - 1) - z; 172 chan_offset = (zsize - 1) - z;
175 so read scan lines from bottom to top */ 175 so read scan lines from bottom to top */
176 for (y = ysize - 1; y >= 0; y--) { 176 for (y = ysize - 1; y >= 0; y--) {
177 dest_row = mpi->planes[0] + mpi->stride[0] * (ysize - 1 - y); 177 dest_row = mpi->planes[0] + mpi->stride[0] * (ysize - 1 - y);
178 178
179 /* set start of next run (offsets are from start of header) */ 179 /* set start of next run (offsets are from start of header) */
180 start_offset = be2me_32(*(unsigned long*) &starttab[y + z * ysize]); 180 start_offset = be2me_32(*(uint32_t*) &starttab[y + z * ysize]);
181 181
182 rle_data = &data[start_offset]; 182 rle_data = &data[start_offset];
183 183
184 if(info->zsize == SGI_GRAYSCALE_IMAGE) { 184 if(info->zsize == SGI_GRAYSCALE_IMAGE) {
185 expandrow_gs(dest_row, rle_data); 185 expandrow_gs(dest_row, rle_data);