- vscale(npix_y, data_y, stride0, dinfo.image_height * dinfo.comp_info[0].v_samp_factor / dinfo.max_v_samp_factor, nh0, stride0);
- vscale(npix_cb, data_cb, stride1, dinfo.image_height * dinfo.comp_info[1].v_samp_factor / dinfo.max_v_samp_factor, nh1, stride1);
- vscale(npix_cr, data_cr, stride2, dinfo.image_height * dinfo.comp_info[2].v_samp_factor / dinfo.max_v_samp_factor, nh2, stride2);
+ {
+ float *npix = (float*)malloc(dinfo.comp_info[0].width_in_blocks * DCTSIZE * nh0 * sizeof(float));
+ vscale(data_y, npix, dinfo.comp_info[0].width_in_blocks * DCTSIZE, dinfo.comp_info[0].height_in_blocks * DCTSIZE, nh0, dinfo.comp_info[0].width_in_blocks * DCTSIZE);
+ data_ny = (unsigned char *)malloc(nw0 * stride0);
+ hscale(npix, data_ny, dinfo.comp_info[0].width_in_blocks * DCTSIZE, nh0, nw0, stride0);
+ free(npix);
+ }
+ {
+ float *npix = (float*)malloc(dinfo.comp_info[1].width_in_blocks * DCTSIZE * nh1 * sizeof(float));
+ vscale(data_cr, npix, dinfo.comp_info[1].width_in_blocks * DCTSIZE, dinfo.comp_info[1].height_in_blocks * DCTSIZE, nh1, dinfo.comp_info[1].width_in_blocks * DCTSIZE);
+ data_ncr = (unsigned char *)malloc(nw1 * stride1);
+ hscale(npix, data_ncr, dinfo.comp_info[1].width_in_blocks * DCTSIZE, nh1, nw1, stride1);
+ free(npix);
+ }
+ {
+ float *npix = (float*)malloc(dinfo.comp_info[2].width_in_blocks * DCTSIZE * nh2 * sizeof(float));
+ vscale(data_cb, npix, dinfo.comp_info[2].width_in_blocks * DCTSIZE, dinfo.comp_info[2].height_in_blocks * DCTSIZE, nh2, dinfo.comp_info[2].width_in_blocks * DCTSIZE);
+ data_ncb = (unsigned char *)malloc(nw2 * stride2);
+ hscale(npix, data_ncb, dinfo.comp_info[2].width_in_blocks * DCTSIZE, nh2, nw2, stride2);
+ free(npix);
+ }