VLC 4.0.0-dev
Loading...
Searching...
No Matches
es_out.c File Reference
Include dependency graph for es_out.c:

Data Structures

struct  es_out_pgrm_t
 
struct  vlc_es_id_t
 Opaque structure representing an ES (Elementary Stream) track. More...
 
struct  es_out_id_t
 
struct  es_out_es_props_t
 
struct  es_out_sys_t
 
struct  clock_source_mapping
 

Macros

#define foreach_es_then_es_slaves(pos)
 
#define IGNORE_ES   DATA_ES
 

Functions

static void EsOutDelLocked (es_out_t *, es_out_id_t *)
 
static void EsOutDel (es_out_t *, es_out_id_t *)
 
static void EsOutTerminate (es_out_t *)
 
static void EsOutSelect (es_out_t *out, es_out_id_t *es, bool b_force)
 Select an ES given the current mode XXX: you need to take a the lock before (stream.stream_lock)
 
static void EsOutSelectList (es_out_t *, enum es_format_category_e cat, vlc_es_id_t *const *es_id_list)
 
static void EsOutUpdateInfo (es_out_t *, es_out_id_t *es, const vlc_meta_t *)
 
static int EsOutSetRecord (es_out_t *, bool b_record, const char *dir_path)
 
static bool EsIsSelected (es_out_id_t *es)
 
static void EsOutSelectEs (es_out_t *out, es_out_id_t *es, bool b_force)
 
static void EsOutDeleteInfoEs (es_out_t *, es_out_id_t *es)
 
static void EsOutUnselectEs (es_out_t *out, es_out_id_t *es, bool b_update)
 
static void EsOutDecoderChangeDelay (es_out_t *out, es_out_id_t *p_es)
 
static void EsOutDecodersChangePause (es_out_t *out, bool b_paused, vlc_tick_t i_date)
 
static void EsOutChangePosition (es_out_t *out, bool b_flush, es_out_id_t *p_next_frame_es)
 
static void EsOutProgramChangePause (es_out_t *out, bool b_paused, vlc_tick_t i_date)
 
static void EsOutProgramsChangeRate (es_out_t *out)
 
static void EsOutDecodersStopBuffering (es_out_t *out, bool b_forced)
 
static void EsOutGlobalMeta (es_out_t *p_out, const vlc_meta_t *p_meta)
 
static void EsOutMeta (es_out_t *p_out, const vlc_meta_t *p_meta, const vlc_meta_t *p_progmeta)
 
static int EsOutEsUpdateFmt (es_out_t *out, es_out_id_t *es, const es_format_t *fmt)
 
static int EsOutControlLocked (es_out_t *out, input_source_t *, int i_query,...)
 
static int EsOutPrivControlLocked (es_out_t *out, input_source_t *, int i_query,...)
 
static char * LanguageGetName (const char *psz_code)
 
static char * LanguageGetCode (const char *psz_lang)
 
static char ** LanguageSplit (const char *psz_langs)
 
static int LanguageArrayIndex (char **ppsz_langs, const char *psz_lang)
 
static char * EsOutProgramGetMetaName (es_out_pgrm_t *p_pgrm)
 
static char * EsInfoCategoryName (es_out_id_t *es)
 
static int clock_source_mapping_cmp (const void *key, const void *val)
 
static enum vlc_clock_master_source clock_source_Inherit (vlc_object_t *obj)
 
static void decoder_on_vout_started (vlc_input_decoder_t *decoder, vout_thread_t *vout, enum vlc_vout_order order, void *userdata)
 
static void decoder_on_vout_stopped (vlc_input_decoder_t *decoder, vout_thread_t *vout, void *userdata)
 
static void decoder_on_thumbnail_ready (vlc_input_decoder_t *decoder, picture_t *pic, void *userdata)
 
static void decoder_on_new_video_stats (vlc_input_decoder_t *decoder, unsigned decoded, unsigned lost, unsigned displayed, unsigned late, void *userdata)
 
static void decoder_on_new_audio_stats (vlc_input_decoder_t *decoder, unsigned decoded, unsigned lost, unsigned played, void *userdata)
 
static int decoder_get_attachments (vlc_input_decoder_t *decoder, input_attachment_t ***ppp_attachment, void *userdata)
 
static es_out_es_props_tGetPropsByCat (es_out_sys_t *p_sys, int i_cat)
 
static void EsOutPropsCleanup (es_out_es_props_t *p_props)
 
static void EsOutPropsInit (es_out_es_props_t *p_props, bool autoselect, input_thread_t *p_input, enum input_type input_type, enum es_out_policy_e e_default_policy, const char *psz_trackidvar, const char *psz_trackvar, const char *psz_langvar, const char *psz_debug)
 
static void EsTerminate (es_out_id_t *es)
 
static char * EsGetTitle (es_out_id_t *es)
 
static void EsRelease (es_out_id_t *es)
 
static void EsHold (es_out_id_t *es)
 
static void EsOutDelete (es_out_t *out)
 
static void ProgramDelete (es_out_pgrm_t *p_pgrm)
 
static vlc_tick_t EsOutGetWakeup (es_out_t *out)
 
static bool EsOutDecodersIsEmpty (es_out_t *out)
 
static void EsOutUpdateDelayJitter (es_out_t *out)
 
static void EsOutSetEsDelay (es_out_t *out, es_out_id_t *es, vlc_tick_t delay)
 
static void EsOutSetDelay (es_out_t *out, int i_cat, vlc_tick_t i_delay)
 
static void EsOutStopNextFrame (es_out_t *out)
 
static void EsOutChangePause (es_out_t *out, bool b_paused, vlc_tick_t i_date)
 
