diff options
Diffstat (limited to 'redist')
-rw-r--r-- | redist/Makefile | 8 | ||||
-rw-r--r-- | redist/jsmn.c | 315 | ||||
-rw-r--r-- | redist/jsmn.h | 77 | ||||
-rw-r--r-- | redist/jsmntest.c | 75 | ||||
-rw-r--r-- | redist/test.config | 633 |
5 files changed, 1108 insertions, 0 deletions
diff --git a/redist/Makefile b/redist/Makefile new file mode 100644 index 0000000..5ba30dc --- /dev/null +++ b/redist/Makefile @@ -0,0 +1,8 @@ +all : jsmntest + +jsmntest : jsmntest.c jsmn.c + gcc -o $@ $^ + +clean : + rm -rf *.o *~ jsmntest + diff --git a/redist/jsmn.c b/redist/jsmn.c new file mode 100644 index 0000000..10ba0b3 --- /dev/null +++ b/redist/jsmn.c @@ -0,0 +1,315 @@ +#include "jsmn.h" + +/** + * Allocates a fresh unused token from the token pull. + */ +static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser, + jsmntok_t *tokens, size_t num_tokens) { + jsmntok_t *tok; + if (parser->toknext >= num_tokens) { + return NULL; + } + tok = &tokens[parser->toknext++]; + tok->start = tok->end = -1; + tok->size = 0; +#ifdef JSMN_PARENT_LINKS + tok->parent = -1; +#endif + return tok; +} + +/** + * Fills token type and boundaries. + */ +static void jsmn_fill_token(jsmntok_t *token, jsmntype_t type, + int start, int end) { + token->type = type; + token->start = start; + token->end = end; + token->size = 0; +} + +/** + * Fills next available token with JSON primitive. + */ +static int jsmn_parse_primitive(jsmn_parser *parser, const char *js, + size_t len, jsmntok_t *tokens, size_t num_tokens) { + jsmntok_t *token; + int start; + + start = parser->pos; + + for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { + switch (js[parser->pos]) { +#ifndef JSMN_STRICT + /* In strict mode primitive must be followed by "," or "}" or "]" */ + case ':': +#endif + case '\t' : case '\r' : case '\n' : case ' ' : + case ',' : case ']' : case '}' : + goto found; + } + if (js[parser->pos] < 32 || js[parser->pos] >= 127) { + parser->pos = start; + return JSMN_ERROR_INVAL; + } + } +#ifdef JSMN_STRICT + /* In strict mode primitive must be followed by a comma/object/array */ + parser->pos = start; + return JSMN_ERROR_PART; +#endif + +found: + if (tokens == NULL) { + parser->pos--; + return 0; + } + token = jsmn_alloc_token(parser, tokens, num_tokens); + if (token == NULL) { + parser->pos = start; + return JSMN_ERROR_NOMEM; + } + jsmn_fill_token(token, JSMN_PRIMITIVE, start, parser->pos); +#ifdef JSMN_PARENT_LINKS + token->parent = parser->toksuper; +#endif + parser->pos--; + return 0; +} + +/** + * Fills next token with JSON string. + */ +static int jsmn_parse_string(jsmn_parser *parser, const char *js, + size_t len, jsmntok_t *tokens, size_t num_tokens) { + jsmntok_t *token; + + int start = parser->pos; + + parser->pos++; + + /* Skip starting quote */ + for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { + char c = js[parser->pos]; + + /* Quote: end of string */ + if (c == '\"') { + if (tokens == NULL) { + return 0; + } + token = jsmn_alloc_token(parser, tokens, num_tokens); + if (token == NULL) { + parser->pos = start; + return JSMN_ERROR_NOMEM; + } + jsmn_fill_token(token, JSMN_STRING, start+1, parser->pos); +#ifdef JSMN_PARENT_LINKS + token->parent = parser->toksuper; +#endif + return 0; + } + + /* Backslash: Quoted symbol expected */ + if (c == '\\' && parser->pos + 1 < len) { + int i; + parser->pos++; + switch (js[parser->pos]) { + /* Allowed escaped symbols */ + case '\"': case '/' : case '\\' : case 'b' : + case 'f' : case 'r' : case 'n' : case 't' : + break; + /* Allows escaped symbol \uXXXX */ + case 'u': + parser->pos++; + for(i = 0; i < 4 && parser->pos < len && js[parser->pos] != '\0'; i++) { + /* If it isn't a hex character we have an error */ + if(!((js[parser->pos] >= 48 && js[parser->pos] <= 57) || /* 0-9 */ + (js[parser->pos] >= 65 && js[parser->pos] <= 70) || /* A-F */ + (js[parser->pos] >= 97 && js[parser->pos] <= 102))) { /* a-f */ + parser->pos = start; + return JSMN_ERROR_INVAL; + } + parser->pos++; + } + parser->pos--; + break; + /* Unexpected symbol */ + default: + parser->pos = start; + return JSMN_ERROR_INVAL; + } + } + } + parser->pos = start; + return JSMN_ERROR_PART; +} + +/** + * Parse JSON string and fill tokens. + */ +int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, + jsmntok_t *tokens, unsigned int num_tokens) { + int r; + int i; + jsmntok_t *token; + int count = parser->toknext; + + for (; parser->pos < len && js[parser->pos] != '\0'; parser->pos++) { + char c; + jsmntype_t type; + + c = js[parser->pos]; + switch (c) { + case '{': case '[': + count++; + if (tokens == NULL) { + break; + } + token = jsmn_alloc_token(parser, tokens, num_tokens); + if (token == NULL) + return JSMN_ERROR_NOMEM; + if (parser->toksuper != -1) { + tokens[parser->toksuper].size++; +#ifdef JSMN_PARENT_LINKS + token->parent = parser->toksuper; +#endif + } + token->type = (c == '{' ? JSMN_OBJECT : JSMN_ARRAY); + token->start = parser->pos; + parser->toksuper = parser->toknext - 1; + break; + case '}': case ']': + if (tokens == NULL) + break; + type = (c == '}' ? JSMN_OBJECT : JSMN_ARRAY); +#ifdef JSMN_PARENT_LINKS + if (parser->toknext < 1) { + return JSMN_ERROR_INVAL; + } + token = &tokens[parser->toknext - 1]; + for (;;) { + if (token->start != -1 && token->end == -1) { + if (token->type != type) { + return JSMN_ERROR_INVAL; + } + token->end = parser->pos + 1; + parser->toksuper = token->parent; + break; + } + if (token->parent == -1) { + if(token->type != type || parser->toksuper == -1) { + return JSMN_ERROR_INVAL; + } + break; + } + token = &tokens[token->parent]; + } +#else + for (i = parser->toknext - 1; i >= 0; i--) { + token = &tokens[i]; + if (token->start != -1 && token->end == -1) { + if (token->type != type) { + return JSMN_ERROR_INVAL; + } + parser->toksuper = -1; + token->end = parser->pos + 1; + break; + } + } + /* Error if unmatched closing bracket */ + if (i == -1) return JSMN_ERROR_INVAL; + for (; i >= 0; i--) { + token = &tokens[i]; + if (token->start != -1 && token->end == -1) { + parser->toksuper = i; + break; + } + } +#endif + break; + case '\"': + r = jsmn_parse_string(parser, js, len, tokens, num_tokens); + if (r < 0) return r; + count++; + if (parser->toksuper != -1 && tokens != NULL) + tokens[parser->toksuper].size++; + break; + case '\t' : case '\r' : case '\n' : case ' ': + break; + case ':': + parser->toksuper = parser->toknext - 1; + break; + case ',': + if (tokens != NULL && parser->toksuper != -1 && + tokens[parser->toksuper].type != JSMN_ARRAY && + tokens[parser->toksuper].type != JSMN_OBJECT) { +#ifdef JSMN_PARENT_LINKS + parser->toksuper = tokens[parser->toksuper].parent; +#else + for (i = parser->toknext - 1; i >= 0; i--) { + if (tokens[i].type == JSMN_ARRAY || tokens[i].type == JSMN_OBJECT) { + if (tokens[i].start != -1 && tokens[i].end == -1) { + parser->toksuper = i; + break; + } + } + } +#endif + } + break; +#ifdef JSMN_STRICT + /* In strict mode primitives are: numbers and booleans */ + case '-': case '0': case '1' : case '2': case '3' : case '4': + case '5': case '6': case '7' : case '8': case '9': + case 't': case 'f': case 'n' : + /* And they must not be keys of the object */ + if (tokens != NULL && parser->toksuper != -1) { + jsmntok_t *t = &tokens[parser->toksuper]; + if (t->type == JSMN_OBJECT || + (t->type == JSMN_STRING && t->size != 0)) { + return JSMN_ERROR_INVAL; + } + } +#else + /* In non-strict mode every unquoted value is a primitive */ + default: +#endif + r = jsmn_parse_primitive(parser, js, len, tokens, num_tokens); + if (r < 0) return r; + count++; + if (parser->toksuper != -1 && tokens != NULL) + tokens[parser->toksuper].size++; + break; + +#ifdef JSMN_STRICT + /* Unexpected char in strict mode */ + default: + return JSMN_ERROR_INVAL; +#endif + } + } + + if (tokens != NULL) { + for (i = parser->toknext - 1; i >= 0; i--) { + /* Unmatched opened object or array */ + if (tokens[i].start != -1 && tokens[i].end == -1) { + return JSMN_ERROR_PART; + } + } + } + + return count; +} + +/** + * Creates a new parser based over a given buffer with an array of tokens + * available. + */ +void jsmn_init(jsmn_parser *parser) { + parser->pos = 0; + parser->toknext = 0; + parser->toksuper = -1; +} + + diff --git a/redist/jsmn.h b/redist/jsmn.h new file mode 100644 index 0000000..de9ac17 --- /dev/null +++ b/redist/jsmn.h @@ -0,0 +1,77 @@ +#ifndef __JSMN_H_ +#define __JSMN_H_ + +#include <stddef.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * JSON type identifier. Basic types are: + * o Object + * o Array + * o String + * o Other primitive: number, boolean (true/false) or null + */ +typedef enum { + JSMN_UNDEFINED = 0, + JSMN_OBJECT = 1, + JSMN_ARRAY = 2, + JSMN_STRING = 3, + JSMN_PRIMITIVE = 4 +} jsmntype_t; + +enum jsmnerr { + /* Not enough tokens were provided */ + JSMN_ERROR_NOMEM = -1, + /* Invalid character inside JSON string */ + JSMN_ERROR_INVAL = -2, + /* The string is not a full JSON packet, more bytes expected */ + JSMN_ERROR_PART = -3 +}; + +/** + * JSON token description. + * type type (object, array, string etc.) + * start start position in JSON data string + * end end position in JSON data string + */ +typedef struct { + jsmntype_t type; + int start; + int end; + int size; +#ifdef JSMN_PARENT_LINKS + int parent; +#endif +} jsmntok_t; + +/** + * JSON parser. Contains an array of token blocks available. Also stores + * the string being parsed now and current position in that string + */ +typedef struct { + unsigned int pos; /* offset in the JSON string */ + unsigned int toknext; /* next token to allocate */ + int toksuper; /* superior token node, e.g parent object or array */ +} jsmn_parser; + +/** + * Create JSON parser over an array of tokens + */ +void jsmn_init(jsmn_parser *parser); + +/** + * Run JSON parser. It parses a JSON data string into and array of tokens, each describing + * a single JSON object. + */ +int jsmn_parse(jsmn_parser *parser, const char *js, size_t len, + jsmntok_t *tokens, unsigned int num_tokens); + +#ifdef __cplusplus +} +#endif + +#endif /* __JSMN_H_ */ + diff --git a/redist/jsmntest.c b/redist/jsmntest.c new file mode 100644 index 0000000..715bd1f --- /dev/null +++ b/redist/jsmntest.c @@ -0,0 +1,75 @@ +#include "jsmn.h" +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +static int jsoneq(const char *json, jsmntok_t *tok, const char *s) { + if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start && + strncmp(json + tok->start, s, tok->end - tok->start) == 0) { + return 0; + } + return -1; +} + +int main() +{ + int i; + FILE * f = fopen( "test.config", "r" ); + fseek( f, 0, SEEK_END ); + int len = ftell( f ); + fseek( f, 0, SEEK_SET ); + char * JSON_STRING = malloc( len ); + fread( JSON_STRING, len, 1, f ); + fclose( f ); + + jsmn_parser p; + jsmntok_t t[4096]; + jsmn_init(&p); + int r = jsmn_parse(&p, JSON_STRING, len, t, sizeof(t)/sizeof(t[0])); + if (r < 0) { + printf("Failed to parse JSON: %d\n", r); + return 1; + } + if (r < 1 || t[0].type != JSMN_OBJECT) { + printf("Object expected\n"); + return 1; + } + + /* Loop over all keys of the root object */ + for (i = 1; i < r; i++) { +// if (jsoneq(JSON_STRING, &t[i], "acc_bias") == 0) { + /* We may use strndup() to fetch string value */ +// printf("ACC_BIAS: %.*s\n", t[i+1].end-t[i+1].start, JSON_STRING + t[i+1].start); +// } + if (jsoneq(JSON_STRING, &t[i], "modelPoints") == 0) { + int k; + jsmntok_t * tk = &t[i+1]; + printf( "%d / %d / %d / %d\n", tk->type, tk->start, tk->end, tk->size ); + int pts = tk->size; + for( k = 0; k < pts; k++ ) + { + tk = &t[i+2+k*4]; + printf( "++%d / %d / %d / %d\n", tk->type, tk->start, tk->end, tk->size ); + + float vals[3]; + int m; + for( m = 0; m < 3; m++ ) + { + tk++; + if( tk->type != 4 ) + { + fprintf( stderr, "Parse error.\n" ); + break; + } + printf( "%d\n", tk->type ); + } + } + /* We may additionally check if the value is either "true" or "false" */ +// printf("- CMap: %.*s\n", t[i+1].end-t[i+1].start, +// JSON_STRING + t[i+1].start); + } + } + return EXIT_SUCCESS; + + +} diff --git a/redist/test.config b/redist/test.config new file mode 100644 index 0000000..1c3108a --- /dev/null +++ b/redist/test.config @@ -0,0 +1,633 @@ +{
+ "acc_bias": [
+ 0.1572,
+ -0.02771,
+ -0.1465
+ ],
+ "acc_scale": [
+ 0.9991,
+ 0.9995,
+ 0.9959
+ ],
+ "device": {
+ "eye_target_height_in_pixels": 1200,
+ "eye_target_width_in_pixels": 1080,
+ "first_eye": "eEYE_LEFT",
+ "last_eye": "eEYE_RIGHT",
+ "num_windows": 1,
+ "persistence": 0.011110999621450901,
+ "physical_aspect_x_over_y": 0.8999999761581421
+ },
+ "device_class": "hmd",
+ "device_pid": 8192,
+ "device_serial_number": "LHR-B4AB18B0",
+ "device_vid": 10462,
+ "display_edid": [
+ "",
+ ""
+ ],
+ "display_gc": {
+ "black_clamp": 0.0117647061124444
+ },
+ "display_mc": {
+ "left": "Green_46GA16AL014122_mura_analyzes.mc",
+ "offset": -0.49803921580314636,
+ "right": "Green_46HA16AL015390_mura_analyzes.mc",
+ "scale": 0.125,
+ "type": 1
+ },
+ "gyro_bias": [
+ -0.01786,
+ 0.01065,
+ -0.009912
+ ],
+ "gyro_scale": [
+ 1.0,
+ 1.0,
+ 1.0
+ ],
+ "htcComposeTime": "2016-08-08 10:51:02.008000",
+ "l_revision": 12164,
+ "lens_separation": 0.06219471991062164,
+ "lighthouse_config": {
+ "channelMap": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31
+ ],
+ "modelNormals": [
+ [
+ 0.6565292477607727,
+ 0.08003702759742737,
+ 0.7500423192977905
+ ],
+ [
+ 1,
+ 0,
+ 0
+ ],
+ [
+ 0.9510334134101868,
+ 0.1922958791255951,
+ -0.24198685586452484
+ ],
+ [
+ 0.8633409738540649,
+ 0.26114100217819214,
+ -0.43179601430892944
+ ],
+ [
+ 0.5620832443237305,
+ 0.8270804286003113,
+ -0.0007020003395155072
+ ],
+ [
+ 0.5567418932914734,
+ 0.8186168074607849,
+ -0.1410849690437317
+ ],
+ [
+ 0.12751400470733643,
+ 0.36096900701522827,
+ 0.9238190054893494
+ ],
+ [
+ 0.19732795655727386,
+ 0.7212077975273132,
+ 0.6640188097953796
+ ],
+ [
+ 0.19732792675495148,
+ -0.7205037474632263,
+ 0.6647827625274658
+ ],
+ [
+ 0.4602000117301941,
+ 0.003066000062972307,
+ 0.8878099918365479
+ ],
+ [
+ 0.025263000279664993,
+ -0.7483329772949219,
+ 0.6628419756889343
+ ],
+ [
+ 0.5567419528961182,
+ -0.8187658786773682,
+ -0.14021699130535126
+ ],
+ [
+ 0.5620829463005066,
+ -0.8270809054374695,
+ 0.00017499997920822352
+ ],
+ [
+ 0.8633410930633545,
+ -0.26159802079200745,
+ -0.4315190613269806
+ ],
+ [
+ 0.9510335326194763,
+ -0.19255191087722778,
+ -0.24178287386894226
+ ],
+ [
+ 0.6565289497375488,
+ -0.07924199104309082,
+ 0.7501268982887268
+ ],
+ [
+ -0.19732795655727386,
+ 0.7212077975273132,
+ 0.6640188097953796
+ ],
+ [
+ -0.12751400470733643,
+ 0.36096900701522827,
+ 0.9238190054893494
+ ],
+ [
+ -0.5567418932914734,
+ 0.8186168074607849,
+ -0.1410849690437317
+ ],
+ [
+ -0.5620832443237305,
+ 0.8270804286003113,
+ -0.0007020003395155072
+ ],
+ [
+ -0.8633409738540649,
+ 0.26114100217819214,
+ -0.43179601430892944
+ ],
+ [
+ -0.9510334134101868,
+ 0.1922958791255951,
+ -0.24198685586452484
+ ],
+ [
+ -1,
+ 0,
+ 0
+ ],
+ [
+ -0.6565292477607727,
+ 0.08003702759742737,
+ 0.7500423192977905
+ ],
+ [
+ -0.6565289497375488,
+ -0.07924199104309082,
+ 0.7501268982887268
+ ],
+ [
+ -0.9510335326194763,
+ -0.19255191087722778,
+ -0.24178287386894226
+ ],
+ [
+ -0.8633410930633545,
+ -0.26159802079200745,
+ -0.4315190613269806
+ ],
+ [
+ -0.5620829463005066,
+ -0.8270809054374695,
+ 0.00017499997920822352
+ ],
+ [
+ -0.5567419528961182,
+ -0.8187658786773682,
+ -0.14021699130535126
+ ],
+ [
+ -0.025263000279664993,
+ -0.7483329772949219,
+ 0.6628419756889343
+ ],
+ [
+ -0.4602000117301941,
+ 0.003066000062972307,
+ 0.8878099918365479
+ ],
+ [
+ -0.19732792675495148,
+ -0.7205037474632263,
+ 0.6647827625274658
+ ]
+ ],
+ "modelPoints": [
+ [
+ 0.08529596030712128,
+ 0.016987130045890808,
+ 0.04625450819730759
+ ],
+ [
+ 0.09297396242618561,
+ -3.816593380179256e-05,
+ 0.03481875732541084
+ ],
+ [
+ 0.0865984782576561,
+ 0.01662817783653736,
+ 0.02058056741952896
+ ],
+ [
+ 0.0896914079785347,
+ 0.029333578422665596,
+ 0.02945086732506752
+ ],
+ [
+ 0.08003243058919907,
+ 0.04517722502350807,
+ 0.03477787971496582
+ ],
+ [
+ 0.051041457802057266,
+ 0.05250432714819908,
+ 0.033407505601644516
+ ],
+ [
+ 0.024352610111236572,
+ 0.019936595112085342,
+ 0.05934930220246315
+ ],
+ [
+ 0.04747076332569122,
+ 0.03348296880722046,
+ 0.05359809845685959
+ ],
+ [
+ 0.047707222402095795,
+ -0.03385186195373535,
+ 0.053591083735227585
+ ],
+ [
+ 0.057869475334882736,
+ -4.537412223726278e-06,
+ 0.056632302701473236
+ ],
+ [
+ 0.027427678927779198,
+ -0.05159146338701248,
+ 0.046743810176849365
+ ],
+ [
+ 0.05123027041554451,
+ -0.0528465174138546,
+ 0.03318343684077263
+ ],
+ [
+ 0.08045556396245956,
+ -0.04523739218711853,
+ 0.0347951278090477
+ ],
+ [
+ 0.0898326113820076,
+ -0.02926996909081936,
+ 0.029674140736460686
+ ],
+ [
+ 0.08679713308811188,
+ -0.016559496521949768,
+ 0.020654011517763138
+ ],
+ [
+ 0.08523146063089371,
+ -0.01709103211760521,
+ 0.046357400715351105
+ ],
+ [
+ -0.04777093604207039,
+ 0.03356654942035675,
+ 0.05359058827161789
+ ],
+ [
+ -0.02444354072213173,
+ 0.020076606422662735,
+ 0.05938776582479477
+ ],
+ [
+ -0.05102699249982834,
+ 0.0527305006980896,
+ 0.03319358080625534
+ ],
+ [
+ -0.08019497245550156,
+ 0.045236989855766296,
+ 0.03484406694769859
+ ],
+ [
+ -0.08976184576749802,
+ 0.02929999679327011,
+ 0.02958585135638714
+ ],
+ [
+ -0.08683834969997406,
+ 0.016578538343310356,
+ 0.020787812769412994
+ ],
+ [
+ -0.09312481433153152,
+ 0.0001750048977555707,
+ 0.03493703529238701
+ ],
+ [
+ -0.08524972200393677,
+ 0.017301730811595917,
+ 0.04634993150830269
+ ],
+ [
+ -0.08523391932249069,
+ -0.017099885269999504,
+ 0.04617205262184143
+ ],
+ [
+ -0.08670197427272797,
+ -0.016478901728987694,
+ 0.020614536479115486
+ ],
+ [
+ -0.08971264213323593,
+ -0.029298966750502586,
+ 0.029743636026978493
+ ],
+ [
+ -0.0803159773349762,
+ -0.04519243538379669,
+ 0.03466309234499931
+ ],
+ [
+ -0.050936102867126465,
+ -0.05280544236302376,
+ 0.033123407512903214
+ ],
+ [
+ -0.02723855897784233,
+ -0.051664549857378006,
+ 0.046714965254068375
+ ],
+ [
+ -0.05789601430296898,
+ -4.577871732180938e-05,
+ 0.0564543791115284
+ ],
+ [
+ -0.04756224900484085,
+ -0.03390718251466751,
+ 0.053489863872528076
+ ]
+ ]
+ },
+ "manufacturer": "HTC",
+ "mb_serial_number": "42JB167X03076",
+ "model_number": "Vive MV",
+ "render_model": "",
+ "revision": 1,
+ "tracking_to_eye_transform": [
+ {
+ "distortion": {
+ "center_x": 0.09128676972995323,
+ "center_y": -0.003985467152131782,
+ "coeffs": [
+ -0.2218608508704322,
+ -0.0314973006170816,
+ -0.03811043372221242,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0
+ ],
+ "type": "DISTORT_DPOLY3"
+ },
+ "distortion_blue": {
+ "center_x": 0.09128676972995323,
+ "center_y": -0.003985467152131782,
+ "coeffs": [
+ -0.2596104389948281,
+ 0.0245967965162329,
+ -0.06998774577973522,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0
+ ],
+ "type": "DISTORT_DPOLY3"
+ },
+ "distortion_red": {
+ "center_x": 0.09128676972995323,
+ "center_y": -0.003985467152131782,
+ "coeffs": [
+ -0.1857388028229403,
+ -0.08608016110632045,
+ -0.009303358857686194,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0
+ ],
+ "type": "DISTORT_DPOLY3"
+ },
+ "extrinsics": [
+ [
+ 1.0,
+ 0.0,
+ 0.0,
+ 0.03109734132885933
+ ],
+ [
+ 0.0,
+ 1.0,
+ 0.0,
+ -2.235174179077148e-08
+ ],
+ [
+ 0.0,
+ 0.0,
+ 1.0,
+ -7.450580596923828e-09
+ ]
+ ],
+ "grow_for_undistort": 0.6000000238418579,
+ "intrinsics": [
+ [
+ 1.211890697479248,
+ 0.0,
+ -0.09128677099943161
+ ],
+ [
+ 0.0,
+ 1.09042501449585,
+ -0.003586920443922281
+ ],
+ [
+ 0.0,
+ 0.0,
+ -1.0
+ ]
+ ],
+ "undistort_r2_cutoff": 1.140712738037109
+ },
+ {
+ "distortion": {
+ "center_x": -0.09042773927717189,
+ "center_y": -0.003588825103610428,
+ "coeffs": [
+ -0.2167052617934642,
+ -0.03437283577629435,
+ -0.03870793318124786,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0
+ ],
+ "type": "DISTORT_DPOLY3"
+ },
+ "distortion_blue": {
+ "center_x": -0.09042773927717189,
+ "center_y": -0.003588825103610428,
+ "coeffs": [
+ -0.2627621480864886,
+ 0.04275673251679024,
+ -0.08325460213609286,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0
+ ],
+ "type": "DISTORT_DPOLY3"
+ },
+ "distortion_red": {
+ "center_x": -0.09042773927717189,
+ "center_y": -0.003588825103610428,
+ "coeffs": [
+ -0.1837002073444821,
+ -0.08437626940236018,
+ -0.01178900538780535,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0,
+ 0.0
+ ],
+ "type": "DISTORT_DPOLY3"
+ },
+ "extrinsics": [
+ [
+ 1.0,
+ 0.0,
+ 0.0,
+ -0.03109737858176231
+ ],
+ [
+ 0.0,
+ 1.0,
+ 0.0,
+ -2.235174179077148e-08
+ ],
+ [
+ 0.0,
+ 0.0,
+ 1.0,
+ -7.450580596923828e-09
+ ]
+ ],
+ "grow_for_undistort": 0.6000000238418579,
+ "intrinsics": [
+ [
+ 1.208148002624512,
+ 0.0,
+ 0.09042774140834808
+ ],
+ [
+ 0.0,
+ 1.087613344192505,
+ -0.003229942638427019
+ ],
+ [
+ 0.0,
+ 0.0,
+ -1.0
+ ]
+ ],
+ "undistort_r2_cutoff": 1.125258326530457
+ }
+ ],
+ "trackref_from_head": [
+ 0,
+ -1,
+ 0,
+ 0,
+ 0,
+ 0,
+ -0.021630236878991127
+ ],
+ "trackref_from_imu": [
+ 0,
+ 0,
+ -1,
+ 0,
+ -0.008495164103806019,
+ -0.004968234803527594,
+ 0.04987109825015068
+ ],
+ "tracked_camera":
+{
+"version":"1.0.6.0.4",
+"pitch":0.021727,
+"yaw":0.003637,
+"roll":-0.002253,
+"intrinsics":
+{
+"width" :612,
+"height" :460,
+"center_x" :309.600128,
+"center_y" :242.239990,
+"focal_x" :283.000214,
+"focal_y" :283.000214,
+"distort":
+{
+"center_x" :0.000000,
+"center_y" :0.000000,
+"coeffs" :[0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000],
+"type" :"DISTORT_FTHETA"
+}
+}
+},
+"type": "Lighthouse_HMD"
+}
|