// SPDX-License-Identifier: GPL-2.0 /* * Hantro VP8 codec driver * * Copyright (C) 2019 Rockchip Electronics Co., Ltd. * ZhiChao Yu <[email protected]> * * Copyright (C) 2019 Google, Inc. * Tomasz Figa <[email protected]> */ #include <media/v4l2-mem2mem.h> #include "hantro_hw.h" #include "hantro.h" #include "hantro_g1_regs.h" /* DCT partition base address regs */ static const struct hantro_reg vp8_dec_dct_base[8] = …; /* Loop filter level regs */ static const struct hantro_reg vp8_dec_lf_level[4] = …; /* Macroblock loop filter level adjustment regs */ static const struct hantro_reg vp8_dec_mb_adj[4] = …; /* Reference frame adjustment regs */ static const struct hantro_reg vp8_dec_ref_adj[4] = …; /* Quantizer */ static const struct hantro_reg vp8_dec_quant[4] = …; /* Quantizer delta regs */ static const struct hantro_reg vp8_dec_quant_delta[5] = …; /* DCT partition start bits regs */ static const struct hantro_reg vp8_dec_dct_start_bits[8] = …; /* Precision filter tap regs */ static const struct hantro_reg vp8_dec_pred_bc_tap[8][4] = …; /* * Set loop filters */ static void cfg_lf(struct hantro_ctx *ctx, const struct v4l2_ctrl_vp8_frame *hdr) { … } /* * Set quantization parameters */ static void cfg_qp(struct hantro_ctx *ctx, const struct v4l2_ctrl_vp8_frame *hdr) { … } /* * set control partition and DCT partition regs * * VP8 frame stream data layout: * * first_part_size parttion_sizes[0] * ^ ^ * src_dma | | * ^ +--------+------+ +-----+-----+ * | | control part | | | * +--------+----------------+------------------+-----------+-----+-----------+ * | tag 3B | extra 7B | hdr | mb_data | DCT sz | DCT part0 | ... | DCT partn | * +--------+-----------------------------------+-----------+-----+-----------+ * | | | | * v +----+---+ v * mb_start | src_dma_end * v * DCT size part * (num_dct-1)*3B * Note: * 1. only key-frames have extra 7-bytes * 2. all offsets are base on src_dma * 3. number of DCT parts is 1, 2, 4 or 8 * 4. the addresses set to the VPU must be 64-bits aligned */ static void cfg_parts(struct hantro_ctx *ctx, const struct v4l2_ctrl_vp8_frame *hdr) { … } /* * prediction filter taps * normal 6-tap filters */ static void cfg_tap(struct hantro_ctx *ctx, const struct v4l2_ctrl_vp8_frame *hdr) { … } static void cfg_ref(struct hantro_ctx *ctx, const struct v4l2_ctrl_vp8_frame *hdr, struct vb2_v4l2_buffer *vb2_dst) { … } static void cfg_buffers(struct hantro_ctx *ctx, const struct v4l2_ctrl_vp8_frame *hdr, struct vb2_v4l2_buffer *vb2_dst) { … } int hantro_g1_vp8_dec_run(struct hantro_ctx *ctx) { … }