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