static void EsOutChangeRate (es_out_t *out, float rate)
 
static void EsOutStopFreeVout (es_out_t *out)
 
static bool EsOutIsExtraBufferingAllowed (es_out_t *out)
 
static void EsOutFrameNext (es_out_t *out)
 
static vlc_tick_t EsOutGetBuffering (es_out_t *out)
 
static void EsOutSendEsEvent (es_out_t *out, es_out_id_t *es, int action, bool forced)
 
static vlc_tick_t ClockListenerUpdate (void *opaque, vlc_tick_t ck_system, vlc_tick_t ck_stream, double rate)
 
static void ClockListenerReset (void *opaque)
 
static void EsOutProgramHandleClockSource (es_out_t *out, es_out_pgrm_t *p_pgrm)
 
static bool EsOutIsGroupSticky (es_out_t *p_out, input_source_t *source, int i_group)
 
static bool EsOutIsProgramVisible (es_out_t *out, input_source_t *source, int i_group)
 
static void EsOutProgramSelect (es_out_t *out, es_out_pgrm_t *p_pgrm)
 
static es_out_pgrm_tEsOutProgramAdd (es_out_t *out, input_source_t *source, int i_group)
 
static es_out_pgrm_tEsOutProgramSearch (es_out_t *p_out, input_source_t *source, int i_group)
 
static es_out_pgrm_tEsOutProgramInsert (es_out_t *p_out, input_source_t *source, int i_group)
 
static int EsOutProgramDel (es_out_t *out, input_source_t *source, int i_group)
 
static char * EsOutProgramGetProgramName (es_out_pgrm_t *p_pgrm)
 
static void EsOutProgramMeta (es_out_t *out, input_source_t *source, int i_group, const vlc_meta_t *p_meta)
 
static void EsOutProgramEpgEvent (es_out_t *out, input_source_t *source, int i_group, const vlc_epg_event_t *p_event)
 
static void EsOutProgramEpg (es_out_t *out, input_source_t *source, int i_group, const vlc_epg_t *p_epg)
 
static void EsOutEpgTime (es_out_t *out, int64_t time)
 
static void EsOutProgramUpdateScrambled (es_out_t *p_out, es_out_pgrm_t *p_pgrm)
 
static void EsOutUpdateEsLanguageTitle (es_out_id_t *es, const es_format_t *fmt)
 
static void EsOutFillEsFmt (es_out_t *out, es_format_t *fmt)
 
static char * EsOutCreateStrId (es_out_id_t *es, bool stable, const char *id, es_out_id_t *p_master)
 
static es_out_id_tEsOutAddLocked (es_out_t *out, input_source_t *source, const es_format_t *fmt, es_out_id_t *p_master)
 
static es_out_id_tEsOutAdd (es_out_t *out, input_source_t *source, const es_format_t *fmt)
 
static void ClockUpdate (vlc_tick_t system_ts, vlc_tick_t ts, double rate, unsigned frame_rate, unsigned frame_rate_base, void *data)
 
static void EsOutCreateDecoder (es_out_t *out, es_out_id_t *p_es)
 
static void EsOutDeleteSubESes (es_out_t *out, es_out_id_t *parent)
 
static void EsOutDestroyDecoder (es_out_t *out, es_out_id_t *p_es)
 
static void EsOutDrainSubESes (es_out_id_t *parent)
 
static bool EsOutSelectMatchPrioritized (const es_out_es_props_t *p_esprops, const es_out_id_t *es)
 
static bool EsOutSelectHasExplicitParams (const es_out_es_props_t *p_esprops)
 
static bool EsOutIdMatchStrIds (const es_out_id_t *es, char *str_ids)
 
static bool EsOutSelectMatchExplicitParams (const es_out_es_props_t *p_esprops, const es_out_id_t *es)
 
static void EsOutSelectListFromProps (es_out_t *out, enum es_format_category_e cat)
 
static bool EsOutIdMatchEsList (const es_out_id_t *es, vlc_es_id_t *const *es_id_list)
 
static void EsOutCreateSubESes (es_out_t *out, struct vlc_subdec_desc *desc, es_out_id_t *parent)
 
static int EsOutSend (es_out_t *out, es_out_id_t *es, block_t *p_block)
 Send a block for the given es_out.
 
static void EsOutDrainDecoder (es_out_t *out, es_out_id_t *es, bool wait)
 
static int EsOutVaControlLocked (es_out_t *out, input_source_t *source, int i_query, va_list args)
 Control query handler.
 
static vlc_tick_t EsOutGetTracksDelay (es_out_t *out)
 
static int EsOutVaPrivControlLocked (es_out_t *out, input_source_t *source, int query, va_list args)
 
static int EsOutControl (es_out_t *out, input_source_t *source, int i_query, va_list args)
 
static int EsOutPrivControl (es_out_t *out, input_source_t *source, int query, va_list args)
 
es_out_tinput_EsOutNew (input_thread_t *p_input, input_source_t *main_source, float rate, enum input_type input_type)
 
static void info_category_AddCodecInfo (info_category_t *p_cat, const char *psz_info, vlc_fourcc_t i_fourcc, const char *psz_description)
 
es_out_id_tvlc_es_id_get_out (vlc_es_id_t *id)
 
vlc_es_id_tvlc_es_id_Hold (vlc_es_id_t *id)
 Increase the ES track id reference count.
 
void vlc_es_id_Release (vlc_es_id_t *id)
 Decrease the ES track id reference count.
 
int vlc_es_id_GetInputId (vlc_es_id_t *id)
 Get the ES track input id.
 
bool vlc_es_id_IsStrIdStable (vlc_es_id_t *id)
 Return whether the ES track identifier is stable.
 
