162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Contains the virtual decoder logic. The functions here control the
462306a36Sopenharmony_ci * tracing/TPG on a per-frame basis
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef _VISL_DEC_H_
862306a36Sopenharmony_ci#define _VISL_DEC_H_
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include "visl.h"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct visl_fwht_run {
1362306a36Sopenharmony_ci	const struct v4l2_ctrl_fwht_params *params;
1462306a36Sopenharmony_ci};
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistruct visl_mpeg2_run {
1762306a36Sopenharmony_ci	const struct v4l2_ctrl_mpeg2_sequence *seq;
1862306a36Sopenharmony_ci	const struct v4l2_ctrl_mpeg2_picture *pic;
1962306a36Sopenharmony_ci	const struct v4l2_ctrl_mpeg2_quantisation *quant;
2062306a36Sopenharmony_ci};
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct visl_vp8_run {
2362306a36Sopenharmony_ci	const struct v4l2_ctrl_vp8_frame *frame;
2462306a36Sopenharmony_ci};
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistruct visl_vp9_run {
2762306a36Sopenharmony_ci	const struct v4l2_ctrl_vp9_frame *frame;
2862306a36Sopenharmony_ci	const struct v4l2_ctrl_vp9_compressed_hdr *probs;
2962306a36Sopenharmony_ci};
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistruct visl_h264_run {
3262306a36Sopenharmony_ci	const struct v4l2_ctrl_h264_sps *sps;
3362306a36Sopenharmony_ci	const struct v4l2_ctrl_h264_pps *pps;
3462306a36Sopenharmony_ci	const struct v4l2_ctrl_h264_scaling_matrix *sm;
3562306a36Sopenharmony_ci	const struct v4l2_ctrl_h264_slice_params *spram;
3662306a36Sopenharmony_ci	const struct v4l2_ctrl_h264_decode_params *dpram;
3762306a36Sopenharmony_ci	const struct v4l2_ctrl_h264_pred_weights *pwht;
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistruct visl_hevc_run {
4162306a36Sopenharmony_ci	const struct v4l2_ctrl_hevc_sps *sps;
4262306a36Sopenharmony_ci	const struct v4l2_ctrl_hevc_pps *pps;
4362306a36Sopenharmony_ci	const struct v4l2_ctrl_hevc_slice_params *spram;
4462306a36Sopenharmony_ci	const struct v4l2_ctrl_hevc_scaling_matrix *sm;
4562306a36Sopenharmony_ci	const struct v4l2_ctrl_hevc_decode_params *dpram;
4662306a36Sopenharmony_ci};
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cistruct visl_run {
4962306a36Sopenharmony_ci	struct vb2_v4l2_buffer	*src;
5062306a36Sopenharmony_ci	struct vb2_v4l2_buffer	*dst;
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci	union {
5362306a36Sopenharmony_ci		struct visl_fwht_run	fwht;
5462306a36Sopenharmony_ci		struct visl_mpeg2_run	mpeg2;
5562306a36Sopenharmony_ci		struct visl_vp8_run	vp8;
5662306a36Sopenharmony_ci		struct visl_vp9_run	vp9;
5762306a36Sopenharmony_ci		struct visl_h264_run	h264;
5862306a36Sopenharmony_ci		struct visl_hevc_run	hevc;
5962306a36Sopenharmony_ci	};
6062306a36Sopenharmony_ci};
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciint visl_dec_start(struct visl_ctx *ctx);
6362306a36Sopenharmony_ciint visl_dec_stop(struct visl_ctx *ctx);
6462306a36Sopenharmony_ciint visl_job_ready(void *priv);
6562306a36Sopenharmony_civoid visl_device_run(void *priv);
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci#endif /* _VISL_DEC_H_ */
68