VLC 4.0.0-dev

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 add_file_extension(ext)   add_shortcut("ext-" ext)
 
#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_GET_TYPE = 0x109 , 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_NORMAL_TIME , DEMUX_GET_TITLE_INFO ,
  DEMUX_SET_GROUP_DEFAULT , DEMUX_SET_GROUP_ALL , DEMUX_SET_GROUP_LIST , DEMUX_SET_ES ,
  DEMUX_SET_ES_LIST , 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_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 *module_name, const char *url, 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)
 
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 bool vlc_demux_CanSeek (demux_t *demux)
 
static bool vlc_demux_CanPause (demux_t *demux)
 
static bool vlc_demux_CanPace (demux_t *demux)
 
static bool vlc_demux_CanRate (demux_t *demux)
 
static bool vlc_demux_CanRecord (demux_t *demux)
 
static bool vlc_demux_HasUnsupportedMeta (demux_t *demux)
 
static int vlc_demux_GetPtsDelay (demux_t *demux, vlc_tick_t *pts_delay)
 
static int vlc_demux_GetSeekpoint (demux_t *demux, int *seekpoint)
 
static int vlc_demux_GetSignal (demux_t *demux, double *quality, double *strength)
 
static int vlc_demux_GetTitle (demux_t *demux, int *title)
 
static int vlc_demux_GetMeta (demux_t *demux, vlc_meta_t *meta)
 
static int vlc_demux_GetType (demux_t *demux, int *type)
 
static int vlc_demux_GetTitleInfo (demux_t *demux, input_title_t ***title_info, int *size, int *pi_title_offset, int *pi_seekpoint_offset)
 
static int vlc_demux_GetPosition (demux_t *demux, double *position)
 
static int vlc_demux_GetLength (demux_t *demux, vlc_tick_t *length)
 
static int vlc_demux_GetTime (demux_t *demux, vlc_tick_t *time)
 
static int vlc_demux_GetNormalTime (demux_t *demux, vlc_tick_t *normal_time)
 
static int vlc_demux_GetFPS (demux_t *demux, double *fps)
 
static int vlc_demux_GetAttachments (demux_t *demux, input_attachment_t ***attachments)
 
static int vlc_demux_SetPauseState (demux_t *demux, bool pause_state)
 
static int vlc_demux_SetSeekPoint (demux_t *demux, int seekpoint)
 
static int vlc_demux_SetTitle (demux_t *demux, int title)
 
static int vlc_demux_SetRate (demux_t *demux, float rate)
 
static int vlc_demux_SetRecordState (demux_t *demux, bool record_state, const char *dir_path, const char *ext)
 
static int vlc_demux_NavActivate (demux_t *demux)
 
static int vlc_demux_NavUp (demux_t *demux)
 
static int vlc_demux_NavDown (demux_t *demux)
 
static int vlc_demux_NavLeft (demux_t *demux)
 
static int vlc_demux_NavRight (demux_t *demux)
 
static int vlc_demux_NavPopup (demux_t *demux)
 
static int vlc_demux_NavMenu (demux_t *demux)
 
static int vlc_demux_FilterEnable (demux_t *demux)
 
static int vlc_demux_FilterDisable (demux_t *demux)
 
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)
 
static int demux_SetPosition (demux_t *p_demux, double pos, bool precise, bool absolute)
 
static int demux_SetTime (demux_t *p_demux, vlc_tick_t time, bool precise, bool absolute)
 
decoder_tdemux_PacketizerNew (vlc_object_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

◆ add_file_extension

#define add_file_extension (   ext)    add_shortcut("ext-" ext)

◆ DEMUX_INIT_COMMON

#define DEMUX_INIT_COMMON ( )
Value:
do { \
p_demux->pf_read = NULL; \
p_demux->pf_block = NULL; \
p_demux->pf_seek = NULL; \
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 *p_tsout, input_source_t *in, int i_query, va_list args)
Definition: es_out_timeshift.c:694
#define VLC_ENOMEM
Not enough memory.
Definition: vlc_common.h:507

◆ 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:516

◆ 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= vlc_tick_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_GET_TYPE 

Retrieves the demuxed content type Can fail if the control is not implemented.

arg1= int*

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_NORMAL_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_DEFAULT 
DEMUX_SET_GROUP_ALL 
DEMUX_SET_GROUP_LIST 
DEMUX_SET_ES 
DEMUX_SET_ES_LIST 
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 arg2= string

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

◆ demux_Delete()

static void demux_Delete ( demux_t demux)
inlinestatic

◆ demux_Demux()

◆ demux_IsContentType()

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

References stream_t::s, and stream_IsMimeType().

◆ demux_IsForced()

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

References stream_t::psz_name, and psz_name.

◆ 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 *  module_name,
const char *  url,
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)

◆ demux_PacketizerNew()