const char * vlc_es_id_GetStrId (vlc_es_id_t *id)
 Get the unique string identifier.
 
enum es_format_category_e vlc_es_id_GetCat (vlc_es_id_t *id)
 Get the ES category.
 
const input_source_tvlc_es_id_GetSource (vlc_es_id_t *id)
 

Variables

static const struct vlc_input_decoder_callbacks decoder_cbs
 
static es_out_id_t es_cat [DATA_ES]
 
static const struct es_out_callbacks es_out_cbs
 

Macro Definition Documentation

◆ foreach_es_then_es_slaves

#define foreach_es_then_es_slaves (   pos)
Value:
for( int fetes_i=0; fetes_i<2; fetes_i++ ) \
vlc_list_foreach( pos, (!fetes_i ? &p_sys->es : &p_sys->es_slaves), node )
#define vlc_list_foreach(pos, head, member)
List iteration macro.
Definition vlc_list.h:284

◆ IGNORE_ES

#define IGNORE_ES   DATA_ES

Function Documentation

◆ clock_source_Inherit()

◆ clock_source_mapping_cmp()

static int clock_source_mapping_cmp ( const void *  key,
const void *  val 
)
static

◆ ClockListenerReset()

static void ClockListenerReset ( void *  opaque)
static

◆ ClockListenerUpdate()

static vlc_tick_t ClockListenerUpdate ( void *  opaque,
vlc_tick_t  ck_system,
vlc_tick_t  ck_stream,
double  rate 
)
static

◆ ClockUpdate()

static void ClockUpdate ( vlc_tick_t  system_ts,
vlc_tick_t  ts,
double  rate,
unsigned  frame_rate,
unsigned  frame_rate_base,
void *  data 
)
static

◆ decoder_get_attachments()

static int decoder_get_attachments ( vlc_input_decoder_t decoder,
input_attachment_t ***  ppp_attachment,
void *  userdata 
)
static

◆ decoder_on_new_audio_stats()

static void decoder_on_new_audio_stats ( vlc_input_decoder_t decoder,
unsigned  decoded,
unsigned  lost,
unsigned  played,
void *  userdata 
)
static

◆ decoder_on_new_video_stats()

static void decoder_on_new_video_stats ( vlc_input_decoder_t decoder,
unsigned  decoded,
unsigned  lost,
unsigned  displayed,
unsigned  late,
void *  userdata 
)
static

◆ decoder_on_thumbnail_ready()

static void decoder_on_thumbnail_ready ( vlc_input_decoder_t decoder,
picture_t pic,
void *  userdata 
)
static

◆ decoder_on_vout_started()

◆ decoder_on_vout_stopped()

◆ EsGetTitle()

◆ EsHold()

static void EsHold ( es_out_id_t es)
static

References es_out_id_t::rc, and vlc_atomic_rc_inc().

Referenced by vlc_es_id_Hold().

◆ EsInfoCategoryName()

static char * EsInfoCategoryName ( es_out_id_t es)
static

◆ EsIsSelected()

◆ EsOutAdd()

◆ EsOutAddLocked()

static es_out_id_t * EsOutAddLocked ( es_out_t out,
input_source_t source,
const es_format_t fmt,
es_out_id_t p_master 
)
static

References es_out_sys_t::audio, AUDIO_ES, es_out_id_t::b_scrambled, es_out_id_t::b_terminated, container_of, es_out_id_t::delay, es_out_sys_t::es, es_format_Clean(), es_format_Copy(), es_format_Init(), es_out_sys_t::es_slaves, EsOutCreateStrId(), EsOutFillEsFmt(), EsOutIsGroupSticky(), EsOutProgramInsert(), EsOutSelect(), EsOutSendEsEvent(), EsOutUpdateEsLanguageTitle(), EsOutUpdateInfo(), es_out_id_t::fmt, es_out_id_t::fmt_out, foreach_es_then_es_slaves, es_format_t::i_cat, vlc_es_id_t::i_cat, es_out_id_t::i_channel, es_format_t::i_codec, es_out_es_props_t::i_count, es_out_pgrm_t::i_es, es_format_t::i_group, es_format_t::i_id, vlc_es_id_t::i_id, es_format_t::i_original_fourcc, es_out_id_t::i_pos, es_out_id_t::i_pts_level, es_out_id_t::id, input_source_GetNewAutoId(), input_source_GetStrId(), input_source_Hold(), input_source_Release(), es_out_id_t::master, es_out_id_t::mouse_event_cb, es_out_id_t::mouse_event_userdata, msg_Err, es_out_id_t::node, es_out_id_t::out, es_out_id_t::p_clock, es_out_id_t::p_dec, es_out_id_t::p_dec_record, es_out_sys_t::p_input, es_out_id_t::p_master, es_out_id_t::p_pgrm, es_out_sys_t::p_pgrm, es_out_id_t::psz_language, es_out_id_t::psz_language_code, es_out_id_t::psz_title, es_out_id_t::rc, es_out_pgrm_t::source, vlc_es_id_t::source, SPU_ES, vlc_es_id_t::stable, vlc_es_id_t::str_id, es_out_sys_t::sub, es_out_id_t::sub_es_vec, UNKNOWN_ES, es_out_sys_t::video, VIDEO_ES, vlc_atomic_rc_init(), vlc_list_append(), VLC_SUCCESS, VLC_TICK_INVALID, VLC_TICK_MAX, and vlc_vector_init.

Referenced by EsOutAdd(), and EsOutCreateSubESes().

◆ EsOutChangePause()

◆ EsOutChangePosition()

◆ EsOutChangeRate()

static void EsOutChangeRate ( es_out_t out,
float  rate 
)
static

◆ EsOutControl()

