Go ahead and call jinit_master_decompress() rather than trying to reproduce its functionality. That function does a few things that we were missing, including allocating the range limit table used by the plain C color conversion code.
git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/trunk@1139 632fc199-4ca6-4c93-a231-07263d6284db
This commit is contained in:
28
turbojpeg.c
28
turbojpeg.c
@@ -1255,16 +1255,15 @@ static int setDecodeDefaults(struct jpeg_decompress_struct *dinfo,
|
|||||||
(*dinfo->mem->alloc_small)((j_common_ptr)dinfo, JPOOL_IMAGE,
|
(*dinfo->mem->alloc_small)((j_common_ptr)dinfo, JPOOL_IMAGE,
|
||||||
dinfo->num_components*SIZEOF(jpeg_component_info));
|
dinfo->num_components*SIZEOF(jpeg_component_info));
|
||||||
|
|
||||||
dinfo->comp_info[0].h_samp_factor=tjMCUWidth[subsamp]/8;
|
for(i=0; i<dinfo->num_components; i++)
|
||||||
dinfo->comp_info[0].v_samp_factor=tjMCUHeight[subsamp]/8;
|
|
||||||
dinfo->comp_info[0].component_index=0;
|
|
||||||
dinfo->cur_comp_info[0]=&dinfo->comp_info[0];
|
|
||||||
for(i=1; i<dinfo->num_components; i++)
|
|
||||||
{
|
{
|
||||||
dinfo->comp_info[i].h_samp_factor=1;
|
jpeg_component_info *compptr=&dinfo->comp_info[i];
|
||||||
dinfo->comp_info[i].v_samp_factor=1;
|
compptr->h_samp_factor=(i==0)? tjMCUWidth[subsamp]/8:1;
|
||||||
dinfo->comp_info[i].component_index=i;
|
compptr->v_samp_factor=(i==0)? tjMCUHeight[subsamp]/8:1;
|
||||||
dinfo->cur_comp_info[i]=&dinfo->comp_info[i];
|
compptr->component_index=i;
|
||||||
|
compptr->quant_tbl_no=compptr->dc_tbl_no=compptr->ac_tbl_no=
|
||||||
|
(i==0)? 0:1;
|
||||||
|
dinfo->cur_comp_info[i]=compptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1358,21 +1357,14 @@ DLLEXPORT int DLLCALL tjDecodeYUV(tjhandle handle, unsigned char *srcBuf,
|
|||||||
{
|
{
|
||||||
retval=-1; goto bailout;
|
retval=-1; goto bailout;
|
||||||
}
|
}
|
||||||
jpeg_calc_output_dimensions(dinfo);
|
|
||||||
if(flags&TJFLAG_FASTUPSAMPLE)
|
if(flags&TJFLAG_FASTUPSAMPLE)
|
||||||
{
|
{
|
||||||
dinfo->do_fancy_upsampling=FALSE;
|
dinfo->do_fancy_upsampling=FALSE;
|
||||||
if((subsamp==TJSAMP_422 || subsamp==TJSAMP_420) && pixelFormat!=TJPF_GRAY)
|
if((subsamp==TJSAMP_422 || subsamp==TJSAMP_420) && pixelFormat!=TJPF_GRAY)
|
||||||
useMerged=1;
|
useMerged=1;
|
||||||
}
|
}
|
||||||
if(useMerged)
|
jinit_master_decompress(dinfo);
|
||||||
jinit_merged_upsampler(dinfo);
|
if(!useMerged) (*dinfo->cconvert->start_pass)(dinfo);
|
||||||
else
|
|
||||||
{
|
|
||||||
jinit_color_deconverter(dinfo);
|
|
||||||
jinit_upsampler(dinfo);
|
|
||||||
(*dinfo->cconvert->start_pass)(dinfo);
|
|
||||||
}
|
|
||||||
(*dinfo->upsample->start_pass)(dinfo);
|
(*dinfo->upsample->start_pass)(dinfo);
|
||||||
|
|
||||||
pw=PAD(width, dinfo->max_h_samp_factor);
|
pw=PAD(width, dinfo->max_h_samp_factor);
|
||||||
|
|||||||
Reference in New Issue
Block a user