#include "ecdb.h" int transcode_data_cb(void *data, int type, void *event); int ecdb_audio_project_init(Ecdb_Audio_Project *proj); Ecdb_Audio_Project * ecdb_audio_project_new(void) { Ecdb_Audio_Project *proj; proj = calloc(1, sizeof(Ecdb_Audio_Project)); if (!proj) return NULL; if (!ecdb_audio_project_init(proj)) { FREE(proj); return NULL; } return proj; } int ecdb_audio_project_init(Ecdb_Audio_Project *proj) { if (!ecdb_project_init(ECDB_PROJECT(proj))) return FALSE; proj->tracks = ecdb_source_new(); proj->num_tracks = 0; proj->num_transcode_complete = 0; return TRUE; } void ecdb_audio_project_start(Ecdb_Audio_Project *proj) { char cmd[PATH_MAX]; //<-- + 20ish? int i; /* Fork off the gstreamer program for every file to be added */ for (i = 0; proj->tracks->children[i]; i++) { snprintf(cmd, PATH_MAX, "ecdb_transcode_helper %s", proj->tracks->children[i]->dst); ecore_exe_pipe_run(cmd, ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_AUTO, NULL); } proj->num_tracks = i - 1; ecore_event_handler_add(ECORE_EXE_EVENT_DATA, transcode_data_cb, proj); } int transcode_data_cb(void *data, int type, void *event) { const char *rec; Ecore_Exe_Event_Data *ev = event; Ecdb_Audio_Project *proj = data; rec = ev->data; printf("Message: %s\n", rec); if (!strcmp(rec, "EOS")) { printf("Transcode complete\n"); proj->num_transcode_complete++; } /* How to handle errors? */ else printf("Error!\n"); if (proj->num_tracks == proj->num_transcode_complete) printf("Hurrah, transcoding is done!\n"); return 1; }