static int EsOutControl ( es_out_t out,
input_source_t source,
int  i_query,
va_list  args 
)
static

◆ EsOutControlLocked()

static int EsOutControlLocked ( es_out_t out,
input_source_t source,
int  i_query,
  ... 
)
static

◆ EsOutCreateDecoder()

static void EsOutCreateDecoder ( es_out_t out,
es_out_id_t p_es 
)
static

◆ EsOutCreateStrId()

◆ EsOutCreateSubESes()

◆ EsOutDecoderChangeDelay()

◆ EsOutDecodersChangePause()

static void EsOutDecodersChangePause ( es_out_t out,
bool  b_paused,
vlc_tick_t  i_date 
)
static

◆ EsOutDecodersIsEmpty()

◆ EsOutDecodersStopBuffering()

◆ EsOutDel()

static void EsOutDel ( es_out_t out,
es_out_id_t es 
)
static

◆ EsOutDelete()

◆ EsOutDeleteInfoEs()

◆ EsOutDeleteSubESes()

static void EsOutDeleteSubESes ( es_out_t out,
es_out_id_t parent 
)
static

◆ EsOutDelLocked()

◆ EsOutDestroyDecoder()

◆ EsOutDrainDecoder()

◆ EsOutDrainSubESes()

static void EsOutDrainSubESes ( es_out_id_t parent)
static

◆ EsOutEpgTime()

static void EsOutEpgTime ( es_out_t out,
int64_t  time 
)
static

◆ EsOutEsUpdateFmt()

◆ EsOutFillEsFmt()

◆ EsOutFrameNext()

◆ EsOutGetBuffering()

◆ EsOutGetTracksDelay()

◆ EsOutGetWakeup()

◆ EsOutGlobalMeta()

static void EsOutGlobalMeta ( es_out_t p_out,
const vlc_meta_t p_meta 
)
static

◆ EsOutIdMatchEsList()

static bool EsOutIdMatchEsList ( const es_out_id_t es,
vlc_es_id_t *const *  es_id_list 
)
static

References es_out_id_t::id.

Referenced by EsOutSelectList().

◆ EsOutIdMatchStrIds()

static bool EsOutIdMatchStrIds ( const es_out_id_t es,
char *  str_ids 
)
static

◆ EsOutIsExtraBufferingAllowed()

static bool EsOutIsExtraBufferingAllowed ( es_out_t out)
static

◆ EsOutIsGroupSticky()

static bool EsOutIsGroupSticky ( es_out_t p_out,
input_source_t source,
int  i_group 
)
inlinestatic

◆ EsOutIsProgramVisible()

static bool EsOutIsProgramVisible ( es_out_t out,
input_source_t source,
int  i_group 
)
static

◆ EsOutMeta()

◆ EsOutPrivControl()

static int EsOutPrivControl ( es_out_t out,
input_source_t source,
int  query,
va_list  args 
)
static

◆ EsOutPrivControlLocked()

static int EsOutPrivControlLocked ( es_out_t out,
input_source_t source,
int  i_query,
  ... 
)
static

◆ EsOutProgramAdd()

◆ EsOutProgramChangePause()

◆ EsOutProgramDel()

◆ EsOutProgramEpg()

◆ EsOutProgramEpgEvent()

static void EsOutProgramEpgEvent ( es_out_t out,
input_source_t source,
int  i_group,
const vlc_epg_event_t p_event 
)
static

◆ EsOutProgramGetMetaName()

static char * EsOutProgramGetMetaName ( es_out_pgrm_t p_pgrm)
static

◆ EsOutProgramGetProgramName()

static char * EsOutProgramGetProgramName ( es_out_pgrm_t p_pgrm)
static

◆ EsOutProgramHandleClockSource()

◆ EsOutProgramInsert()

static es_out_pgrm_t * EsOutProgramInsert ( es_out_t p_out,
input_source_t source,
int  i_group 
)
static

◆ EsOutProgramMeta()

◆ EsOutProgramsChangeRate()

◆ EsOutProgramSearch()

static es_out_pgrm_t * EsOutProgramSearch ( es_out_t p_out,
input_source_t source,
int  i_group 
)
static

◆ EsOutProgramSelect()

◆ EsOutProgramUpdateScrambled()

◆ EsOutPropsCleanup()

static void EsOutPropsCleanup ( es_out_es_props_t p_props)
static

◆ EsOutPropsInit()

static void EsOutPropsInit ( es_out_es_props_t p_props,
bool  autoselect,
input_thread_t p_input,
enum input_type  input_type,
enum es_out_policy_e  e_default_policy,
const char *  psz_trackidvar,
const char *  psz_trackvar,
const char *  psz_langvar,
const char *  psz_debug 
)
static

◆ EsOutSelect()

◆ EsOutSelectEs()

◆ EsOutSelectHasExplicitParams()

static bool EsOutSelectHasExplicitParams ( const es_out_es_props_t p_esprops)
static

◆ EsOutSelectList()

◆ EsOutSelectListFromProps()

◆ EsOutSelectMatchExplicitParams()

static bool EsOutSelectMatchExplicitParams ( const es_out_es_props_t p_esprops,
const es_out_id_t es 
)
static

◆ EsOutSelectMatchPrioritized()

static bool EsOutSelectMatchPrioritized ( const es_out_es_props_t p_esprops,
const es_out_id_t es 
)
static

◆ EsOutSend()

static int EsOutSend ( es_out_t out,
es_out_id_t es,
block_t p_block 
)
static

Send a block for the given es_out.

Parameters
outthe es_out to send from
esthe es_out_id
p_blockthe data block to send

