diff --git a/ecdb/trunk/README b/ecdb/trunk/README index f9cd6d6..e76eaa2 100644 --- a/ecdb/trunk/README +++ b/ecdb/trunk/README @@ -1,3 +1,4 @@ CD Burner INFO++; +Needs to be installed for audio transcoding to work correctly diff --git a/ecdb/trunk/src/ecdb.c b/ecdb/trunk/src/ecdb.c index 9428b2e..9af7651 100644 --- a/ecdb/trunk/src/ecdb.c +++ b/ecdb/trunk/src/ecdb.c @@ -38,9 +38,9 @@ main(int argc, char **argv) ecdb_burn_init(); /* Start testing */ - Ecdb_Burn_Project *proj; + Ecdb_Audio_Project *proj; Ecdb_Source *src; - proj = ecdb_burn_project_new(); + proj = ecdb_audio_project_new(); i = 1; while ((i < argc) && (argv)) @@ -48,20 +48,22 @@ main(int argc, char **argv) /* No trailing slashes */ if (ecore_file_exists(argv[i])) { - if (ecore_file_is_dir(argv[i])) - ret = 1; - src = ecdb_source_new(); - ecdb_source_data_set(src, argv[i], ret); - ecdb_source_child_append(proj->files, src); - - ret = 0; + if (!ecore_file_is_dir(argv[i])) + { + src = ecdb_source_new(); + ecdb_source_data_set(src, argv[i], 0); + ecdb_source_child_append(proj->tracks, src); + } } i++; } + ecdb_audio_project_start(proj); + + /* proj->publisher_id = proj->data_preparer_id = proj->system_id = proj->application_id = proj->copywrite_id = - proj->abstract_id = proj->biblio_id = "ecdb"; + proj->abstract_id = proj->biblio_id = strdup("ecdb"); if (!ecdb_aquire_drive(ECDB_PROJECT(proj), 0)) { @@ -77,6 +79,8 @@ main(int argc, char **argv) goto SHUTDOWN; } + */ + ecore_main_loop_begin(); /* End testing */ @@ -98,6 +102,9 @@ ecdb_setup(void) em->drives = NULL; em->projects = ecore_list_new(); + if (!ecore_file_mkdir("/tmp/ecdb")) + printf("Creation of temporary directory failed!\n"); + ECDB_DRIVE_ACTION_FINISHED = ecore_event_type_new(); ECDB_DRIVE_ACTION_BEGUN = ecore_event_type_new(); ECDB_DRIVE_ACTION_UPDATE = ecore_event_type_new(); diff --git a/ecdb/trunk/src/ecdb_audio.c b/ecdb/trunk/src/ecdb_audio.c index fdf2f1f..1ba8b40 100644 --- a/ecdb/trunk/src/ecdb_audio.c +++ b/ecdb/trunk/src/ecdb_audio.c @@ -33,22 +33,33 @@ ecdb_audio_project_init(Ecdb_Audio_Project *proj) 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 */ + /* 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_AUTO, NULL); + ECORE_EXE_PIPE_READ_LINE_BUFFERED, NULL); } - proj->num_tracks = i - 1; + proj->num_tracks = i; ecore_event_handler_add(ECORE_EXE_EVENT_DATA, transcode_data_cb, proj); } @@ -60,6 +71,7 @@ transcode_data_cb(void *data, int type, void *event) Ecdb_Audio_Project *proj = data; rec = ev->data; + proj->num_transcode_complete++; printf("Message: %s\n", rec); @@ -74,7 +86,12 @@ transcode_data_cb(void *data, int type, void *event) printf("Error!\n"); 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; } diff --git a/ecdb/trunk/src/ecdb_audio.h b/ecdb/trunk/src/ecdb_audio.h index c8b42ce..359c1a0 100644 --- a/ecdb/trunk/src/ecdb_audio.h +++ b/ecdb/trunk/src/ecdb_audio.h @@ -3,5 +3,6 @@ Ecdb_Audio_Project *ecdb_audio_project_new(void); void ecdb_audio_project_start(Ecdb_Audio_Project *proj); +void ecdb_audio_project_destroy(Ecdb_Audio_Project *proj); #endif diff --git a/ecdb/trunk/src/ecdb_burn.c b/ecdb/trunk/src/ecdb_burn.c index c0e4e07..8907b81 100644 --- a/ecdb/trunk/src/ecdb_burn.c +++ b/ecdb/trunk/src/ecdb_burn.c @@ -81,6 +81,29 @@ ecdb_erase_project_init(Ecdb_Erase_Project *proj) return TRUE; } +void +ecdb_burn_project_destroy(Ecdb_Burn_Project *proj) +{ + ecdb_source_destroy(proj->files); + FREE(proj->volume_id); + FREE(proj->publisher_id); + FREE(proj->data_preparer_id); + FREE(proj->system_id); + FREE(proj->application_id); + FREE(proj->copywrite_id); + FREE(proj->abstract_id); + FREE(proj->biblio_id); + ecdb_project_destroy(ECDB_PROJ(proj)); + free(proj); +} + +void +ecdb_erase_project_destroy(Ecdb_Erase_Project *proj) +{ + ecdb_project_destroy(ECDB_PROJ(proj)); + free(proj); +} + /* Erase and Burn Function */ int ecdb_burn_project(Ecdb_Burn_Project *proj) diff --git a/ecdb/trunk/src/ecdb_burn.h b/ecdb/trunk/src/ecdb_burn.h index bb1c59f..8c43447 100644 --- a/ecdb/trunk/src/ecdb_burn.h +++ b/ecdb/trunk/src/ecdb_burn.h @@ -5,5 +5,7 @@ int ecdb_burn_project(Ecdb_Burn_Project *proj); int ecdb_erase_disc(Ecdb_Erase_Project *proj); Ecdb_Burn_Project *ecdb_burn_project_new(void); Ecdb_Erase_Project *ecdb_erase_project_new(void); +void ecdb_burn_project_destroy(Ecdb_Burn_Project *proj); +void ecdb_erase_project_destroy(Ecdb_Erase_Project *proj); #endif diff --git a/ecdb/trunk/src/ecdb_image.c b/ecdb/trunk/src/ecdb_image.c index 6d85791..eaf1bc5 100644 --- a/ecdb/trunk/src/ecdb_image.c +++ b/ecdb/trunk/src/ecdb_image.c @@ -31,6 +31,26 @@ ecdb_source_init(Ecdb_Source *src) return TRUE; } +void +ecdb_source_destroy(Ecdb_Source *src) +{ + int i; + Ecdb_Source *child; + + /* free the non-recursive stuff */ + FREE(src->dst); + if (src->node) + iso_node_unref(src->node); + + for (i = 0; src->children[i]; i++) + { + child = src->children[i]; + ecdb_source_destroy(child); + } + + free(src); +} + void ecdb_source_data_set(Ecdb_Source *src, const char *dst, unsigned char rec) { diff --git a/ecdb/trunk/src/ecdb_image.h b/ecdb/trunk/src/ecdb_image.h index 5cd91f1..1d505ab 100644 --- a/ecdb/trunk/src/ecdb_image.h +++ b/ecdb/trunk/src/ecdb_image.h @@ -2,6 +2,7 @@ #define ECDB_IMAGE_H Ecdb_Source *ecdb_source_new(void); +void ecdb_source_destroy(Ecdb_Source *src); void ecdb_source_data_set(Ecdb_Source *src, const char *dst, unsigned char rec); void ecdb_source_child_append(Ecdb_Source *src, Ecdb_Source *child); diff --git a/ecdb/trunk/src/ecdb_misc.c b/ecdb/trunk/src/ecdb_misc.c index cda7832..0c08e2f 100644 --- a/ecdb/trunk/src/ecdb_misc.c +++ b/ecdb/trunk/src/ecdb_misc.c @@ -24,6 +24,13 @@ ecdb_project_init(Ecdb_Project *proj) return TRUE; } +void +ecdb_project_destroy(Ecdb_Project *proj) +{ + ecdb_lose_drive_info(proj); + free(proj); +} + int ecdb_shutdown(void *data, int type, void *event) { @@ -32,6 +39,9 @@ ecdb_shutdown(void *data, int type, void *event) if (em->drives) ecore_list_destroy(em->drives); free(em); + + if (!ecore_file_recursive_rm("/tmp/ecdb")) + printf("Removal of temporary directory failed!\n"); ecore_main_loop_quit(); return FALSE; } diff --git a/ecdb/trunk/src/ecdb_misc.h b/ecdb/trunk/src/ecdb_misc.h index 6c0849b..c2dcaa0 100644 --- a/ecdb/trunk/src/ecdb_misc.h +++ b/ecdb/trunk/src/ecdb_misc.h @@ -3,6 +3,7 @@ Ecdb_Project *ecdb_project_new(void); int ecdb_project_init(Ecdb_Project *proj); +void ecdb_project_destroy(void); int ecdb_shutdown(void *data, int type, void *event); void ecdb_burn_init(void); void ecdb_image_init(void); 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 30b0711..88f4086 100644 --- a/ecdb/trunk/tools/ecdb_transcode_helper/ecdb_transcode_helper.c +++ b/ecdb/trunk/tools/ecdb_transcode_helper/ecdb_transcode_helper.c @@ -71,6 +71,7 @@ main (int argc, char ** argv) GstCaps *filtercaps; GstPad *audiopad; GstBus *bus; + gchar *path, *filename; gst_init (&argc, &argv); loop = g_main_loop_new (NULL, FALSE); @@ -113,7 +114,15 @@ main (int argc, char ** argv) audiopad = gst_element_get_static_pad(conv, "sink"); sink = gst_element_factory_make ("filesink", NULL); - g_object_set(G_OBJECT(sink), "location", "/home/jaime/test.wav", NULL); + + /* Generate filename */ + filename = g_path_get_basename(argv[1]); + path = g_strconcat("/tmp/ecdb/", filename, ".wav", NULL); + g_object_set(G_OBJECT(sink), "location", path, NULL); + + free(filename); + free(path); + gst_bin_add_many(GST_BIN (audio), conv, resample, filter, sink, NULL); gst_element_link_many(conv, resample, filter, sink, NULL); gst_element_add_pad (audio, gst_ghost_pad_new ("sink", audiopad));