1 /*############################################################################
2   # Copyright Intel Corporation
3   #
4   # SPDX-License-Identifier: MIT
5   ############################################################################*/
6 
7 #pragma once
8 
9 #include <cinttypes>
10 #include "vpl/mfxstructures.h"
11 namespace oneapi {
12 namespace vpl {
13 
14 /// @brief Interface for the component's (session) run-time statistic
15 class stat {
16 public:
17     /// @brief Default ctor
stat()18     stat() {}
19 
20     /// @brief Default dtor
~stat()21     virtual ~stat() {}
22 
23     /// @brief Retrieves number of processed frames
24     /// @return Number of processed frames
25     virtual uint32_t get_num_frame() const = 0;
26 
27     /// @brief Retrieves number of cached frames
28     /// @return Number of cached frames
29     virtual uint32_t get_num_cached_frame() const = 0;
30 };
31 
32 /// @brief Decoder's session run-time statistic
33 class decode_stat : public stat {
34 public:
35     /// @brief Default ctor
decode_stat()36     decode_stat() : stat(), stat_() {}
37 
38     /// @brief Default dtor
~decode_stat()39     virtual ~decode_stat() {}
40 
41     /// @brief Retrieves number of processed frames
42     /// @return Number of processed frames
get_num_frame() const43     virtual uint32_t get_num_frame() const {
44         return stat_.NumFrame;
45     }
46 
47     /// @brief Retrieves number of cached frames
48     /// @return Number of cached frames
get_num_cached_frame() const49     virtual uint32_t get_num_cached_frame() const {
50         return stat_.NumCachedFrame;
51     }
52 
53     /// @brief Retrieves number of errors recovered
54     /// @return Number of errors recovered
get_num_error() const55     virtual uint32_t get_num_error() const {
56         return stat_.NumError;
57     }
58 
59     /// @brief Retrieves number of skipped frames
60     /// @return Number of skipped frames
get_num_skipped_frame() const61     virtual uint32_t get_num_skipped_frame() const {
62         return stat_.NumSkippedFrame;
63     }
64 
65     /// @brief Retrieves raw data pointer
66     /// @return Raw data pointer
get_raw()67     mfxDecodeStat* get_raw() {
68         return &(this->stat_);
69     }
70 
71 protected:
72     /// @brief Raw statistic data
73     mfxDecodeStat stat_;
74 };
75 
76 /// @brief Encoder's session run-time statistic
77 class encode_stat : public stat {
78 public:
79     /// @brief Default ctor
encode_stat()80     encode_stat() : stat(), stat_() {}
81 
82     /// @brief Default dtor
~encode_stat()83     virtual ~encode_stat() {}
84 
85     /// @brief Retrieves number of processed frames
86     /// @return Number of processed frames
get_num_frame() const87     virtual uint32_t get_num_frame() const {
88         return stat_.NumFrame;
89     }
90 
91     /// @brief Retrieves number of cached frames
92     /// @return Number of cached frames
get_num_cached_frame() const93     virtual uint32_t get_num_cached_frame() const {
94         return stat_.NumCachedFrame;
95     }
96 
97     /// @brief Retrieves number of bits for all encoded frames
98     /// @return Number of bits for all encoded frames
get_num_bit() const99     virtual uint64_t get_num_bit() const {
100         return stat_.NumBit;
101     }
102 
103     /// @brief Retrieves raw data pointer
104     /// @return Raw data pointer
get_raw()105     mfxEncodeStat* get_raw() {
106         return &(this->stat_);
107     }
108 
109 protected:
110     /// @brief Raw statistic data
111     mfxEncodeStat stat_;
112 };
113 
114 /// @brief VPP's session run-time statistic
115 class vpp_stat : public stat {
116 public:
117     /// @brief Default ctor
vpp_stat()118     vpp_stat() : stat(), stat_() {}
119 
120     /// @brief Default dtor
~vpp_stat()121     virtual ~vpp_stat() {}
122 
123     /// @brief Retrieves number of processed frames
124     /// @return Number of processed frames
get_num_frame() const125     virtual uint32_t get_num_frame() const {
126         return stat_.NumFrame;
127     }
128 
129     /// @brief Retrieves number of cached frames
130     /// @return Number of cached frames
get_num_cached_frame() const131     virtual uint32_t get_num_cached_frame() const {
132         return stat_.NumCachedFrame;
133     }
134 
135     /// @brief Retrieves raw data pointer
136     /// @return Raw data pointer
get_raw()137     mfxVPPStat* get_raw() {
138         return &(this->stat_);
139     }
140 
141 protected:
142     /// @brief Raw statistic data
143     mfxVPPStat stat_;
144 };
145 
146 } // namespace vpl
147 } // namespace oneapi
148