23 #elif defined(__linux__)
24 #include <arpa/inet.h>
68 {0, 1, 1, 1, 2, 4, 4, 4, 8, 1, 2, 4, 4};
70 static const int32_t LT_GOP_PRESET_I_1[6] = {
SLICE_TYPE_I, 1, 0, 0, 0, 0};
71 static const int32_t LT_GOP_PRESET_P_1[6] = {
SLICE_TYPE_MP, 1, 1, 0, 0, -1};
72 static const int32_t LT_GOP_PRESET_B_1[6] = {
SLICE_TYPE_B, 1, 1, 0, 0, -1};
74 static const int32_t LT_GOP_PRESET_BP_2[12] =
80 static const int32_t LT_GOP_PRESET_BBBP_4[24] =
88 static const int32_t LT_GOP_PRESET_LP_4[24] =
95 static const int32_t LT_GOP_PRESET_LD_4[24] =
104 static const int32_t LT_GOP_PRESET_RA_8[48] =
116 static const int32_t LT_GOP_PRESET_SP_1[6] = {
SLICE_TYPE_P, 1, 1, 0, 0, -1};
118 static const int32_t LT_GOP_PRESET_BSP_2[12] =
123 static const int32_t LT_GOP_PRESET_BBBSP_4[24] =
130 static const int32_t LT_GOP_PRESET_LSP_4[24] =
138 static const int32_t LT_GOP_PRESET_BBP_3[18] =
145 static const int32_t LT_GOP_PRESET_BBSP_3[18] =
152 static const int32_t LT_GOP_PRESET_BBBBBBBP_8[48] =
164 static const int32_t LT_GOP_PRESET_BBBBBBBSP_8[48] =
182 LT_GOP_PRESET_BBBP_4,
189 LT_GOP_PRESET_BBBSP_4,
192 LT_GOP_PRESET_BBP_3 ,
193 LT_GOP_PRESET_BBSP_3 ,
194 LT_GOP_PRESET_BBBBBBBP_8 ,
195 LT_GOP_PRESET_BBBBBBBSP_8,
214 const int32_t* src_gop = GOP_PRESET[gopPreset];
215 gopSize = GOP_SIZE[gopPreset];
217 for(i = 0, j = 0; i < gopSize; i++)
257 else if (gopPreset == 1 || gopPreset == 2 || gopPreset == 3 ||
258 gopPreset == 6 || gopPreset == 7 || gopPreset == 9)
270 int ret_num_reorder = 0;
273 init_gop_param(&gopParam, param);
276 int check_reordering_num = 0;
285 check_reordering_num = j;
288 for(j = 0; j < check_reordering_num; j++)
296 ret_num_reorder = num_reorder;
298 return ret_num_reorder;
301 static inline int ni_logan_min(
int a,
int b)
303 return a < b ? a : b;
306 static inline int ni_logan_max(
int a,
int b)
308 return a > b ? a : b;
311 static inline float ni_logan_minf(
float a,
float b)
313 return a < b ? a : b;
316 static inline float ni_logan_maxf(
float a,
float b)
318 return a > b ? a : b;
321 static int get_max_dec_pic_buffering_of_gop_structure(
324 int max_dec_pic_buffering;
325 max_dec_pic_buffering = ni_logan_min(16, ni_logan_max(get_num_reorder_of_gop_structure(param) + 2, 6 ) + 1);
326 return max_dec_pic_buffering;
339 init_gop_param(&gopParam, param);
341 low_delay = check_low_delay_flag(param, &gopParam);
349 gopIdx = frame_idx % gopSize;
350 gopNum = frame_idx / gopSize;
358 static inline int calc_scale(uint32_t x)
360 static uint8_t lut[16] = {4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
361 int y, z = (((x & 0xffff) - 1) >> 27) & 16;
363 z += y = (((x & 0xff) - 1) >> 28) & 8;
365 z += y = (((x & 0xf) - 1) >> 29) & 4;
367 return z + lut[x&0xf];
370 static inline int clip3(
int min,
int max,
int a)
372 return ni_logan_min(ni_logan_max(min, a), max);
375 static inline float clip3f(
float min,
float max,
float a)
377 return ni_logan_minf(ni_logan_maxf(min, a), max);
380 static inline int calc_length(uint32_t x)
382 static uint8_t lut[16] = {4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0};
383 int y, z = (((x >> 16) - 1) >> 27) & 16;
385 z += y = ((x - 0x100) >> 28) & 8;
387 z += y = ((x - 0x10) >> 29) & 4;
395 #define SAMPLE_SPS_MAX_SUB_LAYERS_MINUS1 0
396 #define MAX_VPS_MAX_SUB_LAYERS 16
397 #define MAX_CPB_COUNT 16
398 #define MAX_DURATION 0.5
440 const int64_t tmp = a.
num * (int64_t)b.
den - b.
num * (int64_t)a.
den;
442 if (tmp)
return (
int)((tmp ^ a.
den ^ b.
den)>>63)|1;
443 else if(b.
den && a.
den)
return 0;
444 else if(a.
num && b.
num)
return (a.
num>>31) - (b.
num>>31);
469 int video_full_range_flag,
475 unsigned int aspect_ratio_idc = 255;
476 int nal_hrd_parameters_present_flag=1, vcl_hrd_parameters_present_flag=0;
478 int maxcpboutputdelay;
479 int maxdpboutputdelay;
482 uint32_t vbvmaxbitrate = p_param->
bitrate;
492 uint32_t bit_rate_scale = 2;
493 uint32_t cpb_size_scale = 5;
494 uint32_t numUnitsInTick = 1000;
499 "video_full_range_flag:%d, sar_num:%d, sar_den:%d, codec_format:%d\n",
500 __FUNCTION__, color_primaries, color_trc, color_space,
501 video_full_range_flag, sar_num, sar_den, codec_format);
503 if (video_full_range_flag < 0)
506 "indicated excplicitly as 0 or 1!\n", __func__);
522 if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
523 ni_make_rational(1, 1)))
525 aspect_ratio_idc = 1;
527 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
528 ni_make_rational(12, 11)))
530 aspect_ratio_idc = 2;
532 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
533 ni_make_rational(10, 11)))
535 aspect_ratio_idc = 3;
537 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
538 ni_make_rational(16, 11)))
540 aspect_ratio_idc = 4;
542 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
543 ni_make_rational(40, 33)))
545 aspect_ratio_idc = 5;
547 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
548 ni_make_rational(24, 11)))
550 aspect_ratio_idc = 6;
552 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
553 ni_make_rational(20, 11)))
555 aspect_ratio_idc = 7;
557 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
558 ni_make_rational(32, 11)))
560 aspect_ratio_idc = 8;
562 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
563 ni_make_rational(80, 33)))
565 aspect_ratio_idc = 9;
567 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
568 ni_make_rational(18, 11)))
570 aspect_ratio_idc = 10;
572 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
573 ni_make_rational(15, 11)))
575 aspect_ratio_idc = 11;
577 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
578 ni_make_rational(64, 33)))
580 aspect_ratio_idc = 12;
582 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
583 ni_make_rational(160, 99)))
585 aspect_ratio_idc = 13;
587 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
588 ni_make_rational(4, 3)))
590 aspect_ratio_idc = 14;
592 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
593 ni_make_rational(3, 2)))
595 aspect_ratio_idc = 15;
597 else if (! ni_cmp_rational(ni_make_rational(sar_num, sar_den),
598 ni_make_rational(2, 1)))
600 aspect_ratio_idc = 16;
604 if (255 == aspect_ratio_idc)
666 bit_rate_value_minus1[0][0] = 59374;
667 cpb_size_value_minus1[0][0] = 59374;
668 cpb_cnt_minus1[0] = 0;
669 fixed_pic_rate_general_flag[0] = 1;
670 fixed_pic_rate_within_cvs_flag[0] = 1;
671 elemental_duration_in_tc_minus1[0] = 0;
674 bit_rate_scale = clip3(0, 15, calc_scale(vbvmaxbitrate) -
BR_SHIFT);
675 bit_rate_value_minus1[0][0] = (vbvmaxbitrate >> (bit_rate_scale +
BR_SHIFT)) - 1;
677 cpb_size_scale = clip3(0, 15, calc_scale(vbvbuffersize) -
CPB_SHIFT);
678 cpb_size_value_minus1[0][0] = (vbvbuffersize >> (cpb_size_scale +
CPB_SHIFT)) - 1;
687 i32frameRateInfo += 1;
689 timeScale = i32frameRateInfo * 1000;
692 maxdpboutputdelay = (int)(get_max_dec_pic_buffering_of_gop_structure(p_param) *
MAX_DURATION * timeScale / numUnitsInTick);
696 2 + clip3(4, 22, 32 - calc_length(maxdelay)) - 1;
698 clip3(4, 31, 32 - calc_length(maxcpboutputdelay)) - 1;
700 clip3(4, 31, 32 - calc_length(maxdpboutputdelay)) - 1;
709 for (layer = 0; layer <= (int32_t)vps_max_sub_layers_minus1; layer++)
713 if (! fixed_pic_rate_general_flag[layer])
718 if (fixed_pic_rate_within_cvs_flag[layer])
727 if ((layer == 0 && nal_hrd_parameters_present_flag) ||
728 (layer == 1 && vcl_hrd_parameters_present_flag))
730 for (cpb = 0; cpb <= (int32_t)cpb_cnt_minus1[layer]; cpb++)
779 int max_dec_frame_buffering = (num_ref_frames > max_num_reorder_frames ?
780 num_ref_frames : max_num_reorder_frames);
798 unsigned int aspect_ratio_idc = 255;
809 "indicated excplicitly as 0 or 1!\n", __func__);
925 int max_dec_frame_buffering = (num_ref_frames > max_num_reorder_frames ?
926 num_ref_frames : max_num_reorder_frames);
938 "indicated excplicitly as 0 or 1!\n", __func__);
1059 int32_t payload_bit_size = 0, payload_byte_size = 0, put_bit_byte_size = 0;
1060 uint32_t nal_initial_cpb_removal_delay, nal_initial_cpb_removal_offset;
1062 uint32_t concatenation_flag = get_poc_of_gop_structure(p_param, frame_idx) == 0 ? 1 : 0;
1068 concatenation_flag = 1;
1072 payload_bit_size += 1;
1073 payload_bit_size += 1;
1074 payload_bit_size += 1;
1080 for (i = 0; i < 1; i++)
1094 payload_byte_size = (payload_bit_size + 7) / 8;
1104 nal_initial_cpb_removal_delay =
1106 nal_initial_cpb_removal_offset =
1108 nal_initial_cpb_removal_delay);
1112 for (i = 0; i < 1; i++)
1124 if (payload_bit_size % 8)
1128 for (i = 0; i < 8 - (payload_bit_size % 8) - 1; i++)
1139 if (put_bit_byte_size <= buf_len)
1146 __FUNCTION__, buf_len, put_bit_byte_size);
1147 put_bit_byte_size = 0;
1155 p_buf + 8, put_bit_byte_size - 8);
1157 return put_bit_byte_size;
1178 uint8_t *src_sei_data = NULL;
1179 int custom_sei_size = 0;
1180 int custom_sei_size_trans = 0;
1181 uint8_t custom_sei_type;
1186 uint8_t *dst_sei_data = NULL;
1191 if (dst_all_custom_sei == NULL)
1200 for (sei_idx = 0; sei_idx < src_all_custom_sei->
custom_sei_cnt; sei_idx++)
1202 src_custom_sei = &src_all_custom_sei->
ni_custom_sei[sei_idx];
1208 dst_custom_sei = &dst_all_custom_sei->
ni_custom_sei[sei_idx];
1214 dst_sei_data[sei_len++] = 0x00;
1215 dst_sei_data[sei_len++] = 0x00;
1216 dst_sei_data[sei_len++] = 0x00;
1217 dst_sei_data[sei_len++] = 0x01;
1220 dst_sei_data[sei_len++] = 0x06;
1224 dst_sei_data[sei_len++] = 0x4e;
1225 dst_sei_data[sei_len++] = 0x01;
1229 dst_sei_data[sei_len++] = custom_sei_type;
1232 custom_sei_size_trans = custom_sei_size;
1233 while (custom_sei_size_trans >= 0)
1235 dst_sei_data[sei_len++] = (custom_sei_size_trans > 0xFF ? 0xFF : (uint8_t)custom_sei_size_trans);
1236 custom_sei_size_trans -= 0xFF;
1242 if ((2 <= i) && !dst_sei_data[sei_len - 2] && !dst_sei_data[sei_len - 1] && (src_sei_data[i] <= 0x03))
1245 dst_sei_data[sei_len++] = 0x03;
1247 dst_sei_data[sei_len++] = src_sei_data[i];
1250 if (i != custom_sei_size)
1253 "idx=%u, type=%u, size=%d, custom_sei_loc=%d\n", __FUNCTION__,
1256 free(dst_all_custom_sei);
1257 dst_all_custom_sei = NULL;
1262 dst_sei_data[sei_len++] = 0x80;
1268 "custom_sei_loc=%d\n", __FUNCTION__, sei_idx, custom_sei_type,
1272 if (dst_all_custom_sei)
1306 int32_t payload_bit_size = 0, payload_byte_size = 0, put_bit_byte_size = 0;
1307 uint32_t pic_dpb_output_delay = 0;
1308 int num_reorder_pic;
1312 __FUNCTION__, is_i_or_idr, is_idr, frame_idx);
1331 payload_byte_size = (payload_bit_size + 7) / 8;
1335 num_reorder_pic = get_num_reorder_of_gop_structure(p_param);
1336 poc_pic = get_poc_of_gop_structure(p_param, frame_idx);
1337 pic_dpb_output_delay = num_reorder_pic + poc_pic - frame_idx;
1348 if (0 == frame_idx || is_idr ||
1354 else if (is_i_or_idr)
1362 if (payload_bit_size & 7)
1373 if (put_bit_byte_size <= buf_len)
1380 __FUNCTION__, buf_len, put_bit_byte_size);
1381 put_bit_byte_size = 0;
1389 p_buf + 8, put_bit_byte_size - 8);
1391 return put_bit_byte_size;
1407 uint8_t *sei_buf = NULL;
1419 "data unregisted SEI !\n");
1448 "mastering display color SEI !\n");
1454 const int chroma_den = 50000;
1455 const int luma_den = 10000;
1458 (uint8_t*)frame->
p_data[0] +
1501 "content light level SEI !\n");
1509 (uint8_t*)frame->
p_data[0] +
1512 clm->
max_cll = pLightLevel->max_content_light_level;
1513 clm->
max_fall = pLightLevel->max_pic_average_light_level;
1530 int w, i, j, i_limit, j_limit;
1602 "_peak_luminance x num_cols_targeted_system_display_actual_"
1603 "peak_luminance %u x %u\n", i_limit, j_limit);
1605 i_limit = i_limit > 25 ? 25 : i_limit;
1606 j_limit = j_limit > 25 ? 25 : j_limit;
1607 for (i = 0; i < i_limit; i++)
1608 for (j = 0; j < j_limit; j++)
1614 "_luminance[%d][%d] %d\n", i, j,
1621 for (i = 0; i < 3; i++)
1636 "hdr10+ num_distribution_maxrgb_percentiles[%d] %d\n",
1639 i_limit = i_limit > 15 ? 15 : i_limit;
1640 for (i = 0; i < i_limit; i++)
1648 "hdr10+ distribution_maxrgb_percentage[%d][%d] %u\n",
1651 "hdr10+ distribution_maxrgb_percentile[%d][%d] %d\n",
1665 "hdr10+ mastering_display_actual_peak_luminance_flag %u\n",
1674 "luminance x num_cols_mastering_display_actual_peak_luminance "
1675 "%u x %u\n", i_limit, j_limit);
1677 i_limit = i_limit > 25 ? 25 : i_limit;
1678 j_limit = j_limit > 25 ? 25 : j_limit;
1679 for (i = 0; i < i_limit; i++)
1680 for (j = 0; j < j_limit; j++)
1686 "nance[%d][%d] %d\n", i, j,
1795 "aspect_ratio_info_present_flag %u aspect_ratio_idc %u "
1796 "sar_width %u sar_height %u "
1797 "video_signal_type_present_flag %u video_format %d "
1798 "video_full_range_flag %u colour_description_present_flag %u "
1799 "color-pri %u color-trc %u color-space %u "
1800 "vui_timing_info_present_flag %u vui_num_units_in_tick %u\n",
1813 "VUI struct size %d, got %u, dropped!\n",
1856 "aspect_ratio_info_present_flag %u aspect_ratio_idc %u "
1857 "sar_width %u sar_height %u "
1858 "video_signal_type_present_flag %u video_format %d "
1859 "video_full_range_flag %u colour_description_present_flag %u "
1860 "color-pri %u color-trc %u color-space %u "
1861 "vui_timing_info_present_flag %u vui_num_units_in_tick %u "
1862 "vui_time_scale %u pic_struct_present_flag %u\n",
1876 "VUI struct size %d, got %u, dropped!\n",
1891 sei_buf = (uint8_t *)frame->
p_data[0] +
1896 "writting VUI color-trc value %u\n", *sei_buf, frame->
color_trc);
1907 int nb_roi,
int width,
int height,
int intra_qp)
1921 int mbWidth = (width + 16 - 1) >> 4;
1922 int mbHeight = (height + 16 - 1) >> 4;
1923 int numMbs = mbWidth * mbHeight;
1927 customMapSize = ((customMapSize + 15) / 16) * 16;
1942 for (i = 0; i < numMbs; i++)
1949 for (r = nb_roi - 1; r >= 0; r--)
1955 "must not be zero.\n");
1960 f_value = clip3f(-1.0, 1.0, f_value);
1964 "right %d offset %d/%d set_qp %d\n", r, roi->
top, roi->
bottom,
1968 for (j = 0; j < mbHeight; j++)
1969 for (i = 0; i < mbWidth; i++)
1971 if (((
int)(i % mbWidth) >= (
int)((roi->
left + 15) / 16) - 1) &&
1972 ((
int)(i % mbWidth) <= (
int)((roi->
right + 15) / 16) - 1) &&
1973 ((
int)(j % mbHeight) >= (
int)((roi->
top + 15) / 16) - 1) &&
1974 ((
int)(j % mbHeight) <= (
int)((roi->
bottom + 15) / 16) - 1))
1982 p_enc_ctx->
roi_len = customMapSize;
1990 int ctuWidth = (width + 64 - 1) >> 6;
1991 int ctuHeight = (height + 64 - 1) >> 6;
1992 int subCtuWidth = ctuWidth * 2;
1993 int subCtuHeight = ctuHeight * 2;
1994 int numSubCtus = subCtuWidth * subCtuHeight;
1996 ctuWidth * ctuHeight;
1997 customMapSize = ((customMapSize + 15) / 16) * 16;
2025 for (r = nb_roi - 1; r >= 0; r--)
2031 "must not be zero.\n");
2036 f_value = clip3f(-1.0, 1.0, f_value);
2040 "right %d offset %d/%d set_qp %d\n", r, roi->
top, roi->
bottom,
2043 for (j = 0; j < subCtuHeight; j++)
2044 for (i = 0; i < subCtuWidth; i++)
2046 if (((
int)(i % subCtuWidth) >= (
int)((roi->
left + 31) / 32) - 1) &&
2047 ((
int)(i % subCtuWidth) <= (
int)((roi->
right + 31) / 32) - 1) &&
2048 ((
int)(j % subCtuHeight) >= (
int)((roi->
top + 31) / 32) - 1) &&
2049 ((
int)(j % subCtuHeight) <= (
int)((roi->
bottom + 31) / 32) - 1))
2057 for (i = 0; i < ctuHeight; i++)
2060 for (j = 0; j < ctuWidth; j++, ptr += 2)
2062 ctu = i * ctuWidth + j;
2070 p_enc_ctx->
roi_len = customMapSize;
2136 int should_send_sei_with_frame,
2143 uint8_t *dst = NULL;
2171 8 + 6*2 + 2*2 + 2*4 + 1;
2195 const int luma_den = 10000;
2197 uint32_t uint32_t_tmp = htonl((uint32_t)(lrint(luma_den * ni_q2d(
2200 &uint32_t_tmp,
sizeof(uint32_t));
2201 uint32_t_tmp = htonl((uint32_t)(lrint(luma_den * ni_q2d(
2204 &uint32_t_tmp,
sizeof(uint32_t));
2216 should_send_sei_with_frame)
2219 dst[0] = dst[1] = dst[2] = 0;
2243 const int chroma_den = 50000;
2244 const int luma_den = 10000;
2246 uint16_t dp00 = 0, dp01 = 0, dp10 = 0, dp11 = 0, dp20 = 0, dp21 = 0,
2264 wpx = (uint16_t)lrint(chroma_den * ni_q2d(p_src->
white_point[0]));
2266 wpy = (uint16_t)lrint(chroma_den * ni_q2d(p_src->
white_point[1]));
2270 "%u/%u/%u/%u/%u/%u white_point_x/y %u/%u max/min_lumi %u/%u\n",
2271 (uint16_t)dp00, (uint16_t)dp01, (uint16_t)dp10,
2272 (uint16_t)dp11, (uint16_t)dp20, (uint16_t)dp21,
2273 (uint16_t)wpx, (uint16_t)wpy,
2277 dst += 6 * 2 + 2 * 2;
2305 uint16_t max_content_light_level =
2307 uint16_t max_pic_average_light_level =
2315 &max_content_light_level,
sizeof(uint16_t));
2317 &max_pic_average_light_level,
sizeof(uint16_t));
2328 should_send_sei_with_frame)
2331 dst[0] = dst[1] = dst[2] = 0;
2370 int cc_size = aux_data->
size;
2377 memcpy(cc_data_emu_prevent, aux_data->
data, cc_size);
2379 cc_data_emu_prevent, cc_size);
2380 if (cc_size_emu_prevent != cc_size)
2383 "emulation prevention bytes added: %d\n",
2384 cc_size_emu_prevent - cc_size);
2400 memcpy(dst, cc_data_emu_prevent, cc_size_emu_prevent);
2401 dst += cc_size_emu_prevent;
2415 memcpy(dst, cc_data_emu_prevent, cc_size_emu_prevent);
2416 dst += cc_size_emu_prevent;
2470 ui_tmp = lrint(10000 *
2487 ni_log(
NI_LOG_TRACE,
"hdr10+ num_rows_targeted_system_display_actual_peak_luminance x num_cols_targeted_system_display_actual_peak_luminance %u x %u\n",
2501 "luminance[%d][%d] %d\n", i, j, ui_tmp);
2507 for (i = 0; i < 3; i++)
2509 ui_tmp = lrint(100000 * ni_q2d(hdrp->
params[w].
maxscl[i]));
2522 "hdr10+ num_distribution_maxrgb_percentiles[%d] %d\n",
2532 "hdr10+ distribution_maxrgb_percentage[%d][%d] %u\n",
2535 "hdr10+ distribution_maxrgb_percentile[%d][%d] %d\n",
2548 "hdr10+ mastering_display_actual_peak_luminance_flag %u\n",
2558 ni_log(
NI_LOG_TRACE,
"hdr10+ num_rows_mastering_display_actual_peak_luminance x num_cols_mastering_display_actual_peak_luminance %u x %u\n",
2569 ni_log(
NI_LOG_TRACE,
"hdr10+ mastering_display_actual_peak_luminance[%d][%d] %d\n", i, j, ui_tmp);
2593 "hdr10+ num_bezier_curve_anchors[%d] %u\n",
2600 "hdr10+ bezier_curve_anchors[%d][%d] %d\n", w, i, ui_tmp);
2606 "hdr10+ color_saturation_mapping_flag[%d] %u\n",
2625 int emu_bytes_inserted = 0;
2639 dst, hdr10p_num_bytes);
2640 dst += hdr10p_num_bytes + emu_bytes_inserted;
2659 dst, hdr10p_num_bytes);
2660 dst += hdr10p_num_bytes + emu_bytes_inserted;
2671 "supported for HDR10+ SEI !\n", codec_format);
2687 int udu_sei_size = aux_data->
size;
2688 int ext_udu_sei_size = 0, sei_len = 0;
2690 uint8_t *sei_data = malloc(udu_sei_size * 3 / 2);
2693 memcpy(sei_data, (uint8_t *)aux_data->
data, udu_sei_size);
2695 sei_data, udu_sei_size);
2697 ext_udu_sei_size = udu_sei_size + emu_bytes_inserted;
2703 sei_len = 6 + ((udu_sei_size + 0xFE) / 0xFF) + ext_udu_sei_size + 1;
2709 sei_len = 7 + ((udu_sei_size + 0xFE) / 0xFF) + ext_udu_sei_size + 1;
2716 "sei_len %d exceeds maximum sei size %u, discarding it !\n",
2721 int payload_size = udu_sei_size;
2741 while (payload_size > 0)
2743 *dst++ = (payload_size > 0xFF ? 0xFF : (uint8_t)payload_size);
2744 payload_size -= 0xFF;
2748 memcpy(dst, sei_data, ext_udu_sei_size);
2749 dst += ext_udu_sei_size;
2770 int is_new_rois = 1;
2772 uint32_t self_size = 0;
2776 if (! self_size || aux_data->
size % self_size)
2779 "aux_data size %d self_size %u\n", aux_data->
size, self_size);
2783 int nb_roi = aux_data->
size / self_size;
2813 if (set_roi_map(p_enc_ctx, codec_format, aux_data, nb_roi,
2853 int32_t bitrate = *((int32_t *)aux_data->
data);
2863 "enc_change_params!\n");
2892 "enc_change_params!\n");
2915 should_send_sei_with_frame)
2952 const uint8_t *mdcv_data,
2953 const uint8_t *cll_data,
2954 const uint8_t *cc_data,
2955 const uint8_t *udu_data,
2956 const uint8_t *hdrp_data)
2964 uint8_t *dst = (uint8_t *)p_enc_frame->
p_data[3] +
2973 ni_log(
NI_LOG_TRACE,
"ni_logan_enc_copy_aux_data: keep reconfig space: %" PRId64
"\n",
3024 dst[0] = dst[1] = dst[2] = 0;
3053 memcpy(dst, cc_data, p_enc_frame->
sei_cc_len);
3089 if (!p_param || !p_ctx || !p_api_fme || reconfigCount < 0)
3092 __FUNCTION__, __LINE__);
3133 "intraQP %d intraPeriod %d repeatHeaders %d\n",
3165 snprintf(file_name, 64,
"%d", p_param->
reconf_hash[reconfigCount][1]);
3166 vui_file = fopen(file_name,
"rb");
3173 int nb_bytes_by_bits =
3177 if (nb_bytes != nb_bytes_by_bits)
3180 "specified %d bits (%d bytes) !\n", (
int)nb_bytes,
3181 p_param->
reconf_hash[reconfigCount][2], nb_bytes_by_bits);
3190 (
int)nb_bytes, p_param->
reconf_hash[reconfigCount][2]);
3213 "hvsQPEnable %d hvsQpScale %d vbvBufferSize %d mbLevelRcEnable "
3214 "%d fillerEnable %d maxFrameMode %d maxFrameArg %d\n",
3241 "minQpI %d maxQpI %d maxDeltaQp %d minQpP "
3242 "%d minQpB %d maxQpP %d maxQpB %d\n",
3268 "crfQpInt %d crfQpFraction %d crfIpRatioInt %d crfIpRatioFraction %d"
3269 "crfPbRatioInt %d crfPbRatioFraction %d\n",
3287 return reconfigCount;
3296 if (!p_param || !p_ctx || !p_api_fme || reconfigCount < 0)
3299 __FUNCTION__, __LINE__);
3304 return reconfigCount;
3329 return reconfigCount;
3350 for (i = 0; i < 3; i++) {
3351 uint32_t tmp = *state << 8;
3352 *state = tmp + *(p++);
3353 if (tmp == 0x100 || p == end)
3358 if (p[-1] > 1 ) p += 3;
3359 else if (p[-2] ) p += 2;
3360 else if (p[-3]|(p[-1]-1)) p++;
3367 p = ((p) < (end) ? (p - 4) : (end - 4));
3368 *state = (((uint32_t)(p)[0] << 24) | ((p)[1] << 16) | ((p)[2] << 8) | (p)[3]);
3386 static int ni_logan_extract_custom_sei(
const uint8_t *data,
3394 const uint8_t *udata;
3398 int index = start_index;
3417 ni_log(
NI_LOG_INFO,
"number of custom sei in current frame is out of limit(%d).\n",
3430 while ((index < size) && (data[index] == 255))
3432 sei_size += data[index++];
3440 sei_size += data[index++];
3450 udata = &data[index];
3456 for (i = 0; (i < (size - index)) && len < sei_size; i++)
3460 if (i >= 2 && udata[i - 2] == 0 && udata[i - 1] == 0 && udata[i] == 3)
3464 sei_data[len++] = udata[i];
3467 if (len != sei_size)
3470 "requied size:%d, actual size:%d.\n", sei_size, len);
3518 const uint8_t *ptr = NULL;
3519 const uint8_t *end = NULL;
3521 uint8_t chk_pkt = 0;
3527 if (!data || !p_api_ctx || !p_api_param)
3532 if (!p_api_ctx || !p_api_param)
3535 __FUNCTION__, p_api_ctx, p_api_param);
3558 nalu_type = stc & 0x1F;
3563 ret = ni_logan_extract_custom_sei(data, size, ptr + 1 - data, p_packet, sei_type, got_slice);
3581 nalu_type = (stc >> 1) & 0x3F;
3582 sei_type = *(ptr + 1);
3587 ret = ni_logan_extract_custom_sei(data, size, ptr + 2 - data, p_packet, sei_type, got_slice);
3624 nalu_type = stc & 0x1F;
3627 ((sei_type == custom_sei_type) || (got_slice && chk_pkt)))
3630 ret = ni_logan_extract_custom_sei(data, size, ptr + 1 - data, p_packet, sei_type, got_slice);
3653 nalu_type = (stc >> 1) & 0x3F;
3654 sei_type = *(ptr + 1);
3658 ((sei_type == custom_sei_type) || (got_slice && chk_pkt)))
3661 ret = ni_logan_extract_custom_sei(data, size, ptr + 2 - data, p_packet, sei_type, got_slice);
3723 int32_t cur_fps = 0, bit_rate = 0;
3748 memcpy(aux_data->
data, &bit_rate,
sizeof(int32_t));
3759 else if (pts < p_session_ctx->prev_pts)
void ni_logan_enc_reconfig_vfr(ni_logan_session_context_t *p_session_ctx, ni_logan_encoder_params_t *p_encoder_params, ni_logan_frame_t *ni_frame, int64_t pts, uint32_t timebase)
Fill reconfig vfr.
void ni_logan_enc_init_aux_params(ni_logan_session_data_io_t *p_api_fme)
Initialize auxiliary data that should be sent together with this frame to encoder based on the auxili...
const uint8_t * ni_logan_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
Find the next start code.
uint32_t ni_logan_enc_buffering_custom_sei(void *p_data, ni_logan_session_context_t *p_ctx, uint32_t index)
Buffered customer sei.
#define MAX_VPS_MAX_SUB_LAYERS
uint32_t ni_logan_enc_pic_timing_sei2(ni_logan_encoder_params_t *p_param, ni_logan_session_context_t *p_ctx, int is_i_or_idr, int is_idr, uint32_t frame_idx, int buf_len, uint8_t *p_buf)
Generate pic timing sei2.
void ni_logan_dec_retrieve_aux_data(ni_logan_frame_t *frame)
Retrieve auxiliary data (close caption, various SEI) associated with this frame that is returned by d...
#define SAMPLE_SPS_MAX_SUB_LAYERS_MINUS1
int ni_logan_detect_custom_sei(const uint8_t *data, int size, ni_logan_session_context_t *p_api_ctx, ni_logan_decoder_params_t *p_api_param, ni_logan_packet_t *p_packet)
detect custom SEI payload data in Packet data, custom SEI has two meanings: a. the SEI type is not in...
int ni_logan_enc_fill_reconfig_params(ni_logan_encoder_params_t *p_param, ni_logan_session_context_t *p_ctx, ni_logan_frame_t *p_api_fme, int reconfigCount)
Fill reconfig params.
int ni_logan_enc_fill_reconfig_vui(ni_logan_encoder_params_t *p_param, ni_logan_session_context_t *p_ctx, ni_logan_frame_t *p_api_fme, int reconfigCount, ni_aux_data_t *aux_data)
Fill reconfig vui.
uint32_t ni_logan_enc_buffering_period_sei(ni_logan_encoder_params_t *p_param, ni_logan_session_context_t *p_ctx, uint32_t frame_idx, int buf_len, uint8_t *p_buf)
Buffered period sei.
void ni_logan_enc_copy_aux_data(ni_logan_session_context_t *p_enc_ctx, ni_logan_frame_t *p_enc_frame, ni_logan_frame_t *p_dec_frame, ni_logan_codec_format_t codec_format, const uint8_t *mdcv_data, const uint8_t *cll_data, const uint8_t *cc_data, const uint8_t *udu_data, const uint8_t *hdrp_data)
Copy auxiliary data that should be sent together with this frame to encoder.
void ni_logan_set_vui(ni_logan_encoder_params_t *p_param, ni_logan_session_context_t *p_ctx, ni_color_primaries_t color_primaries, ni_color_transfer_characteristic_t color_trc, ni_color_space_t color_space, int video_full_range_flag, int sar_num, int sar_den, ni_logan_codec_format_t codec_format)
Set SPS VUI part of encoded stream header.
int ni_logan_should_send_sei_with_frame(ni_logan_session_context_t *p_enc_ctx, ni_logan_pic_type_t pic_type, ni_logan_encoder_params_t *p_param)
Whether SEI (HDR) should be sent together with this frame to encoder.
void ni_logan_reset_vui(ni_logan_encoder_params_t *p_param, ni_aux_data_t *aux_data, ni_logan_codec_format_t codec_format)
Reset vui info from decoder.
void ni_logan_enc_prep_aux_data(ni_logan_session_context_t *p_enc_ctx, ni_logan_frame_t *p_enc_frame, ni_logan_frame_t *p_dec_frame, ni_logan_codec_format_t codec_format, int should_send_sei_with_frame, uint8_t *mdcv_data, uint8_t *cll_data, uint8_t *cc_data, uint8_t *udu_data, uint8_t *hdrp_data)
Prepare auxiliary data that should be sent together with this frame to encoder based on the auxiliary...
NETINT audio/video related utility functions.
enum _ni_color_primaries ni_color_primaries_t
@ NI_LOGAN_HEVC_NAL_TRAIL_N
@ NI_LOGAN_HEVC_NAL_RSV_VCL31
@ NI_LOGAN_HEVC_NAL_SEI_PREFIX
enum _ni_color_transfer_characteristic ni_color_transfer_characteristic_t
enum _ni_hdr_plus_overlap_process_option ni_hdr_plus_overlap_process_option_t
enum _ni_color_space ni_color_space_t
@ NI_LOGAN_H264_NAL_SLICE
@ NI_LOGAN_H264_NAL_IDR_SLICE
void ni_bs_writer_put_ue(ni_bitstream_writer_t *stream, uint32_t data)
write unsigned Exp-Golomb bit string to bitstream, 2^32-2 at most.
void ni_bitstream_writer_init(ni_bitstream_writer_t *stream)
init a bitstream writer
void ni_bs_writer_copy(uint8_t *dst, const ni_bitstream_writer_t *stream)
copy bitstream data to dst Note: caller must ensure sufficient space in dst
void ni_bs_writer_align_zero(ni_bitstream_writer_t *stream)
align the bitstream with zero
void ni_bitstream_reader_init(ni_bitstream_reader_t *br, const uint8_t *data, int bit_size)
init a bitstream reader Note: bitstream_reader takes reading ownership of the data
uint32_t ni_bs_reader_get_bits(ni_bitstream_reader_t *br, int n)
read bits (up to 32) from the bitstream reader, after reader init
void ni_bs_writer_clear(ni_bitstream_writer_t *stream)
clear and reset bitstream
uint64_t ni_bs_writer_tell(const ni_bitstream_writer_t *const stream)
return the number of bits written to bitstream so far
void ni_bs_writer_put(ni_bitstream_writer_t *stream, uint32_t data, uint8_t bits)
write a specified number (<= 32) of bits to bitstream, buffer individual bits until a full byte is ma...
void ni_bs_reader_skip_bits(ni_bitstream_reader_t *br, int n)
skip a number of bits ahead in the bitstream reader
Utility functions to operate on bits in a bitstream.
Common NETINT definitions used by all modules.
@ NI_LOGAN_RETCODE_INVALID_PARAM
@ NI_LOGAN_RETCODE_ERROR_MEM_ALOC
@ NI_LOGAN_RETCODE_SUCCESS
@ NI_LOGAN_RETCODE_FAILURE
#define NI_LOGAN_INVALID_SEI_TYPE
#define NI_LOGAN_APP_ENC_FRAME_META_DATA_SIZE
#define NI_LOGAN_MAX_CUSTOM_SEI_CNT
#define NI_LOGAN_MAX_CUSTOM_SEI_SZ
int ni_logan_get_num_reorder_of_gop_structure(ni_logan_encoder_params_t *p_params)
Get GOP's max number of reorder frames.
ni_aux_data_t * ni_logan_frame_get_aux_data(const ni_logan_frame_t *frame, ni_aux_data_type_t type)
Retrieve from the frame auxiliary data of a given type if exists.
ni_aux_data_t * ni_logan_frame_new_aux_data_from_raw_data(ni_logan_frame_t *frame, ni_aux_data_type_t type, const uint8_t *raw_data, int data_size)
Add a new auxiliary data to a frame and copy in the raw data.
int ni_logan_get_num_ref_frame_of_gop_structure(ni_logan_encoder_params_t *p_params)
Get GOP's number of reference frames.
ni_aux_data_t * ni_logan_frame_new_aux_data(ni_logan_frame_t *frame, ni_aux_data_type_t type, int data_size)
Add a new auxiliary data to a frame.
struct _ni_logan_encoder_change_params_t ni_logan_encoder_change_params_t
This is a data structure for encoding parameters that have changed.
@ NI_FRAME_AUX_DATA_MASTERING_DISPLAY_METADATA
@ NI_FRAME_AUX_DATA_BITRATE
@ NI_FRAME_AUX_DATA_VUI_INFO
@ NI_FRAME_AUX_DATA_UDU_SEI
@ NI_FRAME_AUX_DATA_MIN_MAX_QP
@ NI_FRAME_AUX_DATA_HDR_PLUS
@ NI_FRAME_AUX_DATA_A53_CC
@ NI_FRAME_AUX_DATA_CONTENT_LIGHT_LEVEL
@ NI_FRAME_AUX_DATA_REGIONS_OF_INTEREST
@ NI_FRAME_AUX_DATA_LONG_TERM_REF
#define NI_CC_SEI_TRAILER_LEN
#define NI_LOGAN_MAX_VUI_SIZE
#define NI_LOGAN_QP_MID_POINT
@ LOGAN_XCODER_TEST_RECONF_BR
@ LOGAN_XCODER_TEST_RECONF_VUI_HRD
@ LOGAN_XCODER_TEST_RECONF_CRF
@ LOGAN_XCODER_TEST_RECONF_RC
@ LOGAN_XCODER_TEST_RECONF_INTRAPRD
@ LOGAN_XCODER_TEST_RECONF_RC_MIN_MAX_QP
@ LOGAN_XCODER_TEST_RECONF_OFF
@ LOGAN_XCODER_TEST_RECONF_LONG_TERM_REF
#define NI_LOGAN_INTRA_QP_RANGE
#define NI_CC_SEI_HDR_H264_LEN
@ NI_LOGAN_SET_CHANGE_PARAM_VUI_HRD_PARAM
@ NI_LOGAN_SET_CHANGE_PARAM_CRF
@ NI_LOGAN_SET_CHANGE_PARAM_RC_TARGET_RATE
@ NI_LOGAN_SET_CHANGE_PARAM_RC_MIN_MAX_QP
@ NI_LOGAN_SET_CHANGE_PARAM_INTRA_PARAM
@ NI_LOGAN_SET_CHANGE_PARAM_RC
union _ni_logan_enc_hevc_roi_custom_map ni_logan_enc_hevc_roi_custom_map_t
encoder HEVC ROI custom map (1 CTU = 64bits)
@ NI_LOGAN_CUSTOM_SEI_LOC_BEFORE_VCL
@ NI_LOGAN_CUSTOM_SEI_LOC_AFTER_VCL
#define NI_HDR10P_SEI_HDR_H264_LEN
union _ni_logan_enc_avc_roi_custom_map ni_logan_enc_avc_roi_custom_map_t
encoder AVC ROI custom map (1 MB = 8bits)
@ LOGAN_PIC_TYPE_FORCE_IDR
#define NI_LOGAN_MAX_SEI_DATA
#define NI_HDR10P_SEI_HDR_HEVC_LEN
#define NI_LOGAN_ENC_MAX_SEI_BUF_SIZE
enum _ni_logan_codec_format ni_logan_codec_format_t
This is an enumeration for supported codec formats.
@ NI_LOGAN_CODEC_FORMAT_H265
@ NI_LOGAN_CODEC_FORMAT_H264
#define NI_CC_SEI_HDR_HEVC_LEN
#define NI_RBSP_TRAILING_BITS_LEN
void ni_log(ni_log_level_t level, const char *fmt,...)
print log message using ni_log_callback
Definitions related to working with NI T-408 over NVME interface.
int ni_logan_insert_emulation_prevent_bytes(uint8_t *buf, int size)
Insert emulation prevention byte(s) as needed into the data buffer.
Exported utility routines definition.
uint8_t targeted_system_display_actual_peak_luminance_flag
uint8_t application_version
uint8_t num_cols_targeted_system_display_actual_peak_luminance
uint8_t num_rows_mastering_display_actual_peak_luminance
uint8_t num_rows_targeted_system_display_actual_peak_luminance
uint8_t num_cols_mastering_display_actual_peak_luminance
ni_rational_t targeted_system_display_maximum_luminance
ni_rational_t mastering_display_actual_peak_luminance[25][25]
uint8_t itu_t_t35_country_code
uint8_t mastering_display_actual_peak_luminance_flag
ni_hdr_plus_color_transform_params_t params[3]
ni_rational_t targeted_system_display_actual_peak_luminance[25][25]
uint32_t initial_cpb_removal_delay_length_minus1
uint32_t au_cpb_removal_delay_minus1
uint32_t dpb_output_delay_length_minus1
uint32_t au_cpb_removal_delay_length_minus1
ni_logan_custom_sei_t ni_custom_sei[NI_LOGAN_MAX_CUSTOM_SEI_CNT]
payload format of HDR SEI content light level info
ni_logan_gop_params_t pic_param[NI_LOGAN_MAX_GOP_NUM]
custom sei payload passthrough
ni_logan_custom_sei_location_t custom_sei_loc
uint8_t custom_sei_data[NI_LOGAN_MAX_CUSTOM_SEI_SZ]
decoded payload format of H.264 VUI
int8_t max_num_reorder_frames
uint8_t overscan_appropriate_flag
int8_t chroma_sample_loc_type_bottom_field
uint8_t vui_timing_info_present_flag
int8_t log2_max_mv_length_horizontal
uint8_t vcl_hrd_parameters_present_flag
uint32_t vui_num_units_in_tick
uint8_t motion_vectors_over_pic_boundaries_flag
int8_t max_bits_per_mincu_denom
int8_t max_dec_frame_buffering
uint8_t aspect_ratio_info_present_flag
uint8_t low_delay_hrd_flag
uint8_t pic_struct_present_flag
int8_t chroma_sample_loc_type_top_field
uint8_t video_full_range_flag
int8_t max_bytes_per_pic_denom
uint8_t overscan_info_present_flag
int8_t log2_max_mv_length_vertical
uint8_t bitstream_restriction_flag
uint8_t chroma_loc_info_present_flag
uint8_t transfer_characteristics
uint8_t fixed_frame_rate_flag
uint8_t colour_description_present_flag
uint8_t nal_hrd_parameters_present_flag
uint8_t matrix_coefficients
uint8_t video_signal_type_present_flag
decoded payload format of H.265 VUI
uint8_t vui_poc_proportional_to_timing_flag
uint8_t restricted_ref_pic_lists_flag
uint8_t overscan_appropriate_flag
int8_t chroma_sample_loc_type_bottom_field
uint8_t vui_timing_info_present_flag
uint8_t default_display_window_flag
ni_logan_dec_win_t def_disp_win
int8_t log2_max_mv_length_horizontal
uint32_t vui_num_units_in_tick
uint8_t motion_vectors_over_pic_boundaries_flag
int8_t max_bits_per_mincu_denom
uint8_t aspect_ratio_info_present_flag
uint8_t vui_hrd_parameters_present_flag
int8_t chroma_sample_loc_type_top_field
uint8_t neutral_chroma_indication_flag
uint8_t video_full_range_flag
int8_t max_bytes_per_pic_denom
uint8_t overscan_info_present_flag
uint8_t tiles_fixed_structure_flag
int8_t log2_max_mv_length_vertical
uint8_t bitstream_restriction_flag
int16_t vui_num_ticks_poc_diff_one_minus1
uint8_t chroma_loc_info_present_flag
int8_t min_spatial_segmentation_idc
uint8_t transfer_characteristics
uint8_t colour_description_present_flag
uint8_t frame_field_info_present_flag
uint8_t matrix_coefficients
uint8_t video_signal_type_present_flag
decoded payload format of HDR SEI mastering display colour volume
ni_logan_decoder_input_params_t dec_input_params
encoded payload format of HDR SEI mastering display colour volume
uint16_t display_primaries[3][2]
This is a data structure for encoding parameters that have changed.
int32_t crfPbRatioFraction
uint8_t vuiRbsp[NI_LOGAN_MAX_VUI_SIZE]
int32_t crfIpRatioFraction
uint32_t vuiDataSizeBytes
ni_logan_encoder_input_params_t enc_input_params
uint8_t ui8VuiRbsp[NI_LOGAN_MAX_VUI_SIZE]
uint32_t ui32VuiDataSizeBytes
uint32_t ui32VuiDataSizeBits
uint32_t pos_num_units_in_tick
uint8_t ui8LastVuiRbsp[NI_LOGAN_MAX_VUI_SIZE]
unsigned int sei_hdr_mastering_display_color_vol_offset
unsigned int sei_hdr_content_light_level_info_offset
uint8_t preferred_characteristics_data_len
uint32_t vui_num_units_in_tick
uint8_t separate_metadata
unsigned int sei_hdr_plus_len
uint32_t data_len[NI_LOGAN_MAX_NUM_DATA_POINTERS]
unsigned int sei_hdr_plus_offset
unsigned int extra_data_len
unsigned int sei_total_len
unsigned int sei_cc_offset
unsigned int sei_user_data_unreg_len
uint8_t use_cur_src_as_long_term_pic
ni_logan_codec_format_t src_codec
unsigned int sei_hdr_content_light_level_info_len
void * p_data[NI_LOGAN_MAX_NUM_DATA_POINTERS]
unsigned int sei_hdr_mastering_display_color_vol_len
int video_full_range_flag
unsigned int sei_user_data_unreg_offset
uint8_t use_long_term_ref
unsigned int sei_alt_transfer_characteristics_len
unsigned int sei_alt_transfer_characteristics_offset
uint8_t use_cur_src_as_long_term_pic
uint8_t use_long_term_ref
ni_logan_all_custom_sei_t * p_all_custom_sei
uint8_t itu_t_t35_hdr10p_sei_hdr_hevc[NI_HDR10P_SEI_HDR_HEVC_LEN]
ni_logan_encoder_change_params_t * enc_change_params
uint32_t count_frame_num_in_sec
uint8_t ui8_light_level_data[NI_LOGAN_LIGHT_LEVEL_DATA_SZ]
uint8_t ui8_mdcv_max_min_lum_data[NI_LOGAN_MDCV_LUM_DATA_SZ]
uint8_t buf_lone_sei[NI_LOGAN_MAX_SEI_DATA]
int mdcv_max_min_lum_data_len
ni_logan_enc_avc_roi_custom_map_t * avc_roi_map
uint8_t preferred_characteristics_data
int sei_hdr_content_light_level_info_len
int sei_hdr_mastering_display_color_vol_len
uint8_t sei_trailer[NI_CC_SEI_TRAILER_LEN]
uint32_t prev_fps
Params used in VFR mode Start///.
uint8_t itu_t_t35_cc_sei_hdr_hevc[NI_CC_SEI_HDR_HEVC_LEN]
void * p_master_display_meta_data
uint8_t itu_t_t35_cc_sei_hdr_h264[NI_CC_SEI_HDR_H264_LEN]
ni_logan_enc_hevc_roi_custom_map_t * hevc_roi_map
uint32_t last_change_framenum
uint8_t itu_t_t35_hdr10p_sei_hdr_h264[NI_HDR10P_SEI_HDR_H264_LEN]
ni_region_of_interest_t * av_rois
ni_logan_all_custom_sei_t * pkt_custom_sei[NI_LOGAN_FIFO_SZ]
uint8_t * hevc_sub_ctu_roi_buf
ni_hrd_params_t hrd_params
uint32_t passed_time_in_timebase_unit
union _ni_logan_session_data_io::@4 data
encoder AVC ROI custom map (1 MB = 8bits)
struct _ni_logan_enc_avc_roi_custom_map::@2 field
encoder HEVC ROI custom map (1 CTU = 64bits)
struct _ni_logan_enc_hevc_roi_custom_map::@1 field