void test_exec_call(int fd, int test_id, uint32_t test_arg) { uint16_t server_status; int packet_len; int reply_len; char packet_buf[512] = {0}; char return_buf[512] = {0}; omx_packet *packet = (omx_packet *)packet_buf; omx_packet *rtn_packet = (omx_packet *)return_buf; fxn_error_args *fxn_args = (fxn_error_args *)&packet->data[1]; /* Set Packet Header for the RCMServer, synchronous execution: */ init_omx_packet(packet, OMX_DESC_MSG); /* Set OMX Function Index to call, with data: */ packet->fxn_idx = FXN_IDX_FXNERROR; /* Set data for the OMX function: */ packet->data_size = sizeof(fxn_error_args) + sizeof(int); packet->data[0] = 0; // RPC_OMX_MAP_INFO_NONE fxn_args->a = test_id; fxn_args->b = test_arg; /* Exec command: */ packet_len = sizeof(omx_packet) + packet->data_size; exec_cmd(fd, (char *)packet, packet_len, (char *)rtn_packet, &reply_len); /* Decode reply: */ server_status = (OMX_DESC_TYPE_MASK & rtn_packet->desc) >> OMX_DESC_TYPE_SHIFT; if (server_status == OMXSERVER_STATUS_SUCCESS) { printf ("omx_errors: called fxnError(%d)), result = %d\n", fxn_args->a, rtn_packet->result); } else { printf("omx_errors: Failed to execute fxnError: server status: %d\n", server_status); } }
void test_h264_decoder(int fd, int i) { uint16_t server_status; int packet_len; int reply_len; char packet_buf[512] = {0}; char return_buf[512] = {0}; omx_packet *packet = (omx_packet *)packet_buf; omx_packet *rtn_packet = (omx_packet *)return_buf; OMX_HANDLETYPE omx_handle; /* Call OMX_GetHandle to create an H264_decoder: */ /* Set Packet Header for the RCMServer, synchronous execution: */ init_omx_packet(packet, OMX_DESC_MSG); /* Set OMX Function Index to call, with data: */ packet->fxn_idx = FXN_IDX_OMX_GETHANDLE; /* Set data for the OMX function: */ packet->data_size = strlen(H264_DECODER_NAME) + 1; strcpy((char *)&packet->data, H264_DECODER_NAME); *(char *)&packet->data[packet->data_size] = '\0'; /* Exec command: */ packet_len = sizeof(omx_packet) + packet->data_size; printf("omx_sample (%d): OMX_GetHandle (%s).\n", i, H264_DECODER_NAME); exec_cmd(fd, (char *)packet, packet_len, (char *)rtn_packet, &reply_len, 1); /* Decode reply: */ server_status = (OMX_DESC_TYPE_MASK & rtn_packet->desc) >> OMX_DESC_TYPE_SHIFT; if (server_status == OMXSERVER_STATUS_SUCCESS) { omx_handle = *(OMX_HANDLETYPE *)rtn_packet->data; printf("omx_sample (%d): Got omx_handle: 0x%x\n", i, omx_handle); } else { printf("omx_sample: Failed to execute OMX_GetHandle: server status: %d\n", server_status); } /* now call SetParameter, passing back omx_handle...*/ init_omx_packet(packet, OMX_DESC_MSG); packet->fxn_idx = FXN_IDX_OMX_SETPARAMETER; packet->data_size = sizeof(uint32_t); packet->data[0] = omx_handle; /* Exec command: */ packet_len = sizeof(omx_packet) + packet->data_size; printf("omx_sample(%d): OMX_SetParameter (0x%x)\n", i, omx_handle); exec_cmd(fd, (char *)packet, packet_len, (char *)rtn_packet, &reply_len, 0); /* Decode reply: */ server_status = (OMX_DESC_TYPE_MASK & rtn_packet->desc) >> OMX_DESC_TYPE_SHIFT; if (server_status == OMXSERVER_STATUS_SUCCESS) { printf("omx_sample (%d): Got result %d\n", i, rtn_packet->result); } else { printf("omx_sample: Failed to execute OMX_SetParameter: server status: %d\n", server_status); } /* Etc... */ }