7 #define NEED_ENDIAN_TEST
20 #include <libOSC/libosc.h>
21 #include <libOSC/OSC-client.h>
137 boolean lives_osc_cb_saveset(
void *context,
int arglen,
const void *vargs, OSCTimeTag when, NetworkReturnAddressPtr ra);
138 boolean lives_osc_cb_play(
void *context,
int arglen,
const void *vargs, OSCTimeTag when, NetworkReturnAddressPtr ra);
140 boolean lives_osc_cb_clip_goto(
void *context,
int arglen,
const void *vargs, OSCTimeTag when, NetworkReturnAddressPtr ra);
147 int newlen =
pad4(arglen);
157 int newlen = arglen + 4;
161 if (!IS_BIG_ENDIAN) {
162 (*str)[arglen] = (
unsigned char)((val & 0xFF000000) >> 3);
163 (*str)[arglen + 1] = (
unsigned char)((val & 0x00FF0000) >> 2);
164 (*str)[arglen + 2] = (
unsigned char)((val & 0x0000FF00) >> 1);
165 (*str)[arglen + 3] = (
unsigned char)(val & 0x000000FF);
174 static int add_string_arg(
char **str,
int arglen,
const char *val) {
175 int newlen = arglen + strlen(val) + 1;
187 static void ext_caller_return_int(
ulong caller_id,
int ret) {
195 static void ext_caller_return_ulong(
ulong caller_id,
ulong ret) {
203 static void ext_caller_return_string(
ulong caller_id,
const char *ret) {
223 while (list != NULL) {
225 int cnum = LIVES_POINTER_TO_INT(list->data);
228 if (uid == 0)
continue;
243 while (list != NULL) {
244 int cnum = LIVES_POINTER_TO_INT(list->data);
261 *vargs = lives_strdup(
",");
262 arglen =
padup(vargs, arglen);
265 ret =
lives_osc_cb_play(NULL, arglen, (
const void *)(*vargs), OSCTT_CurrentTime(), NULL);
285 if (consta == a)
return b;
290 static int trans_constant(
int consta,
int domain) {
294 if (nconsta != consta)
return nconsta;
296 if (nconsta != consta)
return nconsta;
298 if (nconsta != consta)
return nconsta;
300 if (nconsta != consta)
return nconsta;
302 if (nconsta != consta)
return nconsta;
304 if (nconsta != consta)
return nconsta;
306 if (nconsta != consta)
return nconsta;
308 if (nconsta != consta)
return nconsta;
310 if (nconsta != consta)
return nconsta;
312 if (nconsta != consta)
return nconsta;
314 if (nconsta != consta)
return nconsta;
316 if (nconsta != consta)
return nconsta;
350 int fval = allvals[0];
374 static boolean call_osc_show_info(livespointer text) {
384 static boolean call_osc_show_blocking_info(livespointer data) {
386 int ret = LIVES_RESPONSE_INVALID;
387 msginfo *minfo = (msginfo *)data;
392 ext_caller_return_int(minfo->id, ret);
399 static boolean call_osc_save_set(livespointer data) {
402 oscdata *oscd = (oscdata *)data;
406 ext_caller_return_int(oscd->id, (
int)ret);
407 lives_free((
char *) * ((
char **)(oscd->vargs)));
414 static boolean call_file_choose_with_preview(livespointer data) {
415 LiVESWidget *chooser;
416 fprev *fdata = (fprev *)data;
418 char *fname = NULL, *rstr = NULL;
430 if (response == LIVES_RESPONSE_ACCEPT) {
433 if (fname == NULL) fname = lives_strdup(
"");
437 if (fdata->dir != NULL)
lives_free(fdata->dir);
438 if (fdata->title != NULL)
lives_free(fdata->title);
442 ext_caller_return_string(fdata->id, rstr);
445 if (fname != NULL) free(fname);
451 static boolean call_choose_set(livespointer data) {
452 udata *ud = (udata *)data;
455 if (setname == NULL) setname = lives_strdup(
"");
456 ext_caller_return_string(ud->id, setname);
458 }
else ext_caller_return_string(ud->id,
"");
464 static boolean call_set_set_name(livespointer data) {
470 }
else ext_caller_return_int(uid, (
int)ret);
475 static boolean call_open_file(livespointer data) {
476 opfidata *opfi = (opfidata *)data;
480 if (opfi->fname != NULL)
lives_free(opfi->fname);
482 ext_caller_return_ulong(opfi->id, uid);
489 static boolean call_reload_set(livespointer data) {
490 msginfo *mdata = (msginfo *)data;
491 boolean resp =
FALSE;
494 if (!strlen(mdata->msg)) {
497 if (mdata->msg == NULL) mdata->msg = lives_strdup(
"");
508 ext_caller_return_int(mdata->id, resp);
514 static boolean call_set_interactive(livespointer data) {
515 sintdata *sint = (sintdata *)data;
519 ext_caller_return_int(sint->id,
TRUE);
520 }
else ext_caller_return_int(sint->id,
FALSE);
526 static boolean call_set_sepwin(livespointer data) {
527 sintdata *sint = (sintdata *)data;
531 ext_caller_return_int(sint->id,
TRUE);
532 }
else ext_caller_return_int(sint->id,
FALSE);
538 static boolean call_set_fullscreen(livespointer data) {
539 sintdata *sint = (sintdata *)data;
541 if (
mainw->
fs != sint->setting)
543 ext_caller_return_int(sint->id,
TRUE);
544 }
else ext_caller_return_int(sint->id,
FALSE);
550 static boolean call_set_fullscreen_sepwin(livespointer data) {
551 sintdata *sint = (sintdata *)data;
555 if (
mainw->
fs != sint->setting)
557 ext_caller_return_int(sint->id,
TRUE);
558 }
else ext_caller_return_int(sint->id,
FALSE);
564 static boolean call_set_ping_pong(livespointer data) {
565 sintdata *sint = (sintdata *)data;
569 ext_caller_return_int(sint->id,
TRUE);
570 }
else ext_caller_return_int(sint->id,
FALSE);
576 static boolean call_set_pref_bool(livespointer data) {
577 bpref *bdata = (bpref *)data;
580 ext_caller_return_int(bdata->id,
TRUE);
581 }
else ext_caller_return_int(bdata->id,
FALSE);
588 static boolean call_set_pref_int(livespointer data) {
589 ipref *idata = (ipref *)data;
592 ext_caller_return_int(idata->id,
TRUE);
593 }
else ext_caller_return_int(idata->id,
FALSE);
599 static boolean call_set_pref_bitmapped(livespointer data) {
600 bmpref *bmdata = (bmpref *)data;
603 ext_caller_return_int(bmdata->id,
TRUE);
604 }
else ext_caller_return_int(bmdata->id,
FALSE);
610 static boolean call_set_gravity(livespointer data) {
611 iipref *idata = (iipref *)data;
616 }
else ext_caller_return_int(idata->id,
FALSE);
622 static boolean call_set_insert_mode(livespointer data) {
623 iipref *idata = (iipref *)data;
628 }
else ext_caller_return_int(idata->id,
FALSE);
634 static boolean call_mt_set_track(livespointer data) {
635 iipref *idata = (iipref *)data;
640 ext_caller_return_int(idata->id,
TRUE);
641 }
else ext_caller_return_int(idata->id,
FALSE);
647 static boolean call_insert_vtrack(livespointer data) {
648 ibpref *ibdata = (ibpref *)data;
653 ext_caller_return_int(ibdata->id, tnum);
654 }
else ext_caller_return_int(ibdata->id, -1);
660 static boolean call_mt_set_track_label(livespointer data) {
661 lset *ldata = (lset *)data;
664 if (ldata->string == NULL) {
672 ext_caller_return_int(ldata->id,
TRUE);
673 }
else ext_caller_return_int(ldata->id,
FALSE);
674 if (ldata->string != NULL)
lives_free(ldata->string);
680 static boolean call_set_if_mode(livespointer data) {
681 iipref *idata = (iipref *)data;
690 ext_caller_return_int(idata->id,
TRUE);
691 }
else ext_caller_return_int(idata->id,
FALSE);
697 static boolean call_switch_clip(livespointer data) {
698 iipref *idata = (iipref *)data;
701 ext_caller_return_int(idata->id,
TRUE);
702 }
else ext_caller_return_int(idata->id,
FALSE);
708 static boolean call_set_current_time(livespointer data) {
709 opfidata *idata = (opfidata *)data;
712 if (idata->stime >= 0.) {
721 ext_caller_return_int(idata->id,
TRUE);
722 }
else ext_caller_return_int(idata->id,
FALSE);
728 static boolean call_set_current_audio_time(livespointer data) {
729 opfidata *idata = (opfidata *)data;
733 idata->stime >= 0. && idata->stime <=
cfile->laudio_time) {
735 ext_caller_return_int(idata->id,
TRUE);
736 }
else ext_caller_return_int(idata->id,
FALSE);
742 static boolean call_unmap_effects(livespointer data) {
746 ext_caller_return_int(
id,
TRUE);
747 }
else ext_caller_return_int(
id,
FALSE);
752 static boolean call_stop_playback(livespointer data) {
756 ext_caller_return_int(
id,
TRUE);
757 }
else ext_caller_return_int(
id,
FALSE);
762 static boolean call_quit_app(livespointer data) {
776 static boolean call_map_effect(livespointer data) {
777 fxmapdata *fxdata = (fxmapdata *)data;
781 ext_caller_return_int(fxdata->id, (
error == 0));
783 }
else ext_caller_return_int(fxdata->id,
FALSE);
789 static boolean call_unmap_effect(livespointer data) {
790 fxmapdata *fxdata = (fxmapdata *)data;
794 ext_caller_return_int(fxdata->id,
TRUE);
795 }
else ext_caller_return_int(fxdata->id,
FALSE);
801 static boolean call_fx_setmode(livespointer data) {
802 fxmapdata *fxdata = (fxmapdata *)data;
805 ext_caller_return_int(fxdata->id, (
int)ret);
806 }
else ext_caller_return_int(fxdata->id,
FALSE);
812 static boolean call_wipe_layout(livespointer data) {
813 iblock *fxdata = (iblock *)data;
814 boolean force = fxdata->ign_sel;
815 char *lname = lives_strdup(
"");
828 ext_caller_return_string(fxdata->id, lname);
835 static boolean call_choose_layout(livespointer data) {
836 iblock *fxdata = (iblock *)data;
837 char *lname = lives_strdup(
"");
841 if (lname == NULL) lname = lives_strdup(
"");
843 ext_caller_return_string(fxdata->id, lname);
850 static boolean call_render_layout(livespointer data) {
851 iblock *bdata = (iblock *)data;
864 if (ret) uid = new_uid;
870 ext_caller_return_ulong(bdata->id, uid);
876 static boolean call_reload_layout(livespointer data) {
877 msginfo *mdata = (msginfo *)data;
878 boolean resp =
FALSE;
880 if (!strlen(mdata->msg)) {
883 if (mdata->msg == NULL) mdata->msg = lives_strdup(
"");
892 ext_caller_return_int(mdata->id, resp);
898 static boolean call_save_layout(livespointer data) {
899 msginfo *mdata = (msginfo *)data;
900 boolean resp =
FALSE;
902 char *lname = lives_strdup(
"");
905 if (mdata->msg != NULL) {
917 ext_caller_return_string(mdata->id, lname);
924 static boolean call_set_current_fps(livespointer data) {
925 opfidata *idata = (opfidata *)data;
928 ext_caller_return_int(idata->id, (
int)
TRUE);
929 }
else ext_caller_return_int(idata->id, (
int)
FALSE);
935 static boolean call_set_current_frame(livespointer data) {
936 ibpref *bdata = (ibpref *)data;
949 *vargs = lives_strdup(
",i");
950 arglen =
padup(vargs, arglen);
958 ext_caller_return_int(bdata->id, (
int)ret);
966 static boolean call_select_all(livespointer data) {
967 iipref *idata = (iipref *)data;
968 int cnum = idata->val;
982 ext_caller_return_int(idata->id, (
int)
TRUE);
983 }
else ext_caller_return_int(idata->id, (
int)
FALSE);
984 }
else ext_caller_return_int(idata->id, (
int)
FALSE);
990 static boolean call_select_start(livespointer data) {
991 iipref *idata = (iipref *)data;
993 int cnum = idata->val;
994 int frame = idata->integ;
1004 if (sfile->
end < frame) sfile->
end = frame;
1005 sfile->
start = frame;
1008 ext_caller_return_int(idata->id, (
int)
TRUE);
1009 }
else ext_caller_return_int(idata->id, (
int)
FALSE);
1010 }
else ext_caller_return_int(idata->id, (
int)
FALSE);
1016 static boolean call_select_end(livespointer data) {
1017 iipref *idata = (iipref *)data;
1019 int cnum = idata->val;
1020 int frame = idata->integ;
1021 if (
mainw != NULL) {
1030 if (sfile->
start > frame) sfile->
start = frame;
1034 ext_caller_return_int(idata->id, (
int)
TRUE);
1035 }
else ext_caller_return_int(idata->id, (
int)
FALSE);
1036 }
else ext_caller_return_int(idata->id, (
int)
FALSE);
1042 static boolean call_insert_block(livespointer data) {
1043 iblock *idata = (iblock *)data;
1045 boolean ign_ins_sel;
1065 ext_caller_return_ulong(idata->id, block_uid);
1066 }
else ext_caller_return_ulong(idata->id, 0l);
1072 static boolean call_remove_block(livespointer data) {
1073 mblockdata *rdata = (mblockdata *)data;
1079 if (oblock != rdata->block)
mainw->
multitrack->block_selected = oblock;
1080 ext_caller_return_int(rdata->id, (
int)
TRUE);
1081 }
else ext_caller_return_int(rdata->id, (
int)
FALSE);
1087 static boolean call_move_block(livespointer data) {
1088 mblockdata *mdata = (mblockdata *)data;
1093 ulong block_uid = mdata->block->uid;
1096 if (nblock == NULL) ext_caller_return_int(mdata->id, (
int)
FALSE);
1098 nblock->uid = block_uid;
1099 ext_caller_return_int(mdata->id, (
int)
TRUE);
1107 static boolean call_fx_enable(livespointer data) {
1108 fxmapdata *fxdata = (fxmapdata *)data;
1109 boolean nstate = (
boolean)fxdata->mode;
1110 boolean ret =
FALSE;
1114 int effect_key = fxdata->key;
1120 if (filter == NULL) ret =
FALSE;
1126 ext_caller_return_int(fxdata->id, (
int)
TRUE);
1142 ext_caller_return_int(fxdata->id, (
int)ret);
1148 static boolean call_set_loop_mode(livespointer data) {
1149 iipref *idata = (iipref *)data;
1150 int lmode = idata->val;
1165 ext_caller_return_int(idata->id, (
int)
TRUE);
1166 }
else ext_caller_return_int(idata->id, (
int)
FALSE);
1172 static boolean call_resync_fps(livespointer data) {
1173 iipref *idata = (iipref *)data;
1176 ext_caller_return_int(idata->id, (
int)
TRUE);
1177 }
else ext_caller_return_int(idata->id, (
int)
FALSE);
1183 static boolean call_cancel_proc(livespointer data) {
1184 iipref *idata = (iipref *)data;
1187 ext_caller_return_int(idata->id, (
int)
FALSE);
1190 ext_caller_return_int(idata->id, (
int)
TRUE);
1205 if (text == NULL)
return FALSE;
1206 if (!blocking)
lives_idle_add(call_osc_show_info, (livespointer)text);
1208 msginfo *minfo = (msginfo *)
lives_malloc(
sizeof(msginfo));
1209 minfo->msg = lives_strdup(text);
1211 lives_idle_add(call_osc_show_blocking_info, (livespointer)minfo);
1257 if (label != NULL) data->string = lives_strdup(label);
1258 else data->string = NULL;
1271 data->val = in_front;
1298 time >= 0. && time <= cfile->laudio_time) {
1334 pthread_join(*gtk_thread, NULL);
1352 *vargs = lives_strdup(
",si");
1353 arglen =
padup(vargs, arglen);
1354 arglen = add_string_arg(vargs, arglen, name);
1355 arglen =
add_int_arg(vargs, arglen, force_append);
1359 data->arglen = arglen;
1360 data->vargs = vargs;
1377 if (dirname != NULL && strlen(dirname) > 0) data->dir = lives_strdup(dirname);
1378 else data->dir = NULL;
1380 if (title != NULL && strlen(title) > 0) data->title = lives_strdup(title);
1381 else data->title = NULL;
1383 data->preview_type = preview_type;
1384 lives_idle_add(call_file_choose_with_preview, (livespointer)data);
1419 if (fname == NULL || strlen(fname) == 0)
return FALSE;
1423 data->fname = lives_strdup(fname);
1424 data->stime = stime;
1425 data->frames = frames;
1440 if (setname == NULL)
return FALSE;
1446 data->msg = lives_strdup(setname);
1460 data->setting = setting;
1473 data->setting = setting;
1486 data->setting = setting;
1499 data->setting = setting;
1512 data->setting = setting;
1605 data->mode = setting;
1622 data->prefidx = lives_strdup(prefidx);
1638 data->prefidx = lives_strdup(prefidx);
1654 data->prefidx = lives_strdup(prefidx);
1655 data->bitfield = bitfield;
1671 data->val = (int)mode;
1687 data->clip = clipno;
1688 data->ign_sel = ign_sel;
1689 data->with_audio = with_audio;
1705 if (tr == NULL)
return FALSE;
1725 if (tr == NULL)
return FALSE;
1730 if (time < 0.)
return FALSE;
1735 data->track = track;
1751 data->ign_sel = force;
1783 data->msg = lives_strdup(lname);
1799 if (lname != NULL) data->msg = lives_strdup(lname);
1800 else data->msg = NULL;
1815 data->with_audio = with_aud;
1816 data->ign_sel = normalise_aud;
1850 data->integ = frame;
1867 data->integ = frame;
1895 data->integ = frame;