MediaProcessors
Macros | Functions
proc.c File Reference
#include "proc.h"
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <time.h>
#include <errno.h>
#include <libcjson/cJSON.h>
#include <libmediaprocsutils/log.h>
#include <libmediaprocsutils/stat_codes.h>
#include <libmediaprocsutils/check_utils.h>
#include <libmediaprocsutils/schedule.h>
#include <libmediaprocsutils/fifo.h>
#include <libmediaprocsutils/fair_lock.h>
#include <libmediaprocsutils/interr_usleep.h>
#include "proc_if.h"
Include dependency graph for proc.c:

Go to the source code of this file.

Macros

#define LOGD_CTX_INIT(CTX)
 
#define LOGD(...)
 
#define TAG_HAS(NEEDLE)   (strstr(tag, NEEDLE)!= NULL)
 
#define TAG_IS(TAG)   (strcmp(tag, TAG)== 0)
 
#define PROC_STATS_THR_MEASURE_PERIOD_USECS   (1000000)
 

Functions

static int procs_id_get (proc_ctx_t *proc_ctx, log_ctx_t *log_ctx, proc_if_rest_fmt_t rest_fmt, void **ref_reponse)
 
static void * proc_stats_thr (void *t)
 
static void * proc_thr (void *t)
 
static void proc_stats_register_frame_pts (proc_ctx_t *proc_ctx, const proc_frame_ctx_t *proc_frame_ctx, const proc_io_t proc_io)
 
static void proc_stats_register_accumulated_io_bits (proc_ctx_t *proc_ctx, const proc_frame_ctx_t *proc_frame_ctx, const proc_io_t proc_io)
 
proc_ctx_tproc_open (const proc_if_t *proc_if, const char *settings_str, int proc_instance_index, uint32_t fifo_ctx_maxsize[PROC_IO_NUM], log_ctx_t *log_ctx, va_list arg)
 
void proc_close (proc_ctx_t **ref_proc_ctx)
 
int proc_send_frame (proc_ctx_t *proc_ctx, const proc_frame_ctx_t *proc_frame_ctx)
 
int proc_recv_frame (proc_ctx_t *proc_ctx, proc_frame_ctx_t **ref_proc_frame_ctx)
 
int proc_opt (proc_ctx_t *proc_ctx, const char *tag,...)
 
int proc_vopt (proc_ctx_t *proc_ctx, const char *tag, va_list arg)
 
int proc_send_frame_default1 (proc_ctx_t *proc_ctx, const proc_frame_ctx_t *proc_frame_ctx)
 
int proc_recv_frame_default1 (proc_ctx_t *proc_ctx, proc_frame_ctx_t **ref_proc_frame_ctx)
 
void proc_stats_register_accumulated_latency (proc_ctx_t *proc_ctx, const int64_t oput_frame_pts)
 

Detailed Description

Author
Rafael Antoniello

Definition in file proc.c.

Macro Definition Documentation

#define PROC_STATS_THR_MEASURE_PERIOD_USECS   (1000000)

Processor's statistic thread period (1 second).

Definition at line 70 of file proc.c.

#define TAG_HAS (   NEEDLE)    (strstr(tag, NEEDLE)!= NULL)

Returns non-zero if given 'tag' string contains 'needle' sub-string.

Definition at line 60 of file proc.c.

#define TAG_IS (   TAG)    (strcmp(tag, TAG)== 0)

Returns non-zero if 'tag' string is equal to given TAG string.

Definition at line 65 of file proc.c.

Function Documentation

void proc_close ( proc_ctx_t **  ref_proc_ctx)

Ends processing thread, de-initialize and release the generic processor (PROC) context structure and all the related resources.

Parameters
ref_proc_ctxReference to the pointer to the processor (PROC) context structure to be release, that was obtained in a previous call to the 'proc_open()' function. Pointer is set to NULL on return.

Definition at line 208 of file proc.c.

proc_ctx_t* proc_open ( const proc_if_t proc_if,
const char *  settings_str,
int  proc_instance_index,
uint32_t  fifo_ctx_maxsize[PROC_IO_NUM],
log_ctx_t log_ctx,
va_list  arg 
)

Allocates generic processor (PROC) context structure, initializes, and launches processing thread.

