📄 fulldvddump.h
字号:
//// Copyright (c) 2004 by Istv醤 V醨adi//// This file is part of dxr3Player, a DVD player written specifically // for the DXR3 (aka Hollywood+) decoder card.// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA#ifndef DXR3PLAYER_DVD_FULLDVDDUMP_H#define DXR3PLAYER_DVD_FULLDVDDUMP_H//------------------------------------------------------------------------------#include "Device.h"#include "FileHandler.h"#include "DVD.h"//------------------------------------------------------------------------------namespace ifodump {class IFOReader;}//------------------------------------------------------------------------------namespace dvd {//------------------------------------------------------------------------------/** * DVD device which works from a full DVD dump. */class FullDVDDump : public Device{private: /** * Our own file handler. */ class FileHandler : public dvd::FileHandler { private: /** * The template for the file name to open. */ char* fileNameTemplate; /** * The current chunk. */ size_t chunkNumber; /** * The file descriptor of the chunk currently opened. If >=0, * chunkNumber gives its number. */ int fd; public: /** * Construct the file handler with the given map. */ FileHandler(const char* dumpDirectory, size_t vtsNumber, bool isMenu); /** * Destroy the file handler. */ ~FileHandler(); /** * @see dvd::FileHandler::getLength */ virtual size_t getLength(); /** * @see dvd::FileHandler::readSectors */ virtual void readSectors(void* dest, size_t offset, size_t numSectors); private: /** * Open the given chunk, if not already opened. */ void openChunk(size_t chunkNo); }; /** * The name of the IFO dump file. * * FIXME: use a common constant with dumpdvd */ static const char* ifoDumpName;public: /** * The size of a chunk in sectors. */ static const size_t chunkSize = 512 * 1024; /** * Check if the given file is a full dump directory. */ static bool isDumpDirectory(const char* path);private: /** * The directory this object represents. */ char* dumpDirectory; /** * The open indicator. */ bool opened; /** * The IFO information */ ifo_handle_t ifoHandles[DVD::maxNumberOfVTSs+1]; public: /** * Construct the DVD dump device from the given dump directory. */ FullDVDDump(const char* dumpDirectory); /** * Destroy the DVD dump device. */ ~FullDVDDump(); /** * @see Device::hasDisk */ virtual bool hasDisk(); /** * @see Device::isOpen */ virtual bool isOpen() const; /** * @see Device::open */ virtual bool open(); /** * @see Device::getID */ virtual void getID(unsigned char* dest) const; /** * @see Device::getIFOHandle */ virtual const ifo_handle_t* getIFOHandle(unsigned titleNo) const; /** * @see Device::openFile */ virtual dvd::FileHandler* openFile(unsigned titleNo, bool isMenu) const; /** * @see Device::close */ virtual void close(); /** * @see Device::eject */ virtual void eject();private: /** * Read the IFO data for the IFO with the given index. */ void readIFO(ifodump::IFOReader& reader, size_t ifoIndex);}; //------------------------------------------------------------------------------} /* namespace dvd *///------------------------------------------------------------------------------#endif // DXR3PLAYER_DVD_FULLDVDDUMP_H// Local variables:// mode: c++// End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -