Mercurial > mplayer.hg
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); |