📄 jpc_cs.c
字号:
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_fast16_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;
uint_fast8_t tmp;
poc->numpchgs = (cstate->numcomps > 256) ? (ms->len / 9) :
(ms->len / 7);
if (!(poc->pchgs = jas_malloc(poc->numpchgs * sizeof(jpc_pocpchg_t)))) {
goto error;
}
for (pchgno = 0, pchg = poc->pchgs; pchgno < poc->numpchgs; ++pchgno,
++pchg) {
if (jpc_getuint8(in, &pchg->rlvlnostart)) {
goto error;
}
if (cstate->numcomps > 256) {
if (jpc_getuint16(in, &pchg->compnostart)) {
goto error;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -