xine-lib 1.2.13-20230125hg15249
Data Structures | Macros | Functions | Variables
buffer.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <xine/buffer.h>
#include <xine/xineutils.h>
#include <xine/xine_internal.h>
#include "xine_private.h"

Data Structures

struct  _fifo_buffer_t
 
struct  be_ei_t
 

Macros

#define LOG_MODULE   "buffer"
 
#define LOG_VERBOSE
 
#define LARGE_NUM   0x7fffffff
 

Functions

static void _fifo_mark_native (_fifo_buffer_t *fifo)
 
static int _fifo_is_native (_fifo_buffer_t *fifo)
 
static void _fifo_mux_init (_fifo_buffer_t *fifo)
 
static void _fifo_mux_last (_fifo_buffer_t *fifo)
 
static void fbc_dummy (fifo_buffer_t *fifo, void *data)
 
int xine_fbc_set (fifo_buffer_t *_fifo, int on)
 
static int _fbc_avail (_fifo_buffer_t *fifo)
 
static void _fbc_reset (_fifo_buffer_t *fifo)
 
static void _fbc_sub (_fifo_buffer_t *fifo, int n)
 
static void buffer_pool_free (buf_element_t *element)
 
static buf_element_t_buffer_pool_size_alloc (_fifo_buffer_t *fifo, int n)
 
static buf_element_tbuffer_pool_size_alloc (fifo_buffer_t *_fifo, size_t size)
 
static buf_element_tbuffer_pool_alloc (fifo_buffer_t *_fifo)
 
static buf_element_tbuffer_pool_realloc (buf_element_t *buf, size_t new_size)
 
static buf_element_tbuffer_pool_try_alloc (fifo_buffer_t *_fifo)
 
static void fifo_buffer_put (fifo_buffer_t *_fifo, buf_element_t *element)
 
static void dummy_fifo_buffer_put (fifo_buffer_t *_fifo, buf_element_t *element)
 
static void fifo_buffer_insert (fifo_buffer_t *_fifo, buf_element_t *element)
 
static void dummy_fifo_buffer_insert (fifo_buffer_t *fifo, buf_element_t *element)
 
static buf_element_tfifo_buffer_get (fifo_buffer_t *_fifo)
 
static buf_element_tfifo_buffer_tget (fifo_buffer_t *_fifo, xine_ticket_t *ticket)
 
static void fifo_buffer_clear (fifo_buffer_t *_fifo)
 
static void _fifo_buffer_all_clear (_fifo_buffer_t *fifo)
 
static int fifo_buffer_size (fifo_buffer_t *_fifo)
 
static uint32_t fifo_buffer_data_size (fifo_buffer_t *_fifo)
 
static int fifo_buffer_num_free (fifo_buffer_t *_fifo)
 
static void fifo_buffer_dispose (fifo_buffer_t *_fifo)
 
static void fifo_register_alloc_cb (fifo_buffer_t *_fifo, void(*cb)(fifo_buffer_t *fifo, void *data_cb), void *data_cb)
 
static void fifo_register_put_cb (fifo_buffer_t *_fifo, void(*cb)(fifo_buffer_t *fifo, buf_element_t *buf, void *data_cb), void *data_cb)
 
static void fifo_register_get_cb (fifo_buffer_t *_fifo, void(*cb)(fifo_buffer_t *fifo, buf_element_t *buf, void *data_cb), void *data_cb)
 
static void fifo_unregister_alloc_cb (fifo_buffer_t *_fifo, void(*cb)(fifo_buffer_t *fifo, void *data_cb))
 
static void fifo_unregister_put_cb (fifo_buffer_t *_fifo, void(*cb)(fifo_buffer_t *fifo, buf_element_t *buf, void *data_cb))
 
static void fifo_unregister_get_cb (fifo_buffer_t *_fifo, void(*cb)(fifo_buffer_t *fifo, buf_element_t *buf, void *data_cb))
 
fifo_buffer_t_x_fifo_buffer_new (int num_buffers, uint32_t buf_size)
 Allocate and initialise new (empty) FIFO buffers.
 
fifo_buffer_t_x_dummy_fifo_buffer_new (int num_buffers, uint32_t buf_size)
 Allocate and initialise new dummy FIFO buffers.
 
void _x_free_buf_elements (buf_element_t *head)
 Free chained list of buffer elements.
 

Variables

static const uint8_t _fifo_buf_type_index [256]
 

Macro Definition Documentation

◆ LARGE_NUM

#define LARGE_NUM   0x7fffffff

◆ LOG_MODULE

#define LOG_MODULE   "buffer"

◆ LOG_VERBOSE

#define LOG_VERBOSE

Function Documentation

◆ _buffer_pool_size_alloc()

static buf_element_t * _buffer_pool_size_alloc ( _fifo_buffer_t * fifo,
int n )
static

◆ _fbc_avail()

static int _fbc_avail ( _fifo_buffer_t * fifo)
static

