summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/video/video_quality_test.h
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/video/video_quality_test.h')
-rw-r--r--third_party/libwebrtc/video/video_quality_test.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/third_party/libwebrtc/video/video_quality_test.h b/third_party/libwebrtc/video/video_quality_test.h
new file mode 100644
index 0000000000..f66256e94c
--- /dev/null
+++ b/third_party/libwebrtc/video/video_quality_test.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+#ifndef VIDEO_VIDEO_QUALITY_TEST_H_
+#define VIDEO_VIDEO_QUALITY_TEST_H_
+
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "api/fec_controller.h"
+#include "api/rtc_event_log/rtc_event_log_factory.h"
+#include "api/task_queue/task_queue_base.h"
+#include "api/task_queue/task_queue_factory.h"
+#include "api/test/frame_generator_interface.h"
+#include "api/test/video_quality_test_fixture.h"
+#include "api/video/video_bitrate_allocator_factory.h"
+#include "call/fake_network_pipe.h"
+#include "media/engine/internal_decoder_factory.h"
+#include "media/engine/internal_encoder_factory.h"
+#include "test/call_test.h"
+#include "test/layer_filtering_transport.h"
+#include "video/video_analyzer.h"
+#ifdef WEBRTC_WIN
+#include "modules/audio_device/win/core_audio_utility_win.h"
+#include "rtc_base/win/scoped_com_initializer.h"
+#endif
+
+namespace webrtc {
+
+class VideoQualityTest : public test::CallTest,
+ public VideoQualityTestFixtureInterface {
+ public:
+ explicit VideoQualityTest(
+ std::unique_ptr<InjectionComponents> injection_components);
+
+ void RunWithAnalyzer(const Params& params) override;
+ void RunWithRenderers(const Params& params) override;
+
+ const std::map<uint8_t, webrtc::MediaType>& payload_type_map() override {
+ return payload_type_map_;
+ }
+
+ static void FillScalabilitySettings(
+ Params* params,
+ size_t video_idx,
+ const std::vector<std::string>& stream_descriptors,
+ int num_streams,
+ size_t selected_stream,
+ int num_spatial_layers,
+ int selected_sl,
+ InterLayerPredMode inter_layer_pred,
+ const std::vector<std::string>& sl_descriptors);
+
+ // Helper static methods.
+ static VideoStream DefaultVideoStream(const Params& params, size_t video_idx);
+ static VideoStream DefaultThumbnailStream();
+ static std::vector<int> ParseCSV(const std::string& str);
+
+ protected:
+ // No-op implementation to be able to instantiate this class from non-TEST_F
+ // locations.
+ void TestBody() override;
+
+ // Helper methods accessing only params_.
+ std::string GenerateGraphTitle() const;
+ void CheckParamsAndInjectionComponents();
+
+ // Helper methods for setting up the call.
+ void CreateCapturers();
+ std::unique_ptr<test::FrameGeneratorInterface> CreateFrameGenerator(
+ size_t video_idx);
+ void SetupThumbnailCapturers(size_t num_thumbnail_streams);
+ std::unique_ptr<VideoDecoder> CreateVideoDecoder(
+ const SdpVideoFormat& format);
+ std::unique_ptr<VideoEncoder> CreateVideoEncoder(const SdpVideoFormat& format,
+ VideoAnalyzer* analyzer);
+ void SetupVideo(Transport* send_transport, Transport* recv_transport);
+ void SetupThumbnails(Transport* send_transport, Transport* recv_transport);
+ void StartAudioStreams();
+ void StartThumbnails();
+ void StopThumbnails();
+ void DestroyThumbnailStreams();
+ // Helper method for creating a real ADM (using hardware) for all platforms.
+ rtc::scoped_refptr<AudioDeviceModule> CreateAudioDevice();
+ void InitializeAudioDevice(Call::Config* send_call_config,
+ Call::Config* recv_call_config,
+ bool use_real_adm);
+ void SetupAudio(Transport* transport);
+
+ void StartEncodedFrameLogs(VideoReceiveStreamInterface* stream);
+
+ virtual std::unique_ptr<test::LayerFilteringTransport> CreateSendTransport();
+ virtual std::unique_ptr<test::DirectTransport> CreateReceiveTransport();
+
+ std::vector<std::unique_ptr<rtc::VideoSourceInterface<VideoFrame>>>
+ thumbnail_capturers_;
+ Clock* const clock_;
+ const std::unique_ptr<TaskQueueFactory> task_queue_factory_;
+ RtcEventLogFactory rtc_event_log_factory_;
+
+ test::FunctionVideoDecoderFactory video_decoder_factory_;
+ std::unique_ptr<VideoDecoderFactory> decoder_factory_;
+ test::FunctionVideoEncoderFactory video_encoder_factory_;
+ test::FunctionVideoEncoderFactory video_encoder_factory_with_analyzer_;
+ std::unique_ptr<VideoBitrateAllocatorFactory>
+ video_bitrate_allocator_factory_;
+ std::unique_ptr<VideoEncoderFactory> encoder_factory_;
+ std::vector<VideoSendStream::Config> thumbnail_send_configs_;
+ std::vector<VideoEncoderConfig> thumbnail_encoder_configs_;
+ std::vector<VideoSendStream*> thumbnail_send_streams_;
+ std::vector<VideoReceiveStreamInterface::Config> thumbnail_receive_configs_;
+ std::vector<VideoReceiveStreamInterface*> thumbnail_receive_streams_;
+
+ int receive_logs_;
+ int send_logs_;
+
+ Params params_;
+ std::unique_ptr<InjectionComponents> injection_components_;
+
+ // Set non-null when running with analyzer.
+ std::unique_ptr<VideoAnalyzer> analyzer_;
+
+ // Note: not same as similarly named member in CallTest. This is the number of
+ // separate send streams, the one in CallTest is the number of substreams for
+ // a single send stream.
+ size_t num_video_streams_;
+
+#ifdef WEBRTC_WIN
+ // Windows Core Audio based ADM needs to run on a COM initialized thread.
+ // Only referenced in combination with --audio --use_real_adm flags.
+ std::unique_ptr<ScopedCOMInitializer> com_initializer_;
+#endif
+};
+
+} // namespace webrtc
+
+#endif // VIDEO_VIDEO_QUALITY_TEST_H_