metadatalist_param_t * const_metadatalist( int fd) { metadatalist_param_t *metadatalist; metadata_param_t *metabin; boxlist_param_t *toplev_boxlist; box_param_t *box, *next; placeholderlist_param_t *phldlist; placeholder_param_t *phld; Byte8_t idx; Byte8_t filesize; if(!(filesize = (Byte8_t)get_filesize( fd))) return NULL; if( !(toplev_boxlist = get_boxstructure( fd, 0, filesize))){ fprintf( FCGI_stderr, "Error: Not correctl JP2 format\n"); return NULL; } phldlist = gene_placeholderlist(); metadatalist = gene_metadatalist(); box = toplev_boxlist->first; idx = 0; while( box){ next = box->next; if( strncmp( box->type, "jP ",4)!=0 && strncmp( box->type, "ftyp",4)!=0 && strncmp( box->type, "jp2h",4)!=0){ boxlist_param_t *boxlist = NULL; boxcontents_param_t *boxcontents = NULL; phld = gene_placeholder( box, ++idx); insert_placeholder_into_list( phld, phldlist); boxlist = get_boxstructure( box->fd, get_DBoxoff( box), get_DBoxlen(box)); if( !boxlist) boxcontents = gene_boxcontents( get_DBoxoff( box), get_DBoxlen(box)); delete_box_in_list( &box, toplev_boxlist); metabin = gene_metadata( idx, boxlist, NULL, boxcontents); insert_metadata_into_list( metabin, metadatalist); } box = next; } metabin = gene_metadata( 0, toplev_boxlist, phldlist, NULL); insert_metadata_into_list( metabin, metadatalist); return metadatalist; }
index_param_t * parse_jp2file( int fd) { index_param_t *jp2idx; box_param_t *cidx; metadatalist_param_t *metadatalist; boxlist_param_t *toplev_boxlist; Byte8_t filesize; if( !(filesize = (Byte8_t)get_filesize( fd))) return NULL; if( !(toplev_boxlist = get_boxstructure( fd, 0, filesize))){ fprintf( FCGI_stderr, "Error: Not correctl JP2 format\n"); return NULL; } if( !check_JP2boxidx( toplev_boxlist)){ fprintf( FCGI_stderr, "Index format not supported\n"); delete_boxlist( &toplev_boxlist); return NULL; } if( !(cidx = search_box( "cidx", toplev_boxlist))){ fprintf( FCGI_stderr, "Box cidx not found\n"); delete_boxlist( &toplev_boxlist); return NULL; } jp2idx = (index_param_t *)opj_malloc( sizeof(index_param_t)); if( !set_cidxdata( cidx, jp2idx)){ fprintf( FCGI_stderr, "Error: Not correctl format in cidx box\n"); opj_free(jp2idx); delete_boxlist( &toplev_boxlist); return NULL; } delete_boxlist( &toplev_boxlist); metadatalist = const_metadatalist( fd); jp2idx->metadatalist = metadatalist; #ifndef SERVER fprintf( logstream, "local log: code index created\n"); #endif return jp2idx; }