comparison msrledec.c @ 8266:ce2bb0ae8587 libavcodec

Make decoding run of pixels in MS RLE saner. This is based on patches by Alex Converse and Mans Rullgard Thread "[PATCH] Fix MSRLE type punning"
author kostya
date Sat, 06 Dec 2008 09:05:30 +0000
parents bb310197d59f
children 2acf0ae7b041
comparison
equal deleted inserted replaced
8265:bb310197d59f 8266:ce2bb0ae8587
193 output += 4; 193 output += 4;
194 } 194 }
195 } 195 }
196 pos += p2; 196 pos += p2;
197 } else { //Run of pixels 197 } else { //Run of pixels
198 int pix[4]; //original pixel 198 uint8_t pix[3]; //original pixel
199 switch(depth){ 199 switch(depth){
200 case 8: pix[0] = *src++; 200 case 8: pix[0] = *src++;
201 break; 201 break;
202 case 16: pix16 = AV_RL16(src); 202 case 16: pix16 = AV_RL16(src);
203 src += 2; 203 src += 2;
204 *(uint16_t*)pix = pix16;
205 break; 204 break;
206 case 24: pix[0] = *src++; 205 case 24: pix[0] = *src++;
207 pix[1] = *src++; 206 pix[1] = *src++;
208 pix[2] = *src++; 207 pix[2] = *src++;
209 break; 208 break;
210 case 32: pix32 = AV_RL32(src); 209 case 32: pix32 = AV_RL32(src);
211 src += 4; 210 src += 4;
212 *(uint32_t*)pix = pix32;
213 break; 211 break;
214 } 212 }
215 if (output + p1 * (depth >> 3) > output_end) 213 if (output + p1 * (depth >> 3) > output_end)
216 continue; 214 continue;
217 for(i = 0; i < p1; i++) { 215 for(i = 0; i < p1; i++) {