/* 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 240struct 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
/* 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