|
VLC
2.1.0-git
|
This file implements functions and structures to handle blocks of data in vlc. More...

Go to the source code of this file.
Data Structures | |
| struct | block_t |
Macros | |
| #define | BLOCK_FLAG_DISCONTINUITY 0x0001 |
| The content doesn't follow the last block, or is probably broken. | |
| #define | BLOCK_FLAG_TYPE_I 0x0002 |
| Intra frame. | |
| #define | BLOCK_FLAG_TYPE_P 0x0004 |
| Inter frame with backward reference only. | |
| #define | BLOCK_FLAG_TYPE_B 0x0008 |
| Inter frame with backward and forward reference. | |
| #define | BLOCK_FLAG_TYPE_PB 0x0010 |
| For inter frame when you don't know the real type. | |
| #define | BLOCK_FLAG_HEADER 0x0020 |
| Warn that this block is a header one. | |
| #define | BLOCK_FLAG_END_OF_FRAME 0x0040 |
| This is the last block of the frame. | |
| #define | BLOCK_FLAG_NO_KEYFRAME 0x0080 |
| This is not a key frame for bitrate shaping. | |
| #define | BLOCK_FLAG_END_OF_SEQUENCE 0x0100 |
| This block contains the last part of a sequence. | |
| #define | BLOCK_FLAG_CLOCK 0x0200 |
| This block contains a clock reference. | |
| #define | BLOCK_FLAG_SCRAMBLED 0x0400 |
| This block is scrambled. | |
| #define | BLOCK_FLAG_PREROLL 0x0800 |
| This block has to be decoded but not be displayed. | |
| #define | BLOCK_FLAG_CORRUPTED 0x1000 |
| This block is corrupted and/or there is data loss. | |
| #define | BLOCK_FLAG_TOP_FIELD_FIRST 0x2000 |
| This block contains an interlaced picture with top field first. | |
| #define | BLOCK_FLAG_BOTTOM_FIELD_FIRST 0x4000 |
| This block contains an interlaced picture with bottom field first. | |
| #define | BLOCK_FLAG_INTERLACED_MASK (BLOCK_FLAG_TOP_FIELD_FIRST|BLOCK_FLAG_BOTTOM_FIELD_FIRST) |
| This block contains an interlaced picture. | |
| #define | BLOCK_FLAG_TYPE_MASK (BLOCK_FLAG_TYPE_I|BLOCK_FLAG_TYPE_P|BLOCK_FLAG_TYPE_B|BLOCK_FLAG_TYPE_PB) |
| #define | BLOCK_FLAG_CORE_PRIVATE_MASK 0x00ff0000 |
| #define | BLOCK_FLAG_CORE_PRIVATE_SHIFT 16 |
| #define | BLOCK_FLAG_PRIVATE_MASK 0xff000000 |
| #define | BLOCK_FLAG_PRIVATE_SHIFT 24 |
| #define | block_cleanup_push(block) vlc_cleanup_push (block_Cleanup, block) |
Typedefs | |
| typedef void(* | block_free_t )(block_t *) |
Functions | |
| void | block_Init (block_t *, void *, size_t) |
| block_t * | block_Alloc (size_t) |
| block_t * | block_Realloc (block_t *, ssize_t i_pre, size_t i_body) |
| static void | block_CopyProperties (block_t *dst, block_t *src) |
| static block_t * | block_Duplicate (block_t *p_block) |
| static void | block_Release (block_t *p_block) |
| block_t * | block_heap_Alloc (void *, size_t) |
| Creates a block from a heap allocation. | |
| block_t * | block_mmap_Alloc (void *addr, size_t length) |
| block_t * | block_shm_Alloc (void *addr, size_t length) |
| block_t * | block_File (int fd) |
| Loads a file into a block of memory through a file descriptor. | |
| block_t * | block_FilePath (const char *) |
| Loads a file into a block of memory from the file path. | |
| static void | block_Cleanup (void *block) |
| static void | block_ChainAppend (block_t **pp_list, block_t *p_block) |
| static void | block_ChainLastAppend (block_t ***ppp_last, block_t *p_block) |
| static void | block_ChainRelease (block_t *p_block) |
| static size_t | block_ChainExtract (block_t *p_list, void *p_data, size_t i_max) |
| static void | block_ChainProperties (block_t *p_list, int *pi_count, size_t *pi_size, mtime_t *pi_length) |
| static block_t * | block_ChainGather (block_t *p_list) |
| block_fifo_t * | block_FifoNew (void) |
| void | block_FifoRelease (block_fifo_t *) |
| void | block_FifoPace (block_fifo_t *fifo, size_t max_depth, size_t max_size) |
| Wait until the FIFO gets below a certain size (if needed). | |
| void | block_FifoEmpty (block_fifo_t *) |
| size_t | block_FifoPut (block_fifo_t *, block_t *) |
| Immediately queue one block at the end of a FIFO. | |
| void | block_FifoWake (block_fifo_t *) |
| block_t * | block_FifoGet (block_fifo_t *) |
| Dequeue the first block from the FIFO. | |
| block_t * | block_FifoShow (block_fifo_t *) |
| Peeks the first block in the FIFO. | |
| size_t | block_FifoSize (const block_fifo_t *p_fifo) |
| size_t | block_FifoCount (const block_fifo_t *p_fifo) |
This file implements functions and structures to handle blocks of data in vlc.
| #define block_cleanup_push | ( | block | ) | vlc_cleanup_push (block_Cleanup, block) |
Referenced by block_File().
| #define BLOCK_FLAG_BOTTOM_FIELD_FIRST 0x4000 |
This block contains an interlaced picture with bottom field first.
| #define BLOCK_FLAG_CLOCK 0x0200 |
This block contains a clock reference.
| #define BLOCK_FLAG_CORE_PRIVATE_MASK 0x00ff0000 |
Referenced by DecoderProcess().
| #define BLOCK_FLAG_CORE_PRIVATE_SHIFT 16 |
| #define BLOCK_FLAG_CORRUPTED 0x1000 |
This block is corrupted and/or there is data loss.
Referenced by DecoderBlockFlushNew(), and EsOutSend().
| #define BLOCK_FLAG_DISCONTINUITY 0x0001 |
The content doesn't follow the last block, or is probably broken.
Referenced by aout_DecPlay(), DecoderBlockFlushNew(), DecoderUpdatePreroll(), and EsOutSend().
| #define BLOCK_FLAG_END_OF_FRAME 0x0040 |
This is the last block of the frame.
| #define BLOCK_FLAG_END_OF_SEQUENCE 0x0100 |
This block contains the last part of a sequence.
| #define BLOCK_FLAG_HEADER 0x0020 |
Warn that this block is a header one.
| #define BLOCK_FLAG_INTERLACED_MASK (BLOCK_FLAG_TOP_FIELD_FIRST|BLOCK_FLAG_BOTTOM_FIELD_FIRST) |
This block contains an interlaced picture.
| #define BLOCK_FLAG_NO_KEYFRAME 0x0080 |
This is not a key frame for bitrate shaping.
| #define BLOCK_FLAG_PREROLL 0x0800 |
This block has to be decoded but not be displayed.
Referenced by DecoderUpdatePreroll(), and EsOutSend().
| #define BLOCK_FLAG_PRIVATE_MASK 0xff000000 |
| #define BLOCK_FLAG_PRIVATE_SHIFT 24 |
| #define BLOCK_FLAG_SCRAMBLED 0x0400 |
This block is scrambled.
| #define BLOCK_FLAG_TOP_FIELD_FIRST 0x2000 |
This block contains an interlaced picture with top field first.
| #define BLOCK_FLAG_TYPE_B 0x0008 |
Inter frame with backward and forward reference.
| #define BLOCK_FLAG_TYPE_I 0x0002 |
Intra frame.
| #define BLOCK_FLAG_TYPE_MASK (BLOCK_FLAG_TYPE_I|BLOCK_FLAG_TYPE_P|BLOCK_FLAG_TYPE_B|BLOCK_FLAG_TYPE_PB) |
| #define BLOCK_FLAG_TYPE_P 0x0004 |
Inter frame with backward reference only.
| #define BLOCK_FLAG_TYPE_PB 0x0010 |
For inter frame when you don't know the real type.
| typedef void(* block_free_t)(block_t *) |
| block_t* block_Alloc | ( | size_t | ) |
References BLOCK_ALIGN, block_generic_Release(), block_Init(), BLOCK_PADDING, block_t::i_buffer, block_t::p_buffer, block_t::pf_release, static_assert, and unlikely.
Referenced by aout_DecNewBuffer(), aout_DecSilence(), block_ChainGather(), block_Duplicate(), block_File(), block_Realloc(), DecoderBlockFlushNew(), DStreamDelete(), EsOutControlLocked(), ImageReadUrl(), stream_Block(), stream_BlockRemaining(), test_block(), TsStoragePopCmd(), and VoutDisplayEventKey().
References block_t::p_next.
Referenced by block_BytestreamPush().
|
static |
References block_t::i_buffer, block_t::p_buffer, and block_t::p_next.
Referenced by block_ChainGather().
References block_Alloc(), block_ChainExtract(), block_ChainProperties(), block_ChainRelease(), block_t::i_buffer, block_t::i_dts, block_t::i_flags, block_t::i_length, block_t::i_pts, block_t::p_buffer, and block_t::p_next.
Referenced by DStreamPeek().
References block_t::p_next.
|
inlinestatic |
References block_t::i_buffer, block_t::i_length, and block_t::p_next.
Referenced by block_ChainGather().
|
inlinestatic |
References block_Release(), and block_t::p_next.
Referenced by AStreamControlReset(), AStreamDestroy(), AStreamSeekBlock(), block_ChainGather(), and DecoderFlushBuffering().
|
inlinestatic |
References block_Release().
Referenced by block_Duplicate().
References block_Alloc(), block_CopyProperties(), block_t::i_buffer, and block_t::p_buffer.
Referenced by DecoderGetCc(), and EsOutSend().
| size_t block_FifoCount | ( | const block_fifo_t * | p_fifo | ) |
References block_fifo_t::i_depth.
Referenced by DeleteDecoder(), input_DecoderIsEmpty(), sout_MuxDeleteStream(), and sout_MuxGetStream().
| void block_FifoEmpty | ( | block_fifo_t * | ) |
References block_Release(), block_fifo_t::i_depth, block_fifo_t::i_size, block_fifo_t::lock, block_fifo_t::p_first, block_t::p_next, block_fifo_t::pp_last, vlc_cond_broadcast(), vlc_mutex_lock(), vlc_mutex_unlock(), and block_fifo_t::wait_room.
Referenced by block_FifoRelease(), DecoderFlush(), DeleteDecoder(), and input_DecoderDecode().
| block_t* block_FifoGet | ( | block_fifo_t * | p_fifo | ) |
Dequeue the first block from the FIFO.
If necessary, wait until there is one block in the queue. This function is (always) cancellation point.
References block_fifo_t::b_force_wake, block_t::i_buffer, block_fifo_t::i_depth, block_fifo_t::i_size, block_fifo_t::lock, mutex_cleanup_push, block_fifo_t::p_first, block_t::p_next, block_fifo_t::pp_last, vlc_cleanup_pop, vlc_cond_broadcast(), vlc_cond_wait(), vlc_mutex_lock(), vlc_mutex_unlock(), vlc_testcancel(), block_fifo_t::wait, and block_fifo_t::wait_room.
Referenced by DecoderThread(), DStreamPeek(), DStreamRead(), and VoutDisplayEventKeyDispatch().
| block_fifo_t* block_FifoNew | ( | void | ) |
References block_fifo_t::b_force_wake, block_fifo_t::i_depth, block_fifo_t::i_size, block_fifo_t::lock, block_fifo_t::p_first, block_fifo_t::pp_last, vlc_cond_init(), vlc_mutex_init(), block_fifo_t::wait, and block_fifo_t::wait_room.
Referenced by CreateDecoder(), sout_MuxAddStream(), stream_DemuxNew(), and VoutDisplayEventKey().
| void block_FifoPace | ( | block_fifo_t * | fifo, |
| size_t | max_depth, | ||
| size_t | max_size | ||
| ) |
Wait until the FIFO gets below a certain size (if needed).
Note that if more than one thread writes to the FIFO, you cannot assume that the FIFO is actually below the requested size upon return (since another thread could have refilled it already). This is typically not an issue, as this function is meant for (relaxed) congestion control.
This function may be a cancellation point and it is cancel-safe.
| fifo | queue to wait on |
| max_depth | wait until the queue has no more than this many blocks (use SIZE_MAX to ignore this constraint) |
| max_size | wait until the queue has no more than this many bytes (use SIZE_MAX to ignore this constraint) |
References block_fifo_t::i_depth, block_fifo_t::i_size, block_fifo_t::lock, mutex_cleanup_push, vlc_cleanup_pop, vlc_cond_wait(), vlc_mutex_lock(), vlc_mutex_unlock(), vlc_testcancel(), and block_fifo_t::wait_room.
Referenced by input_DecoderDecode().
| size_t block_FifoPut | ( | block_fifo_t * | p_fifo, |
| block_t * | p_block | ||
| ) |
Immediately queue one block at the end of a FIFO.
| fifo | queue |
| block | head of a block list to queue (may be NULL) |
References block_t::i_buffer, block_fifo_t::i_depth, block_fifo_t::i_size, block_fifo_t::lock, block_t::p_next, block_fifo_t::pp_last, vlc_cond_signal(), vlc_mutex_lock(), vlc_mutex_unlock(), and block_fifo_t::wait.
Referenced by DStreamDelete(), input_DecoderDecode(), sout_MuxSendBuffer(), stream_DemuxSend(), and VoutDisplayEventKey().
| void block_FifoRelease | ( | block_fifo_t * | ) |
References block_FifoEmpty(), block_fifo_t::lock, vlc_cond_destroy(), vlc_mutex_destroy(), block_fifo_t::wait, and block_fifo_t::wait_room.
Referenced by DeleteDecoder(), DStreamDelete(), sout_MuxAddStream(), sout_MuxDeleteStream(), stream_DemuxNew(), vout_DeleteDisplay(), and VoutDisplayEventKey().
| block_t* block_FifoShow | ( | block_fifo_t * | p_fifo | ) |
Peeks the first block in the FIFO.
If necessary, wait until there is one block. This function is (always) a cancellation point.
References block_fifo_t::lock, mutex_cleanup_push, block_fifo_t::p_first, vlc_cleanup_run, vlc_cond_wait(), vlc_mutex_lock(), vlc_testcancel(), and block_fifo_t::wait.
Referenced by sout_MuxGetStream().
| size_t block_FifoSize | ( | const block_fifo_t * | p_fifo | ) |
References block_fifo_t::i_size.
Referenced by input_DecoderDecode(), and input_DecoderGetFifoSize().
| void block_FifoWake | ( | block_fifo_t * | ) |
References block_fifo_t::b_force_wake, block_fifo_t::lock, block_fifo_t::p_first, vlc_cond_broadcast(), vlc_mutex_lock(), vlc_mutex_unlock(), and block_fifo_t::wait.
Referenced by input_DecoderWaitBuffering().
| block_t* block_File | ( | int | fd | ) |
Loads a file into a block of memory through a file descriptor.
If possible a private file mapping is created. Otherwise, the file is read normally. This function is a cancellation point.
| fd | file descriptor to load from |
References block_Alloc(), block_cleanup_push, block_mmap_Alloc(), block_Release(), block_t::p_buffer, S_TYPEISSHM, and vlc_cleanup_pop.
Referenced by block_FilePath(), and test_block_File().
| block_t* block_FilePath | ( | const char * | path | ) |
Loads a file into a block of memory from the file path.
See also block_File().
References block_File(), and vlc_open().
| block_t* block_heap_Alloc | ( | void * | addr, |
| size_t | length | ||
| ) |
Creates a block from a heap allocation.
This is provided by LibVLC so that manually heap-allocated blocks can safely be deallocated even after the origin plugin has been unloaded from memory.
When block_Release() is called, VLC will free() the specified pointer.
| ptr | base address of the heap allocation (will be free()'d) |
| length | bytes length of the heap allocation |
References block_heap_Release(), block_Init(), and block_t::pf_release.
| void block_Init | ( | block_t * | , |
| void * | , | ||
| size_t | |||
| ) |
| block_t* block_mmap_Alloc | ( | void * | addr, |
| size_t | length | ||
| ) |
Referenced by block_File().
References block_Alloc(), block_Check(), block_Release(), BLOCK_WASTE_SIZE, BlockMetaCopy(), block_t::i_buffer, block_t::i_size, block_t::p_buffer, and block_t::p_start.
Referenced by stream_BlockRemaining(), and test_block().
|
inlinestatic |
References block_t::pf_release.
Referenced by aout_DecDeleteBuffer(), aout_DecPlay(), aout_FiltersPlay(), AStreamRefillBlock(), block_BytestreamFlush(), block_BytestreamRelease(), block_ChainRelease(), block_Cleanup(), block_FifoEmpty(), block_File(), block_Realloc(), CmdCleanSend(), CmdExecuteSend(), DecoderDecodeAudio(), DecoderDecodeVideo(), DecoderError(), DecoderFlushBuffering(), DecoderGetCc(), DecoderPlayAudio(), DecoderProcess(), DecoderThread(), DStreamDelete(), DStreamRead(), EsOutSend(), ImageWriteUrl(), sout_InputSendBuffer(), stream_Block(), test_block(), test_block_File(), TsStoragePushCmd(), VoutDisplayEventKeyDispatch(), and VoutSaveSnapshot().
| block_t* block_shm_Alloc | ( | void * | addr, |
| size_t | length | ||
| ) |
1.8.1.2