1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka * Copyright (c) 2015 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka */
5*437bfbebSnyanmisaka
6*437bfbebSnyanmisaka #define MODULE_TAG "mpp_frame"
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisaka #include <string.h>
9*437bfbebSnyanmisaka
10*437bfbebSnyanmisaka #include "mpp_debug.h"
11*437bfbebSnyanmisaka #include "mpp_mem_pool.h"
12*437bfbebSnyanmisaka #include "mpp_singleton.h"
13*437bfbebSnyanmisaka
14*437bfbebSnyanmisaka #include "mpp_meta_impl.h"
15*437bfbebSnyanmisaka #include "mpp_frame_impl.h"
16*437bfbebSnyanmisaka
17*437bfbebSnyanmisaka static const char *module_name = MODULE_TAG;
18*437bfbebSnyanmisaka static MppMemPool pool_frame = NULL;
19*437bfbebSnyanmisaka
setup_mpp_frame_name(MppFrameImpl * frame)20*437bfbebSnyanmisaka static void setup_mpp_frame_name(MppFrameImpl *frame)
21*437bfbebSnyanmisaka {
22*437bfbebSnyanmisaka frame->name = module_name;
23*437bfbebSnyanmisaka }
24*437bfbebSnyanmisaka
setup_mpp_frame_defaults(MppFrameImpl * frame)25*437bfbebSnyanmisaka static void setup_mpp_frame_defaults(MppFrameImpl *frame)
26*437bfbebSnyanmisaka {
27*437bfbebSnyanmisaka frame->color_range = MPP_FRAME_RANGE_UNSPECIFIED;
28*437bfbebSnyanmisaka frame->color_primaries = MPP_FRAME_PRI_UNSPECIFIED;
29*437bfbebSnyanmisaka frame->color_trc = MPP_FRAME_TRC_UNSPECIFIED;
30*437bfbebSnyanmisaka frame->colorspace = MPP_FRAME_SPC_UNSPECIFIED;
31*437bfbebSnyanmisaka }
32*437bfbebSnyanmisaka
33*437bfbebSnyanmisaka #define check_is_mpp_frame(frame) _check_is_mpp_frame(__FUNCTION__, frame)
34*437bfbebSnyanmisaka
mpp_frame_srv_init()35*437bfbebSnyanmisaka static void mpp_frame_srv_init()
36*437bfbebSnyanmisaka {
37*437bfbebSnyanmisaka if (pool_frame)
38*437bfbebSnyanmisaka return;
39*437bfbebSnyanmisaka
40*437bfbebSnyanmisaka pool_frame = mpp_mem_pool_init_f("MppFrame", sizeof(MppFrameImpl));
41*437bfbebSnyanmisaka }
42*437bfbebSnyanmisaka
mpp_frame_srv_deinit()43*437bfbebSnyanmisaka static void mpp_frame_srv_deinit()
44*437bfbebSnyanmisaka {
45*437bfbebSnyanmisaka if (pool_frame) {
46*437bfbebSnyanmisaka mpp_mem_pool_deinit_f(pool_frame);
47*437bfbebSnyanmisaka pool_frame = NULL;
48*437bfbebSnyanmisaka }
49*437bfbebSnyanmisaka }
50*437bfbebSnyanmisaka
MPP_SINGLETON(MPP_SGLN_FRAME,mpp_frame,mpp_frame_srv_init,mpp_frame_srv_deinit)51*437bfbebSnyanmisaka MPP_SINGLETON(MPP_SGLN_FRAME, mpp_frame, mpp_frame_srv_init, mpp_frame_srv_deinit)
52*437bfbebSnyanmisaka
53*437bfbebSnyanmisaka MPP_RET _check_is_mpp_frame(const char *func, void *frame)
54*437bfbebSnyanmisaka {
55*437bfbebSnyanmisaka if (!__check_is_mpp_frame(frame))
56*437bfbebSnyanmisaka return MPP_OK;
57*437bfbebSnyanmisaka
58*437bfbebSnyanmisaka mpp_err("pointer %p failed on %s check mpp_frame\n", frame, func);
59*437bfbebSnyanmisaka mpp_abort();
60*437bfbebSnyanmisaka return MPP_NOK;
61*437bfbebSnyanmisaka }
62*437bfbebSnyanmisaka
__check_is_mpp_frame(void * frame)63*437bfbebSnyanmisaka MPP_RET __check_is_mpp_frame(void *frame)
64*437bfbebSnyanmisaka {
65*437bfbebSnyanmisaka if (frame && ((MppFrameImpl*)frame)->name == module_name)
66*437bfbebSnyanmisaka return MPP_OK;
67*437bfbebSnyanmisaka
68*437bfbebSnyanmisaka return MPP_NOK;
69*437bfbebSnyanmisaka }
70*437bfbebSnyanmisaka
mpp_frame_init(MppFrame * frame)71*437bfbebSnyanmisaka MPP_RET mpp_frame_init(MppFrame *frame)
72*437bfbebSnyanmisaka {
73*437bfbebSnyanmisaka MppFrameImpl *p;
74*437bfbebSnyanmisaka
75*437bfbebSnyanmisaka if (!frame) {
76*437bfbebSnyanmisaka mpp_err_f("invalid NULL pointer input\n");
77*437bfbebSnyanmisaka return MPP_ERR_NULL_PTR;
78*437bfbebSnyanmisaka }
79*437bfbebSnyanmisaka
80*437bfbebSnyanmisaka if (!pool_frame)
81*437bfbebSnyanmisaka mpp_frame_srv_init();
82*437bfbebSnyanmisaka
83*437bfbebSnyanmisaka p = (MppFrameImpl*)mpp_mem_pool_get_f(pool_frame);
84*437bfbebSnyanmisaka if (!p) {
85*437bfbebSnyanmisaka mpp_err_f("malloc failed\n");
86*437bfbebSnyanmisaka return MPP_ERR_NULL_PTR;
87*437bfbebSnyanmisaka }
88*437bfbebSnyanmisaka
89*437bfbebSnyanmisaka setup_mpp_frame_name(p);
90*437bfbebSnyanmisaka setup_mpp_frame_defaults(p);
91*437bfbebSnyanmisaka *frame = p;
92*437bfbebSnyanmisaka
93*437bfbebSnyanmisaka return MPP_OK;
94*437bfbebSnyanmisaka }
95*437bfbebSnyanmisaka
mpp_frame_deinit(MppFrame * frame)96*437bfbebSnyanmisaka MPP_RET mpp_frame_deinit(MppFrame *frame)
97*437bfbebSnyanmisaka {
98*437bfbebSnyanmisaka MppFrameImpl *p;
99*437bfbebSnyanmisaka
100*437bfbebSnyanmisaka if (!frame || check_is_mpp_frame(*frame)) {
101*437bfbebSnyanmisaka mpp_err_f("invalid NULL pointer input\n");
102*437bfbebSnyanmisaka return MPP_ERR_NULL_PTR;
103*437bfbebSnyanmisaka }
104*437bfbebSnyanmisaka
105*437bfbebSnyanmisaka p = (MppFrameImpl *)*frame;
106*437bfbebSnyanmisaka if (p->buffer)
107*437bfbebSnyanmisaka mpp_buffer_put(p->buffer);
108*437bfbebSnyanmisaka
109*437bfbebSnyanmisaka if (p->meta)
110*437bfbebSnyanmisaka mpp_meta_put(p->meta);
111*437bfbebSnyanmisaka
112*437bfbebSnyanmisaka if (p->stopwatch)
113*437bfbebSnyanmisaka mpp_stopwatch_put(p->stopwatch);
114*437bfbebSnyanmisaka
115*437bfbebSnyanmisaka mpp_mem_pool_put_f(pool_frame, *frame);
116*437bfbebSnyanmisaka *frame = NULL;
117*437bfbebSnyanmisaka return MPP_OK;
118*437bfbebSnyanmisaka }
119*437bfbebSnyanmisaka
mpp_frame_get_buffer(MppFrame frame)120*437bfbebSnyanmisaka MppBuffer mpp_frame_get_buffer(MppFrame frame)
121*437bfbebSnyanmisaka {
122*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
123*437bfbebSnyanmisaka
124*437bfbebSnyanmisaka if (check_is_mpp_frame(p))
125*437bfbebSnyanmisaka return NULL;
126*437bfbebSnyanmisaka
127*437bfbebSnyanmisaka return (MppFrame)p->buffer;
128*437bfbebSnyanmisaka }
129*437bfbebSnyanmisaka
mpp_frame_set_buffer(MppFrame frame,MppBuffer buffer)130*437bfbebSnyanmisaka void mpp_frame_set_buffer(MppFrame frame, MppBuffer buffer)
131*437bfbebSnyanmisaka {
132*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
133*437bfbebSnyanmisaka
134*437bfbebSnyanmisaka if (check_is_mpp_frame(p))
135*437bfbebSnyanmisaka return;
136*437bfbebSnyanmisaka
137*437bfbebSnyanmisaka if (p->buffer != buffer) {
138*437bfbebSnyanmisaka if (buffer)
139*437bfbebSnyanmisaka mpp_buffer_inc_ref(buffer);
140*437bfbebSnyanmisaka
141*437bfbebSnyanmisaka if (p->buffer)
142*437bfbebSnyanmisaka mpp_buffer_put(p->buffer);
143*437bfbebSnyanmisaka
144*437bfbebSnyanmisaka p->buffer = buffer;
145*437bfbebSnyanmisaka }
146*437bfbebSnyanmisaka }
147*437bfbebSnyanmisaka
mpp_frame_has_meta(const MppFrame frame)148*437bfbebSnyanmisaka RK_S32 mpp_frame_has_meta(const MppFrame frame)
149*437bfbebSnyanmisaka {
150*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
151*437bfbebSnyanmisaka
152*437bfbebSnyanmisaka if (check_is_mpp_frame(p))
153*437bfbebSnyanmisaka return 0;
154*437bfbebSnyanmisaka
155*437bfbebSnyanmisaka return (NULL != p->meta);
156*437bfbebSnyanmisaka }
157*437bfbebSnyanmisaka
mpp_frame_get_meta(MppFrame frame)158*437bfbebSnyanmisaka MppMeta mpp_frame_get_meta(MppFrame frame)
159*437bfbebSnyanmisaka {
160*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
161*437bfbebSnyanmisaka
162*437bfbebSnyanmisaka if (check_is_mpp_frame(p))
163*437bfbebSnyanmisaka return NULL;
164*437bfbebSnyanmisaka
165*437bfbebSnyanmisaka if (!p->meta)
166*437bfbebSnyanmisaka mpp_meta_get(&p->meta);
167*437bfbebSnyanmisaka
168*437bfbebSnyanmisaka return p->meta;
169*437bfbebSnyanmisaka }
170*437bfbebSnyanmisaka
mpp_frame_set_meta(MppFrame frame,MppMeta meta)171*437bfbebSnyanmisaka void mpp_frame_set_meta(MppFrame frame, MppMeta meta)
172*437bfbebSnyanmisaka {
173*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
174*437bfbebSnyanmisaka
175*437bfbebSnyanmisaka if (check_is_mpp_frame(p))
176*437bfbebSnyanmisaka return;
177*437bfbebSnyanmisaka
178*437bfbebSnyanmisaka if (p->meta) {
179*437bfbebSnyanmisaka mpp_meta_put(p->meta);
180*437bfbebSnyanmisaka p->meta = NULL;
181*437bfbebSnyanmisaka }
182*437bfbebSnyanmisaka
183*437bfbebSnyanmisaka p->meta = meta;
184*437bfbebSnyanmisaka }
185*437bfbebSnyanmisaka
mpp_frame_get_status(MppFrame frame)186*437bfbebSnyanmisaka MppFrameStatus *mpp_frame_get_status(MppFrame frame)
187*437bfbebSnyanmisaka {
188*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
189*437bfbebSnyanmisaka
190*437bfbebSnyanmisaka return &p->status;
191*437bfbebSnyanmisaka }
192*437bfbebSnyanmisaka
mpp_frame_set_stopwatch_enable(MppFrame frame,RK_S32 enable)193*437bfbebSnyanmisaka void mpp_frame_set_stopwatch_enable(MppFrame frame, RK_S32 enable)
194*437bfbebSnyanmisaka {
195*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
196*437bfbebSnyanmisaka
197*437bfbebSnyanmisaka if (check_is_mpp_frame(p))
198*437bfbebSnyanmisaka return;
199*437bfbebSnyanmisaka
200*437bfbebSnyanmisaka if (enable && !p->stopwatch) {
201*437bfbebSnyanmisaka char name[32];
202*437bfbebSnyanmisaka
203*437bfbebSnyanmisaka snprintf(name, sizeof(name) - 1, "frm %8llx", p->pts);
204*437bfbebSnyanmisaka p->stopwatch = mpp_stopwatch_get(name);
205*437bfbebSnyanmisaka if (p->stopwatch)
206*437bfbebSnyanmisaka mpp_stopwatch_set_show_on_exit(p->stopwatch, 1);
207*437bfbebSnyanmisaka } else if (!enable && p->stopwatch) {
208*437bfbebSnyanmisaka mpp_stopwatch_put(p->stopwatch);
209*437bfbebSnyanmisaka p->stopwatch = NULL;
210*437bfbebSnyanmisaka }
211*437bfbebSnyanmisaka }
212*437bfbebSnyanmisaka
mpp_frame_get_stopwatch(const MppFrame frame)213*437bfbebSnyanmisaka MppStopwatch mpp_frame_get_stopwatch(const MppFrame frame)
214*437bfbebSnyanmisaka {
215*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
216*437bfbebSnyanmisaka
217*437bfbebSnyanmisaka if (check_is_mpp_frame(p))
218*437bfbebSnyanmisaka return NULL;
219*437bfbebSnyanmisaka
220*437bfbebSnyanmisaka return p->stopwatch;
221*437bfbebSnyanmisaka }
222*437bfbebSnyanmisaka
mpp_frame_dup(MppFrame src)223*437bfbebSnyanmisaka MppFrame mpp_frame_dup(MppFrame src)
224*437bfbebSnyanmisaka {
225*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)src;
226*437bfbebSnyanmisaka MppFrameImpl *ret;
227*437bfbebSnyanmisaka MppFrame frame = NULL;
228*437bfbebSnyanmisaka
229*437bfbebSnyanmisaka if (check_is_mpp_frame(src)) {
230*437bfbebSnyanmisaka mpp_err_f("invalid input src %p\n", src);
231*437bfbebSnyanmisaka return NULL;
232*437bfbebSnyanmisaka }
233*437bfbebSnyanmisaka
234*437bfbebSnyanmisaka mpp_frame_init(&frame);
235*437bfbebSnyanmisaka if (!frame)
236*437bfbebSnyanmisaka return NULL;
237*437bfbebSnyanmisaka
238*437bfbebSnyanmisaka ret = (MppFrameImpl *)frame;
239*437bfbebSnyanmisaka memcpy(ret, p, sizeof(MppFrameImpl));
240*437bfbebSnyanmisaka
241*437bfbebSnyanmisaka if (p->meta)
242*437bfbebSnyanmisaka ret->meta = mpp_meta_dup(p->meta);
243*437bfbebSnyanmisaka
244*437bfbebSnyanmisaka return frame;
245*437bfbebSnyanmisaka }
246*437bfbebSnyanmisaka
mpp_frame_copy(MppFrame dst,MppFrame src)247*437bfbebSnyanmisaka MPP_RET mpp_frame_copy(MppFrame dst, MppFrame src)
248*437bfbebSnyanmisaka {
249*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)dst;
250*437bfbebSnyanmisaka
251*437bfbebSnyanmisaka if (!dst || check_is_mpp_frame(src)) {
252*437bfbebSnyanmisaka mpp_err_f("invalid input dst %p src %p\n", dst, src);
253*437bfbebSnyanmisaka return MPP_ERR_UNKNOW;
254*437bfbebSnyanmisaka }
255*437bfbebSnyanmisaka
256*437bfbebSnyanmisaka if (p->meta)
257*437bfbebSnyanmisaka mpp_meta_put(p->meta);
258*437bfbebSnyanmisaka
259*437bfbebSnyanmisaka memcpy(dst, src, sizeof(MppFrameImpl));
260*437bfbebSnyanmisaka p = (MppFrameImpl *)src;
261*437bfbebSnyanmisaka if (p->meta)
262*437bfbebSnyanmisaka mpp_meta_inc_ref(p->meta);
263*437bfbebSnyanmisaka
264*437bfbebSnyanmisaka return MPP_OK;
265*437bfbebSnyanmisaka }
266*437bfbebSnyanmisaka
mpp_frame_info_cmp(MppFrame frame0,MppFrame frame1)267*437bfbebSnyanmisaka MPP_RET mpp_frame_info_cmp(MppFrame frame0, MppFrame frame1)
268*437bfbebSnyanmisaka {
269*437bfbebSnyanmisaka MppFrameImpl *f0 = (MppFrameImpl *)frame0;
270*437bfbebSnyanmisaka MppFrameImpl *f1 = (MppFrameImpl *)frame1;
271*437bfbebSnyanmisaka
272*437bfbebSnyanmisaka if (check_is_mpp_frame(f0) || check_is_mpp_frame(f1)) {
273*437bfbebSnyanmisaka mpp_err_f("invalid NULL pointer input\n");
274*437bfbebSnyanmisaka return MPP_ERR_NULL_PTR;
275*437bfbebSnyanmisaka }
276*437bfbebSnyanmisaka
277*437bfbebSnyanmisaka if ((f0->width == f1->width) &&
278*437bfbebSnyanmisaka (f0->height == f1->height) &&
279*437bfbebSnyanmisaka (f0->hor_stride == f1->hor_stride) &&
280*437bfbebSnyanmisaka (f0->ver_stride == f1->ver_stride) &&
281*437bfbebSnyanmisaka ((f0->fmt & ~MPP_FRAME_HDR_MASK) == (f1->fmt & ~MPP_FRAME_HDR_MASK)) &&
282*437bfbebSnyanmisaka (f0->buf_size == f1->buf_size)) {
283*437bfbebSnyanmisaka return MPP_OK;
284*437bfbebSnyanmisaka }
285*437bfbebSnyanmisaka return MPP_NOK;
286*437bfbebSnyanmisaka }
287*437bfbebSnyanmisaka
mpp_frame_get_fbc_offset(MppFrame frame)288*437bfbebSnyanmisaka RK_U32 mpp_frame_get_fbc_offset(MppFrame frame)
289*437bfbebSnyanmisaka {
290*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
291*437bfbebSnyanmisaka
292*437bfbebSnyanmisaka if (check_is_mpp_frame(p))
293*437bfbebSnyanmisaka return 0;
294*437bfbebSnyanmisaka
295*437bfbebSnyanmisaka if (MPP_FRAME_FMT_IS_FBC(p->fmt)) {
296*437bfbebSnyanmisaka RK_U32 fbc_version = p->fmt & MPP_FRAME_FBC_MASK;
297*437bfbebSnyanmisaka RK_U32 fbc_offset = 0;
298*437bfbebSnyanmisaka
299*437bfbebSnyanmisaka if (fbc_version == MPP_FRAME_FBC_AFBC_V1) {
300*437bfbebSnyanmisaka fbc_offset = MPP_ALIGN(MPP_ALIGN(p->width, 16) *
301*437bfbebSnyanmisaka MPP_ALIGN(p->height, 16) / 16, SZ_4K);
302*437bfbebSnyanmisaka } else if (fbc_version == MPP_FRAME_FBC_AFBC_V2 ||
303*437bfbebSnyanmisaka fbc_version == MPP_FRAME_FBC_RKFBC) {
304*437bfbebSnyanmisaka fbc_offset = 0;
305*437bfbebSnyanmisaka }
306*437bfbebSnyanmisaka p->fbc_offset = fbc_offset;
307*437bfbebSnyanmisaka }
308*437bfbebSnyanmisaka
309*437bfbebSnyanmisaka return p->fbc_offset;
310*437bfbebSnyanmisaka }
311*437bfbebSnyanmisaka
mpp_frame_get_fbc_stride(MppFrame frame)312*437bfbebSnyanmisaka RK_U32 mpp_frame_get_fbc_stride(MppFrame frame)
313*437bfbebSnyanmisaka {
314*437bfbebSnyanmisaka MppFrameImpl *p = (MppFrameImpl *)frame;
315*437bfbebSnyanmisaka
316*437bfbebSnyanmisaka if (check_is_mpp_frame(p))
317*437bfbebSnyanmisaka return 0;
318*437bfbebSnyanmisaka
319*437bfbebSnyanmisaka return MPP_ALIGN(p->width, 16);
320*437bfbebSnyanmisaka }
321*437bfbebSnyanmisaka
322*437bfbebSnyanmisaka /*
323*437bfbebSnyanmisaka * object access function macro
324*437bfbebSnyanmisaka */
325*437bfbebSnyanmisaka #define MPP_FRAME_ACCESSORS(type, field) \
326*437bfbebSnyanmisaka type mpp_frame_get_##field(const MppFrame s) \
327*437bfbebSnyanmisaka { \
328*437bfbebSnyanmisaka check_is_mpp_frame((MppFrameImpl*)s); \
329*437bfbebSnyanmisaka return ((MppFrameImpl*)s)->field; \
330*437bfbebSnyanmisaka } \
331*437bfbebSnyanmisaka void mpp_frame_set_##field(MppFrame s, type v) \
332*437bfbebSnyanmisaka { \
333*437bfbebSnyanmisaka check_is_mpp_frame((MppFrameImpl*)s); \
334*437bfbebSnyanmisaka ((MppFrameImpl*)s)->field = v; \
335*437bfbebSnyanmisaka }
336*437bfbebSnyanmisaka
337*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, width)
338*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, height)
339*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, hor_stride_pixel)
340*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, hor_stride)
341*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, ver_stride)
342*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, fbc_hdr_stride)
343*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, offset_x)
344*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, offset_y)
345*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, mode)
346*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, discard)
347*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, viewid)
348*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, poc)
349*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_S64, pts)
350*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_S64, dts)
351*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, eos)
352*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, info_change)
353*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameColorRange, color_range)
354*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameColorPrimaries, color_primaries)
355*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameColorTransferCharacteristic, color_trc)
356*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameColorSpace, colorspace)
357*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameChromaLocation, chroma_location)
358*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameFormat, fmt)
359*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameRational, sar)
360*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameMasteringDisplayMetadata, mastering_display)
361*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameContentLightMetadata, content_light)
362*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppFrameHdrDynamicMeta*, hdr_dynamic_meta)
363*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(size_t, buf_size)
364*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, errinfo)
365*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(MppTask, task)
366*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(RK_U32, thumbnail_en)
367*437bfbebSnyanmisaka MPP_FRAME_ACCESSORS(size_t, fbc_size)
368