VLC  4.0.0-dev
Modules | Files | Data Structures | Macros | Typedefs | Enumerations | Functions

Demultiplexers (file format parsers) More...

Collaboration diagram for Demultiplexer:

Modules

 Chained demultiplexer
 Demultiplexers wrapped by another demultiplexer.
 

Files

file  vlc_demux.h
 Demultiplexer modules interface.
 

Data Structures

struct  demux_meta_t
 

Macros

#define VLC_DEMUXER_EOF   0
 
#define VLC_DEMUXER_EGENERIC   -1
 
#define VLC_DEMUXER_SUCCESS   1
 
#define INPUT_UPDATE_TITLE   0x0010
 
#define INPUT_UPDATE_SEEKPOINT   0x0020
 
#define INPUT_UPDATE_META   0x0040
 
#define INPUT_UPDATE_TITLE_LIST   0x0100
 
#define demux_UpdateTitleFromStream(demux)
 
#define DEMUX_INIT_COMMON()
 

Typedefs

typedef struct demux_meta_t demux_meta_t
 

Enumerations

enum  demux_query_e {
  DEMUX_CAN_SEEK, DEMUX_CAN_PAUSE = 0x002, DEMUX_CAN_CONTROL_PACE, DEMUX_GET_PTS_DELAY = 0x101,
  DEMUX_GET_META = 0x105, DEMUX_GET_SIGNAL = 0x107, DEMUX_SET_PAUSE_STATE = 0x200, DEMUX_SET_TITLE,
  DEMUX_SET_SEEKPOINT, DEMUX_TEST_AND_CLEAR_FLAGS, DEMUX_GET_TITLE, DEMUX_GET_SEEKPOINT,
  DEMUX_GET_POSITION = 0x300, DEMUX_SET_POSITION, DEMUX_GET_LENGTH, DEMUX_GET_TIME,
  DEMUX_SET_TIME, DEMUX_GET_TITLE_INFO, DEMUX_SET_GROUP, DEMUX_SET_ES,
  DEMUX_SET_NEXT_DEMUX_TIME, DEMUX_GET_FPS, DEMUX_HAS_UNSUPPORTED_META, DEMUX_GET_ATTACHMENTS,
  DEMUX_CAN_RECORD, DEMUX_SET_RECORD_STATE, DEMUX_CAN_CONTROL_RATE, DEMUX_SET_RATE,
  DEMUX_IS_PLAYLIST, DEMUX_NAV_ACTIVATE, DEMUX_NAV_UP, DEMUX_NAV_DOWN,
  DEMUX_NAV_LEFT, DEMUX_NAV_RIGHT, DEMUX_NAV_POPUP, DEMUX_NAV_MENU,
  DEMUX_FILTER_ENABLE, DEMUX_FILTER_DISABLE
}
 Control query identifiers for use with demux_t.pf_control. More...
 

Functions

demux_tdemux_New (vlc_object_t *p_obj, const char *psz_name, stream_t *s, es_out_t *out)
 
static void demux_Delete (demux_t *demux)
 
int demux_vaControlHelper (stream_t *, int64_t i_start, int64_t i_end, int64_t i_bitrate, int i_align, int i_query, va_list args)
 
static int demux_Demux (demux_t *p_demux)
 
int demux_vaControl (demux_t *p_demux, int i_query, va_list args)
 
static int demux_Control (demux_t *p_demux, int i_query,...)
 
static void demux_UpdateTitleFromStream (demux_t *demux, int *restrict titlep, int *restrict seekpointp, unsigned *restrict updatep)
 
static bool demux_IsPathExtension (demux_t *p_demux, const char *psz_extension)
 
static bool demux_IsContentType (demux_t *demux, const char *type)
 
static bool demux_IsForced (demux_t *p_demux, const char *psz_name)
 
decoder_tdemux_PacketizerNew (demux_t *p_demux, es_format_t *p_fmt, const char *psz_msg)
 This function will create a packetizer suitable for a demuxer that parses elementary stream. More...
 
void demux_PacketizerDestroy (decoder_t *p_packetizer)
 This function will destroy a packetizer create by demux_PacketizerNew. More...
 

Detailed Description

Demultiplexers (file format parsers)

Macro Definition Documentation

◆ DEMUX_INIT_COMMON

#define DEMUX_INIT_COMMON ( )
Value:
do { \
p_demux->pf_control = Control; \
p_demux->pf_demux = Demux; \
p_demux->p_sys = calloc( 1, sizeof( demux_sys_t ) ); \
if( !p_demux->p_sys ) return VLC_ENOMEM;\
} while(0)
static int Control(es_out_t *, int i_query, va_list)
Definition: es_out_timeshift.c:738
#define VLC_ENOMEM
Not enough memory.
Definition: vlc_common.h:476

