xref: /rockchip-linux_mpp/osal/mpp_compat.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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