References input_thread_private_t::b_out_pace_control, block_Duplicate, BLOCK_FLAG_CORRUPTED, BLOCK_FLAG_DISCONTINUITY, BLOCK_FLAG_PREROLL, block_Release, vlc_input_decoder_status::changed, container_of, input_stats::demux_bitrate, input_stats::demux_corrupted, input_stats::demux_discontinuity, es_format_Clean(), EsOutCreateSubESes(), EsOutEsUpdateFmt(), EsOutSendEsEvent(), EsOutUpdateInfo(), vlc_input_decoder_status::fmt, vlc_subdec_desc::fmt_count, vlc_input_decoder_status::format, vlc_frame_t::i_buffer, vlc_frame_t::i_dts, vlc_frame_t::i_flags, es_out_pgrm_t::i_last_pcr, vlc_frame_t::i_length, input_source_t::i_normal_time, es_out_sys_t::i_preroll_end, vlc_frame_t::i_pts, es_out_id_t::i_pts_level, es_out_id_t::id, input_priv(), input_rate_Add(), es_out_sys_t::lock, es_out_sys_t::main_source, vlc_input_decoder_status::meta, msg_Dbg, input_thread_t::obj, es_out_id_t::p_dec, es_out_id_t::p_dec_record, es_out_sys_t::p_input, es_out_id_t::p_master, vlc_frame_t::p_next, es_out_sys_t::p_next_frame_es, es_out_id_t::p_pgrm, vlc_es_id_t::source, sout_StreamIsSynchronous(), input_thread_private_t::stats, vlc_es_id_t::str_id, vlc_input_decoder_status::subdec_desc, vlc_input_decoder_Decode(), vlc_input_decoder_DecodeWithStatus(), vlc_meta_Delete(), vlc_mutex_lock(), vlc_mutex_unlock(), vlc_object_get_tracer(), vlc_subdec_desc_Clean(), VLC_SUCCESS, VLC_TICK_0, VLC_TICK_INVALID, and vlc_tracer_TraceStreamDTS().

◆ EsOutSendEsEvent()

◆ EsOutSetDelay()

◆ EsOutSetEsDelay()

◆ EsOutSetRecord()

◆ EsOutStopFreeVout()

◆ EsOutStopNextFrame()

static void EsOutStopNextFrame ( es_out_t out)
static

◆ EsOutTerminate()

◆ EsOutUnselectEs()

◆ EsOutUpdateDelayJitter()

◆ EsOutUpdateEsLanguageTitle()

◆ EsOutUpdateInfo()

static void EsOutUpdateInfo ( es_out_t out,
es_out_id_t es,
const vlc_meta_t p_meta 
)
static

References _, aout_BitsPerSample(), aout_FormatPrintChannels(), ARRAY_SIZE, es_format_t::audio, AUDIO_ES, es_format_t::audio_replay_gain, AUDIO_REPLAY_GAIN_MAX, AUDIO_REPLAY_GAIN_TRACK, video_format_t::b_multiview_right_eye_first, video_format_t::chroma_location, CHROMA_LOCATION_BOTTOM_CENTER, CHROMA_LOCATION_BOTTOM_LEFT, CHROMA_LOCATION_CENTER, CHROMA_LOCATION_LEFT, CHROMA_LOCATION_MAX, CHROMA_LOCATION_TOP_CENTER, CHROMA_LOCATION_TOP_LEFT, CHROMA_LOCATION_UNDEF, COLOR_PRIMARIES_BT2020, COLOR_PRIMARIES_BT470_M, COLOR_PRIMARIES_BT601_525, COLOR_PRIMARIES_BT601_625, COLOR_PRIMARIES_BT709, COLOR_PRIMARIES_DCI_P3, COLOR_PRIMARIES_MAX, COLOR_PRIMARIES_UNDEF, video_format_t::color_range, COLOR_RANGE_FULL, COLOR_RANGE_LIMITED, COLOR_RANGE_MAX, COLOR_RANGE_UNDEF, COLOR_SPACE_BT2020, COLOR_SPACE_BT601, COLOR_SPACE_BT709, COLOR_SPACE_MAX, COLOR_SPACE_UNDEF, container_of, EMPTY_STR, EsInfoCategoryName(), es_out_id_t::fmt, es_out_id_t::fmt_out, vlc_viewpoint_t::fov, es_format_t::i_bitrate, audio_format_t::i_bitspersample, es_format_t::i_cat, audio_format_t::i_channels, es_format_t::i_codec, audio_format_t::i_format, video_format_t::i_frame_rate, video_format_t::i_frame_rate_base, video_format_t::i_height, es_format_t::i_original_fourcc, audio_format_t::i_physical_channels, audio_format_t::i_rate, video_format_t::i_visible_height, video_format_t::i_visible_width, video_format_t::i_width, es_out_id_t::id, info_category_AddCodecInfo(), info_category_AddInfo(), info_category_New(), input_item_ReplaceInfos(), input_item_UpdateTracksInfo(), input_priv(), input_SendEventMetaInfo(), video_format_t::lighting, video_format_t::mastering, video_format_t::max_luminance, video_format_t::MaxCLL, video_format_t::MaxFALL, video_format_t::min_luminance, MULTIVIEW_2D, video_format_t::multiview_mode, MULTIVIEW_STEREO_CHECKERBOARD, MULTIVIEW_STEREO_COL, MULTIVIEW_STEREO_FRAME, MULTIVIEW_STEREO_MAX, MULTIVIEW_STEREO_ROW, MULTIVIEW_STEREO_SBS, MULTIVIEW_STEREO_TB, N_, video_format_t::orientation, es_out_sys_t::p_input, input_thread_private_t::p_item, audio_replay_gain_t::pb_gain, audio_replay_gain_t::pf_gain, vlc_viewpoint_t::pitch, video_format_t::pose, video_format_t::primaries, video_format_t::projection_mode, PROJECTION_MODE_CUBEMAP_LAYOUT_STANDARD, PROJECTION_MODE_EQUIRECTANGULAR, PROJECTION_MODE_RECTANGULAR, es_format_t::psz_description, es_out_id_t::psz_language, psz_name, es_out_id_t::psz_title, psz_value, vlc_viewpoint_t::roll, video_format_t::space, SPU_ES, vlc_es_id_t::stable, vlc_es_id_t::str_id, video_format_t::transfer, TRANSFER_FUNC_BT470_BG, TRANSFER_FUNC_BT470_M, TRANSFER_FUNC_BT709, TRANSFER_FUNC_HLG, TRANSFER_FUNC_LINEAR, TRANSFER_FUNC_MAX, TRANSFER_FUNC_SMPTE_240, TRANSFER_FUNC_SMPTE_ST2084, TRANSFER_FUNC_SRGB, TRANSFER_FUNC_UNDEF, UNKNOWN_ES, unlikely, es_format_t::video, VIDEO_ES, vlc_assert_unreachable, vlc_fourcc_GetDescription(), vlc_gettext(), vlc_meta_CopyExtraNames(), vlc_meta_GetExtra(), vlc_pgettext, vlc_popcount, video_format_t::white_point, and vlc_viewpoint_t::yaw.

