libxcoder 5.6.0
Loading...
Searching...
No Matches
ni_encode_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 encode_utils.h
24 *
25 * \brief Video encoding utility functions shared by Libxcoder API examples
26 ******************************************************************************/
27
28#pragma once
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#include "ni_generic_utils.h"
35#include "ni_device_api.h"
36
46
57
60
62 ni_session_data_io_t *p_in_data, void *yuv_buf,
63 int input_video_width, int input_video_height,
64 int is_last_input);
66 ni_session_data_io_t *p_dec_out_data,
67 ni_session_data_io_t *p_enc_in_data,
68 int input_video_width, int input_video_height);
70 ni_session_data_io_t *p_in_data,
71 int input_video_width, int input_video_height, int eos);
72
73int encoder_open_session(ni_session_context_t *p_enc_ctx, int dst_codec_format,
74 int iXcoderGUID, ni_xcoder_params_t *p_enc_params,
75 int width, int height, ni_pix_fmt_t pix_fmt,
76 bool check_zerocopy);
78 ni_session_data_io_t *p_in_data,
79 ni_session_data_io_t *p_out_data);
80
81void write_av1_ivf_header(ni_demo_context_t *p_ctx, uint32_t width, uint32_t height, uint32_t frame_num,
82 uint32_t frame_denom, FILE *p_file);
83void write_av1_ivf_packet(ni_demo_context_t *p_ctx, ni_packet_t *p_out_pkt, uint32_t meta_size, FILE *p_file);
84int write_av1_ivf_trailer(ni_demo_context_t *p_ctx, ni_packet_t *p_out_pkt, uint32_t meta_size, FILE *p_file);
86 ni_session_data_io_t *p_out_data, int output_video_width,
87 int output_video_height, FILE *p_file, ni_session_data_io_t * p_in_data);
89 ni_session_data_io_t *p_in_data,
90 ni_session_data_io_t *p_out_data);
92 ni_session_data_io_t *p_in_data,
93 ni_session_data_io_t *p_out_data,
94 int width, int height, ni_pix_fmt_t pix_fmt);
95
97 ni_session_context_t *enc_ctx_list,
98 ni_xcoder_params_t *p_api_param_list,
99 int output_total, char p_enc_conf_params[][2048],
100 char p_enc_conf_gop[][2048],
101 ni_frame_t *p_ni_frame, int width, int height,
102 int fps_num, int fps_den, int bitrate,
103 int codec_format, ni_pix_fmt_t pix_fmt,
104 int aspect_ratio_idc, int xcoder_guid,
105 niFrameSurface1_t *p_surface, int multi_thread,
106 bool check_zerocopy);
108 ni_session_context_t *enc_ctx_list,
109 ni_xcoder_params_t *p_api_param_list,
110 int output_total, char p_enc_conf_params[][2048],
111 char p_enc_conf_gop[][2048],
112 ni_frame_t *p_ni_frame, int width[], int height[],
113 int fps_num, int fps_den, int bitrate,
114 int codec_format, ni_pix_fmt_t pix_fmt[],
115 int aspect_ratio_idc, int xcoder_guid,
116 niFrameSurface1_t *p_surface[], int multi_thread,
117 bool check_zerocopy);
119 ni_session_context_t *enc_ctx_list,
120 ni_session_data_io_t *in_frame,
121 ni_session_data_io_t *pkt, int width, int height,
122 int output_total, FILE **pfs_list);
124 ni_session_context_t *enc_ctx_list,
125 ni_session_data_io_t *in_frame,
126 ni_session_data_io_t *pkt, int width[], int height[],
127 int output_total, FILE **pfs_list);
128
129void encoder_stat_report_and_close(ni_demo_context_t *p_ctx, ni_session_context_t *p_enc_ctx_list, int output_total);
130
131void *encoder_send_thread(void *args);
132void *encoder_receive_thread(void *args);
133
137int ni_pts_enqueue(ni_pts_queue *q, int64_t value);
138int ni_pts_dequeue(ni_pts_queue *q, int64_t *value);
139void ni_prepare_pts_queue(ni_pts_queue *q, ni_xcoder_params_t *enc_param, int pts_start);
140
141#ifdef __cplusplus
142}
143#endif
144
Public definitions for operating NETINT video processing devices for video processing.
ni_pix_fmt_t
int encoder_close_session(ni_session_context_t *p_enc_ctx, ni_session_data_io_t *p_in_data, ni_session_data_io_t *p_out_data)
encoder session close
int ni_pts_queue_full(ni_pts_queue *q)
int encoder_reinit_session(ni_session_context_t *p_enc_ctx, ni_session_data_io_t *p_in_data, ni_session_data_io_t *p_out_data)
Reopen or reconfig encoder upon sequence change.
void ni_init_pts_queue(ni_pts_queue *q)
int encoder_receive(ni_demo_context_t *p_ctx, ni_session_context_t *enc_ctx_list, ni_session_data_io_t *in_frame, ni_session_data_io_t *pkt, int width, int height, int output_total, FILE **pfs_list)
int encoder_open2(ni_demo_context_t *p_ctx, ni_session_context_t *enc_ctx_list, ni_xcoder_params_t *p_api_param_list, int output_total, char p_enc_conf_params[][2048], char p_enc_conf_gop[][2048], ni_frame_t *p_ni_frame, int width[], int height[], int fps_num, int fps_den, int bitrate, int codec_format, ni_pix_fmt_t pix_fmt[], int aspect_ratio_idc, int xcoder_guid, niFrameSurface1_t *p_surface[], int multi_thread, bool check_zerocopy)
int encoder_receive2(ni_demo_context_t *p_ctx, ni_session_context_t *enc_ctx_list, ni_session_data_io_t *in_frame, ni_session_data_io_t *pkt, int width[], int height[], int output_total, FILE **pfs_list)
int encoder_sequence_change(ni_session_context_t *p_enc_ctx, ni_session_data_io_t *p_in_data, ni_session_data_io_t *p_out_data, int width, int height, ni_pix_fmt_t pix_fmt)
void prep_reconf_demo_data(ni_demo_context_t *p_ctx, ni_session_context_t *p_enc_ctx, ni_frame_t *frame)
void write_av1_ivf_header(ni_demo_context_t *p_ctx, uint32_t width, uint32_t height, uint32_t frame_num, uint32_t frame_denom, FILE *p_file)
int encoder_send_data2(ni_demo_context_t *p_ctx, ni_session_context_t *p_enc_ctx, ni_session_data_io_t *p_dec_out_data, ni_session_data_io_t *p_enc_in_data, int input_video_width, int input_video_height)
int ni_pts_dequeue(ni_pts_queue *q, int64_t *value)
int ni_pts_queue_empty(ni_pts_queue *q)
struct enc_recv_param enc_recv_param_t
int encoder_open(ni_demo_context_t *p_ctx, ni_session_context_t *enc_ctx_list, ni_xcoder_params_t *p_api_param_list, int output_total, char p_enc_conf_params[][2048], char p_enc_conf_gop[][2048], ni_frame_t *p_ni_frame, int width, int height, int fps_num, int fps_den, int bitrate, int codec_format, ni_pix_fmt_t pix_fmt, int aspect_ratio_idc, int xcoder_guid, niFrameSurface1_t *p_surface, int multi_thread, bool check_zerocopy)
int ni_pts_enqueue(ni_pts_queue *q, int64_t value)
int encoder_receive_data(ni_demo_context_t *p_ctx, ni_session_context_t *p_enc_ctx, ni_session_data_io_t *p_out_data, int output_video_width, int output_video_height, FILE *p_file, ni_session_data_io_t *p_in_data)
Receive output data from encoder.
int encoder_send_data(ni_demo_context_t *p_ctx, ni_session_context_t *p_enc_ctx, ni_session_data_io_t *p_in_data, void *yuv_buf, int input_video_width, int input_video_height, int is_last_input)
Send encoder input data, read from input file.
void * encoder_receive_thread(void *args)
int encoder_open_session(ni_session_context_t *p_enc_ctx, int dst_codec_format, int iXcoderGUID, ni_xcoder_params_t *p_enc_params, int width, int height, ni_pix_fmt_t pix_fmt, bool check_zerocopy)
Encoder session open.
int write_av1_ivf_trailer(ni_demo_context_t *p_ctx, ni_packet_t *p_out_pkt, uint32_t meta_size, FILE *p_file)
void encoder_stat_report_and_close(ni_demo_context_t *p_ctx, ni_session_context_t *p_enc_ctx_list, int output_total)
void ni_prepare_pts_queue(ni_pts_queue *q, ni_xcoder_params_t *enc_param, int pts_start)
void set_demo_roi_map(ni_session_context_t *p_enc_ctx)
Set up hard coded demo ROI map.
void * encoder_send_thread(void *args)
struct enc_send_param enc_send_param_t
int encoder_send_data3(ni_demo_context_t *p_ctx, ni_session_context_t *p_enc_ctx, ni_session_data_io_t *p_in_data, int input_video_width, int input_video_height, int eos)
Send encoder input data, read from uploader instance hwframe.
void write_av1_ivf_packet(ni_demo_context_t *p_ctx, ni_packet_t *p_out_pkt, uint32_t meta_size, FILE *p_file)
ni_session_context_t * p_enc_ctx
ni_demo_context_t * p_ctx
ni_test_frame_list_t * frame_list
ni_session_context_t * p_enc_ctx
ni_demo_context_t * p_ctx
ni_test_frame_list_t * frame_list