decoder_t * demux_PacketizerNew ( vlc_object_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, packetizer_owner::fmt_in, decoder_t::fmt_out, es_format_t::i_cat, module_need, msg_Err, decoder_t::p_module, packetizer_owner::packetizer, decoder_t::pf_decode, decoder_t::pf_packetize, vlc_custom_create, and vlc_object_delete.

◆ demux_SetPosition()

static int demux_SetPosition ( demux_t p_demux,
double  pos,
bool  precise,
bool  absolute 
)
inlinestatic

◆ demux_SetTime()

static int demux_SetTime ( demux_t p_demux,
vlc_tick_t  time,
bool  precise,
bool  absolute 
)
inlinestatic

◆ demux_UpdateTitleFromStream()

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

◆ demux_vaControl()

◆ demux_vaControlHelper()

◆ vlc_demux_CanPace()

static bool vlc_demux_CanPace ( demux_t demux)
inlinestatic

◆ vlc_demux_CanPause()

static bool vlc_demux_CanPause ( demux_t demux)
inlinestatic

References DEMUX_CAN_PAUSE, and demux_Control().

◆ vlc_demux_CanRate()

static bool vlc_demux_CanRate ( demux_t demux)
inlinestatic

◆ vlc_demux_CanRecord()

static bool vlc_demux_CanRecord ( demux_t demux)
inlinestatic

◆ vlc_demux_CanSeek()

static bool vlc_demux_CanSeek ( demux_t demux)
inlinestatic

References DEMUX_CAN_SEEK, and demux_Control().

◆ vlc_demux_FilterDisable()

static int vlc_demux_FilterDisable ( demux_t demux)
inlinestatic

◆ vlc_demux_FilterEnable()

static int vlc_demux_FilterEnable ( demux_t demux)
inlinestatic

◆ vlc_demux_GetAttachments()

static int vlc_demux_GetAttachments ( demux_t demux,
input_attachment_t ***  attachments 
)
inlinestatic

◆ vlc_demux_GetFPS()

static int vlc_demux_GetFPS ( demux_t demux,
double *  fps 
)
inlinestatic

References demux_Control(), and DEMUX_GET_FPS.

◆ vlc_demux_GetLength()

static int vlc_demux_GetLength ( demux_t demux,
vlc_tick_t length 
)
inlinestatic

◆ vlc_demux_GetMeta()

static int vlc_demux_GetMeta ( demux_t demux,
vlc_meta_t meta 
)
inlinestatic

References demux_Control(), and DEMUX_GET_META.

◆ vlc_demux_GetNormalTime()

static int vlc_demux_GetNormalTime ( demux_t demux,
vlc_tick_t normal_time 
)
inlinestatic

◆ vlc_demux_GetPosition()

static int vlc_demux_GetPosition ( demux_t demux,
double *  position 
)
inlinestatic

References demux_Control(), and DEMUX_GET_POSITION.

Referenced by demux_SetPosition().

◆ vlc_demux_GetPtsDelay()

static int vlc_demux_GetPtsDelay ( demux_t demux,
vlc_tick_t pts_delay 
)
inlinestatic

◆ vlc_demux_GetSeekpoint()

static int vlc_demux_GetSeekpoint ( demux_t demux,
int *  seekpoint 
)
inlinestatic

◆ vlc_demux_GetSignal()

static int vlc_demux_GetSignal ( demux_t demux,
double *  quality,
double *  strength 
)
inlinestatic

◆ vlc_demux_GetTime()

static int vlc_demux_GetTime ( demux_t demux,
vlc_tick_t time 
)
inlinestatic

References demux_Control(), and DEMUX_GET_TIME.

Referenced by demux_SetTime().

◆ vlc_demux_GetTitle()

static int vlc_demux_GetTitle ( demux_t demux,
int *  title 
)
inlinestatic

References demux_Control(), and DEMUX_GET_TITLE.

◆ vlc_demux_GetTitleInfo()

static int vlc_demux_GetTitleInfo ( demux_t demux,
input_title_t ***  title_info,
int *  size,
int *  pi_title_offset,
int *  pi_seekpoint_offset 
)
inlinestatic

◆ vlc_demux_GetType()

static int vlc_demux_GetType ( demux_t demux,
int *  type 
)
inlinestatic

References demux_Control(), and DEMUX_GET_TYPE.

◆ vlc_demux_HasUnsupportedMeta()

static bool vlc_demux_HasUnsupportedMeta ( demux_t demux)
inlinestatic

◆ vlc_demux_NavActivate()

static int vlc_demux_NavActivate ( demux_t demux)
inlinestatic

◆ vlc_demux_NavDown()

static int vlc_demux_NavDown ( demux_t demux)
inlinestatic

References demux_Control(), and DEMUX_NAV_DOWN.

◆ vlc_demux_NavLeft()

static int vlc_demux_NavLeft ( demux_t demux)
inlinestatic

References demux_Control(), and DEMUX_NAV_LEFT.

◆ vlc_demux_NavMenu()

static int vlc_demux_NavMenu ( demux_t demux)
inlinestatic

References demux_Control(), and DEMUX_NAV_MENU.

◆ vlc_demux_NavPopup()

static int vlc_demux_NavPopup ( demux_t demux)
inlinestatic

References demux_Control(), and DEMUX_NAV_POPUP.

◆ vlc_demux_NavRight()

static int vlc_demux_NavRight ( demux_t demux)
inlinestatic

References demux_Control(), and DEMUX_NAV_RIGHT.

◆ vlc_demux_NavUp()

static int vlc_demux_NavUp ( demux_t demux)
inlinestatic

References demux_Control(), and DEMUX_NAV_UP.

◆ vlc_demux_SetPauseState()

static int vlc_demux_SetPauseState ( demux_t demux,
bool  pause_state 
)
inlinestatic

◆ vlc_demux_SetRate()

static int vlc_demux_SetRate ( demux_t demux,
float  rate 
)
inlinestatic

References demux_Control(), and DEMUX_SET_RATE.

◆ vlc_demux_SetRecordState()

static int vlc_demux_SetRecordState ( demux_t demux,
bool  record_state,
const char *  dir_path,
const char *  ext 
)
inlinestatic

◆ vlc_demux_SetSeekPoint()

static int vlc_demux_SetSeekPoint ( demux_t demux,
int  seekpoint 
)
inlinestatic

◆ vlc_demux_SetTitle()

static int vlc_demux_SetTitle ( demux_t demux,
int  title 
)
inlinestatic

References demux_Control(), and DEMUX_SET_TITLE.