| @@ -1151,6 +1151,55 @@ jack_nframes_t jack_frame_time (const jack_client_t *) JACK_OPTIONAL_WEAK_EXPORT | |||||
| */ | */ | ||||
| jack_nframes_t jack_last_frame_time (const jack_client_t *client) JACK_OPTIONAL_WEAK_EXPORT; | jack_nframes_t jack_last_frame_time (const jack_client_t *client) JACK_OPTIONAL_WEAK_EXPORT; | ||||
| /** | |||||
| * This function may only be used from the process callback. | |||||
| * It provides the internal cycle timing information as used by | |||||
| * most of the other time related functions. This allows the | |||||
| * caller to map between frame counts and microseconds with full | |||||
| * precision (i.e. without rounding frame times to integers), | |||||
| * and also provides e.g. the microseconds time of the start of | |||||
| * the current cycle directly (it has to be computed otherwise). | |||||
| * | |||||
| * If the return value is zero, the following information is | |||||
| * provided in the variables pointed to by the arguments: | |||||
| * | |||||
| * current_frames: the frame time counter at the start of the | |||||
| * current cycle, same as jack_last_frame_time(). | |||||
| * current_usecs: the microseconds time at the start of the | |||||
| * current cycle. | |||||
| * next_usecs: the microseconds time of the start of the next | |||||
| * next cycle as computed by the DLL. | |||||
| * period_usecs: the current best estimate of the period time in | |||||
| * microseconds. | |||||
| * | |||||
| * NOTES: | |||||
| * | |||||
| * Because of the types used, all the returned values except period_usecs | |||||
| * are unsigned. In computations mapping between frames and microseconds | |||||
| * *signed* differences are required. The easiest way is to compute those | |||||
| * separately and assign them to the appropriate signed variables, | |||||
| * int32_t for frames and int64_t for usecs. See the implementation of | |||||
| * jack_frames_to_time() and Jack_time_to_frames() for an example. | |||||
| * | |||||
| * Unless there was an xrun, skipped cycles, or the current cycle is the | |||||
| * first after freewheeling or starting Jack, the value of current_usecs | |||||
| * will always be the value of next_usecs of the previous cycle. | |||||
| * | |||||
| * The value of period_usecs will in general NOT be exactly equal to | |||||
| * the difference of next_usecs and current_usecs. This is because to | |||||
| * ensure stability of the DLL and continuity of the mapping, a fraction | |||||
| * of the loop error must be included in next_usecs. For an accurate | |||||
| * mapping between frames and microseconds, the difference of next_usecs | |||||
| * and current_usecs should be used, and not period_usecs. | |||||
| * | |||||
| * @return zero if OK, non-zero otherwise. | |||||
| */ | |||||
| int jack_get_cycle_times (const jack_client_t *client, | |||||
| jack_nframes_t *current_frames, | |||||
| jack_time_t *current_usecs, | |||||
| jack_time_t *next_usecs, | |||||
| float *period_usecs) JACK_OPTIONAL_WEAK_EXPORT; | |||||
| /** | /** | ||||
| * @return the estimated time in microseconds of the specified frame time | * @return the estimated time in microseconds of the specified frame time | ||||
| */ | */ | ||||