diff --git a/ecdb/trunk/src/ecdb_audio.c b/ecdb/trunk/src/ecdb_audio.c index 1c66121..fdf2f1f 100644 --- a/ecdb/trunk/src/ecdb_audio.c +++ b/ecdb/trunk/src/ecdb_audio.c @@ -1,2 +1,81 @@ #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; +} + diff --git a/ecdb/trunk/src/ecdb_audio.h b/ecdb/trunk/src/ecdb_audio.h index e2e4209..c8b42ce 100644 --- a/ecdb/trunk/src/ecdb_audio.h +++ b/ecdb/trunk/src/ecdb_audio.h @@ -1,6 +1,7 @@ #ifndef ECDB_AUDIO_H #define ECDB_AUDIO_H -int ecdb_audio_project_setup(Ecdb_Burn_Project *proj); +Ecdb_Audio_Project *ecdb_audio_project_new(void); +void ecdb_audio_project_start(Ecdb_Audio_Project *proj); #endif diff --git a/ecdb/trunk/src/ecdb_common.h b/ecdb/trunk/src/ecdb_common.h index 1ebc4e3..763d62a 100644 --- a/ecdb/trunk/src/ecdb_common.h +++ b/ecdb/trunk/src/ecdb_common.h @@ -111,6 +111,21 @@ struct _Ecdb_Burn_Project /* Typecast a pointer to an Ecdb_Burn_Project */ #define ECDB_BURN(proj) ((Ecdb_Burn_Project *) proj) +typedef struct _Ecdb_Audio_Project Ecdb_Audio_Project; +struct _Ecdb_Audio_Project +{ + /* Inherit from normal project */ + Ecdb_Project proj; + + /* Audio tracks */ + Ecdb_Source *tracks; + int num_tracks; + int num_transcode_complete; +}; + +/* Typecast a pointer to an Ecdb_Audio_Project */ +#define ECDB_AUDIO(proj) ((Ecdb_Audio_Project *) proj) + typedef struct _Ecdb_Erase_Project Ecdb_Erase_Project; struct _Ecdb_Erase_Project { diff --git a/ecdb/trunk/tools/ecdb_transcode_helper/ecdb_transcode_helper.c b/ecdb/trunk/tools/ecdb_transcode_helper/ecdb_transcode_helper.c index af5d82e..30b0711 100644 --- a/ecdb/trunk/tools/ecdb_transcode_helper/ecdb_transcode_helper.c +++ b/ecdb/trunk/tools/ecdb_transcode_helper/ecdb_transcode_helper.c @@ -11,8 +11,7 @@ bus_call(GstBus *bus, GstMessage *msg, gpointer data) { case GST_MESSAGE_EOS: { - g_print("End of stream\n"); - g_print("Send data back to main program\n"); + g_print("EOS\n"); g_main_loop_quit(loop); break; } @@ -24,8 +23,7 @@ bus_call(GstBus *bus, GstMessage *msg, gpointer data) gst_message_parse_error(msg, &err, &debug); g_free(debug); - g_print("Error: %s\n", err->message); - g_print("Send error back to main program\n"); + g_print("%s\n", err->message); g_error_free(err); g_main_loop_quit(loop);