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

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
« no previous file with comments | « webrtc/test/encoder_settings.h ('k') | webrtc/test/frame_generator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 const int DefaultVideoStreamFactory::kMaxBitratePerStream[] = {150000, 450000,
25 assert(num_streams <= kNumSettings); 23 1500000};
24 const int DefaultVideoStreamFactory::kDefaultMinBitratePerStream[] = {
25 50000, 200000, 700000};
26 26
27 std::vector<VideoStream> stream_settings(kNumSettings); 27 // static
28 std::vector<VideoStream> CreateVideoStreams(
29 int width,
30 int height,
31 const webrtc::VideoEncoderConfig& encoder_config) {
32 RTC_DCHECK(encoder_config.number_of_streams <=
33 DefaultVideoStreamFactory::kMaxNumberOfStreams);
28 34
29 stream_settings[0].width = 320; 35 std::vector<VideoStream> stream_settings(encoder_config.number_of_streams);
30 stream_settings[0].height = 180; 36 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 37
37 stream_settings[1].width = 640; 38 for (size_t i = 0; i < encoder_config.number_of_streams; ++i) {
38 stream_settings[1].height = 360; 39 stream_settings[i].width =
39 stream_settings[1].max_framerate = 30; 40 (i + 1) * width / encoder_config.number_of_streams;
40 stream_settings[1].min_bitrate_bps = 200000; 41 stream_settings[i].height =
41 stream_settings[1].target_bitrate_bps = stream_settings[1].max_bitrate_bps = 42 (i + 1) * height / encoder_config.number_of_streams;
42 450000; 43 stream_settings[i].max_framerate = 30;
43 stream_settings[1].max_qp = 56; 44 stream_settings[i].min_bitrate_bps =
45 DefaultVideoStreamFactory::kDefaultMinBitratePerStream[i];
46 stream_settings[i].target_bitrate_bps = stream_settings[i].max_bitrate_bps =
47 std::min(bitrate_left_bps,
48 DefaultVideoStreamFactory::kMaxBitratePerStream[i]);
49 stream_settings[i].max_qp = 56;
50 bitrate_left_bps -= stream_settings[i].target_bitrate_bps;
51 }
44 52
45 stream_settings[2].width = 1280; 53 stream_settings[encoder_config.number_of_streams - 1].max_bitrate_bps +=
46 stream_settings[2].height = 720; 54 bitrate_left_bps;
47 stream_settings[2].max_framerate = 30; 55
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; 56 return stream_settings;
54 } 57 }
55 58
59 DefaultVideoStreamFactory::DefaultVideoStreamFactory() {}
60
61 std::vector<VideoStream> DefaultVideoStreamFactory::CreateEncoderStreams(
62 int width,
63 int height,
64 const webrtc::VideoEncoderConfig& encoder_config) {
65 return CreateVideoStreams(width, height, encoder_config);
66 }
67
68 void FillEncoderConfiguration(size_t num_streams,
69 VideoEncoderConfig* configuration) {
70 RTC_DCHECK_LE(num_streams, DefaultVideoStreamFactory::kMaxNumberOfStreams);
71
72 configuration->number_of_streams = num_streams;
73 configuration->video_stream_factory =
74 new rtc::RefCountedObject<DefaultVideoStreamFactory>();
75 configuration->max_bitrate_bps = 0;
76 for (size_t i = 0; i < num_streams; ++i) {
77 configuration->max_bitrate_bps +=
78 DefaultVideoStreamFactory::kMaxBitratePerStream[i];
79 }
80 }
81
56 VideoReceiveStream::Decoder CreateMatchingDecoder( 82 VideoReceiveStream::Decoder CreateMatchingDecoder(
57 const VideoSendStream::Config::EncoderSettings& encoder_settings) { 83 const VideoSendStream::Config::EncoderSettings& encoder_settings) {
58 VideoReceiveStream::Decoder decoder; 84 VideoReceiveStream::Decoder decoder;
59 decoder.payload_type = encoder_settings.payload_type; 85 decoder.payload_type = encoder_settings.payload_type;
60 decoder.payload_name = encoder_settings.payload_name; 86 decoder.payload_name = encoder_settings.payload_name;
61 if (encoder_settings.payload_name == "H264") { 87 if (encoder_settings.payload_name == "H264") {
62 decoder.decoder = VideoDecoder::Create(VideoDecoder::kH264); 88 decoder.decoder = VideoDecoder::Create(VideoDecoder::kH264);
63 } else if (encoder_settings.payload_name == "VP8") { 89 } else if (encoder_settings.payload_name == "VP8") {
64 decoder.decoder = VideoDecoder::Create(VideoDecoder::kVp8); 90 decoder.decoder = VideoDecoder::Create(VideoDecoder::kVp8);
65 } else if (encoder_settings.payload_name == "VP9") { 91 } else if (encoder_settings.payload_name == "VP9") {
66 decoder.decoder = VideoDecoder::Create(VideoDecoder::kVp9); 92 decoder.decoder = VideoDecoder::Create(VideoDecoder::kVp9);
67 } else { 93 } else {
68 decoder.decoder = new FakeDecoder(); 94 decoder.decoder = new FakeDecoder();
69 } 95 }
70 return decoder; 96 return decoder;
71 } 97 }
72 } // namespace test 98 } // namespace test
73 } // namespace webrtc 99 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/test/encoder_settings.h ('k') | webrtc/test/frame_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698