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_source_change(struct vpu_inst *inst); 30 int vpu_set_last_buffer_dequeued(struct vpu_inst *inst, bool eos); 31 int vpu_get_num_buffers(struct vpu_inst *inst, u32 type); 32 bool vpu_is_source_empty(struct vpu_inst *inst); 33 34 dma_addr_t vpu_get_vb_phy_addr(struct vb2_buffer *vb, u32 plane_no); 35 static inline struct vpu_format *vpu_get_format(struct vpu_inst *inst, u32 type) 36 { 37 if (V4L2_TYPE_IS_OUTPUT(type)) 38 return &inst->out_format; 39 else 40 return &inst->cap_format; 41 } 42 43 static inline int vpu_vb_is_codecconfig(struct vb2_v4l2_buffer *vbuf) 44 { 45 #ifdef V4L2_BUF_FLAG_CODECCONFIG 46 return (vbuf->flags & V4L2_BUF_FLAG_CODECCONFIG) ? 1 : 0; 47 #else 48 return 0; 49 #endif 50 } 51 52 #endif 53