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

Side by Side Diff: webrtc/video/video_send_stream_tests.cc

Issue 1492783002: Revert of Add tests for vp9 (non-flexible mode) using different spatial and temporal configurations. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years 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/modules/video_coding/codecs/vp9/vp9_impl.cc ('k') | no next file » | 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) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 <algorithm> // max 10 #include <algorithm> // max
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 const VideoFrame& frame2); 51 const VideoFrame& frame2);
52 void ExpectEqualFramesVector(const std::vector<VideoFrame>& frames1, 52 void ExpectEqualFramesVector(const std::vector<VideoFrame>& frames1,
53 const std::vector<VideoFrame>& frames2); 53 const std::vector<VideoFrame>& frames2);
54 VideoFrame CreateVideoFrame(int width, int height, uint8_t data); 54 VideoFrame CreateVideoFrame(int width, int height, uint8_t data);
55 55
56 class VideoSendStreamTest : public test::CallTest { 56 class VideoSendStreamTest : public test::CallTest {
57 protected: 57 protected:
58 void TestNackRetransmission(uint32_t retransmit_ssrc, 58 void TestNackRetransmission(uint32_t retransmit_ssrc,
59 uint8_t retransmit_payload_type); 59 uint8_t retransmit_payload_type);
60 void TestPacketFragmentationSize(VideoFormat format, bool with_fec); 60 void TestPacketFragmentationSize(VideoFormat format, bool with_fec);
61
62 void TestVp9NonFlexMode(uint8_t num_temporal_layers,
63 uint8_t num_spatial_layers);
64 }; 61 };
65 62
66 TEST_F(VideoSendStreamTest, CanStartStartedStream) { 63 TEST_F(VideoSendStreamTest, CanStartStartedStream) {
67 Call::Config call_config; 64 Call::Config call_config;
68 CreateSenderCall(call_config); 65 CreateSenderCall(call_config);
69 66
70 test::NullTransport transport; 67 test::NullTransport transport;
71 CreateSendConfig(1, &transport); 68 CreateSendConfig(1, &transport);
72 CreateStreams(); 69 CreateStreams();
73 send_stream_->Start(); 70 send_stream_->Start();
(...skipping 1713 matching lines...) Expand 10 before | Expand all | Expand 10 after
1787 const std::vector<VideoReceiveStream*>& receive_streams) override { 1784 const std::vector<VideoReceiveStream*>& receive_streams) override {
1788 send_stream_ = send_stream; 1785 send_stream_ = send_stream;
1789 } 1786 }
1790 1787
1791 VideoSendStream* send_stream_; 1788 VideoSendStream* send_stream_;
1792 } test; 1789 } test;
1793 1790
1794 RunBaseTest(&test, FakeNetworkPipe::Config()); 1791 RunBaseTest(&test, FakeNetworkPipe::Config());
1795 } 1792 }
1796 1793
1797 class Vp9HeaderObserver : public test::SendTest { 1794 class VP9HeaderObeserver : public test::SendTest {
1798 public: 1795 public:
1799 Vp9HeaderObserver() 1796 VP9HeaderObeserver()
1800 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), 1797 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs),
1801 vp9_encoder_(VP9Encoder::Create()), 1798 vp9_encoder_(VP9Encoder::Create()),
1802 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()), 1799 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()) {
1803 packets_sent_(0), 1800 vp9_settings_.numberOfTemporalLayers = 1;
1804 frames_sent_(0) {} 1801 vp9_settings_.numberOfSpatialLayers = 2;
1802 }
1805 1803
1806 virtual void ModifyConfigsHook( 1804 virtual void ModifyConfigsHook(
1807 VideoSendStream::Config* send_config, 1805 VideoSendStream::Config* send_config,
1808 std::vector<VideoReceiveStream::Config>* receive_configs, 1806 std::vector<VideoReceiveStream::Config>* receive_configs,
1809 VideoEncoderConfig* encoder_config) {} 1807 VideoEncoderConfig* encoder_config) {}
1810 1808
1811 virtual void InspectHeader(const RTPVideoHeaderVP9& vp9) = 0; 1809 virtual void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) = 0;
1812 1810
1813 private: 1811 private:
1814 const int kVp9PayloadType = 105; 1812 const int kVp9PayloadType = 105;
1815 1813
1816 void ModifyConfigs(VideoSendStream::Config* send_config, 1814 void ModifyConfigs(VideoSendStream::Config* send_config,
1817 std::vector<VideoReceiveStream::Config>* receive_configs, 1815 std::vector<VideoReceiveStream::Config>* receive_configs,
1818 VideoEncoderConfig* encoder_config) override { 1816 VideoEncoderConfig* encoder_config) override {
1819 encoder_config->encoder_specific_settings = &vp9_settings_; 1817 encoder_config->encoder_specific_settings = &vp9_settings_;
1818 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
1820 send_config->encoder_settings.encoder = vp9_encoder_.get(); 1819 send_config->encoder_settings.encoder = vp9_encoder_.get();
1821 send_config->encoder_settings.payload_name = "VP9"; 1820 send_config->encoder_settings.payload_name = "VP9";
1822 send_config->encoder_settings.payload_type = kVp9PayloadType; 1821 send_config->encoder_settings.payload_type = kVp9PayloadType;
1823 ModifyConfigsHook(send_config, receive_configs, encoder_config); 1822 ModifyConfigsHook(send_config, receive_configs, encoder_config);
1824 EXPECT_EQ(1u, encoder_config->streams.size());
1825 encoder_config->streams[0].temporal_layer_thresholds_bps.resize(
1826 vp9_settings_.numberOfTemporalLayers - 1);
1827 encoder_config_ = *encoder_config;
1828 } 1823 }
1829 1824
1830 void PerformTest() override { 1825 void PerformTest() override {
1831 EXPECT_EQ(kEventSignaled, Wait()) 1826 EXPECT_EQ(kEventSignaled, Wait())
1832 << "Test timed out waiting for VP9 packet"; 1827 << "Test timed out waiting for VP9 packet";
1833 } 1828 }
1834 1829
1835 Action OnSendRtp(const uint8_t* packet, size_t length) override { 1830 Action OnSendRtp(const uint8_t* packet, size_t length) override {
1836 RTPHeader header; 1831 RTPHeader header;
1837 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 1832 EXPECT_TRUE(parser_->Parse(packet, length, &header));
1838 1833
1839 EXPECT_EQ(kVp9PayloadType, header.payloadType); 1834 if (header.payloadType == kVp9PayloadType) {
1840 const uint8_t* payload = packet + header.headerLength; 1835 RtpDepacketizerVp9 vp9depacketizer;
1841 size_t payload_length = length - header.headerLength - header.paddingLength; 1836 RtpDepacketizer::ParsedPayload vp9payload;
1837 const uint8_t* vp9_packet = packet + header.headerLength;
1838 size_t payload_length =
1839 length - header.headerLength - header.paddingLength;
1842 1840
1843 bool new_packet = packets_sent_ == 0 || 1841 if (payload_length > 0) {
1844 IsNewerSequenceNumber(header.sequenceNumber, 1842 bool parse_vp9header_successful =
1845 last_header_.sequenceNumber); 1843 vp9depacketizer.Parse(&vp9payload, vp9_packet, payload_length);
1846 if (payload_length > 0 && new_packet) { 1844 bool is_vp9_codec_type =
1847 RtpDepacketizer::ParsedPayload parsed; 1845 vp9payload.type.Video.codec == RtpVideoCodecTypes::kRtpVideoVp9;
1848 RtpDepacketizerVp9 depacketizer; 1846 EXPECT_TRUE(parse_vp9header_successful);
1849 EXPECT_TRUE(depacketizer.Parse(&parsed, payload, payload_length)); 1847 EXPECT_TRUE(is_vp9_codec_type);
1850 EXPECT_EQ(RtpVideoCodecTypes::kRtpVideoVp9, parsed.type.Video.codec);
1851 // Verify common fields for all configurations.
1852 VerifyCommonHeader(parsed.type.Video.codecHeader.VP9);
1853 CompareConsecutiveFrames(header, parsed.type.Video);
1854 // Verify configuration specific settings.
1855 InspectHeader(parsed.type.Video.codecHeader.VP9);
1856 1848
1857 ++packets_sent_; 1849 RTPVideoHeaderVP9* vp9videoHeader =
1858 if (header.markerBit) { 1850 &vp9payload.type.Video.codecHeader.VP9;
1859 ++frames_sent_; 1851 if (parse_vp9header_successful && is_vp9_codec_type) {
1852 InspectHeader(vp9videoHeader);
1853 } else {
1854 observation_complete_->Set();
1855 }
1860 } 1856 }
1861 last_header_ = header;
1862 last_vp9_ = parsed.type.Video.codecHeader.VP9;
1863 } 1857 }
1858
1864 return SEND_PACKET; 1859 return SEND_PACKET;
1865 } 1860 }
1866 1861
1867 protected: 1862 protected:
1868 bool ContinuousPictureId(const RTPVideoHeaderVP9& vp9) const {
1869 if (last_vp9_.picture_id > vp9.picture_id) {
1870 return vp9.picture_id == 0; // Wrap.
1871 } else {
1872 return vp9.picture_id == last_vp9_.picture_id + 1;
1873 }
1874 }
1875
1876 void VerifySpatialIdxWithinFrame(const RTPVideoHeaderVP9& vp9) const {
1877 if (frames_sent_ == 0)
1878 return;
1879
1880 bool new_layer = vp9.spatial_idx != last_vp9_.spatial_idx;
1881 EXPECT_EQ(new_layer, vp9.beginning_of_frame);
1882 EXPECT_EQ(new_layer, last_vp9_.end_of_frame);
1883 EXPECT_EQ(new_layer ? last_vp9_.spatial_idx + 1 : last_vp9_.spatial_idx,
1884 vp9.spatial_idx);
1885 }
1886
1887 void VerifyFixedTemporalLayerStructure(const RTPVideoHeaderVP9& vp9,
1888 uint8_t num_layers) const {
1889 switch (num_layers) {
1890 case 0:
1891 VerifyTemporalLayerStructure0(vp9);
1892 break;
1893 case 1:
1894 VerifyTemporalLayerStructure1(vp9);
1895 break;
1896 case 2:
1897 VerifyTemporalLayerStructure2(vp9);
1898 break;
1899 case 3:
1900 VerifyTemporalLayerStructure3(vp9);
1901 break;
1902 default:
1903 RTC_NOTREACHED();
1904 }
1905 }
1906
1907 void VerifyTemporalLayerStructure0(const RTPVideoHeaderVP9& vp9) const {
1908 EXPECT_EQ(kNoTl0PicIdx, vp9.tl0_pic_idx);
1909 EXPECT_EQ(kNoTemporalIdx, vp9.temporal_idx); // no tid
1910 EXPECT_FALSE(vp9.temporal_up_switch);
1911 }
1912
1913 void VerifyTemporalLayerStructure1(const RTPVideoHeaderVP9& vp9) const {
1914 EXPECT_NE(kNoTl0PicIdx, vp9.tl0_pic_idx);
1915 EXPECT_EQ(0, vp9.temporal_idx); // 0,0,0,...
1916 EXPECT_FALSE(vp9.temporal_up_switch);
1917 }
1918
1919 void VerifyTemporalLayerStructure2(const RTPVideoHeaderVP9& vp9) const {
1920 EXPECT_NE(kNoTl0PicIdx, vp9.tl0_pic_idx);
1921 EXPECT_GE(vp9.temporal_idx, 0); // 0,1,0,1,... (tid reset on I-frames).
1922 EXPECT_LE(vp9.temporal_idx, 1);
1923 EXPECT_EQ(vp9.temporal_idx > 0, vp9.temporal_up_switch);
1924 if (IsNewPictureId(vp9)) {
1925 uint8_t expected_tid =
1926 (!vp9.inter_pic_predicted || last_vp9_.temporal_idx == 1) ? 0 : 1;
1927 EXPECT_EQ(expected_tid, vp9.temporal_idx);
1928 }
1929 }
1930
1931 void VerifyTemporalLayerStructure3(const RTPVideoHeaderVP9& vp9) const {
1932 EXPECT_NE(kNoTl0PicIdx, vp9.tl0_pic_idx);
1933 EXPECT_GE(vp9.temporal_idx, 0); // 0,2,1,2,... (tid reset on I-frames).
1934 EXPECT_LE(vp9.temporal_idx, 2);
1935 if (IsNewPictureId(vp9) && vp9.inter_pic_predicted) {
1936 EXPECT_NE(vp9.temporal_idx, last_vp9_.temporal_idx);
1937 switch (vp9.temporal_idx) {
1938 case 0:
1939 EXPECT_EQ(2, last_vp9_.temporal_idx);
1940 EXPECT_FALSE(vp9.temporal_up_switch);
1941 break;
1942 case 1:
1943 EXPECT_EQ(2, last_vp9_.temporal_idx);
1944 EXPECT_TRUE(vp9.temporal_up_switch);
1945 break;
1946 case 2:
1947 EXPECT_EQ(last_vp9_.temporal_idx == 0, vp9.temporal_up_switch);
1948 break;
1949 }
1950 }
1951 }
1952
1953 void VerifyTl0Idx(const RTPVideoHeaderVP9& vp9) const {
1954 if (vp9.tl0_pic_idx == kNoTl0PicIdx)
1955 return;
1956
1957 uint8_t expected_tl0_idx = last_vp9_.tl0_pic_idx;
1958 if (vp9.temporal_idx == 0)
1959 ++expected_tl0_idx;
1960 EXPECT_EQ(expected_tl0_idx, vp9.tl0_pic_idx);
1961 }
1962
1963 bool IsNewPictureId(const RTPVideoHeaderVP9& vp9) const {
1964 return frames_sent_ > 0 && (vp9.picture_id != last_vp9_.picture_id);
1965 }
1966
1967 // Flexible mode (F=1): Non-flexible mode (F=0):
1968 //
1969 // +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
1970 // |I|P|L|F|B|E|V|-| |I|P|L|F|B|E|V|-|
1971 // +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
1972 // I: |M| PICTURE ID | I: |M| PICTURE ID |
1973 // +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
1974 // M: | EXTENDED PID | M: | EXTENDED PID |
1975 // +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
1976 // L: | T |U| S |D| L: | T |U| S |D|
1977 // +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
1978 // P,F: | P_DIFF |X|N| | TL0PICIDX |
1979 // +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
1980 // X: |EXTENDED P_DIFF| V: | SS .. |
1981 // +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
1982 // V: | SS .. |
1983 // +-+-+-+-+-+-+-+-+
1984 void VerifyCommonHeader(const RTPVideoHeaderVP9& vp9) const {
1985 EXPECT_EQ(kMaxTwoBytePictureId, vp9.max_picture_id); // M:1
1986 EXPECT_NE(kNoPictureId, vp9.picture_id); // I:1
1987 EXPECT_EQ(vp9_settings_.flexibleMode, vp9.flexible_mode); // F
1988 EXPECT_GE(vp9.spatial_idx, 0); // S
1989 EXPECT_LT(vp9.spatial_idx, vp9_settings_.numberOfSpatialLayers);
1990 if (vp9.ss_data_available) // V
1991 VerifySsData(vp9);
1992
1993 if (frames_sent_ == 0)
1994 EXPECT_FALSE(vp9.inter_pic_predicted); // P
1995
1996 if (!vp9.inter_pic_predicted) {
1997 EXPECT_TRUE(vp9.temporal_idx == 0 || vp9.temporal_idx == kNoTemporalIdx);
1998 EXPECT_FALSE(vp9.temporal_up_switch);
1999 }
2000 }
2001
2002 // Scalability structure (SS).
2003 //
2004 // +-+-+-+-+-+-+-+-+
2005 // V: | N_S |Y|G|-|-|-|
2006 // +-+-+-+-+-+-+-+-+
2007 // Y: | WIDTH | N_S + 1 times
2008 // +-+-+-+-+-+-+-+-+
2009 // | HEIGHT |
2010 // +-+-+-+-+-+-+-+-+
2011 // G: | N_G |
2012 // +-+-+-+-+-+-+-+-+
2013 // N_G: | T |U| R |-|-| N_G times
2014 // +-+-+-+-+-+-+-+-+
2015 // | P_DIFF | R times
2016 // +-+-+-+-+-+-+-+-+
2017 void VerifySsData(const RTPVideoHeaderVP9& vp9) const {
2018 EXPECT_TRUE(vp9.ss_data_available); // V
2019 EXPECT_EQ(vp9_settings_.numberOfSpatialLayers, // N_S + 1
2020 vp9.num_spatial_layers);
2021 EXPECT_TRUE(vp9.spatial_layer_resolution_present); // Y:1
2022 size_t expected_width = encoder_config_.streams[0].width;
2023 size_t expected_height = encoder_config_.streams[0].height;
2024 for (int i = vp9.num_spatial_layers - 1; i >= 0; --i) {
2025 EXPECT_EQ(expected_width, vp9.width[i]); // WIDTH
2026 EXPECT_EQ(expected_height, vp9.height[i]); // HEIGHT
2027 expected_width /= 2;
2028 expected_height /= 2;
2029 }
2030 }
2031
2032 void CompareConsecutiveFrames(const RTPHeader& header,
2033 const RTPVideoHeader& video) const {
2034 const RTPVideoHeaderVP9& vp9 = video.codecHeader.VP9;
2035
2036 bool new_frame = packets_sent_ == 0 ||
2037 IsNewerTimestamp(header.timestamp, last_header_.timestamp);
2038 EXPECT_EQ(new_frame, video.isFirstPacket);
2039 if (!new_frame) {
2040 EXPECT_FALSE(last_header_.markerBit);
2041 EXPECT_EQ(last_header_.timestamp, header.timestamp);
2042 EXPECT_EQ(last_vp9_.picture_id, vp9.picture_id);
2043 EXPECT_EQ(last_vp9_.temporal_idx, vp9.temporal_idx);
2044 EXPECT_EQ(last_vp9_.tl0_pic_idx, vp9.tl0_pic_idx);
2045 VerifySpatialIdxWithinFrame(vp9);
2046 return;
2047 }
2048 // New frame.
2049 EXPECT_TRUE(vp9.beginning_of_frame);
2050
2051 // Compare with last packet in previous frame.
2052 if (frames_sent_ == 0)
2053 return;
2054 EXPECT_TRUE(last_vp9_.end_of_frame);
2055 EXPECT_TRUE(last_header_.markerBit);
2056 EXPECT_TRUE(ContinuousPictureId(vp9));
2057 VerifyTl0Idx(vp9);
2058 }
2059
2060 rtc::scoped_ptr<VP9Encoder> vp9_encoder_; 1863 rtc::scoped_ptr<VP9Encoder> vp9_encoder_;
2061 VideoCodecVP9 vp9_settings_; 1864 VideoCodecVP9 vp9_settings_;
2062 webrtc::VideoEncoderConfig encoder_config_;
2063 RTPHeader last_header_;
2064 RTPVideoHeaderVP9 last_vp9_;
2065 size_t packets_sent_;
2066 size_t frames_sent_;
2067 }; 1865 };
2068 1866
2069 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_1Tl1SLayers) { 1867 TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) {
2070 const uint8_t kNumTemporalLayers = 1; 1868 class FlexibleMode : public VP9HeaderObeserver {
2071 const uint8_t kNumSpatialLayers = 1;
2072 TestVp9NonFlexMode(kNumTemporalLayers, kNumSpatialLayers);
2073 }
2074
2075 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_2Tl1SLayers) {
2076 const uint8_t kNumTemporalLayers = 2;
2077 const uint8_t kNumSpatialLayers = 1;
2078 TestVp9NonFlexMode(kNumTemporalLayers, kNumSpatialLayers);
2079 }
2080
2081 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_3Tl1SLayers) {
2082 const uint8_t kNumTemporalLayers = 3;
2083 const uint8_t kNumSpatialLayers = 1;
2084 TestVp9NonFlexMode(kNumTemporalLayers, kNumSpatialLayers);
2085 }
2086
2087 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_1Tl2SLayers) {
2088 const uint8_t kNumTemporalLayers = 1;
2089 const uint8_t kNumSpatialLayers = 2;
2090 TestVp9NonFlexMode(kNumTemporalLayers, kNumSpatialLayers);
2091 }
2092
2093 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_2Tl2SLayers) {
2094 const uint8_t kNumTemporalLayers = 2;
2095 const uint8_t kNumSpatialLayers = 2;
2096 TestVp9NonFlexMode(kNumTemporalLayers, kNumSpatialLayers);
2097 }
2098
2099 TEST_F(VideoSendStreamTest, Vp9NonFlexMode_3Tl2SLayers) {
2100 const uint8_t kNumTemporalLayers = 3;
2101 const uint8_t kNumSpatialLayers = 2;
2102 TestVp9NonFlexMode(kNumTemporalLayers, kNumSpatialLayers);
2103 }
2104
2105 void VideoSendStreamTest::TestVp9NonFlexMode(uint8_t num_temporal_layers,
2106 uint8_t num_spatial_layers) {
2107 static const size_t kNumFramesToSend = 100;
2108 // Set to < kNumFramesToSend and coprime to length of temporal layer
2109 // structures to verify temporal id reset on key frame.
2110 static const int kKeyFrameInterval = 31;
2111 class NonFlexibleMode : public Vp9HeaderObserver {
2112 public:
2113 NonFlexibleMode(uint8_t num_temporal_layers, uint8_t num_spatial_layers)
2114 : num_temporal_layers_(num_temporal_layers),
2115 num_spatial_layers_(num_spatial_layers),
2116 l_field_(num_temporal_layers > 1 || num_spatial_layers > 1) {}
2117 void ModifyConfigsHook( 1869 void ModifyConfigsHook(
2118 VideoSendStream::Config* send_config, 1870 VideoSendStream::Config* send_config,
2119 std::vector<VideoReceiveStream::Config>* receive_configs, 1871 std::vector<VideoReceiveStream::Config>* receive_configs,
2120 VideoEncoderConfig* encoder_config) override { 1872 VideoEncoderConfig* encoder_config) override {
2121 vp9_settings_.flexibleMode = false; 1873 vp9_settings_.flexibleMode = true;
2122 vp9_settings_.frameDroppingOn = false;
2123 vp9_settings_.keyFrameInterval = kKeyFrameInterval;
2124 vp9_settings_.numberOfTemporalLayers = num_temporal_layers_;
2125 vp9_settings_.numberOfSpatialLayers = num_spatial_layers_;
2126 } 1874 }
2127 1875
2128 void InspectHeader(const RTPVideoHeaderVP9& vp9) override { 1876 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
2129 bool ss_data_expected = !vp9.inter_pic_predicted && 1877 EXPECT_TRUE(vp9videoHeader->flexible_mode);
2130 vp9.beginning_of_frame && vp9.spatial_idx == 0; 1878 observation_complete_->Set();
2131 EXPECT_EQ(ss_data_expected, vp9.ss_data_available);
2132 EXPECT_EQ(vp9.spatial_idx > 0, vp9.inter_layer_predicted); // D
2133
2134 if (IsNewPictureId(vp9)) {
2135 EXPECT_EQ(0, vp9.spatial_idx);
2136 EXPECT_EQ(num_spatial_layers_ - 1, last_vp9_.spatial_idx);
2137 }
2138
2139 VerifyFixedTemporalLayerStructure(vp9,
2140 l_field_ ? num_temporal_layers_ : 0);
2141
2142 if (frames_sent_ > kNumFramesToSend)
2143 observation_complete_->Set();
2144 } 1879 }
2145 const uint8_t num_temporal_layers_; 1880 } test;
2146 const uint8_t num_spatial_layers_;
2147 const bool l_field_;
2148 } test(num_temporal_layers, num_spatial_layers);
2149 1881
2150 RunBaseTest(&test, FakeNetworkPipe::Config()); 1882 RunBaseTest(&test, FakeNetworkPipe::Config());
2151 } 1883 }
2152 1884
2153 TEST_F(VideoSendStreamTest, Vp9FlexModeRefCount) { 1885 TEST_F(VideoSendStreamTest, VP9FlexModeHasPictureId) {
2154 class FlexibleMode : public Vp9HeaderObserver { 1886 class FlexibleMode : public VP9HeaderObeserver {
2155 void ModifyConfigsHook( 1887 void ModifyConfigsHook(
2156 VideoSendStream::Config* send_config, 1888 VideoSendStream::Config* send_config,
2157 std::vector<VideoReceiveStream::Config>* receive_configs, 1889 std::vector<VideoReceiveStream::Config>* receive_configs,
2158 VideoEncoderConfig* encoder_config) override { 1890 VideoEncoderConfig* encoder_config) override {
2159 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
2160 vp9_settings_.flexibleMode = true; 1891 vp9_settings_.flexibleMode = true;
2161 vp9_settings_.numberOfTemporalLayers = 1;
2162 vp9_settings_.numberOfSpatialLayers = 2;
2163 } 1892 }
2164 1893
2165 void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { 1894 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
2166 EXPECT_TRUE(vp9_header.flexible_mode); 1895 EXPECT_NE(vp9videoHeader->picture_id, kNoPictureId);
2167 EXPECT_EQ(kNoTl0PicIdx, vp9_header.tl0_pic_idx); 1896 observation_complete_->Set();
2168 if (vp9_header.inter_pic_predicted) { 1897 }
2169 EXPECT_GT(vp9_header.num_ref_pics, 0u); 1898 } test;
1899
1900 RunBaseTest(&test, FakeNetworkPipe::Config());
1901 }
1902
1903 TEST_F(VideoSendStreamTest, VP9FlexModeRefCount) {
1904 class FlexibleMode : public VP9HeaderObeserver {
1905 void ModifyConfigsHook(
1906 VideoSendStream::Config* send_config,
1907 std::vector<VideoReceiveStream::Config>* receive_configs,
1908 VideoEncoderConfig* encoder_config) override {
1909 vp9_settings_.flexibleMode = true;
1910 }
1911
1912 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
1913 EXPECT_TRUE(vp9videoHeader->flexible_mode);
1914 if (vp9videoHeader->inter_pic_predicted) {
1915 EXPECT_GT(vp9videoHeader->num_ref_pics, 0u);
2170 observation_complete_->Set(); 1916 observation_complete_->Set();
2171 } 1917 }
2172 } 1918 }
2173 } test; 1919 } test;
2174 1920
2175 RunBaseTest(&test, FakeNetworkPipe::Config()); 1921 RunBaseTest(&test, FakeNetworkPipe::Config());
2176 } 1922 }
2177 1923
1924 TEST_F(VideoSendStreamTest, VP9FlexModeRefs) {
1925 class FlexibleMode : public VP9HeaderObeserver {
1926 void ModifyConfigsHook(
1927 VideoSendStream::Config* send_config,
1928 std::vector<VideoReceiveStream::Config>* receive_configs,
1929 VideoEncoderConfig* encoder_config) override {
1930 vp9_settings_.flexibleMode = true;
1931 }
1932
1933 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override {
1934 EXPECT_TRUE(vp9videoHeader->flexible_mode);
1935 if (vp9videoHeader->inter_pic_predicted) {
1936 EXPECT_GT(vp9videoHeader->num_ref_pics, 0u);
1937 observation_complete_->Set();
1938 }
1939 }
1940
1941 } test;
1942
1943 RunBaseTest(&test, FakeNetworkPipe::Config());
1944 }
1945
2178 } // namespace webrtc 1946 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698