⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpxstream.cc

📁 将pdf文档转换为高质量的html文档
💻 CC
📖 第 1 页 / 共 5 页
字号:
	  img.tiles[i].tileComps[comp].resLevels = NULL;	}      }      for (comp = 0; comp < img.nComps; ++comp) {	if (!readUByte(&img.tiles[0].tileComps[comp].prec) ||	    !readUByte(&img.tiles[0].tileComps[comp].hSep) ||	    !readUByte(&img.tiles[0].tileComps[comp].vSep)) {	  error(getPos(), "Error in JPX SIZ marker segment");	  return gFalse;	}	img.tiles[0].tileComps[comp].sgned =	    (img.tiles[0].tileComps[comp].prec & 0x80) ? gTrue : gFalse;	img.tiles[0].tileComps[comp].prec =	    (img.tiles[0].tileComps[comp].prec & 0x7f) + 1;	for (i = 1; i < img.nXTiles * img.nYTiles; ++i) {	  img.tiles[i].tileComps[comp] = img.tiles[0].tileComps[comp];	}      }      haveSIZ = gTrue;      break;    case 0x52:			// COD - coding style default      if (!readUByte(&img.tiles[0].tileComps[0].style) ||	  !readUByte(&img.tiles[0].progOrder) ||	  !readUWord(&img.tiles[0].nLayers) ||	  !readUByte(&img.tiles[0].multiComp) ||	  !readUByte(&img.tiles[0].tileComps[0].nDecompLevels) ||	  !readUByte(&img.tiles[0].tileComps[0].codeBlockW) ||	  !readUByte(&img.tiles[0].tileComps[0].codeBlockH) ||	  !readUByte(&img.tiles[0].tileComps[0].codeBlockStyle) ||	  !readUByte(&img.tiles[0].tileComps[0].transform)) {	error(getPos(), "Error in JPX COD marker segment");	return gFalse;      }      img.tiles[0].tileComps[0].codeBlockW += 2;      img.tiles[0].tileComps[0].codeBlockH += 2;      for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {	if (i != 0) {	  img.tiles[i].progOrder = img.tiles[0].progOrder;	  img.tiles[i].nLayers = img.tiles[0].nLayers;	  img.tiles[i].multiComp = img.tiles[0].multiComp;	}	for (comp = 0; comp < img.nComps; ++comp) {	  if (!(i == 0 && comp == 0)) {	    img.tiles[i].tileComps[comp].style =	        img.tiles[0].tileComps[0].style;	    img.tiles[i].tileComps[comp].nDecompLevels =	        img.tiles[0].tileComps[0].nDecompLevels;	    img.tiles[i].tileComps[comp].codeBlockW =	        img.tiles[0].tileComps[0].codeBlockW;	    img.tiles[i].tileComps[comp].codeBlockH =	        img.tiles[0].tileComps[0].codeBlockH;	    img.tiles[i].tileComps[comp].codeBlockStyle =	        img.tiles[0].tileComps[0].codeBlockStyle;	    img.tiles[i].tileComps[comp].transform =	        img.tiles[0].tileComps[0].transform;	  }	  img.tiles[i].tileComps[comp].resLevels =	      (JPXResLevel *)gmallocn(		     (img.tiles[i].tileComps[comp].nDecompLevels + 1),		     sizeof(JPXResLevel));	  for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) {	    img.tiles[i].tileComps[comp].resLevels[r].precincts = NULL;	  }	}      }      for (r = 0; r <= img.tiles[0].tileComps[0].nDecompLevels; ++r) {	if (img.tiles[0].tileComps[0].style & 0x01) {	  if (!readUByte(&precinctSize)) {	    error(getPos(), "Error in JPX COD marker segment");	    return gFalse;	  }	  img.tiles[0].tileComps[0].resLevels[r].precinctWidth =	      precinctSize & 0x0f;	  img.tiles[0].tileComps[0].resLevels[r].precinctHeight =	      (precinctSize >> 4) & 0x0f;	} else {	  img.tiles[0].tileComps[0].resLevels[r].precinctWidth = 15;	  img.tiles[0].tileComps[0].resLevels[r].precinctHeight = 15;	}      }      for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {	for (comp = 0; comp < img.nComps; ++comp) {	  if (!(i == 0 && comp == 0)) {	    for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) {	      img.tiles[i].tileComps[comp].resLevels[r].precinctWidth =		  img.tiles[0].tileComps[0].resLevels[r].precinctWidth;	      img.tiles[i].tileComps[comp].resLevels[r].precinctHeight =		  img.tiles[0].tileComps[0].resLevels[r].precinctHeight;	    }	  }	}      }      haveCOD = gTrue;      break;    case 0x53:			// COC - coding style component      if (!haveCOD) {	error(getPos(), "JPX COC marker segment before COD segment");	return gFalse;      }      if ((img.nComps > 256 && !readUWord(&comp)) ||	  (img.nComps <= 256 && !readUByte(&comp)) ||	  comp >= img.nComps ||	  !readUByte(&style) ||	  !readUByte(&img.tiles[0].tileComps[comp].nDecompLevels) ||	  !readUByte(&img.tiles[0].tileComps[comp].codeBlockW) ||	  !readUByte(&img.tiles[0].tileComps[comp].codeBlockH) ||	  !readUByte(&img.tiles[0].tileComps[comp].codeBlockStyle) ||	  !readUByte(&img.tiles[0].tileComps[comp].transform)) {	error(getPos(), "Error in JPX COC marker segment");	return gFalse;      }      img.tiles[0].tileComps[comp].style =	  (img.tiles[0].tileComps[comp].style & ~1) | (style & 1);      img.tiles[0].tileComps[comp].codeBlockW += 2;      img.tiles[0].tileComps[comp].codeBlockH += 2;      for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {	if (i != 0) {	  img.tiles[i].tileComps[comp].style =	      img.tiles[0].tileComps[comp].style;	  img.tiles[i].tileComps[comp].nDecompLevels =	      img.tiles[0].tileComps[comp].nDecompLevels;	  img.tiles[i].tileComps[comp].codeBlockW =	      img.tiles[0].tileComps[comp].codeBlockW;	  img.tiles[i].tileComps[comp].codeBlockH =	      img.tiles[0].tileComps[comp].codeBlockH;	  img.tiles[i].tileComps[comp].codeBlockStyle =	      img.tiles[0].tileComps[comp].codeBlockStyle;	  img.tiles[i].tileComps[comp].transform =	      img.tiles[0].tileComps[comp].transform;	}	img.tiles[i].tileComps[comp].resLevels =	    (JPXResLevel *)greallocn(		     img.tiles[i].tileComps[comp].resLevels,		     (img.tiles[i].tileComps[comp].nDecompLevels + 1),		     sizeof(JPXResLevel));	for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) {	  img.tiles[i].tileComps[comp].resLevels[r].precincts = NULL;	}      }      for (r = 0; r <= img.tiles[0].tileComps[comp].nDecompLevels; ++r) {	if (img.tiles[0].tileComps[comp].style & 0x01) {	  if (!readUByte(&precinctSize)) {	    error(getPos(), "Error in JPX COD marker segment");	    return gFalse;	  }	  img.tiles[0].tileComps[comp].resLevels[r].precinctWidth =	      precinctSize & 0x0f;	  img.tiles[0].tileComps[comp].resLevels[r].precinctHeight =	      (precinctSize >> 4) & 0x0f;	} else {	  img.tiles[0].tileComps[comp].resLevels[r].precinctWidth = 15;	  img.tiles[0].tileComps[comp].resLevels[r].precinctHeight = 15;	}      }      for (i = 1; i < img.nXTiles * img.nYTiles; ++i) {	for (r = 0; r <= img.tiles[i].tileComps[comp].nDecompLevels; ++r) {	  img.tiles[i].tileComps[comp].resLevels[r].precinctWidth =	      img.tiles[0].tileComps[comp].resLevels[r].precinctWidth;	  img.tiles[i].tileComps[comp].resLevels[r].precinctHeight =	      img.tiles[0].tileComps[comp].resLevels[r].precinctHeight;	}      }      break;    case 0x5c:			// QCD - quantization default      if (!readUByte(&img.tiles[0].tileComps[0].quantStyle)) {	error(getPos(), "Error in JPX QCD marker segment");	return gFalse;      }      if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x00) {	img.tiles[0].tileComps[0].nQuantSteps = segLen - 3;	img.tiles[0].tileComps[0].quantSteps =	    (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps,			       img.tiles[0].tileComps[0].nQuantSteps,			       sizeof(Guint));	for (i = 0; i < img.tiles[0].tileComps[0].nQuantSteps; ++i) {	  if (!readUByte(&img.tiles[0].tileComps[0].quantSteps[i])) {	    error(getPos(), "Error in JPX QCD marker segment");	    return gFalse;	  }	}      } else if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x01) {	img.tiles[0].tileComps[0].nQuantSteps = 1;	img.tiles[0].tileComps[0].quantSteps =	    (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps,			       img.tiles[0].tileComps[0].nQuantSteps,			       sizeof(Guint));	if (!readUWord(&img.tiles[0].tileComps[0].quantSteps[0])) {	  error(getPos(), "Error in JPX QCD marker segment");	  return gFalse;	}      } else if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x02) {	img.tiles[0].tileComps[0].nQuantSteps = (segLen - 3) / 2;	img.tiles[0].tileComps[0].quantSteps =	    (Guint *)greallocn(img.tiles[0].tileComps[0].quantSteps,			       img.tiles[0].tileComps[0].nQuantSteps,			       sizeof(Guint));	for (i = 0; i < img.tiles[0].tileComps[0].nQuantSteps; ++i) {	  if (!readUWord(&img.tiles[0].tileComps[0].quantSteps[i])) {	    error(getPos(), "Error in JPX QCD marker segment");	    return gFalse;	  }	}      } else {	error(getPos(), "Error in JPX QCD marker segment");	return gFalse;      }      for (i = 0; i < img.nXTiles * img.nYTiles; ++i) {	for (comp = 0; comp < img.nComps; ++comp) {	  if (!(i == 0 && comp == 0)) {	    img.tiles[i].tileComps[comp].quantStyle =	        img.tiles[0].tileComps[0].quantStyle;	    img.tiles[i].tileComps[comp].nQuantSteps =	        img.tiles[0].tileComps[0].nQuantSteps;	    img.tiles[i].tileComps[comp].quantSteps = 	        (Guint *)greallocn(img.tiles[i].tileComps[comp].quantSteps,				   img.tiles[0].tileComps[0].nQuantSteps,				   sizeof(Guint));	    for (j = 0; j < img.tiles[0].tileComps[0].nQuantSteps; ++j) {	      img.tiles[i].tileComps[comp].quantSteps[j] =		  img.tiles[0].tileComps[0].quantSteps[j];	    }	  }	}      }      haveQCD = gTrue;      break;    case 0x5d:			// QCC - quantization component      if (!haveQCD) {	error(getPos(), "JPX QCC marker segment before QCD segment");	return gFalse;      }      if ((img.nComps > 256 && !readUWord(&comp)) ||	  (img.nComps <= 256 && !readUByte(&comp)) ||	  comp >= img.nComps ||	  !readUByte(&img.tiles[0].tileComps[comp].quantStyle)) {	error(getPos(), "Error in JPX QCC marker segment");	return gFalse;      }      if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x00) {	img.tiles[0].tileComps[comp].nQuantSteps =	    segLen - (img.nComps > 256 ? 5 : 4);	img.tiles[0].tileComps[comp].quantSteps =	    (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps,			       img.tiles[0].tileComps[comp].nQuantSteps,			       sizeof(Guint));	for (i = 0; i < img.tiles[0].tileComps[comp].nQuantSteps; ++i) {	  if (!readUByte(&img.tiles[0].tileComps[comp].quantSteps[i])) {	    error(getPos(), "Error in JPX QCC marker segment");	    return gFalse;	  }	}      } else if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x01) {	img.tiles[0].tileComps[comp].nQuantSteps = 1;	img.tiles[0].tileComps[comp].quantSteps =	    (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps,			       img.tiles[0].tileComps[comp].nQuantSteps,			       sizeof(Guint));	if (!readUWord(&img.tiles[0].tileComps[comp].quantSteps[0])) {	  error(getPos(), "Error in JPX QCC marker segment");	  return gFalse;	}      } else if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x02) {	img.tiles[0].tileComps[comp].nQuantSteps =	    (segLen - (img.nComps > 256 ? 5 : 4)) / 2;	img.tiles[0].tileComps[comp].quantSteps =	    (Guint *)greallocn(img.tiles[0].tileComps[comp].quantSteps,			       img.tiles[0].tileComps[comp].nQuantSteps,			       sizeof(Guint));	for (i = 0; i < img.tiles[0].tileComps[comp].nQuantSteps; ++i) {	  if (!readUWord(&img.tiles[0].tileComps[comp].quantSteps[i])) {	    error(getPos(), "Error in JPX QCD marker segment");	    return gFalse;	  }	}      } else {	error(getPos(), "Error in JPX QCC marker segment");	return gFalse;      }      for (i = 1; i < img.nXTiles * img.nYTiles; ++i) {	img.tiles[i].tileComps[comp].quantStyle =	    img.tiles[0].tileComps[comp].quantStyle;	img.tiles[i].tileComps[comp].nQuantSteps =	    img.tiles[0].tileComps[comp].nQuantSteps;	img.tiles[i].tileComps[comp].quantSteps = 	    (Guint *)greallocn(img.tiles[i].tileComps[comp].quantSteps,			       img.tiles[0].tileComps[comp].nQuantSteps,			       sizeof(Guint));	for (j = 0; j < img.tiles[0].tileComps[comp].nQuantSteps; ++j) {	  img.tiles[i].tileComps[comp].quantSteps[j] =	      img.tiles[0].tileComps[comp].quantSteps[j];	}      }      break;    case 0x5e:			// RGN - region of interest#if 1 //~ ROI is unimplemented      fprintf(stderr, "RGN\n");      for (i = 0; i < segLen - 2; ++i) {	if (str->getChar() == EOF) {	  error(getPos(), "Error in JPX PPM marker segment");	  return gFalse;	}      }#else      if ((img.nComps > 256 && !readUWord(&comp)) ||	  (img.nComps <= 256 && !readUByte(&comp)) ||	  comp >= img.nComps ||	  !readUByte(&compInfo[comp].defROI.style) ||	  !readUByte(&compInfo[comp].defROI.shift)) {	error(getPos(), "Error in JPX RGN marker segment");	return gFalse;      }#endif      break;    case 0x5f:			// POC - progression order change#if 1 //~ progression order changes are unimplemented      fprintf(stderr, "POC\n");      for (i = 0; i < segLen - 2; ++i) {	if (str->getChar() == EOF) {	  error(getPos(), "Error in JPX PPM marker segment");	  return gFalse;	}      }#else      nProgs = (segLen - 2) / (img.nComps > 256 ? 9 : 7);      progs = (JPXProgOrder *)gmallocn(nProgs, sizeof(JPXProgOrder));      for (i = 0; i < nProgs; ++i) {	if (!readUByte(&progs[i].startRes) ||	    !(img.nComps > 256 && readUWord(&progs[i].startComp)) ||	    !(img.nComps <= 256 && readUByte(&progs[i].startComp)) ||	    !readUWord(&progs[i].endLayer) ||	    !readUByte(&progs[i].endRes) ||	    !(img.nComps > 256 && readUWord(&progs[i].endComp)) ||	    !(img.nComps <= 256 && readUByte(&progs[i].endComp)) ||	    !readUByte(&progs[i].progOrder)) {	  error(getPos(), "Error in JPX POC marker segment");	  return gFalse;	}      }#endif      break;    case 0x60:			// PPM - packed packet headers, main header#if 1 //~ packed packet headers are unimplemented      fprintf(stderr, "PPM\n");      for (i = 0; i < segLen - 2; ++i) {	if (str->getChar() == EOF) {	  error(getPos(), "Error in JPX PPM marker segment");	  return gFalse;	}      }#endif      break;    case 0x55:			// TLM - tile-part lengths      // skipped      for (i = 0; i < segLen - 2; ++i) {	if (str->getChar() == EOF) {	  error(getPos(), "Error in JPX TLM marker segment");	  return gFalse;	}      }      break;    case 0x57:			// PLM - packet length, main header      // skipped      for (i = 0; i < segLen - 2; ++i) {	if (str->getChar() == EOF) {	  error(getPos(), "Error in JPX PLM marker segment");	  return gFalse;	}      }      break;    case 0x63:			// CRG - component registration      // skipped      for (i = 0; i < segLen - 2; ++i) {	if (str->getChar() == EOF) {	  error(getPos(), "Error in JPX CRG marker segment");	  return gFalse;	}      }      break;    case 0x64:			// COM - comment      // skipped      for (i = 0; i < segLen - 2; ++i) {	if (str->getChar() == EOF) {	  error(getPos(), "Error in JPX COM marker segment");	  return gFalse;	}      }      break;    case 0x90:			// SOT - start of tile      haveSOT = gTrue;      break;    default:      error(getPos(), "Unknown marker segment %02x in JPX stream", segType);      for (i = 0; i < segLen - 2; ++i) {	if (str->getChar() == EOF) {	  break;	}      }      break;    }  } while (!haveSOT);  if (!haveSIZ) {    error(getPos(), "Missing SIZ marker segment in JPX stream");    return gFalse;  }  if (!haveCOD) {    error(getPos(), "Missing COD marker segment in JPX stream");    return gFalse;  }  if (!haveQCD) {    error(getPos(), "Missing QCD marker segment in JPX stream");    return gFalse;  }  //----- read the tile-parts  while (1) {    if (!readTilePart()) {      return gFalse;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -