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

New sync API.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • fm_server/trunk/src/fm_element.h

    r144 r195  
    3535#define FM_ELEMENT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), FM_TYPE_ELEMENT, FmElementClass)) 
    3636 
    37 typedef enum _FmElementPads FmElementPads; 
    3837typedef struct _FmElement FmElement; 
    3938typedef struct _FmElementClass FmElementClass; 
    4039 
    41 enum _FmElementPads { 
    42         PAD_NONE, 
    43         PAD_SINGLE, 
    44         PAD_MULTIPLE 
    45 }; 
    4640 
    4741typedef struct _FmElementSrcPort FmElementSrcPort; 
     
    6458 
    6559 
     60typedef struct _FmSync FmSync; 
     61struct _FmSync { 
     62        gboolean        in_use; 
     63 
     64        FmElement       *master; 
     65 
     66        /* written from fm_element_become_sync_master */ 
     67        gdouble         bpm; 
     68        gint            beat_per_bar; 
     69 
     70        /* automatically generated */ 
     71        gdouble         ns_per_beat; 
     72 
     73        /* updated on update_cycle() */ 
     74        gint            bar; 
     75        gint            beat; 
     76        gfloat          beat_offset_ns; 
     77 
     78        gdouble         bpm_new; 
     79        guint           played_ns_new; 
     80}; 
     81 
    6682 
    6783 
     
    7187        gchar           *name; 
    7288         
    73         //FmElementPads src_pads; 
    74         /*GList         *src_list;*/ 
    75         GList           *src_ports; 
     89        GList           *src_ports;             // dove esce l'audio 
    7690         
    77         //FmElementPads sink_pads; 
    78         /*GList         *sink_list;*/ 
    79         GList           *sink_ports; 
     91        GList           *sink_ports;            // dove entra l'audio 
     92        FmElement       *peer_sync_master; 
    8093         
    8194        gboolean        active; 
     
    8497        // yes, I know this is an hack 
    8598        gpointer        pipeline; 
     99 
     100        FmSync          *sync_ref; 
     101        gboolean        sync_master; 
    86102}; 
    87103 
     
    95111        gboolean (*activate)            (FmElement      *element); 
    96112        gboolean (*deactivate)          (FmElement      *element); 
    97         void (*become_sync_master)      (FmElement      *element); 
     113        void (*become_sync_ref)         (FmElement      *element, 
     114                                         FmSync         *sync); 
     115        void (*become_sync_master)      (FmElement      *element, 
     116                                         FmSync         *sync); 
    98117        void (*get_buffer)              (FmElement      *element, 
    99                                          FmBuffer       *buffer); 
     118                                         FmBuffer       *buffer, 
     119                                         FmSync         *sync); 
    100120}; 
    101121 
     
    114134fm_element_get_name                     (FmElement      *element); 
    115135 
    116 gpointer 
    117 fm_element_pipeline_get_sync_info       (FmElement      *element); 
     136inline gboolean 
     137fm_element_is_sync_ref                  (FmElement      *element); 
    118138 
    119 gboolean 
     139inline gboolean 
    120140fm_element_is_sync_master               (FmElement      *element); 
    121141 
     
    138158void 
    139159fm_element_get_buffer                   (FmElement      *element, 
    140                                          FmBuffer       *buffer); 
     160                                         FmBuffer       *buffer, 
     161                                         FmSync         *sync); 
    141162 
    142163void 
     
    148169void 
    149170fm_element_get_buffer_from_src          (FmElement      *element, 
    150                                          FmBuffer       *buffer); 
     171                                         FmBuffer       *buffer, 
     172                                         FmSync         *sync); 
     173 
     174void 
     175fm_element_sync_ref_set_peer_master     (FmElement      *reference, 
     176                                         FmElement      *peer_sync_master);