File Index
Files and directories
Sign in
FILE

wave5-vpu.h

File preview with syntax highlighting.

linux-6.19.14/drivers/media/platform/chips-media/wave5/wave5-vpu.h C
 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.