#define _X264ENCODE_H 1
#include <stdint.h>
-
+#include <x264.h>
#include <atomic>
#include <condition_variable>
#include <memory>
#include <mutex>
-#include <thread>
#include <queue>
+#include <string>
+#include <thread>
extern "C" {
-#include "x264.h"
#include <libavformat/avformat.h>
}
class Mux;
+class X264SpeedControl;
class X264Encoder {
public:
std::string get_global_headers() const { return global_headers; }
+ void change_bitrate(unsigned rate_kbit) {
+ new_bitrate_kbit = rate_kbit;
+ }
+
private:
struct QueuedFrame {
int64_t pts, duration;
std::thread encoder_thread;
std::atomic<bool> should_quit{false};
x264_t *x264;
+ std::unique_ptr<X264SpeedControl> speed_control;
+
+ std::atomic<unsigned> new_bitrate_kbit{0}; // 0 for no change.
// Protects everything below it.
std::mutex mu;