/* Copyright (c) MediaArea.net SARL. All Rights Reserved. * * Use of this source code is governed by a BSD-style license that can * be found in the License.html file in the root of the source tree. */ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // Give information about a lot of media files // Dispatch the file to be tested by all containers // //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //--------------------------------------------------------------------------- #ifndef Reader_FileH #define Reader_FileH //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- #if defined(MEDIAINFO_FILE_YES) #include "MediaInfo/Reader/Reader__Base.h" #include "ZenLib/File.h" #include "ZenLib/Thread.h" #include "ZenLib/CriticalSection.h" #if MEDIAINFO_READTHREAD #ifdef WINDOWS #undef __TEXT #if __cplusplus >= 201703L || _MSVC_LANG >= 201703L namespace WindowsNamespace { #endif #include "windows.h" #if __cplusplus >= 201703L || _MSVC_LANG >= 201703L } using namespace WindowsNamespace; #endif #endif //WINDOWS #endif //MEDIAINFO_READTHREAD //--------------------------------------------------------------------------- namespace MediaInfoLib { //*************************************************************************** /// @brief Reader_File //*************************************************************************** #if MEDIAINFO_READTHREAD class Reader_File; class Reader_File_Thread : public Thread { public: Reader_File* Base; size_t ReadSize_Max; void Entry(); }; #endif //MEDIAINFO_READTHREAD class Reader_File : public Reader__Base { public : //Constructor/Destructor virtual ~Reader_File(); //Format testing size_t Format_Test(MediaInfo_Internal* MI, String File_Name); size_t Format_Test_PerParser(MediaInfo_Internal* MI, const String &File_Name); size_t Format_Test_PerParser_Continue (MediaInfo_Internal* MI); size_t Format_Test_PerParser_Seek (MediaInfo_Internal* MI, size_t Method, int64u Value, int64u ID); ZenLib::File F; std::bitset<32> Status; int64u Partial_Begin; int64u Partial_End; size_t CountOfSeconds; //Thread #if MEDIAINFO_READTHREAD Reader_File_Thread* ThreadInstance; int8u* Buffer; size_t Buffer_Max; size_t Buffer_Begin; size_t Buffer_End; size_t Buffer_End2; //Is also used for counting bytes before activating the thread bool IsLooping; #ifdef WINDOWS HANDLE Condition_WaitingForMorePlace; HANDLE Condition_WaitingForMoreData; #endif //WINDOWS private: void Destroy_Thread(MediaInfo_Internal* MI); public: #endif //MEDIAINFO_READTHREAD CriticalSection CS; MediaInfo_Internal* MI_Internal; }; } //NameSpace #endif //defined(MEDIAINFO_FILE_YES) #endif