1 /* 2 * Copyright 2020 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 #include "video/adaptation/video_stream_encoder_resource.h" 12 13 #include <algorithm> 14 #include <utility> 15 16 namespace webrtc { 17 VideoStreamEncoderResource(std::string name)18VideoStreamEncoderResource::VideoStreamEncoderResource(std::string name) 19 : lock_(), 20 name_(std::move(name)), 21 encoder_queue_(nullptr), 22 resource_adaptation_queue_(nullptr), 23 listener_(nullptr) {} 24 ~VideoStreamEncoderResource()25VideoStreamEncoderResource::~VideoStreamEncoderResource() { 26 RTC_DCHECK(!listener_) 27 << "There is a listener depending on a VideoStreamEncoderResource being " 28 << "destroyed."; 29 } 30 RegisterEncoderTaskQueue(TaskQueueBase * encoder_queue)31void VideoStreamEncoderResource::RegisterEncoderTaskQueue( 32 TaskQueueBase* encoder_queue) { 33 RTC_DCHECK(!encoder_queue_); 34 RTC_DCHECK(encoder_queue); 35 encoder_queue_ = encoder_queue; 36 } 37 RegisterAdaptationTaskQueue(TaskQueueBase * resource_adaptation_queue)38void VideoStreamEncoderResource::RegisterAdaptationTaskQueue( 39 TaskQueueBase* resource_adaptation_queue) { 40 MutexLock lock(&lock_); 41 RTC_DCHECK(!resource_adaptation_queue_); 42 RTC_DCHECK(resource_adaptation_queue); 43 resource_adaptation_queue_ = resource_adaptation_queue; 44 } 45 UnregisterAdaptationTaskQueue()46void VideoStreamEncoderResource::UnregisterAdaptationTaskQueue() { 47 MutexLock lock(&lock_); 48 RTC_DCHECK(resource_adaptation_queue_); 49 RTC_DCHECK_RUN_ON(resource_adaptation_queue_); 50 resource_adaptation_queue_ = nullptr; 51 } 52 SetResourceListener(ResourceListener * listener)53void VideoStreamEncoderResource::SetResourceListener( 54 ResourceListener* listener) { 55 // If you want to change listener you need to unregister the old listener by 56 // setting it to null first. 57 MutexLock crit(&listener_lock_); 58 RTC_DCHECK(!listener_ || !listener) << "A listener is already set"; 59 listener_ = listener; 60 } 61 Name() const62std::string VideoStreamEncoderResource::Name() const { 63 return name_; 64 } 65 OnResourceUsageStateMeasured(ResourceUsageState usage_state)66void VideoStreamEncoderResource::OnResourceUsageStateMeasured( 67 ResourceUsageState usage_state) { 68 MutexLock crit(&listener_lock_); 69 if (listener_) { 70 listener_->OnResourceUsageStateMeasured(this, usage_state); 71 } 72 } 73 encoder_queue() const74TaskQueueBase* VideoStreamEncoderResource::encoder_queue() const { 75 return encoder_queue_; 76 } 77 resource_adaptation_queue() const78TaskQueueBase* VideoStreamEncoderResource::resource_adaptation_queue() const { 79 MutexLock lock(&lock_); 80 RTC_DCHECK(resource_adaptation_queue_); 81 RTC_DCHECK_RUN_ON(resource_adaptation_queue_); 82 return resource_adaptation_queue_; 83 } 84 85 } // namespace webrtc 86