VLC 4.0.0-dev
Loading...
Searching...
No Matches
decoder.c File Reference

The input decoder connects the input client pushing data to the decoder implementation (through the matching elementary stream) and the following output for audio, video and subtitles. More...

Include dependency graph for decoder.c:

Data Structures

struct  vlc_input_decoder_t
 

Macros

#define PREROLL_NONE   VLC_TICK_MIN
 
#define PREROLL_FORCED   VLC_TICK_MAX
 
#define DECODER_BOGUS_VIDEO_DELAY   ((vlc_tick_t)(DEFAULT_PTS_DELAY * 30))
 
#define DECODER_SPU_VOUT_WAIT_DURATION   VLC_TICK_FROM_MS(200)
 
#define BLOCK_FLAG_CORE_PRIVATE_RELOADED   (1 << BLOCK_FLAG_CORE_PRIVATE_SHIFT)
 
#define decoder_Notify(decoder_priv, event, ...)
 

Enumerations

enum  reload { RELOAD_NO_REQUEST , RELOAD_DECODER , RELOAD_DECODER_AOUT }
 

Functions

static vlc_input_decoder_tdec_get_owner (decoder_t *p_dec)
 
static bool vlc_input_decoder_IsSynchronous (const vlc_input_decoder_t *dec)
 When the input decoder is being used only for packetizing (happen in stream output configuration.), there's no need to spawn a decoder thread.
 
static void Decoder_ChangeOutputPause (vlc_input_decoder_t *p_owner, bool paused, vlc_tick_t date)
 
static void Decoder_ChangeOutputRate (vlc_input_decoder_t *p_owner, float rate)
 
static void Decoder_ChangeOutputDelay (vlc_input_decoder_t *p_owner, vlc_tick_t delay)
 
static void Decoder_UpdateOutState (vlc_input_decoder_t *owner)
 
static int LoadDecoder (decoder_t *p_dec, bool b_packetizer, es_format_t *fmt_in)
 Load a decoder module.
 
static int DecoderThread_Reload (vlc_input_decoder_t *p_owner, const es_format_t *restrict p_fmt, enum reload reload)
 
static void DecoderUpdateFormatLocked (vlc_input_decoder_t *p_owner)
 
static void MouseEvent (const vlc_mouse_t *newmouse, void *user_data)
 
static bool aout_replaygain_changed (const audio_replay_gain_t *a, const audio_replay_gain_t *b)
 
static int ModuleThread_UpdateAudioFormat (decoder_t *p_dec)
 
static int CreateVoutIfNeeded (vlc_input_decoder_t *)
 
static int ModuleThread_UpdateVideoFormat (decoder_t *p_dec, vlc_video_context *vctx)
 
static vlc_decoder_deviceModuleThread_GetDecoderDevice (decoder_t *p_dec)
 
static picture_tModuleThread_NewVideoBuffer (decoder_t *p_dec)
 
static subpicture_tModuleThread_NewSpuBuffer (decoder_t *p_dec, const subpicture_updater_t *p_updater)
 
static int InputThread_GetInputAttachments (decoder_t *p_dec, input_attachment_t ***ppp_attachment, int *pi_attachment)
 
static vlc_tick_t ModuleThread_GetDisplayDate (decoder_t *p_dec, vlc_tick_t system_now, vlc_tick_t i_ts)
 
static float ModuleThread_GetDisplayRate (decoder_t *p_dec)
 
vlc_frame_tdecoder_NewAudioBuffer (decoder_t *dec, int samples)
 This function will return a new audio buffer usable by a decoder as an output buffer.
 
static void RequestReload (vlc_input_decoder_t *p_owner)
 
static int DecoderWaitUnblock (vlc_input_decoder_t *p_owner)
 
static void DecoderUpdatePreroll (vlc_tick_t *pi_preroll, const vlc_frame_t *p)
 
static void DecoderSendSubstream (vlc_input_decoder_t *p_owner)
 
