Avoid using global task queue factory in fake encoder
by not using convenient rtc::TaskQueue constructor Bug: webrtc:10284 Change-Id: I3c6703fd8c86b2a230f62cac734eb616039e4abe Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/128603 Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27207}
This commit is contained in:

committed by
Commit Bot

parent
cde8ab265e
commit
22ed366fec
@ -363,8 +363,11 @@ int32_t DelayedEncoder::Encode(const VideoFrame& input_image,
|
|||||||
return FakeEncoder::Encode(input_image, frame_types);
|
return FakeEncoder::Encode(input_image, frame_types);
|
||||||
}
|
}
|
||||||
|
|
||||||
MultithreadedFakeH264Encoder::MultithreadedFakeH264Encoder(Clock* clock)
|
MultithreadedFakeH264Encoder::MultithreadedFakeH264Encoder(
|
||||||
|
Clock* clock,
|
||||||
|
TaskQueueFactory* task_queue_factory)
|
||||||
: test::FakeH264Encoder(clock),
|
: test::FakeH264Encoder(clock),
|
||||||
|
task_queue_factory_(task_queue_factory),
|
||||||
current_queue_(0),
|
current_queue_(0),
|
||||||
queue1_(nullptr),
|
queue1_(nullptr),
|
||||||
queue2_(nullptr) {
|
queue2_(nullptr) {
|
||||||
@ -378,8 +381,10 @@ int32_t MultithreadedFakeH264Encoder::InitEncode(const VideoCodec* config,
|
|||||||
size_t max_payload_size) {
|
size_t max_payload_size) {
|
||||||
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
|
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
|
||||||
|
|
||||||
queue1_.reset(new rtc::TaskQueue("Queue 1"));
|
queue1_ = task_queue_factory_->CreateTaskQueue(
|
||||||
queue2_.reset(new rtc::TaskQueue("Queue 2"));
|
"Queue 1", TaskQueueFactory::Priority::NORMAL);
|
||||||
|
queue2_ = task_queue_factory_->CreateTaskQueue(
|
||||||
|
"Queue 2", TaskQueueFactory::Priority::NORMAL);
|
||||||
|
|
||||||
return FakeH264Encoder::InitEncode(config, number_of_cores, max_payload_size);
|
return FakeH264Encoder::InitEncode(config, number_of_cores, max_payload_size);
|
||||||
}
|
}
|
||||||
@ -409,8 +414,8 @@ int32_t MultithreadedFakeH264Encoder::Encode(
|
|||||||
const std::vector<VideoFrameType>* frame_types) {
|
const std::vector<VideoFrameType>* frame_types) {
|
||||||
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
|
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
|
||||||
|
|
||||||
std::unique_ptr<rtc::TaskQueue>& queue =
|
TaskQueueBase* queue =
|
||||||
(current_queue_++ % 2 == 0) ? queue1_ : queue2_;
|
(current_queue_++ % 2 == 0) ? queue1_.get() : queue2_.get();
|
||||||
|
|
||||||
if (!queue) {
|
if (!queue) {
|
||||||
return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
|
return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "api/task_queue/task_queue_factory.h"
|
||||||
#include "api/video/encoded_image.h"
|
#include "api/video/encoded_image.h"
|
||||||
#include "api/video/video_bitrate_allocation.h"
|
#include "api/video/video_bitrate_allocation.h"
|
||||||
#include "api/video/video_frame.h"
|
#include "api/video/video_frame.h"
|
||||||
@ -26,7 +27,6 @@
|
|||||||
#include "modules/video_coding/include/video_codec_interface.h"
|
#include "modules/video_coding/include/video_codec_interface.h"
|
||||||
#include "rtc_base/critical_section.h"
|
#include "rtc_base/critical_section.h"
|
||||||
#include "rtc_base/sequenced_task_checker.h"
|
#include "rtc_base/sequenced_task_checker.h"
|
||||||
#include "rtc_base/task_queue.h"
|
|
||||||
#include "rtc_base/thread_annotations.h"
|
#include "rtc_base/thread_annotations.h"
|
||||||
#include "system_wrappers/include/clock.h"
|
#include "system_wrappers/include/clock.h"
|
||||||
|
|
||||||
@ -137,7 +137,8 @@ class DelayedEncoder : public test::FakeEncoder {
|
|||||||
// as it is called from the task queue in VideoStreamEncoder.
|
// as it is called from the task queue in VideoStreamEncoder.
|
||||||
class MultithreadedFakeH264Encoder : public test::FakeH264Encoder {
|
class MultithreadedFakeH264Encoder : public test::FakeH264Encoder {
|
||||||
public:
|
public:
|
||||||
explicit MultithreadedFakeH264Encoder(Clock* clock);
|
MultithreadedFakeH264Encoder(Clock* clock,
|
||||||
|
TaskQueueFactory* task_queue_factory);
|
||||||
virtual ~MultithreadedFakeH264Encoder() = default;
|
virtual ~MultithreadedFakeH264Encoder() = default;
|
||||||
|
|
||||||
int32_t InitEncode(const VideoCodec* config,
|
int32_t InitEncode(const VideoCodec* config,
|
||||||
@ -155,9 +156,12 @@ class MultithreadedFakeH264Encoder : public test::FakeH264Encoder {
|
|||||||
protected:
|
protected:
|
||||||
class EncodeTask;
|
class EncodeTask;
|
||||||
|
|
||||||
|
TaskQueueFactory* const task_queue_factory_;
|
||||||
int current_queue_ RTC_GUARDED_BY(sequence_checker_);
|
int current_queue_ RTC_GUARDED_BY(sequence_checker_);
|
||||||
std::unique_ptr<rtc::TaskQueue> queue1_ RTC_GUARDED_BY(sequence_checker_);
|
std::unique_ptr<TaskQueueBase, TaskQueueDeleter> queue1_
|
||||||
std::unique_ptr<rtc::TaskQueue> queue2_ RTC_GUARDED_BY(sequence_checker_);
|
RTC_GUARDED_BY(sequence_checker_);
|
||||||
|
std::unique_ptr<TaskQueueBase, TaskQueueDeleter> queue2_
|
||||||
|
RTC_GUARDED_BY(sequence_checker_);
|
||||||
rtc::SequencedTaskChecker sequence_checker_;
|
rtc::SequencedTaskChecker sequence_checker_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -510,6 +510,7 @@ if (rtc_include_tests) {
|
|||||||
"../api:mock_frame_decryptor",
|
"../api:mock_frame_decryptor",
|
||||||
"../api:scoped_refptr",
|
"../api:scoped_refptr",
|
||||||
"../api:simulated_network_api",
|
"../api:simulated_network_api",
|
||||||
|
"../api/task_queue:default_task_queue_factory",
|
||||||
"../api/task_queue:global_task_queue_factory",
|
"../api/task_queue:global_task_queue_factory",
|
||||||
"../api/test/video:function_video_factory",
|
"../api/test/video:function_video_factory",
|
||||||
"../api/units:data_rate",
|
"../api/units:data_rate",
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "absl/memory/memory.h"
|
#include "absl/memory/memory.h"
|
||||||
|
#include "api/task_queue/default_task_queue_factory.h"
|
||||||
#include "api/test/simulated_network.h"
|
#include "api/test/simulated_network.h"
|
||||||
#include "api/video/encoded_image.h"
|
#include "api/video/encoded_image.h"
|
||||||
#include "api/video/video_bitrate_allocation.h"
|
#include "api/video/video_bitrate_allocation.h"
|
||||||
@ -681,9 +682,11 @@ TEST_F(VideoSendStreamTest, DISABLED_DoesUtilizeUlpfecForVp9WithNackEnabled) {
|
|||||||
#endif // defined(RTC_ENABLE_VP9)
|
#endif // defined(RTC_ENABLE_VP9)
|
||||||
|
|
||||||
TEST_F(VideoSendStreamTest, SupportsUlpfecWithMultithreadedH264) {
|
TEST_F(VideoSendStreamTest, SupportsUlpfecWithMultithreadedH264) {
|
||||||
test::FunctionVideoEncoderFactory encoder_factory([]() {
|
std::unique_ptr<TaskQueueFactory> task_queue_factory =
|
||||||
|
CreateDefaultTaskQueueFactory();
|
||||||
|
test::FunctionVideoEncoderFactory encoder_factory([&]() {
|
||||||
return absl::make_unique<test::MultithreadedFakeH264Encoder>(
|
return absl::make_unique<test::MultithreadedFakeH264Encoder>(
|
||||||
Clock::GetRealTimeClock());
|
Clock::GetRealTimeClock(), task_queue_factory.get());
|
||||||
});
|
});
|
||||||
UlpfecObserver test(false, false, true, true, "H264", &encoder_factory);
|
UlpfecObserver test(false, false, true, true, "H264", &encoder_factory);
|
||||||
RunBaseTest(&test);
|
RunBaseTest(&test);
|
||||||
@ -861,9 +864,11 @@ TEST_F(VideoSendStreamTest, SupportsFlexfecWithNackH264) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(VideoSendStreamTest, SupportsFlexfecWithMultithreadedH264) {
|
TEST_F(VideoSendStreamTest, SupportsFlexfecWithMultithreadedH264) {
|
||||||
test::FunctionVideoEncoderFactory encoder_factory([]() {
|
std::unique_ptr<TaskQueueFactory> task_queue_factory =
|
||||||
|
CreateDefaultTaskQueueFactory();
|
||||||
|
test::FunctionVideoEncoderFactory encoder_factory([&]() {
|
||||||
return absl::make_unique<test::MultithreadedFakeH264Encoder>(
|
return absl::make_unique<test::MultithreadedFakeH264Encoder>(
|
||||||
Clock::GetRealTimeClock());
|
Clock::GetRealTimeClock(), task_queue_factory.get());
|
||||||
});
|
});
|
||||||
|
|
||||||
FlexfecObserver test(false, false, "H264", &encoder_factory, 1);
|
FlexfecObserver test(false, false, "H264", &encoder_factory, 1);
|
||||||
|
Reference in New Issue
Block a user