Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(409)

Side by Side Diff: webrtc/test/encoder_settings.cc

Issue 2351633002: Let ViEEncoder handle resolution changes. (Closed)
Patch Set: Rebased Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include "webrtc/test/encoder_settings.h" 10 #include "webrtc/test/encoder_settings.h"
11 11
12 #include <assert.h> 12 #include <algorithm>
13 #include <string.h> 13 #include <string>
14 14
15 #include "webrtc/test/fake_decoder.h" 15 #include "webrtc/test/fake_decoder.h"
16 #include "webrtc/video_decoder.h" 16 #include "webrtc/video_decoder.h"
17 17
18 namespace webrtc { 18 namespace webrtc {
19 namespace test { 19 namespace test {
20 std::vector<VideoStream> CreateVideoStreams(size_t num_streams) {
21 assert(num_streams > 0);
22 20
23 // Add more streams to the settings above with reasonable values if required. 21 const size_t DefaultVideoStreamFactory::kMaxNumberOfStreams;
24 static const size_t kNumSettings = 3; 22 constexpr int DefaultVideoStreamFactory::kMaxBitratePerStream[];
25 assert(num_streams <= kNumSettings); 23 constexpr int DefaultVideoStreamFactory::kDefaultMinBitratePerStream[];
26 24
27 std::vector<VideoStream> stream_settings(kNumSettings); 25 // static
26 std::vector<VideoStream> CreateVideoStreams(
27 int width,
28 int height,
29 const webrtc::VideoEncoderConfig& encoder_config) {
30 RTC_DCHECK(encoder_config.number_of_streams <=
31 DefaultVideoStreamFactory::kMaxNumberOfStreams);
28 32
29 stream_settings[0].width = 320; 33 std::vector<VideoStream> stream_settings(encoder_config.number_of_streams);
30 stream_settings[0].height = 180; 34 int bitrate_left_bps = encoder_config.max_bitrate_bps;
31 stream_settings[0].max_framerate = 30;
32 stream_settings[0].min_bitrate_bps = 50000;
33 stream_settings[0].target_bitrate_bps = stream_settings[0].max_bitrate_bps =
34 150000;
35 stream_settings[0].max_qp = 56;
36 35
37 stream_settings[1].width = 640; 36 for (size_t i = 0; i < encoder_config.number_of_streams; ++i) {
38 stream_settings[1].height = 360; 37 stream_settings[i].width =
39 stream_settings[1].max_framerate = 30; 38 (i + 1) * width / encoder_config.number_of_streams;
40 stream_settings[1].min_bitrate_bps = 200000; 39 stream_settings[i].height =
41 stream_settings[1].target_bitrate_bps = stream_settings[1].max_bitrate_bps = 40 (i + 1) * height / encoder_config.number_of_streams;
42 450000; 41 stream_settings[i].max_framerate = 30;
43 stream_settings[1].max_qp = 56; 42 stream_settings[i].min_bitrate_bps =
43 DefaultVideoStreamFactory::kDefaultMinBitratePerStream[i];
44 stream_settings[i].target_bitrate_bps = stream_settings[i].max_bitrate_bps =
45 std::min(bitrate_left_bps,
46 DefaultVideoStreamFactory::kMaxBitratePerStream[i]);
47 stream_settings[i].max_qp = 56;
48 bitrate_left_bps -= stream_settings[i].target_bitrate_bps;
49 }
44 50
45 stream_settings[2].width = 1280; 51 stream_settings[encoder_config.number_of_streams - 1].max_bitrate_bps +=
46 stream_settings[2].height = 720; 52 bitrate_left_bps;
47 stream_settings[2].max_framerate = 30; 53
48 stream_settings[2].min_bitrate_bps = 700000;
49 stream_settings[2].target_bitrate_bps = stream_settings[2].max_bitrate_bps =
50 1500000;
51 stream_settings[2].max_qp = 56;
52 stream_settings.resize(num_streams);
53 return stream_settings; 54 return stream_settings;
54 } 55 }
55 56
57 DefaultVideoStreamFactory::DefaultVideoStreamFactory() {}
58
59 std::vector<VideoStream> DefaultVideoStreamFactory::CreateEncoderStreams(
60 int width,
61 int height,
62 const webrtc::VideoEncoderConfig& encoder_config) {
63 return CreateVideoStreams(width, height, encoder_config);
64 }
65
66 void FillEncoderConfiguration(size_t num_streams,
67 VideoEncoderConfig* configuration) {
68 RTC_DCHECK_LE(num_streams, DefaultVideoStreamFactory::kMaxNumberOfStreams);
69
70 configuration->number_of_streams = num_streams;
71 configuration->encoder_stream_factory =
72 new rtc::RefCountedObject<DefaultVideoStreamFactory>();
73 configuration->max_bitrate_bps = 0;
74 for (size_t i = 0; i < num_streams; ++i) {
75 configuration->max_bitrate_bps +=
76 DefaultVideoStreamFactory::kMaxBitratePerStream[i];
77 }
78 }
79
56 VideoReceiveStream::Decoder CreateMatchingDecoder( 80 VideoReceiveStream::Decoder CreateMatchingDecoder(
57 const VideoSendStream::Config::EncoderSettings& encoder_settings) { 81 const VideoSendStream::Config::EncoderSettings& encoder_settings) {
58 VideoReceiveStream::Decoder decoder; 82 VideoReceiveStream::Decoder decoder;
59 decoder.payload_type = encoder_settings.payload_type; 83 decoder.payload_type = encoder_settings.payload_type;
60 decoder.payload_name = encoder_settings.payload_name; 84 decoder.payload_name = encoder_settings.payload_name;
61 if (encoder_settings.payload_name == "H264") { 85 if (encoder_settings.payload_name == "H264") {
62 decoder.decoder = VideoDecoder::Create(VideoDecoder::kH264); 86 decoder.decoder = VideoDecoder::Create(VideoDecoder::kH264);
63 } else if (encoder_settings.payload_name == "VP8") { 87 } else if (encoder_settings.payload_name == "VP8") {
64 decoder.decoder = VideoDecoder::Create(VideoDecoder::kVp8); 88 decoder.decoder = VideoDecoder::Create(VideoDecoder::kVp8);
65 } else if (encoder_settings.payload_name == "VP9") { 89 } else if (encoder_settings.payload_name == "VP9") {
66 decoder.decoder = VideoDecoder::Create(VideoDecoder::kVp9); 90 decoder.decoder = VideoDecoder::Create(VideoDecoder::kVp9);
67 } else { 91 } else {
68 decoder.decoder = new FakeDecoder(); 92 decoder.decoder = new FakeDecoder();
69 } 93 }
70 return decoder; 94 return decoder;
71 } 95 }
72 } // namespace test 96 } // namespace test
73 } // namespace webrtc 97 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698