]> git.sesse.net Git - nageru/blobdiff - x264_encoder.cpp
Write 1.4.0 changelog.
[nageru] / x264_encoder.cpp
index f77549d98c7d749a0a29ae89a213a3f3e903a285..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>
 }
 
@@ -249,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) {