Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;

}
Пример #5
0
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;
}