Mercurial > libavcodec.hg
comparison lcldec.c @ 9761:b69de727fd7c libavcodec
Fix decoding of multithread-encoded lcl files on big-endian.
author | reimar |
---|---|
date | Sun, 31 May 2009 10:14:27 +0000 |
parents | 14b65c693625 |
children | 3242ae563430 |
comparison
equal
deleted
inserted
replaced
9760:14b65c693625 | 9761:b69de727fd7c |
---|---|
187 switch (avctx->codec_id) { | 187 switch (avctx->codec_id) { |
188 case CODEC_ID_MSZH: | 188 case CODEC_ID_MSZH: |
189 switch (c->compression) { | 189 switch (c->compression) { |
190 case COMP_MSZH: | 190 case COMP_MSZH: |
191 if (c->flags & FLAG_MULTITHREAD) { | 191 if (c->flags & FLAG_MULTITHREAD) { |
192 mthread_inlen = *(unsigned int*)encoded; | 192 mthread_inlen = AV_RL32(encoded); |
193 mthread_inlen = FFMIN(mthread_inlen, len - 8); | 193 mthread_inlen = FFMIN(mthread_inlen, len - 8); |
194 mthread_outlen = *(unsigned int*)(encoded+4); | 194 mthread_outlen = AV_RL32(encoded+4); |
195 mthread_outlen = FFMIN(mthread_outlen, c->decomp_size); | 195 mthread_outlen = FFMIN(mthread_outlen, c->decomp_size); |
196 mszh_dlen = mszh_decomp(encoded + 8, mthread_inlen, c->decomp_buf, c->decomp_size); | 196 mszh_dlen = mszh_decomp(encoded + 8, mthread_inlen, c->decomp_buf, c->decomp_size); |
197 if (mthread_outlen != mszh_dlen) { | 197 if (mthread_outlen != mszh_dlen) { |
198 av_log(avctx, AV_LOG_ERROR, "Mthread1 decoded size differs (%d != %d)\n", | 198 av_log(avctx, AV_LOG_ERROR, "Mthread1 decoded size differs (%d != %d)\n", |
199 mthread_outlen, mszh_dlen); | 199 mthread_outlen, mszh_dlen); |
234 if (c->compression == COMP_ZLIB_NORMAL && c->imgtype == IMGTYPE_RGB24 && | 234 if (c->compression == COMP_ZLIB_NORMAL && c->imgtype == IMGTYPE_RGB24 && |
235 len == width * height * 3) | 235 len == width * height * 3) |
236 break; | 236 break; |
237 if (c->flags & FLAG_MULTITHREAD) { | 237 if (c->flags & FLAG_MULTITHREAD) { |
238 int ret; | 238 int ret; |
239 mthread_inlen = *(unsigned int*)encoded; | 239 mthread_inlen = AV_RL32(encoded); |
240 mthread_inlen = FFMIN(mthread_inlen, len - 8); | 240 mthread_inlen = FFMIN(mthread_inlen, len - 8); |
241 mthread_outlen = *(unsigned int*)(encoded+4); | 241 mthread_outlen = AV_RL32(encoded+4); |
242 mthread_outlen = FFMIN(mthread_outlen, c->decomp_size); | 242 mthread_outlen = FFMIN(mthread_outlen, c->decomp_size); |
243 ret = zlib_decomp(avctx, encoded + 8, mthread_inlen, 0, mthread_outlen); | 243 ret = zlib_decomp(avctx, encoded + 8, mthread_inlen, 0, mthread_outlen); |
244 if (ret < 0) return ret; | 244 if (ret < 0) return ret; |
245 ret = zlib_decomp(avctx, encoded + 8 + mthread_inlen, len - 8 - mthread_inlen, | 245 ret = zlib_decomp(avctx, encoded + 8 + mthread_inlen, len - 8 - mthread_inlen, |
246 mthread_outlen, mthread_outlen); | 246 mthread_outlen, mthread_outlen); |