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