📄 jpc_cs.c
字号:
static int jpc_rgn_getparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *in){ jpc_rgn_t *rgn = &ms->parms.rgn; uint_fast8_t tmp; if (cstate->numcomps <= 256) { if (jpc_getuint8(in, &tmp)) { return -1; } rgn->compno = tmp; } else { if (jpc_getuint16(in, &rgn->compno)) { return -1; } } if (jpc_getuint8(in, &rgn->roisty) || jpc_getuint8(in, &rgn->roishift)) { return -1; } return 0;}static int jpc_rgn_putparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *out){ jpc_rgn_t *rgn = &ms->parms.rgn; if (cstate->numcomps <= 256) { if (jpc_putuint8(out, rgn->compno)) { return -1; } } else { if (jpc_putuint16(out, rgn->compno)) { return -1; } } if (jpc_putuint8(out, rgn->roisty) || jpc_putuint8(out, rgn->roishift)) { return -1; } return 0;}static int jpc_rgn_dumpparms(jpc_ms_t *ms, FILE *out){ jpc_rgn_t *rgn = &ms->parms.rgn; fprintf(out, "compno = %d; roisty = %d; roishift = %d\n", rgn->compno, rgn->roisty, rgn->roishift); return 0;}/******************************************************************************\* QCD marker segment operations.\******************************************************************************/static void jpc_qcd_destroyparms(jpc_ms_t *ms){ jpc_qcd_t *qcd = &ms->parms.qcd; jpc_qcx_destroycompparms(&qcd->compparms);}static int jpc_qcd_getparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *in){ jpc_qcxcp_t *compparms = &ms->parms.qcd.compparms; return jpc_qcx_getcompparms(compparms, cstate, in, ms->len);}static int jpc_qcd_putparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *out){ jpc_qcxcp_t *compparms = &ms->parms.qcd.compparms; return jpc_qcx_putcompparms(compparms, cstate, out);}static int jpc_qcd_dumpparms(jpc_ms_t *ms, FILE *out){ jpc_qcd_t *qcd = &ms->parms.qcd; int i; fprintf(out, "qntsty = %d; numguard = %d; numstepsizes = %d\n", (int) qcd->compparms.qntsty, qcd->compparms.numguard, qcd->compparms.numstepsizes); for (i = 0; i < qcd->compparms.numstepsizes; ++i) { fprintf(out, "expn[%d] = 0x%04x; mant[%d] = 0x%04x;\n", i, (unsigned) JPC_QCX_GETEXPN(qcd->compparms.stepsizes[i]), i, (unsigned) JPC_QCX_GETMANT(qcd->compparms.stepsizes[i])); } return 0;}/******************************************************************************\* QCC marker segment operations.\******************************************************************************/static void jpc_qcc_destroyparms(jpc_ms_t *ms){ jpc_qcc_t *qcc = &ms->parms.qcc; jpc_qcx_destroycompparms(&qcc->compparms);}static int jpc_qcc_getparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *in){ jpc_qcc_t *qcc = &ms->parms.qcc; uint_fast8_t tmp; int len; len = ms->len; if (cstate->numcomps <= 256) { jpc_getuint8(in, &tmp); qcc->compno = tmp; --len; } else { jpc_getuint16(in, &qcc->compno); len -= 2; } if (jpc_qcx_getcompparms(&qcc->compparms, cstate, in, len)) { return -1; } if (jas_stream_eof(in)) { jpc_qcc_destroyparms(ms); return -1; } return 0;}static int jpc_qcc_putparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *out){ jpc_qcc_t *qcc = &ms->parms.qcc; if (cstate->numcomps <= 256) { jpc_putuint8(out, qcc->compno); } else { jpc_putuint16(out, qcc->compno); } if (jpc_qcx_putcompparms(&qcc->compparms, cstate, out)) { return -1; } return 0;}static int jpc_qcc_dumpparms(jpc_ms_t *ms, FILE *out){ jpc_qcc_t *qcc = &ms->parms.qcc; int i; fprintf(out, "compno = %d; qntsty = %d; numguard = %d; " "numstepsizes = %d\n", qcc->compno, qcc->compparms.qntsty, qcc->compparms.numguard, qcc->compparms.numstepsizes); for (i = 0; i < qcc->compparms.numstepsizes; ++i) { fprintf(out, "expn[%d] = 0x%04x; mant[%d] = 0x%04x;\n", i, (unsigned) JPC_QCX_GETEXPN(qcc->compparms.stepsizes[i]), i, (unsigned) JPC_QCX_GETMANT(qcc->compparms.stepsizes[i])); } return 0;}/******************************************************************************\* QCD/QCC marker segment helper functions.\******************************************************************************/static void jpc_qcx_destroycompparms(jpc_qcxcp_t *compparms){ if (compparms->stepsizes) { jas_free(compparms->stepsizes); }}static int jpc_qcx_getcompparms(jpc_qcxcp_t *compparms, jpc_cstate_t *cstate, jas_stream_t *in, uint_fast16_t len){ uint_fast8_t tmp; int n; int i; /* Eliminate compiler warning about unused variables. */ cstate = 0; n = 0; jpc_getuint8(in, &tmp); ++n; compparms->qntsty = tmp & 0x1f; compparms->numguard = (tmp >> 5) & 7; switch (compparms->qntsty) { case JPC_QCX_SIQNT: compparms->numstepsizes = 1; break; case JPC_QCX_NOQNT: compparms->numstepsizes = (len - n); break; case JPC_QCX_SEQNT: /* XXX - this is a hack */ compparms->numstepsizes = (len - n) / 2; break; }if (compparms->numstepsizes > 0) { compparms->stepsizes = jas_malloc(compparms->numstepsizes * sizeof(uint_fast32_t)); assert(compparms->stepsizes); for (i = 0; i < compparms->numstepsizes; ++i) { if (compparms->qntsty == JPC_QCX_NOQNT) { jpc_getuint8(in, &tmp); compparms->stepsizes[i] = JPC_QCX_EXPN(tmp >> 3); } else { jpc_getuint16(in, &compparms->stepsizes[i]); } }} else { compparms->stepsizes = 0;} if (jas_stream_error(in) || jas_stream_eof(in)) { jpc_qcx_destroycompparms(compparms); return -1; } return 0;}static int jpc_qcx_putcompparms(jpc_qcxcp_t *compparms, jpc_cstate_t *cstate, jas_stream_t *out){ int i; /* Eliminate compiler warning about unused variables. */ cstate = 0; jpc_putuint8(out, ((compparms->numguard & 7) << 5) | compparms->qntsty); for (i = 0; i < compparms->numstepsizes; ++i) { if (compparms->qntsty == JPC_QCX_NOQNT) { jpc_putuint8(out, JPC_QCX_GETEXPN( compparms->stepsizes[i]) << 3); } else { jpc_putuint16(out, compparms->stepsizes[i]); } } return 0;}/******************************************************************************\* SOP marker segment operations.\******************************************************************************/static int jpc_sop_getparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *in){ jpc_sop_t *sop = &ms->parms.sop; /* Eliminate compiler warning about unused variable. */ cstate = 0; if (jpc_getuint16(in, &sop->seqno)) { return -1; } return 0;}static int jpc_sop_putparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *out){ jpc_sop_t *sop = &ms->parms.sop; /* Eliminate compiler warning about unused variable. */ cstate = 0; if (jpc_putuint16(out, sop->seqno)) { return -1; } return 0;}static int jpc_sop_dumpparms(jpc_ms_t *ms, FILE *out){ jpc_sop_t *sop = &ms->parms.sop; fprintf(out, "seqno = %d;\n", sop->seqno); return 0;}/******************************************************************************\* PPM marker segment operations.\******************************************************************************/static void jpc_ppm_destroyparms(jpc_ms_t *ms){ jpc_ppm_t *ppm = &ms->parms.ppm; if (ppm->data) { jas_free(ppm->data); }}static int jpc_ppm_getparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *in){ jpc_ppm_t *ppm = &ms->parms.ppm; /* Eliminate compiler warning about unused variables. */ cstate = 0; ppm->data = 0; if (ms->len < 1) { goto error; } if (jpc_getuint8(in, &ppm->ind)) { goto error; } ppm->len = ms->len - 1; if (ppm->len > 0) { if (!(ppm->data = jas_malloc(ppm->len * sizeof(unsigned char)))) { goto error; } if (JAS_CAST(uint, jas_stream_read(in, ppm->data, ppm->len)) != ppm->len) { goto error; } } else { ppm->data = 0; } return 0;error: jpc_ppm_destroyparms(ms); return -1;}static int jpc_ppm_putparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *out){ jpc_ppm_t *ppm = &ms->parms.ppm; /* Eliminate compiler warning about unused variables. */ cstate = 0; if (JAS_CAST(uint, jas_stream_write(out, (char *) ppm->data, ppm->len)) != ppm->len) { return -1; } return 0;}static int jpc_ppm_dumpparms(jpc_ms_t *ms, FILE *out){ jpc_ppm_t *ppm = &ms->parms.ppm; fprintf(out, "ind=%d; len = %d;\n", ppm->ind, ppm->len); if (ppm->len > 0) { fprintf(out, "data =\n"); jas_memdump(out, ppm->data, ppm->len); } return 0;}/******************************************************************************\* PPT marker segment operations.\******************************************************************************/static void jpc_ppt_destroyparms(jpc_ms_t *ms){ jpc_ppt_t *ppt = &ms->parms.ppt; if (ppt->data) { jas_free(ppt->data); }}static int jpc_ppt_getparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *in){ jpc_ppt_t *ppt = &ms->parms.ppt; /* Eliminate compiler warning about unused variables. */ cstate = 0; ppt->data = 0; if (ms->len < 1) { goto error; } if (jpc_getuint8(in, &ppt->ind)) { goto error; } ppt->len = ms->len - 1; if (ppt->len > 0) { if (!(ppt->data = jas_malloc(ppt->len * sizeof(unsigned char)))) { goto error; } if (jas_stream_read(in, (char *) ppt->data, ppt->len) != JAS_CAST(int, ppt->len)) { goto error; } } else { ppt->data = 0; } return 0;error: jpc_ppt_destroyparms(ms); return -1;}static int jpc_ppt_putparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *out){ jpc_ppt_t *ppt = &ms->parms.ppt; /* Eliminate compiler warning about unused variable. */ cstate = 0; if (jpc_putuint8(out, ppt->ind)) { return -1; } if (jas_stream_write(out, (char *) ppt->data, ppt->len) != JAS_CAST(int, ppt->len)) { return -1; } return 0;}static int jpc_ppt_dumpparms(jpc_ms_t *ms, FILE *out){ jpc_ppt_t *ppt = &ms->parms.ppt; fprintf(out, "ind=%d; len = %d;\n", ppt->ind, ppt->len); if (ppt->len > 0) { fprintf(out, "data =\n"); jas_memdump(out, ppt->data, ppt->len); } return 0;}/******************************************************************************\* POC marker segment operations.\******************************************************************************/static void jpc_poc_destroyparms(jpc_ms_t *ms){ jpc_poc_t *poc = &ms->parms.poc; if (poc->pchgs) { jas_free(poc->pchgs); }}static int jpc_poc_getparms(jpc_ms_t *ms, jpc_cstate_t *cstate, jas_stream_t *in){ jpc_poc_t *poc = &ms->parms.poc; jpc_pocpchg_t *pchg; int pchgno;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -