static gboolean parse_MTrk (GstMidiParse * midiparse, guint8 * data, guint size) { GstMidiTrack *track; GstClockTime duration; /* ignore excess tracks */ if (midiparse->track_count >= midiparse->ntracks) return TRUE; track = g_slice_new (GstMidiTrack); track->data = data; track->size = size; reset_track (track, midiparse); midiparse->tracks = g_list_append (midiparse->tracks, track); midiparse->track_count++; /* now loop over all events and calculate the duration */ while (!track->eot) { handle_next_event (midiparse, track, NULL, NULL); } duration = gst_util_uint64_scale (track->pulse, 1000 * midiparse->tempo, midiparse->division); GST_DEBUG_OBJECT (midiparse, "duration %" GST_TIME_FORMAT, GST_TIME_ARGS (duration)); if (duration > midiparse->segment.duration) midiparse->segment.duration = duration; reset_track (track, midiparse); return TRUE; }
findrcost() { SEGBOXPTR segptr ; CHANGRDPTR gdptr ; DENSITYPTR *hdptr , headptr , dptr ; INT chan ; INT trackG , max_trk , k ; INT net ; for( net = 1 ; net <= numnetsG ; net++ ) { for( segptr = netsegHeadG[net]->next ; segptr ; segptr = segptr->next ){ initial_tracks( segptr ) ; } for( segptr = netsegHeadG[net]->next ; segptr ; segptr = segptr->next ){ process_cross( segptr , 0 ) ; } } DboxHeadG = ( DENSITYPTR ** )Ysafe_calloc( numChansG + 1, sizeof( DENSITYPTR * ) ) ; maxTrackG = (INT *)Ysafe_malloc( ( numChansG + 1 ) * sizeof( INT ) ) ; nmaxTrackG = (INT *)Ysafe_malloc( ( numChansG + 1 ) * sizeof( INT ) ) ; max_tdensityG = 0 ; tracksG = 0 ; if( uneven_cell_heightG ) { set_cedgebin( ) ; reset_track( ) ; } for( chan = 1 ; chan <= numChansG ; chan++ ) { max_trk = 0 ; for( gdptr = BeginG[ chan ] ; gdptr != GRDNULL ; gdptr = gdptr->nextgrd ) { if( gdptr->tracks > max_trk ) { max_trk = gdptr->tracks ; } } maxTrackG[ chan ] = max_trk ; if( max_trk > max_tdensityG ) { max_tdensityG = max_trk ; } tracksG += max_trk ; } printf(" the starting value of tracks = %4d\n" , tracksG ) ; k = max_tdensityG + 100 ; for( chan = 1 ; chan <= numChansG ; chan++ ) { DboxHeadG[ chan ] = hdptr = ( DENSITYPTR *)Ysafe_calloc( k + 1, sizeof( DENSITYPTR) ) ; for( trackG = 0 ; trackG <= k ; trackG++ ) { hdptr[trackG] = ( DENSITYPTR )Ysafe_calloc( 1, sizeof(DENSITYBOX)); } for( gdptr = BeginG[ chan ] ; gdptr ; gdptr = gdptr->nextgrd ) { trackG = gdptr->tracks ; gdptr->dptr = dptr = ( DENSITYPTR )Ysafe_calloc( 1,sizeof(DENSITYBOX) ) ; headptr = hdptr[trackG] ; if( headptr->next ) { dptr->next = headptr->next ; dptr->next->back = dptr ; headptr->next = dptr ; dptr->back = headptr; } else { headptr->next = dptr ; dptr->back = headptr ; } dptr->grdptr = gdptr ; } } }