| Index: webrtc/modules/video_coding/codecs/test/videoprocessor.h
|
| diff --git a/webrtc/modules/video_coding/codecs/test/videoprocessor.h b/webrtc/modules/video_coding/codecs/test/videoprocessor.h
|
| index 08d1d1ccf84879df3ac64dd204c0f70c27b286c5..5cf28df5224e3d7fc5f6f4c73780b76bfc3bcffb 100644
|
| --- a/webrtc/modules/video_coding/codecs/test/videoprocessor.h
|
| +++ b/webrtc/modules/video_coding/codecs/test/videoprocessor.h
|
| @@ -13,8 +13,10 @@
|
|
|
| #include <memory>
|
| #include <string>
|
| +#include <vector>
|
|
|
| #include "webrtc/api/video/video_frame.h"
|
| +#include "webrtc/base/buffer.h"
|
| #include "webrtc/base/checks.h"
|
| #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
| #include "webrtc/modules/video_coding/include/video_codec_interface.h"
|
| @@ -175,6 +177,30 @@ class VideoProcessorImpl : public VideoProcessor {
|
| bool ProcessFrame(int frame_number) override;
|
|
|
| private:
|
| + // Container that holds per-frame information that needs to be stored between
|
| + // calls to Encode and Decode, as well as the corresponding callbacks. It is
|
| + // not directly used for statistics -- for that, test::FrameStatistic is used.
|
| + struct FrameInfo {
|
| + FrameInfo()
|
| + : timestamp(0),
|
| + encode_start_ns(0),
|
| + decode_start_ns(0),
|
| + encoded_frame_size(0),
|
| + encoded_frame_type(kVideoFrameDelta),
|
| + decoded_width(0),
|
| + decoded_height(0),
|
| + manipulated_length(0) {}
|
| +
|
| + uint32_t timestamp;
|
| + int64_t encode_start_ns;
|
| + int64_t decode_start_ns;
|
| + size_t encoded_frame_size;
|
| + FrameType encoded_frame_type;
|
| + int decoded_width;
|
| + int decoded_height;
|
| + size_t manipulated_length;
|
| + };
|
| +
|
| // Callback class required to implement according to the VideoEncoder API.
|
| class VideoProcessorEncodeCompleteCallback
|
| : public webrtc::EncodedImageCallback {
|
| @@ -260,6 +286,7 @@ class VideoProcessorImpl : public VideoProcessor {
|
| // SSIM calculations at the end of a test run.
|
| FrameReader* const analysis_frame_reader_;
|
| FrameWriter* const analysis_frame_writer_;
|
| + const int num_frames_;
|
|
|
| // These (optional) file writers are used for persistently storing the output
|
| // of the coding pipeline at different stages: pre encode (source), post
|
| @@ -271,28 +298,27 @@ class VideoProcessorImpl : public VideoProcessor {
|
| IvfFileWriter* const encoded_frame_writer_;
|
| FrameWriter* const decoded_frame_writer_;
|
|
|
| - // Keep track of the last successful frame, since we need to write that
|
| - // when decoding fails.
|
| - std::unique_ptr<uint8_t[]> last_successful_frame_buffer_;
|
| - // To keep track of if we have excluded the first key frame from packet loss.
|
| - bool first_key_frame_has_been_excluded_;
|
| - // To tell the decoder previous frame have been dropped due to packet loss.
|
| - bool last_frame_missing_;
|
| - // If Init() has executed successfully.
|
| bool initialized_;
|
| - size_t encoded_frame_size_;
|
| - FrameType encoded_frame_type_;
|
| - int prev_time_stamp_;
|
| - int last_encoder_frame_width_;
|
| - int last_encoder_frame_height_;
|
| +
|
| + // Frame metadata for all frames that have been added through a call to
|
| + // ProcessFrames(). We need to store this metadata over the course of the
|
| + // test run, to support pipelining HW codecs.
|
| + std::vector<FrameInfo> frame_infos_;
|
| + int last_encoded_frame_num_;
|
| + int last_decoded_frame_num_;
|
| +
|
| + // Keep track of if we have excluded the first key frame from packet loss.
|
| + bool first_key_frame_has_been_excluded_;
|
| +
|
| + // Keep track of the last successfully decoded frame, since we write that
|
| + // frame to disk when decoding fails.
|
| + rtc::Buffer last_decoded_frame_buffer_;
|
|
|
| // Statistics.
|
| Stats* stats_;
|
| int num_dropped_frames_;
|
| int num_spatial_resizes_;
|
| double bit_rate_factor_; // Multiply frame length with this to get bit rate.
|
| - int64_t encode_start_ns_;
|
| - int64_t decode_start_ns_;
|
| };
|
|
|
| } // namespace test
|
|
|