summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaori Hagihara <khagihara@users.noreply.github.com>2011-08-24 17:07:28 +0000
committerKaori Hagihara <khagihara@users.noreply.github.com>2011-08-24 17:07:28 +0000
commit4da816e4598995db099f22a017c3598c19a753ed (patch)
tree5f4809f4f550765657131059c0c17c8b5e830df5
parent9c475467d55adf3624ef7a9b50d6ad1703db5535 (diff)
support tid request
-rw-r--r--applications/jpip/CHANGES1
-rw-r--r--applications/jpip/libopenjpip/box_manager.c1
-rw-r--r--applications/jpip/libopenjpip/box_manager.h1
-rw-r--r--applications/jpip/libopenjpip/boxheader_manager.c1
-rw-r--r--applications/jpip/libopenjpip/byte_manager.c1
-rw-r--r--applications/jpip/libopenjpip/byte_manager.h2
-rw-r--r--applications/jpip/libopenjpip/codestream_manager.h1
-rw-r--r--applications/jpip/libopenjpip/index_manager.c1
-rw-r--r--applications/jpip/libopenjpip/metadata_manager.c1
-rw-r--r--applications/jpip/libopenjpip/msgqueue_manager.c29
-rw-r--r--applications/jpip/libopenjpip/placeholder_manager.c1
-rw-r--r--applications/jpip/libopenjpip/target_manager.c25
-rw-r--r--applications/jpip/libopenjpip/target_manager.h14
-rw-r--r--applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c1
-rw-r--r--applications/jpip/opj_client/opj_dec_server/opj_dec_server.c2
-rw-r--r--applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110824.jar (renamed from applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110711.jar)bin14848 -> 14893 bytes
l---------applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar2
-rw-r--r--applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java8
-rw-r--r--applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110824.jar (renamed from applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110711.jar)bin19358 -> 19403 bytes
l---------applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar2
-rw-r--r--applications/jpip/opj_server/channel_manager.c2
-rw-r--r--applications/jpip/opj_server/opj_server.c61
-rw-r--r--applications/jpip/opj_server/query_parser.c5
-rw-r--r--applications/jpip/opj_server/query_parser.h4
24 files changed, 140 insertions, 26 deletions
diff --git a/applications/jpip/CHANGES b/applications/jpip/CHANGES
index 6c5334bd..13dfe69b 100644
--- a/applications/jpip/CHANGES
+++ b/applications/jpip/CHANGES
@@ -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
diff --git a/applications/jpip/libopenjpip/box_manager.c b/applications/jpip/libopenjpip/box_manager.c
index 41f5043b..d3332576 100644
--- a/applications/jpip/libopenjpip/box_manager.c
+++ b/applications/jpip/libopenjpip/box_manager.c
@@ -28,6 +28,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
diff --git a/applications/jpip/libopenjpip/box_manager.h b/applications/jpip/libopenjpip/box_manager.h
index 29d824e4..72f451bf 100644
--- a/applications/jpip/libopenjpip/box_manager.h
+++ b/applications/jpip/libopenjpip/box_manager.h
@@ -31,7 +31,6 @@
#ifndef BOX_MANAGER_H_
# define BOX_MANAGER_H_
-#include <stdio.h>
#include "byte_manager.h"
//! box parameters
diff --git a/applications/jpip/libopenjpip/boxheader_manager.c b/applications/jpip/libopenjpip/boxheader_manager.c
index 09253e2a..2f465a3b 100644
--- a/applications/jpip/libopenjpip/boxheader_manager.c
+++ b/applications/jpip/libopenjpip/boxheader_manager.c
@@ -28,6 +28,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
diff --git a/applications/jpip/libopenjpip/byte_manager.c b/applications/jpip/libopenjpip/byte_manager.c
index e2ce484b..288adb42 100644
--- a/applications/jpip/libopenjpip/byte_manager.c
+++ b/applications/jpip/libopenjpip/byte_manager.c
@@ -28,6 +28,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
diff --git a/applications/jpip/libopenjpip/byte_manager.h b/applications/jpip/libopenjpip/byte_manager.h
index d5b8a0b6..8b90fa90 100644
--- a/applications/jpip/libopenjpip/byte_manager.h
+++ b/applications/jpip/libopenjpip/byte_manager.h
@@ -31,8 +31,6 @@
#ifndef BYTE_MANAGER_H_
# define BYTE_MANAGER_H_
-#include <stdio.h>
-
//! 1Byte parameter type
typedef unsigned char Byte_t;
diff --git a/applications/jpip/libopenjpip/codestream_manager.h b/applications/jpip/libopenjpip/codestream_manager.h
index eb6aba6a..fcefbeea 100644
--- a/applications/jpip/libopenjpip/codestream_manager.h
+++ b/applications/jpip/libopenjpip/codestream_manager.h
@@ -31,7 +31,6 @@
#ifndef CODESTREAM_MANAGER_H_
# define CODESTREAM_MANAGER_H_
-#include <stdio.h>
#include "byte_manager.h"
//! codestream parameters
diff --git a/applications/jpip/libopenjpip/index_manager.c b/applications/jpip/libopenjpip/index_manager.c
index 5a9d187a..96ae6b32 100644
--- a/applications/jpip/libopenjpip/index_manager.c
+++ b/applications/jpip/libopenjpip/index_manager.c
@@ -28,6 +28,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/types.h>
diff --git a/applications/jpip/libopenjpip/metadata_manager.c b/applications/jpip/libopenjpip/metadata_manager.c
index 780a741b..c60f437a 100644
--- a/applications/jpip/libopenjpip/metadata_manager.c
+++ b/applications/jpip/libopenjpip/metadata_manager.c
@@ -28,6 +28,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
diff --git a/applications/jpip/libopenjpip/msgqueue_manager.c b/applications/jpip/libopenjpip/msgqueue_manager.c
index 13845bb3..7d0d8dff 100644
--- a/applications/jpip/libopenjpip/msgqueue_manager.c
+++ b/applications/jpip/libopenjpip/msgqueue_manager.c
@@ -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;
}
diff --git a/applications/jpip/libopenjpip/placeholder_manager.c b/applications/jpip/libopenjpip/placeholder_manager.c
index 803889b4..d76dbf3c 100644
--- a/applications/jpip/libopenjpip/placeholder_manager.c
+++ b/applications/jpip/libopenjpip/placeholder_manager.c
@@ -28,6 +28,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "placeholder_manager.h"
diff --git a/applications/jpip/libopenjpip/target_manager.c b/applications/jpip/libopenjpip/target_manager.c
index 0f085442..1117551d 100644
--- a/applications/jpip/libopenjpip/target_manager.c
+++ b/applications/jpip/libopenjpip/target_manager.c
@@ -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;
diff --git a/applications/jpip/libopenjpip/target_manager.h b/applications/jpip/libopenjpip/target_manager.h
index 5de22ba6..fc872ea8 100644
--- a/applications/jpip/libopenjpip/target_manager.h
+++ b/applications/jpip/libopenjpip/target_manager.h
@@ -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_ */
diff --git a/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c b/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c
index 41d1a31f..0a58d52a 100644
--- a/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c
+++ b/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c
@@ -28,6 +28,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "jp2k_decoder.h"
diff --git a/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c b/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c
index 895ade5c..9779d93b 100644
--- a/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c
+++ b/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c
@@ -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
diff --git a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110711.jar b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110824.jar
index 1024d50a..b821db33 100644
--- a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110711.jar
+++ b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20110824.jar
Binary files differ
diff --git a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar
index 5f7ec56d..031f9e68 120000
--- a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar
+++ b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar
@@ -1 +1 @@
-opj_viewer-20110711.jar \ No newline at end of file
+opj_viewer-20110824.jar \ No newline at end of file
diff --git a/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java b/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java
index c6bdb556..466370b6 100644
--- a/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java
+++ b/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java
@@ -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();
diff --git a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110711.jar b/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110824.jar
index 30b824b7..b5ad639d 100644
--- a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110711.jar
+++ b/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20110824.jar
Binary files differ
diff --git a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar b/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar
index 5288da8f..0362316b 120000
--- a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar
+++ b/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar
@@ -1 +1 @@
-opj_viewer_xerces-20110711.jar \ No newline at end of file
+opj_viewer_xerces-20110824.jar \ No newline at end of file
diff --git a/applications/jpip/opj_server/channel_manager.c b/applications/jpip/opj_server/channel_manager.c
index 961c73c9..3523161b 100644
--- a/applications/jpip/opj_server/channel_manager.c
+++ b/applications/jpip/opj_server/channel_manager.c
@@ -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;
diff --git a/applications/jpip/opj_server/opj_server.c b/applications/jpip/opj_server/opj_server.c
index 3a7e1087..93fffc7e 100644
--- a/applications/jpip/opj_server/opj_server.c
+++ b/applications/jpip/opj_server/opj_server.c
@@ -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,
diff --git a/applications/jpip/opj_server/query_parser.c b/applications/jpip/opj_server/query_parser.c
index 53317d88..b5dc4144 100644
--- a/applications/jpip/opj_server/query_parser.c
+++ b/applications/jpip/opj_server/query_parser.c
@@ -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);
diff --git a/applications/jpip/opj_server/query_parser.h b/applications/jpip/opj_server/query_parser.h
index b511a711..db46f332 100644
--- a/applications/jpip/opj_server/query_parser.h
+++ b/applications/jpip/opj_server/query_parser.h
@@ -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