xref: /rockchip-linux_mpp/mpp/codec/dec/common/h2645d_sei.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka  * Copyright (c) 2023 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka  */
5*437bfbebSnyanmisaka 
6*437bfbebSnyanmisaka #define MODULE_TAG  "h2645d_sei"
7*437bfbebSnyanmisaka 
8*437bfbebSnyanmisaka #include <stdint.h>
9*437bfbebSnyanmisaka #include <string.h>
10*437bfbebSnyanmisaka 
11*437bfbebSnyanmisaka #include "mpp_mem.h"
12*437bfbebSnyanmisaka #include "h2645d_sei.h"
13*437bfbebSnyanmisaka 
14*437bfbebSnyanmisaka static RK_U8 const deny_uuid[2][16] = {{
15*437bfbebSnyanmisaka         0xfa, 0x5e, 0xfe, 0x40, 0xa6, 0xaf, 0x11, 0xdd,
16*437bfbebSnyanmisaka         0xa6, 0x59, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b
17*437bfbebSnyanmisaka     },
18*437bfbebSnyanmisaka     {
19*437bfbebSnyanmisaka         0x68, 0x55, 0x98, 0x4e, 0x49, 0x9c, 0x45, 0xc5,
20*437bfbebSnyanmisaka         0x8e, 0x5b, 0xf2, 0x7b, 0xd1, 0xd4, 0xac, 0xe6
21*437bfbebSnyanmisaka     }
22*437bfbebSnyanmisaka };
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka static RK_U8 const deny_identity[3][4] = {
25*437bfbebSnyanmisaka     {0x44, 0x69, 0x76, 0x58},
26*437bfbebSnyanmisaka     {0x50, 0x6C, 0x75, 0x73},
27*437bfbebSnyanmisaka     {0x48, 0x45, 0x56, 0x43}
28*437bfbebSnyanmisaka };
29*437bfbebSnyanmisaka 
check_encoder_sei_info(BitReadCtx_t * gb,RK_S32 payload_size,RK_U32 * is_match)30*437bfbebSnyanmisaka MPP_RET check_encoder_sei_info(BitReadCtx_t *gb, RK_S32 payload_size, RK_U32 *is_match)
31*437bfbebSnyanmisaka {
32*437bfbebSnyanmisaka     RK_S32 i = 0;
33*437bfbebSnyanmisaka 
34*437bfbebSnyanmisaka     RK_U8 *payload = NULL;
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka     if (payload_size < 25 || payload_size >= INT32_MAX - 1)
37*437bfbebSnyanmisaka         return MPP_ERR_STREAM;
38*437bfbebSnyanmisaka 
39*437bfbebSnyanmisaka     payload = mpp_calloc(RK_U8, payload_size);
40*437bfbebSnyanmisaka 
41*437bfbebSnyanmisaka     for (i = 0; i < payload_size; i++)
42*437bfbebSnyanmisaka         READ_BITS(gb, 8, &payload[i]);
43*437bfbebSnyanmisaka 
44*437bfbebSnyanmisaka     if ((!memcmp(payload, deny_uuid[0], 16) ||
45*437bfbebSnyanmisaka          !memcmp(payload, deny_uuid[1], 16)) &&
46*437bfbebSnyanmisaka         (!memcmp(payload + 16, deny_identity[0], 4)) &&
47*437bfbebSnyanmisaka         (!memcmp(payload + 21, deny_identity[1], 4) ||
48*437bfbebSnyanmisaka          !memcmp(payload + 21, deny_identity[2], 4))) {
49*437bfbebSnyanmisaka         *is_match = 1;
50*437bfbebSnyanmisaka     }
51*437bfbebSnyanmisaka 
52*437bfbebSnyanmisaka     mpp_free(payload);
53*437bfbebSnyanmisaka     return MPP_OK;;
54*437bfbebSnyanmisaka __BITREAD_ERR:
55*437bfbebSnyanmisaka     mpp_free(payload);
56*437bfbebSnyanmisaka     return gb->ret;
57*437bfbebSnyanmisaka }
58