예제 #1
0
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;
}
예제 #2
0
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 ;
    }
}
}