Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  clock.h   Sprache: C

 

/*****************************************************************************
 * clock.h: Output modules synchronisation clock
 *****************************************************************************
 * Copyright (C) 2018-2019 VLC authors, VideoLAN and Videolabs SAS
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
 *****************************************************************************/

#ifndef CLOCK_H
#define CLOCK_H

#include <vlc_clock.h>

enum vlc_clock_master_source
{
    VLC_CLOCK_MASTER_AUTO= 0,
    VLC_CLOCK_MASTER_AUDIO,
    VLC_CLOCK_MASTER_INPUT,
    VLC_CLOCK_MASTER_MONOTONIC,
};

/**
 * Callbacks for the owner of the main clock
 */

struct vlc_clock_cbs
{
    /**
     * Called when a clock is updated
     *
     * @param system_ts system date when the ts will be rendered,
     * VLC_TICK_INVALID when the clock is reset or VLC_TICK_MAX when the update
     * is forced (an output was still rendered while paused for example). Note:
     * when valid, this date can be in the future, it is not necessarily now.
     * @param ts stream timestamp or VLC_TICK_INVALID when the clock is reset,
     * should be subtracted with VLC_TICK_0 to get the original value
     * @param rate rate used when updated
     * @param frame_rate fps of the video owning the clock
     * @param frame_rate_base fps denominator
     * @param data opaque pointer set from vlc_clock_main_New()
     */

    void (*on_update)(vlc_tick_t system_ts, vlc_tick_t ts, double rate,
                      unsigned frame_rate, unsigned frame_rate_base,
                      void *data);
};

/**
 * Event callbacks for the user of a vlc_clock_t
 */

struct vlc_clock_event_cbs
{
    /**
     * Called when the master source triggered a discontinuity.
     *
     * A discontinuity happens when:
     *  - The first point is updated from the master source
     *
     * @param data opaque pointer set from vlc_clock_main_New()
     */

    void (*on_discontinuity)(void *data);
};

typedef struct vlc_clock_listener_id vlc_clock_listener_id;

/**
 * This function creates the vlc_clock_main_t of the program
 */

vlc_clock_main_t *vlc_clock_main_New(struct vlc_logger *parent_logger, struct vlc_tracer *parent_tracer);

/**
 * Destroy the clock main
 *
 * @param main_clock the unlocked main_clock
 */

void vlc_clock_main_Delete(vlc_clock_main_t *main_clock);

/**
 * Lock the main_clock mutex
 *
 * All vlc_clock_main_t functions must be called with the lock held, except
 * vlc_clock_main_Delete()
 *
 * @param main_clock the unlocked main_clock
 */

void vlc_clock_main_Lock(vlc_clock_main_t *main_clock);

/**
 * Unlock the main_clock mutex
 *
 * @param main_clock the locked main_clock
 */

void vlc_clock_main_Unlock(vlc_clock_main_t *main_clock);

/**
 * Reset the vlc_clock_main_t
 *
 * @param main_clock the locked main_clock
 */

void vlc_clock_main_Reset(vlc_clock_main_t *main_clock);

/**
 * Set the first PCR point
 *
 * @param main_clock the locked main_clock
 */

void vlc_clock_main_SetFirstPcr(vlc_clock_main_t *main_clock,
                                vlc_tick_t system_now, vlc_tick_t ts);

/**
 * Set the input dejitter
 *
 * @param main_clock the locked main_clock
 */

void vlc_clock_main_SetInputDejitter(vlc_clock_main_t *main_clock,
                                     vlc_tick_t delay);

/**
 * This function sets the dejitter delay to absorb the clock jitter
 *
 * Also used as the maximum delay before the synchro is considered to kick in.
 *
 * @param main_clock the locked main_clock
 */

void vlc_clock_main_SetDejitter(vlc_clock_main_t *main_clock, vlc_tick_t dejitter);


/**
 * This function allows changing the pause status.
 *
 * @param main_clock the locked main_clock
 */

void vlc_clock_main_ChangePause(vlc_clock_main_t *clock, vlc_tick_t system_now,
                                bool paused);

/**
 * This function creates a new master vlc_clock_t interface
 *
 * @warning There can be only one master at a given time.
 *
 * You must use vlc_clock_Delete to free it.
 *
 * @param main_clock the locked main_clock
 */

vlc_clock_t *vlc_clock_main_CreateMaster(vlc_clock_main_t *main_clock,
                                         const char *track_str_id,
                                         const struct vlc_clock_cbs *cbs,
                                         void *cbs_data);

/**
 * This function creates a new input master vlc_clock_t interface
 *
 * Once the input master is created, the current or future master clock created
 * from vlc_clock_main_CreateMaster() will be demoted as slave.
 *
 * @warning There can be only one input master at a given time.
 *
 * You must use vlc_clock_Delete to free it.
 *
 * @param main_clock the locked main_clock
 */

vlc_clock_t *vlc_clock_main_CreateInputMaster(vlc_clock_main_t *main_clock);

/**
 * This function creates a new input slave vlc_clock_t interface
 *
 * @warning There can be only one input, slave or master, at a given time.
 *
 * You must use vlc_clock_Delete to free it.
 *
 * @param main_clock the locked main_clock
 */

vlc_clock_t *vlc_clock_main_CreateInputSlave(vlc_clock_main_t *main_clock);

