mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 16:46:15 -04:00
Merge "msm: vidc: send dmabuf pointer instead of fd"
This commit is contained in:
commit
5a31d042fe
1 changed files with 37 additions and 33 deletions
|
|
@ -7,6 +7,9 @@
|
|||
#include "msm_cvp_external.h"
|
||||
#include "msm_vidc_common.h"
|
||||
|
||||
#define LOWER32(a) ((u32)((u64)a))
|
||||
#define UPPER32(a) ((u32)((u64)a >> 32))
|
||||
|
||||
static void print_cvp_buffer(u32 tag, const char *str,
|
||||
struct msm_vidc_inst *inst, struct msm_cvp_buf *cbuf)
|
||||
{
|
||||
|
|
@ -22,6 +25,22 @@ static void print_cvp_buffer(u32 tag, const char *str,
|
|||
cbuf->offset, cbuf->dbuf, cbuf->kvaddr);
|
||||
}
|
||||
|
||||
static int fill_cvp_buffer(struct msm_cvp_buffer_type *dst,
|
||||
struct msm_cvp_buf *src)
|
||||
{
|
||||
if (!dst || !src) {
|
||||
dprintk(VIDC_ERR, "%s: invalid params\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dst->buffer_addr = -1;
|
||||
dst->reserved1 = LOWER32(src->dbuf);
|
||||
dst->reserved2 = UPPER32(src->dbuf);
|
||||
dst->size = src->size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int msm_cvp_get_version_info(struct msm_vidc_inst *inst)
|
||||
{
|
||||
int rc;
|
||||
|
|
@ -189,7 +208,6 @@ static int msm_cvp_allocate_buffer(struct msm_vidc_inst *inst,
|
|||
int ion_flags = 0;
|
||||
unsigned long heap_mask = 0;
|
||||
struct dma_buf *dbuf;
|
||||
int fd;
|
||||
|
||||
if (!inst || !inst->cvp || !buffer) {
|
||||
dprintk(VIDC_ERR, "%s: invalid params\n", __func__);
|
||||
|
|
@ -212,14 +230,7 @@ static int msm_cvp_allocate_buffer(struct msm_vidc_inst *inst,
|
|||
goto error;
|
||||
}
|
||||
buffer->dbuf = dbuf;
|
||||
|
||||
fd = dma_buf_fd(dbuf, O_CLOEXEC);
|
||||
if (fd < 0) {
|
||||
dprintk(VIDC_ERR, "%s: failed to get fd\n", __func__);
|
||||
rc = -ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
buffer->fd = fd;
|
||||
buffer->fd = -1;
|
||||
|
||||
if (kernel_map) {
|
||||
buffer->kvaddr = dma_buf_vmap(dbuf);
|
||||
|
|
@ -539,10 +550,8 @@ static void msm_cvp_deinit_internal_buffers(struct msm_vidc_inst *inst)
|
|||
HFI_CMD_SESSION_CVP_RELEASE_PERSIST_BUFFERS;
|
||||
persist2_packet.session_id = cvp->session_id;
|
||||
persist2_packet.cvp_op = CVP_DME;
|
||||
persist2_packet.persist2_buffer.buffer_addr =
|
||||
cvp->persist2_buffer.fd;
|
||||
persist2_packet.persist2_buffer.size =
|
||||
cvp->persist2_buffer.size;
|
||||
fill_cvp_buffer(&persist2_packet.persist2_buffer,
|
||||
&cvp->persist2_buffer);
|
||||
|
||||
arg = kzalloc(sizeof(struct cvp_kmd_arg), GFP_KERNEL);
|
||||
if (arg) {
|
||||
|
|
@ -610,8 +619,8 @@ static int msm_cvp_init_internal_buffers(struct msm_vidc_inst *inst)
|
|||
persist2_packet.packet_type = HFI_CMD_SESSION_CVP_SET_PERSIST_BUFFERS;
|
||||
persist2_packet.session_id = cvp->session_id;
|
||||
persist2_packet.cvp_op = CVP_DME;
|
||||
persist2_packet.persist2_buffer.buffer_addr = cvp->persist2_buffer.fd;
|
||||
persist2_packet.persist2_buffer.size = cvp->persist2_buffer.size;
|
||||
fill_cvp_buffer(&persist2_packet.persist2_buffer,
|
||||
&cvp->persist2_buffer);
|
||||
|
||||
memset(arg, 0, sizeof(struct cvp_kmd_arg));
|
||||
arg->type = CVP_KMD_HFI_PERSIST_CMD;
|
||||
|
|
@ -831,6 +840,7 @@ static int msm_cvp_frame_process(struct msm_vidc_inst *inst,
|
|||
cvp->fullres_buffer.fd = vb->planes[0].m.fd;
|
||||
cvp->fullres_buffer.size = vb->planes[0].length;
|
||||
cvp->fullres_buffer.offset = vb->planes[0].data_offset;
|
||||
cvp->fullres_buffer.dbuf = mbuf->smem[0].dma_buf;
|
||||
|
||||
/* frame skip logic */
|
||||
fps = max(inst->clk_data.operating_rate,
|
||||
|
|
@ -875,25 +885,19 @@ static int msm_cvp_frame_process(struct msm_vidc_inst *inst,
|
|||
frame->descmatch_threshold = 52;
|
||||
frame->ncc_robustness_threshold = 0;
|
||||
|
||||
frame->fullres_srcbuffer.buffer_addr = cvp->fullres_buffer.fd;
|
||||
frame->fullres_srcbuffer.size = cvp->fullres_buffer.size;
|
||||
frame->videospatialtemporal_statsbuffer.buffer_addr =
|
||||
cvp->output_buffer.fd;
|
||||
frame->videospatialtemporal_statsbuffer.size =
|
||||
cvp->output_buffer.size;
|
||||
|
||||
frame->src_buffer.buffer_addr = cvp->fullres_buffer.fd;
|
||||
frame->src_buffer.size = cvp->fullres_buffer.size;
|
||||
fill_cvp_buffer(&frame->fullres_srcbuffer,
|
||||
&cvp->fullres_buffer);
|
||||
fill_cvp_buffer(&frame->videospatialtemporal_statsbuffer,
|
||||
&cvp->output_buffer);
|
||||
fill_cvp_buffer(&frame->src_buffer, &cvp->fullres_buffer);
|
||||
if (cvp->downscale) {
|
||||
frame->src_buffer.buffer_addr = cvp->src_buffer.fd;
|
||||
frame->src_buffer.size = cvp->src_buffer.size;
|
||||
frame->ref_buffer.buffer_addr = cvp->ref_buffer.fd;
|
||||
frame->ref_buffer.size = cvp->ref_buffer.size;
|
||||
fill_cvp_buffer(&frame->src_buffer, &cvp->src_buffer);
|
||||
fill_cvp_buffer(&frame->ref_buffer, &cvp->ref_buffer);
|
||||
}
|
||||
frame->srcframe_contextbuffer.buffer_addr = cvp->context_buffer.fd;
|
||||
frame->srcframe_contextbuffer.size = cvp->context_buffer.size;
|
||||
frame->refframe_contextbuffer.buffer_addr = cvp->refcontext_buffer.fd;
|
||||
frame->refframe_contextbuffer.size = cvp->refcontext_buffer.size;
|
||||
fill_cvp_buffer(&frame->srcframe_contextbuffer,
|
||||
&cvp->context_buffer);
|
||||
fill_cvp_buffer(&frame->refframe_contextbuffer,
|
||||
&cvp->refcontext_buffer);
|
||||
|
||||
print_cvp_buffer(VIDC_LOW, "input frame", inst, &cvp->fullres_buffer);
|
||||
rc = msm_cvp_private(cvp->priv, CVP_KMD_SEND_CMD_PKT, arg);
|
||||
|
|
|
|||
Loading…
Reference in a new issue