Parameters
proc_ifPointer to the processor interface structure (static and unambiguous interface of the type of processor we are opening).
settings_strCharacter string containing initial settings for the processor. String format can be either a query-string or JSON.
proc_instance_indexEach PROC instance is registered in an instance array with a specific index (managed and assigned from outside this module). The idea behind using an array is to fetch as fast as possible the PROC instance to perform i/o operations.
fifo_ctx_maxsizeMaximum size, in number of queued elements, for the input and output FIFOs of the processor.
log_ctxPointer to the LOG module context structure.
argVariable list of parameters defined by user.
Returns
Pointer to the generic processor context structure on success, NULL if fails.

Definition at line 87 of file proc.c.

int proc_opt ( proc_ctx_t proc_ctx,
const char *  tag,
  ... 
)

Processor options. This function is thread-safe and can be called concurrently.

Parameters
proc_ctxPointer to the processor (PROC) context structure obtained in a previous call to the 'proc_open()' function.
tagProcessor option tag, namely, option identifier string. The following options are available:
  1. PROC_UNBLOCK
  2. PROC_GET
  3. PROC_PUT
...Variable list of parameters according to selected option. Refer to Tags description below to see the different additional parameters corresponding to each option tag.
Returns
Status code (STAT_SUCCESS code in case of success, for other code values please refer to .stat_codes.h).

Tags description (additional variable arguments per tag)

  • Tag "PROC_UNBLOCK":
    Unblock processor input/output FIFO buffers.
    No additional variable arguments are needed for calling function proc_opt() with this tag.

    Tag "PROC_GET":
    Get processor representational state (including current settings).
    Additional variable arguments for function proc_opt() are:

    Parameters
    rest_fmtIndicates the format in which the response data is to be returned. Available formats are enumerated at 'proc_if_rest_fmt_t'.
    ref_reponseReference to the pointer to a data structure returning the processor's representational state. The returned data structure is formatted according to what is indicated in the parameter 'rest_fmt'.

    Tag "PROC_PUT":
    Put (pass) new settings to processor.
    Additional variable arguments for function proc_opt() are:

    Parameters
    strPointer to a character string containing new settings for the processor. String format can be either a query-string or JSON.

Definition at line 368 of file proc.c.

int proc_recv_frame ( proc_ctx_t proc_ctx,
proc_frame_ctx_t **  ref_proc_frame_ctx 
)

Get new processed frame of data from the processor's output buffer. Unless unblocked (see processor options 'proc_opt()'), this function blocks until a new frame is available to be read from the processor's output buffer. This function is thread-safe and can be called concurrently.

Parameters
proc_ctxPointer to the processor (PROC) context structure obtained in a previous call to the 'proc_open()' function.
ref_proc_frame_ctxReference to the pointer to a structure characterizing the output processed frame. This function will return the processed frame passing its structure pointer by argument.
Returns
Status code (STAT_SUCCESS code in case of success, for other code values please refer to .stat_codes.h).

Definition at line 323 of file proc.c.

int proc_send_frame ( proc_ctx_t proc_ctx,
const proc_frame_ctx_t proc_frame_ctx 
)

Put new frame of data to be processed in the processor's input buffer. Unless unblocked (see processor options 'proc_opt()'), this function blocks until a slot is available to be able to push the new frame into the processor's input buffer. This function is thread-safe and can be called concurrently.

Parameters
proc_ctxPointer to the processor (PROC) context structure obtained in a previous call to the 'proc_open()' function.
proc_frame_ctxPointer to the structure characterizing the input frame to be processed. The frame is duplicated and inserted in the input buffer.
Returns
Status code (STAT_SUCCESS code in case of success, for other code values please refer to .stat_codes.h).

Definition at line 287 of file proc.c.

static void proc_stats_register_accumulated_io_bits ( proc_ctx_t proc_ctx,
const proc_frame_ctx_t proc_frame_ctx,
const proc_io_t  proc_io 
)
static

Register accumulated input/output bits. This is used to compute bitrate statistics.

Definition at line 828 of file proc.c.

static void proc_stats_register_frame_pts ( proc_ctx_t proc_ctx,
const proc_frame_ctx_t proc_frame_ctx,
const proc_io_t  proc_io 
)
static

Register frame presentation time stamp (PTS).

Definition at line 793 of file proc.c.

int proc_vopt ( proc_ctx_t proc_ctx,
const char *  tag,
va_list  arg 
)

The function 'proc_vopt()' is the same as proc_opt() except that it is called with a va_list instead of a variable number of arguments. This function does not call the va_end macro. Because it invoke the va_arg macro, the value of the argument pointer is undefined after the call.

Definition at line 382 of file proc.c.