105 lines
2.3 KiB
C
105 lines
2.3 KiB
C
/* vim: set sw=3 ts=3 sts=3 expandtab: */
|
|
#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;
|
|
}
|
|
|
|
ecdb_project_type_set(ECDB_PROJECT(proj), ECDB_AUDIO_PROJECT);
|
|
proj->tracks = ecdb_source_new();
|
|
proj->num_tracks = 0;
|
|
proj->num_transcode_complete = 0;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
ecdb_audio_project_destroy(Ecdb_Audio_Project *proj)
|
|
{
|
|
ecdb_source_destroy(proj->tracks);
|
|
ecdb_project_destroy(ECDB_PROJECT(proj));
|
|
free(proj);
|
|
}
|
|
|
|
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; 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_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++;
|
|
|
|
printf("Message: %s\n", rec);
|
|
|
|
if (!strcmp(rec, "EOS"))
|
|
{
|
|
printf("Transcode complete\n");
|
|
proj->num_transcode_complete++;
|
|
}
|
|
else
|
|
{
|
|
printf("Error!\n"); // How to handle these?
|
|
}
|
|
|
|
if (proj->num_tracks == proj->num_transcode_complete)
|
|
{
|
|
printf("Hurrah, transcoding is done!\n");
|
|
|
|
/* Change to another event later */
|
|
ecore_event_add(ECORE_EVENT_SIGNAL_EXIT, NULL, NULL, NULL);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|