]> git.sesse.net Git - nageru/blobdiff - x264_encoder.cpp
Write 1.4.0 changelog.
[nageru] / x264_encoder.cpp
index 756d673bfb40b2adc6588992e3b78c2fd3b14d3f..f339e8c8b27e09e7b7f059d3d6d1108daccfd37d 100644 (file)
@@ -1,14 +1,20 @@
+#include "x264_encoder.h"
+
+#include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <x264.h>
+#include <cstdint>
 
 #include "defs.h"
 #include "flags.h"
 #include "mux.h"
 #include "timebase.h"
-#include "x264_encoder.h"
 #include "x264_speed_control.h"
 
 extern "C" {
+#include <libavcodec/avcodec.h>
 #include <libavformat/avformat.h>
 }
 
@@ -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, &param);
-               param.rc.i_bitrate = new_rate;
-               update_vbv_settings(&param);
-               x264_encoder_reconfig(x264, &param);
-               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, &param);
+                       param.rc.i_bitrate = new_rate;
+                       update_vbv_settings(&param);
+                       x264_encoder_reconfig(x264, &param);
+               }
        }
 
        if (speed_control) {