static void DecoderThread_ProcessSout (vlc_input_decoder_t *p_owner, vlc_frame_t *frame)
 
static void GetCcChannels (vlc_input_decoder_t *owner, size_t *max_channels, uint64_t *bitmap)
 
static bool SubDecoderIsCc (vlc_input_decoder_t *subdec)
 
static void DecoderPlayCcLocked (vlc_input_decoder_t *p_owner, vlc_frame_t *p_cc, const decoder_cc_desc_t *p_desc)
 
static void PacketizerGetCc (vlc_input_decoder_t *p_owner, decoder_t *p_dec_cc)
 
static void ModuleThread_QueueCc (decoder_t *p_videodec, vlc_frame_t *p_cc, const decoder_cc_desc_t *p_desc)
 
static int ModuleThread_PlayVideo (vlc_input_decoder_t *p_owner, picture_t *p_picture)
 
static void ModuleThread_QueueVideo (decoder_t *p_dec, picture_t *p_pic)
 
static vlc_decoder_devicethumbnailer_get_device (decoder_t *p_dec)
 
static picture_tthumbnailer_buffer_new (decoder_t *p_dec)
 
static void ModuleThread_QueueThumbnail (decoder_t *p_dec, picture_t *p_pic)
 
static int ModuleThread_PlayAudio (vlc_input_decoder_t *p_owner, vlc_frame_t *p_audio)
 
static void ModuleThread_QueueAudio (decoder_t *p_dec, vlc_frame_t *p_aout_buf)
 
static void ModuleThread_PlaySpu (vlc_input_decoder_t *p_owner, subpicture_t *p_subpic)
 
static void ModuleThread_QueueSpu (decoder_t *p_dec, subpicture_t *p_spu)
 
static void DecoderThread_ProcessInput (vlc_input_decoder_t *p_owner, vlc_frame_t *frame)
 Decode a frame.
 
static void DecoderThread_DecodeBlock (vlc_input_decoder_t *p_owner, vlc_frame_t *frame)
 
static void DecoderThread_Flush (vlc_input_decoder_t *p_owner)
 
static void * DecoderThread (void *p_data)
 The decoding main loop.
 
static vlc_input_decoder_tCreateDecoder (vlc_object_t *p_parent, const struct vlc_input_decoder_cfg *cfg)
 Create a decoder object.
 
static void DeleteDecoder (vlc_input_decoder_t *p_owner, enum es_format_category_e i_cat)
 Destroys a decoder object.
 
static void DecoderUnsupportedCodec (decoder_t *p_dec, const es_format_t *fmt, bool b_decoding)
 
static vlc_input_decoder_tdecoder_New (vlc_object_t *p_parent, const struct vlc_input_decoder_cfg *cfg)
 
vlc_input_decoder_tvlc_input_decoder_New (vlc_object_t *parent, const struct vlc_input_decoder_cfg *cfg)
 Spawns a new decoder thread from the input thread.
 
vlc_input_decoder_tvlc_input_decoder_Create (vlc_object_t *p_parent, const es_format_t *fmt, const char *es_id, struct vlc_clock_t *clock, input_resource_t *p_resource)
 Spawn a decoder thread outside of the input thread.
 
static void RemoveCcDecoder (vlc_input_decoder_t *owner, vlc_input_decoder_t *subdec)
 
void vlc_input_decoder_Delete (vlc_input_decoder_t *p_owner)
 Delete an existing vlc_input_decoder_t instance.
 
void vlc_subdec_desc_Clean (struct vlc_subdec_desc *desc)
 
static void GetCCDescLocked (vlc_input_decoder_t *owner, struct vlc_subdec_desc *desc)
 
static void GetStatusLocked (vlc_input_decoder_t *p_owner, struct vlc_input_decoder_status *status)
 
void vlc_input_decoder_DecodeWithStatus (vlc_input_decoder_t *p_owner, vlc_frame_t *frame, bool b_do_pace, struct vlc_input_decoder_status *status)
 Get the last status of the decoder.
 
