1 /*
2  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_STATS_H_
12 #define WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_STATS_H_
13 
14 #include <vector>
15 
16 #include "webrtc/common_video/include/video_image.h"
17 
18 namespace webrtc {
19 namespace test {
20 
21 // Contains statistics of a single frame that has been processed.
22 struct FrameStatistic {
23   FrameStatistic();
24 
25   bool encoding_successful;
26   bool decoding_successful;
27   int encode_return_code;
28   int decode_return_code;
29   int encode_time_in_us;
30   int decode_time_in_us;
31   int frame_number;
32   // How many packets were discarded of the encoded frame data (if any).
33   int packets_dropped;
34   size_t total_packets;
35 
36   // Current bit rate. Calculated out of the size divided with the time
37   // interval per frame.
38   int bit_rate_in_kbps;
39 
40   // Copied from EncodedImage
41   size_t encoded_frame_length_in_bytes;
42   webrtc::FrameType frame_type;
43 };
44 
45 // Handles statistics from a single video processing run.
46 // Contains calculation methods for interesting metrics from these stats.
47 class Stats {
48  public:
49   typedef std::vector<FrameStatistic>::iterator FrameStatisticsIterator;
50 
51   Stats();
52   virtual ~Stats();
53 
54   // Add a new statistic data object.
55   // The frame number must be incrementing and start at zero in order to use
56   // it as an index for the frame_statistics_ vector.
57   // Returns the newly created statistic object.
58   FrameStatistic& NewFrame(int frame_number);
59 
60   // Prints a summary of all the statistics that have been gathered during the
61   // processing
62   void PrintSummary();
63 
64   std::vector<FrameStatistic> stats_;
65 };
66 
67 }  // namespace test
68 }  // namespace webrtc
69 
70 #endif  // WEBRTC_MODULES_VIDEO_CODING_CODECS_TEST_STATS_H_
71