static u32 vcd_set_buffer_requirements_cmn (struct vcd_clnt_ctxt *cctxt, enum vcd_buffer_type buffer, struct vcd_buffer_requirement *buffer_req) { struct vcd_property_hdr Prop_hdr; u32 rc = VCD_S_SUCCESS; struct vcd_buffer_pool *buf_pool; u32 first_frm_recvd = 0; VCD_MSG_LOW("vcd_set_buffer_requirements_cmn in %d:", cctxt->clnt_state.state); if (!cctxt->decoding && cctxt->clnt_state.state != VCD_CLIENT_STATE_OPEN) { VCD_MSG_ERROR("Bad state (%d) for encoder", cctxt->clnt_state.state); return VCD_ERR_BAD_STATE; } VCD_MSG_MED("Buffer type = %d", buffer); if (buffer == VCD_BUFFER_INPUT) { Prop_hdr.prop_id = DDL_I_INPUT_BUF_REQ; buf_pool = &cctxt->in_buf_pool; first_frm_recvd = VCD_FIRST_IP_RCVD; } else if (buffer == VCD_BUFFER_OUTPUT) { Prop_hdr.prop_id = DDL_I_OUTPUT_BUF_REQ; buf_pool = &cctxt->out_buf_pool; first_frm_recvd = VCD_FIRST_OP_RCVD; } else { rc = VCD_ERR_ILLEGAL_PARM; } VCD_FAILED_RETURN(rc, "Invalid buffer type provided"); if (buf_pool->validated > 0) { VCD_MSG_ERROR("Need to free allocated buffers"); return VCD_ERR_ILLEGAL_OP; } first_frm_recvd &= cctxt->status.mask; if (first_frm_recvd) { VCD_MSG_ERROR("VCD SetBufReq called when data path is active"); return VCD_ERR_BAD_STATE; } Prop_hdr.sz = sizeof(*buffer_req); rc = ddl_set_property(cctxt->ddl_handle, &Prop_hdr, buffer_req); VCD_FAILED_RETURN(rc, "Failed: ddl_set_property"); if (buf_pool->entries) { VCD_MSG_MED("Resetting buffer requirements"); vcd_free_buffer_pool_entries(buf_pool); } return rc; }
static u32 vcd_set_property_cmn (struct vcd_clnt_ctxt *cctxt, struct vcd_property_hdr *prop_hdr, void *prop_val) { u32 rc; VCD_MSG_LOW("vcd_set_property_cmn in %d:", cctxt->clnt_state.state); VCD_MSG_LOW("property Id = %d", prop_hdr->prop_id); if (!prop_hdr->sz || !prop_hdr->prop_id) { VCD_MSG_MED("Bad parameters"); return VCD_ERR_ILLEGAL_PARM; } rc = ddl_set_property(cctxt->ddl_handle, prop_hdr, prop_val); VCD_FAILED_RETURN(rc, "Failed: ddl_set_property"); switch (prop_hdr->prop_id) { case VCD_I_LIVE: { struct vcd_property_live *live = (struct vcd_property_live *)prop_val; cctxt->live = live->live; break; } case VCD_I_FRAME_RATE: { if (cctxt->sched_clnt_hdl) { rc = vcd_set_frame_rate(cctxt, (struct vcd_property_frame_rate *) prop_val); } break; } case VCD_I_FRAME_SIZE: { if (cctxt->sched_clnt_hdl) { rc = vcd_set_frame_size(cctxt, (struct vcd_property_frame_size *) prop_val); } break; } case VCD_I_INTRA_PERIOD: { struct vcd_property_i_period *iperiod = (struct vcd_property_i_period *)prop_val; cctxt->bframe = iperiod->b_frames; break; } default: { break; } } return rc; }
static u32 vcd_set_property_cmn (struct vcd_clnt_ctxt *cctxt, struct vcd_property_hdr *prop_hdr, void *prop_val) { u32 rc; VCD_MSG_LOW("vcd_set_property_cmn in %d:", cctxt->clnt_state.state); VCD_MSG_LOW("property Id = %d", prop_hdr->prop_id); if (!prop_hdr->sz || !prop_hdr->prop_id) { VCD_MSG_MED("Bad parameters"); return VCD_ERR_ILLEGAL_PARM; } rc = ddl_set_property(cctxt->ddl_handle, prop_hdr, prop_val); if (rc) { /* Some properties aren't known to ddl that we can handle */ if (prop_hdr->prop_id != VCD_I_VOP_TIMING_CONSTANT_DELTA) VCD_FAILED_RETURN(rc, "Failed: ddl_set_property"); } switch (prop_hdr->prop_id) { case VCD_I_META_BUFFER_MODE: { struct vcd_property_live *live = (struct vcd_property_live *)prop_val; cctxt->meta_mode = live->live; break; } case VCD_I_LIVE: { struct vcd_property_live *live = (struct vcd_property_live *)prop_val; cctxt->live = live->live; break; } case VCD_I_FRAME_RATE: { if (cctxt->sched_clnt_hdl) { rc = vcd_set_frame_rate(cctxt, (struct vcd_property_frame_rate *) prop_val); } break; } case VCD_I_FRAME_SIZE: { if (cctxt->sched_clnt_hdl) { rc = vcd_set_frame_size(cctxt, (struct vcd_property_frame_size *) prop_val); } break; } case VCD_I_INTRA_PERIOD: { struct vcd_property_i_period *iperiod = (struct vcd_property_i_period *)prop_val; cctxt->bframe = iperiod->b_frames; break; } case VCD_REQ_PERF_LEVEL: rc = vcd_req_perf_level(cctxt, (struct vcd_property_perf_level *)prop_val); break; case VCD_I_VOP_TIMING_CONSTANT_DELTA: { struct vcd_property_vop_timing_constant_delta *delta = prop_val; if (delta->constant_delta > 0) { cctxt->time_frame_delta = delta->constant_delta; rc = VCD_S_SUCCESS; } else { VCD_MSG_ERROR("Frame delta must be positive"); rc = VCD_ERR_ILLEGAL_PARM; } break; } default: { break; } } return rc; }
static u32 vcd_set_buffer_requirements_cmn (struct vcd_clnt_ctxt_type_t *p_cctxt, enum vcd_buffer_type e_buffer, struct vcd_buffer_requirement_type *p_buffer_req) { struct vcd_property_hdr_type Prop_hdr; u32 rc = VCD_S_SUCCESS; struct vcd_buffer_pool_type *p_buf_pool; u32 b_first_frm_recvd = FALSE; VCD_MSG_LOW("vcd_set_buffer_requirements_cmn in %d:", p_cctxt->clnt_state.e_state); if (!p_cctxt->b_decoding && p_cctxt->clnt_state.e_state != VCD_CLIENT_STATE_OPEN) { VCD_MSG_ERROR("Bad state (%d) for encoder", p_cctxt->clnt_state.e_state); return VCD_ERR_BAD_STATE; } VCD_MSG_MED("Buffer type = %d", e_buffer); if (e_buffer == VCD_BUFFER_INPUT) { Prop_hdr.prop_id = DDL_I_INPUT_BUF_REQ; p_buf_pool = &p_cctxt->in_buf_pool; b_first_frm_recvd = p_cctxt->status.b_first_ip_frame_recvd; } else if (e_buffer == VCD_BUFFER_OUTPUT) { Prop_hdr.prop_id = DDL_I_OUTPUT_BUF_REQ; p_buf_pool = &p_cctxt->out_buf_pool; b_first_frm_recvd = p_cctxt->status.b_first_op_frame_recvd; } else { rc = VCD_ERR_ILLEGAL_PARM; } VCD_FAILED_RETURN(rc, "Invalid buffer type provided"); if (p_buf_pool->n_validated > 0) { VCD_MSG_ERROR("Need to free allocated buffers"); return VCD_ERR_ILLEGAL_OP; } if (b_first_frm_recvd) { VCD_MSG_ERROR("VCD SetBufReq called when data path is active"); return VCD_ERR_BAD_STATE; } Prop_hdr.n_size = sizeof(*p_buffer_req); rc = ddl_set_property(p_cctxt->ddl_handle, &Prop_hdr, p_buffer_req); VCD_FAILED_RETURN(rc, "Failed: ddl_set_property"); if (p_buf_pool->a_entries) { VCD_MSG_MED("Resetting buffer requirements"); vcd_free_buffer_pool_entries(p_buf_pool); } rc = vcd_alloc_buffer_pool_entries(p_buf_pool, p_buffer_req); return rc; }
static u32 vcd_set_property_cmn (struct vcd_clnt_ctxt_type_t *p_cctxt, struct vcd_property_hdr_type *p_prop_hdr, void *p_prop_val) { u32 rc; VCD_MSG_LOW("vcd_set_property_cmn in %d:", p_cctxt->clnt_state.e_state); VCD_MSG_LOW("property Id = %d", p_prop_hdr->prop_id); if (!p_prop_hdr->n_size || !p_prop_hdr->prop_id) { VCD_MSG_MED("Bad parameters"); return VCD_ERR_ILLEGAL_PARM; } rc = ddl_set_property(p_cctxt->ddl_handle, p_prop_hdr, p_prop_val); VCD_FAILED_RETURN(rc, "Failed: ddl_set_property"); switch (p_prop_hdr->prop_id) { case VCD_I_LIVE: { struct vcd_property_live_type *p_live = (struct vcd_property_live_type *)p_prop_val; p_cctxt->b_live = p_live->b_live; break; } case VCD_I_FRAME_RATE: { if (p_cctxt->sched_clnt_hdl) { rc = vcd_set_frame_rate(p_cctxt, (struct vcd_property_frame_rate_type *) p_prop_val); } break; } case VCD_I_FRAME_SIZE: { if (p_cctxt->sched_clnt_hdl) { rc = vcd_set_frame_size(p_cctxt, (struct vcd_property_frame_size_type *) p_prop_val); } break; } default: { break; } } return rc; }