void vlc_input_decoder_Decode (vlc_input_decoder_t *p_owner, vlc_frame_t *frame, bool b_do_pace)
 Put a vlc_frame_t in the decoder's fifo.
 
bool vlc_input_decoder_IsEmpty (vlc_input_decoder_t *p_owner)
 This function returns true if the decoder fifo is empty and false otherwise.
 
void vlc_input_decoder_Drain (vlc_input_decoder_t *p_owner)
 Signals that there are no further frames to decode, and requests that the decoder drain all pending buffers.
 
void vlc_input_decoder_Flush (vlc_input_decoder_t *p_owner)
 Requests that the decoder immediately discard all pending buffers.
 
vlc_input_decoder_tvlc_input_decoder_CreateSubDec (vlc_input_decoder_t *p_owner, const struct vlc_input_decoder_cfg *cfg)
 This function Creates and adds the requested SubDec.
 
void vlc_input_decoder_ChangePause (vlc_input_decoder_t *p_owner, bool b_paused, vlc_tick_t i_date)
 This function changes the pause state.
 
void vlc_input_decoder_ChangeRate (vlc_input_decoder_t *owner, float rate)
 Changes the decoder rate.
 
void vlc_input_decoder_ChangeDelay (vlc_input_decoder_t *owner, vlc_tick_t delay)
 
void vlc_input_decoder_StartWait (vlc_input_decoder_t *p_owner)
 This function makes the decoder start waiting for a valid data block from its fifo.
 
void vlc_input_decoder_StopWait (vlc_input_decoder_t *p_owner)
 This function exits the waiting mode of the decoder.
 
void vlc_input_decoder_Wait (vlc_input_decoder_t *p_owner)
 This function waits for the decoder to actually receive data.
 
void vlc_input_decoder_FrameNext (vlc_input_decoder_t *p_owner)
 This function forces the display of the next picture.
 
size_t vlc_input_decoder_GetFifoSize (vlc_input_decoder_t *p_owner)
 This function returns the current size in bytes of the decoder fifo.
 
static bool DecoderHasVbi (decoder_t *dec)
 
int vlc_input_decoder_GetVbiPage (vlc_input_decoder_t *owner, bool *opaque)
 
int vlc_input_decoder_SetVbiPage (vlc_input_decoder_t *owner, unsigned page)
 
int vlc_input_decoder_SetVbiOpaque (vlc_input_decoder_t *owner, bool opaque)
 
void vlc_input_decoder_SetVoutMouseEvent (vlc_input_decoder_t *owner, vlc_mouse_event mouse_event, void *user_data)
 
int vlc_input_decoder_AddVoutOverlay (vlc_input_decoder_t *owner, subpicture_t *sub, size_t *channel)
 
int vlc_input_decoder_DelVoutOverlay (vlc_input_decoder_t *owner, size_t channel)
 
int vlc_input_decoder_SetSpuHighlight (vlc_input_decoder_t *p_owner, const vlc_spu_highlight_t *spu_hl)
 

Variables

static const struct decoder_owner_callbacks dec_video_cbs
 
static const struct decoder_owner_callbacks dec_thumbnailer_cbs
 
static const struct decoder_owner_callbacks dec_audio_cbs
 
static const struct decoder_owner_callbacks dec_spu_cbs
 

Detailed Description

The input decoder connects the input client pushing data to the decoder implementation (through the matching elementary stream) and the following output for audio, video and subtitles.

It follows the locking rules below:

  • The fifo cannot be locked when calling function from the decoder module implementation.
  • However, the decoder module implementation might indirectly lock the fifo when calling the owner methods, in particular to send a frame or update the output status.
  • The input code can lock the fifo to modify the global state of the input decoder.

Backpressure preventing starvation is done by the pacing of the decoder, the calls into the decoder implementation, and the limits of the fifo queue.

