1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka */
5*437bfbebSnyanmisaka
6*437bfbebSnyanmisaka #define MODULE_TAG "mpp_compat"
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisaka #include "mpp_debug.h"
9*437bfbebSnyanmisaka #include "mpp_common.h"
10*437bfbebSnyanmisaka
11*437bfbebSnyanmisaka #include "mpp_compat.h"
12*437bfbebSnyanmisaka #include "mpp_compat_impl.h"
13*437bfbebSnyanmisaka
14*437bfbebSnyanmisaka static MppCompat compats[] = {
15*437bfbebSnyanmisaka {
16*437bfbebSnyanmisaka MPP_COMPAT_INC_FBC_BUF_SIZE,
17*437bfbebSnyanmisaka MPP_COMPAT_BOOL,
18*437bfbebSnyanmisaka 1,
19*437bfbebSnyanmisaka #if defined(__ANDROID__)
20*437bfbebSnyanmisaka /*
21*437bfbebSnyanmisaka * The codecs might need extra lines for deblock output, but the
22*437bfbebSnyanmisaka * android world rather risk memory overflow than using the correct
23*437bfbebSnyanmisaka * buf size.
24*437bfbebSnyanmisaka */
25*437bfbebSnyanmisaka 0,
26*437bfbebSnyanmisaka #else
27*437bfbebSnyanmisaka 1,
28*437bfbebSnyanmisaka #endif
29*437bfbebSnyanmisaka "increase decoder fbc buffer size",
30*437bfbebSnyanmisaka &compats[1],
31*437bfbebSnyanmisaka },
32*437bfbebSnyanmisaka {
33*437bfbebSnyanmisaka MPP_COMPAT_ENC_ASYNC_INPUT,
34*437bfbebSnyanmisaka MPP_COMPAT_BOOL,
35*437bfbebSnyanmisaka 1,
36*437bfbebSnyanmisaka 0,
37*437bfbebSnyanmisaka "support encoder async input mode",
38*437bfbebSnyanmisaka NULL,
39*437bfbebSnyanmisaka },
40*437bfbebSnyanmisaka {
41*437bfbebSnyanmisaka MPP_COMPAT_DEC_FBC_HDR_256_ODD,
42*437bfbebSnyanmisaka MPP_COMPAT_BOOL,
43*437bfbebSnyanmisaka 0,
44*437bfbebSnyanmisaka 0,
45*437bfbebSnyanmisaka "set decoder fbc header stride to 256 odd align",
46*437bfbebSnyanmisaka NULL,
47*437bfbebSnyanmisaka },
48*437bfbebSnyanmisaka };
49*437bfbebSnyanmisaka
50*437bfbebSnyanmisaka RK_S32 *compat_ext_fbc_buf_size = &compats[MPP_COMPAT_INC_FBC_BUF_SIZE].value_usr;
51*437bfbebSnyanmisaka RK_S32 *compat_ext_async_input = &compats[MPP_COMPAT_ENC_ASYNC_INPUT].value_usr;
52*437bfbebSnyanmisaka RK_S32 *compat_ext_fbc_hdr_256_odd = &compats[MPP_COMPAT_DEC_FBC_HDR_256_ODD].value_usr;
53*437bfbebSnyanmisaka
mpp_compat_query(void)54*437bfbebSnyanmisaka MppCompat *mpp_compat_query(void)
55*437bfbebSnyanmisaka {
56*437bfbebSnyanmisaka return compats;
57*437bfbebSnyanmisaka }
58*437bfbebSnyanmisaka
mpp_compat_query_by_id(MppCompatId id)59*437bfbebSnyanmisaka MppCompat *mpp_compat_query_by_id(MppCompatId id)
60*437bfbebSnyanmisaka {
61*437bfbebSnyanmisaka RK_U32 i;
62*437bfbebSnyanmisaka
63*437bfbebSnyanmisaka for (i = 0; i < MPP_ARRAY_ELEMS(compats); i++) {
64*437bfbebSnyanmisaka if (compats[i].feature_id == id)
65*437bfbebSnyanmisaka return &compats[i];
66*437bfbebSnyanmisaka }
67*437bfbebSnyanmisaka
68*437bfbebSnyanmisaka return NULL;
69*437bfbebSnyanmisaka }
70*437bfbebSnyanmisaka
mpp_compat_update(MppCompat * compat,RK_S32 value)71*437bfbebSnyanmisaka MPP_RET mpp_compat_update(MppCompat *compat, RK_S32 value)
72*437bfbebSnyanmisaka {
73*437bfbebSnyanmisaka if (NULL == compat)
74*437bfbebSnyanmisaka return MPP_NOK;
75*437bfbebSnyanmisaka
76*437bfbebSnyanmisaka if (compat->feature_id >= MPP_COMPAT_BUTT)
77*437bfbebSnyanmisaka return MPP_NOK;
78*437bfbebSnyanmisaka
79*437bfbebSnyanmisaka if (compat != &compats[compat->feature_id])
80*437bfbebSnyanmisaka return MPP_NOK;
81*437bfbebSnyanmisaka
82*437bfbebSnyanmisaka if (compat->feature_type == MPP_COMPAT_BOOL)
83*437bfbebSnyanmisaka if (value != 0 && value != 1)
84*437bfbebSnyanmisaka return MPP_NOK;
85*437bfbebSnyanmisaka
86*437bfbebSnyanmisaka compat->value_usr = value;
87*437bfbebSnyanmisaka return MPP_OK;
88*437bfbebSnyanmisaka }
89*437bfbebSnyanmisaka
mpp_compat_show(void)90*437bfbebSnyanmisaka void mpp_compat_show(void)
91*437bfbebSnyanmisaka {
92*437bfbebSnyanmisaka const MppCompat *compat = compats;
93*437bfbebSnyanmisaka
94*437bfbebSnyanmisaka mpp_log("id| name -- mpp compat info\n");
95*437bfbebSnyanmisaka
96*437bfbebSnyanmisaka while (compat) {
97*437bfbebSnyanmisaka mpp_log("%d | %s\n", compat->feature_id, compat->name);
98*437bfbebSnyanmisaka
99*437bfbebSnyanmisaka compat = compat->next;
100*437bfbebSnyanmisaka }
101*437bfbebSnyanmisaka }
102