xref: /rockchip-linux_mpp/kmpp/base/inc/kmpp_frame_impl.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka  * Copyright (c) 2024 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka  */
5*437bfbebSnyanmisaka 
6*437bfbebSnyanmisaka #ifndef __KMPP_FRAME_IMPL_H__
7*437bfbebSnyanmisaka #define __KMPP_FRAME_IMPL_H__
8*437bfbebSnyanmisaka 
9*437bfbebSnyanmisaka #include "kmpp_frame.h"
10*437bfbebSnyanmisaka 
11*437bfbebSnyanmisaka typedef struct KmppFrameImpl_t {
12*437bfbebSnyanmisaka     const char *name;
13*437bfbebSnyanmisaka     KmppObj obj;
14*437bfbebSnyanmisaka 
15*437bfbebSnyanmisaka     /*
16*437bfbebSnyanmisaka      * dimension parameter for display
17*437bfbebSnyanmisaka      */
18*437bfbebSnyanmisaka     rk_u32 width;
19*437bfbebSnyanmisaka     rk_u32 height;
20*437bfbebSnyanmisaka     rk_u32 hor_stride;
21*437bfbebSnyanmisaka     rk_u32 ver_stride;
22*437bfbebSnyanmisaka     rk_u32 hor_stride_pixel;
23*437bfbebSnyanmisaka     rk_u32 offset_x;
24*437bfbebSnyanmisaka     rk_u32 offset_y;
25*437bfbebSnyanmisaka 
26*437bfbebSnyanmisaka     /*
27*437bfbebSnyanmisaka      * poc - picture order count
28*437bfbebSnyanmisaka      */
29*437bfbebSnyanmisaka     rk_u32 poc;
30*437bfbebSnyanmisaka     /*
31*437bfbebSnyanmisaka      * pts - display time stamp
32*437bfbebSnyanmisaka      * dts - decode time stamp
33*437bfbebSnyanmisaka      */
34*437bfbebSnyanmisaka     rk_s64 pts;
35*437bfbebSnyanmisaka     rk_s64 dts;
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka     /*
38*437bfbebSnyanmisaka         * eos - end of stream
39*437bfbebSnyanmisaka         * info_change - set when buffer resized or frame infomation changed
40*437bfbebSnyanmisaka         */
41*437bfbebSnyanmisaka     rk_u32 eos;
42*437bfbebSnyanmisaka     MppFrameColorRange color_range;
43*437bfbebSnyanmisaka     MppFrameColorPrimaries color_primaries;
44*437bfbebSnyanmisaka     MppFrameColorTransferCharacteristic color_trc;
45*437bfbebSnyanmisaka 
46*437bfbebSnyanmisaka     /**
47*437bfbebSnyanmisaka      * YUV colorspace type.
48*437bfbebSnyanmisaka      * It must be accessed using av_frame_get_colorspace() and
49*437bfbebSnyanmisaka      * av_frame_set_colorspace().
50*437bfbebSnyanmisaka      * - encoding: Set by user
51*437bfbebSnyanmisaka      * - decoding: Set by libavcodec
52*437bfbebSnyanmisaka      */
53*437bfbebSnyanmisaka     MppFrameColorSpace colorspace;
54*437bfbebSnyanmisaka     MppFrameChromaLocation chroma_location;
55*437bfbebSnyanmisaka 
56*437bfbebSnyanmisaka     MppFrameFormat fmt;
57*437bfbebSnyanmisaka 
58*437bfbebSnyanmisaka     MppFrameRational sar;
59*437bfbebSnyanmisaka 
60*437bfbebSnyanmisaka     /*
61*437bfbebSnyanmisaka      * buffer information
62*437bfbebSnyanmisaka      * NOTE: buf_size only access internally
63*437bfbebSnyanmisaka      */
64*437bfbebSnyanmisaka     KmppShmPtr buffer;
65*437bfbebSnyanmisaka     size_t buf_size;
66*437bfbebSnyanmisaka     RK_U32 buf_fd;
67*437bfbebSnyanmisaka     /*
68*437bfbebSnyanmisaka      * frame buffer compression (FBC) information
69*437bfbebSnyanmisaka      *
70*437bfbebSnyanmisaka      * NOTE: some constraint on fbc data
71*437bfbebSnyanmisaka      * 1. FBC config need two addresses but only one buffer.
72*437bfbebSnyanmisaka      *    The second address should be represented by base + offset form.
73*437bfbebSnyanmisaka      * 2. FBC has header address and payload address
74*437bfbebSnyanmisaka      *    Both addresses should be 4K aligned.
75*437bfbebSnyanmisaka      * 3. The header section size is default defined by:
76*437bfbebSnyanmisaka      *    header size = aligned(aligned(width, 16) * aligned(height, 16) / 16, 4096)
77*437bfbebSnyanmisaka      * 4. The stride in header section is defined by:
78*437bfbebSnyanmisaka      *    stride = aligned(width, 16)
79*437bfbebSnyanmisaka      */
80*437bfbebSnyanmisaka     rk_u32 fbc_offset;
81*437bfbebSnyanmisaka     rk_u32 is_gray;
82*437bfbebSnyanmisaka 
83*437bfbebSnyanmisaka     KmppShmPtr meta;
84*437bfbebSnyanmisaka     KmppMeta self_meta;
85*437bfbebSnyanmisaka } KmppFrameImpl;
86*437bfbebSnyanmisaka 
87*437bfbebSnyanmisaka typedef struct KmppFramePriv_t {
88*437bfbebSnyanmisaka     KmppMeta    meta;
89*437bfbebSnyanmisaka } KmppFramePriv;
90*437bfbebSnyanmisaka 
91*437bfbebSnyanmisaka #endif /* __KMPP_FRAME_IMPL_H__ */
92