VLC
4.0.0-dev
|
Audio, video and text decoders. More...
![]() |
Files | |
file | vlc_codec.h |
Decoder and encoder modules interface. | |
Data Structures | |
struct | decoder_owner_callbacks |
struct | decoder_t |
struct | decoder_cc_desc_t |
Typedefs | |
typedef struct decoder_cc_desc_t | decoder_cc_desc_t |
static vlc_decoder_device * | decoder_GetDecoderDevice (decoder_t *dec) |
Creates/Updates the output decoder device. More... | |
int | decoder_UpdateVideoOutput (decoder_t *dec, vlc_video_context *vctx_out) |
Creates/Updates the rest of the video output pipeline. More... | |
int | decoder_UpdateVideoFormat (decoder_t *dec) |
Updates the video output format. More... | |
picture_t * | decoder_NewPicture (decoder_t *dec) |
Allocates an output picture buffer. More... | |
void | decoder_AbortPictures (decoder_t *dec, bool b_abort) |
Abort any calls of decoder_NewPicture. More... | |
void | decoder_Init (decoder_t *dec, const es_format_t *) |
Initialize a decoder structure before creating the decoder. More... | |
void | decoder_Destroy (decoder_t *p_dec) |
Destroy a decoder and reset the structure. More... | |
void | decoder_Clean (decoder_t *p_dec) |
Unload a decoder module and reset the input/output formats. More... | |
static void | decoder_QueueVideo (decoder_t *dec, picture_t *p_pic) |
This function queues a single picture to the video output. More... | |
static void | decoder_QueueCc (decoder_t *dec, block_t *p_cc, const decoder_cc_desc_t *p_desc) |
This function queues the Closed Captions. More... | |
static void | decoder_QueueAudio (decoder_t *dec, block_t *p_aout_buf) |
This function queues a single audio block to the audio output. More... | |
static void | decoder_QueueSub (decoder_t *dec, subpicture_t *p_spu) |
This function queues a single subtitle to the video output. More... | |
static int | decoder_UpdateAudioFormat (decoder_t *dec) |
This function notifies the audio output pipeline of a new audio output format (fmt_out.audio). More... | |
block_t * | decoder_NewAudioBuffer (decoder_t *, int i_nb_samples) |
This function will return a new audio buffer usable by a decoder as an output buffer. More... | |
static subpicture_t * | decoder_NewSubpicture (decoder_t *dec, const subpicture_updater_t *p_dyn) |
This function will return a new subpicture usable by a decoder as an output buffer. More... | |
static int | decoder_GetInputAttachments (decoder_t *dec, input_attachment_t ***ppp_attachment, int *pi_attachment) |
This function gives all input attachments at once. More... | |
static vlc_tick_t | decoder_GetDisplayDate (decoder_t *dec, vlc_tick_t system_now, vlc_tick_t i_ts) |
This function converts a decoder timestamp into a display date comparable to vlc_tick_now(). More... | |
static float | decoder_GetDisplayRate (decoder_t *dec) |
This function returns the current input rate. More... | |
typedef struct vlc_input_decoder_t | vlc_input_decoder_t |
typedef struct input_resource_t | input_resource_t |
This defines an opaque input resource handler. More... | |
vlc_input_decoder_t * | vlc_input_decoder_Create (vlc_object_t *, const es_format_t *, input_resource_t *) |
Spawn a decoder thread outside of the input thread. More... | |
void | vlc_input_decoder_Delete (vlc_input_decoder_t *) |
Kills a decoder thread and waits until it's finished. More... | |
void | vlc_input_decoder_Decode (vlc_input_decoder_t *, block_t *, bool b_do_pace) |
Put a block_t in the decoder's fifo. More... | |
void | vlc_input_decoder_Drain (vlc_input_decoder_t *) |
Signals that there are no further blocks to decode, and requests that the decoder drain all pending buffers. More... | |
void | vlc_input_decoder_Flush (vlc_input_decoder_t *) |
Requests that the decoder immediately discard all pending buffers. More... | |
int | vlc_input_decoder_SetSpuHighlight (vlc_input_decoder_t *, const vlc_spu_highlight_t *) |
input_resource_t * | input_resource_New (vlc_object_t *) |
It creates an empty input resource handler. More... | |
void | input_resource_Release (input_resource_t *) |
It releases an input resource. More... | |
audio_output_t * | input_resource_HoldAout (input_resource_t *) |
audio_output_t * | input_resource_GetAout (input_resource_t *) |
This function creates or recycles an audio output. More... | |
void | input_resource_PutAout (input_resource_t *, audio_output_t *) |
This function retains or destroys an audio output. More... | |
Audio, video and text decoders.
typedef struct decoder_cc_desc_t decoder_cc_desc_t |
typedef struct input_resource_t input_resource_t |
This defines an opaque input resource handler.
typedef struct vlc_input_decoder_t vlc_input_decoder_t |
void decoder_AbortPictures | ( | decoder_t * | dec, |
bool | b_abort | ||
) |
Abort any calls of decoder_NewPicture.
If b_abort is true, all pending and futures calls of decoder_NewPicture will be aborted. This function can be used by asynchronous video decoders to unblock a thread that is waiting for a picture.
References decoder_t::cbs, decoder_t::fmt_in, es_format_t::i_cat, decoder_owner_callbacks::video, VIDEO_ES, and vlc_assert.
Referenced by decoder_GetDecoderDevice().
void decoder_Clean | ( | decoder_t * | p_dec | ) |
Unload a decoder module and reset the input/output formats.
To be used by decoder owners.
References es_format_Clean(), decoder_t::fmt_in, decoder_t::fmt_out, module_unneed, decoder_t::p_description, decoder_t::p_module, and vlc_meta_Delete().
Referenced by decoder_Destroy(), decoder_GetDecoderDevice(), DecoderThread_Reload(), DeleteDecoder(), and LoadDecoder().
void decoder_Destroy | ( | decoder_t * | p_dec | ) |
Destroy a decoder and reset the structure.
To be used by decoder owners.
References decoder_Clean(), and vlc_object_delete.
Referenced by CreateDecoder(), decoder_GetDecoderDevice(), DeleteDecoder(), image_HandlerDelete(), and ImageRead().
|
inlinestatic |
Creates/Updates the output decoder device.
This function notifies the video output pipeline of a new video output format (fmt_out.video). If there was no decoder device so far or a new decoder device is required, a new decoder device will be set up. decoder_UpdateVideoOutput() can then be used.
If the format is unchanged, this function has no effects and returns zero.
dec | the decoder object |
References decoder_t::cbs, decoder_AbortPictures(), decoder_Clean(), decoder_Destroy(), decoder_Init(), decoder_NewPicture(), decoder_UpdateVideoFormat(), decoder_UpdateVideoOutput(), decoder_t::fmt_in, es_format_t::i_cat, unlikely, decoder_owner_callbacks::video, VIDEO_ES, VLC_API, and vlc_assert.
|
inlinestatic |
This function converts a decoder timestamp into a display date comparable to vlc_tick_now().
You MUST use it only for gathering statistics about speed.
References decoder_t::cbs, decoder_t::fmt_in, es_format_t::i_cat, decoder_owner_callbacks::video, VIDEO_ES, vlc_assert, VLC_TICK_INVALID, and VLC_USED.
|
inlinestatic |
This function returns the current input rate.
You MUST use it only for gathering statistics about speed.
References decoder_t::cbs, decoder_t::fmt_in, es_format_t::i_cat, decoder_owner_callbacks::video, VIDEO_ES, and vlc_assert.
|
inlinestatic |
This function gives all input attachments at once.
You MUST release the returned values
References decoder_t::cbs, decoder_owner_callbacks::get_attachments, vlc_assert, VLC_EGENERIC, and VLC_USED.
void decoder_Init | ( | decoder_t * | dec, |
const es_format_t * | |||
) |
Initialize a decoder structure before creating the decoder.
To be used by decoder owners. By default frame drop is not allowed.
Referenced by decoder_GetDecoderDevice().
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, block_t::i_length, block_t::i_nb_samples, block_t::i_pts, and likely.
Referenced by decoder_UpdateAudioFormat().
Allocates an output picture buffer.
This function pulls an output picture buffer for the decoder from the buffer pool of the video output. The picture must be released with picture_Release() when it is no longer referenced by the decoder.
References decoder_t::cbs, decoder_t::fmt_in, decoder_t::fmt_out, es_format_t::i_cat, picture_NewFromFormat(), decoder_owner_callbacks::video, es_format_t::video, VIDEO_ES, and vlc_assert.
Referenced by decoder_GetDecoderDevice().
|
inlinestatic |
This function will return a new subpicture usable by a decoder as an output buffer.
You have to release it using subpicture_Delete() or by returning it to the caller as a decoder_QueueSub parameter.
References decoder_t::cbs, decoder_t::fmt_in, es_format_t::i_cat, msg_Warn, decoder_owner_callbacks::spu, SPU_ES, and vlc_assert.
This function queues a single audio block to the audio output.
References decoder_owner_callbacks::audio, AUDIO_ES, decoder_t::cbs, decoder_t::fmt_in, es_format_t::i_cat, block_t::p_next, and vlc_assert.
|
inlinestatic |
This function queues the Closed Captions.
dec | the decoder object |
p_cc | the closed-caption to queue |
p_desc | decoder_cc_desc_t description structure |
References block_Release(), decoder_t::cbs, decoder_t::fmt_in, es_format_t::i_cat, decoder_owner_callbacks::video, VIDEO_ES, and vlc_assert.
|
inlinestatic |
This function queues a single subtitle to the video output.
References decoder_t::cbs, decoder_t::fmt_in, es_format_t::i_cat, subpicture_t::p_next, decoder_owner_callbacks::spu, SPU_ES, vlc_assert, and VLC_USED.
This function queues a single picture to the video output.
References decoder_t::cbs, decoder_t::fmt_in, es_format_t::i_cat, picture_t::p_next, decoder_owner_callbacks::video, VIDEO_ES, and vlc_assert.
|
inlinestatic |
This function notifies the audio output pipeline of a new audio output format (fmt_out.audio).
If there is currently no audio output or if the audio output format has changed, a new audio output will be set up.
References decoder_owner_callbacks::audio, AUDIO_ES, decoder_t::cbs, decoder_NewAudioBuffer(), decoder_t::fmt_in, es_format_t::i_cat, VLC_API, vlc_assert, and VLC_USED.
int decoder_UpdateVideoFormat | ( | decoder_t * | dec | ) |
Updates the video output format.
This function notifies the video output pipeline of a new video output format (fmt_out.video). If there was no video output from the decoder so far or if the video output format has changed, a new video output will be set up. decoder_NewPicture() can then be used to allocate picture buffers.
If the format is unchanged, this function has no effects and returns zero.
References decoder_UpdateVideoOutput().
Referenced by decoder_GetDecoderDevice().
int decoder_UpdateVideoOutput | ( | decoder_t * | dec, |
vlc_video_context * | vctx_out | ||
) |
Creates/Updates the rest of the video output pipeline.
After a call to decoder_GetDecoderDevice() this function notifies the video output pipeline of a new video output format (fmt_out.video). If there was no video output from the decoder so far, a new decoder video output will be set up. decoder_NewPicture() can then be used to allocate picture buffers.
If the format is unchanged, this function has no effects and returns zero.
References decoder_t::cbs, vlc_rational_t::den, decoder_t::fmt_in, decoder_t::fmt_out, vlc_chroma_description_t::h, es_format_t::i_cat, video_format_t::i_chroma, es_format_t::i_codec, video_format_t::i_height, video_format_t::i_sar_den, video_format_t::i_sar_num, video_format_t::i_visible_height, video_format_t::i_visible_width, video_format_t::i_width, video_format_t::i_x_offset, video_format_t::i_y_offset, msg_Warn, vlc_chroma_description_t::p, vlc_chroma_description_t::plane_count, unlikely, var_CreateGetBool(), decoder_owner_callbacks::video, es_format_t::video, VIDEO_ES, video_format_AdjustColorSpace(), vlc_assert, vlc_fourcc_GetChromaDescription(), vlc_fourcc_IsYUV(), vlc_ureduce(), and vlc_chroma_description_t::w.
Referenced by decoder_GetDecoderDevice(), and decoder_UpdateVideoFormat().
audio_output_t* input_resource_GetAout | ( | input_resource_t * | ) |
This function creates or recycles an audio output.
References aout_New, input_resource_t::b_aout_busy, input_resource_t::lock_hold, msg_Dbg, input_resource_t::p_aout, input_resource_t::p_parent, vlc_mutex_lock(), and vlc_mutex_unlock().
Referenced by ModuleThread_UpdateAudioFormat(), and vlc_player_New().
audio_output_t* input_resource_HoldAout | ( | input_resource_t * | ) |
References aout_Hold(), input_resource_t::lock_hold, input_resource_t::p_aout, vlc_mutex_lock(), and vlc_mutex_unlock().
Referenced by ControlNav(), ViewpointApply(), and vlc_player_aout_Hold().
input_resource_t* input_resource_New | ( | vlc_object_t * | ) |
It creates an empty input resource handler.
The given object MUST stay alive as long as the input_resource_t is not deleted.
References input_resource_t::lock, input_resource_t::lock_hold, input_resource_t::p_parent, input_resource_t::p_vout_dummy, input_resource_t::rc, vlc_atomic_rc_init(), vlc_mutex_init(), and vout_CreateDummy().
Referenced by Create(), and vlc_player_New().
void input_resource_PutAout | ( | input_resource_t * | , |
audio_output_t * | |||
) |
This function retains or destroys an audio output.
References aout_Destroy(), input_resource_t::b_aout_busy, input_resource_t::lock_hold, msg_Dbg, input_resource_t::p_aout, input_resource_t::p_parent, vlc_mutex_lock(), and vlc_mutex_unlock().
Referenced by DecoderThread_Reload(), DeleteDecoder(), ModuleThread_UpdateAudioFormat(), and vlc_player_New().
void input_resource_Release | ( | input_resource_t * | ) |
It releases an input resource.
References aout_Destroy(), DestroySout(), DestroyVout(), input_resource_t::p_aout, input_resource_t::p_vout_dummy, input_resource_t::rc, vlc_atomic_rc_dec(), and vout_Release().
Referenced by Destroy(), End(), Init(), vlc_player_Delete(), and vlc_player_New().
vlc_input_decoder_t* vlc_input_decoder_Create | ( | vlc_object_t * | , |
const es_format_t * | , | ||
input_resource_t * | |||
) |
Spawn a decoder thread outside of the input thread.
References decoder_New().
void vlc_input_decoder_Decode | ( | vlc_input_decoder_t * | p_owner, |
block_t * | p_block, | ||
bool | b_do_pace | ||
) |
Put a block_t in the decoder's fifo.
Thread-safe w.r.t. the decoder. May be a cancellation point.
p_dec | the decoder object |
p_block | the data block |
References vlc_input_decoder_t::b_waiting, block_ChainRelease(), BLOCK_FLAG_DISCONTINUITY, vlc_input_decoder_t::dec, block_t::i_flags, msg_Warn, vlc_input_decoder_t::p_fifo, vlc_fifo_DequeueAllUnlocked(), vlc_fifo_GetBytes(), vlc_fifo_GetCount(), vlc_fifo_Lock(), vlc_fifo_QueueUnlocked(), vlc_fifo_Unlock(), vlc_fifo_WaitCond(), and vlc_input_decoder_t::wait_fifo.
Referenced by EsOutSend().
void vlc_input_decoder_Delete | ( | vlc_input_decoder_t * | p_owner | ) |
Kills a decoder thread and waits until it's finished.
p_input | the input thread |
p_es | the es descriptor |
References vlc_input_decoder_t::aborting, vlc_input_decoder_t::b_supported, vlc_input_decoder_t::b_waiting, vlc_input_decoder_t::cc, vlc_input_decoder_t::dec, DeleteDecoder(), vlc_input_decoder_t::flushing, decoder_t::fmt_in, es_format_t::i_cat, vlc_input_decoder_t::lock, MAX_CC_DECODERS, vlc_input_decoder_t::out_pool, vlc_input_decoder_t::p_fifo, vlc_input_decoder_t::p_vout, picture_pool_Cancel(), vlc_input_decoder_t::thread, VIDEO_ES, VLC_CODEC_CEA608, vlc_cond_signal(), vlc_fifo_Lock(), vlc_fifo_Signal(), vlc_fifo_Unlock(), vlc_input_decoder_SetCcState(), vlc_join(), vlc_mutex_lock(), vlc_mutex_unlock(), vlc_input_decoder_t::vout_thread_started, and vlc_input_decoder_t::wait_request.
Referenced by EsOutDestroyDecoder(), EsOutSetRecord(), EsOutTerminate(), and vlc_input_decoder_SetCcState().
void vlc_input_decoder_Drain | ( | vlc_input_decoder_t * | p_owner | ) |
Signals that there are no further blocks 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.
References vlc_input_decoder_t::b_draining, vlc_input_decoder_t::p_fifo, vlc_fifo_Lock(), vlc_fifo_Signal(), and vlc_fifo_Unlock().
Referenced by EsOutDrainCCChannels(), EsOutDrainDecoder(), and EsOutVaPrivControlLocked().
void vlc_input_decoder_Flush | ( | vlc_input_decoder_t * | p_owner | ) |
Requests that the decoder immediately discard all pending buffers.
This is useful when seeking or when deselecting a stream.
References block_ChainRelease(), vlc_input_decoder_t::dec, vlc_input_decoder_t::flushing, vlc_input_decoder_t::fmt, decoder_t::fmt_out, vlc_input_decoder_t::frames_countdown, es_format_t::i_cat, vlc_input_decoder_t::lock, vlc_input_decoder_t::p_fifo, vlc_input_decoder_t::p_vout, vlc_input_decoder_t::paused, SPU_ES, VIDEO_ES, vlc_fifo_DequeueAllUnlocked(), vlc_fifo_Lock(), vlc_fifo_Signal(), vlc_fifo_Unlock(), vlc_mutex_lock(), vlc_mutex_unlock(), vout_FlushAll, and vlc_input_decoder_t::vout_thread_started.
Referenced by EsOutChangePosition().
int vlc_input_decoder_SetSpuHighlight | ( | vlc_input_decoder_t * | , |
const vlc_spu_highlight_t * | |||
) |
References vlc_input_decoder_t::dec, decoder_t::fmt_in, es_format_t::i_cat, vlc_input_decoder_t::lock, vlc_input_decoder_t::p_sout_input, vlc_input_decoder_t::p_vout, SOUT_INPUT_SET_SPU_HIGHLIGHT, sout_InputControl(), SPU_ES, VLC_EGENERIC, vlc_mutex_lock(), vlc_mutex_unlock(), VLC_SUCCESS, and vout_SetSpuHighlight().
Referenced by EsOutVaControlLocked().