Changeset 196

Show
Ignore:
Timestamp:
01/16/08 13:40:36 (4 years ago)
Author:
ath
Message:

Fixes for FmElement's new API.

Location:
fm_server/trunk/src
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • fm_server/trunk/src/fm_djmixer.c

    r143 r196  
    4747static gboolean fm_djmixer_activate     (FmElement      *element); 
    4848static void fm_djmixer_get_buffer       (FmElement      *element, 
    49                                          FmBuffer       *buffer); 
     49                                         FmBuffer       *buffer, 
     50                                         FmSync         *sync); 
    5051static void fm_djmixer_set_gain         (FmDJMixer      *djm, 
    5152                                         gint           port_n, 
     
    5758                                         guint          port_n, 
    5859                                         gdouble        value); 
     60static void fm_djmixer_become_sync_ref  (FmElement      *element, 
     61                                         FmSync         *sync); 
    5962 
    6063 
     
    132135        element_class->activate = fm_djmixer_activate; 
    133136        element_class->get_buffer = fm_djmixer_get_buffer; 
     137        element_class->become_sync_ref = fm_djmixer_become_sync_ref; 
    134138} 
    135139 
     
    299303static void 
    300304fm_djmixer_get_buffer                   (FmElement      *element, 
    301                                          FmBuffer       *buffer) 
     305                                         FmBuffer       *buffer, 
     306                                         FmSync         *sync) 
    302307{ 
    303308        FmDJMixer *djm = FM_DJMIXER (element); 
    304309 
    305         fm_element_get_buffer (FM_ELEMENT (djm->master_level), buffer); 
    306 } 
     310        fm_element_get_buffer (FM_ELEMENT (djm->master_level), buffer, element->sync_ref); 
     311} 
     312 
     313 
     314static void 
     315fm_djmixer_become_sync_ref              (FmElement      *element, 
     316                                         FmSync         *sync) 
     317{ 
     318        FmDJMixer *djm = FM_DJMIXER (element); 
     319 
     320        g_print ("FmDJMixer has become sync ref!\n"); 
     321 
     322        FmElement *mixer_el = FM_ELEMENT (djm->mixer); 
     323        mixer_el->sync_ref = sync; 
     324} 
  • fm_server/trunk/src/fm_input_cdj.c

    r181 r196  
    6464FmInputState fm_input_cdj_get_state     (FmInput        *input); 
    6565static void fm_input_cdj_update_bpm     (FmInputCDJ     *input_cdj); 
    66 static void fm_input_cdj_become_sync_master (FmElement  *element); 
     66static void fm_input_cdj_become_sync_master (FmElement  *element, 
     67                                         FmSync         *sync); 
    6768static void fm_input_cdj_get_buffer     (FmElement      *element, 
    68                                          FmBuffer       *buffer); 
     69                                         FmBuffer       *buffer, 
     70                                         FmSync         *sync); 
    6971static void fm_input_cdj_input_state_changed_cb (FmInput *input, 
    7072                                         FmInputState   state, 
     
    277279 
    278280static void 
    279 fm_input_cdj_become_sync_master         (FmElement      *element) 
    280 { 
    281 #define BPM 120 
     281fm_input_cdj_become_sync_master         (FmElement      *element, 
     282                                         FmSync         *sync) 
     283{ 
    282284        g_print ("FmInputCDJ has become sync master!\n"); 
    283285 
    284         FmSync *sync = fm_element_pipeline_get_sync_info (element); 
    285  
    286         sync->bpm = BPM; 
     286        sync->in_use = TRUE; 
     287 
     288        sync->bpm = 120.0; 
    287289        sync->beat_per_bar = 4; 
    288290} 
     
    291293static void 
    292294fm_input_cdj_get_buffer                 (FmElement      *element, 
    293                                          FmBuffer       *buffer) 
     295                                         FmBuffer       *buffer, 
     296                                         FmSync         *sync) 
    294297{ 
    295298        FmInputCDJ *input_cdj = FM_INPUT_CDJ (element); 
     
    300303 
    301304         
    302         fm_element_get_buffer (FM_ELEMENT (input_cdj->rate), buffer); 
     305//      fm_element_get_buffer (FM_ELEMENT (input_cdj->rate), buffer, sync); 
     306        fm_element_get_buffer (FM_ELEMENT (input_cdj->input), buffer, sync); 
     307//      g_print ("went %lld nsec ahead\n", (long long int) FM_BUFFER_DURATION (buffer)); 
    303308 
    304309        //g_print ("Used %d samples\n", fm_effect_rate_input_frames_used (input_cdj->rate)); 
    305310 
    306 //      if (fm_element_is_sync_master (element)) 
    307 //              fm_sync_master_played_samples (sync, fm_effect_rate_input_frames_used (input_cdj->rate)); 
     311 
     312 
     313        if (fm_element_is_sync_master (element)) { 
     314                if (FM_BUFFER_DISCONT (buffer)) { 
     315                        g_print ("**************************************************************************************************\n"); 
     316                        g_print ("DISCONT buffer! new pos %llu\n", (long long unsigned int) FM_BUFFER_TIMESTAMP (buffer)); 
     317                        fm_sync_set (sync, 0, FM_BUFFER_TIMESTAMP (buffer)); 
     318                        FM_BUFFER_DISCONT (buffer) = FALSE; 
     319                } else { 
     320                        fm_sync_master_played_ns (sync, FM_BUFFER_DURATION (buffer)); 
     321                        fm_sync_update_cycle (sync); 
     322                } 
     323 
     324                if (FM_BUFFER_DURATION (buffer) > 0) 
     325                        fm_sync_show_pos (sync); 
     326        } 
    308327} 
    309328 
     
    453472                                         gint           value) 
    454473{ 
    455 #define SAMPLES_FOR_UNIT 10000 
     474#define NSECS_FOR_UNIT (1000L * 1000 * 100) 
    456475 
    457476        g_print ("A seek button pressed while "); 
     
    465484        g_return_if_fail (value != 0); 
    466485 
    467         glong offset = value * SAMPLES_FOR_UNIT; 
     486        gint64 offset = value * NSECS_FOR_UNIT; 
    468487        fm_input_gst_seek_relative (input_cdj->input, offset); 
    469488} 
  • fm_server/trunk/src/fm_mixer.c

    r81 r196  
    222222void 
    223223fm_mixer_get_buffer                     (FmElement      *element, 
    224                                          FmBuffer       *buffer) 
     224                                         FmBuffer       *buffer, 
     225                                         FmSync         *sync) 
    225226{ 
    226227        FmMixer *mixer = FM_MIXER (element); 
     
    236237        GList *port = element->sink_ports; 
    237238        gint i = 0; 
     239 
     240//g_print("%p\n", element->sync_ref); 
     241 
     242        if (element->peer_sync_master) { 
     243                FM_BUFFER_REQUESTED (mixer->buffers[i]) = FM_BUFFER_REQUESTED (buffer); 
     244                 
     245                fm_element_get_buffer (element->peer_sync_master, mixer->buffers[i++], sync); 
     246        } 
     247 
    238248        while (port) { 
    239249                FmElementSinkPort *our_port = (FmElementSinkPort *) port->data; 
    240250                FmElementSrcPort *peer_port = our_port->peer; 
    241251 
     252                if (element->peer_sync_master == peer_port->owner) 
     253                        continue; 
     254 
    242255                FM_BUFFER_REQUESTED (mixer->buffers[i]) = FM_BUFFER_REQUESTED (buffer); 
    243256//              g_print("i %d\n", i); 
    244                 fm_element_get_buffer (FM_ELEMENT (peer_port->owner), mixer->buffers[i++]); 
     257                fm_element_get_buffer (FM_ELEMENT (peer_port->owner), mixer->buffers[i++], sync); 
    245258 
    246259                port = g_list_next (port); 
  • fm_server/trunk/src/fm_mixer.h

    r10 r196  
    7070void 
    7171fm_mixer_get_buffer                     (FmElement      *element, 
    72                                          FmBuffer       *buffer); 
     72                                         FmBuffer       *buffer, 
     73                                         FmSync         *sync);