/* * 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_DECODER_H_ #define TEST_PC_E2E_ANALYZER_VIDEO_QUALITY_ANALYZING_VIDEO_DECODER_H_ #include <map> #include <memory> #include <string> #include <vector> #include "absl/strings/string_view.h" #include "absl/types/optional.h" #include "api/environment/environment.h" #include "api/test/video_quality_analyzer_interface.h" #include "api/video/encoded_image.h" #include "api/video/video_frame.h" #include "api/video_codecs/sdp_video_format.h" #include "api/video_codecs/video_decoder.h" #include "api/video_codecs/video_decoder_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 { // QualityAnalyzingVideoDecoder is used to wrap origin video decoder and inject // VideoQualityAnalyzerInterface before and after decoder. // // QualityAnalyzingVideoDecoder propagates all calls to the origin decoder. // It registers its own DecodedImageCallback in the origin decoder and will // store user specified callback inside itself. // // When Decode(...) will be invoked, quality decoder first will extract frame id // from passed EncodedImage with EncodedImageIdExtracor that was specified in // constructor, then will call video quality analyzer, with correct // EncodedImage and only then will pass image to origin decoder. // // When origin decoder decodes the image it will call quality decoder's special // callback, where video analyzer will be called again and then decoded frame // will be passed to origin callback, provided by user. // // Quality decoder registers its own callback in origin decoder, at the same // time the user registers their callback in quality decoder. class QualityAnalyzingVideoDecoder : public VideoDecoder { … }; // Produces QualityAnalyzingVideoDecoder, which hold decoders, produced by // specified factory as delegates. Forwards all other calls to specified // factory. class QualityAnalyzingVideoDecoderFactory : public VideoDecoderFactory { … }; } // namespace webrtc_pc_e2e } // namespace webrtc #endif // TEST_PC_E2E_ANALYZER_VIDEO_QUALITY_ANALYZING_VIDEO_DECODER_H_