Basically a very fast decoder will often wait since the fifo will be consumed really quickly and thus almost never stay under the lock. Likewise, when the decoder is slower and the fifo can grow, it also means that the decoder thread will wait more often on the decoder_t::pf_decode call, which is done without the fifo lock as per above rules.

In addition with the standard input/output cycle from the decoder, the video decoders can create sub-decoders for the closed captions support embedded in the supplementary information from the codecs.

To do so, they need to create a decoder_cc_desc_t matching with the format that needs to be described (number of channels, type of channels) and they then create them along with the closed-captions content with decoder_QueueCc.

In the input/decoder.c code, the access to the sub-decoders in the subdecs.list table is protected through the subdecs.lock mutex. Taking this lock ensures that the sub-decoder won't get asynchronously removed while using it, and any mutex from the sub-decoder can then be taken under this lock.

Macro Definition Documentation

◆ BLOCK_FLAG_CORE_PRIVATE_RELOADED

#define BLOCK_FLAG_CORE_PRIVATE_RELOADED   (1 << BLOCK_FLAG_CORE_PRIVATE_SHIFT)

◆ DECODER_BOGUS_VIDEO_DELAY

#define DECODER_BOGUS_VIDEO_DELAY   ((vlc_tick_t)(DEFAULT_PTS_DELAY * 30))

◆ decoder_Notify

#define decoder_Notify (   decoder_priv,
  event,
  ... 
)
Value:
if (decoder_priv->cbs && decoder_priv->cbs->event) \
decoder_priv->cbs->event(decoder_priv, __VA_ARGS__, \
decoder_priv->cbs_userdata);

◆ DECODER_SPU_VOUT_WAIT_DURATION

#define DECODER_SPU_VOUT_WAIT_DURATION   VLC_TICK_FROM_MS(200)

◆ PREROLL_FORCED

#define PREROLL_FORCED   VLC_TICK_MAX

◆ PREROLL_NONE

#define PREROLL_NONE   VLC_TICK_MIN

Enumeration Type Documentation

◆ reload

enum reload
Enumerator
RELOAD_NO_REQUEST 
RELOAD_DECODER 
RELOAD_DECODER_AOUT 

Function Documentation

◆ aout_replaygain_changed()

◆ CreateDecoder()

static vlc_input_decoder_t * CreateDecoder ( vlc_object_t p_parent,
const struct vlc_input_decoder_cfg cfg 
)
static

Create a decoder object.

Parameters
p_parenta VLC parent object to inherit variable from
cfgthe input decoder configuration
Returns
a new input decoder object

