FILE
wave5-vpu.h
File preview with syntax highlighting.
linux-6.19.14/drivers/media/platform/chips-media/wave5/wave5-vpu.h
1/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ 2/* 3 * Wave5 series multi-standard codec IP - basic types 4 * 5 * Copyright (C) 2021-2023 CHIPS&MEDIA INC 6 */ 7#ifndef __VPU_DRV_H__ 8#define __VPU_DRV_H__ 9 10#include <media/v4l2-ctrls.h> 11#include <media/v4l2-ioctl.h> 12#include <media/v4l2-event.h> 13#include <media/v4l2-fh.h> 14#include <media/videobuf2-v4l2.h> 15#include <media/videobuf2-dma-contig.h> 16#include <media/videobuf2-vmalloc.h> 17#include "wave5-vpuconfig.h" 18#include "wave5-vpuapi.h" 19 20#define VPU_BUF_SYNC_TO_DEVICE 0 21#define VPU_BUF_SYNC_FROM_DEVICE 1 22 23struct vpu_src_buffer { 24 struct v4l2_m2m_buffer v4l2_m2m_buf; 25 struct list_head list; 26 bool consumed; 27}; 28 29struct vpu_dst_buffer { 30 struct v4l2_m2m_buffer v4l2_m2m_buf; 31 bool display; 32}; 33 34enum vpu_fmt_type { 35 VPU_FMT_TYPE_CODEC = 0, 36 VPU_FMT_TYPE_RAW = 1 37}; 38 39struct vpu_format { 40 unsigned int v4l2_pix_fmt; 41 const struct v4l2_frmsize_stepwise *v4l2_frmsize; 42}; 43 44static inline struct vpu_instance *wave5_to_vpu_inst(struct v4l2_fh *vfh) 45{ 46 return container_of(vfh, struct vpu_instance, v4l2_fh); 47} 48 49static inline struct vpu_instance *file_to_vpu_inst(struct file *filp) 50{ 51 return wave5_to_vpu_inst(file_to_v4l2_fh(filp)); 52} 53 54static inline struct vpu_instance *wave5_ctrl_to_vpu_inst(struct v4l2_ctrl *vctrl) 55{ 56 return container_of(vctrl->handler, struct vpu_instance, v4l2_ctrl_hdl); 57} 58 59static inline struct vpu_src_buffer *wave5_to_vpu_src_buf(struct vb2_v4l2_buffer *vbuf) 60{ 61 return container_of(vbuf, struct vpu_src_buffer, v4l2_m2m_buf.vb); 62} 63 64static inline struct vpu_dst_buffer *wave5_to_vpu_dst_buf(struct vb2_v4l2_buffer *vbuf) 65{ 66 return container_of(vbuf, struct vpu_dst_buffer, v4l2_m2m_buf.vb); 67} 68 69int wave5_vpu_wait_interrupt(struct vpu_instance *inst, unsigned int timeout); 70 71int wave5_vpu_dec_register_device(struct vpu_device *dev); 72void wave5_vpu_dec_unregister_device(struct vpu_device *dev); 73int wave5_vpu_enc_register_device(struct vpu_device *dev); 74void wave5_vpu_enc_unregister_device(struct vpu_device *dev); 75static inline bool wave5_vpu_both_queues_are_streaming(struct vpu_instance *inst) 76{ 77 struct vb2_queue *vq_cap = 78 v4l2_m2m_get_vq(inst->v4l2_fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE); 79 struct vb2_queue *vq_out = 80 v4l2_m2m_get_vq(inst->v4l2_fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE); 81 82 return vb2_is_streaming(vq_cap) && vb2_is_streaming(vq_out); 83} 84 85#endif
~/
Read-only file preview.