Skip to content

Commit f8ebfe3

Browse files
author
Paul Kerr
authored
Merge pull request #105 from caffeinetv/fix_adaptation
Disable frame adaptation. Split max and min bitrates.
2 parents 36d36b7 + e617261 commit f8ebfe3

File tree

4 files changed

+20
-14
lines changed

4 files changed

+20
-14
lines changed

build.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ setlocal
44
set BUILD_DIR64="build64"
55
set BUILD_DIR32="build32"
66
set DEST_DIR="dist"
7-
set PACKAGE_NAME="libcaffeine-v0.7-windows"
7+
set PACKAGE_NAME="libcaffeine-v0.6.5-windows"
88
set BIN_DIR64="%PACKAGE_NAME%\bin64"
99
set LIB_DIR64="%PACKAGE_NAME%\lib64"
1010
set BIN_DIR32="%PACKAGE_NAME%\bin32"

src/Broadcast.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -158,16 +158,16 @@ namespace caff {
158158
this->failedCallback = failedCallback;
159159
transitionState(State::Offline, State::Starting);
160160

161-
int targetBitrate = maxBitsPerSecond;
161+
int targetMaxBitrate = maxBitsPerSecond;
162162
int targetFps = maxFps;
163163
int targetFrameHeight = maxFrameHeight;
164164
int targetFrameWidth = maxFrameWidth;
165165

166166
auto info = getEncoderInfo(sharedCredentials);
167167
if (info.has_value()) {
168168
if (info->setting.targetBitrate > maxBitsPerSecond) {
169-
targetBitrate = info->setting.targetBitrate;
170-
LOG_DEBUG("Setting target bitrate: %d", targetBitrate);
169+
targetMaxBitrate = info->setting.targetBitrate;
170+
LOG_DEBUG("Setting target max bitrate: %d", targetMaxBitrate);
171171
// Only allow increases in framerate and frame size if bandwith cap has been raised
172172
if (info->setting.framerate > maxFps) {
173173
targetFps = info->setting.framerate;
@@ -183,13 +183,16 @@ namespace caff {
183183
}
184184
}
185185

186+
int targetMinBitrate = targetMaxBitrate * 3 / 4;
187+
186188
broadcastThread = std::thread([=] {
187189
setupSubscription();
188190

189191
LOG_DEBUG("Creating video track");
190192
videoCapturer = new VideoCapturer;
191193
videoCapturer->SetFramerateLimit(targetFps);
192194
videoCapturer->SetFrameSizeLimit(targetFrameWidth, targetFrameHeight);
195+
videoCapturer->EnableFrameAdaption(false);
193196
auto videoSource = factory->CreateVideoSource(videoCapturer);
194197
auto videoTrack = factory->CreateVideoTrack("external_video", videoSource);
195198

@@ -224,9 +227,9 @@ namespace caff {
224227
peerConnection->AddStream(mediaStream);
225228

226229
webrtc::BitrateSettings bitrateOptions;
227-
bitrateOptions.start_bitrate_bps = targetBitrate;
228-
bitrateOptions.max_bitrate_bps = targetBitrate;
229-
bitrateOptions.min_bitrate_bps = targetBitrate;
230+
bitrateOptions.start_bitrate_bps = targetMaxBitrate;
231+
bitrateOptions.max_bitrate_bps = targetMaxBitrate;
232+
bitrateOptions.min_bitrate_bps = targetMinBitrate;
230233
peerConnection->SetBitrate(bitrateOptions);
231234

232235
rtc::scoped_refptr<CreateSessionDescriptionObserver> creationObserver =
@@ -304,10 +307,9 @@ namespace caff {
304307
webrtc::RtpParameters params = sender->GetParameters();
305308

306309
if (params.encodings.size() > 0) {
307-
params.encodings[0].max_bitrate_bps = targetBitrate;
308-
params.encodings[0].min_bitrate_bps = targetBitrate;
309-
params.encodings[0].max_framerate = targetFps;
310-
LOG_DEBUG("Setting video RTP sender min/max bitrate to target bitrate: %d", targetBitrate);
310+
params.encodings[0].max_bitrate_bps = targetMaxBitrate;
311+
params.encodings[0].min_bitrate_bps = targetMinBitrate;
312+
LOG_DEBUG("Setting video RTP sender max bitrate to target bitrate: %d", targetMaxBitrate);
311313
}
312314

313315
webrtc::RTCError ret = sender->SetParameters(params);

src/VideoCapturer.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ namespace caff {
6464

6565
VideoCapturer::VideoCapturer()
6666
: interFrameLimit(1'000'000us / (maxFps + 2))
67-
, frameHeightMax(maxFrameHeight)
6867
, frameWidthMax(maxFrameWidth)
69-
{}
68+
, frameHeightMax(maxFrameHeight)
69+
{}
7070

7171
cricket::CaptureState VideoCapturer::Start(cricket::VideoFormat const & format) {
7272
SetCaptureFormat(&format);
@@ -169,7 +169,7 @@ namespace caff {
169169

170170
webrtc::VideoFrame frame(scaledBuffer, webrtc::kVideoRotation_0, translatedCameraTime);
171171

172-
OnFrame(frame, adaptedWidth, adaptedHeight);
172+
OnFrame(frame, width, height);
173173

174174
return scaledBuffer;
175175
}
@@ -201,4 +201,7 @@ namespace caff {
201201
frameWidthMax = width;
202202
}
203203

204+
void VideoCapturer::EnableFrameAdaption(bool adaptFrames) {
205+
set_enable_video_adapter(adaptFrames);
206+
}
204207
} // namespace caff

src/VideoCapturer.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ namespace caff {
3434

3535
void SetFramerateLimit(int32_t framerate);
3636
void SetFrameSizeLimit(int32_t width, int32_t height);
37+
void EnableFrameAdaption(bool adaptFrames);
3738

3839
private:
3940
std::chrono::microseconds lastTimestamp{ std::chrono::seconds::min() };

0 commit comments

Comments
 (0)