⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 targetposition.cc

📁 Linux下比较早的基于命令行的DVD播放器
💻 CC
📖 第 1 页 / 共 2 页
字号:
{    PGC pgc = getPGC();    if (!pgc) {        Log::fatal("dvd::vm::TargetPosition::enterLastProgram: cannot enter last program in invalid PGC\n");        return false;    } else if (pgc.isEmpty()) {        Log::fatal("dvd::vm::TargetPosition::enterLastProgram: Cannot enter last program in empty PGC\n");        return false;    } else {        return enterProgram(pgc.getNumberOfPrograms());    }}//------------------------------------------------------------------------------bool TargetPosition::enterCell(unsigned cellNo){    PGC pgc = getPGC();    if (!pgc) {        Log::fatal("dvd::vm::TargetPosition::enterCell: cannot enter cell %u in invalid PGC\n", cellNo);        return false;    } else {        return enterBaseCell(pgc, pgc.findPreviousBaseCell(cellNo));    }}//------------------------------------------------------------------------------bool TargetPosition::repeatCell(){    return enterCell(getCellNumber());}//------------------------------------------------------------------------------bool TargetPosition::enterNextCell(){    PGC pgc = getPGC();    unsigned cellNo = getCellNumber();    if (!pgc) {        Log::fatal("dvd::vm::TargetPosition::enterNextCell: cannot enter next cell in invalid PGC\n");        return false;    } else if (cellNo>=1 && cellNo<=pgc.getNumberOfCells()) {        return enterBaseCell(pgc, pgc.findNextBaseCell(cellNo+1));    } else {        Log::error("dvd::vm::TargetPosition::enterNextCell: cannot enter next cell from cell %u\n", cellNo);        return false;    }}//------------------------------------------------------------------------------bool TargetPosition::enterLastCell(){    PGC pgc = getPGC();    if (!pgc) {        Log::fatal("dvd::vm::TargetPosition::enterLastCell: cannot enter last cell in invalid PGC\n");        return false;    } else if (pgc.isEmpty()) {        Log::error("dvd::vm::TargetPosition::enterLastCell: cannot enter last cell in empty PGC\n");        return false;    } else {        unsigned cellNo = pgc.getNumberOfCells();        return enterBaseCell(pgc, pgc.findPreviousBaseCell(cellNo));    }}//------------------------------------------------------------------------------bool TargetPosition::enterLastVOBU(){    PGC pgc = getPGC();    unsigned cellNo = getCellNumber();    if (!pgc) {        Log::fatal("dvd::vm::TargetPosition::enterLastVOBU: PGC is invalid\n");        return false;    } else if (cellNo<1 || cellNo>pgc.getNumberOfCells()) {        Log::fatal("dvd::vm::TargetPosition::enterLastVOBU: cell number is invalid\n");        return false;    } else {        setSectorNumber(pgc.getCellPlaybackInfo(cellNo).getLastVOBUFirstSector());        return true;    }}//------------------------------------------------------------------------------bool TargetPosition::enterPreviousCell(){    PGC pgc = getPGC();    unsigned cellNo = getCellNumber();    if (!pgc) {        Log::fatal("dvd::vm::TargetPosition::enterPreviousCell: cannot enter previous cell in invalid PGC\n");        return false;    } else if (cellNo>=1 && cellNo<=pgc.getNumberOfCells()) {        unsigned baseCellNumber =            pgc.findPreviousBaseCell(getCellNumber());        return enterBaseCell(pgc,                             pgc.findPreviousBaseCell(baseCellNumber-1));    } else {        Log::error("dvd::vm::TargetPosition::enterPreviousCell: cannot enter cell preceding cell %u\n", cellNo);        return false;    }}//------------------------------------------------------------------------------bool TargetPosition::enterTT(unsigned titleNo){    if (!isInVideoManager()) {        Log::error("dvd::vm::TargetPosition::enterTT: trying to enter title outside of the video manager!\n");        return false;    }    TitleInfoTable titleInfoTable = getVMG()->getTitleInfoTable();    if (!titleInfoTable || titleNo<1 || titleNo>titleInfoTable.getNumberOfTitles())    {        Log::error("dvd::vm::TargetPosition::enterTT: title table is missing or title number %u is out of range!\n",                    titleNo);        return false;    }    // FIXME: we may need it somewhere    //setSPRValue(SPRM::volumeTitleNumber, titleNo);    TitleInfo  titleInfo = titleInfoTable.getTitleInfo(titleNo);    return enterVTS(titleInfo.getVTSNumber(), titleInfo.getVTSTitleNumber());}//------------------------------------------------------------------------------bool TargetPosition::enterVTS(unsigned vtsNo, unsigned vtsTitleNo){    // FIXME: check vtsNo    setVTSNumber(vtsNo);    return enterVTSTitle(vtsTitleNo);}//------------------------------------------------------------------------------bool TargetPosition::enterVTSTitle(unsigned vtsTitleNo, unsigned pttNo){    clearInMenu();    if (isInVideoManager()) {        Log::error("dvd::vm::TargetPosition::enterVTSTitle: trying to enter VTS title while in the video manager!\n");        return false;    }    const VTS* vts = findVTS();    if (vts==0) {        Log::fatal("dvd::vm::TargetPosition::enterVTSTitle: cannot enter VTS title because VTS is 0\n");        return false;    }    TitleTable titleTable = vts->getTitleTable();    if (!titleTable || vtsTitleNo<1 || vtsTitleNo>titleTable.getNumberOfTitles()) {        Log::error("dvd::vm::TargetPosition::enterVTSTitle: invalid VTS title number: %u\n", vtsTitleNo);        return false;    }        // FIXME: we may need it somewhere    //setSPRValue(SPRM::vtsTitleNumber, vtsTitleNo);    return enterPTT(vtsTitleNo, pttNo);}//------------------------------------------------------------------------------bool TargetPosition::enterPTT(unsigned vtsTitleNo, unsigned pttNo){    if (isInVideoManager()) {        Log::error("dvd::vm::TargetPosition::enterPTT: cannot enter a PTT of the video manager!\n");        return false;    }    if (isInMenu()) {        Log::error("dvd::vm::TargetPosition::enterPTT: cannot enter a PTT of a menu!\n");        return false;    }    const VTS* vts = findVTS();    if (vts==0) {        Log::fatal("dvd::vm::TargetPosition::enterPTT: cannot enter PTT because VTS is 0\n");        return false;    }    TitleTable titleTable = vts->getTitleTable();    if (vtsTitleNo<1 || vtsTitleNo>titleTable.getNumberOfTitles()) {        Log::error("dvd::vm::TargetPosition::enterPTT: cannot enter to VTS title %u\n", vtsTitleNo);        return false;    }    Title title = titleTable.getTitle(vtsTitleNo);    if (pttNo<1 || pttNo>title.getNumberOfParts()) {        Log::error("dvd::vm::TargetPosition::enterPTT: invalid part of title number: %u\n", pttNo);        return false;    }    if (!enterPGC(title.getPart(pttNo).getPGCNumber())) return false;    else return enterProgram(title.getPart(pttNo).getProgramNumber());}//------------------------------------------------------------------------------bool TargetPosition::enterBaseCell(PGC pgc, unsigned cellNo){    if (pgc.isEmpty()) {        setCellNumber(0);        setSectorNumber(0);        return true;    }    if (cellNo<1 || cellNo>pgc.getNumberOfCells()) {        Log::error("dvd::vm::TargetPosition::enterBaseCell: invalid cell number: %u\n", cellNo);        return false;    }    CellPlaybackInfo cellPlaybackInfo = pgc.getCellPlaybackInfo(cellNo);    if (cellPlaybackInfo.isInAngleBlock()) {        cellNo += state.getSPRValue(SPRM::angleNumber) - 1;        if (cellNo > pgc.getNumberOfCells()) {            Log::error("dvd::vm::TargetPosition::enterBaseCell: invalid cell number for angle: %u\n", cellNo);            return false;        } else {            cellPlaybackInfo = pgc.getCellPlaybackInfo(cellNo);        }    }        setCellNumber(cellNo);    setSectorNumber(cellPlaybackInfo.getFirstSector());    return true;}//------------------------------------------------------------------------------//------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -