unsigned char *dptr = npix + y*dstride;
unsigned char ch;
for (x = 0; x < nw; ++x) {
+ int result;
float acc;
int tmp;
static const float low = 0.0, high = 255.0;
asm (
- "pxor %0, %0 \n"
- "xor %1, %1 \n"
+ "pxor %1, %1 \n"
+ "xor %2, %2 \n"
".lbl2: \n"
- "movups (%3,%1),%%xmm1 \n"
- "movups (%2,%1),%%xmm2 \n"
+ "movups (%4,%2),%%xmm1 \n"
+ "movups (%3,%2),%%xmm2 \n"
"mulps %%xmm2,%%xmm1 \n"
- "addps %%xmm1,%0 \n"
- "addl $16,%1 \n"
- "dec %4 \n"
+ "addps %%xmm1,%1 \n"
+ "addl $16,%2 \n"
+ "dec %5 \n"
"jnz .lbl2 \n"
- "haddps %0,%0 \n"
- "haddps %0,%0 \n"
- "maxss %5,%0 \n"
- "minss %6,%0 \n"
- : "=&x" (acc),
+ "haddps %1,%1 \n"
+ "haddps %1,%1 \n"
+ "maxss %6,%1 \n"
+ "minss %7,%1 \n"
+ "cvtss2si %1,%0 \n"
+ : "=r" (result),
+ "=&x" (acc),
"=&r" (tmp)
: "r" (&coeffs[pd[x].startcoeff]),
"r" (&sptr[pd[x].start]),
ch = (unsigned char)acc;
*dptr++ = ch;
#endif
- *dptr++ = (unsigned char)acc;
+ *dptr++ = (unsigned char)result;
}
ch = dptr[-1];
for ( ; x < dstride; ++x) {
dinfo.raw_data_out = TRUE;
jpeg_start_decompress(&dinfo);
- unsigned w0 = dinfo.image_width * samp_h0 / max_samp_h, h0 = dinfo.image_height * samp_v0 / max_samp_v;
- unsigned w1 = dinfo.image_width * samp_h1 / max_samp_h, h1 = dinfo.image_height * samp_v1 / max_samp_v;
- unsigned w2 = dinfo.image_width * samp_h2 / max_samp_h, h2 = dinfo.image_height * samp_v2 / max_samp_v;
+ unsigned w0 = dinfo.image_width * dinfo.comp_info[0].h_samp_factor / dinfo.max_h_samp_factor;
+ unsigned h0 = dinfo.image_height * dinfo.comp_info[0].v_samp_factor / dinfo.max_v_samp_factor;
+
+ unsigned w1 = dinfo.image_width * dinfo.comp_info[1].h_samp_factor / dinfo.max_h_samp_factor;
+ unsigned h1 = dinfo.image_height * dinfo.comp_info[1].v_samp_factor / dinfo.max_v_samp_factor;
+
+ unsigned w2 = dinfo.image_width * dinfo.comp_info[2].h_samp_factor / dinfo.max_h_samp_factor;
+ unsigned h2 = dinfo.image_height * dinfo.comp_info[2].v_samp_factor / dinfo.max_v_samp_factor;
+
+ fprintf(stderr, "h0 = %u, h1=%u, h2=%u\n", h0, h1, h2);
fprintf(stderr, "Scaling using Lanczos filter:\n");
fprintf(stderr, " Y component: %ux%u -> %ux%u\n", dinfo.comp_info[0].width_in_blocks * DCTSIZE, dinfo.comp_info[0].height_in_blocks * DCTSIZE, nw0, nh0);