libxcoder 5.6.0
Loading...
Searching...
No Matches
ni_decode_utils.h
Go to the documentation of this file.
1/*******************************************************************************
2 *
3 * Copyright (C) 2022 NETINT Technologies
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to deal
7 * in the Software without restriction, including without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 * copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18 * SOFTWARE.
19 *
20 ******************************************************************************/
21
22/*!*****************************************************************************
23 * \file decode_utils.h
24 *
25 * \brief Video decoding utility functions shared by Libxcoder API examples
26 ******************************************************************************/
27
28#pragma once
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#include "ni_device_api.h"
35#include "ni_av_codec.h"
36#include "ni_bitstream.h"
37#include "ni_generic_utils.h"
38#include "ni_filter_utils.h"
39
49
66
70typedef struct _ni_h264_sps_t
71{
72 int width;
73 int height;
74
75 unsigned int sps_id;
93 int mb_aff;
95 int crop;
96
97 unsigned int crop_left;
98 unsigned int crop_right;
99 unsigned int crop_top;
100 unsigned int crop_bottom;
111 uint32_t time_scale;
118 uint8_t scaling_matrix4[6][16];
119 uint8_t scaling_matrix8[6][64];
132 uint8_t data[4096];
133 size_t data_size;
135
136typedef struct _ni_h265_window_t
137{
138 unsigned int left_offset;
139 unsigned int right_offset;
140 unsigned int top_offset;
141 unsigned int bottom_offset;
143
187
211
220
221typedef struct ScalingList
222{
223 /* This is a little wasteful, since sizeID 0 only needs 8 coeffs,
224 * and size ID 3 only has 2 arrays, not 6. */
225 uint8_t sl[4][6][64];
226 uint8_t sl_dc[2][6];
228
229typedef struct ShortTermRPS
230{
231 unsigned int num_negative_pics;
234 int32_t delta_poc[32];
235 uint8_t used[32];
237
241typedef struct _ni_h265_sps_t
242{
243 unsigned vps_id;
246
249
254
255 unsigned int log2_max_poc_lsb;
257
259 struct
260 {
266
269
272
273 unsigned int nb_st_rps;
275
277 uint8_t sao_enabled;
278
283
284 struct
285 {
286 uint8_t bit_depth;
294
295 unsigned int log2_min_cb_size;
297 unsigned int log2_min_tb_size;
299 unsigned int log2_ctb_size;
300 unsigned int log2_min_pu_size;
301
304
315
317 int width;
329
330 int hshift[3];
331 int vshift[3];
332
334
335 uint8_t data[4096];
338
340{
343 uint16_t width;
344 uint16_t height;
345 struct
346 {
347 uint32_t den;
348 uint32_t num;
350 uint32_t total_frames;
352
374
400
401uint64_t find_h264_next_nalu(ni_demo_context_t *p_ctx, uint8_t *p_dst, int *nal_type);
404int h264_parse_scaling_list(ni_bitstream_reader_t *br, uint8_t *factors, int size,
405 const uint8_t *jvt_list, const uint8_t *fallback_list);
407 uint8_t (*scaling_matrix4)[16], uint8_t (*scaling_matrix8)[64]);
408int h264_parse_sps(uint8_t *buf, int size_bytes, ni_h264_sps_t *sps);
409int h264_parse_sei(uint8_t *buf, int size_bytes, ni_h264_sps_t *sps,
410 int *sei_type, int *is_interlaced);
412int parse_h264_slice_header(uint8_t *buf, int size_bytes, ni_h264_sps_t *sps,
413 int32_t *frame_num, unsigned int *first_mb_in_slice);
414
415uint64_t find_h265_next_nalu(ni_demo_context_t *p_ctx, uint8_t *p_dst, int *nal_type);
416void h265_decode_sublayer_hrd(ni_bitstream_reader_t *br, unsigned int nb_cpb,
417 int subpic_params_present);
419int h265_parse_ptl(ni_bitstream_reader_t *br, PTL *ptl, int max_num_sub_layers);
420int h265_decode_hrd(ni_bitstream_reader_t *br, int common_inf_present, int max_sublayers);
424 const ni_h265_sps_t *sps, int is_slice_header);
425int h265_decode_vui(ni_bitstream_reader_t *br, int apply_defdispwin, ni_h265_sps_t *sps);
426int h265_parse_sps(ni_h265_sps_t *sps, uint8_t *buf, int size_bytes);
428
429uint64_t find_vp9_next_packet(ni_demo_context_t *p_ctx, uint8_t *p_dst, ni_vp9_header_info_t *vp9_info);
430int vp9_parse_header(ni_vp9_header_info_t *vp9_info, uint8_t *buf, int size_bytes);
432
434 ni_session_data_io_t *p_in_data,
435 int input_video_width, int input_video_height,
436 void *stream_info);
438 ni_session_data_io_t *p_out_data,
439 int output_video_width, int output_video_height,
440 FILE *p_file, int write_to_file,
441 int * p_rx_size);
442int decoder_open_session(ni_session_context_t *p_dec_ctx, int iXcoderGUID,
443 ni_xcoder_params_t *p_dec_params);
445
446void *decoder_send_thread(void *args);
447void *decoder_receive_thread(void *args);
448
449#ifdef __cplusplus
450}
451#endif
Audio/video related utility definitions.
enum _ni_color_primaries ni_color_primaries_t
enum _ni_color_transfer_characteristic ni_color_transfer_characteristic_t
enum _ni_color_space ni_color_space_t
Utility definitions to operate on bits in a bitstream.
int h265_parse_ptl(ni_bitstream_reader_t *br, PTL *ptl, int max_num_sub_layers)
void decoder_stat_report_and_close(ni_demo_context_t *p_ctx, ni_session_context_t *p_dec_ctx)
int probe_h264_stream_info(ni_demo_context_t *p_ctx, ni_h264_sps_t *sps)
struct _ni_vp9_header_info ni_vp9_header_info_t
int vp9_parse_header(ni_vp9_header_info_t *vp9_info, uint8_t *buf, int size_bytes)
struct _ni_h264_sps_t ni_h264_sps_t
enum _ni_nalu_type ni_nalu_type_t
uint64_t find_h264_next_nalu(ni_demo_context_t *p_ctx, uint8_t *p_dst, int *nal_type)
_ni_nalu_type
@ H264_NAL_END_STREAM
@ H264_NAL_DPB
@ H264_NAL_END_SEQUENCE
@ H264_NAL_AUXILIARY_SLICE
@ H264_NAL_DPA
@ H264_NAL_DPC
@ H264_NAL_PPS
@ H264_NAL_SUB_SPS
@ H264_NAL_PREFIX
@ H264_NAL_SPS
@ H264_NAL_SLICE
@ H264_NAL_DPS
@ H264_NAL_UNSPECIFIED
@ H264_NAL_FILLER_DATA
@ H264_NAL_SPS_EXT
@ H264_NAL_SEI
@ H264_NAL_AUD
@ H264_NAL_IDR_SLICE
int h264_parse_sei(uint8_t *buf, int size_bytes, ni_h264_sps_t *sps, int *sei_type, int *is_interlaced)
int h264_parse_hrd(ni_bitstream_reader_t *br, ni_h264_sps_t *sps)
struct dec_send_param dec_send_param_t
int h265_decode_profile_tier_level(ni_bitstream_reader_t *br, PTLCommon *ptl)
struct dec_recv_param dec_recv_param_t
int h265_decode_hrd(ni_bitstream_reader_t *br, int common_inf_present, int max_sublayers)
int h264_parse_scaling_matrices(ni_bitstream_reader_t *br, const ni_h264_sps_t *sps, uint8_t(*scaling_matrix4)[16], uint8_t(*scaling_matrix8)[64])
void * decoder_send_thread(void *args)
int decoder_receive_data(ni_demo_context_t *p_ctx, ni_session_context_t *p_dec_ctx, ni_session_data_io_t *p_out_data, int output_video_width, int output_video_height, FILE *p_file, int write_to_file, int *p_rx_size)
Receive decoded output data from decoder.
int h264_parse_vui(ni_bitstream_reader_t *br, ni_h264_sps_t *sps)
uint64_t find_h265_next_nalu(ni_demo_context_t *p_ctx, uint8_t *p_dst, int *nal_type)
int h264_parse_sps(uint8_t *buf, int size_bytes, ni_h264_sps_t *sps)
int h264_parse_scaling_list(ni_bitstream_reader_t *br, uint8_t *factors, int size, const uint8_t *jvt_list, const uint8_t *fallback_list)
int h265_parse_sps(ni_h265_sps_t *sps, uint8_t *buf, int size_bytes)
int parse_h264_slice_header(uint8_t *buf, int size_bytes, ni_h264_sps_t *sps, int32_t *frame_num, unsigned int *first_mb_in_slice)
int decoder_open_session(ni_session_context_t *p_dec_ctx, int iXcoderGUID, ni_xcoder_params_t *p_dec_params)
decoder session open
int probe_h265_stream_info(ni_demo_context_t *p_ctx, ni_h265_sps_t *sps)
_ni_hevc_nalu_type
@ HEVC_NAL_RASL_N
@ HEVC_NAL_CRA_NUT
@ HEVC_NAL_TRAIL_N
@ HEVC_NAL_TSA_R
@ HEVC_NAL_AUD
@ HEVC_NAL_IDR_W_RADL
@ HEVC_NAL_IDR_N_LP
@ HEVC_NAL_SEI_SUFFIX
@ HEVC_NAL_TSA_N
@ HEVC_NAL_SEI_PREFIX
@ HEVC_NAL_EOS_NUT
@ HEVC_NAL_PPS
@ HEVC_NAL_VPS
@ HEVC_NAL_FD_NUT
@ HEVC_NAL_TRAIL_R
@ HEVC_NAL_STSA_N
@ HEVC_NAL_STSA_R
@ HEVC_NAL_EOB_NUT
@ HEVC_NAL_RASL_R
@ HEVC_NAL_RADL_R
@ HEVC_NAL_SPS
@ HEVC_NAL_RADL_N
void h265_decode_sublayer_hrd(ni_bitstream_reader_t *br, unsigned int nb_cpb, int subpic_params_present)
enum _ni_hevc_nalu_type ni_hevc_nalu_type
void * decoder_receive_thread(void *args)
int h265_scaling_list_data(ni_bitstream_reader_t *br, ScalingList *sl, ni_h265_sps_t *sps)
int probe_vp9_stream_info(ni_demo_context_t *p_ctx, ni_vp9_header_info_t *vp9_info)
void h265_set_default_scaling_list_data(ScalingList *sl)
int h265_decode_short_term_rps(ni_bitstream_reader_t *br, ShortTermRPS *rps, const ni_h265_sps_t *sps, int is_slice_header)
struct _ni_h265_sps_t ni_h265_sps_t
struct _ni_h265_window_t ni_h265_window_t
int decoder_send_data(ni_demo_context_t *p_ctx, ni_session_context_t *p_dec_ctx, ni_session_data_io_t *p_in_data, int input_video_width, int input_video_height, void *stream_info)
Send decoder input data.
uint64_t find_vp9_next_packet(ni_demo_context_t *p_ctx, uint8_t *p_dst, ni_vp9_header_info_t *vp9_info)
int h265_decode_vui(ni_bitstream_reader_t *br, int apply_defdispwin, ni_h265_sps_t *sps)
Public definitions for operating NETINT video processing devices for video processing.
#define HEVC_MAX_SUB_LAYERS
#define HEVC_MAX_LONG_TERM_REF_PICS
#define HEVC_MAX_SHORT_TERM_REF_PIC_SETS
ni_color_transfer_characteristic_t color_trc
int colour_description_present_flag
ni_color_primaries_t color_primaries
int nal_hrd_parameters_present_flag
int log2_max_frame_num
log2_max_frame_num_minus4 + 4
unsigned int crop_left
frame_cropping_rect_left_offset
int cpb_removal_delay_length
cpb_removal_delay_length_minus1 + 1
int poc_type
pic_order_cnt_type
uint32_t num_units_in_tick
int constraint_set_flags
constraint_set[0-3]_flag
unsigned int sps_id
int bit_depth_luma
bit_depth_luma_minus8 + 8
int transform_bypass
qpprime_y_zero_transform_bypass_flag
int gaps_in_frame_num_allowed_flag
uint8_t scaling_matrix8[6][64]
int initial_cpb_removal_delay_length
initial_cpb_removal_delay_length_minus1 + 1
unsigned int max_dec_frame_buffering
unsigned int crop_bottom
frame_cropping_rect_bottom_offset
int offset_for_top_to_bottom_field
int delta_pic_order_always_zero_flag
ni_color_space_t colorspace
uint8_t scaling_matrix4[6][16]
int vcl_hrd_parameters_present_flag
int poc_cycle_length
num_ref_frames_in_pic_order_cnt_cycle
int residual_color_transform_flag
residual_colour_transform_flag
int video_signal_type_present_flag
int mb_aff
mb_adaptive_frame_field_flag
short offset_for_ref_frame[256]
int dpb_output_delay_length
dpb_output_delay_length_minus1 + 1
unsigned int crop_right
frame_cropping_rect_right_offset
unsigned int crop_top
frame_cropping_rect_top_offset
int cpb_cnt
See H.264 E.1.2.
int crop
frame_cropping_flag
int ref_frame_count
num_ref_frames
int bit_depth_chroma
bit_depth_chroma_minus8 + 8
ni_rational_t sar
int log2_max_poc_lsb
log2_max_pic_order_cnt_lsb_minus4
int mb_width
(pic_height_in_map_units_minus1 + 1) * (2 - frame_mbs_only_flag)
uint8_t data[4096]
unsigned int log2_max_poc_lsb
unsigned int log2_max_trafo_size
int transform_skip_rotation_enabled_flag
unsigned int log2_min_pu_size
int cabac_bypass_alignment_enabled_flag
coded frame dimension in various units
uint8_t num_long_term_ref_pics_sps
unsigned int log2_min_cb_size
struct _ni_h265_sps_t::@1 temporal_layer[HEVC_MAX_SUB_LAYERS]
uint8_t temporal_id_nesting_flag
uint8_t sps_temporal_mvp_enabled_flag
unsigned int log2_max_pcm_cb_size
ScalingList scaling_list
uint8_t long_term_ref_pics_present_flag
int extended_precision_processing_flag
uint8_t used_by_curr_pic_lt_sps_flag[HEVC_MAX_LONG_TERM_REF_PICS]
int max_transform_hierarchy_depth_inter
ni_h265_window_t pic_conf_win
unsigned int log2_min_tb_size
int intra_smoothing_disabled_flag
ni_h265_window_t output_window
unsigned int log2_min_pcm_cb_size
unsigned int nb_st_rps
int transform_skip_context_enabled_flag
uint16_t lt_ref_pic_poc_lsb_sps[HEVC_MAX_LONG_TERM_REF_PICS]
int high_precision_offsets_enabled_flag
unsigned int log2_ctb_size
uint8_t sps_strong_intra_smoothing_enable_flag
unsigned int log2_diff_max_min_coding_block_size
uint8_t loop_filter_disable_flag
uint8_t scaling_list_enable_flag
int persistent_rice_adaptation_enabled_flag
uint8_t separate_colour_plane_flag
int max_transform_hierarchy_depth_intra
ShortTermRPS st_rps[HEVC_MAX_SHORT_TERM_REF_PIC_SETS]
uint8_t data[4096]
struct _ni_h265_sps_t::@2 pcm
unsigned int left_offset
unsigned int bottom_offset
unsigned int right_offset
unsigned int top_offset
struct _ni_vp9_header_info::@3 timebase
uint8_t inbld_flag
uint8_t lower_bit_rate_constraint_flag
uint8_t profile_space
uint8_t max_10bit_constraint_flag
uint8_t one_picture_only_constraint_flag
uint8_t max_12bit_constraint_flag
uint8_t profile_idc
uint8_t max_monochrome_constraint_flag
uint8_t intra_constraint_flag
uint8_t level_idc
uint8_t progressive_source_flag
uint8_t tier_flag
uint8_t max_420chroma_constraint_flag
uint8_t profile_compatibility_flag[32]
uint8_t max_8bit_constraint_flag
uint8_t max_422chroma_constraint_flag
uint8_t frame_only_constraint_flag
uint8_t interlaced_source_flag
uint8_t max_14bit_constraint_flag
uint8_t non_packed_constraint_flag
uint8_t sub_layer_profile_present_flag[HEVC_MAX_SUB_LAYERS]
uint8_t sub_layer_level_present_flag[HEVC_MAX_SUB_LAYERS]
PTLCommon sub_layer_ptl[HEVC_MAX_SUB_LAYERS]
PTLCommon general_ptl
uint8_t sl[4][6][64]
uint8_t sl_dc[2][6]
unsigned int num_negative_pics
int32_t delta_poc[32]
uint8_t used[32]
int vui_poc_proportional_to_timing_flag
uint8_t transfer_characteristic
int colour_description_present_flag
int field_seq_flag
int chroma_sample_loc_type_top_field
uint8_t matrix_coeffs
int frame_field_info_present_flag
uint32_t vui_time_scale
int overscan_appropriate_flag
int vui_hrd_parameters_present_flag
int default_display_window_flag
int vui_timing_info_present_flag
int log2_max_mv_length_horizontal
int tiles_fixed_structure_flag
uint32_t vui_num_units_in_tick
int max_bits_per_min_cu_denom
int vui_num_ticks_poc_diff_one_minus1
int bitstream_restriction_flag
int motion_vectors_over_pic_boundaries_flag
int min_spatial_segmentation_idc
int max_bytes_per_pic_denom
int log2_max_mv_length_vertical
int neutra_chroma_indication_flag
int chroma_sample_loc_type_bottom_field
int restricted_ref_pic_lists_flag
int video_signal_type_present_flag
int overscan_info_present_flag
int chroma_loc_info_present_flag
int video_format
ni_h265_window_t def_disp_win
uint8_t colour_primaries
int video_full_range_flag
ni_rational_t sar
ni_demo_context_t * p_ctx
ni_drawbox_params_t * drawbox_params
ni_session_context_t * p_sca_ctx
ni_scale_params_t * scale_params
ni_session_context_t * p_pad_ctx
ni_session_context_t * p_dec_ctx
ni_session_context_t * p_ovly_ctx
ni_session_context_t * p_crop_ctx
ni_test_frame_list_t * frame_list
ni_session_context_t * p_fmt_ctx
ni_demo_context_t * p_ctx
ni_session_context_t * p_dec_ctx
ni_test_frame_list_t * frame_list