diff -urN rt_v34/bin.py rt_v35/bin.py --- rt_v34/bin.py 2018-05-01 23:19:45.000000000 +0900 +++ rt_v35/bin.py 2018-05-09 21:31:17.000000000 +0900 @@ -88,7 +88,7 @@ (rev, s) = unpack_i4(s) return ( cylx.new(r, rev), s ) -pack_fx = lambda fx: pack_f8(fx.dz) + pack_i4(fx,rev) +pack_fx = lambda fx: pack_f8(fx.dz) + pack_i4(fx.rev) def unpack_fx(s): (dz, s) = unpack_f8(s) diff -urN rt_v34/cg.py rt_v35/cg.py --- rt_v34/cg.py 2018-05-09 00:38:57.000000000 +0900 +++ rt_v35/cg.py 2018-05-09 21:43:25.000000000 +0900 @@ -55,7 +55,7 @@ img.cli.v_add_img() if 'no_show' not in sys.argv: - wsec = max( cnt.wait_sec(), 0 ) if n > 1 else -1 + wsec = max( cnt.wait_sec(), 0 ) fn_img = val.cli.get_prop('saved_fn_img') img.show(fn_img, '', wsec, zm) img.cli.v_close() diff -urN rt_v34/cross.c rt_v35/cross.c --- rt_v34/cross.c 2018-05-01 23:19:45.000000000 +0900 +++ rt_v35/cross.c 2018-05-09 21:31:17.000000000 +0900 @@ -351,11 +351,11 @@ char buf[ sizeof(l_g) + sizeof(prev_idx) ], *bp = buf; struct cross_ret ret, send_buf; - read(fd, &sz, sizeof(sz)); + read_n(fd, &sz, sizeof(sz)); if(sz != sizeof(buf)){ fprintf(stderr, "? srv_cross sz=%d sizeof(buf)=%d\n", sz, (int)sizeof(buf)); } - read(fd, buf, sizeof(buf)); + read_n(fd, buf, sizeof(buf)); bp = COPY_FROM_BP(bp, l_g); bp = COPY_FROM_BP(bp, prev_idx); @@ -363,8 +363,8 @@ cross_cross(&l_g, prev_idx, &ret); sz = pack_cross_ret((char *)&send_buf, &ret); - write(fd, &sz, sizeof(sz)); - write(fd, &send_buf, sz); + write_n(fd, &sz, sizeof(sz)); + write_n(fd, &send_buf, sz); } int diff -urN rt_v34/dat.c rt_v35/dat.c --- rt_v34/dat.c 2018-05-07 21:48:31.000000000 +0900 +++ rt_v35/dat.c 2018-05-09 21:31:17.000000000 +0900 @@ -163,4 +163,52 @@ return &data_get()->lst[idx]; } +/**/ + +void +free_lstx(struct lstx *lx) +{ + FREE_LST(*lx, "lx"); +} + +void +free_map(struct map *m) +{ + free_lstx(&m->xyz2g); + free_lstx(&m->wh2xyz); +} + +void +free_maps(struct maps *maps) +{ + int i; + for(i=0; in; i++){ + free_map(&maps->lst[i]); + } + FREE_LST(*maps, "maps"); +} + +void +free_data_one(struct data_one *d) +{ + free_lstx(&d->l2g); + free_maps(&d->maps); +} + +void +free_data(struct data *data) +{ + int i; + for(i=0; in; i++){ + free_data_one(&data->lst[i]); + } + FREE_LST(*data, "data"); +} + +void +free_lights(struct lights *lights) +{ + FREE_LST(*lights, "lights"); +} + /* EOF */ diff -urN rt_v34/dat.h rt_v35/dat.h --- rt_v34/dat.h 2018-05-01 23:19:45.000000000 +0900 +++ rt_v35/dat.h 2018-05-09 21:31:17.000000000 +0900 @@ -60,4 +60,22 @@ struct data_one *data_one_get(int idx); +/**/ + +void free_lstx(struct lstx *lx); +void free_map(struct map *m); +void free_maps(struct maps *maps); +void free_data_one(struct data_one *d); +void free_data(struct data *data); +void free_lights(struct lights *lights); + +/**/ + +char *unpack_vs(char *bp, struct vecs *vs); +char *unpack_xx(char *bp, struct x_x *xx); +char *unpack_lx(char *bp, struct lstx *lx); +char *unpack_map(char *bp, struct map *m); +char *unpack_maps(char *bp, struct maps *maps); +char *unpack_rtd(char *bp, struct rtd *rtd); + #endif diff -urN rt_v34/img.c rt_v35/img.c --- rt_v34/img.c 2018-05-09 00:10:25.000000000 +0900 +++ rt_v35/img.c 2018-05-09 21:31:17.000000000 +0900 @@ -9,6 +9,8 @@ #define IMG_V_LINE 5 #define IMG_V_ADD_IMG 6 #define IMG_V_CUR_SEC 7 +#define IMG_V_GET_CNT 8 +#define IMG_V_SETS 9 static int fd = -1; @@ -154,4 +156,49 @@ return sec; } +int +v_get_cnt(int n, int *ret_xy_lst) +{ + int cmd = IMG_V_GET_CNT; + int rets_sz = 0, i, x, y; + char *rets, *bp; + + img_conn(); + bp = rets = sock_cli_call(fd, cmd, sizeof(n), (char *)&n, &rets_sz, NULL); + bp = COPY_FROM_BP(bp, n); + + for(i=0; i 3*1024*1024: - n -= 1 - ut.cmd_exec('rm {}'.format(wk) + '/img' + '0000{}'.format(n)[-5:] + '.jpg' ) - imgs_to_video('{}/img'.format(wk), '{}/v'.format(wk), 30, 1.0) - sz = ut.get_size('{}/v.mp4'.format(wk)) - print('sz={}'.format(sz)) - ut.cmd_exec('mv {}/v.mp4 ./'.format(wk)) + v_name = wk + '/v.mp4' + + def mkv(n): + ttt = wk + '/ttt' + mkdir_empty(ttt) + for i in range(n): + cmd = 'cp {} {}/'.format( name_seq_jpg(img_name, i), ttt ) + ut.cmd_exec(cmd) + imgs_to_video(ttt + '/img', v_name, 30, 1.0) + return ut.get_size(v_name ) + + M3 = 3*1024*1024 + L = 0 + R = n + if mkv(R) > M3: + while R - L > 1: + C = int( (L + R) / 2 ) + if mkv(C) > M3: + R = C + else: + L = C + mkv(L) + + ut.cmd_exec('mv {} ./'.format(v_name)) print('./v.mp4') ### @@ -343,6 +392,8 @@ { 'cmd': 'v_line', 'func': v_funcs.line, 'args': '(i4,i4,i4,i4,col)' }, { 'cmd': 'v_add_img', 'func': v_funcs.add_img }, { 'cmd': 'v_cur_sec', 'func': v_funcs.cur_sec, 'rets': 'f8' }, + { 'cmd': 'v_get_cnt', 'func': v_funcs.get_cnt, 'args': '(i4)', 'rets': '[(i4,i4)]' }, + { 'cmd': 'v_sets', 'func': v_funcs.sets, 'args': '(i4,i4,[col])' }, ] cli = sock.new_client('srv.img', cmd_infs) diff -urN rt_v34/rt.c rt_v35/rt.c --- rt_v34/rt.c 2018-05-08 20:47:52.000000000 +0900 +++ rt_v35/rt.c 2018-05-09 21:31:17.000000000 +0900 @@ -33,6 +33,15 @@ } void +col_max_255(int *s, int *d) +{ + int i; + for(i=0; i<3; i++){ + d[i] = s[i] < 255 ? s[i] : 255; + } +} + +void map_col(int idx, struct line *l_nv_g, int rev, double sec, int *ret_col) { struct data_one *d = data_one_get(idx); @@ -77,9 +86,7 @@ copy_col(ret_col, d->def_col); return; } - for(i=0; i<3; i++){ - ret_col[i] = sum_col[i] < 255 ? sum_col[i] : 255; - } + col_max_255(sum_col, ret_col); } double @@ -264,6 +271,33 @@ } } +void +set_cols(double *eyep, struct lstx *wh2g, double d_, double sec, int xys_n, int *xys) +{ + int i, x, y; + double lp[3], p[3]; + struct line l_g; + int cols_n = xys_n; + int *cols = malloc( sizeof(*cols)*3*cols_n ), *col = cols; + + lp[2] = -d_; + for(i=0; i 0){ + rn = read(fd, bp, n_); + if(rn <= 0){ + return n - n_; + } + bp += rn; + n_ -= rn; + } + return n; +} + +int +write_n(int fd, void *buf, int n) +{ + char *bp = buf; + int n_ = n, wn; + + while(n_ > 0){ + wn = write(fd, bp, n_); + if(wn <= 0){ + return n - n_; + } + bp += wn; + n_ -= wn; + } + return n; +} + char * sock_cli_call(int fd, int cmd, int args_sz, char *args, int *rets_sz, char *rets) { int sz; char *buf; - write(fd, &cmd, sizeof(cmd)); - write(fd, &args_sz, sizeof(args_sz)); + write_n(fd, &cmd, sizeof(cmd)); + write_n(fd, &args_sz, sizeof(args_sz)); if(args_sz > 0){ - write(fd, args, args_sz); + write_n(fd, args, args_sz); } - read(fd, &sz, sizeof(sz)); + read_n(fd, &sz, sizeof(sz)); buf = rets; if(sz > 0){ @@ -132,7 +166,7 @@ buf = sock_alloc(sz, "sock_cli_call"); } - read(fd, buf, sz); + read_n(fd, buf, sz); if(rets && rets_sz && sz <= *rets_sz && rets != buf){ memcpy(rets, buf, *rets_sz); /* best effort */ @@ -170,7 +204,7 @@ pthread_mutex_unlock(&lock_arg); pthread_cond_signal(&cond_arg); - while( read(fd, &cmd, cmd_sz) == cmd_sz ){ + while( read_n(fd, &cmd, cmd_sz) == cmd_sz ){ if(!(0 <= cmd && cmd < func_n)){ break; } diff -urN rt_v34/sock.h rt_v35/sock.h --- rt_v34/sock.h 2018-05-01 22:49:03.000000000 +0900 +++ rt_v35/sock.h 2018-05-09 21:31:17.000000000 +0900 @@ -41,11 +41,15 @@ name.lst : type * */ #define ALLOC_LST(name, id) do{ (name).lst = sock_alloc( sizeof(*(name).lst) * (name).n, "ALLOC_LST/" id ); }while(0) +#define FREE_LST(name, id) do{ if((name).lst){ free((name).lst); (name).lst = NULL; (name).n = 0; } }while(0) char *alloc_add_bsz(int usz, int n, char *s, int *ret_sz); /**/ +int read_n(int fd, void *buf, int n); +int write_n(int fd, void *buf, int n); + char *sock_cli_call(int fd, int cmd, int args_sz, char *args, int *rets_sz, char *rets); void sock_srv_main_loop(int port, int func_n, void **funcs); diff -urN rt_v34/sock.py rt_v35/sock.py --- rt_v34/sock.py 2018-05-08 20:47:52.000000000 +0900 +++ rt_v35/sock.py 2018-05-09 21:53:39.000000000 +0900 @@ -7,6 +7,16 @@ import bin import pks +def sock_recv_n(sock, n): + ret = b'' + while n > 0: + r = sock.recv(n) + if not r: + break + ret += r + n -= len(r) + return ret + def cmd_infs_copy(cmd_infs, typ): args_f = pks.conv_unpack if typ == 'server' else pks.conv_pack rets_f = pks.conv_unpack if typ == 'client' else pks.conv_pack @@ -34,7 +44,7 @@ e.sock = None def new_sock(): e.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - e.sock.settimeout(5) + #e.sock.settimeout(5) e.conn_ok = False def conn(): @@ -73,7 +83,7 @@ srvs.kill(name) e.kill = kill - read = lambda n: e.sock.recv(n) if n > 0 else '' + read = lambda n: sock_recv_n(e.sock, n) write = lambda s: e.sock.sendall(s) recv = lambda : read( bin.unpack_i4( read(4) )[0] ) @@ -123,7 +133,7 @@ return e def cmd_loop(sock, cmd_infs, lock): - read = lambda n: sock.recv(n) if n > 0 else '' + read = lambda n: sock_recv_n(sock, n) write = lambda s: sock.sendall(s) recv = lambda : read( bin.unpack_i4( read(4) )[0] ) diff -urN rt_v34/ut.py rt_v35/ut.py --- rt_v34/ut.py 2018-05-09 02:31:21.000000000 +0900 +++ rt_v35/ut.py 2018-05-09 21:31:17.000000000 +0900 @@ -104,7 +104,7 @@ e.show_sec = None e.show_interval = 1.0 - def up_no_show(): + def up_no_show(show_fin=True): if e.st_sec == None: e.st_sec = now_sec() else: @@ -113,14 +113,16 @@ if not run: now = now_sec() e.total_sec = now - e.st_sec - show_stat(now) + if show_fin: + show_stat(now) return run - def up(show=True): + def up(show=True, show_fin=True): + # show_fin is valid at show == False if e.i >= e.n: return False if not show: - return up_no_show() + return up_no_show(show_fin) now = now_sec() if e.st_sec == None: e.st_sec = now