/* * Copyright (c) 2018 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 RTC_TOOLS_FRAME_ANALYZER_VIDEO_TEMPORAL_ALIGNER_H_ #define RTC_TOOLS_FRAME_ANALYZER_VIDEO_TEMPORAL_ALIGNER_H_ #include <stddef.h> #include <vector> #include "api/scoped_refptr.h" #include "rtc_tools/video_file_reader.h" namespace webrtc { namespace test { // Returns a vector with the same size as the given test video. Each index // corresponds to what reference frame that test frame matches to. These // indices are strictly increasing and might loop around the reference video, // e.g. their values can be bigger than the number of frames in the reference // video and they should be interpreted modulo that size. The matching frames // will be determined by maximizing SSIM. std::vector<size_t> FindMatchingFrameIndices( const rtc::scoped_refptr<Video>& reference_video, const rtc::scoped_refptr<Video>& test_video); // Generate a new video using the frames from the original video. The returned // video will have the same number of frames as the size of `indices`, and // frame nr i in the returned video will point to frame nr indices[i] in the // original video. rtc::scoped_refptr<Video> ReorderVideo(const rtc::scoped_refptr<Video>& video, const std::vector<size_t>& indices); // Returns a modified version of the reference video where the frames have // been aligned to the test video. The test video is assumed to be captured // during a quality measurement test where the reference video is the source. // The test video may start at an arbitrary position in the reference video // and there might be missing frames. The reference video is assumed to loop // over when it reaches the end. The returned result is a version of the // reference video where the missing frames are left out so it aligns to the // test video. rtc::scoped_refptr<Video> GenerateAlignedReferenceVideo( const rtc::scoped_refptr<Video>& reference_video, const rtc::scoped_refptr<Video>& test_video); // As above, but using precalculated indices. rtc::scoped_refptr<Video> GenerateAlignedReferenceVideo( const rtc::scoped_refptr<Video>& reference_video, const std::vector<size_t>& indices); } // namespace test } // namespace webrtc #endif // RTC_TOOLS_FRAME_ANALYZER_VIDEO_TEMPORAL_ALIGNER_H_