summaryrefslogtreecommitdiff
path: root/drivers/media/platform/qcom/iris/iris_instance.h
blob: a770331d167571d83f536f0699454e6b9d8a9893 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
 */

#ifndef __IRIS_INSTANCE_H__
#define __IRIS_INSTANCE_H__

#include <media/v4l2-ctrls.h>

#include "iris_buffer.h"
#include "iris_core.h"
#include "iris_utils.h"

#define DEFAULT_WIDTH 320
#define DEFAULT_HEIGHT 240

struct iris_hfi_session_ops;

enum iris_fmt_type_out {
	IRIS_FMT_H264,
	IRIS_FMT_HEVC,
	IRIS_FMT_VP9,
	IRIS_FMT_AV1,
};

enum iris_fmt_type_cap {
	IRIS_FMT_NV12,
	IRIS_FMT_QC08C,
	IRIS_FMT_TP10,
	IRIS_FMT_QC10C,
};

/**
 * struct iris_inst - holds per video instance parameters
 *
 * @list: used for attach an instance to the core
 * @core: pointer to core structure
 * @session_id: id of current video session
 * @hfi_session_ops: iris HFI session ops
 * @ctx_q_lock: lock to serialize queues related ioctls
 * @lock: lock to seralise forward and reverse threads
 * @fh: reference of v4l2 file handler
 * @fmt_src: structure of v4l2_format for source
 * @fmt_dst: structure of v4l2_format for destination
 * @ctrl_handler: reference of v4l2 ctrl handler
 * @domain: domain type: encoder or decoder
 * @crop: structure of crop info
 * @compose: structure of compose info
 * @completion: structure of signal completions
 * @flush_completion: structure of signal completions for flush cmd
 * @flush_responses_pending: counter to track number of pending flush responses
 * @fw_caps: array of supported instance firmware capabilities
 * @buffers: array of different iris buffers
 * @fw_min_count: minimnum count of buffers needed by fw
 * @state: instance state
 * @sub_state: instance sub state
 * @once_per_session_set: boolean to set once per session property
 * @max_input_data_size: max size of input data
 * @power: structure of power info
 * @icc_data: structure of interconnect data
 * @m2m_dev:	a reference to m2m device structure
 * @m2m_ctx:	a reference to m2m context structure
 * @sequence_cap: a sequence counter for capture queue
 * @sequence_out: a sequence counter for output queue
 * @tss: timestamp metadata
 * @metadata_idx: index for metadata buffer
 * @codec: codec type
 * @last_buffer_dequeued: a flag to indicate that last buffer is sent by driver
 * @last_buf_ns: start time of received input buffer for current one second FPS window
 * @frame_counter: input buffer counter for current one second FPS window
 * @frame_rate: frame rate of current instance
 * @operating_rate: operating rate of current instance
 * @hfi_rc_type: rate control type
 * @enc_raw_width: source image width for encoder instance
 * @enc_raw_height: source image height for encoder instance
 * @enc_scale_width: scale width for encoder instance
 * @enc_scale_height: scale height for encoder instance
 * @hfi_layer_type: hierarchical coding layer type
 * @hfi_layer_count: hierarchical coding layer count
 */

struct iris_inst {
	struct list_head		list;
	struct iris_core		*core;
	u32				session_id;
	const struct iris_hfi_session_ops	*hfi_session_ops;
	struct mutex			ctx_q_lock;/* lock to serialize queues related ioctls */
	struct mutex			lock; /* lock to serialize forward and reverse threads */
	struct v4l2_fh			fh;
	struct v4l2_format		*fmt_src;
	struct v4l2_format		*fmt_dst;
	struct v4l2_ctrl_handler	ctrl_handler;
	enum domain_type		domain;
	struct iris_hfi_rect_desc	crop;
	struct iris_hfi_rect_desc	compose;
	struct completion		completion;
	struct completion		flush_completion;
	u32				flush_responses_pending;
	struct platform_inst_fw_cap	fw_caps[INST_FW_CAP_MAX];
	struct iris_buffers		buffers[BUF_TYPE_MAX];
	u32				fw_min_count;
	enum iris_inst_state		state;
	enum iris_inst_sub_state	sub_state;
	bool				once_per_session_set;
	size_t				max_input_data_size;
	struct iris_inst_power		power;
	struct icc_vote_data		icc_data;
	struct v4l2_m2m_dev		*m2m_dev;
	struct v4l2_m2m_ctx		*m2m_ctx;
	u32				sequence_cap;
	u32				sequence_out;
	struct iris_ts_metadata		tss[VIDEO_MAX_FRAME];
	u32				metadata_idx;
	u32				codec;
	bool				last_buffer_dequeued;
	u64				last_buf_ns;
	u32				frame_counter;
	u32				frame_rate;
	u32				operating_rate;
	u32				hfi_rc_type;
	u32				enc_raw_width;
	u32				enc_raw_height;
	u32				enc_scale_width;
	u32				enc_scale_height;
	u32				hfi_layer_type;
	u32				hfi_layer_count;
};

#endif