xref: /OK3568_Linux_fs/kernel/include/media/v4l2-h264.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Helper functions for H264 codecs.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 2019 Collabora, Ltd.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Author: Boris Brezillon <boris.brezillon@collabora.com>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef _MEDIA_V4L2_H264_H
11*4882a593Smuzhiyun #define _MEDIA_V4L2_H264_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <media/h264-ctrls.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun /**
16*4882a593Smuzhiyun  * struct v4l2_h264_reflist_builder - Reference list builder object
17*4882a593Smuzhiyun  *
18*4882a593Smuzhiyun  * @refs.pic_order_count: reference picture order count
19*4882a593Smuzhiyun  * @refs.frame_num: reference frame number
20*4882a593Smuzhiyun  * @refs.pic_num: reference picture number
21*4882a593Smuzhiyun  * @refs.longterm: set to true for a long term reference
22*4882a593Smuzhiyun  * @refs: array of references
23*4882a593Smuzhiyun  * @cur_pic_order_count: picture order count of the frame being decoded
24*4882a593Smuzhiyun  * @unordered_reflist: unordered list of references. Will be used to generate
25*4882a593Smuzhiyun  *		       ordered P/B0/B1 lists
26*4882a593Smuzhiyun  * @num_valid: number of valid references in the refs array
27*4882a593Smuzhiyun  *
28*4882a593Smuzhiyun  * This object stores the context of the P/B0/B1 reference list builder.
29*4882a593Smuzhiyun  * This procedure is described in section '8.2.4 Decoding process for reference
30*4882a593Smuzhiyun  * picture lists construction' of the H264 spec.
31*4882a593Smuzhiyun  */
32*4882a593Smuzhiyun struct v4l2_h264_reflist_builder {
33*4882a593Smuzhiyun 	struct {
34*4882a593Smuzhiyun 		s32 pic_order_count;
35*4882a593Smuzhiyun 		int frame_num;
36*4882a593Smuzhiyun 		u32 pic_num;
37*4882a593Smuzhiyun 		u16 longterm : 1;
38*4882a593Smuzhiyun 	} refs[V4L2_H264_NUM_DPB_ENTRIES];
39*4882a593Smuzhiyun 	s32 cur_pic_order_count;
40*4882a593Smuzhiyun 	u8 unordered_reflist[V4L2_H264_NUM_DPB_ENTRIES];
41*4882a593Smuzhiyun 	u8 num_valid;
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun void
45*4882a593Smuzhiyun v4l2_h264_init_reflist_builder(struct v4l2_h264_reflist_builder *b,
46*4882a593Smuzhiyun 		const struct v4l2_ctrl_h264_decode_params *dec_params,
47*4882a593Smuzhiyun 		const struct v4l2_ctrl_h264_sps *sps,
48*4882a593Smuzhiyun 		const struct v4l2_h264_dpb_entry dpb[V4L2_H264_NUM_DPB_ENTRIES]);
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /**
51*4882a593Smuzhiyun  * v4l2_h264_build_b_ref_lists() - Build the B0/B1 reference lists
52*4882a593Smuzhiyun  *
53*4882a593Smuzhiyun  * @builder: reference list builder context
54*4882a593Smuzhiyun  * @b0_reflist: 16-bytes array used to store the B0 reference list. Each entry
55*4882a593Smuzhiyun  *		is an index in the DPB
56*4882a593Smuzhiyun  * @b1_reflist: 16-bytes array used to store the B1 reference list. Each entry
57*4882a593Smuzhiyun  *		is an index in the DPB
58*4882a593Smuzhiyun  *
59*4882a593Smuzhiyun  * This functions builds the B0/B1 reference lists. This procedure is described
60*4882a593Smuzhiyun  * in section '8.2.4 Decoding process for reference picture lists construction'
61*4882a593Smuzhiyun  * of the H264 spec. This function can be used by H264 decoder drivers that
62*4882a593Smuzhiyun  * need to pass B0/B1 reference lists to the hardware.
63*4882a593Smuzhiyun  */
64*4882a593Smuzhiyun void
65*4882a593Smuzhiyun v4l2_h264_build_b_ref_lists(const struct v4l2_h264_reflist_builder *builder,
66*4882a593Smuzhiyun 			    u8 *b0_reflist, u8 *b1_reflist);
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun /**
69*4882a593Smuzhiyun  * v4l2_h264_build_b_ref_lists() - Build the P reference list
70*4882a593Smuzhiyun  *
71*4882a593Smuzhiyun  * @builder: reference list builder context
72*4882a593Smuzhiyun  * @p_reflist: 16-bytes array used to store the P reference list. Each entry
73*4882a593Smuzhiyun  *	       is an index in the DPB
74*4882a593Smuzhiyun  *
75*4882a593Smuzhiyun  * This functions builds the P reference lists. This procedure is describe in
76*4882a593Smuzhiyun  * section '8.2.4 Decoding process for reference picture lists construction'
77*4882a593Smuzhiyun  * of the H264 spec. This function can be used by H264 decoder drivers that
78*4882a593Smuzhiyun  * need to pass a P reference list to the hardware.
79*4882a593Smuzhiyun  */
80*4882a593Smuzhiyun void
81*4882a593Smuzhiyun v4l2_h264_build_p_ref_list(const struct v4l2_h264_reflist_builder *builder,
82*4882a593Smuzhiyun 			   u8 *reflist);
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun #endif /* _MEDIA_V4L2_H264_H */
85