13 #include "AgoraBase.h"
14 #include "AgoraOptional.h"
16 #if defined(WEBRTC_WIN)
17 #define NEW_LINE "\r\n"
31 #define SET_FROM(X) SetFrom(&X, change.X)
34 SET_FROM(frame_width);
35 SET_FROM(frame_height);
37 SET_FROM(start_bitrate);
38 SET_FROM(target_bitrate);
39 SET_FROM(min_bitrate);
40 SET_FROM(max_bitrate);
41 SET_FROM(orientation_mode);
42 SET_FROM(number_of_temporal_layers);
45 SET_FROM(h264_profile);
46 SET_FROM(adaptive_op_mode);
47 SET_FROM(number_of_spatial_layers);
48 SET_FROM(flexible_mode);
49 SET_FROM(interlayer_pred);
50 SET_FROM(num_of_encoder_cores);
51 SET_FROM(degradation_preference);
52 SET_FROM(fps_down_step);
53 SET_FROM(fps_up_step);
54 SET_FROM(vqc_version);
56 SET_FROM(denoising_on);
57 SET_FROM(automatic_resize_on);
58 SET_FROM(frame_dropping_on);
59 SET_FROM(has_intra_request);
60 SET_FROM(key_frame_interval);
61 SET_FROM(entropy_coding_mode_flag);
62 SET_FROM(loop_filter_disable_idc);
63 SET_FROM(background_detection_on);
64 SET_FROM(posted_frames_waiting_for_encode);
65 SET_FROM(bitrate_adjust_ratio);
66 SET_FROM(minbitrate_ratio);
67 SET_FROM(quality_scale_only_on_average_qp);
68 SET_FROM(h264_qp_thresholds_low);
69 SET_FROM(h264_qp_thresholds_high);
70 SET_FROM(enable_hw_encoder);
71 SET_FROM(enable_hw_decoder);
72 SET_FROM(hw_encoder_provider);
73 SET_FROM(av_dec_common_input_format);
74 SET_FROM(av_dec_common_output_format);
75 SET_FROM(av_dec_mmcss_class);
76 SET_FROM(av_enc_codec_type);
77 SET_FROM(av_enc_common_buffer_in_level);
78 SET_FROM(av_enc_common_buffer_out_level);
79 SET_FROM(av_enc_common_buffer_size);
80 SET_FROM(av_enc_common_format_constraint);
81 SET_FROM(av_enc_common_low_latency);
82 SET_FROM(av_enc_common_max_bit_rate);
83 SET_FROM(av_enc_common_mean_bit_rate);
84 SET_FROM(av_enc_common_mean_bit_rate_interval);
85 SET_FROM(av_enc_common_min_bit_rate);
86 SET_FROM(av_enc_common_quality);
87 SET_FROM(av_enc_common_quality_vs_speed);
88 SET_FROM(av_enc_common_rate_control_mode);
89 SET_FROM(av_enc_common_real_time);
90 SET_FROM(av_enc_common_stream_end_handling);
91 SET_FROM(av_enc_mux_output_stream_type);
92 SET_FROM(av_dec_video_acceleration_h264);
93 SET_FROM(av_dec_video_acceleration_mpeg2);
94 SET_FROM(av_dec_video_acceleration_vc1);
95 SET_FROM(av_dec_video_drop_pic_with_missing_ref);
96 SET_FROM(av_dec_video_fast_decode_mode);
97 SET_FROM(av_dec_video_input_scan_type);
98 SET_FROM(av_dec_video_pixel_aspect_ratio);
99 SET_FROM(av_dec_video_software_deinterlace_mode);
100 SET_FROM(av_dec_video_sw_power_level);
101 SET_FROM(av_dec_video_thumbnail_generation_mode);
102 SET_FROM(av_enc_input_video_system);
103 SET_FROM(av_enc_video_cbr_motion_tradeoff);
104 SET_FROM(av_enc_video_coded_video_access_unit_size);
105 SET_FROM(av_enc_video_default_upper_field_dominant);
106 SET_FROM(av_enc_video_display_dimension);
107 SET_FROM(av_enc_video_encode_dimension);
108 SET_FROM(av_enc_video_encode_offset_origin);
109 SET_FROM(av_enc_video_field_swap);
110 SET_FROM(av_enc_video_force_source_scan_type);
111 SET_FROM(av_enc_video_header_drop_frame);
112 SET_FROM(av_enc_video_header_frames);
113 SET_FROM(av_enc_video_header_hours);
114 SET_FROM(av_enc_video_header_minutes);
115 SET_FROM(av_enc_video_header_seconds);
116 SET_FROM(av_enc_video_input_chroma_resolution);
117 SET_FROM(av_enc_video_input_chroma_subsampling);
118 SET_FROM(av_enc_video_input_color_lighting);
119 SET_FROM(av_enc_video_input_color_nominal_range);
120 SET_FROM(av_enc_video_input_color_primaries);
121 SET_FROM(av_enc_video_input_color_transfer_function);
122 SET_FROM(av_enc_video_input_color_transfer_matrix);
123 SET_FROM(av_enc_video_inverse_telecine_enable);
124 SET_FROM(av_enc_video_inverse_telecine_threshold);
125 SET_FROM(av_enc_video_max_keyframe_distance);
126 SET_FROM(av_enc_video_no_of_fields_to_encode);
127 SET_FROM(av_enc_video_no_of_fields_to_skip);
128 SET_FROM(av_enc_video_output_chroma_resolution);
129 SET_FROM(av_enc_video_output_chroma_subsampling);
130 SET_FROM(av_enc_video_output_color_lighting);
131 SET_FROM(av_enc_video_output_color_nominal_range);
132 SET_FROM(av_enc_video_output_color_primaries);
133 SET_FROM(av_enc_video_output_color_transfer_function);
134 SET_FROM(av_enc_video_output_color_transfer_matrix);
135 SET_FROM(av_enc_video_output_frame_rate);
136 SET_FROM(av_enc_video_output_frame_rate_conversion);
137 SET_FROM(av_enc_video_output_scan_type);
138 SET_FROM(av_enc_video_pixel_aspect_ratio);
139 SET_FROM(av_enc_video_source_film_content);
140 SET_FROM(av_enc_video_source_is_bw);
141 SET_FROM(av_enc_mpv_add_seq_end_code);
142 SET_FROM(av_enc_mpv_default_b_picture_count);
143 SET_FROM(av_enc_mpv_frame_field_mode);
144 SET_FROM(av_enc_mpv_generate_header_pic_disp_ext);
145 SET_FROM(av_enc_mpv_generate_header_pic_ext);
146 SET_FROM(av_enc_mpv_generate_header_seq_disp_ext);
147 SET_FROM(av_enc_mpv_generate_header_seq_ext);
148 SET_FROM(av_enc_mpv_generate_header_seq_scale_ext);
149 SET_FROM(av_enc_mpvgop_open);
150 SET_FROM(av_enc_mpvgops_in_seq);
151 SET_FROM(av_enc_mpvgop_size);
152 SET_FROM(av_enc_mpv_intra_dc_precision);
153 SET_FROM(av_enc_mpv_intra_vlc_table);
154 SET_FROM(av_enc_mpv_level);
155 SET_FROM(av_enc_mpv_profile);
156 SET_FROM(av_enc_mpvq_scale_type);
157 SET_FROM(av_enc_mpv_quant_matrix_chroma_intra);
158 SET_FROM(av_enc_mpv_quant_matrix_chroma_non_intra);
159 SET_FROM(av_enc_mpv_quant_matrix_intra);
160 SET_FROM(av_enc_mpv_quant_matrix_non_intra);
161 SET_FROM(av_enc_mpv_scan_pattern);
162 SET_FROM(av_enc_mpv_scene_detection);
163 SET_FROM(av_enc_mpv_use_concealment_motion_vectors);
164 SET_FROM(vdm_not_override_lua_smallvideo_not_use_hwenc_policy);
165 SET_FROM(enable_video_sender_frame_dropper);
171 #define BEGIN_COMPARE() bool b = true
172 #define ADD_COMPARE(X) b = (b && (X == o.X))
173 #define END_COMPARE()
176 ADD_COMPARE(codec_type);
177 ADD_COMPARE(frame_width);
178 ADD_COMPARE(frame_height);
179 ADD_COMPARE(frame_rate);
180 ADD_COMPARE(start_bitrate);
181 ADD_COMPARE(target_bitrate);
182 ADD_COMPARE(min_bitrate);
183 ADD_COMPARE(orientation_mode);
184 ADD_COMPARE(number_of_temporal_layers);
185 ADD_COMPARE(sps_data);
186 ADD_COMPARE(pps_data);
187 ADD_COMPARE(h264_profile);
188 ADD_COMPARE(adaptive_op_mode);
189 ADD_COMPARE(number_of_spatial_layers);
190 ADD_COMPARE(flexible_mode);
191 ADD_COMPARE(interlayer_pred);
192 ADD_COMPARE(num_of_encoder_cores);
193 ADD_COMPARE(degradation_preference);
194 ADD_COMPARE(fps_down_step);
195 ADD_COMPARE(fps_up_step);
196 ADD_COMPARE(vqc_version);
197 ADD_COMPARE(complexity);
198 ADD_COMPARE(denoising_on);
199 ADD_COMPARE(automatic_resize_on);
200 ADD_COMPARE(frame_dropping_on);
201 ADD_COMPARE(has_intra_request);
202 ADD_COMPARE(key_frame_interval);
203 ADD_COMPARE(entropy_coding_mode_flag);
204 ADD_COMPARE(loop_filter_disable_idc);
205 ADD_COMPARE(background_detection_on);
206 ADD_COMPARE(posted_frames_waiting_for_encode);
207 ADD_COMPARE(bitrate_adjust_ratio);
208 ADD_COMPARE(minbitrate_ratio);
209 ADD_COMPARE(quality_scale_only_on_average_qp);
210 ADD_COMPARE(h264_qp_thresholds_low);
211 ADD_COMPARE(h264_qp_thresholds_high);
212 ADD_COMPARE(enable_hw_encoder);
213 ADD_COMPARE(enable_hw_decoder);
214 ADD_COMPARE(hw_encoder_provider);
215 ADD_COMPARE(av_dec_common_input_format);
216 ADD_COMPARE(av_dec_common_output_format);
217 ADD_COMPARE(av_dec_mmcss_class);
218 ADD_COMPARE(av_enc_codec_type);
219 ADD_COMPARE(av_enc_common_buffer_in_level);
220 ADD_COMPARE(av_enc_common_buffer_out_level);
221 ADD_COMPARE(av_enc_common_buffer_size);
222 ADD_COMPARE(av_enc_common_format_constraint);
223 ADD_COMPARE(av_enc_common_low_latency);
224 ADD_COMPARE(av_enc_common_max_bit_rate);
225 ADD_COMPARE(av_enc_common_mean_bit_rate);
226 ADD_COMPARE(av_enc_common_mean_bit_rate_interval);
227 ADD_COMPARE(av_enc_common_min_bit_rate);
228 ADD_COMPARE(av_enc_common_quality);
229 ADD_COMPARE(av_enc_common_quality_vs_speed);
230 ADD_COMPARE(av_enc_common_rate_control_mode);
231 ADD_COMPARE(av_enc_common_real_time);
232 ADD_COMPARE(av_enc_common_stream_end_handling);
233 ADD_COMPARE(av_enc_mux_output_stream_type);
234 ADD_COMPARE(av_dec_video_acceleration_h264);
235 ADD_COMPARE(av_dec_video_acceleration_mpeg2);
236 ADD_COMPARE(av_dec_video_acceleration_vc1);
237 ADD_COMPARE(av_dec_video_drop_pic_with_missing_ref);
238 ADD_COMPARE(av_dec_video_fast_decode_mode);
239 ADD_COMPARE(av_dec_video_input_scan_type);
240 ADD_COMPARE(av_dec_video_pixel_aspect_ratio);
241 ADD_COMPARE(av_dec_video_software_deinterlace_mode);
242 ADD_COMPARE(av_dec_video_sw_power_level);
243 ADD_COMPARE(av_dec_video_thumbnail_generation_mode);
244 ADD_COMPARE(av_enc_input_video_system);
245 ADD_COMPARE(av_enc_video_cbr_motion_tradeoff);
246 ADD_COMPARE(av_enc_video_coded_video_access_unit_size);
247 ADD_COMPARE(av_enc_video_default_upper_field_dominant);
248 ADD_COMPARE(av_enc_video_display_dimension);
249 ADD_COMPARE(av_enc_video_encode_dimension);
250 ADD_COMPARE(av_enc_video_encode_offset_origin);
251 ADD_COMPARE(av_enc_video_field_swap);
252 ADD_COMPARE(av_enc_video_force_source_scan_type);
253 ADD_COMPARE(av_enc_video_header_drop_frame);
254 ADD_COMPARE(av_enc_video_header_frames);
255 ADD_COMPARE(av_enc_video_header_hours);
256 ADD_COMPARE(av_enc_video_header_minutes);
257 ADD_COMPARE(av_enc_video_header_seconds);
258 ADD_COMPARE(av_enc_video_input_chroma_resolution);
259 ADD_COMPARE(av_enc_video_input_chroma_subsampling);
260 ADD_COMPARE(av_enc_video_input_color_lighting);
261 ADD_COMPARE(av_enc_video_input_color_nominal_range);
262 ADD_COMPARE(av_enc_video_input_color_primaries);
263 ADD_COMPARE(av_enc_video_input_color_transfer_function);
264 ADD_COMPARE(av_enc_video_input_color_transfer_matrix);
265 ADD_COMPARE(av_enc_video_inverse_telecine_enable);
266 ADD_COMPARE(av_enc_video_inverse_telecine_threshold);
267 ADD_COMPARE(av_enc_video_max_keyframe_distance);
268 ADD_COMPARE(av_enc_video_no_of_fields_to_encode);
269 ADD_COMPARE(av_enc_video_no_of_fields_to_skip);
270 ADD_COMPARE(av_enc_video_output_chroma_resolution);
271 ADD_COMPARE(av_enc_video_output_chroma_subsampling);
272 ADD_COMPARE(av_enc_video_output_color_lighting);
273 ADD_COMPARE(av_enc_video_output_color_nominal_range);
274 ADD_COMPARE(av_enc_video_output_color_primaries);
275 ADD_COMPARE(av_enc_video_output_color_transfer_function);
276 ADD_COMPARE(av_enc_video_output_color_transfer_matrix);
277 ADD_COMPARE(av_enc_video_output_frame_rate);
278 ADD_COMPARE(av_enc_video_output_frame_rate_conversion);
279 ADD_COMPARE(av_enc_video_output_scan_type);
280 ADD_COMPARE(av_enc_video_pixel_aspect_ratio);
281 ADD_COMPARE(av_enc_video_source_film_content);
282 ADD_COMPARE(av_enc_video_source_is_bw);
283 ADD_COMPARE(av_enc_mpv_add_seq_end_code);
284 ADD_COMPARE(av_enc_mpv_default_b_picture_count);
285 ADD_COMPARE(av_enc_mpv_frame_field_mode);
286 ADD_COMPARE(av_enc_mpv_generate_header_pic_disp_ext);
287 ADD_COMPARE(av_enc_mpv_generate_header_pic_ext);
288 ADD_COMPARE(av_enc_mpv_generate_header_seq_disp_ext);
289 ADD_COMPARE(av_enc_mpv_generate_header_seq_ext);
290 ADD_COMPARE(av_enc_mpv_generate_header_seq_scale_ext);
291 ADD_COMPARE(av_enc_mpvgop_open);
292 ADD_COMPARE(av_enc_mpvgops_in_seq);
293 ADD_COMPARE(av_enc_mpvgop_size);
294 ADD_COMPARE(av_enc_mpv_intra_dc_precision);
295 ADD_COMPARE(av_enc_mpv_intra_vlc_table);
296 ADD_COMPARE(av_enc_mpv_level);
297 ADD_COMPARE(av_enc_mpv_profile);
298 ADD_COMPARE(av_enc_mpvq_scale_type);
299 ADD_COMPARE(av_enc_mpv_quant_matrix_chroma_intra);
300 ADD_COMPARE(av_enc_mpv_quant_matrix_chroma_non_intra);
301 ADD_COMPARE(av_enc_mpv_quant_matrix_intra);
302 ADD_COMPARE(av_enc_mpv_quant_matrix_non_intra);
303 ADD_COMPARE(av_enc_mpv_scan_pattern);
304 ADD_COMPARE(av_enc_mpv_scene_detection);
305 ADD_COMPARE(av_enc_mpv_use_concealment_motion_vectors);
306 ADD_COMPARE(vdm_not_override_lua_smallvideo_not_use_hwenc_policy);
307 ADD_COMPARE(enable_video_sender_frame_dropper);
318 std::string ToString()
const {
319 #define ADD_STRING(X) ost << ToStringIfSet(#X, X)
321 std::ostringstream ost;
322 ADD_STRING(codec_type);
323 ADD_STRING(frame_width);
324 ADD_STRING(frame_height);
325 ADD_STRING(frame_rate);
326 ADD_STRING(start_bitrate);
327 ADD_STRING(target_bitrate);
328 ADD_STRING(min_bitrate);
329 ADD_STRING(max_bitrate);
330 ADD_STRING(orientation_mode);
331 ADD_STRING(number_of_temporal_layers);
332 ADD_STRING(sps_data);
333 ADD_STRING(pps_data);
334 ADD_STRING(h264_profile);
335 ADD_STRING(adaptive_op_mode);
336 ADD_STRING(number_of_spatial_layers);
337 ADD_STRING(flexible_mode);
338 ADD_STRING(interlayer_pred);
339 ADD_STRING(num_of_encoder_cores);
340 ADD_STRING(degradation_preference);
341 ADD_STRING(fps_down_step);
342 ADD_STRING(fps_up_step);
343 ADD_STRING(vqc_version);
344 ADD_STRING(complexity);
345 ADD_STRING(denoising_on);
346 ADD_STRING(automatic_resize_on);
347 ADD_STRING(frame_dropping_on);
348 ADD_STRING(has_intra_request);
349 ADD_STRING(key_frame_interval);
350 ADD_STRING(entropy_coding_mode_flag);
351 ADD_STRING(loop_filter_disable_idc);
352 ADD_STRING(background_detection_on);
353 ADD_STRING(posted_frames_waiting_for_encode);
354 ADD_STRING(bitrate_adjust_ratio);
355 ADD_STRING(minbitrate_ratio);
356 ADD_STRING(quality_scale_only_on_average_qp);
357 ADD_STRING(h264_qp_thresholds_low);
358 ADD_STRING(h264_qp_thresholds_high);
359 ADD_STRING(enable_hw_encoder);
360 ADD_STRING(enable_hw_decoder);
361 ADD_STRING(hw_encoder_provider);
362 ADD_STRING(av_dec_common_input_format);
363 ADD_STRING(av_dec_common_output_format);
364 ADD_STRING(av_dec_mmcss_class);
365 ADD_STRING(av_enc_codec_type);
366 ADD_STRING(av_enc_common_buffer_in_level);
367 ADD_STRING(av_enc_common_buffer_out_level);
368 ADD_STRING(av_enc_common_buffer_size);
369 ADD_STRING(av_enc_common_format_constraint);
370 ADD_STRING(av_enc_common_low_latency);
371 ADD_STRING(av_enc_common_max_bit_rate);
372 ADD_STRING(av_enc_common_mean_bit_rate);
373 ADD_STRING(av_enc_common_mean_bit_rate_interval);
374 ADD_STRING(av_enc_common_min_bit_rate);
375 ADD_STRING(av_enc_common_quality);
376 ADD_STRING(av_enc_common_quality_vs_speed);
377 ADD_STRING(av_enc_common_rate_control_mode);
378 ADD_STRING(av_enc_common_real_time);
379 ADD_STRING(av_enc_common_stream_end_handling);
380 ADD_STRING(av_enc_mux_output_stream_type);
381 ADD_STRING(av_dec_video_acceleration_h264);
382 ADD_STRING(av_dec_video_acceleration_mpeg2);
383 ADD_STRING(av_dec_video_acceleration_vc1);
384 ADD_STRING(av_dec_video_drop_pic_with_missing_ref);
385 ADD_STRING(av_dec_video_fast_decode_mode);
386 ADD_STRING(av_dec_video_input_scan_type);
387 ADD_STRING(av_dec_video_pixel_aspect_ratio);
388 ADD_STRING(av_dec_video_software_deinterlace_mode);
389 ADD_STRING(av_dec_video_sw_power_level);
390 ADD_STRING(av_dec_video_thumbnail_generation_mode);
391 ADD_STRING(av_enc_input_video_system);
392 ADD_STRING(av_enc_video_cbr_motion_tradeoff);
393 ADD_STRING(av_enc_video_coded_video_access_unit_size);
394 ADD_STRING(av_enc_video_default_upper_field_dominant);
395 ADD_STRING(av_enc_video_display_dimension);
396 ADD_STRING(av_enc_video_encode_dimension);
397 ADD_STRING(av_enc_video_encode_offset_origin);
398 ADD_STRING(av_enc_video_field_swap);
399 ADD_STRING(av_enc_video_force_source_scan_type);
400 ADD_STRING(av_enc_video_header_drop_frame);
401 ADD_STRING(av_enc_video_header_frames);
402 ADD_STRING(av_enc_video_header_hours);
403 ADD_STRING(av_enc_video_header_minutes);
404 ADD_STRING(av_enc_video_header_seconds);
405 ADD_STRING(av_enc_video_input_chroma_resolution);
406 ADD_STRING(av_enc_video_input_chroma_subsampling);
407 ADD_STRING(av_enc_video_input_color_lighting);
408 ADD_STRING(av_enc_video_input_color_nominal_range);
409 ADD_STRING(av_enc_video_input_color_primaries);
410 ADD_STRING(av_enc_video_input_color_transfer_function);
411 ADD_STRING(av_enc_video_input_color_transfer_matrix);
412 ADD_STRING(av_enc_video_inverse_telecine_enable);
413 ADD_STRING(av_enc_video_inverse_telecine_threshold);
414 ADD_STRING(av_enc_video_max_keyframe_distance);
415 ADD_STRING(av_enc_video_no_of_fields_to_encode);
416 ADD_STRING(av_enc_video_no_of_fields_to_skip);
417 ADD_STRING(av_enc_video_output_chroma_resolution);
418 ADD_STRING(av_enc_video_output_chroma_subsampling);
419 ADD_STRING(av_enc_video_output_color_lighting);
420 ADD_STRING(av_enc_video_output_color_nominal_range);
421 ADD_STRING(av_enc_video_output_color_primaries);
422 ADD_STRING(av_enc_video_output_color_transfer_function);
423 ADD_STRING(av_enc_video_output_color_transfer_matrix);
424 ADD_STRING(av_enc_video_output_frame_rate);
425 ADD_STRING(av_enc_video_output_frame_rate_conversion);
426 ADD_STRING(av_enc_video_output_scan_type);
427 ADD_STRING(av_enc_video_pixel_aspect_ratio);
428 ADD_STRING(av_enc_video_source_film_content);
429 ADD_STRING(av_enc_video_source_is_bw);
430 ADD_STRING(av_enc_mpv_add_seq_end_code);
431 ADD_STRING(av_enc_mpv_default_b_picture_count);
432 ADD_STRING(av_enc_mpv_frame_field_mode);
433 ADD_STRING(av_enc_mpv_generate_header_pic_disp_ext);
434 ADD_STRING(av_enc_mpv_generate_header_pic_ext);
435 ADD_STRING(av_enc_mpv_generate_header_seq_disp_ext);
436 ADD_STRING(av_enc_mpv_generate_header_seq_ext);
437 ADD_STRING(av_enc_mpv_generate_header_seq_scale_ext);
438 ADD_STRING(av_enc_mpvgop_open);
439 ADD_STRING(av_enc_mpvgops_in_seq);
440 ADD_STRING(av_enc_mpvgop_size);
441 ADD_STRING(av_enc_mpv_intra_dc_precision);
442 ADD_STRING(av_enc_mpv_intra_vlc_table);
443 ADD_STRING(av_enc_mpv_level);
444 ADD_STRING(av_enc_mpv_profile);
445 ADD_STRING(av_enc_mpvq_scale_type);
446 ADD_STRING(av_enc_mpv_quant_matrix_chroma_intra);
447 ADD_STRING(av_enc_mpv_quant_matrix_chroma_non_intra);
448 ADD_STRING(av_enc_mpv_quant_matrix_intra);
449 ADD_STRING(av_enc_mpv_quant_matrix_non_intra);
450 ADD_STRING(av_enc_mpv_scan_pattern);
451 ADD_STRING(av_enc_mpv_scene_detection);
452 ADD_STRING(av_enc_mpv_use_concealment_motion_vectors);
453 ADD_STRING(vdm_not_override_lua_smallvideo_not_use_hwenc_policy);
454 ADD_STRING(enable_video_sender_frame_dropper);
457 std::string ret = ost.str();
458 auto index = ret.rfind(
",");
459 if (index != ret.npos) {
460 ret = ret.substr(0, index);
464 return "{" NEW_LINE + ret +
"}";
881 Optional<bool> vdm_not_override_lua_smallvideo_not_use_hwenc_policy;
885 std::string ToStringIfSet(
const char* key,
const Optional<T>& val)
const {
889 str =
"\t\"" + str +
"\"";
891 str += std::to_string(*val);
902 str =
"\t\"" + str +
"\"";
911 std::string ToStringIfSet(
const char* key,
const Optional<bool>& val)
const {
915 str =
"\t\"" + str +
"\"";
917 str += *val ?
"true" :
"false";
924 template <
typename T>