OLD | NEW |
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 |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 #include "webrtc/base/bind.h" | 15 #include "webrtc/base/bind.h" |
16 #include "webrtc/base/checks.h" | 16 #include "webrtc/base/checks.h" |
17 #include "webrtc/base/criticalsection.h" | 17 #include "webrtc/base/criticalsection.h" |
18 #include "webrtc/base/scoped_ptr.h" | 18 #include "webrtc/base/scoped_ptr.h" |
19 #include "webrtc/call.h" | 19 #include "webrtc/call.h" |
20 #include "webrtc/frame_callback.h" | 20 #include "webrtc/frame_callback.h" |
21 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h" | 21 #include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h" |
22 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h" | 22 #include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h" |
23 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" | 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" |
24 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" | 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" |
| 25 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h" |
25 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" | 26 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" |
26 #include "webrtc/system_wrappers/interface/event_wrapper.h" | 27 #include "webrtc/system_wrappers/interface/event_wrapper.h" |
27 #include "webrtc/system_wrappers/interface/logging.h" | 28 #include "webrtc/system_wrappers/interface/logging.h" |
28 #include "webrtc/system_wrappers/interface/ref_count.h" | 29 #include "webrtc/system_wrappers/interface/ref_count.h" |
29 #include "webrtc/system_wrappers/interface/sleep.h" | 30 #include "webrtc/system_wrappers/interface/sleep.h" |
30 #include "webrtc/system_wrappers/interface/thread_wrapper.h" | 31 #include "webrtc/system_wrappers/interface/thread_wrapper.h" |
31 #include "webrtc/test/call_test.h" | 32 #include "webrtc/test/call_test.h" |
32 #include "webrtc/test/configurable_frame_size_encoder.h" | 33 #include "webrtc/test/configurable_frame_size_encoder.h" |
33 #include "webrtc/test/fake_texture_frame.h" | 34 #include "webrtc/test/fake_texture_frame.h" |
34 #include "webrtc/test/null_transport.h" | 35 #include "webrtc/test/null_transport.h" |
(...skipping 1753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1788 VideoSendStream* send_stream, | 1789 VideoSendStream* send_stream, |
1789 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1790 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1790 send_stream_ = send_stream; | 1791 send_stream_ = send_stream; |
1791 } | 1792 } |
1792 | 1793 |
1793 VideoSendStream* send_stream_; | 1794 VideoSendStream* send_stream_; |
1794 } test; | 1795 } test; |
1795 | 1796 |
1796 RunBaseTest(&test); | 1797 RunBaseTest(&test); |
1797 } | 1798 } |
| 1799 |
| 1800 class VP9HeaderObeserver : public test::SendTest { |
| 1801 public: |
| 1802 VP9HeaderObeserver() : SendTest(VideoSendStreamTest::kDefaultTimeoutMs) { |
| 1803 vp9_settings_ = VideoEncoder::GetDefaultVp9Settings(); |
| 1804 } |
| 1805 virtual void ModifyConfigsHook( |
| 1806 VideoSendStream::Config* send_config, |
| 1807 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1808 VideoEncoderConfig* encoder_config) {} |
| 1809 |
| 1810 virtual void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) = 0; |
| 1811 |
| 1812 private: |
| 1813 const int kVp9PayloadType = 105; |
| 1814 |
| 1815 void ModifyConfigs(VideoSendStream::Config* send_config, |
| 1816 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1817 VideoEncoderConfig* encoder_config) override { |
| 1818 encoder_config->encoder_specific_settings = &vp9_settings_; |
| 1819 send_config->encoder_settings.payload_name = "VP9"; |
| 1820 send_config->encoder_settings.payload_type = kVp9PayloadType; |
| 1821 ModifyConfigsHook(send_config, receive_configs, encoder_config); |
| 1822 } |
| 1823 |
| 1824 void PerformTest() override { |
| 1825 EXPECT_EQ(kEventSignaled, Wait()) |
| 1826 << "Test timed out waiting for VP9 packet"; |
| 1827 } |
| 1828 |
| 1829 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
| 1830 RTPHeader header; |
| 1831 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
| 1832 |
| 1833 if (header.payloadType == kVp9PayloadType) { |
| 1834 RtpDepacketizerVp9 vp9depacketizer; |
| 1835 RtpDepacketizer::ParsedPayload vp9payload; |
| 1836 const uint8_t* vp9_packet = packet + header.headerLength; |
| 1837 size_t payload_length = |
| 1838 length - header.headerLength - header.paddingLength; |
| 1839 |
| 1840 bool parse_vp9header_successful = |
| 1841 vp9depacketizer.Parse(&vp9payload, vp9_packet, payload_length); |
| 1842 bool is_vp9_codec_type = |
| 1843 vp9payload.type.Video.codec == RtpVideoCodecTypes::kRtpVideoVp9; |
| 1844 EXPECT_TRUE(parse_vp9header_successful); |
| 1845 EXPECT_TRUE(is_vp9_codec_type); |
| 1846 |
| 1847 RTPVideoHeaderVP9* vp9videoHeader = |
| 1848 &vp9payload.type.Video.codecHeader.VP9; |
| 1849 if (parse_vp9header_successful && is_vp9_codec_type) { |
| 1850 InspectHeader(vp9videoHeader); |
| 1851 } else { |
| 1852 observation_complete_->Set(); |
| 1853 } |
| 1854 } |
| 1855 |
| 1856 return SEND_PACKET; |
| 1857 } |
| 1858 |
| 1859 protected: |
| 1860 VideoCodecVP9 vp9_settings_; |
| 1861 }; |
| 1862 |
| 1863 TEST_F(VideoSendStreamTest, VP9NoFlexMode) { |
| 1864 class NoFlexibleMode : public VP9HeaderObeserver { |
| 1865 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { |
| 1866 EXPECT_FALSE(vp9videoHeader->flexible_mode); |
| 1867 observation_complete_->Set(); |
| 1868 } |
| 1869 } test; |
| 1870 |
| 1871 RunBaseTest(&test); |
| 1872 } |
| 1873 |
| 1874 // TODO(philipel): Enable once flexible mode is implemeted. |
| 1875 TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) { |
| 1876 class FlexibleMode : public VP9HeaderObeserver { |
| 1877 void ModifyConfigsHook( |
| 1878 VideoSendStream::Config* send_config, |
| 1879 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1880 VideoEncoderConfig* encoder_config) override { |
| 1881 vp9_settings_.flexibleMode = true; |
| 1882 encoder_config->encoder_specific_settings = &vp9_settings_; |
| 1883 } |
| 1884 |
| 1885 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { |
| 1886 EXPECT_TRUE(vp9videoHeader->flexible_mode); |
| 1887 observation_complete_->Set(); |
| 1888 } |
| 1889 |
| 1890 } test; |
| 1891 |
| 1892 RunBaseTest(&test); |
| 1893 } |
| 1894 |
1798 } // namespace webrtc | 1895 } // namespace webrtc |
OLD | NEW |