61 lines
1.5 KiB
C
61 lines
1.5 KiB
C
/* vim: set sw=3 ts=3 sts=3 expandtab: */
|
|
#include "ecdb.h"
|
|
|
|
int transcode_data_cb(void *data, int type, void *event);
|
|
|
|
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
|
|
* Depending on the number of files, this can be pretty system intensive, so
|
|
* is there a way to reduce/control this ?
|
|
*/
|
|
for (i = 0; ECDB_BURN(proj)->files->children[i]; i++)
|
|
{
|
|
snprintf(cmd, PATH_MAX, "ecdb_transcode_helper %s",
|
|
ECDB_BURN(proj)->files->children[i]->dst);
|
|
ecore_exe_pipe_run(cmd, ECORE_EXE_PIPE_READ |
|
|
ECORE_EXE_PIPE_READ_LINE_BUFFERED, 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;
|
|
proj->num_transcode_complete++;
|
|
|
|
EINA_ERROR_PDBG("Message: %s\n", rec);
|
|
|
|
if (!strcmp(rec, "EOS"))
|
|
{
|
|
EINA_ERROR_PDBG("Transcode complete\n");
|
|
proj->num_transcode_complete++;
|
|
}
|
|
else
|
|
{
|
|
EINA_ERROR_PWARN("Error!\n"); // How to handle these?
|
|
}
|
|
|
|
if (proj->num_tracks == proj->num_transcode_complete)
|
|
{
|
|
EINA_ERROR_PINFO("Hurrah, transcoding is done!\n");
|
|
|
|
/* Change to another event later */
|
|
ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, NULL, NULL, NULL);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|