◆ demux_UpdateTitleFromStream

#define demux_UpdateTitleFromStream (   demux)
Value:
&((demux_sys_t *)((demux)->p_sys))->current_title, \
&((demux_sys_t *)((demux)->p_sys))->current_seekpoint, \
&((demux_sys_t *)((demux)->p_sys))->updates)
#define demux_UpdateTitleFromStream(demux)
Definition: vlc_demux.h:337

◆ INPUT_UPDATE_META

#define INPUT_UPDATE_META   0x0040

Referenced by UpdateGenericFromDemux().

◆ INPUT_UPDATE_SEEKPOINT

#define INPUT_UPDATE_SEEKPOINT   0x0020

◆ INPUT_UPDATE_TITLE

#define INPUT_UPDATE_TITLE   0x0010

◆ INPUT_UPDATE_TITLE_LIST

#define INPUT_UPDATE_TITLE_LIST   0x0100

Referenced by MainLoopDemux().

◆ VLC_DEMUXER_EGENERIC

#define VLC_DEMUXER_EGENERIC   -1

Referenced by MainLoopDemux().

◆ VLC_DEMUXER_EOF

#define VLC_DEMUXER_EOF   0

◆ VLC_DEMUXER_SUCCESS

#define VLC_DEMUXER_SUCCESS   1

Typedef Documentation

◆ demux_meta_t

typedef struct demux_meta_t demux_meta_t

Enumeration Type Documentation

◆ demux_query_e

Control query identifiers for use with demux_t.pf_control.

In the individual identifier description, the input stream refers to demux_t.s if non-NULL, and the output refers to demux_t.out.

A demuxer is synchronous if it only accesses its input stream and the output from within its demux_t callbacks, i.e. demux.pf_demux and demux_t.pf_control.

A demuxer is threaded if it accesses either or both input and output asynchronously.

An access-demuxer is a demuxer without input, i.e. demux_t.s == NULL).

Enumerator
DEMUX_CAN_SEEK 

Checks whether the stream supports seeking.

Can fail if seeking is not supported (same as returning false).

Bug:
Failing should not be allowed.

arg1 = bool *

DEMUX_CAN_PAUSE 

Checks whether (long) pause then stream resumption is supported.

Can fail only if synchronous and not an access-demuxer. The underlying input stream then determines if pause is supported.

Bug:
Failing should not be allowed.

arg1= bool *

DEMUX_CAN_CONTROL_PACE 

Whether the stream can be read at an arbitrary pace.

Cannot fail.

arg1= bool *

DEMUX_GET_PTS_DELAY 

Retrieves the PTS delay (roughly the default buffer duration).

Can fail only if synchronous and not an access-demuxer. The underlying input stream then determines the PTS delay.

arg1= int64_t *

DEMUX_GET_META 

Retrieves stream meta-data.

Should fail if no meta-data were retrieved.

arg1= vlc_meta_t *

DEMUX_GET_SIGNAL 

Retrieves an estimate of signal quality and strength.

Can fail.

arg1=double *quality, arg2=double *strength

DEMUX_SET_PAUSE_STATE 

Sets the paused or playing/resumed state.

Streams are initially in playing state. The control always specifies a change from paused to playing (false) or from playing to paused (true) and streams are initially playing; a no-op cannot be requested.

The control is never used if DEMUX_CAN_PAUSE fails. Can fail.

arg1= bool

DEMUX_SET_TITLE 

Seeks to the beginning of a title.

The control is never used if DEMUX_GET_TITLE_INFO fails. Can fail.

arg1= int

DEMUX_SET_SEEKPOINT 

Seeks to the beginning of a chapter of the current title.

The control is never used if DEMUX_GET_TITLE_INFO fails. Can fail.

arg1= int

DEMUX_TEST_AND_CLEAR_FLAGS 

Check which INPUT_UPDATE_XXX flag is set and reset the ones set.

The unsigned* argument is set with the flags needed to be checked, on return it contains the values that were reset during the call

arg1= unsigned *

DEMUX_GET_TITLE 

Read the title number currently playing.

Can fail.

arg1= int *

DEMUX_GET_SEEKPOINT 
DEMUX_GET_POSITION 
DEMUX_SET_POSITION 
DEMUX_GET_LENGTH 
DEMUX_GET_TIME 
DEMUX_SET_TIME 
DEMUX_GET_TITLE_INFO 
Todo:
Document
Warning
The prototype is different from STREAM_GET_TITLE_INFO

Can fail, meaning there is only one title and one chapter.

