support tid request
This commit is contained in:
parent
9c475467d5
commit
4da816e459
|
@ -7,6 +7,7 @@ What's New for OpenJPIP
|
|||
|
||||
August 24, 2011
|
||||
+ [kaori] added cachemodel_manager, which had been managed in target_manager previously
|
||||
+ [kaori] added tid request support
|
||||
|
||||
August 16, 2011
|
||||
* [antonin] fixed cmake support for openjpip
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
#ifndef BOX_MANAGER_H_
|
||||
# define BOX_MANAGER_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include "byte_manager.h"
|
||||
|
||||
//! box parameters
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -31,8 +31,6 @@
|
|||
#ifndef BYTE_MANAGER_H_
|
||||
# define BYTE_MANAGER_H_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
//! 1Byte parameter type
|
||||
typedef unsigned char Byte_t;
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
#ifndef CODESTREAM_MANAGER_H_
|
||||
# define CODESTREAM_MANAGER_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include "byte_manager.h"
|
||||
|
||||
//! codestream parameters
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <sys/types.h>
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <sys/types.h>
|
||||
|
@ -742,31 +743,45 @@ Byte_t * recons_codestream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte
|
|||
Byte_t *codestream = NULL;
|
||||
int last_tileID;
|
||||
int tileID;
|
||||
|
||||
bool found;
|
||||
Byte8_t binOffset;
|
||||
|
||||
*codelen = 0;
|
||||
|
||||
// main header first
|
||||
ptr = msgqueue->first;
|
||||
binOffset = 0;
|
||||
while(( ptr = search_message( MAINHEADER_MSG, -1, csn, ptr))!=NULL){
|
||||
codestream = add_msgstream( ptr, jpipstream, codestream, codelen);
|
||||
if( ptr->bin_offset == binOffset){
|
||||
codestream = add_msgstream( ptr, jpipstream, codestream, codelen);
|
||||
binOffset += ptr->length;
|
||||
}
|
||||
ptr = ptr->next;
|
||||
}
|
||||
|
||||
last_tileID = get_last_tileID( msgqueue, csn);
|
||||
|
||||
for( tileID=0; tileID <= last_tileID; tileID++){
|
||||
bool found = false;
|
||||
found = false;
|
||||
binOffset = 0;
|
||||
|
||||
ptr = msgqueue->first;
|
||||
while(( ptr = search_message( TILE_MSG, tileID, csn, ptr))!=NULL){
|
||||
found = true;
|
||||
codestream = add_msgstream( ptr, jpipstream, codestream, codelen);
|
||||
if( ptr->bin_offset == binOffset){
|
||||
found = true;
|
||||
codestream = add_msgstream( ptr, jpipstream, codestream, codelen);
|
||||
binOffset += ptr->length;
|
||||
}
|
||||
ptr = ptr->next;
|
||||
}
|
||||
ptr = msgqueue->first;
|
||||
while(( ptr = search_message( EXT_TILE_MSG, tileID, csn, ptr))!=NULL){
|
||||
if( ptr->aux >= minlev){
|
||||
found = true;
|
||||
codestream = add_msgstream( ptr, jpipstream, codestream, codelen);
|
||||
if( ptr->bin_offset == binOffset){
|
||||
found = true;
|
||||
codestream = add_msgstream( ptr, jpipstream, codestream, codelen);
|
||||
binOffset += ptr->length;
|
||||
}
|
||||
}
|
||||
ptr = ptr->next;
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "placeholder_manager.h"
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <time.h>
|
||||
#include "target_manager.h"
|
||||
|
||||
#ifdef SERVER
|
||||
|
@ -91,6 +92,7 @@ target_param_t * gene_target( targetlist_param_t *targetlist, char *targetname)
|
|||
}
|
||||
|
||||
target = (target_param_t *)malloc( sizeof(target_param_t));
|
||||
snprintf( target->tid, MAX_LENOFTID, "%x-%x", (unsigned int)time(NULL), (unsigned int)rand());
|
||||
strcpy( target->filename, targetname);
|
||||
target->fd = fd;
|
||||
target->csn = last_csn++;
|
||||
|
@ -99,6 +101,8 @@ target_param_t * gene_target( targetlist_param_t *targetlist, char *targetname)
|
|||
|
||||
target->next=NULL;
|
||||
|
||||
fprintf( FCGI_stdout, "JPIP-tid: %s\r\n", target->tid);
|
||||
|
||||
if( targetlist->first) // there are one or more entries
|
||||
targetlist->last->next = target;
|
||||
else // first entry
|
||||
|
@ -170,6 +174,7 @@ void delete_targetlist(targetlist_param_t **targetlist)
|
|||
void print_target( target_param_t *target)
|
||||
{
|
||||
fprintf( logstream, "target:\n");
|
||||
fprintf( logstream, "\t tid=%s\n", target->tid);
|
||||
fprintf( logstream, "\t csn=%d\n", target->csn);
|
||||
fprintf( logstream, "\t target=%s\n\n", target->filename);
|
||||
}
|
||||
|
@ -201,6 +206,26 @@ target_param_t * search_target( char targetname[], targetlist_param_t *targetlis
|
|||
return NULL;
|
||||
}
|
||||
|
||||
target_param_t * search_targetBytid( char tid[], targetlist_param_t *targetlist)
|
||||
{
|
||||
target_param_t *foundtarget;
|
||||
|
||||
foundtarget = targetlist->first;
|
||||
|
||||
while( foundtarget != NULL){
|
||||
|
||||
if( strcmp( tid, foundtarget->tid) == 0)
|
||||
return foundtarget;
|
||||
|
||||
foundtarget = foundtarget->next;
|
||||
}
|
||||
|
||||
fprintf( FCGI_stdout, "Status: 404\r\n");
|
||||
fprintf( FCGI_stdout, "Reason: tid %s not found\r\n", tid);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int open_jp2file( char filename[])
|
||||
{
|
||||
int fd;
|
||||
|
|
|
@ -33,11 +33,15 @@
|
|||
|
||||
#include "index_manager.h"
|
||||
|
||||
//! maximum length of target identifier
|
||||
#define MAX_LENOFTID 30
|
||||
|
||||
//! maximum length of target name
|
||||
#define MAX_LENOFTARGET 128
|
||||
|
||||
//! target parameters
|
||||
typedef struct target_param{
|
||||
char tid[MAX_LENOFTID]; //!< taregt identifier
|
||||
char filename[MAX_LENOFTARGET]; //!< file name
|
||||
int fd; //!< file descriptor
|
||||
int csn; //!< codestream number
|
||||
|
@ -138,5 +142,15 @@ void print_alltarget( targetlist_param_t *targetlist);
|
|||
*/
|
||||
target_param_t * search_target( char targetname[], targetlist_param_t *targetlist);
|
||||
|
||||
|
||||
/**
|
||||
* search a target by tid
|
||||
*
|
||||
* @param[in] tid target identifier
|
||||
* @param[in] targetlist target list pointer
|
||||
* @return found target pointer
|
||||
*/
|
||||
target_param_t * search_targetBytid( char tid[], targetlist_param_t *targetlist);
|
||||
|
||||
#endif /* !TARGET_MANAGER_H_ */
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "jp2k_decoder.h"
|
||||
|
|
|
@ -201,7 +201,7 @@ int main(int argc, char *argv[]){
|
|||
if( msgqueue)
|
||||
delete_msgqueue( &msgqueue);
|
||||
|
||||
// save_codestream( jpipstream, jpipstreamlen, "jpt");
|
||||
//save_codestream( jpipstream, jpipstreamlen, "jpt");
|
||||
free( jpipstream);
|
||||
|
||||
#ifdef _WIN32
|
||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
opj_viewer-20110711.jar
|
||||
opj_viewer-20110824.jar
|
|
@ -40,6 +40,7 @@ public class JPIPHttpClient
|
|||
protected int rx, ry;
|
||||
protected int rw, rh;
|
||||
protected String cid;
|
||||
protected String tid;
|
||||
|
||||
public JPIPHttpClient( String URI)
|
||||
{
|
||||
|
@ -48,6 +49,7 @@ public class JPIPHttpClient
|
|||
rx = ry = -1;
|
||||
rw = rh = -1;
|
||||
cid = null;
|
||||
tid = null;
|
||||
}
|
||||
|
||||
public int getFw(){ return fw;}
|
||||
|
@ -177,6 +179,12 @@ public class JPIPHttpClient
|
|||
cid = hvalueline.substring( hvalueline.indexOf('=')+1, hvalueline.indexOf(','));
|
||||
System.err.println("cid: " + cid);
|
||||
}
|
||||
|
||||
if(( hvaluelist = headers.get("JPIP-tid")) != null){
|
||||
String hvalueline = hvaluelist.get(0);
|
||||
tid = hvalueline.substring( hvalueline.indexOf('=')+1);
|
||||
System.err.println("tid: " + tid);
|
||||
}
|
||||
|
||||
InputStream input = urlconn.getInputStream();
|
||||
buflen = input.available();
|
||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
|||
opj_viewer_xerces-20110711.jar
|
||||
opj_viewer_xerces-20110824.jar
|
|
@ -68,7 +68,7 @@ channel_param_t * gene_channel( query_param_t query_param, cachemodel_param_t *c
|
|||
channel->cachemodel = cachemodel;
|
||||
|
||||
// set channel ID and get present time
|
||||
snprintf( channel->cid, MAX_LENOFCID, "%x%x", (unsigned int)time( &channel->start_tm), (unsigned int)rand());;
|
||||
snprintf( channel->cid, MAX_LENOFCID, "%x%x", (unsigned int)time( &channel->start_tm), (unsigned int)rand());
|
||||
|
||||
channel->next=NULL;
|
||||
|
||||
|
|
|
@ -113,10 +113,11 @@ int main(void)
|
|||
#ifndef SERVER
|
||||
print_queryparam( query_param);
|
||||
#endif
|
||||
|
||||
msgqueue = NULL;
|
||||
parse_status = parse_JPIPrequest( query_param, sessionlist, targetlist, &msgqueue);
|
||||
|
||||
msgqueue = NULL;
|
||||
if( !(parse_status = parse_JPIPrequest( query_param, sessionlist, targetlist, &msgqueue)))
|
||||
fprintf( FCGI_stderr, "Error: JPIP request failed\n");
|
||||
|
||||
fprintf( FCGI_stdout, "\r\n");
|
||||
|
||||
#ifndef SERVER
|
||||
|
@ -136,6 +137,15 @@ int main(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* REQUEST: target identification by target or tid request
|
||||
*
|
||||
* @param[in] query_param structured query
|
||||
* @param[in] targetlist target list pointer
|
||||
* @param[out] target address of target pointer
|
||||
* @return if succeeded (true) or failed (false)
|
||||
*/
|
||||
bool identify_target( query_param_t query_param, targetlist_param_t *targetlist, target_param_t **target);
|
||||
|
||||
/**
|
||||
* REQUEST: channel association
|
||||
|
@ -205,16 +215,15 @@ bool parse_JPIPrequest( query_param_t query_param,
|
|||
target_param_t *target = NULL;
|
||||
session_param_t *cursession = NULL;
|
||||
channel_param_t *curchannel = NULL;
|
||||
|
||||
if( query_param.target[0] !='\0')
|
||||
if( !( target = search_target( query_param.target, targetlist)))
|
||||
if(!( target = gene_target( targetlist, query_param.target)))
|
||||
return false;
|
||||
|
||||
if( query_param.cid[0] != '\0')
|
||||
|
||||
if( !identify_target( query_param, targetlist, &target))
|
||||
return false;
|
||||
|
||||
if( query_param.cid[0] != '\0'){
|
||||
if( !associate_channel( query_param, sessionlist, &cursession, &curchannel))
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
if( query_param.cnew){
|
||||
if( !open_channel( query_param, sessionlist, target, &cursession, &curchannel))
|
||||
return false;
|
||||
|
@ -230,6 +239,36 @@ bool parse_JPIPrequest( query_param_t query_param,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool identify_target( query_param_t query_param, targetlist_param_t *targetlist, target_param_t **target)
|
||||
{
|
||||
if( query_param.target[0] !='\0')
|
||||
if( !( *target = search_target( query_param.target, targetlist)))
|
||||
if(!( *target = gene_target( targetlist, query_param.target)))
|
||||
return false;
|
||||
|
||||
if( query_param.tid[0] !='\0'){
|
||||
if( strcmp( query_param.tid, "0") != 0 ){
|
||||
if( query_param.cid[0] != '\0'){
|
||||
fprintf( FCGI_stdout, "Reason: Target can not be specified both through tid and cid\r\n");
|
||||
fprintf( FCGI_stdout, "Status: 400\r\n");
|
||||
return false;
|
||||
}
|
||||
if( !( *target = search_targetBytid( query_param.tid, targetlist)))
|
||||
return false;
|
||||
}
|
||||
else{
|
||||
if( *target)
|
||||
fprintf( FCGI_stdout, "JPIP-tid: %s\r\n", (*target)->tid);
|
||||
else{
|
||||
fprintf( FCGI_stdout, "Reason: target not specified\r\n");
|
||||
fprintf( FCGI_stdout, "Status: 400\r\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool associate_channel( query_param_t query_param,
|
||||
sessionlist_param_t *sessionlist,
|
||||
session_param_t **cursession,
|
||||
|
|
|
@ -99,6 +99,9 @@ void parse_query( char *query_string, query_param_t *query_param)
|
|||
if( strcasecmp( fieldname, "target") == 0)
|
||||
strcpy( query_param->target,fieldval);
|
||||
|
||||
else if( strcasecmp( fieldname, "tid") == 0)
|
||||
strcpy( query_param->tid, fieldval);
|
||||
|
||||
else if( strcasecmp( fieldname, "fsiz") == 0)
|
||||
sscanf( fieldval, "%d,%d", &query_param->fx, &query_param->fy);
|
||||
|
||||
|
@ -128,6 +131,7 @@ void init_queryparam( query_param_t *query_param)
|
|||
int i;
|
||||
|
||||
query_param->target[0]='\0';
|
||||
query_param->tid[0]='\0';
|
||||
query_param->fx=-1;
|
||||
query_param->fy=-1;
|
||||
query_param->rx=-1;
|
||||
|
@ -183,6 +187,7 @@ void print_queryparam( query_param_t query_param)
|
|||
|
||||
fprintf( logstream, "query parameters:\n");
|
||||
fprintf( logstream, "\t target: %s\n", query_param.target);
|
||||
fprintf( logstream, "\t tid: %s\n", query_param.tid);
|
||||
fprintf( logstream, "\t fx,fy: %d, %d\n", query_param.fx, query_param.fy);
|
||||
fprintf( logstream, "\t rx,ry: %d, %d \t rw,rh: %d, %d\n", query_param.rx, query_param.ry, query_param.rw, query_param.rh);
|
||||
fprintf( logstream, "\t cnew: %d\n", query_param.cnew);
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
|
||||
//! maximum length of target name
|
||||
#define MAX_LENOFTARGET 128
|
||||
|
||||
//! maximum length of target identifier
|
||||
#define MAX_LENOFTID 30
|
||||
|
||||
//! maximum length of channel identifier
|
||||
#define MAX_LENOFCID 30
|
||||
|
@ -48,6 +51,7 @@
|
|||
//! Query parameters
|
||||
typedef struct query_param{
|
||||
char target[MAX_LENOFTARGET]; //!< target name
|
||||
char tid[MAX_LENOFTID]; //!< target identifier
|
||||
int fx, fy; //!< frame size (fx,fy)
|
||||
int rx, ry, rw, rh; //!< roi region
|
||||
char cid[MAX_LENOFCID]; //!< channel identifier
|
||||
|
|
Loading…
Reference in New Issue