diff -urN rt_v36/cg.py rt_v37/cg.py --- rt_v36/cg.py 2018-05-11 05:48:58.000000000 +0900 +++ rt_v37/cg.py 2018-05-12 21:24:49.000000000 +0900 @@ -59,4 +59,12 @@ fn_img = val.cli.get_prop('saved_fn_img') img.show(fn_img, '', wsec, zm) img.cli_vwt.close() + + fn = name + '.mp4' # ! + if ut.get_size(fn) > 3*1024*1024: + img.video_to_d1v3M(fn) + + if n > 1 and (w,h,cnt.fps) != (640,480,30): + est_hour = cnt.get_total_sec() * (640.0 / w) * (480.0 / h) * (30.0 / cnt.fps) / 60 / 60 + print('estimated {} hour at 640*480 30fps'.format( ut.dec_qt(est_hour))) # EOF diff -urN rt_v36/cross.c rt_v37/cross.c --- rt_v36/cross.c 2018-05-11 05:48:58.000000000 +0900 +++ rt_v37/cross.c 2018-05-12 13:10:07.000000000 +0900 @@ -295,6 +295,12 @@ ret->ang_nv_eyev = dot( ret->nv, ret->eyev ); } +struct ax * +get_ax_ptr(struct lstx *lx) +{ + return lx->n == 0 ? &ax_one : &lx->lst[0].ax; +} + void cross_cross(struct line *l_g, int prev_idx, struct cross_ret *ret) { @@ -307,7 +313,7 @@ for(i=0; in; i++){ struct data_one *d = &data->lst[i]; - if( !cross_cross_one( d->kind, &d->l2g.lst[0].ax, prev_idx == i, l_g, &ret_ ) ){ + if( !cross_cross_one( d->kind, get_ax_ptr(&d->l2g), prev_idx == i, l_g, &ret_ ) ){ continue; } if( idx < 0 || ret_.t < ret->t ){ @@ -317,7 +323,7 @@ } if( idx >= 0 ){ struct data_one *d = &data->lst[idx]; - cross_get_nv( d->kind, &d->l2g.lst[0].ax, l_g, ret ); + cross_get_nv( d->kind, get_ax_ptr(&d->l2g), l_g, ret ); } ret->idx = idx; } @@ -374,9 +380,10 @@ void *funcs[] = { srv_cross, }; + int do_lock_func = 1; if(ac >= 2 && strcmp(av[1], "boot") == 0){ - sock_srv_main_loop(port, sizeof(funcs)/sizeof(*funcs), funcs); + sock_srv_main_loop(port, sizeof(funcs)/sizeof(*funcs), funcs, do_lock_func); } return 0; } diff -urN rt_v36/dat.py rt_v37/dat.py --- rt_v36/dat.py 2018-05-11 05:48:58.000000000 +0900 +++ rt_v37/dat.py 2018-05-12 17:18:02.000000000 +0900 @@ -226,6 +226,38 @@ 'm2g': [ ax.zoom_all(r) ], } ] +rxs_check = [ { + 'kind': 'square', + 'rtd': { 'diff': 0.8 }, + 'maps': [ { 'fn': 'IMG_3999_3.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(4) ] } ], + 'm2g': [ ax.slide([-8,-8,-2]) ], + 'rxs': [ + ( 'm2g', 'insert', 2, [ ax.slide([2,2,0]) ] ), + ( 'm2g', 'insert', 4, [ ax.slide_x(4) ] ), + ( 'm2g', 'insert', 4, [ ax.slide_y(4) ] ), + ] +},{ + 'kind': 'ball', + 'rtd': rtd, + 'm2g': [ ax.zoom_all(2) ], +} ] + +rxs_check2 = [ { + 'kind': 'square', + 'rtd': { 'diff': 0.8 }, + 'maps': [ { 'fn': 'IMG_3999_3.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(40) ] } ], + 'l2m': [ ax.slide([-8,-8,-2]) ], + 'rxs': [ + ( 'l2m', 'insert', 2, [ ax.slide([2,2,0]) ] ), + ( 'l2m', 'insert', 4, [ ax.slide_x(4) ] ), + ( 'l2m', 'insert', 4, [ ax.slide_y(4) ] ), + ] +},{ + 'kind': 'ball', + 'rtd': rtd, + 'm2g': [ ax.zoom_all(2) ], +} ] + lights = [ { 'p': mt.arr( [1,-1,-1] ) * 30, 'e': 2.5 }, { 'p': mt.arr( [-1,1,1] ) * 30, 'e': 2.5 }, @@ -476,6 +508,7 @@ d_ = d.copy() d_['rxs'] = rxs[:] # ! d_[targ_k] = targ[:] + d_['maps'] = ut.map_lst( lambda m: m.copy(), d.get('maps') ) # ! ds.append(d_) targ = lx + targ if i_a == 'insert' else targ + lx return sum( map( d_setup, ds ), [] ) diff -urN rt_v36/img.c rt_v37/img.c --- rt_v36/img.c 2018-05-11 05:48:58.000000000 +0900 +++ rt_v37/img.c 2018-05-12 01:57:58.000000000 +0900 @@ -176,27 +176,19 @@ return sec; } -int -vwt_get_cnt(int n, int *ret_xy_lst) +void +vwt_get_cnt(int n, int *rn, int *x, int *y) { int cmd = VWT_GET_CNT; - int rets_sz = 0, i, x, y; - char *rets, *bp; + int rets_sz = sizeof(*rn) + sizeof(*x) + sizeof(*y); + char rets[ rets_sz ], *bp = rets; int fd = vwt_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 M3: + R = rn = n + if mkv(R, v_name) > M3: while R - L > 1: C = int( (L + R) / 2 ) - if mkv(C) > M3: + if mkv(C, v_name) > M3: R = C else: L = C - mkv(L) + sz = mkv(L, v_name) + rn = L + + sz = mkv(n-L, './v2.mp4', L) + + print('./v.mp4 {}/{}'.format(rn, n)) + return (rn, n) + +def video_to_div3M(video_name): + M3 = 3*1024*1024 + fn = video_name + if fn_typ(fn) != 'v': + fn += '.mp4' + if ut.get_size(fn) <= M3: + return - ut.cmd_exec('mv {} ./'.format(v_name)) - print('./v.mp4') + (fn_base, _) = ut.split_ext(fn) + i = 1 + while ut.exists(fn) and ut.get_size(fn) > M3: + video_to_3M(fn) # ./v.mp4 , ./v2.mp4 + ut.cmd_exec('mv ./v.mp4 {}_{}.mp4'.format(fn_base, i)) + i += 1 + fn = './v2.mp4' + if fn == './v2.mp4' and ut.exists(fn): + ut.cmd_exec('mv ./v2.mp4 {}_{}.mp4'.format(fn_base, i)) ### @@ -440,4 +467,6 @@ video_play(video_name) elif cmd == '3M': video_to_3M(video_name) + elif cmd == 'div3M': + video_to_div3M(video_name) # EOF diff -urN rt_v36/rt.c rt_v37/rt.c --- rt_v36/rt.c 2018-05-11 05:25:11.000000000 +0900 +++ rt_v37/rt.c 2018-05-12 12:52:49.000000000 +0900 @@ -423,12 +423,13 @@ if(arg_is(ac, av, 1, "boot")){ char *name = arg_s(ac, av, "name", "srv.rt"); int port = arg_i(ac, av, "port", -1); + int do_lock_func = 1; if(port < 0){ char *buf = get_prop(name, NULL), *bp = buf; bp = COPY_FROM_BP(bp, port); free(buf); } - sock_srv_main_loop(port, sizeof(funcs)/sizeof(*funcs), funcs); + sock_srv_main_loop(port, sizeof(funcs)/sizeof(*funcs), funcs, do_lock_func); } return 0; } diff -urN rt_v36/rt.py rt_v37/rt.py --- rt_v36/rt.py 2018-05-11 05:45:18.000000000 +0900 +++ rt_v37/rt.py 2018-05-12 10:29:09.000000000 +0900 @@ -121,8 +121,9 @@ if idx < 0: return [] - data = ut.dic_cache( srv_dic, 'data', lambda : val.cli.get_prop('data') ) - d = data[idx] + #data = ut.dic_cache( srv_dic, 'data', lambda : val.cli.get_prop('data') ) + #d = data[idx] + d = data_one_get(idx) rtd = d.get('rtd', {}) crsp = l_nv_g.p ang_nv_eyev_nega = -ang_nv_eyev @@ -210,7 +211,7 @@ names = [ 'srv.rt', 'srv.rt-15', 'srv.rt-16', 'srv.rt-17', 'srv.rt-18' ][:2] #names += [ 'srv.rt-2', 'srv.rt-3', 'srv.rt-4', 'srv.rt-5', 'srv.rt-6' ][:2] -#names = [ 'srv.rt' ] * 8 +#names = [ 'srv.rt' ] * 2 clis = ut.map_lst( new_client, names ) diff -urN rt_v36/sock.c rt_v37/sock.c --- rt_v36/sock.c 2018-05-11 05:07:37.000000000 +0900 +++ rt_v37/sock.c 2018-05-12 01:58:09.000000000 +0900 @@ -110,6 +110,23 @@ return buf; } +void * +alloc_or_stk(int sz, int stk_sz, void *stk) +{ + if(!stk){ + stk_sz = 0; + } + return sz <= stk_sz ? stk : malloc(sz); +} + +void +free_or_stk(void *p, void *stk) +{ + if(p != stk && p){ + free(p); + } +} + /**/ int @@ -160,25 +177,17 @@ read_n(fd, &sz, sizeof(sz)); - buf = rets; - if(sz > 0){ - if(rets == NULL || rets_sz == NULL || *rets_sz < sz){ - buf = sock_alloc(sz, "sock_cli_call"); - } + buf = alloc_or_stk(sz, rets_sz ? *rets_sz : 0, rets); + if(sz > 0){ read_n(fd, buf, sz); - - if(rets && rets_sz && sz <= *rets_sz && rets != buf){ - memcpy(rets, buf, *rets_sz); /* best effort */ - } } - if(rets_sz){ *rets_sz = sz; } return buf; /* - if return buf != rets --> need free buf + need free_or_stk(buf, rets_sz) */ } @@ -194,12 +203,14 @@ int fd, func_n, cmd, cmd_sz = sizeof(cmd); void **funcs; void (*func)(int fd); + int do_lock_func; pthread_mutex_lock(&lock_arg); fd = *(int *)args[0]; func_n = *(int *)args[1]; funcs = args[2]; + do_lock_func = *(int *)args[3]; pthread_mutex_unlock(&lock_arg); pthread_cond_signal(&cond_arg); @@ -210,20 +221,26 @@ } func = funcs[cmd]; - pthread_mutex_lock(&lock_func); + if(do_lock_func){ + pthread_mutex_lock(&lock_func); + } + (*func)(fd); - pthread_mutex_unlock(&lock_func); + + if(do_lock_func){ + pthread_mutex_unlock(&lock_func); + } } return NULL; } void -sock_srv_main_loop(int port, int func_n, void **funcs) +sock_srv_main_loop(int port, int func_n, void **funcs, int do_lock_func) { int sfd = srv_port(port); int cfd; pthread_t th; - void *arg[] = { &cfd, &func_n, funcs }; + void *arg[] = { &cfd, &func_n, funcs, &do_lock_func }; while(1){ pthread_mutex_lock(&lock_arg); diff -urN rt_v36/sock.h rt_v37/sock.h --- rt_v36/sock.h 2018-05-09 21:31:17.000000000 +0900 +++ rt_v37/sock.h 2018-05-12 01:26:37.000000000 +0900 @@ -45,12 +45,15 @@ char *alloc_add_bsz(int usz, int n, char *s, int *ret_sz); +void *alloc_or_stk(int sz, int stk_sz, void *stk); +void free_or_stk(void *p, void *stk); + /**/ 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); +void sock_srv_main_loop(int port, int func_n, void **funcs, int do_lock_func); #endif diff -urN rt_v36/sock.py rt_v37/sock.py --- rt_v36/sock.py 2018-05-11 05:32:52.000000000 +0900 +++ rt_v37/sock.py 2018-05-12 00:37:40.000000000 +0900 @@ -158,21 +158,23 @@ func = cmd_inf.get('func') rets = None if func: - lock.lock() + if lock: + lock.lock() rets = func(*args) if args != None else func() - lock.unlock() + if lock: + lock.unlock() send_pks( cmd_inf.get('rets'), rets ) if s: sock.shutdown(socket.SHUT_RDWR) sock.close() -def server(name, cmd_infs, port=-1): +def server(name, cmd_infs, port=-1, do_lock_func=True): import srvs - lock = ut.new_lock() + lock = ut.new_lock() if do_lock_func else None cmd_infs = cmd_infs_copy(cmd_infs, 'server') if port < 0: diff -urN rt_v36/ut.py rt_v37/ut.py --- rt_v36/ut.py 2018-05-11 04:58:45.000000000 +0900 +++ rt_v37/ut.py 2018-05-12 12:03:56.000000000 +0900 @@ -70,6 +70,8 @@ now_sec = time.time sleep = time.sleep +dec_qt = lambda v, qt='1.00': Decimal(v).quantize( Decimal(qt) ) + #str_dt = lambda sec: time.asctime( time.localtime(sec) ) def str_dt(sec): t = time.localtime(sec) @@ -80,7 +82,7 @@ si = int(sec) m = si // 60 s = si % 60 + int( (sec - si) * 100 ) * 0.01 - s = Decimal(s).quantize( Decimal('1.00') ) + s = dec_qt(s) h = m // 60 m %= 60 lst = [ (s, 's') ] @@ -146,7 +148,7 @@ rest = e.total_sec - ( now_sec() - e.st_sec ) return 'total {} : rest {} : {}'.format( str_hms(e.total_sec), str_hms(rest), str_dt( e.st_sec + e.total_sec ) ) - pcent = lambda : Decimal(100*e.i/n).quantize( Decimal('1.0') ) + pcent = lambda : dec_qt(100*e.i/n, '1.0') stat_str = lambda : '{}{}/{}({}%) : {}'.format( id_str, e.i, n, pcent(), fin_str() ) def show_stat(now=None): @@ -156,6 +158,8 @@ e.show_sec = now print( stat_str() ) + e.get_total_sec = lambda : e.total_sec + return e def new_cnt_wait(id_str=''): @@ -234,6 +238,8 @@ get_size = lambda path: os.path.getsize(path) +split_ext = lambda path: os.path.splitext(path) + ### def th_start( func, *args ):