xref: /linux/drivers/media/platform/amphion/vpu_v4l2.h (revision 955abe0a1b41de5ba61fe4cd614ebc123084d499)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright 2020-2021 NXP
4  */
5 
6 #ifndef _AMPHION_VPU_V4L2_H
7 #define _AMPHION_VPU_V4L2_H
8 
9 #include <linux/videodev2.h>
10 
11 void vpu_inst_lock(struct vpu_inst *inst);
12 void vpu_inst_unlock(struct vpu_inst *inst);
13 void vpu_set_buffer_state(struct vb2_v4l2_buffer *vbuf, unsigned int state);
14 unsigned int vpu_get_buffer_state(struct vb2_v4l2_buffer *vbuf);
15 void vpu_set_buffer_average_qp(struct vb2_v4l2_buffer *vbuf, u32 qp);
16 
17 int vpu_v4l2_open(struct file *file, struct vpu_inst *inst);
18 int vpu_v4l2_close(struct file *file);
19 
20 u32 vpu_get_fmt_plane_size(struct vpu_format *fmt, u32 plane_no);
21 int vpu_try_fmt_common(struct vpu_inst *inst, struct v4l2_format *f, struct vpu_format *fmt);
22 int vpu_process_output_buffer(struct vpu_inst *inst);
23 int vpu_process_capture_buffer(struct vpu_inst *inst);
24 struct vb2_v4l2_buffer *vpu_next_src_buf(struct vpu_inst *inst);
25 void vpu_skip_frame(struct vpu_inst *inst, int count);
26 struct vb2_v4l2_buffer *vpu_find_buf_by_sequence(struct vpu_inst *inst, u32 type, u32 sequence);
27 struct vb2_v4l2_buffer *vpu_find_buf_by_idx(struct vpu_inst *inst, u32 type, u32 idx);
28 void vpu_v4l2_set_error(struct vpu_inst *inst);
29 int vpu_notify_eos(struct vpu_inst *inst);
30 int vpu_notify_source_change(struct vpu_inst *inst);
31 int vpu_set_last_buffer_dequeued(struct vpu_inst *inst, bool eos);
32 void vpu_vb2_buffers_return(struct vpu_inst *inst, unsigned int type, enum vb2_buffer_state state);
33 int vpu_get_num_buffers(struct vpu_inst *inst, u32 type);
34 bool vpu_is_source_empty(struct vpu_inst *inst);
35 
36 dma_addr_t vpu_get_vb_phy_addr(struct vb2_buffer *vb, u32 plane_no);
37 unsigned int vpu_get_vb_length(struct vb2_buffer *vb, u32 plane_no);
38 static inline struct vpu_format *vpu_get_format(struct vpu_inst *inst, u32 type)
39 {
40 	if (V4L2_TYPE_IS_OUTPUT(type))
41 		return &inst->out_format;
42 	else
43 		return &inst->cap_format;
44 }
45 
46 static inline char *vpu_type_name(u32 type)
47 {
48 	return V4L2_TYPE_IS_OUTPUT(type) ? "output" : "capture";
49 }
50 
51 static inline int vpu_vb_is_codecconfig(struct vb2_v4l2_buffer *vbuf)
52 {
53 #ifdef V4L2_BUF_FLAG_CODECCONFIG
54 	return (vbuf->flags & V4L2_BUF_FLAG_CODECCONFIG) ? 1 : 0;
55 #else
56 	return 0;
57 #endif
58 }
59 
60 #endif
61