◆ _fbc_reset()

static void _fbc_reset ( _fifo_buffer_t * fifo)
static

◆ _fbc_sub()

static void _fbc_sub ( _fifo_buffer_t * fifo,
int n )
static

◆ _fifo_buffer_all_clear()

static void _fifo_buffer_all_clear ( _fifo_buffer_t * fifo)
static

◆ _fifo_is_native()

static int _fifo_is_native ( _fifo_buffer_t * fifo)
static

◆ _fifo_mark_native()

static void _fifo_mark_native ( _fifo_buffer_t * fifo)
static

◆ _fifo_mux_init()

static void _fifo_mux_init ( _fifo_buffer_t * fifo)
static

◆ _fifo_mux_last()

static void _fifo_mux_last ( _fifo_buffer_t * fifo)
static

◆ _x_dummy_fifo_buffer_new()

fifo_buffer_t * _x_dummy_fifo_buffer_new ( int num_buffers,
uint32_t buf_size )

Allocate and initialise new dummy FIFO buffers.

Parameters
num_bufferNumber of dummy buffers to allocate.
buf_sizeSize of each buffer.

Only used by video and audio decoder loops.

References _x_fifo_buffer_new(), dummy_fifo_buffer_insert(), dummy_fifo_buffer_put(), and put.

Referenced by _x_audio_decoder_init(), and _x_video_decoder_init().

◆ _x_fifo_buffer_new()

fifo_buffer_t * _x_fifo_buffer_new ( int num_buffers,
uint32_t buf_size )

Allocate and initialise new (empty) FIFO buffers.

Parameters
num_bufferNumber of buffers to allocate.
buf_sizeSize of each buffer.

Only used by video and audio decoder loops.

References _fifo_mark_native(), _fifo_mux_init(), fifo_buffer_s::alloc_cb, fifo_buffer_s::alloc_cb_data, _fifo_buffer_t::b, buffer_pool_alloc(), fifo_buffer_s::buffer_pool_alloc, fifo_buffer_s::buffer_pool_base, fifo_buffer_s::buffer_pool_buf_size, fifo_buffer_s::buffer_pool_capacity, fifo_buffer_s::buffer_pool_cond_not_empty, buffer_pool_free(), fifo_buffer_s::buffer_pool_large_wait, fifo_buffer_s::buffer_pool_mutex, fifo_buffer_s::buffer_pool_num_free, fifo_buffer_s::buffer_pool_num_waiters, buffer_pool_realloc(), fifo_buffer_s::buffer_pool_realloc, buffer_pool_size_alloc(), fifo_buffer_s::buffer_pool_size_alloc, fifo_buffer_s::buffer_pool_top, buffer_pool_try_alloc(), fifo_buffer_s::buffer_pool_try_alloc, fifo_buffer_s::clear, fifo_buffer_s::data_size, fifo_buffer_s::dispose, be_ei_t::ei, be_ei_t::elem, buf_element_s::extra_info, fifo_buffer_clear(), fifo_buffer_data_size(), fifo_buffer_dispose(), fifo_buffer_get(), fifo_buffer_insert(), fifo_buffer_num_free(), fifo_buffer_put(), fifo_buffer_size(), fifo_buffer_tget(), fifo_buffer_s::fifo_num_waiters, fifo_register_alloc_cb(), fifo_register_get_cb(), fifo_register_put_cb(), fifo_buffer_s::fifo_size, fifo_unregister_alloc_cb(), fifo_unregister_get_cb(), fifo_unregister_put_cb(), fifo_buffer_s::first, buf_element_s::free_buffer, fifo_buffer_s::get, fifo_buffer_s::get_cb, fifo_buffer_s::get_cb_data, fifo_buffer_s::insert, LARGE_NUM, fifo_buffer_s::last, buf_element_s::max_size, buf_element_s::mem, fifo_buffer_s::mutex, be_ei_t::nbufs, buf_element_s::next, fifo_buffer_s::not_empty, NULL, fifo_buffer_s::num_free, fifo_buffer_s::put, fifo_buffer_s::put_cb, fifo_buffer_s::put_cb_data, fifo_buffer_s::register_alloc_cb, fifo_buffer_s::register_get_cb, fifo_buffer_s::register_put_cb, fifo_buffer_s::size, buf_element_s::source, fifo_buffer_s::tget, fifo_buffer_s::unregister_alloc_cb, fifo_buffer_s::unregister_get_cb, fifo_buffer_s::unregister_put_cb, and xine_mallocz_aligned().

Referenced by _x_audio_decoder_init(), _x_dummy_fifo_buffer_new(), and _x_video_decoder_init().

◆ _x_free_buf_elements()

void _x_free_buf_elements ( buf_element_t * head)

Free chained list of buffer elements.

Parameters
headList to free. May be NULL.

References buf_element_s::free_buffer, buf_element_s::next, and NULL.

Referenced by audio_decoder_loop().

