Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(956)

Unified Diff: webrtc/modules/video_coding/codecs/test/videoprocessor.cc

Issue 2741953002: Step #4: Run VideoProcessor integration test batch mode on task queue. (Closed)
Patch Set: Fix gn. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/video_coding/codecs/test/videoprocessor.cc
diff --git a/webrtc/modules/video_coding/codecs/test/videoprocessor.cc b/webrtc/modules/video_coding/codecs/test/videoprocessor.cc
index 0bb04a99df03d7a193411ab829832e3092343e1a..41c49f8f412fca5ce7412c29610b1fd01da13704 100644
--- a/webrtc/modules/video_coding/codecs/test/videoprocessor.cc
+++ b/webrtc/modules/video_coding/codecs/test/videoprocessor.cc
@@ -114,7 +114,9 @@ TestConfig::TestConfig()
codec_settings(nullptr),
verbose(true) {}
-TestConfig::~TestConfig() {}
+TestConfig::~TestConfig() = default;
+
+VideoProcessor::~VideoProcessor() = default;
VideoProcessorImpl::VideoProcessorImpl(webrtc::VideoEncoder* encoder,
webrtc::VideoDecoder* decoder,
@@ -129,8 +131,6 @@ VideoProcessorImpl::VideoProcessorImpl(webrtc::VideoEncoder* encoder,
: encoder_(encoder),
decoder_(decoder),
bitrate_allocator_(CreateBitrateAllocator(config)),
- encode_callback_(new VideoProcessorEncodeCompleteCallback(this)),
- decode_callback_(new VideoProcessorDecodeCompleteCallback(this)),
packet_manipulator_(packet_manipulator),
config_(config),
analysis_frame_reader_(analysis_frame_reader),
@@ -156,9 +156,14 @@ VideoProcessorImpl::VideoProcessorImpl(webrtc::VideoEncoder* encoder,
RTC_DCHECK(stats);
frame_infos_.reserve(num_frames_);
+
+ task_checker_.Detach();
}
+VideoProcessorImpl::~VideoProcessorImpl() = default;
+
bool VideoProcessorImpl::Init() {
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
RTC_DCHECK(!initialized_)
<< "This VideoProcessor has already been initialized.";
@@ -166,9 +171,11 @@ bool VideoProcessorImpl::Init() {
bit_rate_factor_ = config_.codec_settings->maxFramerate * 0.001 * 8; // bits
// Setup required callbacks for the encoder/decoder.
+ encode_callback_.reset(new VideoProcessorEncodeCompleteCallback(this));
RTC_CHECK_EQ(encoder_->RegisterEncodeCompleteCallback(encode_callback_.get()),
WEBRTC_VIDEO_CODEC_OK)
<< "Failed to register encode complete callback";
+ decode_callback_.reset(new VideoProcessorDecodeCompleteCallback(this));
RTC_CHECK_EQ(decoder_->RegisterDecodeCompleteCallback(decode_callback_.get()),
WEBRTC_VIDEO_CODEC_OK)
<< "Failed to register decode complete callback";
@@ -203,12 +210,14 @@ bool VideoProcessorImpl::Init() {
return true;
}
-VideoProcessorImpl::~VideoProcessorImpl() {
+void VideoProcessorImpl::DeregisterCallbacks() {
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
tommi 2017/03/21 10:03:27 if DeregisterCallbacks() is always followed by del
brandtr 2017/06/28 09:40:24 The calling of Deinit() is not directly followed b
encoder_->RegisterEncodeCompleteCallback(nullptr);
decoder_->RegisterDecodeCompleteCallback(nullptr);
}
void VideoProcessorImpl::SetRates(int bit_rate, int frame_rate) {
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
int set_rates_result = encoder_->SetRateAllocation(
bitrate_allocator_->GetAllocation(bit_rate * 1000, frame_rate),
frame_rate);
@@ -219,24 +228,29 @@ void VideoProcessorImpl::SetRates(int bit_rate, int frame_rate) {
}
size_t VideoProcessorImpl::EncodedFrameSize(int frame_number) {
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
RTC_DCHECK_LT(frame_number, frame_infos_.size());
return frame_infos_[frame_number].encoded_frame_size;
}
FrameType VideoProcessorImpl::EncodedFrameType(int frame_number) {
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
RTC_DCHECK_LT(frame_number, frame_infos_.size());
return frame_infos_[frame_number].encoded_frame_type;
}
int VideoProcessorImpl::NumberDroppedFrames() {
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
return num_dropped_frames_;
}
int VideoProcessorImpl::NumberSpatialResizes() {
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
return num_spatial_resizes_;
}
bool VideoProcessorImpl::ProcessFrame(int frame_number) {
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
RTC_DCHECK_GE(frame_number, 0);
RTC_DCHECK_LE(frame_number, frame_infos_.size())
<< "Must process frames without gaps.";
@@ -297,8 +311,12 @@ void VideoProcessorImpl::FrameEncoded(
const webrtc::RTPFragmentationHeader* fragmentation) {
// For the highest measurement accuracy of the encode time, the start/stop
// time recordings should wrap the Encode call as tightly as possible.
+ // TODO(brandtr): Consider moving this measurement into the callback wrapper
+ // class.
int64_t encode_stop_ns = rtc::TimeNanos();
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
tommi 2017/03/21 10:03:27 nit: keep these checks at the top of each function
brandtr 2017/06/28 09:40:24 Done.
+
if (encoded_frame_writer_) {
RTC_CHECK(encoded_frame_writer_->WriteFrame(encoded_image, codec));
}
@@ -421,8 +439,12 @@ void VideoProcessorImpl::FrameEncoded(
void VideoProcessorImpl::FrameDecoded(const VideoFrame& image) {
// For the highest measurement accuracy of the decode time, the start/stop
// time recordings should wrap the Decode call as tightly as possible.
+ // TODO(brandtr): Consider moving this measurement into the callback wrapper
+ // class.
int64_t decode_stop_ns = rtc::TimeNanos();
+ RTC_DCHECK_CALLED_SEQUENTIALLY(&task_checker_);
+
// Update frame information and statistics.
int frame_number = TimestampToFrameNumber(image.timestamp());
RTC_DCHECK_LT(frame_number, frame_infos_.size());

Powered by Google App Engine
This is Rietveld 408576698