32 #include <libcjson/cJSON.h> 33 #include <libmediaprocsutils/log.h> 34 #include <libmediaprocsutils/stat_codes.h> 35 #include <libmediaprocsutils/check_utils.h> 36 #include <libmediaprocsutils/fifo.h> 37 #include <libmediaprocs/proc_if.h> 38 #include <libmediaprocs/proc.h> 67 const char *settings_str,
log_ctx_t *log_ctx, va_list arg);
86 "bypass",
"bypass",
"video/bypass",
87 (uint64_t)(PROC_FEATURE_BITRATE|PROC_FEATURE_REGISTER_PTS),
90 proc_send_frame_default1,
92 proc_recv_frame_default1,
108 const char *settings_str,
log_ctx_t *log_ctx, va_list arg)
110 int ret_code, end_code= STAT_ERROR;
113 LOG_CTX_INIT(log_ctx);
116 CHECK_DO(proc_if!= NULL,
return NULL);
117 CHECK_DO(settings_str!= NULL,
return NULL);
122 CHECK_DO(bypass_ctx!= NULL,
goto end);
129 CHECK_DO(ret_code== STAT_SUCCESS,
goto end);
133 CHECK_DO(ret_code== STAT_SUCCESS,
goto end);
135 end_code= STAT_SUCCESS;
137 if(end_code!= STAT_SUCCESS)
151 if(ref_proc_ctx== NULL || (bypass_ctx= (
bypass_ctx_t*)*ref_proc_ctx)== NULL)
154 LOG_CTX_SET(((
proc_ctx_t*)bypass_ctx)->log_ctx);
173 int ret_code, end_code= STAT_ERROR;
175 size_t fifo_elem_size= 0;
179 CHECK_DO(proc_ctx!= NULL,
return STAT_ERROR);
180 CHECK_DO(iput_fifo_ctx!= NULL,
return STAT_ERROR);
181 CHECK_DO(oput_fifo_ctx!= NULL,
return STAT_ERROR);
183 LOG_CTX_SET(proc_ctx->
log_ctx);
186 ret_code=
fifo_get(iput_fifo_ctx, (
void**)&proc_frame_ctx, &fifo_elem_size);
187 CHECK_DO(ret_code== STAT_SUCCESS || ret_code== STAT_EAGAIN,
goto end);
188 if(ret_code== STAT_EAGAIN) {
193 if(proc_frame_ctx== NULL)
201 ret_code=
fifo_put(oput_fifo_ctx, (
void**)&proc_frame_ctx,
sizeof(
void*));
202 CHECK_DO(ret_code== STAT_SUCCESS || ret_code== STAT_ENOMEM,
goto end);
204 end_code= STAT_SUCCESS;
206 if(proc_frame_ctx!= NULL)
222 CHECK_DO(proc_ctx!= NULL,
return STAT_ERROR);
223 CHECK_DO(str!= NULL,
return STAT_ERROR);
244 int end_code= STAT_ERROR;
247 cJSON *cjson_rest= NULL, *cjson_settings= NULL;
252 CHECK_DO(proc_ctx!= NULL,
return STAT_ERROR);
253 CHECK_DO(rest_fmt< PROC_IF_REST_FMT_ENUM_MAX,
return STAT_ERROR);
254 CHECK_DO(ref_reponse!= NULL,
return STAT_ERROR);
256 LOG_CTX_SET(proc_ctx->
log_ctx);
261 cjson_rest= cJSON_CreateObject();
262 CHECK_DO(cjson_rest!= NULL,
goto end);
279 cjson_settings= cJSON_CreateObject();
280 CHECK_DO(cjson_settings!= NULL,
goto end);
286 cJSON_AddItemToObject(cjson_rest,
"settings", cjson_settings);
287 cjson_settings= NULL;
304 CHECK_DO(*ref_reponse!= NULL && strlen((
char*)*ref_reponse)> 0,
308 *ref_reponse= (
void*)cjson_rest;
312 LOGE(
"Unknown format requested for processor REST\n");
316 end_code= STAT_SUCCESS;
318 if(cjson_rest!= NULL)
319 cJSON_Delete(cjson_rest);
320 if(cjson_settings!= NULL)
321 cJSON_Delete(cjson_settings);
336 LOG_CTX_INIT(log_ctx);
339 CHECK_DO(bypass_settings_ctx!= NULL,
return STAT_ERROR);
356 LOG_CTX_INIT(log_ctx);
359 CHECK_DO(bypass_settings_ctx!= NULL,
return);
int fifo_get(fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size)
#define CJSON_PRINT(CJSON_PTR)
struct bypass_ctx_s bypass_ctx_t
void proc_frame_ctx_release(proc_frame_ctx_t **ref_proc_frame_ctx)
const proc_if_t proc_if_bypass
static int bypass_process_frame(proc_ctx_t *proc_ctx, fifo_ctx_t *iput_fifo_ctx, fifo_ctx_t *oput_fifo_ctx)
int fifo_put(fifo_ctx_t *fifo_ctx, void **ref_elem, size_t elem_size)
static int bypass_rest_get(proc_ctx_t *proc_ctx, const proc_if_rest_fmt_t rest_fmt, void **ref_reponse)
static void bypass_settings_ctx_deinit(volatile bypass_settings_ctx_t *bypass_settings_ctx, log_ctx_t *log_ctx)
"Bypass" or dummy processor.
#define CHECK_DO(COND, ACTION)
Character string response.
static proc_ctx_t * bypass_open(const proc_if_t *proc_if, const char *settings_str, log_ctx_t *log_ctx, va_list arg)
enum proc_if_rest_fmt_enum proc_if_rest_fmt_t
static int bypass_rest_put(proc_ctx_t *proc_ctx, const char *str)
volatile struct bypass_settings_ctx_s bypass_settings_ctx
proc_frame_ctx_t * proc_frame_ctx_dup(const proc_frame_ctx_t *proc_frame_ctx_arg)
struct bypass_settings_ctx_s bypass_settings_ctx_t
static int bypass_settings_ctx_init(volatile bypass_settings_ctx_t *bypass_settings_ctx, log_ctx_t *log_ctx)
static void bypass_close(proc_ctx_t **ref_proc_ctx)