hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
 * Copyright 2015 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 __H265E_HEADER_GEN_H__
#define __H265E_HEADER_GEN_H__
 
#include "h265e_stream.h"
#define H265E_UUID_LENGTH 16
 
typedef enum H265eNalIdx_t {
    H265E_NAL_IDX_VPS,
    H265E_NAL_IDX_SPS,
    H265E_NAL_IDX_PPS,
    H265E_NAL_IDX_SEI,
    H265E_NAL_IDX_BUTT,
} H265eNalIdx;
 
typedef enum H265SeiType_e {
    H265_SEI_BUFFERING_PERIOD                       = 0,
    H265_SEI_PICTURE_TIMING                         = 1,
    H265_SEI_PAN_SCAN_RECT                          = 2,
    H265_SEI_FILLER_PAYLOAD                         = 3,
    H265_SEI_USER_DATA_REGISTERED_ITU_T_T35         = 4,
    H265_SEI_USER_DATA_UNREGISTERED                 = 5,
    H265_SEI_RECOVERY_POINT                         = 6,
    H265_SEI_SCENE_INFO                             = 9,
    H265_SEI_FULL_FRAME_SNAPSHOT                    = 15,
    H265_SEI_PROGRESSIVE_REFINEMENT_SEGMENT_START   = 16,
    H265_SEI_PROGRESSIVE_REFINEMENT_SEGMENT_END     = 17,
    H265_SEI_FILM_GRAIN_CHARACTERISTICS             = 19,
    H265_SEI_POST_FILTER_HINT                       = 22,
    H265_SEI_TONE_MAPPING_INFO                      = 23,
    H265_SEI_FRAME_PACKING                          = 45,
    H265_SEI_DISPLAY_ORIENTATION                    = 47,
    H265_SEI_SOP_DESCRIPTION                        = 128,
    H265_SEI_ACTIVE_PARAMETER_SETS                  = 129,
    H265_SEI_DECODING_UNIT_INFO                     = 130,
    H265_SEI_TEMPORAL_LEVEL0_INDEX                  = 131,
    H265_SEI_DECODED_PICTURE_HASH                   = 132,
    H265_SEI_SCALABLE_NESTING                       = 133,
    H265_SEI_REGION_REFRESH_INFO                    = 134,
    H265_SEI_MAX_ELEMENTS = 255, //!< number of maximum syntax elements
} H265SeiType;
 
typedef struct  H265eNal_t {
    RK_S32 i_ref_idc;  /* nal_priority_e */
    RK_S32 i_type;     /* nal_unit_type_e */
    RK_S32 b_long_startcode;
    RK_S32 i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */
    RK_S32 i_last_mb;  /* If this NAL is a slice, the index of the last MB in the slice. */
 
    /* Size of payload (including any padding) in bytes. */
    RK_S32     i_payload;
    /* If param->b_annexb is set, Annex-B bytestream with startcode.
     * Otherwise, startcode is replaced with a 4-byte size.
     * This size is the size used in mp4/similar muxing; it is equal to i_payload-4 */
    RK_U8 *p_payload;
 
    /* Size of padding in bytes. */
    RK_S32 i_padding;
    RK_S32 sh_head_len;
} H265eNal;
 
typedef struct H265eExtraInfo_t {
    RK_S32          nal_num;
    H265eNal        nal[H265E_NAL_IDX_BUTT];
    RK_U8           *nal_buf;
    RK_U8           *sei_buf;
    RK_U32          sei_change_flg;
    H265eStream     stream;
//    H265eSei        sei;
} H265eExtraInfo;
 
#ifdef __cplusplus
extern "C" {
#endif
 
MPP_RET h265e_init_extra_info(void *extra_info);
MPP_RET h265e_deinit_extra_info(void *extra_info);
void h265e_rkv_nal_start(H265eExtraInfo *out, RK_S32 i_type,
                         RK_S32 i_ref_idc);
 
void h265e_nal_end(H265eExtraInfo *out);
 
RK_U32 h265e_data_to_sei(void *dst, RK_U8 uuid[16], const void *payload, RK_S32 size);
 
MPP_RET h265e_set_extra_info(H265eCtx *ctx);
MPP_RET h265e_get_extra_info(H265eCtx *ctx, MppPacket pkt_out);
 
#ifdef __cplusplus
}
#endif
 
#endif /*__H265E_HEADER_GEN_H__ */