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

📄 ifo.cc

📁 Linux下比较早的基于命令行的DVD播放器
💻 CC
字号:
//// Copyright (c) 2003 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//------------------------------------------------------------------------------#include "IFO.h"#include "util/Log.h"//------------------------------------------------------------------------------using dvd::VideoStreamAttributes;using dvd::AudioStreamAttributes;using dvd::SPUStreamAttributes;using dvd::IFO;using dvd::VMG;using dvd::VTS;using dvd::PGCTable;//------------------------------------------------------------------------------videoStandard_t VideoStreamAttributes::getStandard() const{    switch(video_attr->video_format) {      case 0:         return NTSC;        break;      case 1:      default:        return PAL;        break;    }}//------------------------------------------------------------------------------aspectRatio_t VideoStreamAttributes::getDisplayAspectRatio() const{    switch(video_attr->display_aspect_ratio) {      case 0:        return AR_4_3;      case 3:        return AR_16_9;      default:        return AR_16_9;    }}//------------------------------------------------------------------------------aspectRatio_t VideoStreamAttributes::getAspectRatio() const{    switch(video_attr->display_aspect_ratio) {      case 0:        return (video_attr->permitted_df==2) ? AR_16_9 : AR_4_3;      case 3:        return (video_attr->permitted_df==1) ? AR_4_3 : AR_16_9;      default:        return AR_16_9;    }}//------------------------------------------------------------------------------displayFormat_t VideoStreamAttributes::getDisplayFormat() const{    if (video_attr->permitted_df==1) { // only pan & scan        if (video_attr->display_aspect_ratio==3) {  // 16:9            return DF_WIDESCREEN;        } else {            return DF_PANSCAN;        }    } else if (video_attr->permitted_df==2) { // only letterboxed         if (video_attr->display_aspect_ratio==0) { // 4:3            return DF_SMALLSCREEN;        } else {            return DF_LETTERBOX;        }    } else if (video_attr->display_aspect_ratio==0) { // 4:3        return DF_SMALLSCREEN;    } else {        return DF_WIDESCREEN;    }}//------------------------------------------------------------------------------//------------------------------------------------------------------------------audioEncoding_t AudioStreamAttributes::getEncoding() const{    switch(audio_attr->audio_format) {      case 0:        return AC3;      case 2:        return MPEG1;      case 3:        return MPEG2;      case 4:        return LPCM;      case 6:        return DTS;      default:        return LPCM;    }}//------------------------------------------------------------------------------//------------------------------------------------------------------------------IFO::~IFO(){    reset();}//------------------------------------------------------------------------------void IFO::reset(const ifo_handle_t* ifo){    ifoHandle = ifo;}//------------------------------------------------------------------------------PGCTable IFO::getMenuPGCTable(unsigned languageCode) const{    pgci_ut_t* pgci_ut = ifoHandle->pgci_ut;    if (pgci_ut==0) return PGCTable(0);            for(unsigned i = 0; i<pgci_ut->nr_of_lus; i++) {        if (pgci_ut->lu[i].lang_code==languageCode)          return PGCTable(pgci_ut->lu[i].pgcit);    }        return PGCTable(pgci_ut->lu[0].pgcit);}//------------------------------------------------------------------------------//------------------------------------------------------------------------------unsigned VMG::getTitleNumber(unsigned vtsNo, unsigned vtsTitleNo) const{    TitleInfoTable titleInfoTable = getTitleInfoTable();        for(unsigned i = 1; i<=titleInfoTable.getNumberOfTitles(); ++i) {        TitleInfo titleInfo = titleInfoTable.getTitleInfo(i);        if (titleInfo.getVTSNumber()==vtsNo &&            titleInfo.getVTSTitleNumber()==vtsTitleNo) return i;    }    return 0;}//------------------------------------------------------------------------------VideoStreamAttributes VMG::getVideoStreamAttributes(bool /*inMenu*/) const{    return VideoStreamAttributes(&(ifoHandle->vmgi_mat->vmgm_video_attr));}//------------------------------------------------------------------------------unsigned VMG::getNumberOfAudioStreams(bool /*inMenu*/) const{    return ifoHandle->vmgi_mat->nr_of_vmgm_audio_streams;}//------------------------------------------------------------------------------AudioStreamAttributes VMG::getAudioStreamAttributes(bool /*inMenu*/, unsigned /*streamNo*/) const{    assert( VMG::getNumberOfAudioStreams(false)>0 );    return AudioStreamAttributes(&(ifoHandle->vmgi_mat->vmgm_audio_attr));}//------------------------------------------------------------------------------unsigned VMG::getNumberOfSPUStreams(bool /*inMenu*/) const{    return ifoHandle->vmgi_mat->nr_of_vmgm_subp_streams;}//------------------------------------------------------------------------------SPUStreamAttributes VMG::getSPUStreamAttributes(bool /*inMenu*/, unsigned /*streamNo*/) const{    assert( VMG::getNumberOfSPUStreams(false)>0 );    return SPUStreamAttributes(&(ifoHandle->vmgi_mat->vmgm_subp_attr));}//------------------------------------------------------------------------------//------------------------------------------------------------------------------unsigned VTS::getPartNumber(unsigned pgcNo, unsigned programNo,                            unsigned& vtsTitleNumber) const{    TitleTable titleTable = getTitleTable();    if (!titleTable) {        Log::fatal("dvd::VTS::getPartNumber: missing title/chapter table!\n");        return 0;    }    unsigned programNoDiff = (unsigned)-1;    unsigned partNumber = 0;    unsigned numTitles = titleTable.getNumberOfTitles();    for(unsigned titleNo = 1; titleNo<=numTitles && programNoDiff>0; ++titleNo) {        Title title = titleTable.getTitle(titleNo);        unsigned numParts = title.getNumberOfParts();        for(unsigned partNo = 1; partNo<=numParts && programNoDiff>0; ++partNo) {            Part part = title.getPart(partNo);            if (part.getPGCNumber()!=pgcNo) continue;                        unsigned partProgramNo = part.getProgramNumber();            if (programNo>=partProgramNo) {                unsigned diff = programNo - partProgramNo;                if (diff<programNoDiff) {                    programNoDiff = diff;                    vtsTitleNumber = titleNo;                    partNumber = partNo;                }            }        }    }    return partNumber;}//------------------------------------------------------------------------------VideoStreamAttributes VTS::getVideoStreamAttributes(bool inMenu) const{    return VideoStreamAttributes(inMenu ?                                 &(ifoHandle->vtsi_mat->vtsm_video_attr) :                                 &(ifoHandle->vtsi_mat->vts_video_attr));}//------------------------------------------------------------------------------unsigned VTS::getNumberOfAudioStreams(bool inMenu) const{    return inMenu ?         ifoHandle->vtsi_mat->nr_of_vtsm_audio_streams :        ifoHandle->vtsi_mat->nr_of_vts_audio_streams;}//------------------------------------------------------------------------------AudioStreamAttributes VTS::getAudioStreamAttributes(bool inMenu, unsigned streamNo) const{    assert(streamNo<VTS::getNumberOfAudioStreams(inMenu));    return AudioStreamAttributes(inMenu ?                                  &(ifoHandle->vtsi_mat->vtsm_audio_attr) :                                 ifoHandle->vtsi_mat->vts_audio_attr + streamNo);}//------------------------------------------------------------------------------unsigned VTS::getNumberOfSPUStreams(bool inMenu) const{    return inMenu ?         ifoHandle->vtsi_mat->nr_of_vtsm_subp_streams :        ifoHandle->vtsi_mat->nr_of_vts_subp_streams;}//------------------------------------------------------------------------------SPUStreamAttributes VTS::getSPUStreamAttributes(bool inMenu, unsigned streamNo) const{    assert(streamNo<VTS::getNumberOfSPUStreams(inMenu));    return SPUStreamAttributes(inMenu ?                               &(ifoHandle->vtsi_mat->vtsm_subp_attr) :                               ifoHandle->vtsi_mat->vts_subp_attr + streamNo);}//------------------------------------------------------------------------------//------------------------------------------------------------------------------

⌨️ 快捷键说明

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