X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=x264_encoder.cpp;h=f339e8c8b27e09e7b7f059d3d6d1108daccfd37d;hb=refs%2Fheads%2Fmultichannel_audio;hp=756d673bfb40b2adc6588992e3b78c2fd3b14d3f;hpb=b85c1986b7ea63534899e2eb589f9e0888d5ccda;p=nageru diff --git a/x264_encoder.cpp b/x264_encoder.cpp index 756d673..f339e8c 100644 --- a/x264_encoder.cpp +++ b/x264_encoder.cpp @@ -1,14 +1,20 @@ +#include "x264_encoder.h" + +#include +#include #include #include +#include +#include #include "defs.h" #include "flags.h" #include "mux.h" #include "timebase.h" -#include "x264_encoder.h" #include "x264_speed_control.h" extern "C" { +#include #include } @@ -183,7 +189,10 @@ void X264Encoder::init_x264() void X264Encoder::encoder_thread_func() { - nice(5); // Note that x264 further nices some of its threads. + if (nice(5) == -1) { // Note that x264 further nices some of its threads. + perror("nice()"); + // No exit; it's not fatal. + } init_x264(); bool frames_left; @@ -246,12 +255,18 @@ void X264Encoder::encode_frame(X264Encoder::QueuedFrame qf) // See if we have a new bitrate to change to. unsigned new_rate = new_bitrate_kbit.exchange(0); // Read and clear. if (new_rate != 0) { - x264_param_t param; - x264_encoder_parameters(x264, ¶m); - param.rc.i_bitrate = new_rate; - update_vbv_settings(¶m); - x264_encoder_reconfig(x264, ¶m); - printf("changing rate to %u\n", new_rate); + if (speed_control) { + speed_control->set_config_override_function([new_rate](x264_param_t *param) { + param->rc.i_bitrate = new_rate; + update_vbv_settings(param); + }); + } else { + x264_param_t param; + x264_encoder_parameters(x264, ¶m); + param.rc.i_bitrate = new_rate; + update_vbv_settings(¶m); + x264_encoder_reconfig(x264, ¶m); + } } if (speed_control) {