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

📄 dvdinfoframe.cc

📁 Linux下比较早的基于命令行的DVD播放器
💻 CC
字号:
//// Copyright (c) 2005 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 "DVDInfoFrame.h"#include "output/osd/DVDPosition.h"#include "util/Util.h"#include <cstdio>//------------------------------------------------------------------------------using output::unichrome::osd::DVDInfoFrame;using output::osd::DVDPosition;using unichrome::Icon;using unichrome::Window;//------------------------------------------------------------------------------DVDInfoFrame::DVDInfoFrame(Config& config, Window& displayWindow,                           RoundedField::Config& numericFieldConfig,                           RoundedField::Config& capitalFieldConfig,                           const char* iconDirectory) :    Frame(config, displayWindow, width, height, "DVD", backgroundColor),    iconDirectory(strdup(iconDirectory)),    titleIcon(config.videoDevice, "title.ico", iconDirectory,              0x20),    chapterIcon(config.videoDevice, "chapter.ico", iconDirectory,                0x20),    audioLanguageIcon(config.videoDevice, "audioLanguage.ico", iconDirectory,                      0x20),    spuLanguageIcon(config.videoDevice, "spuLanguage.ico", iconDirectory,                    0x20),    playModePlayIcon(config.videoDevice, "play.ico", iconDirectory, config.alpha),    playModePauseIcon(config.videoDevice, "pause.ico", iconDirectory, config.alpha),    playModeFF1Icon(config.videoDevice, "ff1.ico", iconDirectory, config.alpha),    playModeFF2Icon(config.videoDevice, "ff2.ico", iconDirectory, config.alpha),    playModeFF3Icon(config.videoDevice, "ff3.ico", iconDirectory, config.alpha),    playModeREW1Icon(config.videoDevice, "rew1.ico", iconDirectory, config.alpha),    playModeREW2Icon(config.videoDevice, "rew2.ico", iconDirectory, config.alpha),    playModeREW3Icon(config.videoDevice, "rew3.ico", iconDirectory, config.alpha),    titleField(numericFieldConfig, *innerWindow, 35, 10, 100, titleIcon,                fieldValueColor),    chapterField(numericFieldConfig, *innerWindow, 190, 10, 100, chapterIcon,                  fieldValueColor),    audioLanguageField(capitalFieldConfig, *innerWindow, 35, 50, 100, audioLanguageIcon,                        fieldValueColor),    spuLanguageField(capitalFieldConfig, *innerWindow, 190, 50, 100, spuLanguageIcon,                      fieldValueColor),    progressWindow(*innerWindow, numericFieldConfig, 35, 90, width - 2*35,                   fieldValueColor, progressBarColor,                    (((uint32_t)config.alpha)<<24)|backgroundColor),    playModeWindow(*innerWindow, 400, 10, 61, 61),    currentPosition(0, 0, 0, 0, 0),    currentAudioLanguageCode(0xffff),    currentSPULanguageCode(0xffff),    currentPlayMode(FORWARD){    titleField.setValue("-", true);    chapterField.setValue("-", true);    audioLanguageField.setValue("-", true);    spuLanguageField.setValue("-", true);        playModePlayIcon.display(playModeWindow, 0, 0);}//------------------------------------------------------------------------------DVDInfoFrame::~DVDInfoFrame(){    free(iconDirectory);}//------------------------------------------------------------------------------void DVDInfoFrame::setPosition(const DVDPosition& dvdPosition){    setPosition(titleField, currentPosition.titleNumber, dvdPosition.titleNumber);    setPosition(chapterField, currentPosition.partNumber, dvdPosition.partNumber);    if (dvdPosition.playedFrames!=currentPosition.playedFrames ||        dvdPosition.totalFrames!=currentPosition.totalFrames ||         dvdPosition.fps!=currentPosition.fps)    {        progressWindow.setValue(dvdPosition.playedFrames,                                dvdPosition.totalFrames,                                dvdPosition.fps);        currentPosition.playedFrames = dvdPosition.playedFrames;        currentPosition.totalFrames = dvdPosition.totalFrames;        currentPosition.fps = dvdPosition.fps;    }}//------------------------------------------------------------------------------void DVDInfoFrame::setLanguages(unsigned audioLanguageCode,                                unsigned spuLanguageCode){    setLanguageCode(audioLanguageField,                     currentAudioLanguageCode, audioLanguageCode);    setLanguageCode(spuLanguageField,                     currentSPULanguageCode, spuLanguageCode);}//------------------------------------------------------------------------------void DVDInfoFrame::setPlayMode(playMode_t playMode){    if (playMode==currentPlayMode) return;    Icon* playModeIcon = 0;    switch(playMode) {      case FORWARD:        playModeIcon = &playModePlayIcon;        break;      case PAUSED:        playModeIcon = &playModePauseIcon;        break;      case FAST_FORWARD_1:        playModeIcon = &playModeFF1Icon;        break;      case FAST_FORWARD_2:        playModeIcon = &playModeFF2Icon;        break;      case FAST_FORWARD_3:        playModeIcon = &playModeFF3Icon;        break;      case FAST_BACKWARD_1:        playModeIcon = &playModeREW1Icon;        break;      case FAST_BACKWARD_2:        playModeIcon = &playModeREW2Icon;        break;      case FAST_BACKWARD_3:        playModeIcon = &playModeREW3Icon;        break;    }    if (playModeIcon!=0) {        uint32_t bgColor = config.alpha;        bgColor <<= 24;        bgColor |= backgroundColor & 0x00ffffff;        playModeWindow.fill(bgColor);        playModeIcon->display(playModeWindow, 0, 0);    }    currentPlayMode = playMode;}//------------------------------------------------------------------------------void DVDInfoFrame::setPosition(IconField& positionField,                               unsigned& currentPosition, unsigned newPosition){    static const char* noPositionValue = "-";    if (newPosition==currentPosition) return;    if (newPosition==0) {        positionField.setValue(noPositionValue, true);    } else {        char buf[8];        snprintf(buf, sizeof(buf), "%u", newPosition);        positionField.setValue(buf, true);    }    currentPosition = newPosition;}//------------------------------------------------------------------------------void DVDInfoFrame::setLanguageCode(IconField& languageField,                                   unsigned& currentCode, unsigned newCode){    static const char* noLanguageValue = "-";    if (newCode==currentCode) return;        if (newCode==0xffff) {        languageField.setValue(noLanguageValue, true);    } else {        char code0 = (newCode>>8)&0xff;        if (code0>='a' && code0<='z') code0 -= 'a' - 'A';        char code1 = (newCode>>0)&0xff;        if (code1>='a' && code1<='z') code1 -= 'a' - 'A';                char flagIconName[256];        snprintf(flagIconName, sizeof(flagIconName),                 "%s/flag_%c%c.ico", iconDirectory,                 code0, code1);        FILE* iconFile = fopen(flagIconName, "rb");        if (iconFile!=0) {            Icon flagIcon(config.videoDevice, iconFile,                           config.alpha);            fclose(iconFile);            languageField.setValue(flagIcon, true);            config.videoDevice.flush();        } else {            char buf[3] = { code0, code1, '\0' };            languageField.setValue(buf, true);        }    }        currentCode = newCode;}//------------------------------------------------------------------------------//------------------------------------------------------------------------------

⌨️ 快捷键说明

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