Referenced by EsOutAddLocked(), EsOutProgramSelect(), and EsOutSend().

◆ EsOutVaControlLocked()

static int EsOutVaControlLocked ( es_out_t out,
input_source_t source,
int  i_query,
va_list  args 
)
static

Control query handler.

Parameters
outthe es_out to control
sourcethe input source emitting the control request
i_queryA es_out query as defined in include/ninput.h
argsa variable list of arguments for the query
Returns
VLC_SUCCESS or an error code

References es_out_pgrm_t::active_clock_source, AUDIO_ES, es_out_sys_t::b_buffering, input_thread_private_t::b_low_delay, input_thread_private_t::b_out_pace_control, es_out_id_t::b_scrambled, es_out_id_t::b_terminated, container_of, es_out_es_props_t::e_policy, es_cat, es_format_Clean(), es_format_Copy(), ES_OUT_DEL_GROUP, ES_OUT_GET_EMPTY, ES_OUT_GET_ES_STATE, ES_OUT_POST_SUBNODE, ES_OUT_PRIV_SET_JITTER, ES_OUT_RESET_PCR, ES_OUT_RESTART_ES, ES_OUT_SET_EPG_TIME, ES_OUT_SET_ES, ES_OUT_SET_ES_CAT_POLICY, ES_OUT_SET_ES_DEFAULT, ES_OUT_SET_ES_FMT, ES_OUT_SET_ES_SCRAMBLED_STATE, ES_OUT_SET_ES_STATE, ES_OUT_SET_GROUP, ES_OUT_SET_GROUP_EPG, ES_OUT_SET_GROUP_EPG_EVENT, ES_OUT_SET_GROUP_META, ES_OUT_SET_GROUP_PCR, ES_OUT_SET_META, ES_OUT_SET_NEXT_DISPLAY_TIME, ES_OUT_SET_PCR, ES_OUT_SPU_SET_HIGHLIGHT, ES_OUT_UNSET_ES, ES_OUT_VOUT_ADD_OVERLAY, ES_OUT_VOUT_DEL_OVERLAY, ES_OUT_VOUT_SET_MOUSE_EVENT, EsIsSelected(), EsOutChangePosition(), EsOutControlLocked(), EsOutCreateDecoder(), EsOutDecodersIsEmpty(), EsOutDecodersStopBuffering(), EsOutDestroyDecoder(), EsOutDrainDecoder(), EsOutEpgTime(), EsOutFillEsFmt(), EsOutGlobalMeta(), EsOutIsExtraBufferingAllowed(), EsOutPrivControlLocked(), EsOutProgramAdd(), EsOutProgramDel(), EsOutProgramEpg(), EsOutProgramEpgEvent(), EsOutProgramHandleClockSource(), EsOutProgramInsert(), EsOutProgramMeta(), EsOutProgramSelect(), EsOutProgramUpdateScrambled(), EsOutSelect(), EsOutSelectEs(), EsOutSendEsEvent(), EsOutStopFreeVout(), EsOutUnselectEs(), EsOutUpdateEsLanguageTitle(), es_out_id_t::fmt, foreach_es_then_es_slaves, GetPropsByCat(), es_format_t::i_cat, es_format_t::i_codec, es_out_sys_t::i_cr_average, es_out_es_props_t::i_demux_id, es_format_t::i_group, es_out_sys_t::i_group_id, es_format_t::i_id, es_out_pgrm_t::i_id, input_thread_private_t::i_jitter_max, es_out_pgrm_t::i_last_pcr, es_format_t::i_original_fourcc, es_out_sys_t::i_preroll_end, es_out_sys_t::i_pts_delay, es_out_sys_t::i_pts_jitter, es_out_sys_t::i_tracks_pts_delay, IGNORE_ES, input_CanPaceControl(), input_clock_GetJitter(), input_clock_Update(), input_item_node_Delete(), input_priv(), INPUT_PTS_DELAY_MAX, input_SendEventParsing(), es_out_sys_t::main_source, es_out_id_t::mouse_event_cb, es_out_id_t::mouse_event_userdata, MS_FROM_VLC_TICK, msg_Dbg, msg_Err, input_thread_t::obj, es_out_id_t::p_dec, es_out_sys_t::p_input, es_out_pgrm_t::p_input_clock, es_out_sys_t::p_next_frame_es, es_out_id_t::p_pgrm, es_out_sys_t::p_pgrm, input_thread_private_t::p_sout, es_out_sys_t::programs, sout_StreamSetPCR(), SPU_ES, es_out_sys_t::sub, UNKNOWN_ES, VIDEO_ES, vlc_assert_unreachable, VLC_CLOCK_MASTER_AUTO, VLC_EGENERIC, vlc_input_decoder_AddVoutOverlay(), vlc_input_decoder_DelVoutOverlay(), vlc_input_decoder_SetSpuHighlight(), vlc_input_decoder_SetVoutMouseEvent(), vlc_list_foreach, VLC_OBJECT, vlc_object_get_tracer(), VLC_SUCCESS, VLC_TICK_INVALID, vlc_tick_now(), and vlc_tracer_TracePCR().

