webrtc_m130/video/adaptation/video_stream_encoder_resource.cc
Markus Handell 9bbff07b20 Migrate video/adaptation and video/end_to_end_tests to webrtc::Mutex.
Bug: webrtc:11567
Change-Id: I6c2d0c7e3e8fac85cf4d19223c4ef3d144598fda
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/178812
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31651}
2020-07-07 15:34:16 +00:00

86 lines
2.6 KiB
C++

/*
* Copyright 2020 The WebRTC Project Authors. All rights reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "video/adaptation/video_stream_encoder_resource.h"
#include <algorithm>
#include <utility>
namespace webrtc {
VideoStreamEncoderResource::VideoStreamEncoderResource(std::string name)
: lock_(),
name_(std::move(name)),
encoder_queue_(nullptr),
resource_adaptation_queue_(nullptr),
listener_(nullptr) {}
VideoStreamEncoderResource::~VideoStreamEncoderResource() {
RTC_DCHECK(!listener_)
<< "There is a listener depending on a VideoStreamEncoderResource being "
<< "destroyed.";
}
void VideoStreamEncoderResource::RegisterEncoderTaskQueue(
TaskQueueBase* encoder_queue) {
RTC_DCHECK(!encoder_queue_);
RTC_DCHECK(encoder_queue);
encoder_queue_ = encoder_queue;
}
void VideoStreamEncoderResource::RegisterAdaptationTaskQueue(
TaskQueueBase* resource_adaptation_queue) {
MutexLock lock(&lock_);
RTC_DCHECK(!resource_adaptation_queue_);
RTC_DCHECK(resource_adaptation_queue);
resource_adaptation_queue_ = resource_adaptation_queue;
}
void VideoStreamEncoderResource::UnregisterAdaptationTaskQueue() {
MutexLock lock(&lock_);
RTC_DCHECK(resource_adaptation_queue_);
RTC_DCHECK_RUN_ON(resource_adaptation_queue_);
resource_adaptation_queue_ = nullptr;
}
void VideoStreamEncoderResource::SetResourceListener(
ResourceListener* listener) {
RTC_DCHECK_RUN_ON(resource_adaptation_queue());
// If you want to change listener you need to unregister the old listener by
// setting it to null first.
RTC_DCHECK(!listener_ || !listener) << "A listener is already set";
listener_ = listener;
}
std::string VideoStreamEncoderResource::Name() const {
return name_;
}
void VideoStreamEncoderResource::OnResourceUsageStateMeasured(
ResourceUsageState usage_state) {
RTC_DCHECK_RUN_ON(resource_adaptation_queue());
if (listener_) {
listener_->OnResourceUsageStateMeasured(this, usage_state);
}
}
TaskQueueBase* VideoStreamEncoderResource::encoder_queue() const {
return encoder_queue_;
}
TaskQueueBase* VideoStreamEncoderResource::resource_adaptation_queue() const {
MutexLock lock(&lock_);
RTC_DCHECK(resource_adaptation_queue_);
RTC_DCHECK_RUN_ON(resource_adaptation_queue_);
return resource_adaptation_queue_;
}
} // namespace webrtc