1*09537850SAkhilesh Sanikop /* 2*09537850SAkhilesh Sanikop * Copyright 2019 The libgav1 Authors 3*09537850SAkhilesh Sanikop * 4*09537850SAkhilesh Sanikop * Licensed under the Apache License, Version 2.0 (the "License"); 5*09537850SAkhilesh Sanikop * you may not use this file except in compliance with the License. 6*09537850SAkhilesh Sanikop * You may obtain a copy of the License at 7*09537850SAkhilesh Sanikop * 8*09537850SAkhilesh Sanikop * http://www.apache.org/licenses/LICENSE-2.0 9*09537850SAkhilesh Sanikop * 10*09537850SAkhilesh Sanikop * Unless required by applicable law or agreed to in writing, software 11*09537850SAkhilesh Sanikop * distributed under the License is distributed on an "AS IS" BASIS, 12*09537850SAkhilesh Sanikop * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*09537850SAkhilesh Sanikop * See the License for the specific language governing permissions and 14*09537850SAkhilesh Sanikop * limitations under the License. 15*09537850SAkhilesh Sanikop */ 16*09537850SAkhilesh Sanikop 17*09537850SAkhilesh Sanikop #ifndef LIBGAV1_EXAMPLES_FILE_READER_FACTORY_H_ 18*09537850SAkhilesh Sanikop #define LIBGAV1_EXAMPLES_FILE_READER_FACTORY_H_ 19*09537850SAkhilesh Sanikop 20*09537850SAkhilesh Sanikop #include <memory> 21*09537850SAkhilesh Sanikop #include <string> 22*09537850SAkhilesh Sanikop 23*09537850SAkhilesh Sanikop #include "examples/file_reader_interface.h" 24*09537850SAkhilesh Sanikop 25*09537850SAkhilesh Sanikop namespace libgav1 { 26*09537850SAkhilesh Sanikop 27*09537850SAkhilesh Sanikop class FileReaderFactory { 28*09537850SAkhilesh Sanikop public: 29*09537850SAkhilesh Sanikop using OpenFunction = std::unique_ptr<FileReaderInterface> (*)( 30*09537850SAkhilesh Sanikop const std::string& file_name, bool error_tolerant); 31*09537850SAkhilesh Sanikop 32*09537850SAkhilesh Sanikop FileReaderFactory() = delete; 33*09537850SAkhilesh Sanikop FileReaderFactory(const FileReaderFactory&) = delete; 34*09537850SAkhilesh Sanikop FileReaderFactory& operator=(const FileReaderFactory&) = delete; 35*09537850SAkhilesh Sanikop ~FileReaderFactory() = default; 36*09537850SAkhilesh Sanikop 37*09537850SAkhilesh Sanikop // Registers the OpenFunction for a FileReaderInterface and returns true when 38*09537850SAkhilesh Sanikop // registration succeeds. 39*09537850SAkhilesh Sanikop static bool RegisterReader(OpenFunction open_function); 40*09537850SAkhilesh Sanikop 41*09537850SAkhilesh Sanikop // Passes |file_name| to each OpenFunction until one succeeds. Returns nullptr 42*09537850SAkhilesh Sanikop // when no reader is found for |file_name|. Otherwise a FileReaderInterface is 43*09537850SAkhilesh Sanikop // returned. If |error_tolerant| is true and the reader supports it, some 44*09537850SAkhilesh Sanikop // format and read errors may be ignored and partial data returned. 45*09537850SAkhilesh Sanikop static std::unique_ptr<FileReaderInterface> OpenReader( 46*09537850SAkhilesh Sanikop const std::string& file_name, bool error_tolerant = false); 47*09537850SAkhilesh Sanikop }; 48*09537850SAkhilesh Sanikop 49*09537850SAkhilesh Sanikop } // namespace libgav1 50*09537850SAkhilesh Sanikop 51*09537850SAkhilesh Sanikop #endif // LIBGAV1_EXAMPLES_FILE_READER_FACTORY_H_ 52