X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fevoral%2Fsrc%2Flibsmf%2Fsmf.c;h=3fde1d831e7b021191360ff70908677a3b753e20;hb=3020b224fa2d6e1b6b8a576e8e8e211e0585f2a2;hp=88206511dc7c751e2633d910c43ab3b971cbd220;hpb=13bcd4342315eb20d5a27a06ba03f6890e20478a;p=ardour.git diff --git a/libs/evoral/src/libsmf/smf.c b/libs/evoral/src/libsmf/smf.c index 88206511dc..3fde1d831e 100644 --- a/libs/evoral/src/libsmf/smf.c +++ b/libs/evoral/src/libsmf/smf.c @@ -39,7 +39,11 @@ #include #include #include +#ifdef PLATFORM_WINDOWS +#include +#else #include +#endif #include "smf.h" #include "smf_private.h" @@ -52,7 +56,7 @@ smf_new(void) { int cantfail; - smf_t *smf = malloc(sizeof(smf_t)); + smf_t *smf = (smf_t*)malloc(sizeof(smf_t)); if (smf == NULL) { g_critical("Cannot allocate smf_t structure: %s", strerror(errno)); return (NULL); @@ -85,7 +89,7 @@ smf_delete(smf_t *smf) { /* Remove all the tracks, from last to first. */ while (smf->tracks_array->len > 0) - smf_track_delete(g_ptr_array_index(smf->tracks_array, smf->tracks_array->len - 1)); + smf_track_delete((smf_track_t*)g_ptr_array_index(smf->tracks_array, smf->tracks_array->len - 1)); smf_fini_tempo(smf); @@ -105,14 +109,14 @@ smf_delete(smf_t *smf) smf_track_t * smf_track_new(void) { - smf_track_t *track = malloc(sizeof(smf_track_t)); + smf_track_t *track = (smf_track_t*)malloc(sizeof(smf_track_t)); if (track == NULL) { g_critical("Cannot allocate smf_track_t structure: %s", strerror(errno)); return (NULL); } memset(track, 0, sizeof(smf_track_t)); - track->next_event_number = -1; + track->next_event_number = 0; track->events_array = g_ptr_array_new(); assert(track->events_array); @@ -131,7 +135,7 @@ smf_track_delete(smf_track_t *track) /* Remove all the events, from last to first. */ while (track->events_array->len > 0) - smf_event_delete(g_ptr_array_index(track->events_array, track->events_array->len - 1)); + smf_event_delete((smf_event_t*)g_ptr_array_index(track->events_array, track->events_array->len - 1)); if (track->smf) smf_track_remove_from_smf(track); @@ -151,7 +155,9 @@ smf_track_delete(smf_track_t *track) void smf_add_track(smf_t *smf, smf_track_t *track) { +#ifndef NDEBUG int cantfail; +#endif assert(track->smf == NULL); @@ -162,8 +168,13 @@ smf_add_track(smf_t *smf, smf_track_t *track) track->track_number = smf->number_of_tracks; if (smf->number_of_tracks > 1) { +#ifndef NDEBUG cantfail = smf_set_format(smf, 1); assert(!cantfail); +#else + smf_set_format(smf, 1); +#endif + } } @@ -173,7 +184,8 @@ smf_add_track(smf_t *smf, smf_track_t *track) void smf_track_remove_from_smf(smf_track_t *track) { - int i, j; + int i; + size_t j; smf_track_t *tmp; smf_event_t *ev; @@ -212,7 +224,7 @@ smf_track_remove_from_smf(smf_track_t *track) smf_event_t * smf_event_new(void) { - smf_event_t *event = malloc(sizeof(smf_event_t)); + smf_event_t *event = (smf_event_t*)malloc(sizeof(smf_event_t)); if (event == NULL) { g_critical("Cannot allocate smf_event_t structure: %s", strerror(errno)); return (NULL); @@ -236,7 +248,7 @@ smf_event_new(void) * \return Event containing MIDI data or NULL. */ smf_event_t * -smf_event_new_from_pointer(void *midi_data, int len) +smf_event_new_from_pointer(const void *midi_data, size_t len) { smf_event_t *event; @@ -245,12 +257,12 @@ smf_event_new_from_pointer(void *midi_data, int len) return (NULL); event->midi_buffer_length = len; - event->midi_buffer = malloc(event->midi_buffer_length); + event->midi_buffer = (uint8_t*)malloc(event->midi_buffer_length); if (event->midi_buffer == NULL) { g_critical("Cannot allocate MIDI buffer structure: %s", strerror(errno)); smf_event_delete(event); - return (NULL); + return (NULL); } memcpy(event->midi_buffer, midi_data, len); @@ -268,7 +280,7 @@ smf_event_new_from_pointer(void *midi_data, int len) * like this: * * smf_event_new_from_bytes(0xC0, 0x42, -1); - * + * * \param first_byte First byte of MIDI message. Must be valid status byte. * \param second_byte Second byte of MIDI message or -1, if message is one byte long. * \param third_byte Third byte of MIDI message or -1, if message is two bytes long. @@ -277,7 +289,7 @@ smf_event_new_from_pointer(void *midi_data, int len) smf_event_t * smf_event_new_from_bytes(int first_byte, int second_byte, int third_byte) { - int len; + size_t len; smf_event_t *event; @@ -335,12 +347,12 @@ smf_event_new_from_bytes(int first_byte, int second_byte, int third_byte) } event->midi_buffer_length = len; - event->midi_buffer = malloc(event->midi_buffer_length); + event->midi_buffer = (uint8_t*)malloc(event->midi_buffer_length); if (event->midi_buffer == NULL) { g_critical("Cannot allocate MIDI buffer structure: %s", strerror(errno)); smf_event_delete(event); - return (NULL); + return (NULL); } event->midi_buffer[0] = first_byte; @@ -376,12 +388,12 @@ smf_event_delete(smf_event_t *event) static gint events_array_compare_function(gconstpointer aa, gconstpointer bb) { - smf_event_t *a, *b; - + const smf_event_t *a, *b; + /* "The comparison function for g_ptr_array_sort() doesn't take the pointers from the array as arguments, it takes pointers to the pointers in the array." */ - a = (smf_event_t *)*(gpointer *)aa; - b = (smf_event_t *)*(gpointer *)bb; + a = (const smf_event_t *)*(const gpointer *)aa; + b = (const smf_event_t *)*(const gpointer *)bb; if (a->time_pulses < b->time_pulses) return (-1); @@ -408,7 +420,7 @@ events_array_compare_function(gconstpointer aa, gconstpointer bb) * An assumption here is that if there is an EOT event, it will be at the end of the track. */ static void -remove_eot_if_before_pulses(smf_track_t *track, int pulses) +remove_eot_if_before_pulses(smf_track_t *track, size_t pulses) { smf_event_t *event; @@ -436,12 +448,11 @@ remove_eot_if_before_pulses(smf_track_t *track, int pulses) void smf_track_add_event(smf_track_t *track, smf_event_t *event) { - int i, last_pulses = 0; + size_t i, last_pulses = 0; assert(track->smf != NULL); assert(event->track == NULL); assert(event->delta_time_pulses == -1); - assert(event->time_pulses >= 0); assert(event->time_seconds >= 0.0); remove_eot_if_before_pulses(track, event->time_pulses); @@ -450,7 +461,7 @@ smf_track_add_event(smf_track_t *track, smf_event_t *event) event->track_number = track->track_number; if (track->number_of_events == 0) { - assert(track->next_event_number == -1); + assert(track->next_event_number == 0); track->next_event_number = 1; } @@ -517,7 +528,7 @@ smf_track_add_event(smf_track_t *track, smf_event_t *event) * \return 0 if everything went ok, nonzero otherwise. */ int -smf_track_add_eot_delta_pulses(smf_track_t *track, int delta) +smf_track_add_eot_delta_pulses(smf_track_t *track, uint32_t delta) { smf_event_t *event; @@ -531,7 +542,7 @@ smf_track_add_eot_delta_pulses(smf_track_t *track, int delta) } int -smf_track_add_eot_pulses(smf_track_t *track, int pulses) +smf_track_add_eot_pulses(smf_track_t *track, size_t pulses) { smf_event_t *event, *last_event; @@ -576,7 +587,8 @@ smf_track_add_eot_seconds(smf_track_t *track, double seconds) void smf_event_remove_from_track(smf_event_t *event) { - int i, was_last; + size_t i; + int was_last; smf_event_t *tmp; smf_track_t *track; @@ -597,7 +609,7 @@ smf_event_remove_from_track(smf_event_t *event) g_ptr_array_remove(track->events_array, event); if (track->number_of_events == 0) - track->next_event_number = -1; + track->next_event_number = 0; /* Renumber the rest of the events, so they are consecutively numbered. */ for (i = event->event_number; i <= track->number_of_events; i++) { @@ -614,9 +626,9 @@ smf_event_remove_from_track(smf_event_t *event) } event->track = NULL; - event->event_number = -1; + event->event_number = 0; event->delta_time_pulses = -1; - event->time_pulses = -1; + event->time_pulses = 0; event->time_seconds = -1.0; } @@ -667,10 +679,8 @@ smf_set_format(smf_t *smf, int format) * \param ppqn New PPQN. */ int -smf_set_ppqn(smf_t *smf, int ppqn) +smf_set_ppqn(smf_t *smf, uint16_t ppqn) { - assert(ppqn > 0); - smf->ppqn = ppqn; return (0); @@ -689,12 +699,15 @@ smf_track_get_next_event(smf_track_t *track) { smf_event_t *event, *next_event; + /* Track is empty? */ + if (track->number_of_events == 0) + return (NULL); + /* End of track? */ - if (track->next_event_number == -1) + if (track->next_event_number == 0) return (NULL); assert(track->next_event_number >= 1); - assert(track->number_of_events > 0); event = smf_track_get_event_by_number(track, track->next_event_number); @@ -708,7 +721,7 @@ smf_track_get_next_event(smf_track_t *track) track->time_of_next_event = next_event->time_pulses; track->next_event_number++; } else { - track->next_event_number = -1; + track->next_event_number = 0; } return (event); @@ -725,7 +738,7 @@ smf_peek_next_event_from_track(smf_track_t *track) smf_event_t *event; /* End of track? */ - if (track->next_event_number == -1) + if (track->next_event_number == 0) return (NULL); assert(track->next_event_number >= 1); @@ -762,7 +775,7 @@ smf_get_track_by_number(const smf_t *smf, int track_number) * Events are numbered consecutively starting from one. */ smf_event_t * -smf_track_get_event_by_number(const smf_track_t *track, int event_number) +smf_track_get_event_by_number(const smf_track_t *track, size_t event_number) { smf_event_t *event; @@ -771,7 +784,7 @@ smf_track_get_event_by_number(const smf_track_t *track, int event_number) if (event_number > track->number_of_events) return (NULL); - event = g_ptr_array_index(track->events_array, event_number - 1); + event = (smf_event_t*)g_ptr_array_index(track->events_array, event_number - 1); assert(event); @@ -788,7 +801,7 @@ smf_track_get_last_event(const smf_track_t *track) if (track->number_of_events == 0) return (NULL); - + event = smf_track_get_event_by_number(track, track->number_of_events); return (event); @@ -802,7 +815,8 @@ smf_track_get_last_event(const smf_track_t *track) smf_track_t * smf_find_track_with_next_event(smf_t *smf) { - int i, min_time = 0; + int i; + size_t min_time = 0; smf_track_t *track = NULL, *min_time_track = NULL; /* Find track with event that should be played next. */ @@ -812,7 +826,7 @@ smf_find_track_with_next_event(smf_t *smf) assert(track); /* No more events in this track? */ - if (track->next_event_number == -1) + if (track->next_event_number == 0) continue; if (track->time_of_next_event < min_time || min_time_track == NULL) { @@ -842,7 +856,7 @@ smf_get_next_event(smf_t *smf) } event = smf_track_get_next_event(track); - + assert(event != NULL); event->track->smf->last_seek_position = -1.0; @@ -857,9 +871,8 @@ smf_get_next_event(smf_t *smf) void smf_skip_next_event(smf_t *smf) { - void *notused; - - notused = smf_get_next_event(smf); + smf_event_t *ignored = smf_get_next_event(smf); + (void) ignored; } /** @@ -881,7 +894,7 @@ smf_peek_next_event(smf_t *smf) } event = smf_peek_next_event_from_track(track); - + assert(event != NULL); return (event); @@ -913,7 +926,7 @@ smf_rewind(smf_t *smf) assert(event); track->time_of_next_event = event->time_pulses; } else { - track->next_event_number = -1; + track->next_event_number = 0; track->time_of_next_event = 0; #if 0 g_warning("Warning: empty track."); @@ -947,7 +960,7 @@ smf_seek_to_event(smf_t *smf, const smf_event_t *target) smf_skip_next_event(smf); else break; - } + } smf->last_seek_position = event->time_seconds; @@ -1002,12 +1015,10 @@ smf_seek_to_seconds(smf_t *smf, double seconds) * smf_get_next_event will return first event that happens after the first ten pulses. */ int -smf_seek_to_pulses(smf_t *smf, int pulses) +smf_seek_to_pulses(smf_t *smf, size_t pulses) { smf_event_t *event; - assert(pulses >= 0); - smf_rewind(smf); #if 0 @@ -1036,16 +1047,17 @@ smf_seek_to_pulses(smf_t *smf, int pulses) /** * \return Length of SMF, in pulses. */ -int +size_t smf_get_length_pulses(const smf_t *smf) { - int pulses = 0, i; + int i; + size_t pulses = 0; for (i = 1; i <= smf->number_of_tracks; i++) { smf_track_t *track; smf_event_t *event; - track = smf_get_track_by_number(smf, i); + track = smf_get_track_by_number(smf, i); assert(track); event = smf_track_get_last_event(track);