Referenced by EsOutControl(), and EsOutControlLocked().

◆ EsOutVaPrivControlLocked()

static int EsOutVaPrivControlLocked ( es_out_t out,
input_source_t source,
int  query,
va_list  args 
)
static

References es_out_sys_t::b_active, es_out_sys_t::b_buffering, input_thread_private_t::b_out_pace_control, es_out_sys_t::b_paused, es_out_pgrm_t::clocks, container_of, count, es_out_sys_t::es, ES_OUT_MODE_ALL, ES_OUT_MODE_AUTO, ES_OUT_MODE_END, ES_OUT_MODE_NONE, ES_OUT_MODE_PARTIAL, ES_OUT_PRIV_GET_BUFFERING, ES_OUT_PRIV_GET_GROUP_FORCED, ES_OUT_PRIV_GET_WAKE_UP, ES_OUT_PRIV_RESTART_ES, ES_OUT_PRIV_SET_DELAY, ES_OUT_PRIV_SET_EOS, ES_OUT_PRIV_SET_ES, ES_OUT_PRIV_SET_ES_CAT_IDS, ES_OUT_PRIV_SET_ES_DELAY, ES_OUT_PRIV_SET_ES_LIST, ES_OUT_PRIV_SET_FRAME_NEXT, ES_OUT_PRIV_SET_JITTER, ES_OUT_PRIV_SET_MODE, ES_OUT_PRIV_SET_PAUSE_STATE, ES_OUT_PRIV_SET_RATE, ES_OUT_PRIV_SET_RECORD_STATE, ES_OUT_PRIV_SET_TIMES, ES_OUT_PRIV_SET_VBI_PAGE, ES_OUT_PRIV_SET_VBI_TRANSPARENCY, ES_OUT_PRIV_START_ALL_ES, ES_OUT_PRIV_STOP_ALL_ES, ES_OUT_PRIV_UNSET_ES, ES_OUT_RESTART_ES, ES_OUT_SET_ES, ES_OUT_UNSET_ES, EsIsSelected(), EsOutChangePause(), EsOutChangeRate(), EsOutControlLocked(), EsOutCreateDecoder(), EsOutDestroyDecoder(), EsOutDrainDecoder(), EsOutFrameNext(), EsOutGetBuffering(), EsOutGetTracksDelay(), EsOutGetWakeup(), EsOutSelect(), EsOutSelectList(), EsOutSelectListFromProps(), EsOutSetDelay(), EsOutSetEsDelay(), EsOutSetRecord(), EsOutStopFreeVout(), EsOutTerminate(), EsOutUnselectEs(), es_out_id_t::fmt, foreach_es_then_es_slaves, GetPropsByCat(), es_format_t::i_cat, es_out_sys_t::i_cr_average, es_out_sys_t::i_group_id, es_out_sys_t::i_mode, input_source_t::i_normal_time, es_out_sys_t::i_pts_delay, es_out_sys_t::i_pts_jitter, es_out_sys_t::i_tracks_pts_delay, es_out_id_t::id, input_clock_SetJitter(), input_priv(), input_SendEventTimes(), input_SendEventVbiPage(), input_SendEventVbiTransparency(), es_out_pgrm_t::main, es_out_sys_t::main_source, es_out_id_t::p_dec, es_out_sys_t::p_input, es_out_pgrm_t::p_input_clock, es_out_sys_t::p_next_frame_es, es_out_id_t::p_pgrm, es_out_sys_t::p_pgrm, input_thread_private_t::p_sout, es_out_sys_t::programs, es_out_es_props_t::str_ids, strdup(), VIDEO_ES, vlc_alloc(), vlc_assert_unreachable, vlc_clock_main_Lock(), vlc_clock_main_SetInputDejitter(), vlc_clock_main_Unlock(), VLC_EGENERIC, VLC_ENOMEM, vlc_es_id_get_out(), vlc_es_id_Hold(), vlc_es_id_Release(), vlc_input_decoder_IsEmpty(), vlc_input_decoder_SetVbiOpaque(), vlc_input_decoder_SetVbiPage(), vlc_list_foreach, vlc_list_is_empty(), VLC_SUCCESS, VLC_TICK_0, and VLC_TICK_INVALID.

Referenced by EsOutPrivControl(), and EsOutPrivControlLocked().

◆ EsRelease()

◆ EsTerminate()

static void EsTerminate ( es_out_id_t es)
static

◆ GetPropsByCat()

◆ info_category_AddCodecInfo()

static void info_category_AddCodecInfo ( info_category_t p_cat,
const char *  psz_info,
vlc_fourcc_t  i_fourcc,
const char *  psz_description 
)
static

◆ input_EsOutNew()

◆ LanguageArrayIndex()

static int LanguageArrayIndex ( char **  ppsz_langs,
const char *  psz_lang 
)
static

References strcasecmp().

Referenced by EsOutSelect().

◆ LanguageGetCode()

