Alien-FreeImage

 view release on metacpan or  search on metacpan

src/Source/LibOpenJPEG/phix_manager.c  view on Meta::CPAN

  OPJ_UINT32 len;

  packet.end_ph_pos = packet.start_pos = -1;
  (void)EPHused; /* unused ? */


  if( j2klen > pow( 2, 32)){
    size_of_coding =  8;
    version = 1;
  }
  else{
    size_of_coding = 4;
    version = 0;
  }

  lenp = opj_stream_tell(cio);
  opj_stream_skip(cio, 4, p_manager);         /* L [at the end]      */
  opj_write_bytes(l_data_header,JPIP_FAIX,4); /* FAIX */
  opj_stream_write_data(cio,l_data_header,4,p_manager);
  opj_write_bytes(l_data_header,version,1);   /* Version 0 = 4 bytes */
  opj_stream_write_data(cio,l_data_header,1,p_manager);

  nmax = 0;
  for( i=0; i<=(OPJ_UINT32)cstr_info.numdecompos[compno]; i++)
    nmax += (OPJ_UINT32)(cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] * cstr_info.numlayers);
  
  opj_write_bytes(l_data_header,nmax,size_of_coding);         /* NMAX           */
  opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
  opj_write_bytes(l_data_header,(OPJ_UINT32)(cstr_info.tw*cstr_info.th),size_of_coding);  /* M              */
  opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
  
  for( tileno=0; tileno<(OPJ_UINT32)(cstr_info.tw*cstr_info.th); tileno++){
    tile_Idx = &cstr_info.tile[ tileno];
    
    num_packet = 0;
    numOfres = cstr_info.numdecompos[compno] + 1;

    for( resno=0; resno<numOfres ; resno++){
      numOfprec = tile_Idx->pw[resno]*tile_Idx->ph[resno];
      for( precno=0; precno<numOfprec; precno++){
	numOflayers = cstr_info.numlayers;
	for( layno=0; layno<numOflayers; layno++){
	  
	  switch ( cstr_info.prog){
	  case OPJ_LRCP:
	    packet = tile_Idx->packet[ ((layno*numOfres+resno)*cstr_info.numcomps+compno)*numOfprec+precno];
	    break;
	  case OPJ_RLCP:
	    packet = tile_Idx->packet[ ((resno*numOflayers+layno)*cstr_info.numcomps+compno)*numOfprec+precno];
	    break;
	  case OPJ_RPCL:
	    packet = tile_Idx->packet[ ((resno*numOfprec+precno)*cstr_info.numcomps+compno)*numOflayers+layno];
	    break;
	  case OPJ_PCRL:
	    packet = tile_Idx->packet[ ((precno*cstr_info.numcomps+compno)*numOfres+resno)*numOflayers + layno];
	    break;
	  case OPJ_CPRL:
	    packet = tile_Idx->packet[ ((compno*numOfprec+precno)*numOfres+resno)*numOflayers + layno];
	    break;
	  default:
	    fprintf( stderr, "failed to ppix indexing\n");
	  }

    opj_write_bytes(l_data_header,(OPJ_UINT32)(packet.start_pos-coff),size_of_coding);            /* start position */
    opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
    opj_write_bytes(l_data_header,(OPJ_UINT32)(packet.end_ph_pos-packet.start_pos+1),size_of_coding); /* length         */
    opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
	  
	  num_packet++;
	}
      }
    }

    /* PADDING */
    while( num_packet < nmax){
      opj_write_bytes(l_data_header,0,size_of_coding);/* start position            */
      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
      opj_write_bytes(l_data_header,0,size_of_coding);/* length                    */
      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
      num_packet++;
    }
  }

  len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
  opj_stream_seek(cio, lenp,p_manager);
  opj_write_bytes(l_data_header,len,4);/* L  */
  opj_stream_write_data(cio,l_data_header,4,p_manager);
  opj_stream_seek(cio, lenp+len,p_manager);

  return (int)len;
}



( run in 0.685 second using v1.01-cache-2.11-cpan-63c85eba8c4 )