VLC  3.0.21
Modules | Files | Data Structures | Macros | Typedefs | Enumerations | Functions
Demultiplexer
Collaboration diagram for Demultiplexer:

Modules

 Chained demultiplexer
 Demultiplexers wrapped by another demultiplexer.
 

Files

file  vlc_demux.h
 

Data Structures

struct  demux_t
 
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_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, const char *psz_path, stream_t *s, es_out_t *out)
 
void demux_Delete (demux_t *)
 
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)
 
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)

◆ INPUT_UPDATE_META

#define INPUT_UPDATE_META   0x0040

◆ 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

◆ VLC_DEMUXER_EGENERIC

#define VLC_DEMUXER_EGENERIC   -1

◆ 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

This can can fail, in which case flags from demux_t.info.i_update are read/reset

arg1= unsigned *

DEMUX_GET_TITLE 

Read the title number currently playing.

Can fail, in which case demux_t.info.i_title is used

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.

Warning
The prototype is different from STREAM_IS_DIRECTORY.

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()

void demux_Delete ( demux_t )

◆ demux_Demux()

static int demux_Demux ( demux_t p_demux)
inlinestatic

Referenced by MainLoopDemux().

◆ 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,
const char *  psz_path,
stream_t s,
es_out_t out 
)

References demux_NewAdvanced(), and psz_name.

◆ demux_PacketizerDestroy()

void demux_PacketizerDestroy ( decoder_t p_packetizer)

This function will destroy a packetizer create by demux_PacketizerNew.

◆ 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.

◆ demux_UpdateTitleFromStream()

static void demux_UpdateTitleFromStream ( demux_t demux)
inlinestatic

◆ demux_vaControl()

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

< No error

◆ 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 
)
demux_sys_t
struct demux_sys_t demux_sys_t
Definition: vlc_common.h:223
Control
static int Control(es_out_t *, int i_query, va_list)
Definition: es_out_timeshift.c:752
VLC_ENOMEM
#define VLC_ENOMEM
Not enough memory.
Definition: vlc_common.h:355