Mercurial > libavcodec.hg
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++) { |