OPJ_BOOL set_ppixdata( box_param_t *cidx_box, index_param_t *jp2idx) { box_param_t *ppix_box, *faix_box, *manf_box; manfbox_param_t *manf; /**< manf*/ boxheader_param_t *bh; /**< box headers*/ faixbox_param_t *faix; /**< faix*/ OPJ_OFF_T inbox_offset; int comp_idx; if( !(ppix_box = gene_boxbyType( cidx_box->fd, get_DBoxoff( cidx_box), get_DBoxlen( cidx_box), "ppix"))){ fprintf( FCGI_stderr, "Error: ppix box not present in cidx box\n"); return OPJ_FALSE; } inbox_offset = get_DBoxoff( ppix_box); if( !(manf_box = gene_boxbyType( ppix_box->fd, inbox_offset, get_DBoxlen( ppix_box), "manf"))){ fprintf( FCGI_stderr, "Error: manf box not present in ppix box\n"); opj_free( ppix_box); return OPJ_FALSE; } opj_free( ppix_box); manf = gene_manfbox( manf_box); bh = search_boxheader( "faix", manf); inbox_offset = manf_box->offset + (OPJ_OFF_T)manf_box->length; opj_free( manf_box); jp2idx->precpacket = (faixbox_param_t **)opj_malloc( jp2idx->SIZ.Csiz*sizeof(faixbox_param_t *)); for( comp_idx=0; bh!=NULL; bh=bh->next, comp_idx++){ if( jp2idx->SIZ.Csiz <= comp_idx ){ fprintf( FCGI_stderr, "Error: num of faix boxes is not identical to num of components in ppix box\n"); return OPJ_FALSE; } if( !(faix_box = gene_boxbyOffset( cidx_box->fd, inbox_offset))){ fprintf( FCGI_stderr, "Error: faix box not present in ppix box\n"); return OPJ_FALSE; } faix = gene_faixbox( faix_box); jp2idx->precpacket[comp_idx] = faix; inbox_offset = faix_box->offset + (OPJ_OFF_T)faix_box->length; opj_free( faix_box); } delete_manfbox( &manf); return OPJ_TRUE; }
boxlist_param_t * get_boxstructure( int fd, Byte8_t offset, Byte8_t length) { boxlist_param_t *boxlist; box_param_t *box; int pos; boxlist = NULL; pos = offset; do{ if(!(box = gene_boxbyOffset( fd, pos))) break; pos += box->length; if( !boxlist) boxlist = gene_boxlist(); insert_box_into_list( box, boxlist); }while( pos < offset+length); return boxlist; }
boxlist_param_t * get_boxstructure( int fd, OPJ_OFF_T offset, OPJ_SIZE_T length) { boxlist_param_t *boxlist; box_param_t *box; OPJ_OFF_T pos; boxlist = NULL; pos = offset; assert( (OPJ_OFF_T)length>=0); do{ if(!(box = gene_boxbyOffset( fd, pos))) break; assert( (OPJ_OFF_T)box->length >= 0); pos += (OPJ_OFF_T)box->length; if( !boxlist) boxlist = gene_boxlist(); insert_box_into_list( box, boxlist); }while( pos < offset+(OPJ_OFF_T)length); return boxlist; }
box_param_t * gene_childboxbyOffset( box_param_t *superbox, OPJ_OFF_T offset) { return gene_boxbyOffset( superbox->fd, get_DBoxoff( superbox)+offset); }
box_param_t * gene_childboxbyOffset( box_param_t *superbox, Byte8_t offset) { return gene_boxbyOffset( superbox->fd, get_DBoxoff( superbox)+offset); }