/**
 * This function creates a new slave vlc_clock_t interface
 *
 * You must use vlc_clock_Delete to free it.
 *
 * @param main_clock the locked main_clock
 */

vlc_clock_t *vlc_clock_main_CreateSlave(vlc_clock_main_t *main_clock,
                                        const char *track_str_id,
                                        enum es_format_category_e cat,
                                        const struct vlc_clock_cbs *cbs,
                                        void *cbs_data);

/**
 * This function creates a new slave vlc_clock_t interface
 *
 * You must use vlc_clock_Delete to free it.
 *
 * @param main_clock the locked main_clock
 */

vlc_clock_t *vlc_clock_CreateSlave(const vlc_clock_t *clock,
                                   enum es_format_category_e cat);

/**
 * This function free the resources allocated by vlc_clock*Create*()
 *
 * @param clock the unlocked clock used by the source
 */

void vlc_clock_Delete(vlc_clock_t *clock);

/**
 * This function will update the clock drift and returns the drift
 *
 * @param clock the locked clock used by the source
 * @param system_now valid system time or VLC_TICK_MAX is the updated point is
 *        forced (when paused for example)
 * @param ts the timestamp in media time for the updated point
 * @param rate the current playback speed
 *
 * @return a valid drift relative time, VLC_TICK_INVALID if there is no drift
 * (clock is master)
 */

vlc_tick_t vlc_clock_Update(vlc_clock_t *clock, vlc_tick_t system_now,
                            vlc_tick_t ts, double rate);

/**
 * This function will update the video clock drift and returns the drift
 *
 * Same behavior than vlc_clock_Update() except that the video is passed to the
 * clock, this will be used for clock update callbacks.
 */

vlc_tick_t vlc_clock_UpdateVideo(vlc_clock_t *clock, vlc_tick_t system_now,
                                 vlc_tick_t ts, double rate,
                                 unsigned frame_rate, unsigned frame_rate_base);

/**
 * This function resets the clock drift
 *
 * @param clock the locked clock used by the source
 */

void vlc_clock_Reset(vlc_clock_t *clock);

/**
 * This functions change the clock delay
 *
 * It returns the amount of time the clock owner need to wait in order to reach
 * the time introduced by the new positive delay.
 *
 * @param clock the locked clock used by the source
 */

vlc_tick_t vlc_clock_SetDelay(vlc_clock_t *clock, vlc_tick_t ts_delay);

/**
 * Lock the clock mutex
 *
 * @param clock the unlocked clock used by the source
 */

void vlc_clock_Lock(vlc_clock_t *clock);

/**
 * Unlock the clock mutex
 *
 * @param clock the locked clock used by the source
 */

void vlc_clock_Unlock(vlc_clock_t *clock);

/**
 * Indicate if the clock is paused
 *
 * The clock mutex must be locked.
 *
 * @param clock the locked clock used by the source
 * @retval true if the clock is paused
 * @retval false if the clock is not paused
 */

bool vlc_clock_IsPaused(const vlc_clock_t *clock);

/**
 * Wait for a timestamp expressed in system time
 *
 * The wait will be interrupted (signaled) on clock state changes which could
 * invalidate the computed deadline. In that case, the caller must recompute
 * the new deadline and call it again.
 *
 * @param clock the locked clock used by the source
 * @return 0 if the condition was signaled, an error code in case of timeout
 */

int vlc_clock_Wait(vlc_clock_t *clock, vlc_tick_t system_deadline);

/**
 * Wake up any vlc_clock_Wait()
 *
 * @param clock the locked clock used by the source
 */

void vlc_clock_Wake(vlc_clock_t *clock);

/**
 * Add a listener for events
 *
 * @param clock the locked clock used by the source
 * @param cbs valid pointer to register events
 * @param data opaque data used by cbs
 * @return a valid listener id, or NULL in case of allocation error
 */

vlc_clock_listener_id *
vlc_clock_AddListener(vlc_clock_t *clock,
                      const struct vlc_clock_event_cbs *cbs,
                      void *data);

/**
 * Remove a event listener callback
 *
 * @param clock the locked clock used by the source
 * @param listener_id listener id returned by vlc_clock_AddListener()
 */

void
vlc_clock_RemoveListener(vlc_clock_t *clock, vlc_clock_listener_id *listener_id);

/**
 * This function converts a timestamp from stream to system
 *
 * @param clock the locked clock used by the source
 * @param clock_id pointer to the clock id used for conversion. Can be NULL.
 * @return the valid system time
 */

vlc_tick_t vlc_clock_ConvertToSystem(vlc_clock_t *clock,
                                     vlc_tick_t system_now, vlc_tick_t ts,
                                     double rate, uint32_t *clock_id);

/**
 * Starts a new clock based on the given clock point, accounting for
 * previous updates.
 *
 * @param clock       an input or output clock that is being started
 * @param start_date  the system time at which the first update starts
 * @param first_ts    the media time origin
 **/

void vlc_clock_Start(vlc_clock_t *clock,
                     vlc_tick_t start_date,
                     vlc_tick_t first_ts);

#endif /*CLOCK_H*/

Messung
CHZG
849610093

¤ Dauer der Verarbeitung: 0.12 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1104842
#Domains=499162