/* * Copyright (c) 2019 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 TEST_PC_E2E_ANALYZER_VIDEO_QUALITY_ANALYZING_VIDEO_ENCODER_H_ #define TEST_PC_E2E_ANALYZER_VIDEO_QUALITY_ANALYZING_VIDEO_ENCODER_H_ #include <list> #include <memory> #include <utility> #include <vector> #include "absl/strings/string_view.h" #include "api/environment/environment.h" #include "api/test/pclf/media_configuration.h" #include "api/test/video_quality_analyzer_interface.h" #include "api/video/video_frame.h" #include "api/video_codecs/sdp_video_format.h" #include "api/video_codecs/video_codec.h" #include "api/video_codecs/video_encoder.h" #include "api/video_codecs/video_encoder_factory.h" #include "rtc_base/synchronization/mutex.h" #include "test/pc/e2e/analyzer/video/encoded_image_data_injector.h" namespace webrtc { namespace webrtc_pc_e2e { // QualityAnalyzingVideoEncoder is used to wrap origin video encoder and inject // VideoQualityAnalyzerInterface before and after encoder. // // QualityAnalyzingVideoEncoder propagates all calls to the origin encoder. // It registers its own EncodedImageCallback in the origin encoder and will // store user specified callback inside itself. // // When Encode(...) will be invoked, quality encoder first calls video quality // analyzer with original frame, then encodes frame with original encoder. // // When origin encoder encodes the image it will call quality encoder's special // callback, where video analyzer will be called again and then frame id will be // injected into EncodedImage with passed EncodedImageDataInjector. Then new // EncodedImage will be passed to origin callback, provided by user. // // Quality encoder registers its own callback in origin encoder, at the same // time the user registers their callback in quality encoder. class QualityAnalyzingVideoEncoder : public VideoEncoder, public EncodedImageCallback { … }; // Produces QualityAnalyzingVideoEncoder, which hold decoders, produced by // specified factory as delegates. Forwards all other calls to specified // factory. class QualityAnalyzingVideoEncoderFactory : public VideoEncoderFactory { … }; } // namespace webrtc_pc_e2e } // namespace webrtc #endif // TEST_PC_E2E_ANALYZER_VIDEO_QUALITY_ANALYZING_VIDEO_ENCODER_H_