transport.h

Go to the documentation of this file.
00001 /*
00002     Copyright (C) 2002 Paul Davis
00003     Copyright (C) 2003 Jack O'Quin
00004     
00005     This program is free software; you can redistribute it and/or modify
00006     it under the terms of the GNU Lesser General Public License as published by
00007     the Free Software Foundation; either version 2.1 of the License, or
00008     (at your option) any later version.
00009     
00010     This program is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013     GNU Lesser General Public License for more details.
00014     
00015     You should have received a copy of the GNU Lesser General Public License
00016     along with this program; if not, write to the Free Software 
00017     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00018 
00019     $Id: transport.h,v 1.17 2003/10/31 21:24:19 joq Exp $
00020 */
00021 
00022 #ifndef __jack_transport_h__
00023 #define __jack_transport_h__
00024 
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028 
00029 #include <jack/types.h>
00030 
00034 typedef enum {
00035 
00036         /* the order matters for binary compatibility */
00037         JackTransportStopped = 0,       
00038         JackTransportRolling = 1,       
00039         JackTransportLooping = 2,       
00040         JackTransportStarting = 3       
00042 } jack_transport_state_t;
00043 
00044 typedef uint64_t jack_unique_t;         
00049 typedef enum {
00050 
00051         JackPositionBBT =       0x10,   
00052         JackPositionTimecode =  0x20    
00054 } jack_position_bits_t;
00055 
00057 #define JACK_POSITION_MASK (JackPositionBBT|JackPositionTimecode)
00058 #define EXTENDED_TIME_INFO
00059 
00063 typedef struct {
00064     
00065     /* these four cannot be set from clients: the server sets them */
00066     jack_unique_t       unique_1;       
00067     jack_time_t         usecs;          
00068     jack_nframes_t      frame_rate;     
00069     jack_nframes_t      frame;          
00071     jack_position_bits_t valid;         
00073     /* JackPositionBBT fields: */
00074     int32_t             bar;            
00075     int32_t             beat;           
00076     int32_t             tick;           
00077     double              bar_start_tick;            
00078 
00079     float               beats_per_bar;
00080     float               beat_type;
00081     double              ticks_per_beat;
00082     double              beats_per_minute;
00083 
00084     /* JackPositionTimecode fields:     (EXPERIMENTAL: could change) */
00085     double              frame_time;     
00086     double              next_time;      
00089     /* For binary compatibility, new fields should be allocated from
00090      * this padding area with new valid bits controlling access, so
00091      * the existing structure size and offsets are preserved. */
00092     int32_t             padding[10];
00093 
00094     /* When (unique_1 == unique_2) the contents are consistent. */
00095     jack_unique_t       unique_2;       
00097 } jack_position_t;
00098 
00115 int  jack_release_timebase (jack_client_t *client);
00116 
00137 typedef int  (*JackSyncCallback)(jack_transport_state_t state,
00138                                  jack_position_t *pos,
00139                                  void *arg);
00140 
00159 int  jack_set_sync_callback (jack_client_t *client,
00160                              JackSyncCallback sync_callback,
00161                              void *arg);
00162 
00180 int  jack_set_sync_timeout (jack_client_t *client,
00181                             jack_time_t timeout);
00182 
00211 typedef void (*JackTimebaseCallback)(jack_transport_state_t state,
00212                                      jack_nframes_t nframes, 
00213                                      jack_position_t *pos,
00214                                      int new_pos,
00215                                      void *arg);
00216 
00242 int  jack_set_timebase_callback (jack_client_t *client,
00243                                  int conditional,
00244                                  JackTimebaseCallback timebase_callback,
00245                                  void *arg);
00246 
00263 int  jack_transport_locate (jack_client_t *client,
00264                             jack_nframes_t frame);
00265 
00281 jack_transport_state_t jack_transport_query (const jack_client_t *client,
00282                                              jack_position_t *pos);
00283 
00291 jack_nframes_t jack_get_current_transport_frame (const jack_client_t *client);
00292                                                  
00309 int  jack_transport_reposition (jack_client_t *client,
00310                                 jack_position_t *pos);
00311 
00323 void jack_transport_start (jack_client_t *client);
00324 
00333 void jack_transport_stop (jack_client_t *client);
00334 
00335 
00336 /*********************************************************************
00337  * The following interfaces are DEPRECATED.  They are only provided
00338  * for compatibility with the earlier JACK transport implementation.
00339  *********************************************************************/
00340 
00346 typedef enum {
00347 
00348         JackTransportState =    0x1,    
00349         JackTransportPosition = 0x2,    
00350         JackTransportLoop =     0x4,    
00351         JackTransportSMPTE =    0x8,    
00352         JackTransportBBT =      0x10    
00354 } jack_transport_bits_t;
00355 
00362 typedef struct {
00363     
00364     /* these two cannot be set from clients: the server sets them */
00365 
00366     jack_nframes_t frame_rate;          
00367     jack_time_t    usecs;               
00369     jack_transport_bits_t  valid;       
00370     jack_transport_state_t transport_state;         
00371     jack_nframes_t         frame;
00372     jack_nframes_t         loop_start;
00373     jack_nframes_t         loop_end;
00374 
00375     long           smpte_offset;        
00376     float          smpte_frame_rate;    
00378     int            bar;
00379     int            beat;
00380     int            tick;
00381     double         bar_start_tick;            
00382 
00383     float          beats_per_bar;
00384     float          beat_type;
00385     double         ticks_per_beat;
00386     double         beats_per_minute;
00387 
00388 } jack_transport_info_t;
00389         
00402 void jack_get_transport_info (jack_client_t *client,
00403                               jack_transport_info_t *tinfo);
00404 
00412 void jack_set_transport_info (jack_client_t *client,
00413                               jack_transport_info_t *tinfo);
00414 
00415 #ifdef __cplusplus
00416 }
00417 #endif
00418 
00419 #endif /* __jack_transport_h__ */

Generated on Thu Nov 27 14:04:06 2003 for JACK-AUDIO-CONNECTION-KIT by doxygen 1.3.3