Add frame rate parameter to SpatialLayer struct.
This will allow us to configure VP9 encoder to produce spatial layers with different frame rates. Bug: webrtc:9650 Change-Id: I3a9c58072003b8a8da681d5291d8f7ede7f52fa4 Reviewed-on: https://webrtc-review.googlesource.com/95427 Commit-Queue: Sergey Silkin <ssilkin@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Reviewed-by: Åsa Persson <asapersson@webrtc.org> Reviewed-by: Stefan Holmer <stefan@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24435}
This commit is contained in:
committed by
Commit Bot
parent
524e878121
commit
1946a3f0fe
@ -31,6 +31,7 @@ constexpr size_t kMaxPayloadSize = 1440;
|
||||
constexpr int kDefaultMinPixelsPerFrame = 320 * 180;
|
||||
constexpr int kWidth = 172;
|
||||
constexpr int kHeight = 144;
|
||||
constexpr float kFramerateFps = 30;
|
||||
} // namespace
|
||||
|
||||
class TestVp8Impl : public VideoCodecUnitTest {
|
||||
@ -182,57 +183,57 @@ TEST_F(TestVp8Impl, DecodedQpEqualsEncodedQp) {
|
||||
TEST_F(TestVp8Impl, ChecksSimulcastSettings) {
|
||||
codec_settings_.numberOfSimulcastStreams = 2;
|
||||
// Reslutions are not scaled by 2, temporal layers do not match.
|
||||
codec_settings_.simulcastStream[0] = {kWidth, kHeight, 2, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {kWidth, kHeight, 3, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[0] = {kWidth, kHeight, kFramerateFps, 2,
|
||||
4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {kWidth, kHeight, 30, 3,
|
||||
4000, 3000, 2000, 80};
|
||||
EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED,
|
||||
encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize));
|
||||
codec_settings_.numberOfSimulcastStreams = 3;
|
||||
// Reslutions are not scaled by 2.
|
||||
codec_settings_.simulcastStream[0] = {kWidth / 2, kHeight / 2, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {kWidth / 2, kHeight / 2, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {kWidth, kHeight, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[0] = {
|
||||
kWidth / 2, kHeight / 2, kFramerateFps, 1, 4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {
|
||||
kWidth / 2, kHeight / 2, kFramerateFps, 1, 4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {kWidth, kHeight, 30, 1,
|
||||
4000, 3000, 2000, 80};
|
||||
EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED,
|
||||
encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize));
|
||||
// Reslutions are not scaled by 2.
|
||||
codec_settings_.simulcastStream[0] = {kWidth, kHeight, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {kWidth, kHeight, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {kWidth, kHeight, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[0] = {kWidth, kHeight, kFramerateFps, 1,
|
||||
4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {kWidth, kHeight, kFramerateFps, 1,
|
||||
4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {kWidth, kHeight, kFramerateFps, 1,
|
||||
4000, 3000, 2000, 80};
|
||||
EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED,
|
||||
encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize));
|
||||
// Temporal layers do not match.
|
||||
codec_settings_.simulcastStream[0] = {kWidth / 4, kHeight / 4, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {kWidth / 2, kHeight / 2, 2, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {kWidth, kHeight, 3, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[0] = {
|
||||
kWidth / 4, kHeight / 4, kFramerateFps, 1, 4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {
|
||||
kWidth / 2, kHeight / 2, kFramerateFps, 2, 4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {kWidth, kHeight, kFramerateFps, 3,
|
||||
4000, 3000, 2000, 80};
|
||||
EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED,
|
||||
encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize));
|
||||
// Resolutions do not match codec config.
|
||||
codec_settings_.simulcastStream[0] = {
|
||||
kWidth / 4 + 1, kHeight / 4 + 1, 1, 4000, 3000, 2000, 80};
|
||||
kWidth / 4 + 1, kHeight / 4 + 1, kFramerateFps, 1, 4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {
|
||||
kWidth / 2 + 2, kHeight / 2 + 2, 1, 4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {kWidth + 4, kHeight + 4, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
kWidth / 2 + 2, kHeight / 2 + 2, kFramerateFps, 1, 4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {
|
||||
kWidth + 4, kHeight + 4, kFramerateFps, 1, 4000, 3000, 2000, 80};
|
||||
EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED,
|
||||
encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize));
|
||||
// Everything fine: scaling by 2, top resolution matches video, temporal
|
||||
// settings are the same for all layers.
|
||||
codec_settings_.simulcastStream[0] = {kWidth / 4, kHeight / 4, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {kWidth / 2, kHeight / 2, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {kWidth, kHeight, 1, 4000,
|
||||
3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[0] = {
|
||||
kWidth / 4, kHeight / 4, kFramerateFps, 1, 4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[1] = {
|
||||
kWidth / 2, kHeight / 2, kFramerateFps, 1, 4000, 3000, 2000, 80};
|
||||
codec_settings_.simulcastStream[2] = {kWidth, kHeight, kFramerateFps, 1,
|
||||
4000, 3000, 2000, 80};
|
||||
EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK,
|
||||
encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user