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 6290d8bee5fa63c232f39dadbc855dd2e560bbed..736acc64c030c7eda3906b2ad7fac8bb4c500787 100644 |
--- a/webrtc/modules/video_coding/codecs/test/videoprocessor.h |
+++ b/webrtc/modules/video_coding/codecs/test/videoprocessor.h |
@@ -38,10 +38,11 @@ enum ExcludeFrameTypes { |
// sequence they occur. |
kExcludeAllKeyFrames |
}; |
+ |
// Returns a string representation of the enum value. |
const char* ExcludeFrameTypesToStr(ExcludeFrameTypes e); |
-// Test configuration for a test run |
+// Test configuration for a test run. |
struct TestConfig { |
TestConfig(); |
~TestConfig(); |
@@ -136,7 +137,7 @@ class VideoProcessor { |
// Processes a single frame. Returns true as long as there's more frames |
// available in the source clip. |
- // Frame number must be an integer >=0. |
+ // Frame number must be an integer >= 0. |
virtual bool ProcessFrame(int frame_number) = 0; |
// Updates the encoder with the target bit rate and the frame rate. |
@@ -170,23 +171,77 @@ class VideoProcessorImpl : public VideoProcessor { |
bool ProcessFrame(int frame_number) override; |
private: |
+ // Callback class required to implement according to the VideoEncoder API. |
+ class VideoProcessorEncodeCompleteCallback |
+ : public webrtc::EncodedImageCallback { |
+ public: |
+ explicit VideoProcessorEncodeCompleteCallback(VideoProcessorImpl* vp) |
+ : video_processor_(vp) {} |
+ Result OnEncodedImage( |
+ const webrtc::EncodedImage& encoded_image, |
+ const webrtc::CodecSpecificInfo* codec_specific_info, |
+ const webrtc::RTPFragmentationHeader* fragmentation) override { |
+ // Forward to parent class. |
+ RTC_CHECK(codec_specific_info); |
+ video_processor_->FrameEncoded(codec_specific_info->codecType, |
+ encoded_image, fragmentation); |
+ return Result(Result::OK, 0); |
+ } |
+ |
+ private: |
+ VideoProcessorImpl* const video_processor_; |
+ }; |
+ |
+ // Callback class required to implement according to the VideoDecoder API. |
+ class VideoProcessorDecodeCompleteCallback |
+ : public webrtc::DecodedImageCallback { |
+ public: |
+ explicit VideoProcessorDecodeCompleteCallback(VideoProcessorImpl* vp) |
+ : video_processor_(vp) {} |
+ int32_t Decoded(webrtc::VideoFrame& image) override { |
+ // Forward to parent class. |
+ video_processor_->FrameDecoded(image); |
+ return 0; |
+ } |
+ int32_t Decoded(webrtc::VideoFrame& image, |
+ int64_t decode_time_ms) override { |
+ RTC_NOTREACHED(); |
+ return -1; |
+ } |
+ void Decoded(VideoFrame& frame, |
+ rtc::Optional<int32_t> decode_time_ms, |
+ rtc::Optional<uint8_t> qp) override { |
+ RTC_NOTREACHED(); |
+ } |
+ |
+ private: |
+ VideoProcessorImpl* const video_processor_; |
+ }; |
+ |
// Invoked by the callback when a frame has completed encoding. |
void FrameEncoded(webrtc::VideoCodecType codec, |
const webrtc::EncodedImage& encodedImage, |
const webrtc::RTPFragmentationHeader* fragmentation); |
+ |
// Invoked by the callback when a frame has completed decoding. |
void FrameDecoded(const webrtc::VideoFrame& image); |
+ |
// Used for getting a 32-bit integer representing time |
// (checks the size is within signed 32-bit bounds before casting it) |
int GetElapsedTimeMicroseconds(int64_t start, int64_t stop); |
+ |
// Updates the encoder with the target bit rate and the frame rate. |
void SetRates(int bit_rate, int frame_rate) override; |
+ |
// Return the size of the encoded frame in bytes. |
size_t EncodedFrameSize() override; |
+ |
// Return the encoded frame type (key or delta). |
FrameType EncodedFrameType() override; |
+ |
// Return the number of dropped frames. |
int NumberDroppedFrames() override; |
+ |
// Return the number of spatial resizes. |
int NumberSpatialResizes() override; |
@@ -201,12 +256,13 @@ class VideoProcessorImpl : public VideoProcessor { |
std::unique_ptr<EncodedImageCallback> encode_callback_; |
std::unique_ptr<DecodedImageCallback> decode_callback_; |
+ |
// Keep track of the last successful frame, since we need to write that |
- // when decoding fails: |
+ // 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: |
+ // 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: |
+ // To tell the decoder previous frame have been dropped due to packet loss. |
bool last_frame_missing_; |
// If Init() has executed successfully. |
bool initialized_; |
@@ -218,47 +274,10 @@ class VideoProcessorImpl : public VideoProcessor { |
int last_encoder_frame_width_; |
int last_encoder_frame_height_; |
- // Statistics |
- double bit_rate_factor_; // multiply frame length with this to get bit rate |
+ // Statistics. |
+ double bit_rate_factor_; // Multiply frame length with this to get bit rate. |
int64_t encode_start_ns_; |
int64_t decode_start_ns_; |
- |
- // Callback class required to implement according to the VideoEncoder API. |
- class VideoProcessorEncodeCompleteCallback |
- : public webrtc::EncodedImageCallback { |
- public: |
- explicit VideoProcessorEncodeCompleteCallback(VideoProcessorImpl* vp) |
- : video_processor_(vp) {} |
- Result OnEncodedImage( |
- const webrtc::EncodedImage& encoded_image, |
- const webrtc::CodecSpecificInfo* codec_specific_info, |
- const webrtc::RTPFragmentationHeader* fragmentation) override; |
- |
- private: |
- VideoProcessorImpl* const video_processor_; |
- }; |
- |
- // Callback class required to implement according to the VideoDecoder API. |
- class VideoProcessorDecodeCompleteCallback |
- : public webrtc::DecodedImageCallback { |
- public: |
- explicit VideoProcessorDecodeCompleteCallback(VideoProcessorImpl* vp) |
- : video_processor_(vp) {} |
- int32_t Decoded(webrtc::VideoFrame& image) override; |
- int32_t Decoded(webrtc::VideoFrame& image, |
- int64_t decode_time_ms) override { |
- RTC_NOTREACHED(); |
- return -1; |
- } |
- void Decoded(VideoFrame& frame, |
- rtc::Optional<int32_t> decode_time_ms, |
- rtc::Optional<uint8_t> qp) override { |
- RTC_NOTREACHED(); |
- } |
- |
- private: |
- VideoProcessorImpl* const video_processor_; |
- }; |
}; |
} // namespace test |