You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
504 lines
12 KiB
504 lines
12 KiB
/**************************************************************************
|
|
* Copyright (C) 2005 by Jean-Michel Petit *
|
|
* jm_petit@laposte.net *
|
|
* *
|
|
* 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., *
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
***************************************************************************/
|
|
|
|
#include "k9dvdtitle.h"
|
|
|
|
#include <qapplication.h>
|
|
|
|
#include <string.h>
|
|
#include <sys/stat.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <qvaluelist.h>
|
|
#include "k9dvdtitleset.h"
|
|
#include "k9titleencopt.h"
|
|
|
|
//*******************k9DVDAudioStream**************
|
|
k9DVDAudioStream::k9DVDAudioStream() {
|
|
size_mb=0;
|
|
selected=false;
|
|
}
|
|
|
|
/** Read property of QString format. */
|
|
const QString& k9DVDAudioStream::getformat() {
|
|
return format;
|
|
}
|
|
|
|
/** Read property of QString frequency. */
|
|
const QString& k9DVDAudioStream::getfrequency() {
|
|
return frequency;
|
|
}
|
|
/** Read property of QString quantization. */
|
|
const QString& k9DVDAudioStream::getquantization() {
|
|
return quantization;
|
|
}
|
|
/** Read property of int channels. */
|
|
const int& k9DVDAudioStream::getchannels() {
|
|
return channels;
|
|
}
|
|
/** Read property of int appMode. */
|
|
const int& k9DVDAudioStream::getappMode() {
|
|
return appMode;
|
|
}
|
|
/** Read property of QString content. */
|
|
const QString& k9DVDAudioStream::getcontent() {
|
|
return content;
|
|
}
|
|
|
|
/** Read property of float size_mb. */
|
|
const float& k9DVDAudioStream::getsize_mb() {
|
|
return size_mb;
|
|
}
|
|
|
|
|
|
/** Read property of bool selected. */
|
|
const bool& k9DVDAudioStream::getselected() {
|
|
return selected;
|
|
}
|
|
/** Write property of bool selected. */
|
|
void k9DVDAudioStream::setselected( const bool& _newVal) {
|
|
bool before=title->isSelected();
|
|
selected = _newVal;
|
|
title->gettitleset()->setAudio(getID(),_newVal);
|
|
title->gettitleset()->updateSelection();
|
|
bool after=title->isSelected();
|
|
if (after!=before)
|
|
title->selectChapters( after);
|
|
}
|
|
|
|
/** Read property of QString langCod. */
|
|
const QString& k9DVDAudioStream::getlangCod() {
|
|
return langCod;
|
|
}
|
|
/** Read property of QString language. */
|
|
const QString& k9DVDAudioStream::getlanguage() {
|
|
return language;
|
|
}
|
|
|
|
k9DVDTitle * k9DVDAudioStream::gettitle() {
|
|
return title;
|
|
}
|
|
|
|
int k9DVDAudioStream::getID() {
|
|
return(id);
|
|
}
|
|
|
|
//*******************k9DVDSubtitle *******************
|
|
|
|
k9DVDSubtitle::k9DVDSubtitle() {
|
|
size_mb=0;
|
|
selected=false;
|
|
}
|
|
|
|
|
|
/** Read property of QString langCod. */
|
|
const QString& k9DVDSubtitle::getlangCod() {
|
|
return langCod;
|
|
}
|
|
/** Read property of QString language. */
|
|
const QString& k9DVDSubtitle::getlanguage() {
|
|
return language;
|
|
}
|
|
/** Read property of int num. */
|
|
const int& k9DVDSubtitle::getnum() {
|
|
return num;
|
|
}
|
|
/** Read property of QString content. */
|
|
const QString& k9DVDSubtitle::getcontent() {
|
|
return content;
|
|
}
|
|
|
|
/** Read property of bool selected. */
|
|
const bool& k9DVDSubtitle::getselected() {
|
|
return selected;
|
|
}
|
|
/** Write property of bool selected. */
|
|
void k9DVDSubtitle::setselected( const bool& _newVal) {
|
|
bool before=title->isSelected();
|
|
selected = _newVal;
|
|
title->gettitleset()->updateSelection();
|
|
bool after=title->isSelected();
|
|
if (after!=before)
|
|
title->selectChapters(after);
|
|
}
|
|
|
|
/** Read property of float size_mb. */
|
|
const float& k9DVDSubtitle::getsize_mb() {
|
|
return size_mb;
|
|
}
|
|
|
|
k9DVDTitle * k9DVDSubtitle::gettitle() {
|
|
return title;
|
|
}
|
|
|
|
|
|
/*!
|
|
\fn k9DVDSubtitle::getID()
|
|
*/
|
|
QValueList<int>& k9DVDSubtitle::getID() {
|
|
return id;
|
|
}
|
|
|
|
|
|
//************************* k9DVDTitle ***************************
|
|
|
|
/** No descriptions */
|
|
k9DVDAudioStream* k9DVDTitle::addAudioStream() {
|
|
k9DVDAudioStream *auds;
|
|
auds = new k9DVDAudioStream;
|
|
auds->title=this;
|
|
audioStreams.append(auds);
|
|
return(auds);
|
|
}
|
|
|
|
/** No descriptions */
|
|
k9DVDSubtitle* k9DVDTitle::addSubtitle(int num) {
|
|
k9DVDSubtitle *subt;
|
|
subt = new k9DVDSubtitle;
|
|
subt->title=this;
|
|
subt->num=num;
|
|
subtitles.append(subt);
|
|
return(subt);
|
|
}
|
|
|
|
/** No descriptions */
|
|
k9DVDChapter* k9DVDTitle::addChapter(int num) {
|
|
k9DVDChapter *chap;
|
|
chap = new k9DVDChapter;
|
|
chap->m_title=this;
|
|
chap->num = num;
|
|
chap->id=k9DVDChapter::getcptChapter();
|
|
chapters.append(chap);
|
|
return(chap);
|
|
}
|
|
|
|
k9DVDChapter* k9DVDTitle::getChapter(int num) {
|
|
return (k9DVDChapter*)chapters.at(num);
|
|
}
|
|
|
|
/** No descriptions */
|
|
k9DVDAudioStream *k9DVDTitle::getaudioStream(int num) {
|
|
return (k9DVDAudioStream*)audioStreams.at(num);
|
|
}
|
|
|
|
|
|
/** Read property of int chapterCount. */
|
|
const int& k9DVDTitle::getchapterCount() {
|
|
return chapterCount;
|
|
}
|
|
/** Read property of int streamCount. */
|
|
const int& k9DVDTitle::getstreamCount() {
|
|
return streamCount;
|
|
}
|
|
|
|
/** Read property of int audioStreamCount. */
|
|
const int& k9DVDTitle::getaudioStreamCount() {
|
|
return audioStreamCount;
|
|
}
|
|
|
|
/** Read property of int audioStreamCount. */
|
|
const int& k9DVDTitle::getsubPictureCount() {
|
|
return subPictureCount;
|
|
}
|
|
/** Read property of int streamCount. */
|
|
const QTime& k9DVDTitle::getlength() {
|
|
return length;
|
|
}
|
|
|
|
/** Read property of int streamCount. */
|
|
const int& k9DVDTitle::getnumTitle() {
|
|
return numTitle;
|
|
}
|
|
|
|
/** No descriptions */
|
|
k9DVDSubtitle *k9DVDTitle::getsubtitle(int num) {
|
|
return (k9DVDSubtitle*)subtitles.at(num);
|
|
}
|
|
|
|
/** Read property of float size_mb. */
|
|
const float& k9DVDTitle::getsize_mb() {
|
|
return size_mb;
|
|
}
|
|
|
|
const float k9DVDTitle::gettotalsize_mb() {
|
|
float size =size_mb;
|
|
for (uint i=0;i<m_titles.count();i++) {
|
|
k9DVDTitle *tmp=m_titles.at(i);
|
|
size +=tmp->getsize_mb();
|
|
}
|
|
return size;
|
|
|
|
}
|
|
|
|
//If _selected=true, returns the size of selected chapters, otherwise returns size of
|
|
//unselected ones
|
|
const float k9DVDTitle::getChaptersSize_mb(bool _selected){
|
|
return (getChaptersSize(_selected)/512);
|
|
}
|
|
|
|
//If _selected=true, returns the size of selected chapters, otherwise returns size of
|
|
//unselected ones
|
|
const uint64_t k9DVDTitle::getChaptersSize(bool _selected){
|
|
uint64_t total=0;
|
|
for (int i=0;i<chapterCount ;i++) {
|
|
k9DVDChapter *chap = getChapter( i);
|
|
if (chap->getSelected()==_selected) {
|
|
total+= chap->getsectors();
|
|
}
|
|
}
|
|
for (uint i=0;i<m_titles.count();i++) {
|
|
k9DVDTitle * title=m_titles.at(i);
|
|
total+=title->getChaptersSize(_selected);
|
|
}
|
|
return total;
|
|
|
|
}
|
|
|
|
const float k9DVDTitle::gettotalvideosize_mb() {
|
|
float size =videosize_mb;
|
|
for (uint i=0;i<m_titles.count();i++) {
|
|
k9DVDTitle *tmp=m_titles.at(i);
|
|
size+=tmp->getvideosize_mb();
|
|
}
|
|
return size;
|
|
|
|
}
|
|
|
|
|
|
QTime k9DVDTitle::gettotallength() {
|
|
QTime totalTime=getlength();
|
|
for (uint i=0;i<m_titles.count();i++) {
|
|
k9DVDTitle *tmp=m_titles.at(i);
|
|
QTime t;
|
|
int msecs= t.msecsTo(tmp->getlength());
|
|
totalTime=totalTime.addMSecs(msecs);
|
|
}
|
|
return totalTime;
|
|
|
|
}
|
|
|
|
QTime k9DVDTitle::getSelectedLength() {
|
|
QTime totalTime(0,0);
|
|
for (k9DVDChapter *chapter=chapters.first();chapter;chapter=chapters.next()) {
|
|
if (chapter->getSelected()) {
|
|
QTime t;
|
|
int msecs= t.msecsTo(chapter->getlength());
|
|
totalTime=totalTime.addMSecs(msecs);
|
|
}
|
|
}
|
|
|
|
|
|
for (uint i=0;i<m_titles.count();i++) {
|
|
k9DVDTitle *tmp=m_titles.at(i);
|
|
QPtrList <k9DVDChapter> tchapters=tmp->getChapters();
|
|
for (k9DVDChapter *chapter=tchapters.first();chapter;chapter=tchapters.next()) {
|
|
if (chapter->getSelected()) {
|
|
QTime t;
|
|
int msecs= t.msecsTo(chapter->getlength());
|
|
totalTime=totalTime.addMSecs(msecs);
|
|
}
|
|
}
|
|
}
|
|
return totalTime;
|
|
|
|
}
|
|
|
|
|
|
/** Read property of float videosize_mb. */
|
|
const float& k9DVDTitle::getvideosize_mb() {
|
|
return videosize_mb;
|
|
}
|
|
|
|
|
|
/** Read property of int VTS. */
|
|
const int& k9DVDTitle::getVTS() {
|
|
return VTS;
|
|
}
|
|
/** Read property of int TTN. */
|
|
const int& k9DVDTitle::getTTN() {
|
|
return TTN;
|
|
}
|
|
/** Read property of float FPS. */
|
|
const float& k9DVDTitle::getFPS() {
|
|
return FPS;
|
|
}
|
|
/** Read property of QString format. */
|
|
const QString& k9DVDTitle::getformat() {
|
|
return format;
|
|
}
|
|
/** Read property of QString aspectRatio. */
|
|
const QString& k9DVDTitle::getaspectRatio() {
|
|
return aspectRatio;
|
|
}
|
|
/** Read property of QString width. */
|
|
const QString& k9DVDTitle::getwidth() {
|
|
return width;
|
|
}
|
|
/** Read property of QString height. */
|
|
const QString& k9DVDTitle::getheight() {
|
|
return height;
|
|
}
|
|
/** Read property of QString palette. */
|
|
void k9DVDTitle::getpalette(int i,QString & c) {
|
|
c=*palette.at(i);
|
|
}
|
|
/** Read property of QString DF. */
|
|
const QString& k9DVDTitle::getDF() {
|
|
return DF;
|
|
}
|
|
/** Read property of int angleCount. */
|
|
const int& k9DVDTitle::getangleCount() {
|
|
return angleCount;
|
|
}
|
|
|
|
|
|
bool k9DVDTitle::isSelected() {
|
|
k9DVDAudioStream *l_auds;
|
|
k9DVDSubtitle *l_sub;
|
|
uint i;
|
|
|
|
if (forceSelection)
|
|
return true;
|
|
|
|
for (i=0;i<audioStreams.count();i++) {
|
|
l_auds=getaudioStream(i);
|
|
if (l_auds->getselected()) {
|
|
return(true);
|
|
}
|
|
}
|
|
|
|
for (i=0;i<subtitles.count();i++) {
|
|
l_sub=getsubtitle(i);
|
|
if (l_sub->getselected()) {
|
|
return(true);
|
|
}
|
|
}
|
|
return(false);
|
|
}
|
|
|
|
void k9DVDTitle::setforceSelection(bool _state) {
|
|
bool before=isSelected();
|
|
forceSelection = _state;
|
|
gettitleset()->updateSelection();
|
|
bool after=isSelected();
|
|
if (after!=before) {
|
|
selectChapters(after);
|
|
emit selectionChanged();
|
|
}
|
|
}
|
|
|
|
|
|
/** Read property of QString name. */
|
|
const QString& k9DVDTitle::getname() {
|
|
return name;
|
|
}
|
|
/** Write property of QString name. */
|
|
void k9DVDTitle::setname( const QString& _newVal) {
|
|
name = _newVal;
|
|
}
|
|
|
|
/*!
|
|
\fn k9DVDTitle::getpgc()
|
|
*/
|
|
int k9DVDTitle::getpgc() {
|
|
return(pgc);
|
|
}
|
|
|
|
|
|
/*!
|
|
\fn k9DVDTitle::setNextTitle(k9DVDTitle * nextTitle)
|
|
*/
|
|
void k9DVDTitle::setnextTitle(k9DVDTitle * nTitle) {
|
|
nextTitle=nTitle;
|
|
}
|
|
|
|
|
|
/*!
|
|
\fn k9DVDTitle::getnextTitle()
|
|
*/
|
|
k9DVDTitle* k9DVDTitle::getnextTitle() {
|
|
return nextTitle;
|
|
}
|
|
|
|
|
|
k9DVDAudioStream* k9DVDTitle::getDefAudio() const {
|
|
return m_defAudio;
|
|
}
|
|
|
|
|
|
void k9DVDTitle::setDefAudio(k9DVDAudioStream* _value) {
|
|
m_defAudio = _value;
|
|
m_defAudioSet = true;
|
|
}
|
|
|
|
|
|
k9DVDSubtitle* k9DVDTitle::getDefSubtitle() const {
|
|
return m_defSubtitle;
|
|
}
|
|
|
|
|
|
void k9DVDTitle::setDefSubtitle(k9DVDSubtitle* _value) {
|
|
m_defSubtitle = _value;
|
|
m_defSubtitleSet=true;
|
|
}
|
|
|
|
|
|
k9DVDTitle::k9DVDTitle() {
|
|
audioStreams.setAutoDelete(true);
|
|
chapters.setAutoDelete(true);
|
|
subtitles.setAutoDelete(true);
|
|
size_mb=0;
|
|
videosize_mb=0;
|
|
vobusize_mb=0;
|
|
nextTitle=NULL;
|
|
m_defAudio=NULL;
|
|
m_defSubtitle=NULL;
|
|
m_defAudioSet=false;
|
|
m_defSubtitleSet=false;
|
|
forceSelection=false;
|
|
m_forceFactor=false;
|
|
m_factor=0;
|
|
m_encOpt=NULL;
|
|
}
|
|
|
|
k9TitleEncOpt* k9DVDTitle::getEncOpt() {
|
|
if (!m_encOpt)
|
|
m_encOpt=new k9TitleEncOpt(this);
|
|
return m_encOpt;
|
|
|
|
}
|
|
|
|
|
|
void k9DVDTitle::selectChapters(bool _state) {
|
|
for (int i=0;i < chapterCount;i++) {
|
|
getChapter(i)->setSelected( _state);
|
|
}
|
|
|
|
for (uint iTitle=0;iTitle<m_titles.count();iTitle++) {
|
|
k9DVDTitle * title=m_titles.at(iTitle);
|
|
title->selectChapters(_state);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|