diff --git a/modules/audio_processing/aec_dump/BUILD.gn b/modules/audio_processing/aec_dump/BUILD.gn index e0990af90a..554fee57d8 100644 --- a/modules/audio_processing/aec_dump/BUILD.gn +++ b/modules/audio_processing/aec_dump/BUILD.gn @@ -17,6 +17,7 @@ rtc_source_set("aec_dump") { deps = [ "../", "../../../rtc_base:rtc_base_approved", + "../../../rtc_base/system:file_wrapper", "../../../rtc_base/system:rtc_export", ] } diff --git a/modules/audio_processing/aec_dump/aec_dump_factory.h b/modules/audio_processing/aec_dump/aec_dump_factory.h index 1e55d594ee..2a800a9418 100644 --- a/modules/audio_processing/aec_dump/aec_dump_factory.h +++ b/modules/audio_processing/aec_dump/aec_dump_factory.h @@ -16,6 +16,7 @@ #include "modules/audio_processing/include/aec_dump.h" #include "rtc_base/platform_file.h" +#include "rtc_base/system/file_wrapper.h" #include "rtc_base/system/rtc_export.h" namespace rtc { @@ -32,6 +33,10 @@ class RTC_EXPORT AecDumpFactory { // responsibility for |handle| and closes it in the destructor. A // non-null return value indicates that the file has been // sucessfully opened. + static std::unique_ptr Create(webrtc::FileWrapper&& file, + int64_t max_log_size_bytes, + rtc::TaskQueue* worker_queue); + // TODO(webrtc:6463): Deprecated. Delete, together with the PlatformFile type. static std::unique_ptr Create(rtc::PlatformFile file, int64_t max_log_size_bytes, rtc::TaskQueue* worker_queue); diff --git a/modules/audio_processing/aec_dump/aec_dump_impl.cc b/modules/audio_processing/aec_dump/aec_dump_impl.cc index 00573436c8..ebd0f575c3 100644 --- a/modules/audio_processing/aec_dump/aec_dump_impl.cc +++ b/modules/audio_processing/aec_dump/aec_dump_impl.cc @@ -216,36 +216,34 @@ std::unique_ptr AecDumpImpl::CreateWriteToFileTask() { &num_bytes_left_for_log_); } -std::unique_ptr AecDumpFactory::Create(rtc::PlatformFile file, +std::unique_ptr AecDumpFactory::Create(webrtc::FileWrapper&& file, int64_t max_log_size_bytes, rtc::TaskQueue* worker_queue) { RTC_DCHECK(worker_queue); - FILE* handle = rtc::FdopenPlatformFileForWriting(file); - if (!handle) { + if (!file.is_open()) return nullptr; - } - return absl::make_unique(FileWrapper(handle), max_log_size_bytes, + + return absl::make_unique(std::move(file), max_log_size_bytes, worker_queue); } +std::unique_ptr AecDumpFactory::Create(rtc::PlatformFile file, + int64_t max_log_size_bytes, + rtc::TaskQueue* worker_queue) { + return Create(FileWrapper(rtc::FdopenPlatformFileForWriting(file)), + max_log_size_bytes, worker_queue); +} + std::unique_ptr AecDumpFactory::Create(std::string file_name, int64_t max_log_size_bytes, rtc::TaskQueue* worker_queue) { - RTC_DCHECK(worker_queue); - FileWrapper debug_file = FileWrapper::OpenWriteOnly(file_name.c_str()); - if (!debug_file.is_open()) { - return nullptr; - } - return absl::make_unique(std::move(debug_file), - max_log_size_bytes, worker_queue); + return Create(FileWrapper::OpenWriteOnly(file_name.c_str()), + max_log_size_bytes, worker_queue); } std::unique_ptr AecDumpFactory::Create(FILE* handle, int64_t max_log_size_bytes, rtc::TaskQueue* worker_queue) { - RTC_DCHECK(worker_queue); - RTC_DCHECK(handle); - return absl::make_unique(FileWrapper(handle), max_log_size_bytes, - worker_queue); + return Create(FileWrapper(handle), max_log_size_bytes, worker_queue); } } // namespace webrtc diff --git a/modules/audio_processing/aec_dump/null_aec_dump_factory.cc b/modules/audio_processing/aec_dump/null_aec_dump_factory.cc index 5623e24aa5..14e7c037cf 100644 --- a/modules/audio_processing/aec_dump/null_aec_dump_factory.cc +++ b/modules/audio_processing/aec_dump/null_aec_dump_factory.cc @@ -13,6 +13,12 @@ namespace webrtc { +std::unique_ptr AecDumpFactory::Create(webrtc::FileWrapper&& file, + int64_t max_log_size_bytes, + rtc::TaskQueue* worker_queue) { + return nullptr; +} + std::unique_ptr AecDumpFactory::Create(rtc::PlatformFile file, int64_t max_log_size_bytes, rtc::TaskQueue* worker_queue) { diff --git a/rtc_base/system/file_wrapper.h b/rtc_base/system/file_wrapper.h index 4f5d5119df..9062abd6bf 100644 --- a/rtc_base/system/file_wrapper.h +++ b/rtc_base/system/file_wrapper.h @@ -44,7 +44,8 @@ class FileWrapper final { FileWrapper() = default; - // Takes over ownership of |file|, closing it on destruction. + // Takes over ownership of |file|, closing it on destruction. Calling with + // null |file| is allowed, and results in a FileWrapper with is_open() false. explicit FileWrapper(FILE* file) : file_(file) {} ~FileWrapper() { Close(); }