[mpp_compat]: Add mpp compatible spec module

This module is for backward / forward compatiblity with external users.
1. Support compatible feature query.
2. Support update user program compatible feature update.

Change-Id: I7661f17c442eca0a0d0d57d2a35efdb5fd88be72
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
Herman Chen
2022-04-13 18:01:10 +08:00
parent a4f7fcb6cc
commit f1324e29a2
5 changed files with 184 additions and 0 deletions

61
inc/mpp_compat.h Normal file
View File

@@ -0,0 +1,61 @@
/*
* Copyright 2021 Rockchip Electronics Co. LTD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __MPP_COMPAT_H__
#define __MPP_COMPAT_H__
#include "rk_type.h"
#include "mpp_err.h"
typedef enum MppCompatId_e {
MPP_COMPAT_INC_FBC_BUF_SIZE,
MPP_COMPAT_ENC_ASYNC_INPUT,
MPP_COMPAT_BUTT,
} MppCompatId;
typedef enum MppCompatType_e {
MPP_COMPAT_BOOL,
MPP_COMPAT_S32,
MPP_COMPAT_TYPE_BUTT,
} MppCompatType;
typedef struct MppCompat_t MppCompat;
/* external user can only update value_ext to notify mpp to change its behavior */
struct MppCompat_t {
const MppCompatId feature_id;
const MppCompatType feature_type;
const RK_S32 value_mpp;
RK_S32 value_usr;
const char *name;
MppCompat * const next;
};
#ifdef __cplusplus
extern "C" {
#endif
MppCompat *mpp_compat_query(void);
MppCompat *mpp_compat_query_by_id(MppCompatId id);
MPP_RET mpp_compat_update(MppCompat *compat, RK_S32 value);
void mpp_compat_show(void);
#ifdef __cplusplus
}
#endif
#endif /*__MPP_COMPAT_H__*/

View File

@@ -41,6 +41,7 @@ add_library(osal STATIC
mpp_callback.cpp
mpp_eventfd.cpp
mpp_thread.cpp
mpp_compat.cpp
mpp_common.cpp
mpp_queue.cpp
mpp_trace.cpp

View File

@@ -0,0 +1,25 @@
/*
* Copyright 2021 Rockchip Electronics Co. LTD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __MPP_COMPAT_IMPL_H__
#define __MPP_COMPAT_IMPL_H__
#include "rk_type.h"
extern RK_S32 *compat_ext_fbc_buf_size;
extern RK_S32 *compat_ext_async_input;
#endif /*__MPP_COMPAT_IMPL_H__*/

94
osal/mpp_compat.cpp Normal file
View File

@@ -0,0 +1,94 @@
/*
* Copyright 2021 Rockchip Electronics Co. LTD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define MODULE_TAG "mpp_compat"
#include "mpp_log.h"
#include "mpp_common.h"
#include "mpp_compat.h"
#include "mpp_compat_impl.h"
static MppCompat compats[] = {
{
MPP_COMPAT_INC_FBC_BUF_SIZE,
MPP_COMPAT_BOOL,
1,
0,
"increase decoder fbc buffer size",
&compats[1],
},
{
MPP_COMPAT_ENC_ASYNC_INPUT,
MPP_COMPAT_BOOL,
1,
0,
"support encoder async input mode",
NULL,
},
};
RK_S32 *compat_ext_fbc_buf_size = &compats[MPP_COMPAT_INC_FBC_BUF_SIZE].value_usr;
RK_S32 *compat_ext_async_input = &compats[MPP_COMPAT_ENC_ASYNC_INPUT].value_usr;
MppCompat *mpp_compat_query(void)
{
return compats;
}
MppCompat *mpp_compat_query_by_id(MppCompatId id)
{
RK_U32 i;
for (i = 0; i < MPP_ARRAY_ELEMS(compats); i++) {
if (compats[i].feature_id == id)
return &compats[i];
}
return NULL;
}
MPP_RET mpp_compat_update(MppCompat *compat, RK_S32 value)
{
if (NULL == compat)
return MPP_NOK;
if (compat->feature_id >= MPP_COMPAT_BUTT)
return MPP_NOK;
if (compat != &compats[compat->feature_id])
return MPP_NOK;
if (compat->feature_type == MPP_COMPAT_BOOL)
if (value != 0 && value != 1)
return MPP_NOK;
compat->value_usr = value;
return MPP_OK;
}
void mpp_compat_show(void)
{
const MppCompat *compat = compats;
mpp_log("id| name -- mpp compat info\n");
while (compat) {
mpp_log("%d | %s\n", compat->feature_id, compat->name);
compat = compat->next;
}
}

View File

@@ -19,6 +19,7 @@
#include "mpp_log.h"
#include "mpp_env.h"
#include "mpp_info.h"
#include "mpp_compat.h"
int main()
{
@@ -33,6 +34,8 @@ int main()
show_mpp_version();
mpp_env_set_u32("mpp_show_history", 0);
mpp_compat_show();
return 0;
}