References AUDIO_ES, es_format_t::audio_replay_gain, AUDIO_REPLAY_GAIN_MAX, vlc_input_decoder_t::b_draining, vlc_input_decoder_t::b_first, vlc_input_decoder_t::b_fmt_description, vlc_input_decoder_t::b_has_data, vlc_input_decoder_t::b_idle, es_format_t::b_packetized, vlc_input_decoder_t::b_sout_created, vlc_input_decoder_t::b_supported, vlc_input_decoder_t::b_waiting, block_FifoNew, decoder_t::cbs, vlc_input_decoder_t::cbs, vlc_input_decoder_cfg::cbs, vlc_input_decoder_cfg::cbs_data, vlc_input_decoder_t::cbs_userdata, vlc_input_decoder_t::cc, vlc_input_decoder_cfg::cc_decoder, vlc_input_decoder_cfg::clock, vlc_input_decoder_t::count, vlc_input_decoder_t::dec, dec_audio_cbs, vlc_input_decoder_t::dec_fmt_in, dec_spu_cbs, dec_thumbnailer_cbs, dec_video_cbs, decoder_Init(), vlc_input_decoder_t::delay, vlc_input_decoder_t::desc, vlc_input_decoder_t::error, es_format_Init(), vlc_input_decoder_t::flushing, vlc_input_decoder_t::fmt, vlc_input_decoder_cfg::fmt, decoder_t::fmt_in, decoder_t::fmt_out, vlc_input_decoder_t::frames_countdown, vlc_input_decoder_t::hw_dec, vlc_input_decoder_cfg::hw_dec, decoder_cc_desc_t::i_608_channels, decoder_cc_desc_t::i_708_channels, es_format_t::i_cat, vlc_input_decoder_t::i_preroll_end, vlc_input_decoder_t::i_spu_channel, vlc_input_decoder_t::i_spu_order, vlc_input_decoder_cfg::input_type, INPUT_TYPE_PREPARSING, INPUT_TYPE_THUMBNAILING, vlc_input_decoder_t::list, LoadDecoder(), vlc_input_decoder_t::lock, vlc_input_decoder_t::master_dec, vlc_input_decoder_t::mouse_event, vlc_input_decoder_t::mouse_lock, vlc_input_decoder_t::mouse_opaque, msg_Err, vlc_input_decoder_t::output_delay, vlc_input_decoder_t::output_paused, vlc_input_decoder_t::output_rate, vlc_input_decoder_t::p_aout, vlc_input_decoder_t::p_astream, vlc_input_decoder_t::p_clock, vlc_input_decoder_t::p_description, vlc_input_decoder_t::p_fifo, vlc_input_decoder_t::p_packetizer, vlc_input_decoder_t::p_resource, vlc_input_decoder_t::p_sout, vlc_input_decoder_t::p_sout_input, vlc_input_decoder_t::p_vout, vlc_input_decoder_t::pause_date, vlc_input_decoder_t::paused, audio_replay_gain_t::pb_gain, audio_replay_gain_t::pb_peak, audio_replay_gain_t::pf_gain, audio_replay_gain_t::pf_peak, vlc_input_decoder_t::pktz_fmt_in, PREROLL_NONE, vlc_input_decoder_t::psz_id, vlc_input_decoder_t::rate, vlc_input_decoder_t::reload, RELOAD_NO_REQUEST, vlc_input_decoder_cfg::resource, vlc_input_decoder_t::selected_codec, vlc_input_decoder_cfg::sout, vlc_input_decoder_t::sout_es_id, SPU_ES, vlc_input_decoder_cfg::str_id, vlc_input_decoder_t::subdecs, unlikely, VIDEO_ES, VLC_CODEC_CEA608, VLC_CODEC_CEA708, vlc_cond_init(), vlc_custom_create, vlc_list_init(), vlc_mutex_init(), vlc_object_delete, VLC_TICK_INVALID, VOUT_SPU_CHANNEL_INVALID, vlc_input_decoder_t::vout_started, vlc_input_decoder_t::wait_acknowledge, vlc_input_decoder_t::wait_fifo, and vlc_input_decoder_t::wait_request.

Referenced by decoder_New().

◆ CreateVoutIfNeeded()

◆ dec_get_owner()

◆ Decoder_ChangeOutputDelay()

◆ Decoder_ChangeOutputPause()

◆ Decoder_ChangeOutputRate()

◆ decoder_New()

◆ decoder_NewAudioBuffer()

vlc_frame_t * decoder_NewAudioBuffer ( decoder_t dec,
int  i_nb_samples 
)

This function will return a new audio buffer usable by a decoder as an output buffer.

It must be released with block_Release() or returned it to the caller as a decoder_QueueAudio parameter.

References es_format_t::audio, block_Alloc, decoder_t::fmt_out, audio_format_t::i_bytes_per_frame, audio_format_t::i_frame_length, vlc_frame_t::i_length, vlc_frame_t::i_nb_samples, vlc_frame_t::i_pts, and likely.

◆ Decoder_UpdateOutState()

◆ DecoderHasVbi()

◆ DecoderPlayCcLocked()

◆ DecoderSendSubstream()

◆ DecoderThread()

◆ DecoderThread_DecodeBlock()

◆ DecoderThread_Flush()

◆ DecoderThread_ProcessInput()

◆ DecoderThread_ProcessSout()

◆ DecoderThread_Reload()

◆ DecoderUnsupportedCodec()

