18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: LGPL-2.1 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright 2018 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef CODEC_V4L2_FWHT_H
78c2ecf20Sopenharmony_ci#define CODEC_V4L2_FWHT_H
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include "codec-fwht.h"
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cistruct v4l2_fwht_pixfmt_info {
128c2ecf20Sopenharmony_ci	u32 id;
138c2ecf20Sopenharmony_ci	unsigned int bytesperline_mult;
148c2ecf20Sopenharmony_ci	unsigned int sizeimage_mult;
158c2ecf20Sopenharmony_ci	unsigned int sizeimage_div;
168c2ecf20Sopenharmony_ci	unsigned int luma_alpha_step;
178c2ecf20Sopenharmony_ci	unsigned int chroma_step;
188c2ecf20Sopenharmony_ci	/* Chroma plane subsampling */
198c2ecf20Sopenharmony_ci	unsigned int width_div;
208c2ecf20Sopenharmony_ci	unsigned int height_div;
218c2ecf20Sopenharmony_ci	unsigned int components_num;
228c2ecf20Sopenharmony_ci	unsigned int planes_num;
238c2ecf20Sopenharmony_ci	unsigned int pixenc;
248c2ecf20Sopenharmony_ci};
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cistruct v4l2_fwht_state {
278c2ecf20Sopenharmony_ci	const struct v4l2_fwht_pixfmt_info *info;
288c2ecf20Sopenharmony_ci	unsigned int visible_width;
298c2ecf20Sopenharmony_ci	unsigned int visible_height;
308c2ecf20Sopenharmony_ci	unsigned int coded_width;
318c2ecf20Sopenharmony_ci	unsigned int coded_height;
328c2ecf20Sopenharmony_ci	unsigned int stride;
338c2ecf20Sopenharmony_ci	unsigned int ref_stride;
348c2ecf20Sopenharmony_ci	unsigned int gop_size;
358c2ecf20Sopenharmony_ci	unsigned int gop_cnt;
368c2ecf20Sopenharmony_ci	u16 i_frame_qp;
378c2ecf20Sopenharmony_ci	u16 p_frame_qp;
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	enum v4l2_colorspace colorspace;
408c2ecf20Sopenharmony_ci	enum v4l2_ycbcr_encoding ycbcr_enc;
418c2ecf20Sopenharmony_ci	enum v4l2_xfer_func xfer_func;
428c2ecf20Sopenharmony_ci	enum v4l2_quantization quantization;
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci	struct fwht_raw_frame ref_frame;
458c2ecf20Sopenharmony_ci	struct fwht_cframe_hdr header;
468c2ecf20Sopenharmony_ci	u8 *compressed_frame;
478c2ecf20Sopenharmony_ci	u64 ref_frame_ts;
488c2ecf20Sopenharmony_ci};
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ciconst struct v4l2_fwht_pixfmt_info *v4l2_fwht_find_pixfmt(u32 pixelformat);
518c2ecf20Sopenharmony_ciconst struct v4l2_fwht_pixfmt_info *v4l2_fwht_get_pixfmt(u32 idx);
528c2ecf20Sopenharmony_cibool v4l2_fwht_validate_fmt(const struct v4l2_fwht_pixfmt_info *info,
538c2ecf20Sopenharmony_ci			    u32 width_div, u32 height_div, u32 components_num,
548c2ecf20Sopenharmony_ci			    u32 pixenc);
558c2ecf20Sopenharmony_ciconst struct v4l2_fwht_pixfmt_info *v4l2_fwht_find_nth_fmt(u32 width_div,
568c2ecf20Sopenharmony_ci							  u32 height_div,
578c2ecf20Sopenharmony_ci							  u32 components_num,
588c2ecf20Sopenharmony_ci							  u32 pixenc,
598c2ecf20Sopenharmony_ci							  unsigned int start_idx);
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ciint v4l2_fwht_encode(struct v4l2_fwht_state *state, u8 *p_in, u8 *p_out);
628c2ecf20Sopenharmony_ciint v4l2_fwht_decode(struct v4l2_fwht_state *state, u8 *p_in, u8 *p_out);
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ci#endif
65