示例#1
0
文件: t1.c 项目: RavenB/gridsearch
static void t1_enc_clnpass_step(
		opj_t1_t *t1,
		flag_t *flagsp,
		int *datap,
		int orient,
		int bpno,
		int one,
		int *nmsedec,
		int partial,
		int vsc)
{
	int v, flag;
	
	opj_mqc_t *mqc = t1->mqc;	/* MQC component */
	
	flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
	if (partial) {
		goto LABEL_PARTIAL;
	}
	if (!(*flagsp & (T1_SIG | T1_VISIT))) {
		mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
		v = int_abs(*datap) & one ? 1 : 0;
		mqc_encode(mqc, v);
		if (v) {
LABEL_PARTIAL:
			*nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
			mqc_setcurctx(mqc, t1_getctxno_sc(flag));
			v = *datap < 0 ? 1 : 0;
			mqc_encode(mqc, v ^ t1_getspb(flag));
			t1_updateflags(flagsp, v, t1->flags_stride);
		}
	}
	*flagsp &= ~T1_VISIT;
}
示例#2
0
文件: t1.c 项目: AlfiyaZi/GDCM
static void t1_enc_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc) {
	int v, flag;
	
	opj_mqc_t *mqc = t1->mqc;	/* MQC component */
	
	flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
	if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
		v = int_abs(*dp) & one ? 1 : 0;
		if (type == T1_TYPE_RAW) {	/* BYPASS/LAZY MODE */
			mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));	/* ESSAI */
			mqc_bypass_enc(mqc, v);
		} else {
			mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
			mqc_encode(mqc, v);
		}
		if (v) {
			v = *dp < 0 ? 1 : 0;
			*nmsedec +=	t1_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
			if (type == T1_TYPE_RAW) {	/* BYPASS/LAZY MODE */
				mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));	/* ESSAI */
				mqc_bypass_enc(mqc, v);
			} else {
				mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
				mqc_encode(mqc, v ^ t1_getspb(t1, flag));
			}
			t1_updateflags(fp, v);
			*fp |= T1_SIG;
		}
		*fp |= T1_VISIT;
	}
}
示例#3
0
文件: t1.c 项目: RavenB/gridsearch
static void t1_enc_refpass_step(
		opj_t1_t *t1,
		flag_t *flagsp,
		int *datap,
		int bpno,
		int one,
		int *nmsedec,
		char type,
		int vsc)
{
	int v, flag;
	
	opj_mqc_t *mqc = t1->mqc;	/* MQC component */
	
	flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
	if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
		*nmsedec += t1_getnmsedec_ref(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
		v = int_abs(*datap) & one ? 1 : 0;
		mqc_setcurctx(mqc, t1_getctxno_mag(flag));	/* ESSAI */
		if (type == T1_TYPE_RAW) {	/* BYPASS/LAZY MODE */
			mqc_bypass_enc(mqc, v);
		} else {
			mqc_encode(mqc, v);
		}
		*flagsp |= T1_REFINE;
	}
}
示例#4
0
int
irregularity (font_metric fnm) {
  metric_struct* x= fnm->get (0x78);
  int ex= max (x->y2 / 256, 1);
  array<int> xlike;
  xlike << 0x61 << 0x63 << 0x65 << 0x6d << 0x6e << 0x6f
        << 0x75 << 0x76 << 0x77;
  int totdy= 0;
  for (int i= 0; i<N(xlike); i++) {
    metric_struct* y= fnm->get (xlike[i]);
    totdy += (int_abs (y->y3 - x->y3) + int_abs (y->y4 - x->y4)) / 256;
  }
  return (100 * totdy) / (N(xlike) * ex);
}
示例#5
0
int
l1_distance (array<int> a1, array<int> a2) {
  int r= 0;
  for (int i=0; i<min (N(a1), N(a2)); i++)
    r += int_abs (a1[i] - a2[i]);
  return r;
}
示例#6
0
int rzad(int a){
    int res = 1, lim = 10;
    a = int_abs(a);
    while(a >= lim){
        res += 1;
        lim *= 10;
    }
    return res;
}
示例#7
0
void j2kTierOne::tierOneSignPassStep(int *fp, int *dp, int orient, int bpno, int one,int *nmsedec, char type, int vsc)
{
    int flag;
    if(vsc)
    {
        flag=((*fp)&(~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S)));
    } else {
        flag=*fp;
    }
    if((flag&T1_SIG_OTH)&&!(flag&(T1_SIG|T1_VISIT))) {
        int v=int_abs(*dp)&one?1:0;
        if(type==T1_TYPE_RAW)
        {
            /* BYPASS/LAZY MODE*/
            mqcSetCurCtx(getCtxNoZC(orient,flag));/* ESSAI */
            mqcByPassEncode(v);
        } else {
            mqcSetCurCtx(getCtxNoZC(orient,flag));
            mqcEncode(v);
        }

        if(v)
        {
            if(*dp<0)
                v=1;
            else
                v=0;
            *nmsedec+=tierOneGetNmSeDecSig(int_abs(*dp),bpno+T1_NMSEDEC_FRACBITS);
            if(type==T1_TYPE_RAW)//BYPASS/LAZY MODE
            {
                mqcSetCurCtx(getCtxNoSC(flag));/* ESSAI*/
                mqcByPassEncode(v);
            } else {
                mqcSetCurCtx(getCtxNoSC(flag));
                mqcEncode(v^getSPB(flag));
            }
            tierOneUpdateFlags(fp,v);
            *fp|=T1_SIG;
        }
        *fp|=T1_VISIT;
    }
}
static void t1_enc_sigpass_step(
    opj_t1_t *t1,
    flag_t *flagsp,
    OPJ_INT32 *datap,
    OPJ_UINT32 orient,
    OPJ_INT32 bpno,
    OPJ_INT32 one,
    OPJ_INT32 *nmsedec,
    OPJ_BYTE type,
    OPJ_UINT32 vsc)
{
  OPJ_INT32 v;
  OPJ_UINT32 flag;

  opj_mqc_t *mqc = t1->mqc;  /* MQC component */

  flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
  if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
    v = int_abs(*datap) & one ? 1 : 0;
    mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));  /* ESSAI */
    if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
      mqc_bypass_enc(mqc, v);
    } else {
      mqc_encode(mqc, v);
    }
    if (v) {
      v = *datap < 0 ? 1 : 0;
      *nmsedec +=  t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
      mqc_setcurctx(mqc, t1_getctxno_sc(flag));  /* ESSAI */
      if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
        mqc_bypass_enc(mqc, v);
      } else {
        mqc_encode(mqc, v ^ t1_getspb(flag));
      }
      t1_updateflags(flagsp, v, t1->flags_stride);
    }
    *flagsp |= T1_VISIT;
  }
}
示例#9
0
文件: t1.c 项目: AlfiyaZi/GDCM
static void t1_enc_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, int cblksty) {
	int i, j, k, m, one, agg, runlen, vsc;
	
	opj_mqc_t *mqc = t1->mqc;	/* MQC component */
	
	*nmsedec = 0;
	one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
	for (m = 0; m < l; m++) {
		for (k = 0; k < h; k += 4) {
			for (i = 0; i < w; i++) {
				if (k + 3 < h) {
					if (cblksty & J3D_CCP_CBLKSTY_VSC) {
						agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
							|| t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
							|| t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
							|| (t1->flags[1 + m][1 + k + 3][1 + i] 
							& (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW |	T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
					} else {
						agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
							|| t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
							|| t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
							|| t1->flags[1 + m][1 + k + 3][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH));
					}
				} else {
					agg = 0;
				}
				if (agg) {
					for (runlen = 0; runlen < 4; runlen++) {
						if (int_abs(t1->data[m][k + runlen][i]) & one)
							break;
					}
					mqc_setcurctx(mqc, T1_CTXNO_AGG);
					mqc_encode(mqc, runlen != 4);
					if (runlen == 4) {
						continue;
					}
					mqc_setcurctx(mqc, T1_CTXNO_UNI);
					mqc_encode(mqc, runlen >> 1);
					mqc_encode(mqc, runlen & 1);
				} else {
					runlen = 0;
				}
				for (j = k + runlen; j < k + 4 && j < h; j++) {
					vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
					t1_enc_clnpass_step(t1, &(t1->flags[1 + m][1 + j][1 + i]), &(t1->data[m][j][i]), orient, bpno, one, nmsedec, agg && (j == k + runlen), vsc);
				}
			}
	}
	}
示例#10
0
void j2kTierOne::tierOneRefPassStep(int *fp, int *dp, int bpno, int one,int *nmsedec, char type, int vsc)
{
    int flag;
    if(vsc)
    {
        flag=((*fp)&(~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S)));
    } else {
        flag=*fp;
    }

    //if((flag&T1_SIG_OTH)&&!(flag&(T1_SIG|T1_VISIT)))
    if((flag&(T1_SIG|T1_VISIT))==T1_SIG)
    {
        *nmsedec+=tierOneGetNmSeDecRef(int_abs(*dp),bpno+T1_NMSEDEC_FRACBITS);

        int v;
        if(int_abs(*dp)&one)
        {
            v=1;
        } else
        {
            v=0;
        }

        if(type==T1_TYPE_RAW)
        {
            /* BYPASS/LAZY MODE*/
            mqcSetCurCtx(getCtxNoMAG(flag));
            mqcByPassEncode(v);
        } else {
            mqcSetCurCtx(getCtxNoMAG(flag));
            mqcEncode(v);
        }
        *fp|=T1_REFINE;
    }
}
示例#11
0
文件: t1.c 项目: RavenB/gridsearch
static void t1_enc_clnpass(
		opj_t1_t *t1,
		int bpno,
		int orient,
		int *nmsedec,
		int cblksty)
{
	int i, j, k, one, agg, runlen, vsc;
	
	opj_mqc_t *mqc = t1->mqc;	/* MQC component */
	
	*nmsedec = 0;
	one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
	for (k = 0; k < t1->h; k += 4) {
		for (i = 0; i < t1->w; ++i) {
			if (k + 3 < t1->h) {
				if (cblksty & J2K_CCP_CBLKSTY_VSC) {
					agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
						|| MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
						|| MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
						|| (MACRO_t1_flags(1 + k + 3,1 + i) 
						& (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW |	T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
				} else {
					agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
						|| MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
						|| MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
						|| MACRO_t1_flags(1 + k + 3,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
				}
			} else {
				agg = 0;
			}
			if (agg) {
				for (runlen = 0; runlen < 4; ++runlen) {
					if (int_abs(t1->data[((k + runlen)*t1->w) + i]) & one)
						break;
				}
				mqc_setcurctx(mqc, T1_CTXNO_AGG);
				mqc_encode(mqc, runlen != 4);
				if (runlen == 4) {
					continue;
				}
				mqc_setcurctx(mqc, T1_CTXNO_UNI);
				mqc_encode(mqc, runlen >> 1);
				mqc_encode(mqc, runlen & 1);
			} else {
				runlen = 0;
			}
			for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
				vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
				t1_enc_clnpass_step(
						t1,
						&t1->flags[((j+1) * t1->flags_stride) + i + 1],
						&t1->data[(j * t1->w) + i],
						orient,
						bpno,
						one,
						nmsedec,
						agg && (j == k + runlen),
						vsc);
			}
		}
	}
int main()
{
	printf("%d \n",int_abs(-5));
	printf("%d",float_abs(-5.123));
	return 0;
}
示例#13
0
void j2kTierOne::tierOneEncodeCodeBlock(j2kTileCoder_CodeBlock *codeBlock,j2kTileCoder_Tile *tile,int orient,int compno,int level,int isDWT,double stepSize,int codeBlockStyle,int numComps)
{
    int cbWidth=codeBlock->x1-codeBlock->x0;
    int cbHeight=codeBlock->y1-codeBlock->y0;

    int max=0;

    for(int i=0; i<cbHeight; i++)
    {
        for(int j=0; j<cbWidth; j++)
        {
            max=int_max(max,int_abs(tierOneData[i][j]));
        }
    }

    if(max)
        codeBlock->numbps=int_floorlog2(max)+1-T1_NMSEDEC_FRACBITS;
    else
        codeBlock->numbps=0;

    for(int i=0; i<sizeof(tierOneFlags)/sizeof(int); i++)
    {
        ((int*)tierOneFlags)[i]=0;
    }

    int bpsno=codeBlock->numbps-1;
    int passType=2;

    mqcResetStates();
    mqcSetState(T1_CTXNO_UNI,0,46);
    mqcSetState(T1_CTXNO_AGG,0,3);
    mqcSetState(T1_CTXNO_ZC,0,4);
    mqcInitEncode(codeBlock->data);

    int type;
    int nmSeDec;
    double curWmSeDec=0;//?
    int passno;

    for(passno=0; bpsno>=0; passno++)
    {
        //printf ("cb2==%d==%d\n",passno,ttemp->x0);
        j2kTileCoder_Pass *pass=&codeBlock->passes[passno];
        int correction=3;
        type=((bpsno<(codeBlock->numbps-4))&&(passType<2)&&(codeBlockStyle&J2K_CCP_CBLKSTY_LAZY))?T1_TYPE_RAW:T1_TYPE_MQ;

        switch(passType)
        {
        case 0:
            tierOneSignPass(cbWidth,cbHeight,bpsno,orient,&nmSeDec,type,codeBlockStyle);
            break;
        case 1:
            tierOneRefPass(cbWidth,cbHeight,bpsno,&nmSeDec,type,codeBlockStyle);//此项有问题
            break;
        case 2:
            tierOneCleanPass(cbWidth,cbHeight,bpsno,orient,&nmSeDec,codeBlockStyle);

            if(codeBlockStyle&J2K_CCP_CBLKSTY_SEGSYM)
                mqcSegMarkEncode();/* 模式变化 SEGMARK*/

            break;
        }

        curWmSeDec+=getWmSeDec(nmSeDec,compno,level,orient,bpsno,isDWT,stepSize,numComps);//mod fixed_quality
        tile->distotile+=getWmSeDec(nmSeDec,compno,level,orient,bpsno,isDWT,stepSize,numComps);//add antonin quality

        //以下开始模式变换
        if((codeBlockStyle&J2K_CCP_CBLKSTY_TERMALL)&&
                !((passType==2)&&
                  (bpsno-1<0)))
        {
            mqcFlush();
            correction=1;
            pass->term=1;
        } else {
            if(((bpsno<(codeBlock->numbps-4)&&(passType>0))||((bpsno==(codeBlock->numbps-4))&&(passType==2)))&&
                    (codeBlockStyle&J2K_CCP_CBLKSTY_LAZY))
            {
                mqcFlush();
                correction=1;
                pass->term=1;
            } else {
                pass->term=0;
            }
        }

        if(++passType==3)
        {
            passType=0;
            bpsno--;
        }

        if(pass->term&&bpsno>0)
        {
            type=((bpsno<(codeBlock->numbps-4))&&(passType<2)&&(codeBlockStyle&J2K_CCP_CBLKSTY_LAZY))?T1_TYPE_RAW:T1_TYPE_MQ;
            if(type==T1_TYPE_RAW)
                mqcByPassInitEncode();//BYPASS模式初始化
            else
                mqcRestartInitEncode();
        }

        pass->distortiondec=curWmSeDec;
        pass->rate=mqcNumBytes()+correction;
        if(passno==0)
        {
            pass->len=pass->rate;
        } else {
            pass->len=pass->rate-codeBlock->passes[passno-1].rate;
        }

        //模式变换 RESET
        if(codeBlockStyle&J2K_CCP_CBLKSTY_RESET)
            mqcResetEncode();
    }

    //模式变换ERTERM
    if(codeBlockStyle&J2K_CCP_CBLKSTY_PTERM)
        mqcErtermEncode();
    else if(!(codeBlockStyle&J2K_CCP_CBLKSTY_LAZY))//默认模式
        mqcFlush();

    codeBlock->totalpasses=passno;

}