static char * LanguageGetCode ( const char *  psz_lang)
static

◆ LanguageGetName()

static char * LanguageGetName ( const char *  psz_code)
static

◆ LanguageSplit()

static char ** LanguageSplit ( const char *  psz_langs)
static

References LanguageGetCode(), strdup(), and TAB_APPEND.

Referenced by EsOutPropsInit().

◆ ProgramDelete()

◆ vlc_es_id_get_out()

es_out_id_t * vlc_es_id_get_out ( vlc_es_id_t id)

◆ vlc_es_id_GetCat()

enum es_format_category_e vlc_es_id_GetCat ( vlc_es_id_t id)

◆ vlc_es_id_GetInputId()

int vlc_es_id_GetInputId ( vlc_es_id_t id)

Get the ES track input id.

Parameters
idpointer to the ES track id
Returns
the ES track input id (always valid)

Referenced by Control(), and ControlSetEsList().

◆ vlc_es_id_GetSource()

const input_source_t * vlc_es_id_GetSource ( vlc_es_id_t id)

Referenced by Control(), and ControlSetEsList().

◆ vlc_es_id_GetStrId()

const char * vlc_es_id_GetStrId ( vlc_es_id_t id)

Get the unique string identifier.

This id could be used to identify a track across different playback instances. For example, it can be used to store a track selection preference in a database.

Warning
Check with vlc_es_id_IsStrIdStable() if the ES track is stable before saving it for a future usage.
Parameters
idpointer to the ES track id
Returns
the ES track string identifier, can't be NULL, valid until id is released

Referenced by vlc_player_input_GetSelectedTrackStringIds(), and vlc_player_osd_Tracks().

◆ vlc_es_id_Hold()

vlc_es_id_t * vlc_es_id_Hold ( vlc_es_id_t es)

Increase the ES track id reference count.

Any held ES tracks must be released with vlc_es_id_Release().

Parameters
espointer to the ES id
Returns
the same ES pointer, for convenience

References EsHold(), and vlc_es_id_get_out().

Referenced by EsOutVaPrivControlLocked(), input_ControlPushEsHelper(), vlc_player_SelectEsIdList(), and vlc_player_track_priv_New().

◆ vlc_es_id_IsStrIdStable()

bool vlc_es_id_IsStrIdStable ( vlc_es_id_t id)

Return whether the ES track identifier is stable.

An string identifier is stable when it is certified to be the same across different playback instances for the same ES track.

Parameters
idpointer to the ES track id
Returns
true if stable

Referenced by vlc_player_input_GetSelectedTrackStringIds().

◆ vlc_es_id_Release()

void vlc_es_id_Release ( vlc_es_id_t id)

Decrease the ES track id reference count.

Parameters
idpointer to the ES track id

References EsRelease(), and vlc_es_id_get_out().

Referenced by ControlRelease(), EsOutVaPrivControlLocked(), and vlc_player_track_priv_Delete().

Variable Documentation

◆ decoder_cbs

const struct vlc_input_decoder_callbacks decoder_cbs
static
Initial value:
= {
.on_vout_started = decoder_on_vout_started,
.on_vout_stopped = decoder_on_vout_stopped,
.on_thumbnail_ready = decoder_on_thumbnail_ready,
.on_new_video_stats = decoder_on_new_video_stats,
.on_new_audio_stats = decoder_on_new_audio_stats,
.get_attachments = decoder_get_attachments,
}
static void decoder_on_new_video_stats(vlc_input_decoder_t *decoder, unsigned decoded, unsigned lost, unsigned displayed, unsigned late, void *userdata)
Definition es_out.c:389
static void decoder_on_vout_stopped(vlc_input_decoder_t *decoder, vout_thread_t *vout, void *userdata)
Definition es_out.c:347
static int decoder_get_attachments(vlc_input_decoder_t *decoder, input_attachment_t ***ppp_attachment, void *userdata)
Definition es_out.c:441
static void decoder_on_thumbnail_ready(vlc_input_decoder_t *decoder, picture_t *pic, void *userdata)
Definition es_out.c:369
static void decoder_on_vout_started(vlc_input_decoder_t *decoder, vout_thread_t *vout, enum vlc_vout_order order, void *userdata)
Definition es_out.c:324
static void decoder_on_new_audio_stats(vlc_input_decoder_t *decoder, unsigned decoded, unsigned lost, unsigned played, void *userdata)
Definition es_out.c:416

Referenced by EsOutCreateDecoder(), and EsOutSetRecord().

◆ es_cat

es_out_id_t es_cat[DATA_ES]
static

Referenced by EsOutVaControlLocked().

◆ es_out_cbs

const struct es_out_callbacks es_out_cbs
static
Initial value:
=
{
.add = EsOutAdd,
.send = EsOutSend,
.del = EsOutDel,
.control = EsOutControl,
.destroy = EsOutDelete,
.priv_control = EsOutPrivControl,
}
static int EsOutPrivControl(es_out_t *out, input_source_t *source, int query, va_list args)
Definition es_out.c:4027
static int EsOutControl(es_out_t *out, input_source_t *source, int i_query, va_list args)
Definition es_out.c:4004
static void EsOutDel(es_out_t *, es_out_id_t *)
Definition es_out.c:3124
static es_out_id_t * EsOutAdd(es_out_t *out, input_source_t *source, const es_format_t *fmt)
Definition es_out.c:2238
static int EsOutSend(es_out_t *out, es_out_id_t *es, block_t *p_block)
Send a block for the given es_out.
Definition es_out.c:2885
static void EsOutDelete(es_out_t *out)
Definition es_out.c:581

Referenced by input_EsOutNew(), and input_EsOutSourceNew().