static void DecoderUnsupportedCodec ( decoder_t p_dec,
const es_format_t fmt,
bool  b_decoding 
)
static

◆ DecoderUpdateFormatLocked()

◆ DecoderUpdatePreroll()

static void DecoderUpdatePreroll ( vlc_tick_t pi_preroll,
const vlc_frame_t p 
)
inlinestatic

◆ DecoderWaitUnblock()

◆ DeleteDecoder()

◆ GetCcChannels()

◆ GetCCDescLocked()

◆ GetStatusLocked()

◆ InputThread_GetInputAttachments()

static int InputThread_GetInputAttachments ( decoder_t p_dec,
input_attachment_t ***  ppp_attachment,
int *  pi_attachment 
)
static

◆ LoadDecoder()

static int LoadDecoder ( decoder_t p_dec,
bool  b_packetizer,
es_format_t fmt_in 
)
static

◆ ModuleThread_GetDecoderDevice()

◆ ModuleThread_GetDisplayDate()

◆ ModuleThread_GetDisplayRate()

◆ ModuleThread_NewSpuBuffer()

◆ ModuleThread_NewVideoBuffer()

static picture_t * ModuleThread_NewVideoBuffer ( decoder_t p_dec)
static

◆ ModuleThread_PlayAudio()

◆ ModuleThread_PlaySpu()

◆ ModuleThread_PlayVideo()

◆ ModuleThread_QueueAudio()

◆ ModuleThread_QueueCc()

◆ ModuleThread_QueueSpu()

◆ ModuleThread_QueueThumbnail()

static void ModuleThread_QueueThumbnail ( decoder_t p_dec,
picture_t p_pic 
)
static

◆ ModuleThread_QueueVideo()

◆ ModuleThread_UpdateAudioFormat()

◆ ModuleThread_UpdateVideoFormat()

◆ MouseEvent()

◆ PacketizerGetCc()

static void PacketizerGetCc ( vlc_input_decoder_t p_owner,
decoder_t p_dec_cc 
)
static

◆ RemoveCcDecoder()

◆ RequestReload()

static void RequestReload ( vlc_input_decoder_t p_owner)
static

◆ SubDecoderIsCc()

◆ thumbnailer_buffer_new()

◆ thumbnailer_get_device()

static vlc_decoder_device * thumbnailer_get_device ( decoder_t p_dec)
static

References VLC_UNUSED.

◆ vlc_input_decoder_AddVoutOverlay()

◆ vlc_input_decoder_ChangeDelay()

void vlc_input_decoder_ChangeDelay ( vlc_input_decoder_t owner,
vlc_tick_t  delay 
)

◆ vlc_input_decoder_ChangePause()

void vlc_input_decoder_ChangePause ( vlc_input_decoder_t p_owner,
bool  b_paused,
vlc_tick_t  i_date 
)

This function changes the pause state.

The date parameter MUST hold the exact date at which the change has been done for proper vout/aout pausing.

References vlc_input_decoder_t::frames_countdown, vlc_input_decoder_t::p_fifo, vlc_input_decoder_t::pause_date, vlc_input_decoder_t::paused, vlc_fifo_Lock(), vlc_fifo_Signal(), and vlc_fifo_Unlock().

Referenced by EsOutCreateDecoder(), and EsOutDecodersChangePause().

◆ vlc_input_decoder_ChangeRate()

void vlc_input_decoder_ChangeRate ( vlc_input_decoder_t dec,
float  rate 
)

Changes the decoder rate.

This function changes rate of the intended playback speed to nominal speed.

Parameters
decdecoder
rateplayback rate (default is 1)

References vlc_input_decoder_t::p_fifo, vlc_input_decoder_t::rate, vlc_fifo_Lock(), and vlc_fifo_Unlock().

Referenced by EsOutChangeRate(), and EsOutCreateDecoder().

◆ vlc_input_decoder_Create()

