int rebuild_jpg_config_para(jpeg_data_t  *jpeg_data,jpegdec_config_t *config)
{
	int ret = 0;	
	switch(sMode){
	    case KEEP_SIZE:
	    case KEEPASPECTRATIO:
		case SCRETCHFULLSCREEN:
			ret = compute_keep_ratio(jpeg_data,config);
			break;
	    break;
	    case KEEPASPECTRATIOWITHCROP:
	    ret = compute_keep_ratio_by_expanding(jpeg_data,config);
	    if(ret < 0){
	        ret = compute_keep_ratio(jpeg_data,config);    
	    }
	    break;
	    default:
	    break;    
	}  
	if(config->dec_h<2) {
		ALOGD("too small to decode with hwjpeg decoder.\n");
		return -1;
	}	
	return 0;
}
int rebuild_jpg_config_para(jpeg_data_t  *jpeg_data,jpegdec_config_t *config)
{
	int ret = 0;
	if((scale_w*jpeg_data->info.height)!= (scale_h*jpeg_data->info.width)){
	    sMode =  IGNOREASPECTRATIO;   	        
    }else{
        sMode =  KEEPASPECTRATIO;   	 
    }
#ifdef JPEG_DBG    
    printf("current sMode is %d\n",sMode);	
#endif    
	switch(sMode){
	    case KEEPASPECTRATIO:
	    ret = compute_keep_ratio(jpeg_data,config);
	    break;
	    case IGNOREASPECTRATIO:
	    ret = compute_keep_ratio_by_expanding(jpeg_data,config);
	    if(ret < 0){
	        ret = compute_keep_ratio(jpeg_data,config);    
	    }
	    break;
	    case KEEPASPECTRATIOBYEXPANDING:
	    ret = compute_keep_ratio_by_expanding(jpeg_data,config);
	    if(ret < 0){
	        ret = compute_keep_ratio(jpeg_data,config);    
	    }
	    break;
	    default:
	    break;    
	}  
	if(config->dec_h<2) {
		printf("too small to decode with hwjpeg decoder.\n");
		return -1;
	}	
	config->canvas_width = CANVAS_ALIGNED(config->dec_w);	
	planes[0] = (unsigned char *)CMEM_alloc(0, 
				 config->canvas_width * config->dec_h, &cmemParm);
	planes[1] = (unsigned char *)CMEM_alloc(0,
				CANVAS_ALIGNED((config->canvas_width/2)) *config->dec_h/2, &cmemParm);
	planes[2] = (unsigned char *)CMEM_alloc(0,
				CANVAS_ALIGNED((config->canvas_width/2)) * config->dec_h/2, &cmemParm);
	if ((!planes[0]) || (!planes[1]) || (!planes[2])) {
		printf("Not enough memory\n");
		if (planes[0])
			CMEM_free(planes[0], &cmemParm);
		if (planes[1])
			CMEM_free(planes[1], &cmemParm);
		if (planes[2])
			CMEM_free(planes[2], &cmemParm);
		return -1;
	}
	config->addr_y = CMEM_getPhys(planes[0]);
	config->addr_u = CMEM_getPhys(planes[1]);
	config->addr_v = CMEM_getPhys(planes[2]);
	
	if(config->dec_w==0 ||config->dec_h==0)
	{
		config->dec_w= jpeg_data->info.width;
		config->dec_h= jpeg_data->info.height;
	}
//	scaleSize(config->dec_w, config->dec_h, jpeg_data->info.width, jpeg_data->info.height, (Qt::AspectRatioMode)config->opt);
	config->opt = 0;
	config->dec_x = 0;
	config->dec_y = 0;
	config->angle = CLKWISE_0;
	clear_plane(0,config);
	clear_plane(1,config);
	clear_plane(2,config);
	return 0;	
}