// Copyright 2019 The libgav1 Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "examples/file_reader_factory.h" #include #include "examples/logging.h" namespace libgav1 { namespace { std::vector* GetFileReaderOpenFunctions() { static auto* open_functions = new (std::nothrow) std::vector(); return open_functions; } } // namespace bool FileReaderFactory::RegisterReader(OpenFunction open_function) { if (open_function == nullptr) return false; auto* open_functions = GetFileReaderOpenFunctions(); const size_t num_readers = open_functions->size(); open_functions->push_back(open_function); return open_functions->size() == num_readers + 1; } std::unique_ptr FileReaderFactory::OpenReader( const std::string& file_name, const bool error_tolerant /*= false*/) { for (auto* open_function : *GetFileReaderOpenFunctions()) { auto reader = open_function(file_name, error_tolerant); if (reader == nullptr) continue; return reader; } LIBGAV1_EXAMPLES_LOG_ERROR("No file reader able to open input"); return nullptr; } } // namespace libgav1