vlc_input_decoder_t * vlc_input_decoder_Create ( vlc_object_t p_parent,
const es_format_t fmt,
const char *  es_id,
struct vlc_clock_t clock,
input_resource_t p_resource 
)

Spawn a decoder thread outside of the input thread.

References vlc_input_decoder_cfg::clock, decoder_New(), vlc_input_decoder_cfg::fmt, INPUT_TYPE_PLAYBACK, and var_InheritBool().

◆ vlc_input_decoder_CreateSubDec()

◆ vlc_input_decoder_Decode()

void vlc_input_decoder_Decode ( vlc_input_decoder_t p_dec,
struct vlc_frame_t frame,
bool  do_pace 
)

Put a vlc_frame_t in the decoder's fifo.

Thread-safe w.r.t. the decoder. May be a cancellation point.

Parameters
p_decthe decoder object
framethe data frame
do_pacewhether we wait for some decoding to happen or not

References vlc_input_decoder_DecodeWithStatus().

Referenced by EsOutSend().

◆ vlc_input_decoder_DecodeWithStatus()

◆ vlc_input_decoder_Delete()

◆ vlc_input_decoder_DelVoutOverlay()

◆ vlc_input_decoder_Drain()

void vlc_input_decoder_Drain ( vlc_input_decoder_t p_owner)

Signals that there are no further frames to decode, and requests that the decoder drain all pending buffers.

This is used to ensure that all intermediate buffers empty and no samples get lost at the end of the stream.

Note
The function does not actually wait for draining. It just signals that draining should be performed once the decoder has emptied FIFO.

References vlc_input_decoder_t::b_draining, DecoderThread_ProcessInput(), vlc_input_decoder_t::p_fifo, vlc_fifo_Lock(), vlc_fifo_Signal(), vlc_fifo_Unlock(), and vlc_input_decoder_IsSynchronous().

Referenced by EsOutDrainDecoder(), and EsOutDrainSubESes().

◆ vlc_input_decoder_Flush()

◆ vlc_input_decoder_FrameNext()

◆ vlc_input_decoder_GetFifoSize()

size_t vlc_input_decoder_GetFifoSize ( vlc_input_decoder_t p_owner)

This function returns the current size in bytes of the decoder fifo.

References block_FifoSize, and vlc_input_decoder_t::p_fifo.

Referenced by EsOutIsExtraBufferingAllowed().

◆ vlc_input_decoder_GetVbiPage()

int vlc_input_decoder_GetVbiPage ( vlc_input_decoder_t owner,
bool *  opaque 
)

◆ vlc_input_decoder_IsEmpty()

◆ vlc_input_decoder_IsSynchronous()

static bool vlc_input_decoder_IsSynchronous ( const vlc_input_decoder_t dec)
inlinestatic

When the input decoder is being used only for packetizing (happen in stream output configuration.), there's no need to spawn a decoder thread.

The input_decoder is then considered synchronous.

Return values
trueWhen no decoder thread will be spawned.
falseWhen a decoder thread will be spawned.

References vlc_input_decoder_t::p_sout.

Referenced by decoder_New(), vlc_input_decoder_DecodeWithStatus(), vlc_input_decoder_Delete(), vlc_input_decoder_Drain(), vlc_input_decoder_Flush(), vlc_input_decoder_StartWait(), vlc_input_decoder_StopWait(), and vlc_input_decoder_Wait().

◆ vlc_input_decoder_New()

vlc_input_decoder_t * vlc_input_decoder_New ( vlc_object_t parent,
const struct vlc_input_decoder_cfg cfg 
)

Spawns a new decoder thread from the input thread.

Parameters
parentthe VLC object to inherit variable from
cfgthe input decoder configuration
Returns
the spawned decoder object

References decoder_New().

Referenced by EsOutCreateDecoder(), EsOutSetRecord(), and vlc_input_decoder_CreateSubDec().

◆ vlc_input_decoder_SetSpuHighlight()

◆ vlc_input_decoder_SetVbiOpaque()

