10.1_demo/extern/qlibquammapi/include/utils/qua_h2645_parse.h

211 lines
5.4 KiB
C

/*
* Copyright (c) 2025 Quaming Intelligent Technology Co., Ltd.
*
* All Rights Reserved.
* Confidential and Proprietary - Quaming Intelligent Technology Co., Ltd.
*/
#ifndef _QUA_H2645_PARSE_H_
#define _QUA_H2645_PARSE_H_
#include <stdint.h>
#include <stdio.h>
#include "utils/qua_bitread.h"
#include "utils/qua_h264_pps.h"
#include "utils/qua_h264_sps.h"
#ifdef __cplusplus
extern "C" {
#endif
#define MAX_REORDER_TIMES 33
#define MAX_MARKING_TIMES 35
typedef enum {
QUA_VIDEO_CODING_H264,
QUA_VIDEO_CODING_H265,
} qua_video_type_t;
typedef enum {
QUA_H264_NAL_UNSPECIFIED,
QUA_H264_NAL_SLICE,
QUA_H264_NAL_DPA,
QUA_H264_NAL_DPB,
QUA_H264_NAL_DPC,
QUA_H264_NAL_IDR_SLICE,
QUA_H264_NAL_SEI,
QUA_H264_NAL_SPS,
QUA_H264_NAL_PPS,
QUA_H264_NAL_AUD,
QUA_H264_NAL_END_SEQUENCE,
QUA_H264_NAL_END_STREAM,
QUA_H264_NAL_FILLER_DATA,
QUA_H264_NAL_SPS_EXT,
QUA_H264_NAL_PREFIX,
QUA_H264_NAL_SUB_SPS,
QUA_H264_NAL_DPS,
QUA_H264_NAL_RESERVED17,
QUA_H264_NAL_RESERVED18,
QUA_H264_NAL_AUXILIARY_SLICE,
QUA_H264_NAL_EXTEN_SLICE,
QUA_H264_NAL_DEPTH_EXTEN_SLICE,
QUA_H264_NAL_RESERVED22,
QUA_H264_NAL_RESERVED23,
QUA_H264_NAL_UNSPECIFIED24,
QUA_H264_NAL_UNSPECIFIED25,
QUA_H264_NAL_UNSPECIFIED26,
QUA_H264_NAL_UNSPECIFIED27,
QUA_H264_NAL_UNSPECIFIED28,
QUA_H264_NAL_UNSPECIFIED29,
QUA_H264_NAL_UNSPECIFIED30,
QUA_H264_NAL_UNSPECIFIED31
} qua_h264_nal_type_t;
typedef enum {
QUA_HEVC_NAL_TRAIL_N,
QUA_HEVC_NAL_TRAIL_R,
QUA_HEVC_NAL_TSA_N,
QUA_HEVC_NAL_TSA_R,
QUA_HEVC_NAL_STSA_N,
QUA_HEVC_NAL_STSA_R,
QUA_HEVC_NAL_RADL_N,
QUA_HEVC_NAL_RADL_R,
QUA_HEVC_NAL_RASL_N,
QUA_HEVC_NAL_RASL_R,
QUA_HEVC_NAL_VCL_N10,
QUA_HEVC_NAL_VCL_R11,
QUA_HEVC_NAL_VCL_N12,
QUA_HEVC_NAL_VCL_R13,
QUA_HEVC_NAL_VCL_N14,
QUA_HEVC_NAL_VCL_R15,
QUA_HEVC_NAL_BLA_W_LP,
QUA_HEVC_NAL_BLA_W_RADL,
QUA_HEVC_NAL_BLA_N_LP,
QUA_HEVC_NAL_IDR_W_RADL,
QUA_HEVC_NAL_IDR_N_LP,
QUA_HEVC_NAL_CRA_NUT,
QUA_HEVC_NAL_RSV_IRAP_VCL22,
QUA_HEVC_NAL_RSV_IRAP_VCL23,
QUA_HEVC_NAL_RSV_VCL24,
QUA_HEVC_NAL_RSV_VCL25,
QUA_HEVC_NAL_RSV_VCL26,
QUA_HEVC_NAL_RSV_VCL27,
QUA_HEVC_NAL_RSV_VCL28,
QUA_HEVC_NAL_RSV_VCL29,
QUA_HEVC_NAL_RSV_VCL30,
QUA_HEVC_NAL_RSV_VCL31,
QUA_HEVC_NAL_VPS,
QUA_HEVC_NAL_SPS,
QUA_HEVC_NAL_PPS,
QUA_HEVC_NAL_AUD,
QUA_HEVC_NAL_EOS_NUT,
QUA_HEVC_NAL_EOB_NUT,
QUA_HEVC_NAL_FD_NUT,
QUA_HEVC_NAL_SEI_PREFIX,
QUA_HEVC_NAL_SEI_SUFFIX,
QUA_HEVC_NAL_RSV_NVCL41,
QUA_HEVC_NAL_RSV_NVCL42,
QUA_HEVC_NAL_RSV_NVCL43,
QUA_HEVC_NAL_RSV_NVCL44,
QUA_HEVC_NAL_RSV_NVCL45,
QUA_HEVC_NAL_RSV_NVCL46,
QUA_HEVC_NAL_RSV_NVCL47,
QUA_HEVC_NAL_UNSPEC48,
QUA_HEVC_NAL_UNSPEC49,
QUA_HEVC_NAL_UNSPEC50,
QUA_HEVC_NAL_UNSPEC51,
QUA_HEVC_NAL_UNSPEC52,
QUA_HEVC_NAL_UNSPEC53,
QUA_HEVC_NAL_UNSPEC54,
QUA_HEVC_NAL_UNSPEC55,
QUA_HEVC_NAL_UNSPEC56,
QUA_HEVC_NAL_UNSPEC57,
QUA_HEVC_NAL_UNSPEC58,
QUA_HEVC_NAL_UNSPEC59,
QUA_HEVC_NAL_UNSPEC60,
QUA_HEVC_NAL_UNSPEC61,
QUA_HEVC_NAL_UNSPEC62,
QUA_HEVC_NAL_UNSPEC63
} qua_h265_nal_type_t;
typedef enum {
LIST_0,
LIST_1
} qua_ref_list_t;
typedef struct {
uint32_t first_mb_in_slice;
int32_t slice_type;
uint32_t pic_parameter_set_id;
uint32_t colour_plane_id;
uint32_t frame_num;
int32_t field_pic_flag;
int32_t bottom_field_flag;
int32_t structure;
int32_t mb_aff_frame_flag;
int32_t pic_order_cnt_lsb;
int32_t delta_pic_order_cnt_bottom;
int32_t delta_pic_order_cnt[2];
uint32_t poc_used_bitlen;
int32_t redundant_pic_cnt;
int32_t direct_spatial_mv_pred_flag;
int32_t num_ref_idx_active[2];
int32_t num_ref_idx_override_flag;
int32_t ref_pic_list_reordering_flag[2];
int32_t reordering_of_pic_nums_idc[2][MAX_REORDER_TIMES];
int32_t abs_diff_pic_num_minus1[2][MAX_REORDER_TIMES];
int32_t long_term_pic_idx[2][MAX_REORDER_TIMES];
uint32_t drpm_used_bitlen;
int32_t no_output_of_prior_pics_flag;
int32_t long_term_refrence_flag;
int32_t adaptive_ref_pic_buffering_flag;
qua_h264_sps_t active_sps;
qua_h264_pps_t active_pps;
uint32_t RefPicListX[2][MAX_REORDER_TIMES];
uint32_t refIdxLX[2];
} qua_h264_slice_t;
typedef struct {
union {
qua_h264_slice_t h264_slice;
};
} qua_slice_t;
typedef struct {
uint8_t forbidden_zero_bit;
uint8_t nal_ref_idc;
uint8_t nal_unit_type;
} qua_h264_nalu_t;
typedef struct {
uint8_t forbidden_zero_bit;
uint8_t nal_unit_type;
uint8_t nuh_layer_id;
uint8_t nuh_temporal_id_plus1;
} qua_h265_nalu_t;
typedef struct {
bitread_ctx_t bit_ctx;
union {
qua_h264_nalu_t h264_nalu;
qua_h265_nalu_t h265_nalu;
};
} qua_nalu_t;
int32_t qua_h2645_extract_nalu(uint8_t *data, size_t size, size_t *nalSize);
int32_t qua_h2645_split_codec_nal(uint8_t *data, size_t size, size_t *nalSize);
int32_t qua_parse_nal_header(qua_video_type_t type, uint8_t *nal);
int32_t qua_parse_one_nalu(qua_video_type_t type, uint8_t *nal_data, uint32_t nalu_size, qua_nalu_t *nalu);
int32_t qua_parse_slice_header(qua_video_type_t type, qua_nalu_t *nalu, qua_slice_t *slice);
void check_refer_picture_lists(qua_slice_t *slice, int32_t *slice_num_pic_refs);
const char *qua_hevc_nal_unit_name(int nal_type);
const char *qua_h264_nal_unit_name(int nal_type);
#ifdef __cplusplus
}
#endif
#endif