Exemplo n.º 1
0
static u32 vcd_fill_output_buffer_cmn
    (struct vcd_clnt_ctxt *cctxt,
     struct vcd_frame_data *buffer)
{
	u32 rc = VCD_S_SUCCESS;
	struct vcd_buffer_entry *buf_entry;
	u32 result = true;
	u32 handled = true;
	if (!cctxt || !buffer) {
		VCD_MSG_ERROR("%s(): Inavlid params cctxt %p buffer %p",
					__func__, cctxt, buffer);
		return VCD_ERR_BAD_POINTER;
	}
	VCD_MSG_LOW("vcd_fill_output_buffer_cmn in %d:",
		    cctxt->clnt_state.state);
	if (cctxt->status.mask & VCD_IN_RECONFIG) {
		buffer->time_stamp = 0;
		buffer->data_len = 0;
		VCD_MSG_LOW("In reconfig: Return output buffer");
		cctxt->callback(VCD_EVT_RESP_OUTPUT_DONE,
			VCD_S_SUCCESS,
			buffer,
			sizeof(struct vcd_frame_data),
			cctxt, cctxt->client_data);
		return rc;
	}
	buf_entry = vcd_check_fill_output_buffer(cctxt, buffer);
	if (!buf_entry)
		return VCD_ERR_BAD_POINTER;

	if (!(cctxt->status.mask & VCD_FIRST_OP_RCVD)) {
		rc = vcd_handle_first_fill_output_buffer(cctxt, buffer,
			&handled);
		VCD_FAILED_RETURN(rc,
			"Failed: vcd_handle_first_fill_output_buffer");
		if (handled)
			return rc ;
	}

	result =
	    vcd_buffer_pool_entry_en_q(&cctxt->out_buf_pool, buf_entry);

	if (!result && !cctxt->decoding) {
		VCD_MSG_ERROR("Failed: vcd_buffer_pool_entry_en_q");

		return VCD_ERR_FAIL;
	}

	buf_entry->frame = *buffer;
	rc = vcd_return_op_buffer_to_hw(cctxt, buf_entry);
	if (!VCD_FAILED(rc) && cctxt->sched_clnt_hdl) {
		cctxt->sched_clnt_hdl->tkns++;
		vcd_try_submit_frame(cctxt->dev_ctxt);
	}
	return rc;
}
Exemplo n.º 2
0
static u32 vcd_fill_output_buffer_cmn
    (struct vcd_clnt_ctxt_type_t *p_cctxt,
     struct vcd_frame_data_type *p_buffer)
{
	u32 rc = VCD_S_SUCCESS;
	struct vcd_buffer_entry_type *p_buf_entry;
	u32 b_q_result = TRUE;
	u32 b_handled = TRUE;

	VCD_MSG_LOW("vcd_fill_output_buffer_cmn in %d:",
		    p_cctxt->clnt_state.e_state);

	p_buf_entry = vcd_check_fill_output_buffer(p_cctxt, p_buffer);
	if (!p_buf_entry)
		return VCD_ERR_BAD_POINTER;

	if (!p_cctxt->status.b_first_op_frame_recvd) {
		rc = vcd_handle_first_fill_output_buffer(p_cctxt, p_buffer,
			&b_handled);
		VCD_FAILED_RETURN(rc,
			"Failed: VCD_HandleFirstFillOutputBuffer");
		p_cctxt->status.b_first_op_frame_recvd = TRUE;
		if (b_handled)
			return rc ;
	}

	b_q_result =
	    vcd_buffer_pool_entry_en_q(&p_cctxt->out_buf_pool, p_buf_entry);

	if (!b_q_result && !p_cctxt->b_decoding) {
		VCD_MSG_ERROR("Failed: vcd_buffer_pool_entry_en_q");

		return VCD_ERR_FAIL;
	}

	p_buf_entry->frame = *p_buffer;
	rc = vcd_return_op_buffer_to_hw(p_cctxt, p_buf_entry);
	if (!VCD_FAILED(rc) && p_cctxt->sched_clnt_hdl) {
		vcd_try_submit_frame(p_cctxt->p_dev_ctxt);
		p_cctxt->sched_clnt_hdl->n_o_tkns++;
	}
	return rc;
}
Exemplo n.º 3
0
static u32 vcd_fill_output_buffer_cmn
    (struct vcd_clnt_ctxt *cctxt,
     struct vcd_frame_data *buffer)
{
	u32 rc = VCD_S_SUCCESS;
	struct vcd_buffer_entry *buf_entry;
	u32 result = true;
	u32 handled = true;

	VCD_MSG_LOW("vcd_fill_output_buffer_cmn in %d:",
		    cctxt->clnt_state.state);

	buf_entry = vcd_check_fill_output_buffer(cctxt, buffer);
	if (!buf_entry)
		return VCD_ERR_BAD_POINTER;

	if (!(cctxt->status.mask & VCD_FIRST_OP_RCVD)) {
		rc = vcd_handle_first_fill_output_buffer(cctxt, buffer,
			&handled);
		VCD_FAILED_RETURN(rc,
			"Failed: vcd_handle_first_fill_output_buffer");
		if (handled)
			return rc ;
	}

	result =
	    vcd_buffer_pool_entry_en_q(&cctxt->out_buf_pool, buf_entry);

	if (!result && !cctxt->decoding) {
		VCD_MSG_ERROR("Failed: vcd_buffer_pool_entry_en_q");

		return VCD_ERR_FAIL;
	}

	buf_entry->frame = *buffer;
	rc = vcd_return_op_buffer_to_hw(cctxt, buf_entry);
	if (!VCD_FAILED(rc) && cctxt->sched_clnt_hdl) {
		cctxt->sched_clnt_hdl->tkns++;
		vcd_try_submit_frame(cctxt->dev_ctxt);
	}
	return rc;
}