/* * 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. */ #ifndef VIDEO_ADAPTATION_VIDEO_STREAM_ENCODER_RESOURCE_H_ #define VIDEO_ADAPTATION_VIDEO_STREAM_ENCODER_RESOURCE_H_ #include #include #include "absl/types/optional.h" #include "api/adaptation/resource.h" #include "api/task_queue/task_queue_base.h" #include "call/adaptation/adaptation_constraint.h" #include "rtc_base/synchronization/mutex.h" #include "rtc_base/synchronization/sequence_checker.h" namespace webrtc { class VideoStreamEncoderResource : public Resource { public: ~VideoStreamEncoderResource() override; // Registering task queues must be performed as part of initialization. void RegisterEncoderTaskQueue(TaskQueueBase* encoder_queue); // Resource implementation. std::string Name() const override; void SetResourceListener(ResourceListener* listener) override; protected: explicit VideoStreamEncoderResource(std::string name); void OnResourceUsageStateMeasured(ResourceUsageState usage_state); // The caller is responsible for ensuring the task queue is still valid. TaskQueueBase* encoder_queue() const; private: mutable Mutex lock_; const std::string name_; // Treated as const after initialization. TaskQueueBase* encoder_queue_; ResourceListener* listener_ RTC_GUARDED_BY(lock_); }; } // namespace webrtc #endif // VIDEO_ADAPTATION_VIDEO_STREAM_ENCODER_RESOURCE_H_