◆ buffer_pool_alloc()

static buf_element_t * buffer_pool_alloc ( fifo_buffer_t * _fifo)
static

◆ buffer_pool_free()

static void buffer_pool_free ( buf_element_t * element)
static

◆ buffer_pool_realloc()

static buf_element_t * buffer_pool_realloc ( buf_element_t * buf,
size_t new_size )
static

◆ buffer_pool_size_alloc()

static buf_element_t * buffer_pool_size_alloc ( fifo_buffer_t * _fifo,
size_t size )
static

◆ buffer_pool_try_alloc()

static buf_element_t * buffer_pool_try_alloc ( fifo_buffer_t * _fifo)
static

◆ dummy_fifo_buffer_insert()

static void dummy_fifo_buffer_insert ( fifo_buffer_t * fifo,
buf_element_t * element )
static

◆ dummy_fifo_buffer_put()

static void dummy_fifo_buffer_put ( fifo_buffer_t * _fifo,
buf_element_t * element )
static

◆ fbc_dummy()

static void fbc_dummy ( fifo_buffer_t * fifo,
void * data )
static

◆ fifo_buffer_clear()

static void fifo_buffer_clear ( fifo_buffer_t * _fifo)
static

◆ fifo_buffer_data_size()

static uint32_t fifo_buffer_data_size ( fifo_buffer_t * _fifo)
static

◆ fifo_buffer_dispose()

static void fifo_buffer_dispose ( fifo_buffer_t * _fifo)
static

◆ fifo_buffer_get()

static buf_element_t * fifo_buffer_get ( fifo_buffer_t * _fifo)
static

◆ fifo_buffer_insert()

static void fifo_buffer_insert ( fifo_buffer_t * _fifo,
buf_element_t * element )
static

◆ fifo_buffer_num_free()

static int fifo_buffer_num_free ( fifo_buffer_t * _fifo)
static

◆ fifo_buffer_put()

static void fifo_buffer_put ( fifo_buffer_t * _fifo,
buf_element_t * element )
static

◆ fifo_buffer_size()

static int fifo_buffer_size ( fifo_buffer_t * _fifo)
static

◆ fifo_buffer_tget()

static buf_element_t * fifo_buffer_tget ( fifo_buffer_t * _fifo,
xine_ticket_t * ticket )
static

◆ fifo_register_alloc_cb()

static void fifo_register_alloc_cb ( fifo_buffer_t * _fifo,
void(*)(fifo_buffer_t *fifo, void *data_cb) cb,
void * data_cb )
static

◆ fifo_register_get_cb()

static void fifo_register_get_cb ( fifo_buffer_t * _fifo,
void(*)(fifo_buffer_t *fifo, buf_element_t *buf, void *data_cb) cb,
void * data_cb )
static

◆ fifo_register_put_cb()

static void fifo_register_put_cb ( fifo_buffer_t * _fifo,
void(*)(fifo_buffer_t *fifo, buf_element_t *buf, void *data_cb) cb,
void * data_cb )
static

◆ fifo_unregister_alloc_cb()

static void fifo_unregister_alloc_cb ( fifo_buffer_t * _fifo,
void(*)(fifo_buffer_t *fifo, void *data_cb) cb )
static

◆ fifo_unregister_get_cb()

static void fifo_unregister_get_cb ( fifo_buffer_t * _fifo,
void(*)(fifo_buffer_t *fifo, buf_element_t *buf, void *data_cb) cb )
static

◆ fifo_unregister_put_cb()

static void fifo_unregister_put_cb ( fifo_buffer_t * _fifo,
void(*)(fifo_buffer_t *fifo, buf_element_t *buf, void *data_cb) cb )
static

◆ xine_fbc_set()

int xine_fbc_set ( fifo_buffer_t * _fifo,
int on )

Variable Documentation

◆ _fifo_buf_type_index

const uint8_t _fifo_buf_type_index[256]
static
Initial value:
= {
[BUF_AUDIO_BASE >> 24] = 1,
[BUF_VIDEO_BASE >> 24] = 1,
[BUF_SPU_BASE >> 24] = 2
}
#define BUF_AUDIO_BASE
Definition buffer.h:207
#define BUF_SPU_BASE
Definition buffer.h:286
#define BUF_VIDEO_BASE
Definition buffer.h:89

TJ. NOTE: vdr-libxineoutput issue #1: some versions of vdr-libxineoutput use their own replacement of _x_fifo_buffer_new (). this involves use of an incomplete fifo_buffer_t with our native methods copied from stream->video_fifo. test for nativity, and fall back to very old behaviour if not. vdr-libxineoutput issue #2: we will get some custom buf types, most notably 0x0f010000 CONTROL_BUF_BLANK 0x05010000 BUF_NETWORK_BLOCK 0x05020000 BUF_LOCAL_BLOCK make sure to treat them like control bufs which keeps put order.

Referenced by fifo_buffer_put().