arg1= input_title_t ***, arg2=int *, arg3=int *pi_title_offset(0), arg4= int *pi_seekpoint_offset(0)

DEMUX_SET_GROUP 
DEMUX_SET_ES 
DEMUX_SET_NEXT_DEMUX_TIME 
DEMUX_GET_FPS 
DEMUX_HAS_UNSUPPORTED_META 
DEMUX_GET_ATTACHMENTS 
DEMUX_CAN_RECORD 
DEMUX_SET_RECORD_STATE 
Todo:
Document
Warning
The prototype is different from STREAM_SET_RECORD_STATE

The control is never used if DEMUX_CAN_RECORD fails or returns false. Can fail.

arg1= bool

DEMUX_CAN_CONTROL_RATE 
DEMUX_SET_RATE 
DEMUX_IS_PLAYLIST 

Checks whether the stream is actually a playlist, rather than a real stream.

Can fail if the stream is not a playlist (same as returning false).

arg1= bool *

DEMUX_NAV_ACTIVATE 

Activate the navigation item selected.

Can fail

DEMUX_NAV_UP 

Use the up arrow to select a navigation item above.

Can fail

DEMUX_NAV_DOWN 

Use the down arrow to select a navigation item under.

Can fail

DEMUX_NAV_LEFT 

Use the left arrow to select a navigation item on the left.

Can fail

DEMUX_NAV_RIGHT 

Use the right arrow to select a navigation item on the right.

Can fail

DEMUX_NAV_POPUP 

Activate the popup Menu (for BD).

Can fail

DEMUX_NAV_MENU 

Activate disc Root Menu.

Can fail

DEMUX_FILTER_ENABLE 

Enable/Disable a demux filter.

Warning
This has limited support, and is likely to break if more than a single demux_filter is present in the chain. This is not guaranteed to work in future VLC versions, nor with all demux filters
DEMUX_FILTER_DISABLE 

Function Documentation

◆ demux_Control()

static int demux_Control ( demux_t p_demux,
int  i_query,
  ... 
)
inlinestatic

◆ demux_Delete()

static void demux_Delete ( demux_t demux)
inlinestatic

◆ demux_Demux()

static int demux_Demux ( demux_t p_demux)
inlinestatic

◆ demux_IsContentType()

static bool demux_IsContentType ( demux_t demux,
const char *  type 
)
inlinestatic

◆ demux_IsForced()

static bool demux_IsForced ( demux_t p_demux,
const char *  psz_name 
)
inlinestatic

◆ demux_IsPathExtension()

static bool demux_IsPathExtension ( demux_t p_demux,
const char *  psz_extension 
)
inlinestatic

◆ demux_New()

demux_t* demux_New ( vlc_object_t p_obj,
const char *  psz_name,
stream_t s,
es_out_t out 
)

References demux_NewAdvanced().

Referenced by vlc_demux_chained_Thread().

◆ demux_PacketizerDestroy()

void demux_PacketizerDestroy ( decoder_t p_packetizer)

This function will destroy a packetizer create by demux_PacketizerNew.

References es_format_Clean(), decoder_t::fmt_in, decoder_t::fmt_out, module_unneed, decoder_t::p_description, decoder_t::p_module, vlc_meta_Delete(), and vlc_object_release.

Referenced by demux_IsForced().

◆ demux_PacketizerNew()

decoder_t* demux_PacketizerNew ( demux_t p_demux,
es_format_t p_fmt,
const char *  psz_msg 
)

This function will create a packetizer suitable for a demuxer that parses elementary stream.

The provided es_format_t will be cleaned on error or by demux_PacketizerDestroy.

References es_format_t::b_packetized, es_format_Clean(), es_format_Init(), decoder_t::fmt_in, decoder_t::fmt_out, es_format_t::i_cat, module_need, msg_Err, decoder_t::p_module, decoder_owner::p_packetizer, decoder_t::pf_decode, decoder_t::pf_packetize, vlc_custom_create, and vlc_object_release.

Referenced by demux_IsForced().

◆ demux_UpdateTitleFromStream()

static void demux_UpdateTitleFromStream ( demux_t demux,
int *restrict  titlep,
int *restrict  seekpointp,
unsigned *restrict  updatep 
)
inlinestatic

◆ demux_vaControl()

int demux_vaControl ( demux_t p_demux,
int  i_query,
va_list  args 
)

References stream_t::pf_control.

Referenced by demux_Control(), and demux_Demux().

◆ demux_vaControlHelper()

int demux_vaControlHelper ( stream_t ,
int64_t  i_start,
int64_t  i_end,
int64_t  i_bitrate,
int  i_align,
int  i_query,
va_list  args 
)