From 1a8161c845c70c59f42529a25b8c098d1df16ef1 Mon Sep 17 00:00:00 2001 From: Johnson Ding Date: Fri, 21 Apr 2023 18:55:54 +0800 Subject: [PATCH] [dec]: Add common code for AVC and HEVC Change-Id: I48f0bddbbb6762a653dca0eec3dc8b6acba03673 Signed-off-by: Johnson Ding --- mpp/codec/dec/CMakeLists.txt | 2 + mpp/codec/dec/common/CMakeLists.txt | 23 ++++++++++++ mpp/codec/dec/common/h2645d_sei.c | 57 +++++++++++++++++++++++++++++ mpp/codec/dec/common/h2645d_sei.h | 24 ++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 mpp/codec/dec/common/CMakeLists.txt create mode 100644 mpp/codec/dec/common/h2645d_sei.c create mode 100644 mpp/codec/dec/common/h2645d_sei.h diff --git a/mpp/codec/dec/CMakeLists.txt b/mpp/codec/dec/CMakeLists.txt index 8977c862..1f911fbe 100644 --- a/mpp/codec/dec/CMakeLists.txt +++ b/mpp/codec/dec/CMakeLists.txt @@ -2,6 +2,8 @@ add_subdirectory(dummy) +add_subdirectory(common) + if( HAVE_AVSD ) add_subdirectory(avs) endif() diff --git a/mpp/codec/dec/common/CMakeLists.txt b/mpp/codec/dec/common/CMakeLists.txt new file mode 100644 index 00000000..de9afe82 --- /dev/null +++ b/mpp/codec/dec/common/CMakeLists.txt @@ -0,0 +1,23 @@ +# vim: syntax=cmake +include_directories(.) + +set(DEC_COMMON_HDR + h2645d_sei.h + ) + +# h264 decoder sourse +set(DEC_COMMON_SRC + h2645d_sei.c + ) + + +set(DEC_COMMON dec_common) + +add_library(${DEC_COMMON} STATIC + ${DEC_COMMON_HDR} + ${DEC_COMMON_SRC} + ) + +target_link_libraries(${DEC_COMMON} mpp_base) +set_target_properties(${DEC_COMMON} PROPERTIES FOLDER "mpp/codec/dec/common") + diff --git a/mpp/codec/dec/common/h2645d_sei.c b/mpp/codec/dec/common/h2645d_sei.c new file mode 100644 index 00000000..b9600a11 --- /dev/null +++ b/mpp/codec/dec/common/h2645d_sei.c @@ -0,0 +1,57 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* + * Copyright (c) 2023 Rockchip Electronics Co., Ltd. + */ + +#define MODULE_TAG "h2645d_sei" + +#include +#include + +#include "mpp_mem.h" +#include "h2645d_sei.h" + +static RK_U8 const deny_uuid[2][16] = {{ + 0xfa, 0x5e, 0xfe, 0x40, 0xa6, 0xaf, 0x11, 0xdd, + 0xa6, 0x59, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b + }, + { + 0x68, 0x55, 0x98, 0x4e, 0x49, 0x9c, 0x45, 0xc5, + 0x8e, 0x5b, 0xf2, 0x7b, 0xd1, 0xd4, 0xac, 0xe6 + } +}; + +static RK_U8 const deny_identity[3][4] = { + {0x44, 0x69, 0x76, 0x58}, + {0x50, 0x6C, 0x75, 0x73}, + {0x48, 0x45, 0x56, 0x43} +}; + +MPP_RET check_encoder_sei_info(BitReadCtx_t *gb, RK_S32 payload_size, RK_U32 *is_match) +{ + RK_S32 i = 0; + + RK_U8 *payload = NULL; + + if (payload_size < 25 || payload_size >= INT32_MAX - 1) + return MPP_ERR_STREAM; + + payload = mpp_calloc(RK_U8, payload_size); + + for (i = 0; i < payload_size; i++) + READ_BITS(gb, 8, &payload[i]); + + if ((!memcmp(payload, deny_uuid[0], 16) || + !memcmp(payload, deny_uuid[1], 16)) && + (!memcmp(payload + 16, deny_identity[0], 4)) && + (!memcmp(payload + 21, deny_identity[1], 4) || + !memcmp(payload + 21, deny_identity[2], 4))) { + *is_match = 1; + } + + mpp_free(payload); + return MPP_OK;; +__BITREAD_ERR: + mpp_free(payload); + return gb->ret; +} diff --git a/mpp/codec/dec/common/h2645d_sei.h b/mpp/codec/dec/common/h2645d_sei.h new file mode 100644 index 00000000..934bba79 --- /dev/null +++ b/mpp/codec/dec/common/h2645d_sei.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: Apache-2.0 */ +/* + * Copyright (c) 2023 Rockchip Electronics Co., Ltd. + */ + +#ifndef _H2645D_SEI_H_ +#define _H2645D_SEI_H_ + +#include "rk_type.h" +#include "mpp_err.h" +#include "mpp_bitread.h" + +#ifdef __cplusplus +extern "C" { +#endif + +MPP_RET check_encoder_sei_info(BitReadCtx_t *gb, RK_S32 payload_size, RK_U32 *is_match); + +#ifdef __cplusplus +} +#endif + +//======================================== +#endif /* end of _H2645D_SEI_H_ */ \ No newline at end of file