From 021b93c63ed7940994b728c8c337ab2a12ccc44e Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Wed, 20 May 2020 14:55:11 +0300
Subject: [PATCH] Fix for lowering bitrate

---
 applications/gui/src/media_panel.cpp     | 3 ++-
 components/codecs/src/nvpipe_encoder.cpp | 9 +++++----
 components/streams/src/sender.cpp        | 2 ++
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/applications/gui/src/media_panel.cpp b/applications/gui/src/media_panel.cpp
index 2801e2dc8..4677cb7e0 100644
--- a/applications/gui/src/media_panel.cpp
+++ b/applications/gui/src/media_panel.cpp
@@ -42,7 +42,7 @@ MediaPanel::MediaPanel(ftl::gui::Screen *screen, ftl::gui::SourceWindow *sourceW
 	auto recordpopup = recordbutton_->popup();
 	recordpopup->setLayout(new GroupLayout());
 	recordpopup->setTheme(screen->toolbuttheme);
-	recordpopup->setAnchorHeight(150);
+	recordpopup->setAnchorHeight(180);
 	auto itembutton = new Button(recordpopup, "2D snapshot (.png)");
 	itembutton->setCallback([this]() {
 		_startRecording(RecordMode::Snapshot2D);
@@ -227,6 +227,7 @@ void MediaPanel::_startRecording(MediaPanel::RecordMode mode) {
 		record_mode_ = mode;
 		screen_->activeCamera()->startVideoRecording(filename, "");
 	} else if (mode == RecordMode::Live2D) {
+		record_mode_ = mode;
 		screen_->activeCamera()->startVideoRecording("", "ftl://live.utu.fi");
 	}
 }
diff --git a/components/codecs/src/nvpipe_encoder.cpp b/components/codecs/src/nvpipe_encoder.cpp
index 98d2c47a7..c9f662183 100644
--- a/components/codecs/src/nvpipe_encoder.cpp
+++ b/components/codecs/src/nvpipe_encoder.cpp
@@ -88,7 +88,7 @@ static uint64_t calculateBitrate(definition_t def, float ratescale) {
 	}
 
 	bitrate *= 1000.0f*1000.0f;
-	float minrate = 0.25f * bitrate;
+	float minrate = 0.05f * bitrate;
 	return uint64_t((bitrate - minrate)*ratescale + minrate);
 }
 
@@ -167,13 +167,14 @@ bool NvPipeEncoder::encode(const cv::cuda::GpuMat &in, ftl::codecs::Packet &pkt)
 
 	if (!_createEncoder(pkt, fmt)) return false;
 
-	if (isLossy(pkt.codec) && pkt.bitrate != last_bitrate_) {
+	// Doesn't seem to work
+	/*if (isLossy(pkt.codec) && pkt.bitrate != last_bitrate_) {
 		uint64_t bitrate = calculateBitrate(pkt.definition, float(pkt.bitrate)/255.0f) * pkt.frame_count;
 		const int fps = 1000/ftl::timer::getInterval();
 		LOG(INFO) << "Changing bitrate: " << bitrate;
 		NvPipe_SetBitrate(nvenc_, bitrate, fps);
 		last_bitrate_ = pkt.bitrate;
-	}
+	}*/
 
 	//LOG(INFO) << "NvPipe Encode: " << int(definition) << " " << in.cols;
 
@@ -262,7 +263,7 @@ static NvPipe_Format selectFormat(const Packet &pkt, format_t fmt) {
 bool NvPipeEncoder::_encoderMatch(const ftl::codecs::Packet &pkt, format_t fmt) {
 	return	compression_ == selectCompression(pkt, fmt) &&
 			format_ == selectFormat(pkt, fmt) &&
-			codec_ == selectCodec(pkt);
+			codec_ == selectCodec(pkt) && last_bitrate_ == pkt.bitrate;
 }
 
 bool NvPipeEncoder::_createEncoder(const ftl::codecs::Packet &pkt, format_t fmt) {
diff --git a/components/streams/src/sender.cpp b/components/streams/src/sender.cpp
index 8277a73d9..6f4cb3289 100644
--- a/components/streams/src/sender.cpp
+++ b/components/streams/src/sender.cpp
@@ -349,6 +349,8 @@ void Sender::_encodeChannel(ftl::rgbd::FrameSet &fs, Channel c, bool reset) {
 
 				FTL_Profile("Encoder",0.02);
 
+				LOG(INFO) << "Enocode bitrate: " << (int)pkt.bitrate;
+
 				if (enc->encode(sroi, pkt)) {
 					stream_->post(spkt, pkt);
 
-- 
GitLab