int vlc_input_decoder_SetVbiOpaque ( vlc_input_decoder_t owner,
bool  opaque 
)

◆ vlc_input_decoder_SetVbiPage()

int vlc_input_decoder_SetVbiPage ( vlc_input_decoder_t owner,
unsigned  page 
)

◆ vlc_input_decoder_SetVoutMouseEvent()

◆ vlc_input_decoder_StartWait()

◆ vlc_input_decoder_StopWait()

void vlc_input_decoder_StopWait ( vlc_input_decoder_t p_owner)

◆ vlc_input_decoder_Wait()

◆ vlc_subdec_desc_Clean()

void vlc_subdec_desc_Clean ( struct vlc_subdec_desc desc)

Variable Documentation

◆ dec_audio_cbs

const struct decoder_owner_callbacks dec_audio_cbs
static
Initial value:
=
{
.audio = {
},
.get_attachments = InputThread_GetInputAttachments,
}
static int InputThread_GetInputAttachments(decoder_t *p_dec, input_attachment_t ***ppp_attachment, int *pi_attachment)
Definition decoder.c:964
static int ModuleThread_UpdateAudioFormat(decoder_t *p_dec)
Definition decoder.c:512
static void ModuleThread_QueueAudio(decoder_t *p_dec, vlc_frame_t *p_aout_buf)
Definition decoder.c:1535

Referenced by CreateDecoder().

◆ dec_spu_cbs

const struct decoder_owner_callbacks dec_spu_cbs
static
Initial value:
=
{
.spu = {
},
.get_attachments = InputThread_GetInputAttachments,
}
static subpicture_t * ModuleThread_NewSpuBuffer(decoder_t *p_dec, const subpicture_updater_t *p_updater)
Definition decoder.c:872
static void ModuleThread_QueueSpu(decoder_t *p_dec, subpicture_t *p_spu)
Definition decoder.c:1589

Referenced by CreateDecoder().

◆ dec_thumbnailer_cbs

const struct decoder_owner_callbacks dec_thumbnailer_cbs
static
Initial value:
=
{
.video = {
.get_device = thumbnailer_get_device,
.buffer_new = thumbnailer_buffer_new,
},
.get_attachments = InputThread_GetInputAttachments,
}
static void ModuleThread_QueueThumbnail(decoder_t *p_dec, picture_t *p_pic)
Definition decoder.c:1452
static vlc_decoder_device * thumbnailer_get_device(decoder_t *p_dec)
Definition decoder.c:1428
static picture_t * thumbnailer_buffer_new(decoder_t *p_dec)
Definition decoder.c:1437

Referenced by CreateDecoder().

◆ dec_video_cbs

const struct decoder_owner_callbacks dec_video_cbs
static
Initial value:
=
{
.video = {
.queue_cc = ModuleThread_QueueCc,
.get_display_date = ModuleThread_GetDisplayDate,
.get_display_rate = ModuleThread_GetDisplayRate,
},
.get_attachments = InputThread_GetInputAttachments,
}
static vlc_tick_t ModuleThread_GetDisplayDate(decoder_t *p_dec, vlc_tick_t system_now, vlc_tick_t i_ts)
Definition decoder.c:980
static vlc_decoder_device * ModuleThread_GetDecoderDevice(decoder_t *p_dec)
Definition decoder.c:816
static int ModuleThread_UpdateVideoFormat(decoder_t *p_dec, vlc_video_context *vctx)
Definition decoder.c:615
static void ModuleThread_QueueCc(decoder_t *p_videodec, vlc_frame_t *p_cc, const decoder_cc_desc_t *p_desc)
Definition decoder.c:1302
static float ModuleThread_GetDisplayRate(decoder_t *p_dec)
Definition decoder.c:1001
static void ModuleThread_QueueVideo(decoder_t *p_dec, picture_t *p_pic)
Definition decoder.c:1397
static picture_t * ModuleThread_NewVideoBuffer(decoder_t *p_dec)
Definition decoder.c:860

Referenced by CreateDecoder().