[1.5][JPIP] enabled the opj_server to reply the first query consisting with len request from kakadu client
This commit is contained in:
parent
a794ee233d
commit
8336ace29a
|
@ -5,6 +5,9 @@ What's New for OpenJPIP
|
||||||
! : changed
|
! : changed
|
||||||
+ : added
|
+ : added
|
||||||
|
|
||||||
|
Feburary 28, 2012
|
||||||
|
+ [kaori] enabled the opj_server to reply the first query consisting with len request from kakadu client
|
||||||
|
|
||||||
February 9, 2012
|
February 9, 2012
|
||||||
* [kaori] fixed Doxygen configuration file to document the utilities
|
* [kaori] fixed Doxygen configuration file to document the utilities
|
||||||
+ [kaori] added execution argument to set port number for opj_dec_server, opj_viewer*
|
+ [kaori] added execution argument to set port number for opj_dec_server, opj_viewer*
|
||||||
|
|
|
@ -2,7 +2,7 @@ ifdef jpipserver
|
||||||
CFLAGS = -O3 -Wall -m32 -DSERVER
|
CFLAGS = -O3 -Wall -m32 -DSERVER
|
||||||
LIBNAME = libopenjpip_server.a
|
LIBNAME = libopenjpip_server.a
|
||||||
else
|
else
|
||||||
J2KINCDIR = ../../../libopenjpeg
|
J2KINCDIR = ../../../bin
|
||||||
CFLAGS = -O3 -Wall -I$(J2KINCDIR)
|
CFLAGS = -O3 -Wall -I$(J2KINCDIR)
|
||||||
LIBNAME = libopenjpip_local.a
|
LIBNAME = libopenjpip_local.a
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -181,8 +181,9 @@ void enqueue_imagedata( query_param_t query_param, msgqueue_param_t *msgqueue);
|
||||||
* @param[in] query_param structured query
|
* @param[in] query_param structured query
|
||||||
* @param[in] metadatalist pointer to metadata bin list
|
* @param[in] metadatalist pointer to metadata bin list
|
||||||
* @param[in,out] msgqueue message queue pointer
|
* @param[in,out] msgqueue message queue pointer
|
||||||
|
* @return if succeeded (true) or failed (false)
|
||||||
*/
|
*/
|
||||||
void enqueue_metabins( query_param_t query_param, metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue);
|
bool enqueue_metabins( query_param_t query_param, metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue);
|
||||||
|
|
||||||
|
|
||||||
bool gene_JPIPstream( query_param_t query_param,
|
bool gene_JPIPstream( query_param_t query_param,
|
||||||
|
@ -223,14 +224,20 @@ bool gene_JPIPstream( query_param_t query_param,
|
||||||
|
|
||||||
//meta
|
//meta
|
||||||
if( query_param.box_type[0][0] != 0 && query_param.len != 0)
|
if( query_param.box_type[0][0] != 0 && query_param.len != 0)
|
||||||
enqueue_metabins( query_param, codeidx->metadatalist, *msgqueue);
|
if( !enqueue_metabins( query_param, codeidx->metadatalist, *msgqueue))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if( query_param.metadata_only)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// main header
|
||||||
|
if( !cachemodel->mhead_model && query_param.len != 0)
|
||||||
|
enqueue_mainheader( *msgqueue);
|
||||||
|
|
||||||
// image codestream
|
// image codestream
|
||||||
if( query_param.fx > 0 && query_param.fy > 0){
|
if( (query_param.fx > 0 && query_param.fy > 0))
|
||||||
if( !cachemodel->mhead_model && query_param.len != 0)
|
|
||||||
enqueue_mainheader( *msgqueue);
|
|
||||||
enqueue_imagedata( query_param, *msgqueue);
|
enqueue_imagedata( query_param, *msgqueue);
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,18 +426,26 @@ void enqueue_allprecincts( int tile_id, int level, int lastcomp, bool *comps, in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void enqueue_metabins( query_param_t query_param, metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue)
|
bool enqueue_metabins( query_param_t query_param, metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for( i=0; query_param.box_type[i][0]!=0 && i<MAX_NUMOFBOX; i++){
|
for( i=0; query_param.box_type[i][0]!=0 && i<MAX_NUMOFBOX; i++){
|
||||||
if( query_param.box_type[i][0] == '*'){
|
if( query_param.box_type[i][0] == '*'){
|
||||||
// not implemented
|
fprintf( FCGI_stdout, "Status: 501\r\n");
|
||||||
|
fprintf( FCGI_stdout, "Reason: metareq with all box-property * not implemented\r\n");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
int idx = search_metadataidx( query_param.box_type[i], metadatalist);
|
int idx = search_metadataidx( query_param.box_type[i], metadatalist);
|
||||||
|
|
||||||
if( idx != -1)
|
if( idx != -1)
|
||||||
enqueue_metadata( idx, msgqueue);
|
enqueue_metadata( idx, msgqueue);
|
||||||
|
else{
|
||||||
|
fprintf( FCGI_stdout, "Status: 400\r\n");
|
||||||
|
fprintf( FCGI_stdout, "Reason: box-type %.4s not found\r\n", query_param.box_type[i]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,10 +77,6 @@ metadatalist_param_t * const_metadatalist( int fd)
|
||||||
phldlist = gene_placeholderlist();
|
phldlist = gene_placeholderlist();
|
||||||
metadatalist = gene_metadatalist();
|
metadatalist = gene_metadatalist();
|
||||||
|
|
||||||
delete_box_in_list_by_type( "iptr", toplev_boxlist);
|
|
||||||
delete_box_in_list_by_type( "cidx", toplev_boxlist);
|
|
||||||
delete_box_in_list_by_type( "fidx", toplev_boxlist);
|
|
||||||
|
|
||||||
box = toplev_boxlist->first;
|
box = toplev_boxlist->first;
|
||||||
idx = 0;
|
idx = 0;
|
||||||
while( box){
|
while( box){
|
||||||
|
|
|
@ -115,7 +115,7 @@ bool process_JPIPrequest( server_record_t *rec, QR_t *qr)
|
||||||
if( !close_channel( *(qr->query), rec->sessionlist, &cursession, &curchannel))
|
if( !close_channel( *(qr->query), rec->sessionlist, &cursession, &curchannel))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if( (qr->query->fx > 0 && qr->query->fy > 0) || qr->query->box_type[0][0] != 0)
|
if( (qr->query->fx > 0 && qr->query->fy > 0) || qr->query->box_type[0][0] != 0 || qr->query->len > 0)
|
||||||
if( !gene_JPIPstream( *(qr->query), target, cursession, curchannel, &qr->msgqueue))
|
if( !gene_JPIPstream( *(qr->query), target, cursession, curchannel, &qr->msgqueue))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -141,25 +141,29 @@ void send_responsedata( server_record_t *rec, QR_t *qr)
|
||||||
recons_stream_from_msgqueue( qr->msgqueue, fd);
|
recons_stream_from_msgqueue( qr->msgqueue, fd);
|
||||||
|
|
||||||
add_EORmsg( fd, qr); /* needed at least for tcp and udp */
|
add_EORmsg( fd, qr); /* needed at least for tcp and udp */
|
||||||
|
|
||||||
len_of_jpipstream = get_filesize( fd);
|
len_of_jpipstream = get_filesize( fd);
|
||||||
jpipstream = fetch_bytes( fd, 0, len_of_jpipstream);
|
jpipstream = fetch_bytes( fd, 0, len_of_jpipstream);
|
||||||
|
|
||||||
close( fd);
|
close( fd);
|
||||||
remove( tmpfname);
|
remove( tmpfname);
|
||||||
|
|
||||||
fprintf( FCGI_stdout, "\r\n");
|
fprintf( FCGI_stdout, "\r\n");
|
||||||
|
|
||||||
if( qr->channel)
|
if( len_of_jpipstream){
|
||||||
if( qr->channel->aux == tcp || qr->channel->aux == udp){
|
|
||||||
send_responsedata_on_aux( qr->channel->aux==tcp, rec->auxtrans, qr->channel->cid, jpipstream, len_of_jpipstream, 1000); /* 1KB per frame*/
|
if( qr->channel)
|
||||||
return;
|
if( qr->channel->aux == tcp || qr->channel->aux == udp){
|
||||||
}
|
send_responsedata_on_aux( qr->channel->aux==tcp, rec->auxtrans, qr->channel->cid, jpipstream, len_of_jpipstream, 1000); /* 1KB per frame*/
|
||||||
|
return;
|
||||||
if( fwrite( jpipstream, len_of_jpipstream, 1, FCGI_stdout) != 1)
|
}
|
||||||
fprintf( FCGI_stderr, "Error: failed to write jpipstream\n");
|
|
||||||
|
if( fwrite( jpipstream, len_of_jpipstream, 1, FCGI_stdout) != 1)
|
||||||
|
fprintf( FCGI_stderr, "Error: failed to write jpipstream\n");
|
||||||
|
}
|
||||||
|
|
||||||
free( jpipstream);
|
free( jpipstream);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -141,8 +141,11 @@ query_param_t * parse_query( char *query_string)
|
||||||
query_param->return_type = JPTstream;
|
query_param->return_type = JPTstream;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if( strcasecmp( fieldname, "len") == 0)
|
else if( strcasecmp( fieldname, "len") == 0){
|
||||||
sscanf( fieldval, "%d", &query_param->len);
|
sscanf( fieldval, "%d", &query_param->len);
|
||||||
|
if( query_param->len = 2000) /* for kakadu client*/
|
||||||
|
strncpy( query_param->box_type[0], "ftyp", 4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return query_param;
|
return query_param;
|
||||||
|
@ -330,7 +333,7 @@ void parse_req_box_prop( char *req_box_prop, int idx, query_param_t *query_param
|
||||||
query_param->box_type[idx][0]='*';
|
query_param->box_type[idx][0]='*';
|
||||||
else
|
else
|
||||||
strncpy( query_param->box_type[idx], req_box_prop, 4);
|
strncpy( query_param->box_type[idx], req_box_prop, 4);
|
||||||
|
|
||||||
if(( ptr = strchr( req_box_prop, ':'))){
|
if(( ptr = strchr( req_box_prop, ':'))){
|
||||||
if( *(ptr+1)=='r')
|
if( *(ptr+1)=='r')
|
||||||
query_param->limit[idx] = -1;
|
query_param->limit[idx] = -1;
|
||||||
|
|
|
@ -103,8 +103,10 @@ int main(void)
|
||||||
|
|
||||||
if( parse_status)
|
if( parse_status)
|
||||||
send_responsedata( server_record, qr);
|
send_responsedata( server_record, qr);
|
||||||
else
|
else{
|
||||||
fprintf( FCGI_stderr, "Error: JPIP request failed\n");
|
fprintf( FCGI_stderr, "Error: JPIP request failed\n");
|
||||||
|
fprintf( FCGI_stdout, "\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
end_QRprocess( server_record, &qr);
|
end_QRprocess( server_record, &qr);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue