26 #include <UnitTest++/UnitTest++.h> 32 #include <sys/types.h> 36 #include <libmediaprocsutils/log.h> 37 #include <libmediaprocsutils/stat_codes.h> 38 #include <libmediaprocsutils/fifo.h> 39 #include <libmediaprocs/proc_if.h> 40 #include <libmediaprocs/proc.h> 51 static void bypass_proc_close(
proc_ctx_t **ref_proc_ctx)
55 if(ref_proc_ctx== NULL)
58 if((proc_ctx= *ref_proc_ctx)!= NULL) {
64 static int bypass_proc_rest_put(
proc_ctx_t*,
const char *str)
75 static int bypass_proc_process_frame(
proc_ctx_t *proc_ctx,
79 size_t fifo_elem_size= 0;
84 (
void**)&proc_frame_ctx, &fifo_elem_size);
85 CHECK(ret_code== STAT_SUCCESS || ret_code== STAT_EAGAIN);
86 if(ret_code!= STAT_SUCCESS)
90 proc_frame_ctx,
sizeof(
void*));
91 CHECK(ret_code== STAT_SUCCESS || ret_code== STAT_ENOMEM);
94 if(proc_frame_ctx!= NULL)
101 TEST(ALLOCATE_RELEASE_PROC)
104 int frame_idx, i, x, y, ret_code;
107 "bypass_processor",
"encoder",
"application/octet-stream",
108 (uint64_t)(PROC_FEATURE_BITRATE|PROC_FEATURE_REGISTER_PTS|
109 PROC_FEATURE_LATENCY),
112 proc_send_frame_default1,
114 proc_recv_frame_default1,
116 bypass_proc_rest_put,
117 bypass_proc_rest_get,
118 bypass_proc_process_frame,
124 uint32_t fifo_ctx_maxsize[PROC_IO_NUM]= {FIFO_SIZE, FIFO_SIZE};
126 uint8_t yuv_frame[48]= {
127 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
128 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
129 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
130 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
131 0x00, 0x01, 0x02, 0x03,
132 0x04, 0x05, 0x06, 0x07,
133 0x00, 0x01, 0x02, 0x03,
134 0x04, 0x05, 0x06, 0x07
138 if(log_module_open()!= STAT_SUCCESS) {
139 printf(
"Could not initialize LOG module\n");
144 proc_frame_ctx_yuv.
data= yuv_frame;
145 proc_frame_ctx_yuv.
p_data[0]= &yuv_frame[0];
146 proc_frame_ctx_yuv.
p_data[1]= &yuv_frame[32];
147 proc_frame_ctx_yuv.
p_data[2]= &yuv_frame[40];
148 proc_frame_ctx_yuv.
linesize[0]= proc_frame_ctx_yuv.
width[0]= 8;
149 proc_frame_ctx_yuv.
linesize[1]= proc_frame_ctx_yuv.
width[1]= 4;
150 proc_frame_ctx_yuv.
linesize[2]= proc_frame_ctx_yuv.
width[2]= 4;
151 proc_frame_ctx_yuv.
height[0]= 4;
152 proc_frame_ctx_yuv.
height[1]= proc_frame_ctx_yuv.
height[2]= 2;
154 proc_frame_ctx_yuv.
pts= -1;
155 proc_frame_ctx_yuv.
dts= -1;
158 proc_ctx=
proc_open(&proc_if_bypass_proc,
"", 0,
159 fifo_ctx_maxsize, NULL, NULL);
160 CHECK(proc_ctx!= NULL);
165 for(frame_idx= 0; frame_idx< FIFO_SIZE; frame_idx++) {
167 CHECK(ret_code== STAT_SUCCESS);
173 for(frame_idx= 0; frame_idx< FIFO_SIZE; frame_idx++) {
174 if(proc_frame_ctx!= NULL)
177 CHECK(ret_code== STAT_SUCCESS);
178 CHECK(proc_frame_ctx!= NULL);
179 if(proc_frame_ctx== NULL)
183 CHECK(proc_frame_ctx->
pts== -1);
184 CHECK(proc_frame_ctx->
dts== -1);
185 for(i= 0; i< 3; i++) {
186 for(y= 0; y< (int)proc_frame_ctx->
height[i]; y++) {
187 for(x= 0; x< (int)proc_frame_ctx->
width[i]; x++) {
188 int data_coord= x+ y* proc_frame_ctx->
linesize[i];
189 uint8_t data_val= proc_frame_ctx->
p_data[i][data_coord];
190 int expected_val= x+ y* proc_frame_ctx_yuv.
width[i];
191 CHECK(data_val== expected_val);
int fifo_get(fifo_ctx_t *fifo_ctx, void **ref_elem, size_t *ref_elem_size)
size_t width[PROC_FRAME_NUM_DATA_POINTERS]
void proc_frame_ctx_release(proc_frame_ctx_t **ref_proc_frame_ctx)
int linesize[PROC_FRAME_NUM_DATA_POINTERS]
int fifo_put_dup(fifo_ctx_t *fifo_ctx, const void *elem, size_t elem_size)
SUITE(UTESTS_LIVE555_RTSP)
int proc_send_frame(proc_ctx_t *proc_ctx, const proc_frame_ctx_t *proc_frame_ctx)
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)
enum proc_if_rest_fmt_enum proc_if_rest_fmt_t
fifo_ctx_t * fifo_ctx_array[PROC_IO_NUM]
int proc_recv_frame(proc_ctx_t *proc_ctx, proc_frame_ctx_t **ref_proc_frame_ctx)
proc_frame_ctx_t * proc_frame_ctx_dup(const proc_frame_ctx_t *proc_frame_ctx_arg)
size_t height[PROC_FRAME_NUM_DATA_POINTERS]
void proc_close(proc_ctx_t **ref_proc_ctx)
const uint8_t * p_data[PROC_FRAME_NUM_DATA_POINTERS]