- len == width * height * 3)
- break;
- if (c->flags & FLAG_MULTITHREAD) {
- int ret;
- mthread_inlen = *(unsigned int*)encoded;
- mthread_outlen = *(unsigned int*)(encoded+4);
- if (mthread_outlen > c->decomp_size)
- mthread_outlen = c->decomp_size;
- ret = zlib_decomp(avctx, encoded + 8, mthread_inlen, 0, mthread_outlen);
+ len == width * height * 3) {
+ if (c->flags & FLAG_PNGFILTER) {
+ memcpy(c->decomp_buf, buf, len);
+ encoded = c->decomp_buf;
+ } else {
+ break;
+ }
+ } else if (c->flags & FLAG_MULTITHREAD) {
+ mthread_inlen = AV_RL32(buf);
+ mthread_inlen = FFMIN(mthread_inlen, len - 8);
+ mthread_outlen = AV_RL32(buf + 4);
+ mthread_outlen = FFMIN(mthread_outlen, c->decomp_size);
+ ret = zlib_decomp(avctx, buf + 8, mthread_inlen, 0, mthread_outlen);