/* 
 | 
 * 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_debug.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; 
 | 
    } 
 | 
} 
 |