Player: support exu as source
This commit is contained in:
parent
5555a38c1e
commit
1086aa6885
114
src/bin/player.c
114
src/bin/player.c
|
@ -26,16 +26,19 @@
|
|||
|
||||
typedef enum
|
||||
{
|
||||
DEST_UNKNOWN,
|
||||
DEST_DIR,
|
||||
DEST_EXU
|
||||
} Dest_Type;
|
||||
FTYPE_UNKNOWN,
|
||||
FTYPE_DIR,
|
||||
FTYPE_REC = FTYPE_DIR,
|
||||
FTYPE_EXU
|
||||
} File_Type;
|
||||
|
||||
static Dest_Type _dest_type = DEST_UNKNOWN;
|
||||
static File_Type _dest_type = FTYPE_UNKNOWN;
|
||||
static const char *_dest = NULL;
|
||||
static Exactness_Unit *_dest_unit = NULL;
|
||||
|
||||
static const char *_rec_filename = NULL;
|
||||
static File_Type _src_type = FTYPE_UNKNOWN;
|
||||
static const char *_src_filename = NULL;
|
||||
static Exactness_Unit *_src_unit = NULL;
|
||||
|
||||
static const char *_test_name = NULL;
|
||||
static int _verbose = 0;
|
||||
|
@ -44,7 +47,6 @@ static Evas *(*_evas_new)(void) = NULL;
|
|||
static int _ignore_evas_creation = 0;
|
||||
static Eina_List *_evas_list = NULL;
|
||||
|
||||
static Lists_st *_events_list = NULL;
|
||||
static Eina_List *_cur_event_list = NULL;
|
||||
static unsigned int _last_event_time = 0;
|
||||
|
||||
|
@ -78,7 +80,7 @@ _shot_do(Evas *e)
|
|||
ecore_evas_geometry_get(ee_orig, NULL, NULL, &w, &h);
|
||||
if ((w < 1) || (h < 1)) return;
|
||||
|
||||
if (_dest_type == DEST_DIR)
|
||||
if (_dest_type == FTYPE_DIR)
|
||||
{
|
||||
int dir_name_len;
|
||||
char *filename;
|
||||
|
@ -108,7 +110,7 @@ _shot_do(Evas *e)
|
|||
free(filename);
|
||||
ecore_evas_free(ee);
|
||||
}
|
||||
else if (_dest_type == DEST_EXU)
|
||||
else if (_dest_type == FTYPE_EXU)
|
||||
{
|
||||
Exactness_Image *ex_img = malloc(sizeof(*ex_img));
|
||||
ex_img->w = w;
|
||||
|
@ -117,7 +119,7 @@ _shot_do(Evas *e)
|
|||
ex_img->pixels = malloc(ex_img->pixels_count);
|
||||
memcpy(ex_img->pixels, pixels, ex_img->pixels_count);
|
||||
_dest_unit->imgs = eina_list_append(_dest_unit->imgs, ex_img);
|
||||
_printf(1, "Shot taken (in .exu).\n");
|
||||
_printf(1, "Shot taken (in %s).\n", _dest);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -333,7 +335,7 @@ _feed_event(void *data EINA_UNUSED)
|
|||
_printf(2, "%s take shot timestamp=<%u> t->n_evas=<%d>\n", __func__, t->timestamp, t->n_evas);
|
||||
if (rect) evas_object_color_set(rect, 0, 0, 255, 255);
|
||||
_cur_shot_id++;
|
||||
if (_dest_type != DEST_UNKNOWN && e) _shot_do(e);
|
||||
if (_dest_type != FTYPE_UNKNOWN && e) _shot_do(e);
|
||||
break;
|
||||
}
|
||||
default: /* All non-input events are not handeled */
|
||||
|
@ -369,22 +371,47 @@ _feed_event(void *data EINA_UNUSED)
|
|||
}
|
||||
|
||||
static Eina_Bool
|
||||
_rec_open()
|
||||
_src_open()
|
||||
{
|
||||
unsigned int first_tm = 0;
|
||||
double diff_time = 0; /* Time to wait before feeding the first event */
|
||||
_printf(2, "<%s> rec file is <%s>\n", __func__, _rec_filename);
|
||||
_events_list = read_events(_rec_filename, NULL);
|
||||
if (_events_list)
|
||||
_printf(2, "<%s> Source file is <%s>\n", __func__, _src_filename);
|
||||
if (_src_type == FTYPE_EXU)
|
||||
{
|
||||
_cur_event_list = _events_list->variant_list;
|
||||
Eet_File *file = eet_open(_src_filename, EET_FILE_MODE_READ);
|
||||
if (!file)
|
||||
{
|
||||
fprintf(stderr, "Impossible to extract EET from %s\n", _src_filename);
|
||||
return EINA_FALSE;
|
||||
}
|
||||
_src_unit = eet_data_read(file, unit_desc_make(), CACHE_FILE_ENTRY);
|
||||
eet_close(file);
|
||||
}
|
||||
else if (_src_type == FTYPE_REC)
|
||||
{
|
||||
_src_unit = calloc(1, sizeof(*_src_unit));
|
||||
Lists_st *events_list = read_events(_src_filename, NULL);
|
||||
if (!events_list)
|
||||
{
|
||||
free(_src_unit);
|
||||
_src_unit = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
_src_unit->events = events_list->variant_list;
|
||||
first_tm = events_list->first_timestamp;
|
||||
}
|
||||
}
|
||||
if (!_src_unit) return EINA_FALSE;
|
||||
_cur_event_list = _src_unit->events;
|
||||
Variant_st *v = eina_list_data_get(_cur_event_list);
|
||||
|
||||
/* Calculate the time to wait before feeding the first event */
|
||||
unsigned int current_event_time = evt_time_get(0, v);
|
||||
if (current_event_time > _events_list->first_timestamp)
|
||||
diff_time = (current_event_time - _events_list->first_timestamp) / 1000.0;
|
||||
if (current_event_time > first_tm)
|
||||
diff_time = (current_event_time - first_tm) / 1000.0;
|
||||
|
||||
_printf(2, "%s first_time_stamp=<%u> current_event_time=<%u>\n", __func__, _events_list->first_timestamp, current_event_time);
|
||||
_printf(2, "%s first_time_stamp=<%u> current_event_time=<%u>\n", __func__, first_tm, current_event_time);
|
||||
|
||||
if (diff_time)
|
||||
{
|
||||
|
@ -395,11 +422,10 @@ _rec_open()
|
|||
{
|
||||
_feed_event(NULL);
|
||||
}
|
||||
}
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
static int
|
||||
_prg_invoke(const char *full_path, int argc, char **argv)
|
||||
{
|
||||
Eina_Value *ret__;
|
||||
|
@ -413,7 +439,7 @@ _prg_invoke(const char *full_path, int argc, char **argv)
|
|||
{
|
||||
fprintf(stderr, "Failed loading %s.\n", full_path);
|
||||
if (h) eina_module_free(h);
|
||||
return EINA_FALSE;
|
||||
return 1;
|
||||
}
|
||||
efl_main = eina_module_symbol_get(h, "efl_main");
|
||||
elm_main = eina_module_symbol_get(h, "elm_main");
|
||||
|
@ -423,10 +449,11 @@ _prg_invoke(const char *full_path, int argc, char **argv)
|
|||
{
|
||||
fprintf(stderr, "Failed loading symbol 'evas_new' from %s.\n", full_path);
|
||||
eina_module_free(h);
|
||||
return EINA_FALSE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
_rec_open();
|
||||
if (_src_open())
|
||||
{
|
||||
if (efl_main)
|
||||
{
|
||||
elm_init(argc, argv);
|
||||
|
@ -451,6 +478,9 @@ _prg_invoke(const char *full_path, int argc, char **argv)
|
|||
eina_module_free(h);
|
||||
real__ = 1;
|
||||
}
|
||||
}
|
||||
else real__ = 1;
|
||||
|
||||
return real__;
|
||||
}
|
||||
|
||||
|
@ -541,6 +571,7 @@ int main(int argc, char **argv)
|
|||
const char *engine = "buffer";
|
||||
|
||||
eina_init();
|
||||
eet_init();
|
||||
|
||||
opterr = 0;
|
||||
for (int opt; (opt = getopt(argc, argv, "+so:vt:h")) != -1;)
|
||||
|
@ -558,7 +589,7 @@ int main(int argc, char **argv)
|
|||
_dest = eina_stringshare_add(optarg);
|
||||
if (!strcmp(_dest + strlen(_dest) - 4,".exu"))
|
||||
{
|
||||
_dest_type = DEST_EXU;
|
||||
_dest_type = FTYPE_EXU;
|
||||
if (!_mkdir(_dest, EINA_TRUE))
|
||||
{
|
||||
fprintf(stderr, "Path for %s cannot be created\n", _dest);
|
||||
|
@ -567,7 +598,7 @@ int main(int argc, char **argv)
|
|||
}
|
||||
else
|
||||
{
|
||||
_dest_type = DEST_DIR;
|
||||
_dest_type = FTYPE_DIR;
|
||||
if (!_mkdir(_dest, EINA_FALSE))
|
||||
{
|
||||
fprintf(stderr, "Directory %s cannot be created\n", _dest);
|
||||
|
@ -578,17 +609,22 @@ int main(int argc, char **argv)
|
|||
}
|
||||
case 't':
|
||||
{
|
||||
_rec_filename = eina_stringshare_add(optarg);
|
||||
if (_dest_type == DEST_UNKNOWN)
|
||||
_src_filename = eina_stringshare_add(optarg);
|
||||
if (!strcmp(_src_filename + strlen(_src_filename) - 4,".exu"))
|
||||
{
|
||||
if (!strcmp(_rec_filename + strlen(_rec_filename) - 4,".exu"))
|
||||
_src_type = FTYPE_EXU;
|
||||
if (_dest_type == FTYPE_UNKNOWN)
|
||||
{
|
||||
_dest_type = DEST_EXU;
|
||||
_dest_type = FTYPE_EXU;
|
||||
_dest = "./output.exu";
|
||||
}
|
||||
else if (!strcmp(_rec_filename + strlen(_rec_filename) - 4,".rec"))
|
||||
}
|
||||
else if (!strcmp(_src_filename + strlen(_src_filename) - 4,".rec"))
|
||||
{
|
||||
_dest_type = DEST_DIR;
|
||||
_src_type = FTYPE_REC;
|
||||
if (_dest_type == FTYPE_UNKNOWN)
|
||||
{
|
||||
_dest_type = FTYPE_DIR;
|
||||
_dest = ".";
|
||||
}
|
||||
}
|
||||
|
@ -618,21 +654,21 @@ int main(int argc, char **argv)
|
|||
fprintf(stderr, "no program specified\nUse -h for more information\n");
|
||||
goto end;
|
||||
}
|
||||
if (!_rec_filename)
|
||||
if (!_src_filename)
|
||||
{
|
||||
fprintf(stderr, "no test file specified\n");
|
||||
goto end;
|
||||
}
|
||||
else
|
||||
{
|
||||
char *slash = strrchr(_rec_filename, '/');
|
||||
char *slash = strrchr(_src_filename, '/');
|
||||
if (slash) _test_name = strdup(slash + 1);
|
||||
else _test_name = strdup(_rec_filename);
|
||||
else _test_name = strdup(_src_filename);
|
||||
char *dot = strrchr(_test_name, '.');
|
||||
if (dot) *dot = '\0';
|
||||
}
|
||||
|
||||
if (_dest_type == DEST_EXU)
|
||||
if (_dest_type == FTYPE_EXU)
|
||||
{
|
||||
_dest_unit = calloc(1, sizeof(*_dest_unit));
|
||||
}
|
||||
|
@ -655,19 +691,19 @@ int main(int argc, char **argv)
|
|||
_printf(1, "\n");
|
||||
|
||||
ecore_evas_callback_new_set(_my_evas_new);
|
||||
_prg_invoke(_prg_full_path_guess(argv[0]), argc - optind, argv);
|
||||
pret = _prg_invoke(_prg_full_path_guess(argv[0]), argc - optind, argv);
|
||||
|
||||
if (_dest_unit)
|
||||
{
|
||||
_dest_unit->events = _events_list->variant_list;
|
||||
_dest_unit->events = _src_unit->events;
|
||||
Eet_Data_Descriptor *unit_edd = unit_desc_make();
|
||||
Eet_File *file = eet_open(_dest, EET_FILE_MODE_WRITE);
|
||||
eet_data_write(file, unit_edd, CACHE_FILE_ENTRY, _dest_unit, EINA_TRUE);
|
||||
eet_close(file);
|
||||
}
|
||||
pret = 0;
|
||||
|
||||
end:
|
||||
eet_shutdown();
|
||||
eina_shutdown();
|
||||
return pret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue