MediaProcessors
Classes | Macros | Typedefs | Functions
fifo.c File Reference
#include "fifo.h"
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <pthread.h>
#include <errno.h>
#include "check_utils.h"
#include "log.h"
#include "stat_codes.h"
Include dependency graph for fifo.c:

Go to the source code of this file.

Classes

struct  fifo_elem_ctx_s
 
struct  fifo_ctx_s
 

Macros

#define SIZEOF_FIFO_ELEM_CTX_T(FLAG_USE_SHM, CHUNK_SIZE_MAX)   (size_t)(sizeof(fifo_elem_ctx_t)+ (FLAG_USE_SHM== 0? 1: CHUNK_SIZE_MAX))
 
#define FIFO_FILE_NAME_MAX_SIZE   1024
 

Typedefs

typedef struct fifo_elem_ctx_s fifo_elem_ctx_t
 
typedef struct fifo_ctx_s fifo_ctx_t
 

Functions

static void fifo_close_internal (fifo_ctx_t **ref_fifo_ctx, int flag_deinit)
 
static int fifo_init (fifo_ctx_t *fifo_ctx, size_t slots_max, size_t chunk_size_max, uint32_t flags, const char *fifo_file_name, const fifo_elem_alloc_fxn_t *fifo_elem_alloc_fxn)
 
static void fifo_deinit (fifo_ctx_t *fifo_ctx)
 
static int fifo_input (fifo_ctx_t *fifo_ctx, void **ref_elem, size_t elem_size, int dup_flag)
 
static int fifo_output (fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size, int flush_flag, int64_t tout_usecs)
 
static int fifo_mutex_init (pthread_mutex_t *const pthread_mutex_p, int flag_use_shm, log_ctx_t *log_ctx)
 
static int fifo_cond_init (pthread_cond_t *const pthread_cond_p, int flag_use_shm, log_ctx_t *log_ctx)
 
fifo_ctx_tfifo_open (size_t slots_max, size_t chunk_size_max, uint32_t flags, const fifo_elem_alloc_fxn_t *fifo_elem_alloc_fxn)
 
fifo_ctx_tfifo_shm_open (size_t slots_max, size_t chunk_size_max, uint32_t flags, const char *fifo_file_name)
 
fifo_ctx_tfifo_shm_exec_open (size_t slots_max, size_t chunk_size_max, uint32_t flags, const char *fifo_file_name)
 
void fifo_close (fifo_ctx_t **ref_fifo_ctx)
 
void fifo_set_blocking_mode (fifo_ctx_t *fifo_ctx, int do_block)
 
int fifo_put_dup (fifo_ctx_t *fifo_ctx, const void *elem, size_t elem_size)
 
int fifo_put (fifo_ctx_t *fifo_ctx, void **ref_elem, size_t elem_size)
 
int fifo_get (fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size)
 
int fifo_timedget (fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size, int64_t tout_usecs)
 
int fifo_show (fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size)
 
ssize_t fifo_get_buffer_level (fifo_ctx_t *fifo_ctx)
 
int fifo_traverse (fifo_ctx_t *fifo_ctx, int elem_cnt, void(*it_fxn)(void *elem, ssize_t elem_size, int idx, void *it_arg, int *ref_flag_break), void *it_arg)
 
void fifo_empty (fifo_ctx_t *fifo_ctx)
 

Detailed Description

Author
Rafael Antoniello

Definition in file fifo.c.

Macro Definition Documentation

#define FIFO_FILE_NAME_MAX_SIZE   1024

Used only if FIFO_PROCESS_SHARED is signaled. In this case, this file-name is assigned to the shared memory object to facilitate opening FIFO from an fork-exec setting.

Definition at line 104 of file fifo.c.

#define SIZEOF_FIFO_ELEM_CTX_T (   FLAG_USE_SHM,
  CHUNK_SIZE_MAX 
)    (size_t)(sizeof(fifo_elem_ctx_t)+ (FLAG_USE_SHM== 0? 1: CHUNK_SIZE_MAX))

Size of structure type 'fifo_elem_ctx_t'. In the case FLAG_USE_SHM flag is set, fifo_elem_ctx_t::shm_elem_pool will be actually a predefined buffer with a maximum fixed size of 'CHUNK_SIZE_MAX' octets. Otherwise, member fifo_elem_ctx_t::shm_elem_pool will not be used (giving a minimum legacy size).

Definition at line 61 of file fifo.c.

Typedef Documentation

typedef struct fifo_ctx_s fifo_ctx_t

FIFO context structure.

FIFO element context structure.

Function Documentation

void fifo_close ( fifo_ctx_t **  ref_fifo_ctx)

//TODO

Definition at line 327 of file fifo.c.

static void fifo_close_internal ( fifo_ctx_t **  ref_fifo_ctx,
int  flag_deinit 
)
static

Internal FIFO closing function. Only parent process (not child) should de-initialize FIFO while closing.

Parameters
ref_fifo_ctx
flag_deinit

Definition at line 508 of file fifo.c.

static void fifo_deinit ( fifo_ctx_t fifo_ctx)
static

De-initialize FIFO context structure.

Parameters
fifo_ctx

Definition at line 636 of file fifo.c.

void fifo_empty ( fifo_ctx_t fifo_ctx)

//TODO

Definition at line 456 of file fifo.c.

int fifo_get ( fifo_ctx_t fifo_ctx,
void **  ref_elem,
size_t *  ref_elem_size 
)

//TODO

Definition at line 366 of file fifo.c.

ssize_t fifo_get_buffer_level ( fifo_ctx_t fifo_ctx)

//TODO

Definition at line 385 of file fifo.c.

static int fifo_init ( fifo_ctx_t fifo_ctx,
size_t  slots_max,
size_t  chunk_size_max,
uint32_t  flags,
const char *  fifo_file_name,
const fifo_elem_alloc_fxn_t fifo_elem_alloc_fxn 
)
static

Initialize FIFO context structure.

Parameters
fifo_ctx
Returns
Status code (refer to 'stat_codes_ctx_t' type).

Definition at line 538 of file fifo.c.

fifo_ctx_t* fifo_open ( size_t  slots_max,
size_t  chunk_size_max,
uint32_t  flags,
const fifo_elem_alloc_fxn_t fifo_elem_alloc_fxn 
)

//TODO

Definition at line 195 of file fifo.c.

int fifo_put ( fifo_ctx_t fifo_ctx,
void **  ref_elem,
size_t  elem_size 
)

//TODO

Definition at line 361 of file fifo.c.

int fifo_put_dup ( fifo_ctx_t fifo_ctx,
const void *  elem,
size_t  elem_size 
)

//TODO

Definition at line 355 of file fifo.c.

void fifo_set_blocking_mode ( fifo_ctx_t fifo_ctx,
int  do_block 
)

//TODO

Definition at line 332 of file fifo.c.

fifo_ctx_t* fifo_shm_open ( size_t  slots_max,
size_t  chunk_size_max,
uint32_t  flags,
const char *  fifo_file_name 
)
Parameters
slots_max
chunk_size_max
flags
fifo_file_nameThis file-name is assigned to the shared memory object to facilitate opening FIFO in a fork-exec setting.

Definition at line 229 of file fifo.c.

int fifo_show ( fifo_ctx_t fifo_ctx,
void **  elem,
size_t *  elem_size 
)

//TODO

Definition at line 379 of file fifo.c.

int fifo_timedget ( fifo_ctx_t fifo_ctx,
void **  ref_elem,
size_t *  ref_elem_size,
int64_t  tout_usecs 
)

//TODO

Definition at line 372 of file fifo.c.

int fifo_traverse ( fifo_ctx_t fifo_ctx,
int  elem_cnt,
void(*)(void *elem, ssize_t elem_size, int idx, void *it_arg, int *ref_flag_break)  it_fxn,
void *  it_arg 
)

//TODO

Definition at line 400 of file fifo.c.