summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-17 00:32:19 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-17 00:32:19 +0000
commit0d382a262c0638d0f572fc37193ccc5ed3dc895f (patch)
tree8578dcddfce4191f3f7a142a37769df7add48475 /src
downloadk9copy-0d382a262c0638d0f572fc37193ccc5ed3dc895f.tar.gz
k9copy-0d382a262c0638d0f572fc37193ccc5ed3dc895f.zip
Added old abandoned version of k9copy
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/k9copy@1091546 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am59
-rw-r--r--src/anim.mngbin0 -> 585180 bytes
-rw-r--r--src/configDlg.cpp119
-rw-r--r--src/configDlg.ui196
-rwxr-xr-xsrc/hi16-app-k9copy.pngbin0 -> 883 bytes
-rwxr-xr-xsrc/hi32-app-k9copy.pngbin0 -> 2215 bytes
-rwxr-xr-xsrc/hi48-app-k9copy.pngbin0 -> 4000 bytes
-rw-r--r--src/icons/Makefile.am2
-rw-r--r--src/icons/hi16-action-dvdcopy.pngbin0 -> 1050 bytes
-rw-r--r--src/icons/hi16-action-mp4.pngbin0 -> 757 bytes
-rw-r--r--src/icons/hi16-action-mpeg.pngbin0 -> 783 bytes
-rw-r--r--src/icons/hi22-action-author.pngbin0 -> 1273 bytes
-rw-r--r--src/icons/hi22-action-cycle.pngbin0 -> 1286 bytes
-rw-r--r--src/icons/hi22-action-dvdcopy.pngbin0 -> 1133 bytes
-rw-r--r--src/icons/hi22-action-mp4.pngbin0 -> 1336 bytes
-rw-r--r--src/icons/hi22-action-mpeg.pngbin0 -> 1342 bytes
-rw-r--r--src/icons/hi22-action-title.pngbin0 -> 1594 bytes
-rw-r--r--src/icons/hi32-action-author.pngbin0 -> 2632 bytes
-rw-r--r--src/icons/hi32-action-dvdcopy.pngbin0 -> 2658 bytes
-rw-r--r--src/icons/hi32-action-mp4.pngbin0 -> 2871 bytes
-rw-r--r--src/icons/hi32-action-mpeg.pngbin0 -> 2876 bytes
-rw-r--r--src/icons/hi48-action-author.pngbin0 -> 4563 bytes
-rw-r--r--src/icons/hi48-action-dvdcopy.pngbin0 -> 4782 bytes
-rw-r--r--src/icons/hi48-action-mencoder.pngbin0 -> 3679 bytes
-rw-r--r--src/icons/hi48-action-mp4.pngbin0 -> 5002 bytes
-rw-r--r--src/icons/hi48-action-mpeg.pngbin0 -> 5025 bytes
-rw-r--r--src/icons/hi48-action-mplayer.pngbin0 -> 6324 bytes
-rwxr-xr-xsrc/images.h777
-rw-r--r--src/k9copy.cpp528
-rw-r--r--src/k9copy.desktop17
-rw-r--r--src/k9copy.h121
-rwxr-xr-xsrc/k9copy.pngbin0 -> 4000 bytes
-rw-r--r--src/k9copy_open.desktop11
-rwxr-xr-xsrc/k9copyui.rc38
-rw-r--r--src/k9glwidget.cpp185
-rw-r--r--src/k9glwidget.h99
-rw-r--r--src/k9langselect.cpp178
-rw-r--r--src/k9langselect.h73
-rw-r--r--src/k9main.cpp1532
-rw-r--r--src/k9main.h240
-rw-r--r--src/k9mainw.cpp216
-rw-r--r--src/k9mainw.ui427
-rw-r--r--src/k9mainwsov.ui424
-rw-r--r--src/k9mencodercmdgen.cpp670
-rw-r--r--src/k9mencodercmdgen.h67
-rw-r--r--src/k9mp4title.cpp210
-rw-r--r--src/k9mp4title.h59
-rw-r--r--src/k9play.cpp568
-rw-r--r--src/k9play.h101
-rw-r--r--src/k9playbackoptions.cpp223
-rw-r--r--src/k9playbackoptions.h79
-rw-r--r--src/k9prefauthor.cpp60
-rw-r--r--src/k9prefauthor.h41
-rw-r--r--src/k9prefdvd.cpp57
-rw-r--r--src/k9prefdvd.h40
-rw-r--r--src/k9prefmencoder.cpp198
-rw-r--r--src/k9prefmencoder.h65
-rw-r--r--src/k9prefmpeg4.cpp110
-rw-r--r--src/k9prefmpeg4.h58
-rw-r--r--src/k9prefpreview.cpp76
-rw-r--r--src/k9prefpreview.h41
-rw-r--r--src/k9redirect.cpp44
-rw-r--r--src/k9redirect.h28
-rw-r--r--src/k9settings.cpp97
-rw-r--r--src/k9settings.h46
-rw-r--r--src/k9titlefactor.cpp145
-rw-r--r--src/k9titlefactor.h55
-rw-r--r--src/k9updatefactor.cpp43
-rw-r--r--src/k9updatefactor.h42
-rw-r--r--src/kconfigdlg.cpp151
-rw-r--r--src/kconfigdlg.h44
-rwxr-xr-xsrc/kviewmpeg2.cpp229
-rwxr-xr-xsrc/kviewmpeg2.h101
-rw-r--r--src/langselectw.cpp123
-rw-r--r--src/langselectw.ui72
-rwxr-xr-xsrc/main.cpp154
-rw-r--r--src/mencoder.xml726
-rw-r--r--src/mencoderCmdGen.cpp129
-rw-r--r--src/mencoderCmdGen.ui215
-rw-r--r--src/pellicule.pngbin0 -> 947 bytes
-rw-r--r--src/playbackoptionsw.cpp279
-rw-r--r--src/playbackoptionsw.ui405
-rw-r--r--src/prefAuthor.cpp165
-rw-r--r--src/prefAuthor.ui251
-rw-r--r--src/prefDVD.cpp114
-rw-r--r--src/prefDVD.ui175
-rw-r--r--src/prefMPEG4.cpp418
-rw-r--r--src/prefMPEG4.ui705
-rw-r--r--src/prefMencoder.cpp426
-rw-r--r--src/prefMencoder.ui825
-rw-r--r--src/prefpreview.cpp171
-rw-r--r--src/prefpreview.ui336
-rw-r--r--src/titlefactor.cpp346
-rw-r--r--src/titlefactor.ui165
-rw-r--r--src/viewmpeg2.cpp229
-rwxr-xr-xsrc/viewmpeg2.ui183
96 files changed, 15602 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..08a6ed0
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,59 @@
+# set the include path for X, qt and KDE
+INCLUDES = -I$(top_srcdir)/dvdread -I$(top_srcdir)/k9Mplayer \
+ -I$(top_srcdir)/k9author -I$(top_srcdir)/k9decmpeg -I$(top_srcdir)/k9devices \
+ -I$(top_srcdir)/k9vamps -I$(top_srcdir)/libdvdnav -I$(top_srcdir)/libk9copy $(all_includes)
+
+# these are the headers for your project
+noinst_HEADERS = k9copy.h k9glwidget.h k9langselect.h k9main.h \
+ k9mencodercmdgen.h k9mp4title.h k9play.h k9playbackoptions.h k9prefauthor.h k9prefdvd.h \
+ k9prefmencoder.h k9prefmpeg4.h k9prefpreview.h k9redirect.h k9settings.h k9titlefactor.h \
+ k9updatefactor.h kconfigdlg.h
+
+# let automoc handle all of the meta source files (moc)
+METASOURCES = AUTO
+
+
+KDE_ICON = k9copy
+
+#########################################################################
+# APPLICATION SECTION
+#########################################################################
+# this is the program that gets installed. it's name is used for all
+# of the other Makefile.am variables
+bin_PROGRAMS = k9copy
+
+# the application source, library search path, and link libraries
+k9copy_SOURCES = configDlg.ui images.h k9copy.cpp k9copy.png k9glwidget.cpp \
+ k9langselect.cpp k9main.cpp k9mainw.ui k9mencodercmdgen.cpp k9mp4title.cpp k9play.cpp \
+ k9playbackoptions.cpp k9prefauthor.cpp k9prefdvd.cpp k9prefmencoder.cpp k9prefmpeg4.cpp \
+ k9prefpreview.cpp k9redirect.cpp k9settings.cpp k9titlefactor.cpp k9updatefactor.cpp \
+ kconfigdlg.cpp kviewmpeg2.cpp kviewmpeg2.h langselectw.ui main.cpp mencoderCmdGen.ui \
+ playbackoptionsw.ui prefAuthor.ui prefDVD.ui prefMPEG4.ui prefMencoder.ui prefpreview.ui \
+ titlefactor.ui viewmpeg2.ui
+k9copy_LDFLAGS = $(KDE_RPATH) $(all_libraries)
+k9copy_LDADD = $(top_builddir)/k9Mplayer/libk9mplayer.la \
+ $(top_builddir)/k9author/libk9author.la $(top_builddir)/k9decmpeg/libk9decmpeg.la \
+ $(top_builddir)/k9devices/libk9devices.la $(top_builddir)/k9vamps/libk9vamps.la \
+ $(top_builddir)/libdvdnav/libk9dvdnav.la $(top_builddir)/libk9copy/libk9copy.la \
+ $(top_builddir)/dvdread/libdvdread.la $(LIB_KDEUI) -lkmdi
+
+# this is where the desktop file will go
+shelldesktopdir = $(kde_appsdir)/Utilities
+
+
+# this is where the shell's XML-GUI resource file goes
+shellrcdir = $(kde_datadir)/k9copy
+shellrc_DATA = k9copyui.rc
+
+appsdatadir = $(kde_datadir)/k9copy
+appsdata_DATA = anim.mng mencoder.xml
+
+AM_CXXFLAGS = -O3 -g3
+
+applnkMultimedia_DATA = k9copy.desktop
+applnkMultimediadir = $(xdg_appsdir)
+SUBDIRS = icons
+
+konquerorServicesMenusdir = $(kde_datadir)/konqueror/servicemenus
+
+konquerorServicesMenus_DATA = k9copy_open.desktop
diff --git a/src/anim.mng b/src/anim.mng
new file mode 100644
index 0000000..c391388
--- /dev/null
+++ b/src/anim.mng
Binary files differ
diff --git a/src/configDlg.cpp b/src/configDlg.cpp
new file mode 100644
index 0000000..b4a6fb7
--- /dev/null
+++ b/src/configDlg.cpp
@@ -0,0 +1,119 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './configDlg.ui'
+**
+** Created: dim. oct. 26 08:57:34 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "configDlg.h"
+
+#include <qvariant.h>
+#include <qtable.h>
+#include <kpushbutton.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include "kpushbutton.h"
+
+/*
+ * Constructs a configDlg as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+configDlg::configDlg( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ if ( !name )
+ setName( "configDlg" );
+ setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, sizePolicy().hasHeightForWidth() ) );
+ configDlgLayout = new QGridLayout( this, 1, 1, 11, 6, "configDlgLayout");
+
+ Layout1 = new QHBoxLayout( 0, 0, 6, "Layout1");
+
+ configDlgLayout->addMultiCellLayout( Layout1, 3, 3, 0, 1 );
+ spacer4 = new QSpacerItem( 20, 190, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ configDlgLayout->addItem( spacer4, 2, 1 );
+
+ tblDevices = new QTable( this, "tblDevices" );
+ tblDevices->setNumCols( tblDevices->numCols() + 1 );
+ tblDevices->horizontalHeader()->setLabel( tblDevices->numCols() - 1, tr2i18n( "device" ) );
+ tblDevices->setNumCols( tblDevices->numCols() + 1 );
+ tblDevices->horizontalHeader()->setLabel( tblDevices->numCols() - 1, tr2i18n( "label" ) );
+ tblDevices->setNumCols( tblDevices->numCols() + 1 );
+ tblDevices->horizontalHeader()->setLabel( tblDevices->numCols() - 1, tr2i18n( "Input" ) );
+ tblDevices->setNumCols( tblDevices->numCols() + 1 );
+ tblDevices->horizontalHeader()->setLabel( tblDevices->numCols() - 1, tr2i18n( "Output" ) );
+ tblDevices->setResizePolicy( QTable::Default );
+ tblDevices->setVScrollBarMode( QTable::Auto );
+ tblDevices->setNumRows( 0 );
+ tblDevices->setNumCols( 4 );
+ tblDevices->setShowGrid( TRUE );
+ tblDevices->setSelectionMode( QTable::Single );
+ tblDevices->setFocusStyle( QTable::SpreadSheet );
+
+ configDlgLayout->addMultiCellWidget( tblDevices, 1, 2, 0, 0 );
+
+ layout4 = new QVBoxLayout( 0, 0, 6, "layout4");
+
+ bAdd = new KPushButton( this, "bAdd" );
+ bAdd->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, bAdd->sizePolicy().hasHeightForWidth() ) );
+ bAdd->setProperty( "stdItem", 27 );
+ layout4->addWidget( bAdd );
+
+ bRemove = new KPushButton( this, "bRemove" );
+ bRemove->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, bRemove->sizePolicy().hasHeightForWidth() ) );
+ bRemove->setProperty( "stdItem", 28 );
+ layout4->addWidget( bRemove );
+
+ configDlgLayout->addLayout( layout4, 1, 1 );
+ languageChange();
+ resize( QSize(578, 342).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( bRemove, SIGNAL( clicked() ), this, SLOT( bRemoveClick() ) );
+ connect( bAdd, SIGNAL( clicked() ), this, SLOT( bAddClick() ) );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+configDlg::~configDlg()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void configDlg::languageChange()
+{
+ setCaption( tr2i18n( "k9Copy - Devices" ) );
+ tblDevices->horizontalHeader()->setLabel( 0, tr2i18n( "device" ) );
+ tblDevices->horizontalHeader()->setLabel( 1, tr2i18n( "label" ) );
+ tblDevices->horizontalHeader()->setLabel( 2, tr2i18n( "Input" ) );
+ tblDevices->horizontalHeader()->setLabel( 3, tr2i18n( "Output" ) );
+ bAdd->setText( tr2i18n( "Add" ) );
+ bAdd->setAccel( QKeySequence( QString::null ) );
+ bRemove->setText( tr2i18n( "Remove" ) );
+ bRemove->setAccel( QKeySequence( QString::null ) );
+}
+
+void configDlg::bRemoveClick()
+{
+ qWarning( "configDlg::bRemoveClick(): Not implemented yet" );
+}
+
+void configDlg::bAddClick()
+{
+ qWarning( "configDlg::bAddClick(): Not implemented yet" );
+}
+
+void configDlg::bOkClick()
+{
+ qWarning( "configDlg::bOkClick(): Not implemented yet" );
+}
+
+#include "configDlg.moc"
diff --git a/src/configDlg.ui b/src/configDlg.ui
new file mode 100644
index 0000000..2bc3c78
--- /dev/null
+++ b/src/configDlg.ui
@@ -0,0 +1,196 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>configDlg</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>configDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>578</width>
+ <height>342</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="caption">
+ <string>k9Copy - Devices</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QLayoutWidget" row="3" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ </hbox>
+ </widget>
+ <spacer row="2" column="1">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>190</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QTable" row="1" column="0" rowspan="2" colspan="1">
+ <column>
+ <property name="text">
+ <string>device</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>label</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Input</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Output</string>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>tblDevices</cstring>
+ </property>
+ <property name="resizePolicy">
+ <enum>Default</enum>
+ </property>
+ <property name="vScrollBarMode">
+ <enum>Auto</enum>
+ </property>
+ <property name="numRows">
+ <number>0</number>
+ </property>
+ <property name="numCols">
+ <number>4</number>
+ </property>
+ <property name="showGrid">
+ <bool>true</bool>
+ </property>
+ <property name="selectionMode">
+ <enum>Single</enum>
+ </property>
+ <property name="focusStyle">
+ <enum>SpreadSheet</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="1">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bAdd</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Add</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>27</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bRemove</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Remove</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>28</number>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>bRemove</sender>
+ <signal>clicked()</signal>
+ <receiver>configDlg</receiver>
+ <slot>bRemoveClick()</slot>
+ </connection>
+ <connection>
+ <sender>bAdd</sender>
+ <signal>clicked()</signal>
+ <receiver>configDlg</receiver>
+ <slot>bAddClick()</slot>
+ </connection>
+</connections>
+
+<slots>
+ <slot>bRemoveClick()</slot>
+ <slot>bAddClick()</slot>
+ <slot>bOkClick()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/src/hi16-app-k9copy.png b/src/hi16-app-k9copy.png
new file mode 100755
index 0000000..1d2dbdb
--- /dev/null
+++ b/src/hi16-app-k9copy.png
Binary files differ
diff --git a/src/hi32-app-k9copy.png b/src/hi32-app-k9copy.png
new file mode 100755
index 0000000..43d8974
--- /dev/null
+++ b/src/hi32-app-k9copy.png
Binary files differ
diff --git a/src/hi48-app-k9copy.png b/src/hi48-app-k9copy.png
new file mode 100755
index 0000000..6ed8588
--- /dev/null
+++ b/src/hi48-app-k9copy.png
Binary files differ
diff --git a/src/icons/Makefile.am b/src/icons/Makefile.am
new file mode 100644
index 0000000..6ab3ab3
--- /dev/null
+++ b/src/icons/Makefile.am
@@ -0,0 +1,2 @@
+k9icondir = $(kde_datadir)/k9copy/icons
+k9icon_ICON = AUTO
diff --git a/src/icons/hi16-action-dvdcopy.png b/src/icons/hi16-action-dvdcopy.png
new file mode 100644
index 0000000..52012d0
--- /dev/null
+++ b/src/icons/hi16-action-dvdcopy.png
Binary files differ
diff --git a/src/icons/hi16-action-mp4.png b/src/icons/hi16-action-mp4.png
new file mode 100644
index 0000000..41bf256
--- /dev/null
+++ b/src/icons/hi16-action-mp4.png
Binary files differ
diff --git a/src/icons/hi16-action-mpeg.png b/src/icons/hi16-action-mpeg.png
new file mode 100644
index 0000000..e340e83
--- /dev/null
+++ b/src/icons/hi16-action-mpeg.png
Binary files differ
diff --git a/src/icons/hi22-action-author.png b/src/icons/hi22-action-author.png
new file mode 100644
index 0000000..3147499
--- /dev/null
+++ b/src/icons/hi22-action-author.png
Binary files differ
diff --git a/src/icons/hi22-action-cycle.png b/src/icons/hi22-action-cycle.png
new file mode 100644
index 0000000..b298916
--- /dev/null
+++ b/src/icons/hi22-action-cycle.png
Binary files differ
diff --git a/src/icons/hi22-action-dvdcopy.png b/src/icons/hi22-action-dvdcopy.png
new file mode 100644
index 0000000..459685f
--- /dev/null
+++ b/src/icons/hi22-action-dvdcopy.png
Binary files differ
diff --git a/src/icons/hi22-action-mp4.png b/src/icons/hi22-action-mp4.png
new file mode 100644
index 0000000..8679617
--- /dev/null
+++ b/src/icons/hi22-action-mp4.png
Binary files differ
diff --git a/src/icons/hi22-action-mpeg.png b/src/icons/hi22-action-mpeg.png
new file mode 100644
index 0000000..056df2e
--- /dev/null
+++ b/src/icons/hi22-action-mpeg.png
Binary files differ
diff --git a/src/icons/hi22-action-title.png b/src/icons/hi22-action-title.png
new file mode 100644
index 0000000..b1e7016
--- /dev/null
+++ b/src/icons/hi22-action-title.png
Binary files differ
diff --git a/src/icons/hi32-action-author.png b/src/icons/hi32-action-author.png
new file mode 100644
index 0000000..392d10f
--- /dev/null
+++ b/src/icons/hi32-action-author.png
Binary files differ
diff --git a/src/icons/hi32-action-dvdcopy.png b/src/icons/hi32-action-dvdcopy.png
new file mode 100644
index 0000000..0ffc7b9
--- /dev/null
+++ b/src/icons/hi32-action-dvdcopy.png
Binary files differ
diff --git a/src/icons/hi32-action-mp4.png b/src/icons/hi32-action-mp4.png
new file mode 100644
index 0000000..8897481
--- /dev/null
+++ b/src/icons/hi32-action-mp4.png
Binary files differ
diff --git a/src/icons/hi32-action-mpeg.png b/src/icons/hi32-action-mpeg.png
new file mode 100644
index 0000000..eb6a32e
--- /dev/null
+++ b/src/icons/hi32-action-mpeg.png
Binary files differ
diff --git a/src/icons/hi48-action-author.png b/src/icons/hi48-action-author.png
new file mode 100644
index 0000000..2d9a683
--- /dev/null
+++ b/src/icons/hi48-action-author.png
Binary files differ
diff --git a/src/icons/hi48-action-dvdcopy.png b/src/icons/hi48-action-dvdcopy.png
new file mode 100644
index 0000000..c2b39ef
--- /dev/null
+++ b/src/icons/hi48-action-dvdcopy.png
Binary files differ
diff --git a/src/icons/hi48-action-mencoder.png b/src/icons/hi48-action-mencoder.png
new file mode 100644
index 0000000..ce1f60b
--- /dev/null
+++ b/src/icons/hi48-action-mencoder.png
Binary files differ
diff --git a/src/icons/hi48-action-mp4.png b/src/icons/hi48-action-mp4.png
new file mode 100644
index 0000000..9ba4f74
--- /dev/null
+++ b/src/icons/hi48-action-mp4.png
Binary files differ
diff --git a/src/icons/hi48-action-mpeg.png b/src/icons/hi48-action-mpeg.png
new file mode 100644
index 0000000..87c23c3
--- /dev/null
+++ b/src/icons/hi48-action-mpeg.png
Binary files differ
diff --git a/src/icons/hi48-action-mplayer.png b/src/icons/hi48-action-mplayer.png
new file mode 100644
index 0000000..37d0fc9
--- /dev/null
+++ b/src/icons/hi48-action-mplayer.png
Binary files differ
diff --git a/src/images.h b/src/images.h
new file mode 100755
index 0000000..a3c9198
--- /dev/null
+++ b/src/images.h
@@ -0,0 +1,777 @@
+/**************************************************************************
+* 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. *
+***************************************************************************/
+
+static const char* const img_text[] =
+ {
+ "30 30 2 1",
+ ". c None",
+ "# c #eee608",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ "...........##.................",
+ "...........##.................",
+ "...........##.................",
+ "....####...##.###....####.....",
+ "...#...##..###.###..##..##....",
+ "...##..##..##...##..##..#.....",
+ "......###..##...##.###........",
+ "...##..##..##...##.###........",
+ "...##..##..##...##..##........",
+ "..###.###..###.##...###.......",
+ "...###.##............####.....",
+ "..............................",
+ "..............................",
+ "..............................",
+ "..............................",
+ ".............................."
+ };
+
+static const char* const img_sound[] =
+ {
+ "30 29 230 2",
+ ".a c None",
+ ".# c None",
+ "Qt c None",
+ "aA c #101820",
+ "aM c #181820",
+ "aL c #181829",
+ "#c c #181c29",
+ ".V c #182029",
+ ".K c #182031",
+ ".6 c #182429",
+ "#q c #182431",
+ "#C c #202031",
+ "bq c #202420",
+ "#d c #202429",
+ ".W c #202431",
+ "#N c #202831",
+ ".7 c #202839",
+ ".M c #202c41",
+ ".8 c #20304a",
+ "bf c #292831",
+ ".L c #292839",
+ "bg c #292c29",
+ "br c #292c31",
+ ".X c #292c41",
+ "bt c #293029",
+ ".Z c #293041",
+ "#k c #29304a",
+ ".w c #29344a",
+ ".Y c #293452",
+ "#1 c #29384a",
+ "#l c #293852",
+ "#m c #293c5a",
+ "bs c #313031",
+ "#A c #313431",
+ ".U c #313441",
+ "#0 c #31344a",
+ ".x c #31384a",
+ "#e c #31385a",
+ ".J c #313c4a",
+ "#r c #313c52",
+ "#n c #31405a",
+ "#u c #314062",
+ "#v c #31446a",
+ "bh c #393439",
+ "a5 c #393839",
+ ".3 c #393c31",
+ ".5 c #393c4a",
+ "az c #393c52",
+ "aa c #39405a",
+ "#Z c #394452",
+ ".N c #39445a",
+ "#S c #394462",
+ "#w c #394862",
+ "af c #39486a",
+ "bi c #413c41",
+ ".l c #414039",
+ "aV c #41444a",
+ ".Q c #414841",
+ "be c #414852",
+ "#p c #414c41",
+ "#G c #414c6a",
+ ".E c #415041",
+ "ak c #41506a",
+ "#T c #415073",
+ "bj c #4a444a",
+ ".j c #4a4841",
+ ".f c #4a4c41",
+ "#h c #4a554a",
+ "#H c #4a597b",
+ "aW c #52505a",
+ "#b c #525062",
+ ".t c #52554a",
+ ".e c #52594a",
+ "bp c #525962",
+ ".v c #525973",
+ "aq c #525d52",
+ "ao c #525d73",
+ "#5 c #525d7b",
+ "#W c #526152",
+ "al c #526183",
+ "#s c #526583",
+ "#6 c #52698b",
+ "#R c #526994",
+ "a6 c #5a555a",
+ "bu c #5a595a",
+ "a7 c #5a5d5a",
+ "aO c #5a5d7b",
+ "ap c #5a615a",
+ "aX c #5a6162",
+ "aN c #5a616a",
+ ".y c #5a6173",
+ "as c #5a617b",
+ "#O c #5a657b",
+ "aD c #5a6583",
+ "ai c #5a6952",
+ "an c #5a698b",
+ "ac c #5a6994",
+ "#U c #5a6d94",
+ "#4 c #5a719c",
+ "bk c #625d62",
+ "bz c #626162",
+ ".i c #62655a",
+ ".F c #626562",
+ "#M c #626573",
+ ".d c #62695a",
+ "#. c #626962",
+ "ar c #626983",
+ ".g c #626d62",
+ "ba c #626d83",
+ "at c #626d8b",
+ ".2 c #62715a",
+ ".G c #627162",
+ "#7 c #62718b",
+ "#t c #627194",
+ "#D c #627594",
+ "#F c #62799c",
+ "by c #6a656a",
+ "a. c #6a696a",
+ ".h c #6a6d62",
+ "aB c #6a717b",
+ "a2 c #6a7194",
+ "#z c #6a756a",
+ "aj c #6a758b",
+ "ay c #6a799c",
+ "ab c #6a7d9c",
+ "ae c #6a7da4",
+ "#Q c #6a81a4",
+ "bA c #736d73",
+ "#X c #73716a",
+ "#j c #737583",
+ ".s c #737973",
+ "#V c #737994",
+ "#o c #737d94",
+ "aK c #737d9c",
+ "aE c #73819c",
+ "#E c #7389ac",
+ ".S c #7b7973",
+ "bx c #7b797b",
+ ".R c #7b7d73",
+ "bl c #7b7d7b",
+ "#f c #7b7d94",
+ "aC c #7b7d9c",
+ "#9 c #7b8173",
+ "a# c #7b8194",
+ ".1 c #7b8573",
+ "ah c #7b857b",
+ "aU c #7b859c",
+ "#8 c #7b897b",
+ "#2 c #7b89a4",
+ "a8 c #838183",
+ ".k c #83857b",
+ "bd c #838594",
+ ".9 c #83899c",
+ "#x c #8389a4",
+ "au c #8389ac",
+ "#I c #838da4",
+ "ad c #838dac",
+ "#3 c #8395b4",
+ ".H c #8b8583",
+ "#B c #8b899c",
+ ".0 c #8b8d9c",
+ ".T c #8b919c",
+ ".I c #8b95a4",
+ ".D c #949194",
+ "#i c #949594",
+ "bc c #9495a4",
+ "bb c #9495ac",
+ ".P c #9499a4",
+ ".u c #9499ac",
+ "aF c #9499b4",
+ ".B c #949d94",
+ "aw c #949db4",
+ "am c #94a1bd",
+ "## c #9c959c",
+ "ag c #9c9994",
+ "bo c #9c999c",
+ ".c c #9ca19c",
+ "a3 c #9ca1b4",
+ "#P c #9ca5c5",
+ "av c #9caabd",
+ "a9 c #a49da4",
+ "#L c #a4a194",
+ "#J c #a4a1a4",
+ "#Y c #a4a1ac",
+ "#g c #a4a59c",
+ ".4 c #a4a5b4",
+ ".n c #a4a5bd",
+ ".C c #a4aaa4",
+ ".A c #a4aabd",
+ "bF c #aca5ac",
+ "#a c #aca5b4",
+ ".r c #acaaa4",
+ ".b c #acaaac",
+ "aY c #acaab4",
+ "bG c #acaeac",
+ ".o c #acaebd",
+ "aP c #acaec5",
+ "aG c #acb6c5",
+ "bB c #b4aeb4",
+ "bm c #b4b2b4",
+ "bH c #b4b6b4",
+ ".O c #b4b6c5",
+ ".m c #b4bac5",
+ "ax c #b4bad5",
+ "#K c #bdb6b4",
+ "bw c #bdb6bd",
+ "bE c #bdbabd",
+ "a1 c #bdbac5",
+ ".p c #bdbacd",
+ ".z c #bdbecd",
+ "aJ c #bdc2d5",
+ "bI c #c5bec5",
+ "#y c #c5c2c5",
+ "aQ c #c5c2d5",
+ ".q c #c5c6cd",
+ "a4 c #c5c6d5",
+ "aT c #c5c6de",
+ "aZ c #cdcacd",
+ "aS c #cdd2de",
+ "aH c #cdd2e6",
+ "bD c #d5ced5",
+ "aR c #d5cede",
+ "bC c #d5d2d5",
+ "b# c #d5d2de",
+ "aI c #d5d6e6",
+ "bn c #ded6de",
+ "bv c #dedade",
+ "a0 c #e6dee6",
+ "b. c #e6e2e6",
+ "bJ c #eee2ee",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#.b.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.c.d.e.f.fQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.g.h.i.j.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.a.k.aQt.lQt.aQt.aQt.m.n.o.p.qQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#.r.sQt.#.t.#Qt.#Qt.u.v.w.x.y.z.AQt.#Qt.#Qt.#",
+ ".aQt.aQt.B.C.a.D.E.F.a.r.G.H.aQt.I.J.K.L.M.M.N.O.PQt.aQt.aQt",
+ "Qt.#Qt.#.s.Q.R.c.S.#Qt.k.F.#Qt.T.U.V.W.W.X.Y.Z.0.u.#Qt.#Qt.#",
+ ".aQt.aQt.1.2.3.f.aQt.aQt.aQt.4.5.V.W.6.W.7.Y.8.y.9Qt.aQt.aQt",
+ "Qt.#Qt.#Qt.t#.##Qt.#Qt.#Qt#a#b#c.W#d.W.W.M.Y#e.N#f.#Qt.#Qt.#",
+ ".aQt.aQt#g#h#iQt.aQt.aQt.a#j.V.K.V.W#d#k#l.Y#m#n#oQt.aQt.aQt",
+ "Qt.#Qt.#.c#pQt.#Qt.#Qt.#Qt.x#q.V.W#d#r#s#t#u#v#w#x.#Qt.#Qt.#",
+ ".aQt.a#y#z#A.aQt.aQt.aQt#B#C.V.W.6.U#D#E#F#G#u#H#IQt.aQt.aQt",
+ "Qt.#Qt.##J.#Qt.##K#LQt.##M#q.7#N#N#O#P#Q#R#S#T#U#V.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt#W#X.a#Y#Z#0#1#0#0#2#3#4#T#5#6#U#G#7.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt#8#9a.Qta##Saa#Saa#Gabac#Saaadae.Naf.vQt.#Qt.#",
+ ".aQt.aQtagagahai.aQt.aaj#S#w#wakal#5#l.w#Vaman#N#lao.aQt.aQt",
+ "Qt.#Qt.#.DapaqahQt.#Qtarak#Tasatauavaw.AaxayazaA.ZaBQt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aaCakaDaEaFaGaHaIaJaK#waLaMaNQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.uaOaDaPaQaRaSaTaU.5aVaWaXaYaZa0.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aa1aja2a3a4a4aJaj.Ua5a6a7a.a8a9#yb..aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qtb#.9babbbcbdbebfbgbh#AbibjbkblbmbnQt.#",
+ ".aQt.aQt.aQt.aQt.aQt.abnbobp.Ubfbqbrbsbsbt#Aa5bjbua8bmbv.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qtbvbw.Dbxa.bybza7a6a7bzbAbx.DbBbC.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aQtbvbD#ybEbmbBbF.bbGbmbHbIaZbv.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#bJ.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#"
+ };
+
+
+static const unsigned char img_preview[] =
+ {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x20,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x05, 0x40, 0xc8, 0x7f, 0x00, 0x00, 0x00,
+ 0xd2, 0x49, 0x44, 0x41, 0x54, 0x48, 0x89, 0xe5, 0x96, 0x4b, 0x0e, 0xc3,
+ 0x20, 0x0c, 0x44, 0x4b, 0xd5, 0x53, 0x71, 0x7f, 0xf9, 0x5a, 0xcd, 0x0a,
+ 0xc9, 0x22, 0xb6, 0x33, 0xe3, 0x40, 0x1d, 0xa9, 0xb3, 0x49, 0x84, 0x2c,
+ 0x9e, 0x7f, 0x18, 0x9a, 0x88, 0xbc, 0x2a, 0xf4, 0x2e, 0xa1, 0x56, 0x82,
+ 0x3f, 0x88, 0x51, 0xef, 0xfd, 0x3b, 0xfe, 0x45, 0xa4, 0x65, 0x6d, 0xb4,
+ 0x5a, 0x54, 0x63, 0xbd, 0xd9, 0xac, 0xb1, 0x39, 0x62, 0x43, 0x81, 0xa3,
+ 0x0d, 0x19, 0x79, 0xf0, 0xff, 0x6b, 0xae, 0xe7, 0x80, 0x47, 0x6d, 0xaf,
+ 0x3a, 0x53, 0x44, 0x1a, 0x62, 0x03, 0x83, 0x11, 0xb8, 0x5e, 0x47, 0x6c,
+ 0x2c, 0xb9, 0xe7, 0x38, 0xea, 0xea, 0x15, 0x1d, 0xbf, 0xad, 0xc6, 0x96,
+ 0x73, 0x7a, 0xcd, 0x04, 0x23, 0xf5, 0xcb, 0x3a, 0x32, 0xbe, 0xd0, 0xc8,
+ 0xbc, 0x0b, 0xb3, 0x74, 0x8a, 0x78, 0x75, 0xa4, 0x30, 0xf8, 0x57, 0xda,
+ 0x9a, 0xea, 0x39, 0x7b, 0x3a, 0xf5, 0x5b, 0xc1, 0x91, 0x23, 0x65, 0xa9,
+ 0x0e, 0xef, 0x63, 0x4f, 0xec, 0xa5, 0x6f, 0x89, 0x8e, 0x78, 0x3e, 0x22,
+ 0xd9, 0x29, 0x46, 0x81, 0xbd, 0x48, 0x33, 0x70, 0x18, 0x6c, 0x41, 0xef,
+ 0xc0, 0x21, 0x70, 0x54, 0xd3, 0x2c, 0xfc, 0x12, 0x8c, 0x34, 0x52, 0x06,
+ 0x1e, 0x82, 0x99, 0xee, 0x65, 0xe1, 0x2e, 0x38, 0x73, 0x64, 0x18, 0x78,
+ 0xf8, 0x02, 0x61, 0xa0, 0x2c, 0xdc, 0x7d, 0x73, 0x65, 0xa0, 0x0c, 0x3c,
+ 0x35, 0xb9, 0x56, 0xa8, 0x6c, 0x56, 0x1f, 0x9a, 0x62, 0x93, 0xe0, 0x9f,
+ 0x36, 0x40, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
+ 0x42, 0x60, 0x82
+ };
+
+
+static const char* const img_video[] =
+ {
+ "30 30 205 2",
+ ".a c None",
+ ".# c None",
+ "Qt c None",
+ ".j c #292452",
+ ".q c #292852",
+ ".i c #39305a",
+ ".p c #393c6a",
+ ".r c #413c5a",
+ "#1 c #413c62",
+ ".k c #414462",
+ "#0 c #4a4483",
+ "#Z c #524ca4",
+ "#O c #52506a",
+ ".D c #5250a4",
+ ".1 c #5250ac",
+ ".d c #5a557b",
+ "## c #5a55ac",
+ ".0 c #5a599c",
+ "al c #5a59a4",
+ "#a c #5a59ac",
+ "#M c #5a5db4",
+ "#R c #5a8de6",
+ ".G c #625973",
+ "#Y c #6259ac",
+ ".u c #625d7b",
+ "#N c #625d9c",
+ "#k c #625dac",
+ ".e c #62619c",
+ ".Y c #6261ac",
+ "#X c #6265b4",
+ "#T c #6295ee",
+ ".Z c #6a61b4",
+ "#j c #6a659c",
+ ".O c #6a65a4",
+ ".2 c #6a65b4",
+ ".T c #6a6d94",
+ "#E c #6a8dd5",
+ ".s c #736973",
+ "a# c #736d8b",
+ ".E c #736da4",
+ ".C c #736db4",
+ "#l c #736dbd",
+ ".H c #73719c",
+ "#P c #7371b4",
+ "a9 c #7371bd",
+ ".P c #7375b4",
+ "#5 c #738dcd",
+ ".l c #7b717b",
+ ".t c #7b757b",
+ "ak c #7b759c",
+ ".c c #7b75a4",
+ ".f c #7b75ac",
+ "b# c #7b75b4",
+ ".X c #7b75bd",
+ ".N c #7b79b4",
+ "#b c #7b79bd",
+ "#i c #7b7da4",
+ "a1 c #7b7db4",
+ "b. c #7b7dbd",
+ "#6 c #7bbaff",
+ "ax c #8379bd",
+ "a3 c #837d8b",
+ "#2 c #837d94",
+ "a8 c #837dc5",
+ "#. c #8381bd",
+ "aZ c #8381c5",
+ "am c #8385bd",
+ "aO c #8b81c5",
+ "a. c #8b85a4",
+ "aU c #8b85bd",
+ "aN c #8b85c5",
+ ".v c #8b89b4",
+ "#B c #8b89bd",
+ ".A c #8b89c5",
+ ".B c #8b89cd",
+ "#u c #8b8dac",
+ "a4 c #8b8db4",
+ "#C c #8b8dc5",
+ ".m c #948da4",
+ ".6 c #948dc5",
+ ".o c #948dcd",
+ "aS c #94918b",
+ "aT c #94919c",
+ "aG c #9491bd",
+ ".7 c #9491c5",
+ "#A c #9491cd",
+ "#v c #9495bd",
+ "bj c #9495cd",
+ "#H c #94a5d5",
+ "#8 c #94c2f6",
+ "aR c #9c919c",
+ "aE c #9c91c5",
+ ".S c #9c95ac",
+ ".F c #9c95b4",
+ "aD c #9c95bd",
+ ".z c #9c95cd",
+ ".M c #9c95d5",
+ "aK c #9c99ac",
+ "#e c #9c99cd",
+ "a0 c #9c99d5",
+ "bg c #9c9dc5",
+ "a5 c #9c9dcd",
+ "a2 c #a499a4",
+ "aw c #a49db4",
+ "#W c #a49dc5",
+ ".h c #a49dcd",
+ ".y c #a49dd5",
+ "ay c #a4a1cd",
+ "bf c #a4a1d5",
+ "aB c #a4a5cd",
+ "aQ c #a4a5d5",
+ "aC c #aca5c5",
+ "aL c #aca5cd",
+ "aF c #aca5d5",
+ "#z c #aca5de",
+ "aJ c #acaaac",
+ "aa c #acaab4",
+ "ba c #acaacd",
+ ".L c #acaad5",
+ "af c #acaeb4",
+ "#s c #acbede",
+ "ag c #acd2f6",
+ "#V c #b4aebd",
+ "#h c #b4aecd",
+ "aV c #b4aed5",
+ "aY c #b4aede",
+ "at c #b4b2b4",
+ "be c #b4b2d5",
+ "aM c #b4b2de",
+ "bd c #b4b2e6",
+ "aI c #b4b6b4",
+ "aj c #b4b6bd",
+ "bi c #b4b6d5",
+ "#q c #b4bac5",
+ "av c #b4bed5",
+ "#r c #b4caf6",
+ "#7 c #b4daff",
+ ".3 c #bdb2de",
+ "aH c #bdb6bd",
+ "as c #bdb6c5",
+ "ar c #bdb6d5",
+ "#L c #bdb6de",
+ "aP c #bdb6e6",
+ "ae c #bdbad5",
+ "aA c #bdbae6",
+ "au c #bdcede",
+ "#J c #c5bec5",
+ "#9 c #c5becd",
+ "#o c #c5bede",
+ ".Q c #c5bee6",
+ ".9 c #c5c2e6",
+ "aX c #c5c2ee",
+ "bb c #c5c6d5",
+ ".b c #c5c6e6",
+ "#g c #cdc2de",
+ "#4 c #cdc6cd",
+ "#f c #cdcad5",
+ ".U c #cdced5",
+ "ai c #cde6f6",
+ "#G c #cde6ff",
+ ".K c #d5caee",
+ "az c #d5cecd",
+ "#U c #d5ced5",
+ "#y c #d5cee6",
+ "#m c #d5ceee",
+ "aq c #d5d2d5",
+ "aW c #d5d2de",
+ "#t c #d5d2e6",
+ ".g c #d5d2ee",
+ ".I c #d5d2f6",
+ "bh c #d5d6de",
+ "#Q c #ded2d5",
+ "a6 c #ded2de",
+ ".w c #ded2ee",
+ ".W c #ded2f6",
+ "#D c #ded6de",
+ ".5 c #ded6ee",
+ ".n c #ded6f6",
+ "a7 c #dedade",
+ ".8 c #dedae6",
+ "#K c #dedaf6",
+ "#S c #def6ff",
+ ".x c #e6d6f6",
+ "#I c #e6dae6",
+ "#d c #e6daf6",
+ "ab c #e6dee6",
+ "#w c #e6def6",
+ "#3 c #e6deff",
+ "bk c #e6e2e6",
+ "bc c #e6e2ee",
+ "#c c #e6e2f6",
+ ".V c #eee2ee",
+ "#p c #eee6ee",
+ ".J c #eee6f6",
+ "ad c #eee6ff",
+ "#n c #eeeaff",
+ "an c #eeeeee",
+ ".R c #eeeef6",
+ "#x c #f6eaff",
+ ".4 c #f6eeff",
+ "ap c #f6f2f6",
+ "ah c #f6ffff",
+ "ao c #fff6ff",
+ "ac c #fffaff",
+ "#F c #ffffff",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.bQt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.a.c.d.e.f.g.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#.h.i.j.k.l.mQt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aQt.aQt.nQt.a.o.p.q.r.s.t.u.vQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.w.x.y.z.A.B.C.D.E.F.t.G.H.A.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.a.I.J.K.L.M.A.N.O.D.P.Q.R.S.T.L.U.V.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#.W.y.X.Y.Z.0.1.2.3.4.5.6.7.8Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.9#..2##.D###a#b.z.z#c#d#e.h#fQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.##d#g#h#i#j#k#l.A.3#m#n.n.w.h.B#o#p.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.a.g#q#r#s#t#u#v.Q#w.4#x#y#z#A#B#C.V.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt#D#E#F#G#H#I#J#c#K#L.z.X#M#N#O#P.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.g#Q#R#S#S#T#U#V#W.A#X#Y#Z#0#1#2#h.B.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.##3#4#5#6#7#8#9a..O.D###ka#aaabac#p.AQt.#Qt.#Qt.#Qt.#",
+ ".aQt.aad#waeafagahaiajakal##am#9anaoapapaq.o.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.##warasatauavaw.Eax#eay#4abaqaqaz#J#CQt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt#taAaBaCawaDaE#zaF.zaGaHaIataJaJaKaL.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#aM.L.zaNaOaNaPaQ#e.6aNaJaRaSaTaUaVaWQt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQtaXaYaZaZ#baZaVa0.AaZa1a2a3a4a5a6a7Qt.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.ha8a9.Xb.aM.o.o.7aOb#babbbc.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.abdaY#Cb.aNbebfbg#ebh#pabQt.aQt.aQt.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qtbi.LbjaF.L#tbkQt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.8Qt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt",
+ "Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#Qt.#",
+ ".aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt.aQt"
+ };
+
+ static const unsigned char img_chapter[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x17,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x81, 0x32, 0xf6, 0xe2, 0x00, 0x00, 0x08,
+ 0x6d, 0x49, 0x44, 0x41, 0x54, 0x48, 0x89, 0x3d, 0x95, 0xcb, 0x92, 0x23,
+ 0xc7, 0x79, 0x85, 0xbf, 0xbc, 0x55, 0xa1, 0x50, 0x40, 0xa1, 0x81, 0xee,
+ 0x06, 0xd0, 0xb7, 0x21, 0x7b, 0x24, 0xd2, 0xb2, 0x28, 0x51, 0x61, 0x5b,
+ 0xb2, 0xc3, 0x11, 0xd6, 0x13, 0x68, 0x69, 0x6d, 0xec, 0x95, 0x37, 0x76,
+ 0x38, 0xfc, 0x14, 0xde, 0x39, 0xc2, 0x2f, 0xa0, 0x85, 0x17, 0x76, 0x78,
+ 0xe7, 0x08, 0x79, 0xef, 0x07, 0x70, 0x48, 0x0c, 0x53, 0x66, 0x90, 0x96,
+ 0x4d, 0xce, 0x85, 0xd3, 0x1c, 0x8a, 0xd3, 0xd3, 0x40, 0xdf, 0x00, 0x74,
+ 0x01, 0x85, 0xaa, 0xcc, 0xca, 0x4c, 0x2f, 0x30, 0x9c, 0xdc, 0xe4, 0x2a,
+ 0xff, 0x38, 0x79, 0xce, 0xf9, 0xcf, 0x11, 0x7f, 0xf3, 0xd7, 0x3f, 0xff,
+ 0x8b, 0xdf, 0x7f, 0x6f, 0xfc, 0xf3, 0x41, 0x6f, 0x34, 0xb0, 0x31, 0x92,
+ 0x98, 0x14, 0xa3, 0x25, 0xd6, 0xad, 0x71, 0x6d, 0x45, 0x9e, 0x17, 0x28,
+ 0xa5, 0x49, 0xd3, 0x94, 0x18, 0x23, 0x8d, 0xdb, 0x10, 0x82, 0xe5, 0x66,
+ 0x36, 0xc7, 0xd6, 0x0d, 0x27, 0x67, 0xdf, 0xfd, 0xf4, 0x61, 0x9d, 0x8a,
+ 0xcd, 0x7a, 0xf3, 0xa3, 0x1f, 0xfc, 0xf0, 0x87, 0xcf, 0xbb, 0xdd, 0xec,
+ 0xa6, 0x93, 0xa5, 0xb6, 0xaa, 0xb6, 0x05, 0xc4, 0xe5, 0xd5, 0xec, 0xfa,
+ 0x0f, 0xda, 0x20, 0x87, 0x5a, 0x6b, 0x9c, 0x73, 0xbc, 0xfb, 0xee, 0x3b,
+ 0x4f, 0x9e, 0xfc, 0xef, 0x7f, 0xbd, 0x1f, 0x5c, 0x29, 0x6d, 0x75, 0xcf,
+ 0x66, 0xb5, 0x1c, 0x3c, 0x7b, 0xb1, 0xfe, 0x97, 0xbf, 0xff, 0xc7, 0x7f,
+ 0xfa, 0x85, 0xf8, 0xd9, 0xcf, 0xbe, 0xf7, 0xcb, 0xbf, 0xfb, 0xdb, 0xbf,
+ 0xfc, 0xf3, 0xf7, 0xbe, 0xf3, 0x47, 0xf4, 0xf6, 0xa6, 0x48, 0x63, 0x08,
+ 0xd1, 0xe3, 0x43, 0x83, 0x54, 0x01, 0xad, 0x32, 0x8c, 0x4e, 0x01, 0x88,
+ 0x11, 0x08, 0x20, 0x5b, 0x70, 0x8d, 0xa5, 0xb5, 0x96, 0xf9, 0xcd, 0x2d,
+ 0x37, 0xcb, 0x25, 0x8f, 0xce, 0xce, 0xe8, 0x64, 0x19, 0x52, 0x69, 0x42,
+ 0x14, 0xb4, 0xde, 0x93, 0x24, 0x86, 0x3c, 0xef, 0x91, 0x65, 0x03, 0x82,
+ 0x0f, 0x78, 0x1f, 0xf0, 0xbe, 0xc5, 0xbb, 0x05, 0xde, 0xad, 0x58, 0xdd,
+ 0x5f, 0x70, 0x75, 0xf9, 0x05, 0xff, 0xf6, 0xaf, 0x9f, 0xf0, 0x9f, 0xbf,
+ 0xfe, 0xe2, 0x4f, 0xf5, 0xef, 0xbd, 0xf7, 0xe1, 0xbc, 0xa9, 0x0d, 0xc6,
+ 0x1c, 0xa3, 0xd2, 0x33, 0x2e, 0xaf, 0xe6, 0x1c, 0xec, 0x8f, 0xe9, 0xf5,
+ 0x73, 0xb4, 0x52, 0x34, 0x8d, 0x45, 0x9b, 0x0e, 0x4a, 0x29, 0x04, 0x20,
+ 0x42, 0x40, 0x7a, 0x4f, 0x23, 0x6a, 0x5c, 0x6c, 0xd0, 0xca, 0x90, 0x98,
+ 0x0c, 0xad, 0xa7, 0x74, 0xd2, 0x1e, 0xda, 0x24, 0x38, 0x17, 0x48, 0x4d,
+ 0xa4, 0xdb, 0xed, 0x62, 0x12, 0x8d, 0x14, 0x81, 0x10, 0x1d, 0x31, 0x7a,
+ 0x62, 0x00, 0x29, 0x8e, 0x91, 0x6a, 0x44, 0x37, 0x93, 0x08, 0x71, 0x8d,
+ 0xb3, 0x21, 0x2a, 0x29, 0x5b, 0x7d, 0x32, 0x3d, 0xb9, 0xe9, 0x74, 0xfa,
+ 0xa0, 0x0c, 0x9f, 0x7d, 0xfe, 0x39, 0xb7, 0xf3, 0xd7, 0xfc, 0xe0, 0x83,
+ 0x0f, 0x58, 0xad, 0xee, 0x18, 0x14, 0x7b, 0x7c, 0xf9, 0xe2, 0x29, 0x4a,
+ 0x4a, 0x4e, 0xcf, 0xce, 0xb8, 0xbf, 0xbf, 0x27, 0x51, 0x1d, 0x32, 0x93,
+ 0xf1, 0xe5, 0xd3, 0x2f, 0x39, 0x9d, 0x1e, 0xb1, 0x28, 0x4b, 0x54, 0x9a,
+ 0x80, 0x54, 0x44, 0x21, 0x41, 0x0a, 0x36, 0xcd, 0x9a, 0xa7, 0xcf, 0x9e,
+ 0x32, 0x1a, 0x8d, 0x38, 0x3e, 0x3a, 0x62, 0x58, 0x0c, 0x69, 0xdb, 0x88,
+ 0x10, 0x0a, 0x29, 0x25, 0x51, 0x58, 0x22, 0x80, 0x50, 0x20, 0x25, 0x6b,
+ 0x57, 0xc7, 0x60, 0x54, 0xa3, 0x7b, 0xfd, 0x6e, 0x21, 0x89, 0x78, 0xeb,
+ 0xf9, 0xfa, 0xc5, 0x05, 0xa7, 0xc7, 0xa7, 0x64, 0xa6, 0xcf, 0xcb, 0xaf,
+ 0x5f, 0x52, 0x3d, 0x34, 0xdc, 0xcd, 0x57, 0x0c, 0x06, 0x05, 0xb4, 0x9a,
+ 0xab, 0x6f, 0x6e, 0xc8, 0x3a, 0x29, 0xef, 0x9c, 0x3d, 0x42, 0xa9, 0xc8,
+ 0x62, 0x79, 0xcb, 0x6a, 0x5d, 0xb2, 0x77, 0x38, 0x24, 0xc4, 0x16, 0xf0,
+ 0x5c, 0xbe, 0x7a, 0xcd, 0x93, 0xa7, 0x5f, 0x00, 0x60, 0x14, 0xbc, 0xf6,
+ 0x8e, 0x32, 0x5f, 0x50, 0x96, 0x25, 0x45, 0x51, 0x30, 0x18, 0x0c, 0xc8,
+ 0xb2, 0x2e, 0x1e, 0x41, 0x1d, 0x05, 0x2d, 0x8a, 0xb4, 0x6b, 0x9a, 0xff,
+ 0x79, 0xf2, 0xfc, 0xb7, 0x5a, 0x10, 0x6c, 0x53, 0x5b, 0xea, 0xad, 0xe5,
+ 0xa7, 0x7f, 0xf6, 0x53, 0x16, 0xf7, 0xf7, 0x64, 0x59, 0xc2, 0x64, 0x7c,
+ 0xc8, 0xfe, 0xfe, 0x3e, 0xa3, 0xd1, 0x1e, 0xde, 0xb7, 0x24, 0x89, 0xe6,
+ 0xc7, 0x3f, 0xfe, 0x43, 0x6c, 0x63, 0xe9, 0x24, 0x29, 0x1f, 0x7c, 0xff,
+ 0x03, 0x82, 0x6b, 0x59, 0x94, 0x2b, 0x56, 0x55, 0x89, 0x92, 0x8a, 0x10,
+ 0x22, 0x21, 0x44, 0x94, 0xd4, 0xd4, 0x75, 0x8d, 0x77, 0x9e, 0x6d, 0xb5,
+ 0x45, 0x22, 0x30, 0x46, 0x73, 0x7d, 0x3d, 0x67, 0x36, 0xbb, 0xe2, 0x68,
+ 0x3a, 0xe1, 0x60, 0x3a, 0x25, 0x12, 0xd1, 0x26, 0x41, 0x29, 0x05, 0x80,
+ 0xfe, 0xdd, 0xef, 0xbe, 0x79, 0xf7, 0x60, 0xb4, 0x87, 0x10, 0xe0, 0x7d,
+ 0x60, 0x38, 0x1c, 0xd2, 0x34, 0xf6, 0xcd, 0xdd, 0x50, 0x14, 0x05, 0x10,
+ 0xb1, 0xd6, 0x61, 0x4c, 0x42, 0x6b, 0x1d, 0x8b, 0xe5, 0x02, 0xe9, 0x23,
+ 0xd3, 0xc3, 0x31, 0x2d, 0x81, 0x55, 0x55, 0x12, 0x63, 0x44, 0x4a, 0xc9,
+ 0x70, 0x38, 0x44, 0x29, 0xc5, 0x70, 0x38, 0xe4, 0xf8, 0xf8, 0x18, 0xad,
+ 0x14, 0xeb, 0xf5, 0x1a, 0x6b, 0x2d, 0x00, 0x8b, 0xc5, 0x02, 0x62, 0x60,
+ 0x7f, 0x32, 0xa5, 0xd3, 0xe9, 0x93, 0xa5, 0x05, 0xcb, 0x65, 0xb9, 0x03,
+ 0x73, 0x77, 0x77, 0x77, 0xe0, 0x5a, 0x87, 0x10, 0x82, 0xba, 0xa9, 0xb9,
+ 0xb9, 0xbe, 0x66, 0xb4, 0x37, 0xe4, 0xdb, 0x13, 0x63, 0xc4, 0x39, 0x47,
+ 0x59, 0x96, 0x8c, 0x46, 0x23, 0x5e, 0x5e, 0x5c, 0x70, 0x73, 0x7d, 0xc3,
+ 0x78, 0xff, 0x80, 0xa3, 0xf1, 0x04, 0xef, 0x3d, 0x21, 0x04, 0x00, 0x84,
+ 0x10, 0x24, 0x49, 0x42, 0x8c, 0x91, 0x97, 0x2f, 0x5f, 0x12, 0x63, 0x64,
+ 0x3a, 0x9d, 0x12, 0x42, 0x40, 0x4a, 0x49, 0x92, 0x24, 0x34, 0x4d, 0xcd,
+ 0x7a, 0x23, 0x79, 0xf1, 0xe2, 0x05, 0x8f, 0x1e, 0x8d, 0x11, 0xc2, 0x10,
+ 0xe3, 0xee, 0xbd, 0x2e, 0xd7, 0x1b, 0xa1, 0x4c, 0x8a, 0x4e, 0x12, 0xf0,
+ 0x91, 0xe9, 0x74, 0x42, 0xaf, 0xdb, 0x7b, 0x3b, 0xfc, 0x5b, 0x0a, 0xa7,
+ 0xd3, 0x29, 0x49, 0x62, 0x38, 0x39, 0x39, 0x25, 0xeb, 0x64, 0x8c, 0xf7,
+ 0xf7, 0x91, 0x4a, 0x92, 0xe7, 0x39, 0x5a, 0x27, 0x08, 0xa1, 0x08, 0x01,
+ 0x84, 0x90, 0x14, 0x45, 0xc1, 0xc3, 0xc3, 0x03, 0x5a, 0x6b, 0xac, 0xb5,
+ 0x38, 0xe7, 0x10, 0xc0, 0xab, 0xcb, 0x4b, 0x84, 0x94, 0x5c, 0x5f, 0x5f,
+ 0x33, 0x1a, 0x4d, 0xc0, 0x41, 0xeb, 0x22, 0x26, 0xed, 0xec, 0xc0, 0x48,
+ 0xa9, 0x5e, 0xc6, 0x18, 0x31, 0x89, 0x26, 0x6c, 0x1c, 0xc7, 0xd3, 0x09,
+ 0xd7, 0xf3, 0x6b, 0x26, 0x93, 0xc9, 0x5b, 0xd3, 0x01, 0x64, 0x59, 0xc6,
+ 0xed, 0xed, 0x2d, 0x7b, 0xc3, 0x3d, 0xa6, 0x93, 0x09, 0xf8, 0x40, 0xdb,
+ 0xb6, 0x38, 0xd7, 0x22, 0x84, 0x20, 0x84, 0x40, 0x8c, 0x11, 0x80, 0xaa,
+ 0xaa, 0xe8, 0x76, 0xbb, 0xdc, 0xdc, 0xdc, 0x10, 0x42, 0x20, 0x4d, 0x53,
+ 0xac, 0xb5, 0xc8, 0x37, 0x40, 0x1e, 0x9f, 0x3f, 0xe2, 0xf4, 0xf8, 0x04,
+ 0x2d, 0xc0, 0xb9, 0x96, 0xc6, 0xb5, 0x7c, 0xf5, 0xd5, 0x0b, 0xa9, 0x41,
+ 0x5c, 0x08, 0x11, 0x10, 0xc2, 0x73, 0x7b, 0x7b, 0xcf, 0xfc, 0xf5, 0x0c,
+ 0x11, 0x61, 0x36, 0x9b, 0x71, 0x74, 0x74, 0xc4, 0x62, 0xb1, 0x40, 0x4a,
+ 0x49, 0xb7, 0xdb, 0x45, 0x6b, 0xcd, 0x67, 0x9f, 0x7e, 0xca, 0xc1, 0x68,
+ 0x9f, 0x44, 0x69, 0x32, 0x93, 0x30, 0xbb, 0xbd, 0x41, 0x24, 0xfa, 0x2d,
+ 0x20, 0x88, 0x8c, 0x46, 0x23, 0x96, 0xcb, 0x25, 0x77, 0x77, 0x77, 0x4c,
+ 0xa7, 0x53, 0x66, 0xb3, 0x19, 0xc6, 0x18, 0x62, 0x8c, 0x64, 0x59, 0x86,
+ 0xb5, 0x96, 0x3c, 0xef, 0xa1, 0x68, 0x30, 0xda, 0x20, 0xa5, 0xe4, 0xfc,
+ 0xfc, 0x3b, 0x41, 0xdb, 0xc6, 0x92, 0xf7, 0xbb, 0x74, 0xf3, 0x0e, 0x07,
+ 0x87, 0x63, 0x5c, 0xb5, 0x45, 0x49, 0xb1, 0x0b, 0xac, 0x37, 0x03, 0xa4,
+ 0x94, 0x0c, 0x06, 0x05, 0x4d, 0x63, 0x39, 0x3c, 0x3c, 0x64, 0x7f, 0x38,
+ 0xc4, 0x48, 0x8d, 0x46, 0xb0, 0x6e, 0xb6, 0xd4, 0xad, 0x23, 0xc6, 0x88,
+ 0xd6, 0x9a, 0xba, 0xde, 0x72, 0x70, 0x70, 0x40, 0x55, 0x55, 0x9c, 0x9d,
+ 0x9d, 0xbd, 0x65, 0xb7, 0xd3, 0xe9, 0x50, 0xd7, 0x35, 0xe5, 0xba, 0x24,
+ 0x49, 0x92, 0x1d, 0x93, 0xa1, 0xc5, 0x87, 0x40, 0x0c, 0x62, 0x27, 0x93,
+ 0x6d, 0x41, 0x49, 0x83, 0x40, 0xf2, 0xee, 0xd9, 0x23, 0x12, 0xa3, 0xa8,
+ 0xdf, 0xd0, 0x7c, 0x77, 0x7f, 0x47, 0x08, 0x81, 0xc9, 0x64, 0x42, 0x96,
+ 0xed, 0x74, 0x3d, 0x38, 0xd8, 0x47, 0x49, 0x85, 0x08, 0x11, 0x5f, 0x37,
+ 0x08, 0xad, 0xf8, 0x66, 0xfe, 0x1a, 0x63, 0x34, 0x4a, 0x49, 0x84, 0x80,
+ 0xbc, 0x97, 0x53, 0x6d, 0xb7, 0x54, 0xd5, 0x86, 0xdb, 0xdb, 0x5b, 0x06,
+ 0xc5, 0x80, 0xe9, 0x74, 0x4a, 0x59, 0x96, 0xb4, 0xce, 0xb1, 0x5c, 0xae,
+ 0x08, 0x78, 0xbc, 0xaf, 0x89, 0x7e, 0xc3, 0xed, 0xcd, 0xf5, 0xb7, 0x60,
+ 0x02, 0x21, 0x1a, 0x82, 0x17, 0xbc, 0x78, 0xfa, 0x14, 0x81, 0xa7, 0xd3,
+ 0x49, 0x19, 0x8f, 0xc7, 0x5c, 0x5e, 0xbe, 0xa2, 0xdf, 0x2b, 0x78, 0xfe,
+ 0xfc, 0x39, 0x77, 0x77, 0x77, 0x1c, 0x1e, 0x1e, 0xb2, 0xde, 0x56, 0xec,
+ 0x0d, 0x06, 0xf8, 0xda, 0xb2, 0x5f, 0x0c, 0x98, 0x5f, 0xcf, 0x89, 0x5a,
+ 0xa0, 0x94, 0x04, 0x22, 0x26, 0x31, 0x44, 0x02, 0x1f, 0xfe, 0xe8, 0x43,
+ 0xae, 0xae, 0xae, 0xd8, 0x54, 0x15, 0x21, 0x04, 0xac, 0xb5, 0xcc, 0x66,
+ 0x33, 0x3a, 0x9d, 0xce, 0x8e, 0x0d, 0x09, 0xc8, 0x16, 0xef, 0x4a, 0xba,
+ 0xdd, 0x5d, 0xf7, 0xe9, 0xe1, 0xde, 0x50, 0xe6, 0xdd, 0x9c, 0x10, 0x22,
+ 0x31, 0x46, 0x94, 0x96, 0xbb, 0x35, 0xaf, 0x6b, 0xf6, 0x47, 0xfb, 0x68,
+ 0x6d, 0x68, 0x5b, 0x4f, 0x51, 0x14, 0xa4, 0x69, 0x8a, 0x0b, 0x9e, 0x34,
+ 0x49, 0x51, 0x26, 0x45, 0x6b, 0x4d, 0xde, 0xcd, 0x59, 0xbb, 0x2d, 0x42,
+ 0x08, 0x62, 0x8c, 0x54, 0x55, 0x45, 0xd6, 0xed, 0x20, 0xc4, 0x8e, 0x7a,
+ 0xa5, 0x14, 0xe5, 0x43, 0x49, 0x59, 0x96, 0x84, 0x10, 0x28, 0xcb, 0x12,
+ 0x88, 0xa4, 0x69, 0x0a, 0x3a, 0x23, 0xed, 0x74, 0x18, 0x0c, 0x76, 0x51,
+ 0xa2, 0xc7, 0x93, 0xe9, 0xc8, 0x98, 0x9d, 0x89, 0x8a, 0xa2, 0xa0, 0xdb,
+ 0x4d, 0xe8, 0x66, 0x19, 0x59, 0x96, 0x91, 0x24, 0x09, 0x52, 0x28, 0x4e,
+ 0x4e, 0x76, 0x99, 0xb3, 0xdd, 0x6e, 0x11, 0x5a, 0xe3, 0x1a, 0xcb, 0x20,
+ 0xcf, 0xa9, 0xcb, 0x0d, 0x42, 0x08, 0xca, 0x79, 0x45, 0x8c, 0x11, 0x21,
+ 0x04, 0x4d, 0xd3, 0xb0, 0x7a, 0x58, 0xb2, 0x58, 0x2c, 0x58, 0x2c, 0x16,
+ 0x38, 0xe7, 0xc8, 0xb2, 0x0c, 0x63, 0x0c, 0x21, 0x04, 0xb6, 0xdb, 0x2d,
+ 0xa7, 0x27, 0x27, 0x08, 0xb1, 0x6b, 0x76, 0x01, 0x08, 0xf1, 0x26, 0x67,
+ 0xaa, 0xcd, 0xaa, 0x0a, 0x6f, 0x0c, 0xb8, 0xb8, 0xbf, 0xa3, 0x75, 0x39,
+ 0xab, 0xc5, 0x92, 0x08, 0x18, 0x63, 0x18, 0x14, 0x03, 0xaa, 0x6a, 0x8b,
+ 0xf7, 0x9e, 0x6e, 0x37, 0xc7, 0xb6, 0x16, 0xa3, 0x35, 0xcd, 0xa6, 0xe2,
+ 0xf6, 0x6a, 0xc6, 0x60, 0xb8, 0x47, 0x8c, 0xbb, 0x70, 0xf4, 0xa1, 0xa5,
+ 0x75, 0x16, 0xa5, 0x14, 0xe7, 0xe7, 0xe7, 0x6f, 0xe5, 0xd9, 0x2b, 0x06,
+ 0x38, 0xe7, 0x98, 0xcd, 0x66, 0x0c, 0x06, 0x03, 0xf2, 0x5e, 0x0f, 0x21,
+ 0x04, 0x3e, 0x78, 0x10, 0xd0, 0x4b, 0x0d, 0x5f, 0x7d, 0x75, 0x21, 0x75,
+ 0xb9, 0x5e, 0xfe, 0x49, 0xfd, 0x50, 0x62, 0xdb, 0x40, 0xeb, 0x1a, 0xb6,
+ 0x1b, 0x81, 0x54, 0x1a, 0x29, 0x25, 0xad, 0xab, 0xd1, 0x2a, 0x41, 0x4a,
+ 0x89, 0x52, 0x02, 0xe7, 0x2c, 0xb6, 0xb1, 0x60, 0x02, 0x51, 0x78, 0x06,
+ 0xc3, 0x21, 0x59, 0xb7, 0x8b, 0x94, 0xfa, 0x8d, 0x24, 0x02, 0xa9, 0xa0,
+ 0x5f, 0xec, 0x61, 0x8c, 0xe1, 0xf1, 0xe3, 0xc7, 0x64, 0x59, 0xc6, 0x68,
+ 0x6f, 0xc8, 0xb3, 0x67, 0xcf, 0x78, 0x78, 0x78, 0x60, 0x3c, 0x1e, 0x33,
+ 0xd8, 0x1b, 0x62, 0x3a, 0x1d, 0x9a, 0x5a, 0xa3, 0x92, 0x84, 0xf7, 0xa7,
+ 0x87, 0x9c, 0x9f, 0x3f, 0x0e, 0x3a, 0x06, 0x85, 0x6d, 0x2c, 0x4d, 0x5d,
+ 0xf3, 0xe8, 0xf4, 0x31, 0x49, 0xaa, 0x88, 0x40, 0xbf, 0xdf, 0x47, 0x29,
+ 0x85, 0x49, 0x34, 0x3b, 0xf9, 0x05, 0x02, 0x70, 0x2e, 0x40, 0x80, 0x44,
+ 0x29, 0x9c, 0x75, 0x2c, 0x96, 0x4b, 0x84, 0x90, 0xc4, 0x28, 0x11, 0x18,
+ 0x4e, 0x4e, 0xde, 0x01, 0xb1, 0x5b, 0xf3, 0x2c, 0xcb, 0x98, 0x4c, 0x26,
+ 0xb8, 0xc6, 0xd2, 0xed, 0x76, 0xc9, 0xb2, 0x8c, 0xf1, 0x78, 0xcc, 0xc9,
+ 0xe9, 0x3b, 0x68, 0x99, 0x90, 0x24, 0x1d, 0x5a, 0x07, 0xfd, 0x7e, 0x5f,
+ 0x7c, 0xf4, 0xab, 0x5f, 0xf5, 0xb4, 0x73, 0x56, 0xf8, 0x58, 0x13, 0x45,
+ 0xcd, 0xc7, 0x1f, 0x7f, 0x4e, 0xaf, 0x97, 0x23, 0x95, 0x24, 0x4d, 0x53,
+ 0xf2, 0x3c, 0x27, 0xef, 0x65, 0xf4, 0x7b, 0x39, 0xae, 0x6d, 0xf1, 0xde,
+ 0xa3, 0xb5, 0x21, 0xd1, 0x09, 0x32, 0x46, 0x8a, 0x5e, 0x1f, 0x84, 0x25,
+ 0xc6, 0x2d, 0x21, 0xd4, 0xc4, 0x98, 0x20, 0x84, 0x26, 0x49, 0x13, 0x92,
+ 0x24, 0x79, 0xdb, 0x6f, 0x89, 0x36, 0x24, 0x49, 0x42, 0x51, 0x14, 0x08,
+ 0x21, 0xd0, 0x46, 0xe3, 0x83, 0xa5, 0xf5, 0x0d, 0x88, 0x16, 0x21, 0x45,
+ 0x9c, 0x4c, 0x27, 0x1b, 0xdd, 0xeb, 0xa7, 0x6b, 0xdb, 0x96, 0xb8, 0x76,
+ 0x45, 0xa7, 0x23, 0xa8, 0xeb, 0x0d, 0xde, 0x7b, 0xe4, 0xa0, 0xe0, 0x76,
+ 0xfb, 0x80, 0x75, 0x39, 0xce, 0xe5, 0xa4, 0x69, 0x87, 0xb2, 0x5c, 0x93,
+ 0x24, 0x0a, 0xa3, 0x24, 0x22, 0x44, 0x82, 0xef, 0xe3, 0x83, 0xa5, 0xb6,
+ 0x37, 0x54, 0x5b, 0x8d, 0x54, 0x0d, 0x3d, 0x35, 0x20, 0x86, 0x2e, 0xb6,
+ 0xf1, 0x18, 0xb3, 0x03, 0xe4, 0x7d, 0x0b, 0x04, 0x62, 0x6c, 0x89, 0x31,
+ 0xb2, 0xd9, 0x2c, 0xb0, 0x0f, 0x96, 0xed, 0x66, 0xfe, 0xe6, 0x23, 0x81,
+ 0xaf, 0x2f, 0x2e, 0xd0, 0xdb, 0xaa, 0x4e, 0xb6, 0xd1, 0xb0, 0x7e, 0xb8,
+ 0xe5, 0x64, 0x5a, 0xb0, 0x59, 0x57, 0x1c, 0x4e, 0x0e, 0x51, 0xda, 0xb3,
+ 0x58, 0xac, 0x78, 0xfc, 0xdd, 0x82, 0xa6, 0x59, 0x12, 0x82, 0x66, 0xd0,
+ 0xcf, 0x90, 0x01, 0xb4, 0x00, 0xdb, 0x38, 0x6c, 0x33, 0xe7, 0xe6, 0xf6,
+ 0x15, 0xaf, 0x2e, 0x7e, 0x0b, 0xf6, 0x94, 0x4d, 0xde, 0xa3, 0x2a, 0xfa,
+ 0x04, 0x25, 0xe8, 0xf5, 0x86, 0x64, 0x69, 0xc1, 0xba, 0xac, 0x99, 0x5f,
+ 0xcf, 0x11, 0xa2, 0x45, 0x6a, 0x8f, 0x73, 0x15, 0xbe, 0xa9, 0x70, 0xb6,
+ 0xa2, 0xb5, 0x25, 0x55, 0xb9, 0x60, 0xeb, 0x5a, 0xf1, 0xd9, 0x27, 0xff,
+ 0x9d, 0x69, 0x63, 0x0e, 0xfe, 0xea, 0xdf, 0x7f, 0xf9, 0x1f, 0xe7, 0xc7,
+ 0x27, 0x9f, 0xc6, 0xc3, 0xfd, 0xb3, 0x74, 0xff, 0x60, 0x64, 0x9a, 0xf6,
+ 0xd1, 0xba, 0xb1, 0x9b, 0xb4, 0x18, 0x74, 0x9a, 0xff, 0x7b, 0xf2, 0x45,
+ 0xe1, 0xdc, 0x6a, 0x6b, 0xad, 0x73, 0x49, 0x92, 0x93, 0xc9, 0x7d, 0x68,
+ 0x53, 0x2e, 0x2f, 0x2f, 0xf9, 0xe8, 0xa3, 0x8f, 0xf8, 0xf8, 0x37, 0xbf,
+ 0xe6, 0x7b, 0xdf, 0x7f, 0x3f, 0xfd, 0xe3, 0x9f, 0xd0, 0x18, 0xd3, 0xc9,
+ 0x3f, 0xfe, 0xe4, 0x37, 0x3f, 0x49, 0xfb, 0x56, 0x1d, 0x1d, 0x1d, 0xa3,
+ 0x65, 0xca, 0x76, 0x6b, 0x59, 0xad, 0x56, 0x84, 0x68, 0x91, 0x2a, 0xe0,
+ 0xbd, 0x45, 0xc5, 0x88, 0x51, 0xd0, 0x49, 0x25, 0xdb, 0x4d, 0x73, 0x58,
+ 0x5e, 0xf7, 0xcb, 0x5f, 0xfc, 0xc3, 0x3f, 0x57, 0xff, 0x0f, 0x14, 0xc9,
+ 0x62, 0x82, 0xa2, 0xfd, 0xb2, 0x85, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
+ 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+ };
diff --git a/src/k9copy.cpp b/src/k9copy.cpp
new file mode 100644
index 0000000..a65fdf5
--- /dev/null
+++ b/src/k9copy.cpp
@@ -0,0 +1,528 @@
+//
+// C++ Implementation: k9copy
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2005
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "k9main.h"
+#include "k9copy.h"
+#include "k9settings.h"
+#include "k9playbackoptions.h"
+#include "k9langselect.h"
+#include "k9config.h"
+#include <kdeversion.h>
+#include <kstatusbar.h>
+#include <kstdaccel.h>
+#include <kaction.h>
+#include <kstdaction.h>
+#include <kdockwidget.h>
+#include <kmdidefines.h>
+#include <kmdichildarea.h>
+#include <qframe.h>
+#include <kkeydialog.h>
+#include <kedittoolbar.h>
+#include <klibloader.h>
+#include "kviewmpeg2.h"
+#include "k9titlefactor.h"
+#include <qdom.h>
+#include <ksimpleconfig.h>
+#include "k9mp4title.h"
+#include "k9tools.h"
+#include "k9importfiles.h"
+#include "k9import.h"
+#include "k9menuedit.h"
+#include "k9chapteredit.h"
+#include "k9newtitle.h"
+#include "k9menu.h"
+#include <kdockwidget.h>
+#include <kiconloader.h>
+
+k9Copy::k9Copy()
+ : KMdiMainFrm( 0, "k9Copy" ,KMdi::IDEAlMode ) {
+ // tell the KMainWindow that this is indeed the main widget
+ m_k9MainView=NULL;
+ m_k9ImportView =NULL;
+
+ // accept dnd
+ setAcceptDrops(true);
+
+ // then, setup our actions
+ setupActions();
+
+ // and a status bar
+ statusBar()->show();
+ statusBar()->insertFixedItem("",sbFactor,TRUE);
+ statusBar()->setItemFixed(sbFactor,100);
+ statusBar()->insertItem("",sbMessage,1,FALSE);
+ statusBar()->setItemAlignment(sbMessage,AlignLeft | AlignVCenter);
+
+ // Apply the create the main window and ask the mainwindow to
+ // automatically save settings if changed: window size, toolbar
+ // position, icon size, etc. Also to add actions for the statusbar
+ // toolbar, and keybindings if necessary.
+ resize(QSize(800,600));
+
+ setToolviewStyle(KMdi::TextAndIcon);
+ createCopyWindows();
+ backupAction->setChecked(true);
+ //createImportWindows();
+}
+
+
+void k9Copy::createCopyWindows() {
+ saveDock();
+ if (m_k9ImportView) {
+ m_k9ImportView->close();
+ m_k9Import=NULL;
+ m_k9ImportView=NULL;
+ }
+ removeToolWindows();
+
+ m_actions["open"]->setEnabled(true);
+ m_actions["quit"]->setEnabled(true);
+ m_actions["preferences"]->setEnabled(true);
+ m_actions["playtitle"]->setEnabled(true);
+ m_actions["copy"]->setEnabled(true);
+ m_actions["create"]->setEnabled(false);
+ m_actions["mp4"]->setEnabled(true);
+ m_actions["eject"]->setEnabled(true);
+
+
+ k9Config config;
+ m_useXine=config.getUseMplayer();
+
+ m_useDvdAuthor=config.getUseDvdAuthor();
+
+ if (config.getPrefVersion() != VERSION) {
+ initCodecs();
+ config.read();
+ config.setPrefVersion(VERSION);
+ config.save();
+ }
+
+ m_k9Main=new k9Main(this,0,&m_drives);
+ m_k9MainView=createWrapper( m_k9Main,"","");
+ addWindow(m_k9MainView, KMdi::StandardAdd);
+
+ m_options=new k9PlaybackOptions(m_k9Main,this);
+ KMdiToolViewAccessor *acc;
+ acc=addToolWindow(m_options, KDockWidget::DockRight, getMainDockWidget(),0,i18n("DVD playback options"),i18n("DVD playback options"));
+ acc->show();
+
+ m_ToolViews.append(acc);
+
+ m_lang=new k9LangSelect(m_k9Main,this);
+ acc=addToolWindow(m_lang, KDockWidget::DockRight, getMainDockWidget(),0,i18n("Selection"),i18n("Selection"));
+ m_ToolViews.append(acc);
+
+ if (m_useXine) {
+ m_mp2=new K9Mplayer(this);
+ } else
+ m_mp2=new kViewMPEG2();
+
+ m_previewAcc=addToolWindow(m_mp2,KDockWidget::DockRight,getMainDockWidget(),0,i18n("Preview"),i18n("Preview"));
+ m_ToolViews.append(m_previewAcc);
+
+ connect(m_k9Main,SIGNAL(showPreview( k9DVD*, k9DVDTitle*,int )),m_mp2,SLOT(open( k9DVD*, k9DVDTitle*,int )));
+ connect(m_k9Main,SIGNAL(stopPreview()),m_mp2,SLOT(bStopClick()));
+
+ m_factors =new k9TitleFactor( this);
+ m_factors->setUseDvdAuthor(m_useDvdAuthor);
+ int h=m_factors->height();
+ acc=addToolWindow(m_factors,KDockWidget::DockBottom,getMainDockWidget(),10,i18n("Shrink Factor"),i18n("Shrink Factor"));
+ m_ToolViews.append(acc);
+
+ connect(m_k9Main,SIGNAL(SelectionChanged( k9DVD*,bool )),m_factors,SLOT(SelectionChanged( k9DVD*,bool )));
+ connect(m_k9Main,SIGNAL(changedTitle( k9DVDTitle* )),m_factors,SLOT(changedTitle( k9DVDTitle* )));
+
+ KDockWidget *dw=dockManager->findWidgetParentDock (m_factors);
+ dw->setForcedFixedHeight(h);
+
+ addMp4TitleOptions();
+
+ // allow the view to change the statusbar and caption
+
+ connect(m_k9Main, SIGNAL(changeStatusbar(const QString&,int )),
+ this, SLOT(changeStatusbar(const QString&,int)));
+ connect(m_k9Main, SIGNAL(changeCaption(const QString&)),
+ this, SLOT(changeCaption(const QString&)));
+
+ setAutoSaveSettings();
+ KSimpleConfig settings("K9Copy");
+ if (settings.hasGroup("dock"))
+ dockManager->readConfig((KConfig*)&settings,"dock");
+}
+
+void k9Copy::removeToolWindows() {
+ for (KMdiToolViewAccessor *acc=m_ToolViews.first();acc;acc=m_ToolViews.next()) {
+ deleteToolWindow(acc);
+ }
+ m_ToolViews.clear();
+}
+
+void k9Copy::createImportWindows() {
+ saveDock();
+ if (m_k9MainView) {
+ m_k9MainView->close();
+ m_k9Main=NULL;
+ m_k9MainView=NULL;
+ }
+
+ removeToolWindows();
+
+ m_actions["open"]->setEnabled(false);
+ m_actions["quit"]->setEnabled(true);
+ m_actions["preferences"]->setEnabled(true);
+ m_actions["playtitle"]->setEnabled(false);
+ m_actions["copy"]->setEnabled(false);
+ m_actions["create"]->setEnabled(false);
+ m_actions["mp4"]->setEnabled(false);
+ m_actions["eject"]->setEnabled(false);
+
+ KMdiToolViewAccessor *acc;
+ m_k9Import=new k9Import(this,0,&m_drives);
+ m_k9ImportView=createWrapper( m_k9Import,"","");
+ addWindow(m_k9ImportView, KMdi::StandardAdd);
+
+ m_menuEdit=new k9MenuEdit(this,0,m_k9Import->getNewDVD()->getRootMenu()->getCanvas());
+ m_menuEdit->setIcon(SmallIcon("edit"));
+ acc=addToolWindow(m_menuEdit, KDockWidget::DockRight, getMainDockWidget(),20,i18n("Edit menu"),i18n("Edit Menu"));
+ m_ToolViews.append(acc);
+
+ connect (m_k9Import,SIGNAL(titleSelected(k9Title*)),m_menuEdit,SLOT(titleSelected(k9Title*)));
+ connect (m_k9Import,SIGNAL(rootSelected(k9NewDVD*)),m_menuEdit,SLOT(rootSelected(k9NewDVD*)));
+ m_k9Import->setMenuEdit(m_menuEdit);
+
+ m_newTitle=new k9NewTitle(this);
+ m_newTitle->setK9Import(m_k9Import);
+ m_newTitle->setIcon(SmallIcon("fileimport"));
+ acc=addToolWindow(m_newTitle, KDockWidget::DockBottom, getMainDockWidget(),20,i18n("Add title"),i18n("Add title"));
+ m_ToolViews.append(acc);
+ acc->show();
+
+
+ m_chapterEdit =new k9ChapterEdit(this);
+ m_chapterEdit->setIcon(SmallIcon("title"));
+ acc=addToolWindow(m_chapterEdit, KDockWidget::DockBottom, getMainDockWidget(),20,i18n("Chapter properties"),i18n("Chapter properties"));
+ m_ToolViews.append(acc);
+ connect(m_k9Import,SIGNAL(aviFileSelected(k9AviFile*)),m_chapterEdit,SLOT(setAviFile(k9AviFile*)));
+
+
+
+ // allow the view to change the statusbar and caption
+/*
+ connect(m_k9Main, SIGNAL(changeStatusbar(const QString&,int )),
+ this, SLOT(changeStatusbar(const QString&,int)));
+ connect(m_k9Main, SIGNAL(changeCaption(const QString&)),
+ this, SLOT(changeCaption(const QString&)));
+*/
+ setAutoSaveSettings();
+ KSimpleConfig settings("K9Copy");
+ if (settings.hasGroup("dockImport"))
+ dockManager->readConfig((KConfig*)&settings,"dockImport");
+
+ m_k9Import->init();
+
+}
+
+
+k9Copy::~k9Copy() {
+ k9Config config;
+ if (config.getPrefDelTmpFiles())
+ k9Tools::clearOutput(config.getPrefOutput()+"/dvd");
+}
+
+void k9Copy::initCodecs() {
+ k9VideoCodecs v(0,0);
+ v.reset();
+ k9AudioCodecs a(0,0);
+ a.reset();
+}
+
+bool k9Copy::queryClose ( ) {
+ return true;
+}
+
+void k9Copy::setupActions() {
+
+ m_actions["open"]=KStdAction::open(this, SLOT(fileOpen()), actionCollection());
+ m_actions["quit"]=KStdAction::quit(this, SLOT(quit()), actionCollection());
+ m_actions["preferences"]=KStdAction::preferences(this,SLOT(preferences()),actionCollection());
+ KStdAction::keyBindings(this, SLOT(optionsConfigureKeys()), actionCollection());
+ KStdAction::configureToolbars(this, SLOT(optionsConfigureToolbars()), actionCollection());
+
+
+ setStandardToolBarMenuEnabled(TRUE);
+ createStandardStatusBarAction();
+
+ PlayTitleAction = new KAction(i18n("Play title"), 0,
+ this, SLOT(ActionPlayTitle()),
+ actionCollection(), "PlayTitle");
+ m_actions["playtitle"]=PlayTitleAction;
+
+ QImage img;
+ img.loadFromData( img_preview, sizeof( img_preview ), "PNG" );
+ PlayTitleAction->setIconSet(QIconSet(img));
+
+ CopyAction = new KAction(i18n("Copy"), 0,
+ this, SLOT(ActionCopy()),
+ actionCollection(), "Copy");
+ m_actions["copy"]=CopyAction;
+ CopyAction->setIcon("dvdcopy");
+
+
+ mkMpeg2Action = new KAction(i18n("Extract MPEG2"),0,
+ this, SLOT(ActionMpeg2()),
+ actionCollection(),"MakeMPEG2");
+ m_actions["mp2"]=mkMpeg2Action;
+
+ mkMpeg2Action->setIcon("mpeg");
+
+ mkMP4Action = new KAction(i18n("Create MPEG-4"),0,
+ this, SLOT(ActionMP4()),
+ actionCollection(),"MakeMPEG4");
+ m_actions["mp4"]=mkMP4Action;
+
+ mkMP4Action->setIcon("mp4");
+
+ ejectAction = new KAction(i18n("Eject"),0,
+ this, SLOT(ActionEject()),
+ actionCollection() , "Eject");
+ ejectAction->setIcon("player_eject");
+
+ m_actions["eject"]=ejectAction;
+
+
+ backupAction= new KRadioAction(i18n("DVD Backup"),0,
+ this, SLOT(ActionBackup()),
+ actionCollection(), "backup");
+ backupAction->setExclusiveGroup("mode");
+ m_actions["backup"]=backupAction;
+
+ authorAction= new KRadioAction(i18n("DVD Author"),0,
+ this, SLOT(ActionAuthor()),
+ actionCollection(), "author");
+ authorAction->setExclusiveGroup("mode");
+ m_actions["author"]=authorAction;
+
+ m_actions["create"]= new KAction(i18n("Create DVD"),0,
+ this, SLOT(ActionCreate()),
+ actionCollection(), "Create");
+ m_actions["create"]->setIcon("author");
+
+ createGUI(0);
+
+}
+
+void k9Copy::setActions( bool enabled) {
+ if (m_k9MainView) {
+ m_actions["open"]->setEnabled(enabled);
+ m_actions["quit"]->setEnabled(enabled);
+ m_actions["preferences"]->setEnabled(enabled);
+ m_actions["playtitle"]->setEnabled(enabled);
+ m_actions["copy"]->setEnabled(enabled);
+ m_actions["mp4"]->setEnabled(enabled);
+ m_actions["mp2"]->setEnabled(enabled);
+ m_actions["eject"]->setEnabled(enabled);
+ m_mp2->setEnabled(enabled);
+ m_mp4->setEnabled(enabled);
+ m_factors->setEnabled(enabled);
+ m_lang->setEnabled(enabled);
+ m_options->setEnabled(enabled);
+ } else {
+ m_actions["create"]->setEnabled(enabled);
+ m_menuEdit->setEnabled(enabled);
+ m_newTitle->setEnabled(enabled);
+ m_chapterEdit->setEnabled(enabled);
+ m_k9Import->setEnabled(enabled);
+ }
+
+
+}
+
+void k9Copy::optionsConfigureKeys() {
+ KKeyDialog::configure(actionCollection());
+}
+
+void k9Copy::optionsConfigureToolbars() {
+ // use the standard toolbar editor
+ saveMainWindowSettings(KGlobal::config(), autoSaveGroup());
+ KEditToolbar dlg(factory());
+ connect(&dlg,SIGNAL(newToolbarConfig()),this,SLOT(newToolbarConfig()));
+ dlg.exec();
+}
+
+void k9Copy::newToolbarConfig() {
+ // this slot is called when user clicks "Ok" or "Apply" in the toolbar editor.
+ // recreate our GUI, and re-apply the settings (e.g. "text under icons", etc.)
+ createGUI(0);
+
+ applyMainWindowSettings(KGlobal::config(), autoSaveGroup());
+}
+
+void k9Copy::fileOpen() {
+ m_k9Main->Open();
+
+}
+
+
+void k9Copy::addMp4TitleOptions() {
+ m_mp4=new k9MP4Title(this);
+ m_ToolViews.append(addToolWindow(m_mp4,KDockWidget::DockBottom,getMainDockWidget(),10,i18n("MPEG4 Encoding options"),i18n("MPEG4 Encoding Options")));
+ connect(m_k9Main,SIGNAL(changedTitle( k9DVDTitle* )),m_mp4,SLOT(titleChanged( k9DVDTitle* )));
+ connect(m_k9Main,SIGNAL(SelectionChanged( k9DVD*,bool )),m_mp4,SLOT(selectionChanged( k9DVD*,bool )));
+
+}
+
+void k9Copy::preferences() {
+ k9settings settings(this,i18n("Settings"));
+ settings.exec();
+ k9Config config;
+ m_useXine=config.getUseMplayer();
+
+ if (m_k9MainView) {
+ m_k9Main->readSettings();
+ m_mp2->close();
+ deleteToolWindow(m_previewAcc);
+ m_ToolViews.removeRef(m_previewAcc);
+
+ if (m_useXine)
+ m_mp2=new K9Mplayer(this);
+ else
+ m_mp2=new kViewMPEG2();
+ m_previewAcc=addToolWindow(m_mp2,KDockWidget::DockRight,getMainDockWidget(),0,i18n("Preview"),i18n("Preview"));
+ m_ToolViews.append(m_previewAcc);
+ //kViewMPEG2 * v=(kViewMPEG2*) m_mp2;
+ connect(m_k9Main,SIGNAL(showPreview( k9DVD*, k9DVDTitle*,int )),m_mp2,SLOT(open( k9DVD*, k9DVDTitle*,int )));
+ connect(m_k9Main,SIGNAL(stopPreview()),m_mp2,SLOT(bStopClick()));
+
+ m_mp4->load();
+ }
+}
+
+
+void k9Copy::ActionCopy() {
+ if (m_useXine)
+ ((K9Mplayer*)m_mp2)->bStopClick();
+ else
+ ((kViewMPEG2*)m_mp2)->bStopClick();
+ m_k9Main->Copy();
+}
+
+void k9Copy::ActionPlayTitle() {
+ m_previewAcc->show();
+ m_k9Main->PreviewTitle();
+
+}
+
+void k9Copy::ActionMP4() {
+ m_k9Main->CreateMP4();
+}
+
+void k9Copy::ActionMpeg2() {
+ m_k9Main->extractMPEG2();
+}
+
+void k9Copy::ActionEject() {
+ m_k9Main->eject();
+}
+
+void k9Copy::ActionBackup() {
+ createCopyWindows();
+}
+
+void k9Copy::ActionAuthor() {
+ createImportWindows();
+}
+
+void k9Copy::ActionCreate() {
+ m_k9Import->execute();
+}
+
+KMdiToolViewAccessor * k9Copy::setToolWindow(QWidget *_widget,KDockWidget::DockPosition _pos,const QString &tabToolTip,const QString &tabCaption) {
+ KMdiToolViewAccessor *acc=addToolWindow(_widget, _pos, getMainDockWidget(),0,tabToolTip,tabCaption);
+ m_ToolViews.append(acc);
+ return acc;
+}
+
+void k9Copy::removeToolWindow(KMdiToolViewAccessor *toolWin) {
+ deleteToolWindow(toolWin);
+ m_ToolViews.removeRef(toolWin);
+}
+
+
+void k9Copy::changeStatusbar(const QString& text,int id) {
+ // display the text on the statusbar
+ statusBar()->changeItem(text,id);
+}
+
+void k9Copy::changeCaption(const QString& text) {
+ // display the text on the caption
+ setCaption(text);
+}
+
+void k9Copy::clone( QString _input,QString _output) {
+ show();
+ m_k9Main->Clone( _input,_output);
+}
+
+void k9Copy::setInput(QString _input) {
+ m_k9Main->setInput(_input);
+}
+
+void k9Copy::setOutput(QString _output) {
+ m_k9Main->setOutput(_output);
+}
+
+
+void k9Copy::quit() {
+ close( true);
+}
+
+void k9Copy::saveDock() {
+ KConfig config("K9Copy");
+ if (m_k9MainView) {
+ dockManager->writeConfig(&config,"dock");
+ m_k9Main->saveSettings();
+ } else if (m_k9ImportView) {
+ dockManager->writeConfig(&config,"dockImport");
+ }
+}
+
+void k9Copy::closeEvent( QCloseEvent* ce ) {
+ saveDock();
+ ce->accept();
+ kapp->quit();
+}
+
+KDockWidget* k9Copy::getVisibleDock() {
+ if (m_k9MainView) {
+ KDockWidget *w= manager()->findWidgetParentDock(m_options);
+ if (w->isVisible())
+ return w;
+
+ w= manager()->findWidgetParentDock(m_lang);
+ if (w->isVisible())
+ return w;
+
+ w= manager()->findWidgetParentDock(m_mp2);
+ if (w->isVisible())
+ return w;
+ } else {
+ KDockWidget *w= manager()->findWidgetParentDock(m_menuEdit);
+ if (w->isVisible())
+ return w;
+ }
+
+ return NULL;
+}
+
+void k9Copy::setEnabledCreateDVD(bool _state) {
+ m_actions["create"]->setEnabled(_state);
+}
+
diff --git a/src/k9copy.desktop b/src/k9copy.desktop
new file mode 100644
index 0000000..d772235
--- /dev/null
+++ b/src/k9copy.desktop
@@ -0,0 +1,17 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Name=k9copy
+Exec=k9copy -caption "%c" %i %m %u
+Comment=DVD9 to DVD5 backup tool
+Comment[fr]=Backup de DVD9 en DVD5
+Comment[tr]=DVD9 DVD5 yedekleme aracı
+GenericName=Video DVD Backup
+GenericName[fr]=Backup de DVD Video
+GenericName[tr]=DVD Vidyo Yedekleme Aracı
+MimeTypes=
+Terminal=false
+Icon=k9copy
+X-DocPath=k9copy/index.html
+Categories=Qt;KDE;AudioVideo;DiscBurning;
+X-KDE-StartupNotify=true \ No newline at end of file
diff --git a/src/k9copy.h b/src/k9copy.h
new file mode 100644
index 0000000..2fb43f4
--- /dev/null
+++ b/src/k9copy.h
@@ -0,0 +1,121 @@
+//
+// C++ Interface: k9copy
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2005
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+
+#ifndef _K9COPY_H_
+#define _K9COPY_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "k9common.h"
+#include "k9cddrive.h"
+#include <kapplication.h>
+#include <kmdimainfrm.h>
+
+enum eStatusBarId {sbMessage=0,sbFactor=1};
+
+class k9Import;
+class k9Main;
+class kViewMPEG2;
+class k9PlaybackOptions;
+class k9LangSelect;
+class k9MP4Title;
+class k9TitleFactor;
+class k9MenuEdit;
+class k9NewTitle;
+class k9ChapterEdit;
+class k9Copy : public KMdiMainFrm {
+ Q_OBJECT
+public:
+ /**
+ * Default Constructor
+ */
+ k9Copy();
+
+ void clone(QString _input,QString _output);
+ void setInput(QString _input);
+ void setOutput(QString _output);
+
+ KDockWidget* getVisibleDock();
+ KMdiToolViewAccessor * setToolWindow(QWidget *_widget,KDockWidget::DockPosition _pos,const QString &tabToolTip,const QString &tabCaption) ;
+ void removeToolWindow(KMdiToolViewAccessor *toolWin);
+
+ /**
+ * Default Destructor
+ */
+ virtual ~k9Copy();
+
+protected:
+ bool queryClose( );
+ void closeEvent( QCloseEvent* ce );
+
+private slots:
+ void ActionCopy();
+ void ActionMP4();
+ void ActionEject();
+ void ActionMpeg2();
+ void ActionBackup();
+ void ActionAuthor();
+ void ActionPlayTitle();
+ void ActionCreate();
+ void changeStatusbar(const QString& text,int id);
+ void changeCaption(const QString& text);
+ void optionsConfigureKeys();
+ void optionsConfigureToolbars();
+ void newToolbarConfig();
+ void addMp4TitleOptions();
+public slots:
+ void fileOpen();
+ void preferences();
+ void quit();
+ void setActions(bool enabled);
+ void setEnabledCreateDVD(bool _state);
+private:
+ void setupAccel();
+ void setupActions();
+ void initCodecs();
+ void createImportWindows();
+ void createCopyWindows();
+ void removeToolWindows();
+ void saveDock();
+ KAction *CopyAction;
+ KAction *PlayTitleAction;
+ KAction *mkMP4Action;
+ KAction *mkMpeg2Action;
+ KAction *ejectAction;
+ KRadioAction *backupAction;
+ KRadioAction *authorAction;
+private:
+ k9Main *m_k9Main;
+ KMdiChildView *m_k9MainView,*m_k9ImportView;
+ KMdiToolViewAccessor *m_previewAcc;
+ k9PlaybackOptions *m_options;
+ k9TitleFactor *m_factors;
+ k9LangSelect *m_lang;
+ k9MP4Title *m_mp4;
+ QWidget *m_mp2;
+ k9MenuEdit *m_menuEdit;
+ k9NewTitle *m_newTitle;
+ k9ChapterEdit *m_chapterEdit;
+ k9Import *m_k9Import;
+ bool m_useXine;
+ bool m_useDvdAuthor;
+ QMap <QString,KAction*> m_actions;
+ QPtrList <KMdiToolViewAccessor> m_ToolViews;
+ k9CdDrives m_drives;
+};
+
+
+
+#endif
diff --git a/src/k9copy.png b/src/k9copy.png
new file mode 100755
index 0000000..6ed8588
--- /dev/null
+++ b/src/k9copy.png
Binary files differ
diff --git a/src/k9copy_open.desktop b/src/k9copy_open.desktop
new file mode 100644
index 0000000..92e7f3d
--- /dev/null
+++ b/src/k9copy_open.desktop
@@ -0,0 +1,11 @@
+[Desktop Action Play]
+Exec=k9copy --input %u
+Icon=k9copy.png
+Name=Copy with k9copy
+Name[fr]=Copier avec k9copy
+Name[de]=Kopieren mit k9copy
+Name[tr]=k9copy ile kopyala
+
+[Desktop Entry]
+Actions=Play;
+ServiceTypes=media/dvdvideo
diff --git a/src/k9copyui.rc b/src/k9copyui.rc
new file mode 100755
index 0000000..7a31f00
--- /dev/null
+++ b/src/k9copyui.rc
@@ -0,0 +1,38 @@
+<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
+<kpartgui name="k9copy" version="10">
+<MenuBar>
+ <Menu noMerge="1" name="file"><text>&amp;File</text>
+ <Action name="file_open"/>
+
+ <Separator/>
+ <Action name="file_quit"/>
+ </Menu>
+ <Menu name="Actions"><text>A&amp;ctions</text>
+ <Action name="backup"/>
+ <Action name="author"/>
+ <Separator/>
+ <Action name="PlayTitle" />
+ <Action name="MakeMPEG4"/>
+ <Action name="MakeMPEG2"/>
+ <Action name="Copy" />
+ <Separator/>
+ <Action name="Create"/>
+ <Separator/>
+ <Action name="Eject"/>
+ </Menu>
+</MenuBar>
+<ToolBar name="mainToolBar" noMerge="1">
+ <text>Actions ToolBar</text>
+ <Action name="file_open"/>
+ <Action name="PlayTitle"/>
+ <Action name="MakeMPEG4"/>
+ <Action name="MakeMPEG2"/>
+ <Action name="Copy"/>
+ <Action name="Create"/>
+ <Separator />
+ <Action name="options_configure" />
+ <Action name="Eject"/>
+ <Action name="file_quit"/>
+
+</ToolBar>
+</kpartgui>
diff --git a/src/k9glwidget.cpp b/src/k9glwidget.cpp
new file mode 100644
index 0000000..444d823
--- /dev/null
+++ b/src/k9glwidget.cpp
@@ -0,0 +1,185 @@
+//
+// C++ Implementation: k9glwidget
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "k9glwidget.h"
+
+#ifdef HAVE_OPENGL
+#include <qsize.h>
+#include <qapplication.h>
+#include <qdatetime.h>
+#include <cstdlib>
+#include "ac.h"
+#include <X11/Xlib.h>
+
+k9GLWidget::k9GLWidget(QWidget *parent, const char *name):QGLWidget(parent, name) {
+ XMapRaised(x11Display(),winId());
+
+ m_buffer=NULL;
+ m_height=0;
+ m_width=0;
+ library=new QLibrary("GL.so.1");
+
+ glClear = (glClear_t) library->resolve( "glClear" );
+ glRasterPos2i= (glRasterPos2i_t)library->resolve("glRasterPos2i");
+ glFlush = (glFlush_t)library->resolve("glFlush");
+ glClearColor =(glClearColor_t)library->resolve("glClearColor");
+ glShadeModel =(glShadeModel_t)library->resolve("glShadeModel");
+ glPixelStorei =(glPixelStorei_t)library->resolve("glPixelStorei");
+ glViewport =(glViewport_t)library->resolve("glViewport");
+ glMatrixMode =(glMatrixMode_t)library->resolve("glMatrixMode");
+ glLoadIdentity =(glLoadIdentity_t)library->resolve("glLoadIdentity");
+ glOrtho =(glOrtho_t)library->resolve("glOrtho");
+ glPixelZoom=(glPixelZoom_t)library->resolve("glPixelZoom");
+ glDrawPixels=(glDrawPixels_t)library->resolve("glDrawPixels");
+ glDisable=(glDisable_t)library->resolve("glDisable");
+ glPixelTransferi=(glPixelTransferi_t)library->resolve("glPixelTransferi");
+ glGetString=(glGetString_t)library->resolve("glGetString");
+}
+
+k9GLWidget* k9GLWidget::createWidget(QWidget *parent , const char *name ) {
+ //XInitThreads();
+ return new k9GLWidget(parent,name);
+}
+
+k9GLWidget::~k9GLWidget() {
+ if (m_buffer !=NULL)
+ free(m_buffer);
+ delete library;
+}
+
+void k9GLWidget::paintGL() {
+ draw();
+}
+
+void k9GLWidget::setImage(uchar *_buffer,int _width,int _height,int _len) {
+ if (qApp==NULL)
+ return;
+ if (qApp->tryLock() ) {
+ uchar *buffer=_buffer;
+ m_width=_width;
+ m_height=_height;
+ m_mutex.lock();
+ if (m_buffer !=NULL)
+ free(m_buffer);
+ m_buffer=buffer;
+ //m_stack.push(buffer);
+ m_mutex.unlock();
+ update();
+ if (qApp !=NULL)
+ qApp->unlock();
+ } else {
+ free(_buffer);
+ }
+}
+
+void k9GLWidget::draw() {
+ XLockDisplay(x11Display());
+ // uchar *buffer=NULL;
+ if (m_mutex.tryLock()) {
+ /* if (!m_stack.isEmpty())
+ buffer=m_stack.pop();
+ if (buffer !=NULL) {
+ if (m_buffer !=NULL)
+ free(m_buffer);
+ m_buffer=buffer;
+ }
+*/
+ if (m_buffer!=NULL) {
+ int h=height()-2;
+ int w=width()-2;
+ GLfloat wratio=(GLfloat)w/(GLfloat)m_width;
+ GLfloat hratio=(GLfloat)h/(GLfloat)m_height;
+ GLfloat ratio= wratio < hratio ? wratio:hratio;
+
+
+ glClear(GL_COLOR_BUFFER_BIT);
+ int top = h-(int) (h -m_height*ratio) /2;
+ int left = (int) (w -m_width*ratio) /2;
+
+ glRasterPos2i (left,top);
+ glPixelZoom (ratio, -ratio);
+
+ glDrawPixels( m_width, m_height, GL_RGBA, GL_UNSIGNED_BYTE, m_buffer );
+ swapBuffers();
+ } else {
+ makeCurrent();
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ }
+ swapBuffers();
+ m_mutex.unlock();
+ }
+ XUnlockDisplay(x11Display());
+}
+
+
+void k9GLWidget::initializeGL() {
+ setAutoBufferSwap(FALSE);
+ glClearColor (0.0, 0.0, 0.0, 0.0);
+ glShadeModel(GL_FLAT);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+
+ glDisable(GL_ALPHA_TEST);
+ glDisable(GL_BLEND);
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_DITHER);
+ glDisable(GL_FOG);
+ glDisable(GL_LIGHTING);
+ glDisable(GL_LOGIC_OP);
+ glDisable(GL_STENCIL_TEST);
+ glDisable(GL_TEXTURE_1D);
+ glDisable(GL_TEXTURE_2D);
+
+ glPixelTransferi(GL_MAP_COLOR, GL_FALSE);
+ glPixelTransferi(GL_RED_SCALE, 1);
+ glPixelTransferi(GL_RED_BIAS, 0);
+ glPixelTransferi(GL_GREEN_SCALE, 1);
+ glPixelTransferi(GL_GREEN_BIAS, 0);
+ glPixelTransferi(GL_BLUE_SCALE, 1);
+ glPixelTransferi(GL_BLUE_BIAS, 0);
+ glPixelTransferi(GL_ALPHA_SCALE, 1);
+ glPixelTransferi(GL_ALPHA_BIAS, 0);
+
+ /*
+ * Disable extensions that could slow down glDrawPixels.
+ */
+ const GLubyte* extString = glGetString(GL_EXTENSIONS);
+
+ if (extString != NULL) {
+ if (strstr((char*) extString, "GL_EXT_convolution") != NULL) {
+ glDisable(GL_CONVOLUTION_1D_EXT);
+ glDisable(GL_CONVOLUTION_2D_EXT);
+ glDisable(GL_SEPARABLE_2D_EXT);
+ }
+ if (strstr((char*) extString, "GL_EXT_histogram") != NULL) {
+ glDisable(GL_HISTOGRAM_EXT);
+ glDisable(GL_MINMAX_EXT);
+ }
+ if (strstr((char*) extString, "GL_EXT_texture3D") != NULL) {
+ glDisable(GL_TEXTURE_3D_EXT);
+ }
+ }
+
+}
+
+void k9GLWidget::resizeGL(int w, int h) {
+ glViewport (0, 0, w, h);
+ glMatrixMode (GL_PROJECTION);
+ glLoadIdentity();
+ glOrtho(0, w,0,h,-1,1);
+ // glMatrixMode (GL_MODELVIEW);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+}
+
+
+#include "k9glwidget.moc"
+
+#endif
diff --git a/src/k9glwidget.h b/src/k9glwidget.h
new file mode 100644
index 0000000..c26237c
--- /dev/null
+++ b/src/k9glwidget.h
@@ -0,0 +1,99 @@
+//
+// C++ Interface: k9glwidget
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef K9GLWIDGET_H
+#define K9GLWIDGET_H
+
+#include "k9common.h"
+
+#ifdef HAVE_OPENGL
+
+#include <qimage.h>
+#include <qlibrary.h>
+#include <qgl.h>
+#include <qmutex.h>
+
+typedef void (*glClear_t) (GLbitfield);
+typedef void (*glRasterPos2i_t) ( GLint , GLint );
+typedef void (*glPixelZoom_t) ( GLfloat , GLfloat );
+typedef void (*glDrawPixels_t) ( GLsizei , GLsizei, GLenum , GLenum ,const GLvoid * );
+typedef void (* glFlush_t) ( void );
+typedef void (*glClearColor_t)( GLclampf , GLclampf , GLclampf , GLclampf );
+typedef void (*glShadeModel_t) ( GLenum );
+typedef void (*glPixelStorei_t)( GLenum , GLint );
+typedef void (*glViewport_t) ( GLint, GLint,GLsizei , GLsizei);
+typedef void (*glMatrixMode_t)( GLenum );
+typedef void (*glLoadIdentity_t) (void);
+typedef void (*glOrtho_t)( GLdouble , GLdouble ,GLdouble , GLdouble, GLdouble , GLdouble);
+typedef void (*glDisable_t) ( GLenum );
+typedef void (*glPixelTransferi_t) ( GLenum , GLint );
+typedef const GLubyte * (*glGetString_t)( GLenum );
+/**
+ @author Jean-Michel PETIT <k9copy@free.fr>
+*/
+class k9GLWidget : public QGLWidget
+{
+Q_OBJECT
+public:
+ void setImage(uchar *_buffer,int _width,int _height,int _len);
+ static k9GLWidget * createWidget(QWidget *parent = 0, const char *name = 0);
+ ~k9GLWidget();
+protected:
+ void draw();
+ void resizeGL(int width, int height);
+ void initializeGL();
+ void paintGL();
+private:
+ k9GLWidget(QWidget *parent = 0, const char *name = 0);
+ QImage m_image;
+ QMutex m_mutex;
+ int m_width,m_height;
+ uchar *m_buffer;
+ QLibrary * library;
+ glClear_t glClear;
+ glRasterPos2i_t glRasterPos2i;
+
+ glPixelZoom_t glPixelZoom;
+ glDrawPixels_t glDrawPixels;
+ glFlush_t glFlush;
+ glClearColor_t glClearColor;
+ glShadeModel_t glShadeModel;
+ glPixelStorei_t glPixelStorei;
+ glViewport_t glViewport;
+ glMatrixMode_t glMatrixMode;
+ glLoadIdentity_t glLoadIdentity;
+ glOrtho_t glOrtho;
+ glDisable_t glDisable;
+ glPixelTransferi_t glPixelTransferi;
+ glGetString_t glGetString;
+};
+
+#else
+
+#include <qwidget.h>
+#include <qimage.h>
+
+class k9GLWidget:public QWidget
+{
+public:
+ static k9GLWidget * createWidget(QWidget *parent = 0, const char *name = 0) {
+ return new k9GLWidget(parent,name);
+ }
+ void setImage(uchar *_buffer,int _width,int _height,int _len){};
+private:
+ k9GLWidget(QWidget *parent = 0, const char *name = 0){};
+
+};
+
+
+#endif
+#endif
+
diff --git a/src/k9langselect.cpp b/src/k9langselect.cpp
new file mode 100644
index 0000000..997d514
--- /dev/null
+++ b/src/k9langselect.cpp
@@ -0,0 +1,178 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+
+#include "k9langselect.h"
+#include "k9dvd.h"
+#include "k9dvdtitle.h"
+#include "k9main.h"
+#include <kstandarddirs.h>
+k9LangSelect::k9LangSelect(k9Main *mainWindow,QWidget* parent, const char* name, WFlags fl)
+: langSelect(parent,name,fl)
+{
+ setMain( mainWindow);
+ m_main->setLangSelect( this);
+}
+
+k9LangSelect::~k9LangSelect()
+{
+}
+
+/*$SPECIALIZATION$*/
+
+void ckLvLangItem::stateChange(bool state) {
+ if (mainDlg->getupdating())
+ return;
+ mainDlg->checkLang(language,streamType,state);
+ mainDlg->updateSelection();
+// k9DVD *d = mainDlg->dvd;
+ mainDlg->setDVDSize();
+ mainDlg->updateFactor();
+ //(mainDlg->factor)->setValue((int) (d->getfactor(mainDlg->withMenus(),true )*100)-100 );
+}
+
+void k9LangSelect::setMain(k9Main* _value) {
+ m_main = _value;
+ m_dvd=m_main->dvd;
+}
+
+void k9LangSelect::fillLvLanguages() {
+ lvLanguages->clear();
+ langAudItems.clear();
+ langSubItems.clear();
+ QStringList slAudLang,slSubLang;
+ if (m_dvd->getopened()) {
+ k9DVDSubtitle *l_sub;
+ k9DVDAudioStream *l_auds;
+ QObjectList *items=m_main->getItems();
+ for (uint i=0;i<items->count();i++) {
+ k9DVDListItem *litem=(k9DVDListItem*)items->at(i);
+ switch (litem->streamType) {
+ case SUB: {
+ l_sub=litem->subtitle;
+ if (slSubLang.contains(l_sub->getlanguage())==0)
+ slSubLang.append(l_sub->getlanguage());
+ break;
+ }
+ case AUD: {
+ l_auds=litem->audioStream;
+ if (slAudLang.contains(l_auds->getlanguage())==0)
+ slAudLang.append(l_auds->getlanguage());
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+ QListViewItem *audioRoot = new QListViewItem(lvLanguages);
+ audioRoot->setOpen( TRUE );
+ audioRoot->setText(0, i18n("Audio"));
+ for ( QStringList::Iterator it = slAudLang.begin(); it != slAudLang.end(); ++it ) {
+ ckLvLangItem *lvitem=new ckLvLangItem(audioRoot,m_main);
+ lvitem->setText(0,*it);
+ lvitem->streamType=AUD;
+ lvitem->language=*it;
+ langAudItems.append(lvitem);
+ }
+
+ QListViewItem *subRoot = new QListViewItem(lvLanguages);
+ subRoot->setOpen( TRUE );
+ subRoot->setText(0, i18n("Subtitles"));
+ for ( QStringList::Iterator it = slSubLang.begin(); it != slSubLang.end(); ++it ) {
+ ckLvLangItem *lvitem=new ckLvLangItem(subRoot,m_main);
+ lvitem->setText(0,*it);
+ lvitem->streamType=SUB;
+ lvitem->language=*it;
+ langSubItems.append(lvitem);
+ }
+
+}
+
+
+
+void k9LangSelect::update() {
+ for (uint i=0;i<langAudItems.count();i++)
+ updateLvLang(AUD,langAudItems.at(i)->language);
+ for (uint i=0;i<langSubItems.count();i++)
+ updateLvLang(SUB,langSubItems.at(i)->language);
+}
+
+
+void k9LangSelect::updateLvLang(const eStreamType streamType,const QString & lang ) {
+ uint Total=0,Selected=0;
+ QString lg;
+ QObjectList *items = m_main->getItems();
+ for (uint i=0;i<items->count();i++) {
+ k9DVDListItem *litem=(k9DVDListItem*)items->at(i);
+ if (litem->streamType==streamType ) {
+ switch (streamType) {
+ case SUB :
+ lg= litem->subtitle->getlanguage();
+ if (lg==lang) {
+ Total++;
+ if (litem->listItem->isOn())
+ Selected ++;
+ }
+ break;
+ case AUD :
+ lg=litem->audioStream->getlanguage();
+ if (lg==lang) {
+ Total++;
+ if (litem->listItem->isOn())
+ Selected++;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ if (streamType==AUD) {
+ for (ckLvLangItem *langItem = langAudItems.first(); langItem; langItem = langAudItems.next() ) {
+ if (langItem->language ==lang) {
+ if (Selected==Total) {
+ langItem->setOn(true);
+ } else
+ langItem->setOn(false);
+ }
+ }
+ }
+ if (streamType==SUB) {
+ for (ckLvLangItem *langItem = langSubItems.first(); langItem; langItem = langSubItems.next() ) {
+ if (langItem->language ==lang) {
+ if (Selected==Total) {
+ langItem->setOn(true);
+ } else
+ langItem->setOn(false);
+ }
+ }
+ }
+
+}
+
+void k9LangSelect::selectAll( bool _state) {
+ for (ckLvLangItem *langItem = langAudItems.first(); langItem; langItem = langAudItems.next() ) {
+ langItem->setOn(_state);
+ }
+ for (ckLvLangItem *langItem = langSubItems.first(); langItem; langItem = langSubItems.next() ) {
+ langItem->setOn(_state);
+ }
+}
+
+void k9LangSelect::clear() {
+ langAudItems.clear();
+ langSubItems.clear();
+ lvLanguages->clear();
+}
+#include "k9langselect.moc"
+
diff --git a/src/k9langselect.h b/src/k9langselect.h
new file mode 100644
index 0000000..e54ea5c
--- /dev/null
+++ b/src/k9langselect.h
@@ -0,0 +1,73 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9LANGSELECT_H
+#define K9LANGSELECT_H
+
+#include "k9common.h"
+#include "langselectw.h"
+
+#include "k9main.h"
+#include <qlistview.h>
+
+class k9Main;
+class k9DVD;
+
+class ckLvLangItem : public QCheckListItem {
+public:
+ ckLvLangItem( QListViewItem *parent,k9Main *dlg)
+ : QCheckListItem( parent,"",QCheckListItem::CheckBox) {
+ mainDlg=dlg;
+ streamType=NONE;
+ }
+ eStreamType streamType;
+ k9Main *mainDlg;
+ QString language;
+protected:
+ void stateChange(bool state);
+};
+
+
+
+class k9LangSelect : public langSelect
+{
+ Q_OBJECT
+
+public:
+ k9LangSelect(k9Main *mainWindow,QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~k9LangSelect();
+
+ void setMain(k9Main* _value);
+ void fillLvLanguages();
+ void update();
+ void clear();
+ void selectAll(bool _state);
+ /*$PUBLIC_FUNCTIONS$*/
+
+public slots:
+ /*$PUBLIC_SLOTS$*/
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+ k9Main * m_main;
+ k9DVD *m_dvd;
+ QPtrList <ckLvLangItem> langAudItems;
+ QPtrList <ckLvLangItem> langSubItems;
+ void updateLvLang(const eStreamType streamType,const QString & lang );
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+
+};
+
+#endif
+
diff --git a/src/k9main.cpp b/src/k9main.cpp
new file mode 100644
index 0000000..0daf516
--- /dev/null
+++ b/src/k9main.cpp
@@ -0,0 +1,1532 @@
+/***************************************************************************
+* 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 "k9main.h"
+#include "k9common.h"
+#include "k9dvdauthor.h"
+#include "k9burndvd.h"
+#include "k9dvd.h"
+#include "k9dvdtitle.h"
+#include "k9dvdtitleset.h"
+#include "k9dvdbackup.h"
+#include "k9mp4enc.h"
+#include "k9settings.h"
+#include "k9langselect.h"
+#include "k9config.h"
+#include "k9updatefactor.h"
+#include "k9haldevice.h"
+#include "k9titleencopt.h"
+#include <kselect.h>
+#include <kcombobox.h>
+#include <qtextbrowser.h>
+#include <qapplication.h>
+#include <qlistview.h>
+#include <kurlrequester.h>
+#include <kurl.h>
+#include <qdir.h>
+#include <kstandarddirs.h>
+#include <qspinbox.h>
+#include <qstatusbar.h>
+#include <kpushbutton.h>
+#include <kiconloader.h>
+#include <qcheckbox.h>
+#include <qmenubar.h>
+#include <qlabel.h>
+#include <qpixmap.h>
+#include <qspinbox.h>
+#include <qpainter.h>
+#include <kdirselectdialog.h>
+#include <kio/global.h>
+#include <kio/job.h>
+#include <kio/netaccess.h>
+#include <kdiskfreesp.h>
+#include <qvaluelist.h>
+#include <kdeversion.h>
+#include <qbitmap.h>
+
+
+k9DVDListItem::k9DVDListItem(QObject *DVD,ckLvItem *List,eStreamType type)
+{
+ switch(type)
+ {
+ case AUD :
+ audioStream=(k9DVDAudioStream*)DVD;
+ subtitle=NULL;
+ title=NULL;
+ break;
+ case SUB :
+ subtitle = (k9DVDSubtitle*)DVD;
+ audioStream=NULL;
+ title=NULL;
+ break;
+ case VID :
+ subtitle=NULL;
+ audioStream=NULL;
+ title =(k9DVDTitle*)DVD;
+ break;
+ default :
+ break;
+ }
+ listItem= List;
+ streamType=type;
+}
+
+k9Main::k9Main(QWidget* parent, const char* name, k9CdDrives *_drives)
+ : MainDlg(parent,name),pxVideo((const char **) img_video), pxSound((const char **) img_sound),
+ pxText((const char **) img_text)
+{
+ drives=_drives;
+ m_parent=(k9Copy*)parent;
+ QImage img;
+ img.loadFromData( img_chapter, sizeof( img_chapter ), "PNG" );
+ pxChapter.convertFromImage( img);
+ /* m_factory = KLibLoader::self()->factory("libk9copy");
+ if (m_factory) {
+ dvd=static_cast<k9DVD *>(m_factory->create(this,"dvd", "k9DVD"));
+ }
+ */
+
+ dvd=new k9DVD(this);
+
+ updating=false;
+
+ items.setAutoDelete(true);
+ listView1->setDefaultRenameAction(QListView::Accept);
+ // KStandardDirs kd;
+ m_prefOutput=locateLocal("tmp","k9copy/",true); //kd.findResource("tmp","");
+ connect(drives,SIGNAL(deviceAdded( k9CdDrive*)),this,SLOT(deviceAdded( k9CdDrive* )));
+ connect(drives,SIGNAL(deviceRemoved( k9CdDrive*)),this,SLOT(deviceRemoved( k9CdDrive* )));
+
+ readSettings();
+ bInputOpen->setPixmap(SmallIcon("fileopen"));
+ bInputOpenDir->setPixmap(SmallIcon("folder_open"));
+ emit SelectionChanged(NULL,true);
+ m_update=new k9UpdateFactor(this,"");
+ connect(m_update,SIGNAL(updateFactor_internal()),this,SLOT(updateFactor_internal()));
+}
+
+
+k9DVDListItem *k9Main::addListItem(QObject *DVD,ckLvItem *List,eStreamType type)
+{
+ k9DVDListItem *litem;
+ litem=new k9DVDListItem(DVD,List,type);
+ items.append(litem);
+ return litem;
+}
+
+int LvItem::rtti() const
+{
+ return(1000);
+}
+
+
+int ckLvItem::rtti() const
+{
+ return(1001);
+}
+
+int ckLvItem::compare ( QListViewItem * i, int col, bool ascending ) const
+{
+ if (i->rtti() !=1001)
+ return 1;
+ ckLvItem *litem = (ckLvItem*)i;
+ k9DVDTitleset *titleset1,*titleset2;
+ ckLvItem *l;
+ uint id,id2;
+ if (col==0)
+ {
+ switch(this->objectType)
+ {
+ case TITLESET:
+ titleset1=(k9DVDTitleset*)obj;
+ titleset2=(k9DVDTitleset*)litem->obj;
+ return titleset1->getnum() -titleset2->getnum();
+ case STREAM:
+ l=(ckLvItem*)this;
+ id=streamType*100;
+ id2=litem->streamType*100;
+
+ if (streamType==AUD)
+ {
+ id+=((k9DVDAudioStream*)l->stream)->getID();
+ }
+ if (streamType==SUB)
+ {
+ id+=((k9DVDSubtitle*)l->stream)->getID().first();
+ }
+
+ if (litem->streamType==AUD)
+ {
+ id2+=((k9DVDAudioStream*)litem->stream)->getID();
+ }
+ if (litem->streamType==SUB)
+ {
+ id2+=((k9DVDSubtitle*)litem->stream)->getID().first();
+ }
+
+
+ return k9Main::compare(id,id2);
+ break;
+ case CHAPTER:
+ l=(ckLvItem*)this;
+ k9DVDChapter *ch1=(k9DVDChapter*)l->obj;
+ k9DVDChapter *ch2=(k9DVDChapter*)litem->obj;
+ return k9Main::compare(ch1->getnum()+ch1->getTitle()->getId()*1000 ,ch2->getnum()+ch2->getTitle()->getId()*1000);
+ break;
+ }
+ }
+
+ if (col ==1)
+ {
+ switch (this->objectType)
+ {
+ case TITLESET:
+ titleset1=(k9DVDTitleset*)obj;
+ titleset2=(k9DVDTitleset*)litem->obj;
+ return k9Main::compare(titleset1->getsize(),titleset2->getsize());
+ break;
+ case STREAM:
+ double size1,size2;
+ l =(ckLvItem*)this;
+ size1=l->getstreamSize();
+ size2=litem->getstreamSize();
+ return k9Main::compare(size1,size2);
+ break;
+ case CHAPTER:
+ l=(ckLvItem*)this;
+ k9DVDChapter *ch1=(k9DVDChapter*)l->obj;
+ k9DVDChapter *ch2=(k9DVDChapter*)litem->obj;
+ return k9Main::compare(ch1->getsectors(),ch2->getsectors());
+ }
+ }
+ return QCheckListItem::compare(i,col,ascending);
+}
+
+double ckLvItem::getstreamSize()
+{
+ double size;
+ k9DVDTitle *title;
+ switch (streamType)
+ {
+ case SUB:
+ {
+ k9DVDSubtitle *sub=(k9DVDSubtitle*)stream;
+ size=sub->getsize_mb();
+ break;
+ }
+ case AUD:
+ {
+ k9DVDAudioStream *aud=(k9DVDAudioStream*)stream;
+ size=aud->getsize_mb();
+ break;
+ }
+ case VID:
+ {
+ title=(k9DVDTitle*)obj;
+ size=title->gettotalvideosize_mb();
+ break;
+ }
+ default:
+ size=0;
+ break;
+ }
+ return size;
+}
+
+
+int LvItem::compare ( QListViewItem * i, int col, bool ascending ) const
+{
+ if(i->rtti()==1001)
+ return -1;
+ LvItem *litem = (LvItem*)i;
+ k9DVDTitle *title1,*title2;
+ if (col ==1 && objectType==TITLE)
+ {
+ title1=(k9DVDTitle*)obj;
+ title2=(k9DVDTitle*)litem->obj;
+ return k9Main::compare(title1->gettotalsize_mb(),title2->gettotalsize_mb());
+ }
+ if (col==0 && objectType==TITLE)
+ {
+ title1=(k9DVDTitle*)obj;
+ title2=(k9DVDTitle*)litem->obj;
+ return k9Main::compare(title1->getpgc(),title2->getpgc());
+ }
+
+ return QListViewItem::compare(i,col,ascending);
+}
+
+void ckLvItem::paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align )
+{
+ if (column==1)
+ {
+ p->eraseRect(0,0,width,height());
+ QFont f(p->font());
+
+ switch (objectType)
+ {
+ case TITLESET:
+ {
+ k9DVDTitleset *titleset=(k9DVDTitleset*)obj;
+ f.setBold(true);
+ p->setFont(f);
+ p->drawText(0,0,width,height(),Qt::AlignRight | Qt::AlignVCenter ,titleset->getsize_mb()+" " +i18n("MB"));
+ break;
+ }
+ case STREAM:
+ {
+ if ( ! mainDlg->getquickScan())
+ {
+ double size=getstreamSize();
+ QString c;
+ c.sprintf("%.2f ",size);
+ p->drawText(0,0,width,height(),Qt::AlignRight | Qt::AlignVCenter ,c+i18n("MB"));
+ }
+ break;
+ }
+ case CHAPTER :
+ {
+ k9DVDChapter *chapter=(k9DVDChapter*) obj;
+ double size=(double)chapter->getsectors()/512;
+ QString c;
+ c.sprintf("%.2f ",size);
+ p->drawText(0,0,width,height(),Qt::AlignRight | Qt::AlignVCenter ,c+i18n("MB"));
+ }
+ break;
+ default:
+ QCheckListItem::paintCell(p,cg,column,width,align);
+ }
+ }
+ else
+ QCheckListItem::paintCell(p,cg,column,width,align);
+
+}
+
+void LvItem::paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align )
+{
+ if (column==1 && objectType==TITLE)
+ {
+ p->eraseRect(0,0,width,height());
+ k9DVDTitle * title=(k9DVDTitle*)obj;
+ QString c;
+ c.sprintf("%.2f ",title->gettotalsize_mb());
+ p->drawText(0,0,width,height(),Qt::AlignRight | Qt::AlignVCenter ,c+i18n("MB"));
+ }
+ else
+ QListViewItem::paintCell(p,cg,column,width,align);
+}
+
+void ckLvItem::stateChange(bool state)
+{
+ if (mainDlg !=NULL)
+ {
+ if (mainDlg->getupdating())
+ return;
+ switch (objectType)
+ {
+ case ROOT :
+ mainDlg->checkAll(state);
+ break;
+ case TITLESET:
+ mainDlg->checkTS(state,this);
+ break;
+ default :
+ mainDlg->checkTitle(state,this);
+ break;
+ }
+ // k9DVD *d = mainDlg->dvd;
+ mainDlg->setDVDSize();
+ mainDlg->updateFactor();
+ //(mainDlg->factor)->setValue((int) (d->getfactor(mainDlg->withMenus(),true )*100)-100 );
+ }
+}
+
+
+bool k9Main::getupdating()
+{
+ return updating;
+}
+
+
+void k9Main::Copy()
+{
+ QString c,filename;
+ if (!dvd->getopened())
+ {
+ KMessageBox::error( this, i18n("DVD is not opened"), i18n("DVD Copy"));
+ return;
+ }
+ setDVDSize();
+ updateSelection();
+
+ QString outputDir=m_prefOutput;
+ bool burn=false;
+
+ if (cbOutputDev->currentItem() ==0)
+ {
+ filename=KFileDialog::getSaveFileName (QDir::homeDirPath(),"*.iso", 0,i18n("Save image to disk"));
+ if (filename =="")
+ return;
+ } else if (cbOutputDev->currentItem()==1) {
+ outputDir= KFileDialog::getExistingDirectory(QDir::homeDirPath());
+ if (outputDir=="")
+ return;
+ }
+
+ if (getFreeSpace( m_prefOutput) < m_prefSize)
+ {
+ if (KMessageBox::warningContinueCancel (this, i18n("Insufficient disk space on %1\n%2 mb expected.").arg(m_prefOutput).arg(m_prefSize),i18n("DVD Copy"))==KMessageBox::Cancel)
+ return;
+ }
+ stopPreview();
+ changeStatusbar( i18n("Backup in progress"),sbMessage);
+ if (!m_useDvdAuthor || withMenus())
+ {
+ //copy with k9DVDBackup
+ //k9DVDBackup *backup = static_cast<k9DVDBackup *>(m_factory->create(dvd,"backup", "k9DVDBackup"));
+ m_playbackOptions->setSequence(); // JMP : temporaire
+
+ k9DVDBackup *backup=new k9DVDBackup(dvd,"backup");
+
+ setProgressWindow(backup->getDialog());
+ backup->setOutput(outputDir);
+ backup->setDevice(dvd->getDevice());
+ backup->setWithMenus( withMenus());
+ backup->execute();
+ burn=backup->getErrMsg()=="";
+ delete backup;
+ removeProgressWindow();
+ }
+ else
+ {
+ //k9DVDAuthor *b=static_cast<k9DVDAuthor *>(m_factory->create(dvd,"dvdauthor", "k9DVDAuthor"));
+
+ k9DVDAuthor *b=new k9DVDAuthor(dvd,"dvdauthor");
+ setProgressWindow( b->getDialog());
+ m_playbackOptions->setSequence();
+ b->setworkDir(outputDir);
+ b->author();
+ if (!b->getError())
+ burn=true;
+ removeProgressWindow();
+
+ delete b;
+ }
+
+ if (burn && cbOutputDev->currentItem()!=1)
+ {
+ changeStatusbar(i18n("Burning DVD"),sbMessage);
+
+ k9BurnDVD b;
+
+ setProgressWindow( b.getDialog());
+ b.setworkDir(m_prefOutput);
+ b.setUseK3b(m_prefK3b);
+ b.setAutoBurn(m_prefAutoBurn);
+ b.setvolId(dvd->getDVDTitle());
+ b.setSpeed( cbBurnSpeed->currentText());
+ if (cbOutputDev->currentItem() >1)
+ {
+ k9CdDrive * drive=(k9CdDrive*)recorderList.at(cbOutputDev->currentItem()-2);
+ b.setburnDevice(drive->device);
+ closeDVD();
+ if (dvd->getDevice()== drive->device)
+ b.setAutoBurn(false);
+ }
+ else
+ b.makeIso(filename);
+ b.burn();
+ removeProgressWindow();
+ }
+ if(dvd->getopened())
+ changeStatusbar(i18n("Ready"),sbMessage);
+
+}
+
+void k9Main::setProgressWindow(QWidget *_widget) {
+ m_toolView=m_parent->setToolWindow(_widget,KDockWidget::DockRight,i18n("processing"),i18n("processing"));
+ m_dockWidget = m_parent->getVisibleDock();
+ m_parent->setActions( false);
+ m_toolView->show();
+ this->setEnabled(false);
+
+}
+
+void k9Main::removeProgressWindow() {
+ m_parent->setActions(true);
+
+ m_parent->removeToolWindow( m_toolView);
+ this->setEnabled(true);
+ if (m_dockWidget!=NULL)
+ m_dockWidget->changeHideShowState();
+}
+
+void k9Main::eject()
+{
+ closeDVD();
+ drives->eject( getDevice(cbInputDev));
+}
+
+
+
+QString k9Main::getDevice(QComboBox *_combo)
+{
+ int index=-1;
+ for (int i=0; i<_combo->count();i++)
+ {
+ QString t =_combo->text(i);
+ if (_combo->text(i) == _combo->currentText())
+ index=i;
+ }
+ QString res="";
+ if ((index==-1) || (_combo->currentText() ==i18n("ISO Image")))
+ {
+ res=_combo->currentText();
+#if KDE_VERSION >= KDE_MAKE_VERSION(3,4,0)
+
+ KURL url=KURL::fromPathOrURL(res);
+ //KIO::mount(true,0,res,"",true);
+ KIO::UDSEntry entry;
+ //first call to mount the device
+ KIO::NetAccess::stat(KURL::fromPathOrURL(res+"/."),entry,0);
+ if (KIO::NetAccess::stat(url,entry,0) )
+ {
+ KIO::UDSEntry::iterator it;
+ for ( it = entry.begin(); it != entry.end(); ++it )
+ {
+ if ( (*it).m_uds== KIO::UDS_LOCAL_PATH) {
+ res=(*it).m_str;
+ }
+ }
+ }
+#endif
+
+ }
+ else
+ {
+ k9CdDrive * drive=(k9CdDrive*)driveList.at(index);
+ res=drive->device;
+ }
+ return res;
+}
+
+void k9Main::Open()
+{
+ int i;
+ k9DVDTitle * l_track;
+ QString t;
+ QTime h;
+ connect(listView1,SIGNAL(itemRenamed(QListViewItem*,int)),this,SLOT(itemRenamed(QListViewItem *,int)));
+ connect(listView1,SIGNAL(expanded( QListViewItem*)),this,SLOT(expanded( QListViewItem* )));
+ connect(listView1,SIGNAL(collapsed( QListViewItem*)),this,SLOT(collapsed( QListViewItem* )));
+
+ closeDVD();
+ QString sDevice=getDevice(cbInputDev);
+
+ QString sVolName="";
+ //if no dvd label, try to get it from hal
+ for (k9CdDrive *drive=driveList.first();drive;drive=driveList.next()) {
+ #ifdef HAVE_HAL
+ if (drive->getDevice() != NULL) {
+ if (drive->getDevice()->mountPoint()==sDevice) {
+ sVolName=drive->getDevice()->getVolumeName();
+ sDevice=drive->device;
+ break;
+ }
+ }
+#endif
+ }
+
+ dvd->scandvd(sDevice,m_quickScan);
+ if (dvd->geterror())
+ {
+ KMessageBox::error( this, dvd->geterrMsg(), i18n("Open DVD"));
+ return;
+ }
+ if (dvd->getDVDTitle()==i18n("unknown") && sVolName!="") {
+ dvd->setDVDTitle( sVolName);
+ }
+
+ listView1->clear();
+ items.clear();
+ tsItems.clear();
+ chItems.clear();
+
+ root = new ckLvItem (listView1,this,ROOT );
+ root->setOpen( TRUE );
+
+ root->setText(0, dvd->getDVDTitle());
+ root->setRenameEnabled(0,true);
+ root->obj=NULL;
+ root->streamType=NONE;
+ root->setPixmap(0,SmallIcon("dvd_unmount"));
+
+ for (i=0;i<dvd->gettitlesetCount();i++)
+ {
+ ckLvItem *tsItem = new ckLvItem(root,this,TITLESET);
+ tsItem->setOpen(TRUE);
+ QString c;
+ c=i18n("Titleset %1").arg(i+1);
+ tsItem->setText(0,c);
+ tsItem->setText(1," "+dvd->gettitleset(i)->getsize_mb() +" " +i18n("MB"));
+ tsItem->obj=dvd->gettitleset(i) ;
+ tsItem->streamType=NONE;
+ tsItem->setRenameEnabled(0,false);
+ tsItems.append(tsItem);
+ tsItem->setPixmap( 0,SmallIcon("folder"));
+ }
+
+ for (i=0;i<dvd->gettitleCount();i++)
+ {
+ l_track=dvd->gettitle(i);
+ if ((l_track->getIndexed()))
+ addTitle(l_track);
+
+ h=l_track->gettotallength();
+ }
+
+ m_playbackOptions->fillTitleList();
+ m_langSelect->fillLvLanguages();
+ listView1->setSorting(0,true);
+ changeStatusbar( i18n("Ready"),sbMessage);
+ emit SelectionChanged(dvd,withMenus());
+}
+
+void k9Main::setDVDSize()
+{
+ //k9DVDSize *dvdsize=static_cast<k9DVDSize *>(m_factory->create(this,"dvd", "k9DVDSize"));
+ k9DVDSize *dvdsize=new k9DVDSize(this);
+ dvdsize->setMaxSizeDyn(m_prefSize);
+ delete dvdsize;
+}
+
+
+k9Main::~k9Main()
+{
+ delete dvd;
+}
+
+void k9Main::closeEvent( QCloseEvent* ce )
+{
+ saveSettings();
+ ce->accept();
+}
+
+
+void k9Main::addChapters(QListViewItem *_parent,k9DVDTitle *_title)
+{
+ LvItem *chapter = new LvItem(_parent,CHAPTER);
+ chapter->setText(0, i18n("chapters"));
+ chapter->setOpen( false);
+ chapter->setPixmap(0,pxChapter);
+
+ int ch=0;
+ for (int i=0;i< _title->getchapterCount();i++)
+ {
+ ckLvItem *it =new ckLvItem(chapter,this,CHAPTER);
+ it->setText(0,i18n("chapter %1").arg(++ch));
+ it->setText(1,i18n("%1 MB").arg((double)(_title->getChapter(i)->getsectors()) /512));
+ it->streamType=CHAP;
+ it->obj=_title->getChapter(i);
+ chItems.append( it);
+ it->mainTitle=_title;
+ }
+ for (int j=0;j <_title->getTitles().count();j++)
+ {
+ k9DVDTitle *title2=_title->getTitles().at(j);
+ for (int i=0;i< title2->getchapterCount();i++)
+ {
+ ckLvItem *it =new ckLvItem(chapter,this,CHAPTER);
+ it->setText(0,i18n("chapter %1").arg(++ch));
+ it->streamType=CHAP;
+ it->obj=title2->getChapter(i);
+ it->setText(1,i18n("%1 MB").arg((double)(title2->getChapter(i)->getsectors()) /512));
+ chItems.append( it);
+ it->mainTitle=_title;
+ }
+
+ }
+
+}
+/** No descriptions */
+void k9Main::addTitle(k9DVDTitle *track)
+{
+ const int col1 =0;
+ const int col2 =1;
+ const int col3 =2;
+ k9DVDAudioStream *l_auds;
+ k9DVDSubtitle *l_sub;
+ int i;
+ QString c,ch;
+
+
+ listView1->setRootIsDecorated(true);
+
+ LvItem * itemTrack = new LvItem( tsItems.at(track->getVTS()-1),TITLE);
+ itemTrack->setOpen( false );
+ itemTrack->setText(col1,track->getname());
+ itemTrack->setRenameEnabled(0,true);
+ itemTrack->setPixmap(col1,SmallIcon("title"));
+ c.sprintf("%.2f ", track->gettotalsize_mb());
+
+ itemTrack->setText(col2,c+i18n("MB"));
+ itemTrack->obj=track;
+
+ addChapters( itemTrack,track);
+
+ ckLvItem *video;
+ video=new ckLvItem( itemTrack,this,STREAM);
+ video->streamType=VID;
+ addListItem(track,video,VID);
+ video->setOpen( false );
+ c=i18n("video %1 ").arg(track->getformat());
+ c.append (" - " + track->gettotallength().toString("h:mm:ss"));
+ video->setText(col1, c);
+ c.sprintf("%.2f ", track->gettotalvideosize_mb());
+ video->setText(col2,c +i18n("MB"));
+ video->setPixmap(col1,pxVideo);
+ video->obj=track;
+
+ for (i=0;i< track->getaudioStreamCount();i++)
+ {
+ l_auds=track->getaudioStream(i);
+ c=i18n("audio %1 ").arg(i+1);
+ c.append( l_auds->getlanguage() + " " +l_auds->getformat()+" " );
+ ch.sprintf("%dch ",l_auds->getchannels());
+ c.append(ch+l_auds->getfrequency()+" "+l_auds->getquantization());
+ ckLvItem * item = new ckLvItem( itemTrack,this,STREAM);
+ item->streamType=AUD;
+ item->language=l_auds->getlanguage();
+ addListItem(l_auds,item,AUD);
+ item->setText( col1, c );
+ c=i18n("%1 MB").arg(l_auds->getsize_mb());
+ item->setText( col2,c);
+ item->setText( col3,l_auds->getcontent());
+ item->setPixmap(col1,pxSound);
+
+ item->obj=track;
+ item->stream=l_auds;
+ }
+ for (i=0;i< track->getsubPictureCount();i++)
+ {
+ l_sub=track->getsubtitle(i);
+ c=i18n("subpicture %1 ").arg(i+1);
+ c.append( l_sub->getlanguage());
+ ckLvItem * item = new ckLvItem( itemTrack,this,STREAM);
+ item->streamType=SUB;
+ item->language=l_sub->getlanguage();
+ addListItem(l_sub,item,SUB);
+ item->setText( col1, c );
+ c=i18n("%1 MB").arg(l_sub->getsize_mb());
+ item->setText( col2,c);
+ item->setText( col3, l_sub->getcontent());
+ item->setPixmap(col1,pxText);
+
+ item->obj=track;
+ item->stream=l_sub;
+ }
+}
+
+
+/** No descriptions */
+void k9Main::updateSelection()
+{
+
+ k9DVDListItem *litem;
+ for (uint i=0;i<items.count();i++)
+ {
+ litem=(k9DVDListItem*)items.at(i);
+
+ switch (litem->streamType)
+ {
+ case SUB:
+ k9DVDSubtitle *l_sub;
+ l_sub=litem->subtitle;
+ l_sub->setselected(litem->listItem->isOn());
+ break;
+ case AUD:
+ k9DVDAudioStream *l_auds;
+ l_auds=litem->audioStream;
+ l_auds->setselected(litem->listItem->isOn());
+ break;
+ case VID :
+ k9DVDTitle *l_title;
+ l_title=litem->title;
+
+ l_title->setforceSelection(litem->listItem->isOn());
+ //if title is not selected => shrink factor is not forced
+ if (!l_title->isSelected())
+ l_title->setforceFactor( false);
+
+ break;
+ default :
+ break;
+ }
+ }
+ bool supdating=updating;
+ updating=true;
+ for (uint i=0;i<chItems.count();i++)
+ {
+ ckLvItem *it=chItems.at(i);
+ k9DVDChapter *c=(k9DVDChapter*)it->obj;
+ it->setOn( c->getSelected());
+ }
+ updating=supdating;
+}
+
+void k9Main::checkLang(QString lang,eStreamType streamType,bool state)
+{
+ updating =true;
+ for (uint i=0;i<items.count();i++)
+ {
+ bool checked=false;
+ k9DVDListItem *litem=(k9DVDListItem*)items.at(i);
+ if (litem->streamType == streamType )
+ {
+ switch (litem->streamType)
+ {
+ case SUB:
+ k9DVDSubtitle *l_sub;
+ l_sub=litem->subtitle;
+ if (l_sub->getlanguage() == lang)
+ {
+ l_sub->setselected(state);
+ litem->listItem->setOn(state);
+ checked=state;
+
+ k9DVDTitle *title=(k9DVDTitle*)litem->listItem->obj;
+ ckLvItem * itemtitleset=(ckLvItem*)litem -> listItem->parent()->parent();
+ itemtitleset->setOn(title->gettitleset()->getselected());
+ }
+ break;
+ case AUD:
+ k9DVDAudioStream *l_auds;
+ l_auds=litem->audioStream;
+ if (l_auds->getlanguage() == lang)
+ {
+ l_auds->setselected(state);
+ litem->listItem->setOn(state);
+ checked=state;
+
+ k9DVDTitle *title=(k9DVDTitle*)litem->listItem->obj;
+ ckLvItem * itemtitleset=(ckLvItem*)litem -> listItem->parent()->parent();
+ itemtitleset->setOn(title->gettitleset()->getselected());
+ }
+ break;
+ default:
+ break;
+ }
+ //we must check the video item
+ if (checked)
+ {
+ for (uint j=0; j<items.count();j++)
+ {
+ k9DVDListItem *litem2=(k9DVDListItem*)items.at(j);
+ if (litem2->listItem->parent()==litem->listItem->parent() && litem2->streamType==VID )
+ {
+ litem2->title->setforceSelection(state);
+ litem2->listItem->setOn(state);
+ }
+ }
+ }
+ }
+ }
+ m_playbackOptions->fillTitleList();
+ updating=false;
+ emit SelectionChanged(dvd,withMenus());
+
+}
+
+void k9Main::checkTitle(bool state, ckLvItem *_item)
+{
+ m_update->wait();
+
+ k9DVDListItem *litem;
+ updating=true;
+
+ k9DVDTitle *title;
+ if (_item->streamType==CHAP)
+ {
+ k9DVDChapter *c=(k9DVDChapter*)_item->obj;
+ c->setSelected( state);
+ //title=c->getTitle();
+ title=_item->mainTitle;
+ for (uint i=0;i<items.count() && state ;i++)
+ {
+ litem=(k9DVDListItem*)items.at(i);
+ if (title==litem->title && litem->streamType==VID)
+ litem->listItem->setOn(state);
+
+ }
+ }
+ else
+ title=(k9DVDTitle*) _item->obj;
+
+
+ for (uint i=0;i<items.count();i++)
+ {
+ litem=(k9DVDListItem*)items.at(i);
+ if (litem->listItem->parent() == _item->parent())
+ {
+ //if current item is video and is unchecked, uncheck audio and subtitles
+ if (!state && _item->streamType==VID)
+ {
+ switch (litem->streamType)
+ {
+ case SUB:
+ k9DVDSubtitle *l_sub;
+ l_sub=litem->subtitle;
+ l_sub->setselected(state);
+ litem->listItem->setOn(state);
+ break;
+ case AUD:
+ k9DVDAudioStream *l_auds;
+ l_auds=litem->audioStream;
+ l_auds->setselected(state);
+ litem->listItem->setOn(state);
+ break;
+ default:
+ break;
+ }
+ }
+ else if ( litem->streamType == VID && state && (_item->streamType==SUB || _item->streamType==AUD))
+ {
+ litem->title->setforceSelection(state);
+ litem->listItem->setOn(state);
+ }
+ }
+ }
+
+
+ updateSelection();
+
+ k9DVDTitleset * titleset=NULL;
+
+ titleset=title->gettitleset();
+
+ m_langSelect->update();
+
+ //check the titleset checkbox
+ if (titleset!=NULL)
+ {
+ ckLvItem * itemtitleset;
+ if (_item->streamType==CHAP)
+ itemtitleset=(ckLvItem*)_item->parent()->parent()->parent();
+ else
+ itemtitleset=(ckLvItem*)_item->parent()->parent();
+ itemtitleset->setOn(titleset->getselected());
+ }
+
+ m_playbackOptions->fillTitleList();
+ updating=false;
+ emit SelectionChanged(dvd,withMenus());
+}
+
+
+
+void k9Main::checkAll(bool state)
+{
+ k9DVDListItem *litem;
+ updating=true;
+ for (uint i=0;i<items.count();i++)
+ {
+ litem=(k9DVDListItem*)items.at(i);
+ switch (litem->streamType)
+ {
+ case SUB:
+ litem->listItem->setOn(state);
+ break;
+ case AUD:
+ litem->listItem->setOn(state);
+ break;
+ case VID:
+ {
+ k9DVDTitle * l_title;
+ l_title=litem->title;
+ // l_title->setforceSelection(state);
+ litem->listItem->setOn(state);
+
+ // k9DVDTitle *title=(k9DVDTitle*)litem->listItem->obj;
+ ckLvItem * itemtitleset=(ckLvItem*)litem -> listItem->parent()->parent();
+ l_title->gettitleset()->setselected(state);
+ itemtitleset->setOn(l_title->gettitleset()->getselected());
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ m_langSelect->selectAll(state);
+
+ updateSelection();
+ m_playbackOptions->fillTitleList();
+ updating=false;
+ emit SelectionChanged(dvd,withMenus());
+
+}
+
+void k9Main::checkTS( bool _state,ckLvItem *_item )
+{
+ k9DVDTitleset *titleset = (k9DVDTitleset*)_item->obj;
+ titleset->setselected(_state);
+ k9DVDListItem *litem;
+ updating=true;
+ for (uint i=0;i<items.count();i++)
+ {
+ litem=(k9DVDListItem*)items.at(i);
+ if (litem->listItem->parent ()->parent() == _item)
+ {
+ litem->listItem->setOn(_state);
+ }
+ }
+
+ m_langSelect->update();
+
+ updateSelection();
+
+ m_playbackOptions->fillTitleList();
+ updating=false;
+ emit SelectionChanged(dvd,withMenus());
+}
+
+void k9Main::expanded( QListViewItem *item) {
+if (item->rtti()==1001)
+ {
+ ckLvItem *ckit = (ckLvItem*) item;
+ if (ckit->objectType==TITLESET)
+ ckit->setPixmap( 0,SmallIcon("folder_open"));
+ }
+}
+
+void k9Main::collapsed( QListViewItem *item) {
+if (item->rtti()==1001)
+ {
+ ckLvItem *ckit = (ckLvItem*) item;
+ if (ckit->objectType==TITLESET)
+ ckit->setPixmap( 0,SmallIcon("folder"));
+ }
+}
+
+
+/** No descriptions */
+void k9Main::itemRenamed(QListViewItem * item,int )
+{
+ k9DVDTitle *t=NULL;
+ QString newText;
+ if (item->rtti()==1000)
+ {
+ LvItem *it = (LvItem*) item;
+ t=(k9DVDTitle*)it->obj;
+ newText=it->text(0);
+ }
+ else if (item->rtti()==1001)
+ {
+ ckLvItem *ckit = (ckLvItem*) item;
+ t=(k9DVDTitle*)ckit->obj;
+ newText=ckit->text(0);
+ }
+
+ QString c;
+ if (t !=NULL)
+ {
+ //QMessageBox::critical( this, "test", c.sprintf("%d",it->tag));
+ t->setname(newText);
+ m_playbackOptions->titleRenamed( t,newText);
+ }
+ else
+ dvd->setDVDTitle(item->text(0));
+}
+
+/** No descriptions */
+void k9Main::readSettings()
+{
+ readDrives();
+ k9Config config;
+ config.read();
+
+ m_prefOutput=config.getPrefOutput();
+ cbInputDev->setCurrentItem(config.getInputDev());
+ cbOutputDev->setCurrentItem(config.getOutputDev());
+ m_prefK3b=config.getPrefK3b();
+
+ m_prefAutoBurn=config.getPrefAutoBurn();
+ m_quickScan=config.getQuickScan();
+ m_prefSize=config.getPrefSize();
+ //fill the burn speed combo
+ //cbOutputDevActivated( cbOutputDev->currentItem());
+ cbOutputDevActivated( config.getOutputDev());
+
+
+ //m_useDvdAuthor=settings.readBoolEntry("/options/useDvdAuthor",true);
+ m_useDvdAuthor=config.getUseDvdAuthor();
+}
+/** No descriptions */
+void k9Main::saveSettings()
+{
+ k9Config config;
+ config.read();
+
+ config.setInputDev(cbInputDev->currentItem());
+ config.setOutputDev(cbOutputDev->currentItem());
+ config.setKeepMenus(withMenus());
+ config.save();
+}
+/** No descriptions */
+void k9Main::bSaveClick()
+{
+ saveSettings();
+}
+
+/** No descriptions */
+void k9Main::PreviewTitle()
+{
+ if( listView1->selectedItem()==NULL)
+ return;
+ if (listView1->selectedItem()->depth() <2)
+ return;
+ int rtti=listView1->selectedItem()->rtti();
+ QObject *obj;
+ if (rtti==1000)
+ {
+ LvItem *it=(LvItem*)listView1->selectedItem();
+ obj=it->obj;
+ }
+ else
+ {
+ ckLvItem *it=(ckLvItem*)listView1->selectedItem();
+ obj=it->obj;
+ }
+
+ if (obj !=NULL)
+ {
+ k9DVDTitle *t;
+ ckLvItem *it=(ckLvItem*)listView1->selectedItem();
+ int chapter=1;
+ if (it->depth()==4) {
+ k9DVDChapter *c=(k9DVDChapter*)obj;
+ t=c->getTitle();
+ chapter=c->getnum();
+ } else
+ t=(k9DVDTitle*)obj;
+ //viewer->show();
+ //viewer->open(dvd,t);
+
+
+ emit showPreview( dvd,t,chapter);
+ }
+}
+
+void k9Main::CreateMP4()
+{
+ if (!dvd->getopened())
+ {
+ KMessageBox::error( this, i18n("DVD is not opened"), i18n("MPEG-4 Encoding"));
+ return;
+ }
+ QString filename="";
+ int cpt=0;
+ for (int i=0; i < dvd->gettitleCount();i++)
+ {
+ k9DVDTitle *t=dvd->gettitle(i);
+ changeStatusbar( i18n("Transcoding title : %1").arg(t->getname()) ,sbMessage);
+
+ if (t->isSelected() && t->getIndexed() )
+ {
+ QString name;
+ if (filename=="")
+ filename=KFileDialog::getSaveFileName (QDir::homeDirPath(),"*.avi|Audio Video Interleave (*.avi)\n*.mpg|MPEG-1 and MPEG-2 systems (*.mpg)\n*.mp4|MPEG-4 format (*.mp4)\n*.asf|Advanced Streaming Format (*.asf)\n*.swf|Adobe Flash (*.swf)\n*.flv|Adobe Flash video files (*.flv)\n*.rm|RealVideo (*.rm)\n*.mov|QuickTime (*.mov)", 0,i18n("Save file to disk"));
+ if (filename=="")
+ break;
+
+ k9MP4Enc *mp4=new k9MP4Enc();
+ setProgressWindow( mp4->getDialog());
+ if (cpt >0) {
+ QString ext=filename.section(".",-1);
+ if (ext!="")
+ ext="."+ext;
+ QString path=filename.left(filename.length()-ext.length());
+ path=path+QString::number(cpt)+ext;
+ mp4->setFilename(path);
+ }
+ else
+ mp4->setFilename(filename);
+
+ cpt++;
+ k9TitleEncOpt * opt=t->getEncOpt();
+ mp4->setDevice(dvd->getDevice());
+ mp4->setAudioBitrate(opt->getAudioBr());
+ mp4->setVideoBitrate(opt->getVideoBr());
+ mp4->setCodec( opt->getCodec());
+ mp4->setAudioCodec(opt->getAudioCodec());
+ mp4->setSize(QString::number(opt->getMaxSize()));
+ mp4->setAudioGain(QString::number(opt->getAudioGain()));
+ mp4->setNumberCD(QString::number(opt->getNumParts()));
+ mp4->setWidth(opt->getWidth() );
+ mp4->setHeight(opt->getHeight());
+ mp4->set2Passes( opt->get2Passes());
+ mp4->setUseCache(opt->getUseCache());
+ mp4->setMpeg2(false);
+ mp4->execute(t);
+ bool bStop=mp4->isCanceled();
+ delete mp4;
+ removeProgressWindow();
+ if (bStop)
+ break;
+ }
+ }
+ changeStatusbar( i18n("Ready") ,sbMessage);
+
+
+}
+
+void k9Main::extractMPEG2() {
+ if (!dvd->getopened()) {
+ KMessageBox::error( this, i18n("DVD is not opened"), i18n("Extract Mpeg2"));
+ return;
+ }
+ QString filename="";
+ int cpt=0;
+
+
+ for (int i=0; i < dvd->gettitleCount();i++) {
+ k9DVDTitle *t=dvd->gettitle(i);
+ changeStatusbar( i18n("Extracting title : %1",t->getname()) ,sbMessage);
+
+ if (t->isSelected() && t->getIndexed() ) {
+ QString name;
+ if (filename=="")
+ filename=KFileDialog::getSaveFileName (QDir::homeDirPath(),"*.mpg|MPEG-1 and MPEG-2 systems (*.mpg)", 0,i18n("Save file to disk"));
+ if (filename=="") {
+ break;
+ }
+
+ k9MP4Enc *mp4=new k9MP4Enc();
+ setProgressWindow( mp4->getDialog());
+ mp4->setMpeg2(true);
+ mp4->setUseCache(false);
+
+ if (cpt >0) {
+ QString ext=filename.section(".",-1);
+ if (ext!="")
+ ext="."+ext;
+ QString path=filename.left(filename.length()-ext.length());
+ path=path+QString::number(cpt)+ext;
+ mp4->setFilename(path);
+ } else
+ mp4->setFilename(filename);
+ cpt++;
+ k9TitleEncOpt * opt=t->getEncOpt();
+ mp4->setDevice(dvd->getDevice());
+ mp4->execute(t);
+ bool bStop=mp4->isCanceled();
+ delete mp4;
+ removeProgressWindow();
+ if (bStop)
+ break;
+ }
+ }
+ changeStatusbar( i18n("Ready") ,sbMessage);
+}
+
+void k9Main::deviceAdded(k9CdDrive *_drive) {
+ addDrive(_drive);
+}
+
+void k9Main::deviceRemoved(k9CdDrive *_drive) {
+ if (_drive->device == dvd->getDevice())
+ closeDVD();
+
+ int i=driveList.find(_drive);
+ driveList.remove(i);
+ cbInputDev->removeItem(i);
+
+ i=recorderList.find(_drive);
+ recorderList.remove( i);
+ cbOutputDev->removeItem(i+2);
+
+}
+
+void k9Main::addDrive(k9CdDrive *drive) {
+ #ifdef HAVE_HAL
+ if (drive->getDevice()!=NULL) {
+ k9HalDevice *dev=drive->getDevice();
+ connect(dev,SIGNAL(volumeChanged( const QString &,const QString &)),this,SLOT(volumeChanged(const QString&,const QString&)));
+ }
+ #endif
+ if (drive->canReadDVD)
+ {
+ QString c(drive->name + " ("+drive->device+")");
+ cbInputDev->insertItem(c,-1);
+ driveList.append(drive);
+ }
+ if (drive->canWriteDVD)
+ {
+ cbOutputDev->insertItem(drive->name+ " ("+drive->device+")",-1);
+ recorderList.append(drive);
+ }
+
+}
+
+/*!
+ \fn k9Main::readDrives()
+ */
+void k9Main::readDrives()
+{
+ cbInputDev->clear();
+ cbOutputDev->clear();
+ driveList.clear();
+ recorderList.clear();
+ cbOutputDev->insertItem(i18n("ISO Image"));
+ cbOutputDev->insertItem(i18n("Folder"));
+
+ drives->scanDrives();
+
+}
+
+
+void k9Main::volumeChanged(const QString &device,const QString &volumeName) {
+ if (device==dvd->getDevice() && dvd->getopened() && volumeName=="")
+ closeDVD();
+ else if (!dvd->getopened() && volumeName !="" && getDevice(cbInputDev)==device) {
+ Open();
+ }
+}
+
+/*!
+ \fn k9Main::listView1CurrentChanged( QListViewItem *newItem )
+ */
+void k9Main::listView1CurrentChanged( QListViewItem *newItem )
+{
+ if (newItem == NULL)
+ {
+ m_playbackOptions->enable(false);
+ }
+ else
+ {
+ if (!withMenus())
+ {
+ m_playbackOptions->enable(true);
+ }
+ }
+
+ k9DVDTitle *title=NULL;
+
+ if (newItem->rtti()==1000)
+ {
+ LvItem *it = (LvItem*) newItem;
+ title=(k9DVDTitle*)it->obj;
+ }
+ else if (newItem->rtti()==1001 && newItem->depth()>2)
+ {
+ ckLvItem *ckit = (ckLvItem*) newItem;
+ if (((ckLvItem*)newItem)->streamType==CHAP)
+ {
+ LvItem *parent=(LvItem*)(ckit->parent()->parent());
+ title=(k9DVDTitle*)parent->obj;
+ }
+ else
+ title=(k9DVDTitle*)ckit->obj;
+ }
+ if (title !=NULL)
+ {
+ emit changedTitle(title);
+ }
+
+}
+
+
+void k9Main::closeDVD()
+{
+ //viewer->bStopClick();
+ emit stopPreview();
+ emit changedTitle(NULL);
+ emit SelectionChanged(NULL,withMenus());
+ changeStatusbar( "",sbFactor);
+ changeStatusbar( "",sbMessage);
+ listView1->clear();
+ items.clear();
+ m_langSelect->clear();
+ dvd->close();
+
+}
+
+
+int k9Main::compare(double v1,double v2)
+{
+ if (v1 <v2)
+ return -1;
+ if (v1>v2)
+ return 1;
+ return 0;
+}
+
+
+void k9Main::cbOutputDevActivated(int _index)
+{
+
+ if (_index==0)
+ return;
+
+ k9CdDrive * drive=(k9CdDrive*)recorderList.at(_index-1);
+ if (drive !=NULL) {
+ QValueList <int>list=drive->getWriteSpeeds();
+ QValueList<int>::iterator it=list.begin();
+
+ cbBurnSpeed->clear();
+ cbBurnSpeed->insertItem(i18n("default"));
+ while( it !=list.end())
+ {
+ cbBurnSpeed->insertItem(QString::number((double)(*it)));
+ it++;
+ }
+ }
+}
+
+void k9Main::bInputOpenClick()
+{
+ QString result=KFileDialog::getOpenFileName (QDir::homeDirPath(),"*.iso", 0,i18n("Open ISO Image"));
+ if (result!="")
+ {
+ cbInputDev->setCurrentText(result);
+ Open();
+ }
+}
+
+
+void k9Main::bInputOpenDirClick()
+{
+ QString result= KDirSelectDialog::selectDirectory (QDir::homeDirPath(), false, this,i18n("Open DVD folder")).path();
+ if (result!="")
+ {
+ cbInputDev->setCurrentText(result);
+ Open();
+ }
+}
+
+void k9Main::fspDone()
+{
+ fspFinish=true;
+}
+
+void k9Main::foundMountPoint( const QString &, unsigned long , unsigned long , unsigned long kBAvail)
+{
+ fspAvail=kBAvail;
+}
+
+long k9Main::getFreeSpace(const QString & _path)
+{
+ fspFinish=false;
+ fspAvail=0;
+ KDiskFreeSp *FreeSp=new KDiskFreeSp();
+ ;
+
+ connect(FreeSp,SIGNAL(foundMountPoint (const QString &, unsigned long , unsigned long , unsigned long )),this,SLOT(foundMountPoint (const QString &, unsigned long , unsigned long , unsigned long )));
+ connect(FreeSp,SIGNAL(done ( )),this,SLOT(fspDone ()));
+ QString mountPoint = KIO::findPathMountPoint( _path );
+ FreeSp->readDF(mountPoint);
+ do
+ {
+ qApp->processEvents();
+ }
+ while (!fspFinish);
+ fspAvail/=1024;
+ return fspAvail;
+
+}
+
+
+void k9Main::setInput(QString _input)
+{
+ bool found=false;
+ for (uint i=0;i< driveList.count();i++) {
+ k9CdDrive *drive=(k9CdDrive*)driveList.at(i);
+ if (drive->device == _input) {
+ cbInputDev->setCurrentItem(i);
+ found=true;
+ }
+ }
+ if (!found)
+ cbInputDev->setCurrentText(_input);
+}
+
+void k9Main::setOutput(QString _output)
+{
+ cbOutputDev->setCurrentItem(0);
+ for (uint i=0 ;i <recorderList.count();i++)
+ {
+ k9CdDrive * drive=(k9CdDrive*)recorderList.at(i);
+ QString c(drive->device);
+ // qDebug ("output=" +c);
+ if (c==_output)
+ {
+ cbOutputDev->setCurrentItem(i+2);
+ break;
+ }
+ }
+}
+
+void k9Main::Clone(QString _input,QString _output)
+{
+ setInput(_input);
+ setOutput(_output);
+ m_playbackOptions->setwithMenus( true);
+ m_quickScan=true;
+ Open();
+ checkAll( true);
+ Copy();
+}
+
+void k9Main::updateFactor(){
+
+ // m_update->updateFactor();
+ updateFactor_internal();
+}
+
+void k9Main::updateFactor_internal()
+{
+ if (dvd->getopened() && m_mutex.tryLock())
+ {
+ updateSelection();
+ setDVDSize();
+ double dbfactor=dvd->getfactor(withMenus(),true,m_useDvdAuthor);
+
+ factor->setValue((int) ( dbfactor*100)-100 );
+
+ if (dvd->getsizeSelected(FALSE)==0)
+ changeStatusbar("",sbFactor);
+ else
+ changeStatusbar( QString::number(dbfactor,'f',2),sbFactor);
+ emit SelectionChanged( dvd,withMenus());
+ m_mutex.unlock();
+ }
+}
+
+bool k9Main::withMenus()
+{
+ return m_playbackOptions->withMenus();
+}
+
+#include "k9main.moc"
+
+
+void k9Main::setDrives(k9CdDrives* _value) {
+ drives = _value;
+}
diff --git a/src/k9main.h b/src/k9main.h
new file mode 100644
index 0000000..6e9c348
--- /dev/null
+++ b/src/k9main.h
@@ -0,0 +1,240 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2005
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9MAIN_H
+#define K9MAIN_H
+#include "k9common.h"
+#include "k9cddrive.h"
+#include "images.h"
+#include "k9mainw.h"
+#include "kconfigdlg.h"
+#include "k9playbackoptions.h"
+#include <qstring.h>
+#include <kmessagebox.h>
+#include <qlistview.h>
+#include <kmainwindow.h>
+#include <kaboutdata.h>
+#include <qevent.h>
+#include <kfiledialog.h>
+#include <qlistbox.h>
+#include "k9copy.h"
+#include <qmutex.h>
+
+enum eStreamType {SUB,AUD,VID,NONE,CHAP} ;
+enum eObjectType {TITLE,CHAPTER,TITLESET,STREAM,ROOT};
+
+class LvItem : public QListViewItem {
+public:
+ LvItem( QListViewItem *parent,eObjectType _objectType)
+ : QListViewItem( parent), obj( NULL ) {
+ objectType=_objectType;
+ }
+ LvItem( QListView *parent,eObjectType _objectType)
+ : QListViewItem( parent), obj( NULL ) {
+ objectType=_objectType;
+ }
+ eObjectType objectType;
+ QObject *obj;
+ virtual int rtti () const;
+ int compare ( QListViewItem * i, int col, bool ascending ) const;
+ void paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align );
+};
+
+class k9Main;
+class k9DVD;
+class k9DVDAudioStream;
+class k9DVDSubtitle;
+class k9DVDTitle;
+class KLibFactory;
+class k9PlaybackOptions;
+class k9LangSelect;
+class k9UpdateFactor;
+
+class ckLvItem : public QCheckListItem {
+public:
+ ckLvItem( QListViewItem *parent,k9Main *dlg,eObjectType _objectType)
+ : QCheckListItem( parent,"",QCheckListItem::CheckBox) {
+ mainDlg=dlg;
+ obj=NULL;
+ stream=NULL;
+ streamType=NONE;
+ language="";
+ objectType=_objectType;
+ }
+ ckLvItem( QListView *parent,k9Main *dlg,eObjectType _objectType)
+ : QCheckListItem( parent,"",QCheckListItem::CheckBox) {
+ mainDlg=dlg;
+ obj=NULL;
+ stream=NULL;
+ streamType=NONE;
+ language="";
+ objectType=_objectType;
+ }
+ eStreamType streamType;
+ eObjectType objectType;
+
+ k9Main *mainDlg;
+ k9DVDTitle *mainTitle;
+ QObject *obj;
+ QObject *stream;
+ QString language;
+ virtual int rtti () const;
+ void paintCell ( QPainter * p, const QColorGroup & cg, int column, int width, int align );
+ int compare ( QListViewItem * i, int col, bool ascending ) const;
+ double getstreamSize();
+
+protected:
+ void stateChange(bool state);
+
+};
+
+
+class k9DVDListItem : public QObject {
+ Q_OBJECT
+public:
+ k9DVDAudioStream *audioStream;
+ k9DVDSubtitle *subtitle;
+ k9DVDTitle *title;
+ ckLvItem *listItem;
+ eStreamType streamType;
+public:
+ k9DVDListItem(QObject *DVD,ckLvItem *List,eStreamType type);
+};
+
+
+class k9Main : public MainDlg {
+ Q_OBJECT
+
+public:
+
+ k9Main(QWidget* parent = 0, const char* name = 0, k9CdDrives *_drives=0 );
+ ~k9Main();
+ /*$PUBLIC_FUNCTIONS$*/
+ void addTitle(k9DVDTitle *track);
+ void addChapters(QListViewItem *_parent,k9DVDTitle *_title);
+ void updateSelection();
+ void checkAll(bool state);
+ void checkTS( bool _state,ckLvItem *_item );
+ void checkTitle(bool state, ckLvItem *_item);
+ void checkLang(QString lang, eStreamType streamType,bool state);
+ bool getupdating();
+ void saveSettings();
+ void setDVDSize();
+ static int compare(double v1,double v2);
+ void readSettings();
+ bool getquickScan() {
+ return m_quickScan;
+ };
+ void setPlaybackOptions(k9PlaybackOptions *_value) {
+ m_playbackOptions=_value;
+ };
+ void setLangSelect(k9LangSelect *_value) {
+ m_langSelect=_value;
+ };
+ QObjectList *getItems() {
+ return &items;
+ };
+ void updateFactor();
+ bool withMenus();
+ k9DVD *dvd;
+ void eject();
+private slots:
+ virtual void listView1CurrentChanged( QListViewItem * );
+ virtual void bSaveClick();
+ virtual void cbOutputDevActivated(int);
+ virtual void bInputOpenClick();
+ virtual void bInputOpenDirClick();
+ virtual void foundMountPoint (const QString &mountPoint, unsigned long kBSize, unsigned long kBUsed, unsigned long kBAvail);
+ virtual void fspDone();
+ virtual void updateFactor_internal();
+ virtual void deviceAdded(k9CdDrive *_drive);
+ virtual void deviceRemoved(k9CdDrive *_drive);
+ virtual void expanded(QListViewItem*);
+ virtual void collapsed (QListViewItem*);
+public slots:
+ /*$PUBLIC_SLOTS$*/
+ virtual void PreviewTitle();
+ virtual void CreateMP4();
+ virtual void extractMPEG2();
+ virtual void Copy();
+ virtual void Open();
+ virtual void Clone(QString _input,QString _output);
+ virtual void setInput(QString _input);
+ virtual void setOutput(QString _output);
+ virtual void volumeChanged(const QString &device,const QString &volumeName);
+
+ void setDrives(k9CdDrives* _value);
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+ QObjectList items;
+ k9DVDListItem *addListItem(QObject *DVD,ckLvItem *List,eStreamType type);
+
+ void readDrives();
+ void addDrive (k9CdDrive *_drive);
+ k9Copy *m_parent;
+ QPtrList<ckLvItem> tsItems;
+ QPtrList<ckLvItem> chItems;
+ ckLvItem * root;
+ QPtrList <k9CdDrive> driveList;
+ QPtrList <k9CdDrive> recorderList;
+ k9CdDrives *drives;
+ QPixmap pxVideo;
+ QPixmap pxSound;
+ QPixmap pxText;
+ QPixmap pxChapter;
+ QMutex m_mutex;
+ bool updating;
+ bool fspFinish;
+ long fspAvail;
+ void closeEvent( QCloseEvent* ce );
+ void closeDVD();
+ KLibFactory *m_factory;
+ QString getDevice(QComboBox *_combo);
+ k9UpdateFactor *m_update;
+ //PREFERENCES
+ QString m_prefOutput;
+ bool m_useDvdAuthor;
+ bool m_quickScan;
+ int m_prefSize;
+ bool m_prefK3b;
+ bool m_prefMenu;
+ bool m_prefAutoBurn;
+ k9PlaybackOptions *m_playbackOptions;
+ k9LangSelect *m_langSelect;
+
+ KMdiToolViewAccessor *m_toolView;
+ KDockWidget *m_dockWidget;
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ void itemRenamed ( QListViewItem *item, int col );
+signals: // Signals
+ /** No descriptions */
+ void sig_progress(QString str);
+ void changeStatusbar(const QString& str,int id);
+ void changeCaption(const QString& str);
+ void showPreview(k9DVD *_dvd,k9DVDTitle * title,int chapter);
+ void stopPreview();
+ void SelectionChanged(k9DVD *_dvd,bool _withMenus);
+ void changedTitle(k9DVDTitle *_title);
+private:
+ void fillLvLanguages();
+ void updateLvLang(const eStreamType streamType,const QString & lang) ;
+ long getFreeSpace(const QString & _path);
+ void setProgressWindow(QWidget *_widget);
+ void removeProgressWindow();
+
+
+};
+
+#endif
+
diff --git a/src/k9mainw.cpp b/src/k9mainw.cpp
new file mode 100644
index 0000000..27eb9ac
--- /dev/null
+++ b/src/k9mainw.cpp
@@ -0,0 +1,216 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './k9mainw.ui'
+**
+** Created: dim. oct. 26 08:57:34 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "k9mainw.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <kselect.h>
+#include <qheader.h>
+#include <qlistview.h>
+#include <kcombobox.h>
+#include <qcombobox.h>
+#include <kpushbutton.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include "kselect.h"
+#include "kcombobox.h"
+#include "klineedit.h"
+#include "kpushbutton.h"
+
+/*
+ * Constructs a MainDlg as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+MainDlg::MainDlg( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ if ( !name )
+ setName( "MainDlg" );
+ setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)7, 0, 0, sizePolicy().hasHeightForWidth() ) );
+ setMinimumSize( QSize( 0, 200 ) );
+ MainDlgLayout = new QGridLayout( this, 1, 1, 2, 6, "MainDlgLayout");
+
+ lblInput_2 = new QLabel( this, "lblInput_2" );
+ lblInput_2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)5, 0, 0, lblInput_2->sizePolicy().hasHeightForWidth() ) );
+
+ MainDlgLayout->addWidget( lblInput_2, 1, 0 );
+
+ lblInput = new QLabel( this, "lblInput" );
+ lblInput->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)5, 0, 0, lblInput->sizePolicy().hasHeightForWidth() ) );
+
+ MainDlgLayout->addWidget( lblInput, 0, 0 );
+
+ tab = new QWidget( this, "tab" );
+ tabLayout = new QGridLayout( tab, 1, 1, 1, 0, "tabLayout");
+
+ factor = new KGradientSelector( tab, "factor" );
+ factor->setEnabled( FALSE );
+ factor->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)4, 0, 0, factor->sizePolicy().hasHeightForWidth() ) );
+ factor->setMinimumSize( QSize( 0, 15 ) );
+ factor->setValue( 0 );
+ factor->setMinValue( 0 );
+ factor->setMaxValue( 100 );
+ factor->setFirstColor( QColor( 170, 0, 0 ) );
+ factor->setSecondColor( QColor( 0, 255, 0 ) );
+
+ tabLayout->addWidget( factor, 1, 0 );
+
+ listView1 = new QListView( tab, "listView1" );
+ listView1->addColumn( tr2i18n( "Title" ) );
+ listView1->addColumn( tr2i18n( "Size" ) );
+ listView1->header()->setResizeEnabled( FALSE, listView1->header()->count() - 1 );
+ listView1->addColumn( tr2i18n( "Content" ) );
+ listView1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, listView1->sizePolicy().hasHeightForWidth() ) );
+ listView1->setMinimumSize( QSize( 0, 200 ) );
+ listView1->setShowSortIndicator( TRUE );
+
+ tabLayout->addWidget( listView1, 0, 0 );
+
+ MainDlgLayout->addMultiCellWidget( tab, 2, 2, 0, 4 );
+
+ textLabel2_2 = new QLabel( this, "textLabel2_2" );
+ textLabel2_2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)5, 0, 0, textLabel2_2->sizePolicy().hasHeightForWidth() ) );
+
+ MainDlgLayout->addWidget( textLabel2_2, 1, 4 );
+
+ cbBurnSpeed = new KComboBox( FALSE, this, "cbBurnSpeed" );
+ cbBurnSpeed->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, cbBurnSpeed->sizePolicy().hasHeightForWidth() ) );
+ cbBurnSpeed->setEditable( TRUE );
+
+ MainDlgLayout->addWidget( cbBurnSpeed, 1, 3 );
+
+ textLabel1_3 = new QLabel( this, "textLabel1_3" );
+ textLabel1_3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)5, 0, 0, textLabel1_3->sizePolicy().hasHeightForWidth() ) );
+
+ MainDlgLayout->addWidget( textLabel1_3, 1, 2 );
+
+ cbInputDev = new QComboBox( FALSE, this, "cbInputDev" );
+ cbInputDev->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, cbInputDev->sizePolicy().hasHeightForWidth() ) );
+ cbInputDev->setEditable( TRUE );
+ cbInputDev->setAutoCompletion( TRUE );
+
+ MainDlgLayout->addWidget( cbInputDev, 0, 1 );
+
+ layout2 = new QHBoxLayout( 0, 0, 6, "layout2");
+
+ bInputOpenDir = new KPushButton( this, "bInputOpenDir" );
+ bInputOpenDir->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1, 0, 0, bInputOpenDir->sizePolicy().hasHeightForWidth() ) );
+ bInputOpenDir->setMinimumSize( QSize( 22, 22 ) );
+ bInputOpenDir->setMaximumSize( QSize( 22, 22 ) );
+ layout2->addWidget( bInputOpenDir );
+
+ bInputOpen = new KPushButton( this, "bInputOpen" );
+ bInputOpen->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1, 0, 0, bInputOpen->sizePolicy().hasHeightForWidth() ) );
+ bInputOpen->setMinimumSize( QSize( 22, 22 ) );
+ bInputOpen->setMaximumSize( QSize( 22, 22 ) );
+ layout2->addWidget( bInputOpen );
+ spacer5_2 = new QSpacerItem( 50, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ layout2->addItem( spacer5_2 );
+
+ MainDlgLayout->addMultiCellLayout( layout2, 0, 0, 2, 4 );
+
+ cbOutputDev = new QComboBox( FALSE, this, "cbOutputDev" );
+ cbOutputDev->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, cbOutputDev->sizePolicy().hasHeightForWidth() ) );
+ cbOutputDev->setEditable( FALSE );
+ cbOutputDev->setAutoCompletion( TRUE );
+
+ MainDlgLayout->addWidget( cbOutputDev, 1, 1 );
+ languageChange();
+ resize( QSize(743, 585).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( listView1, SIGNAL( currentChanged(QListViewItem*) ), this, SLOT( listView1CurrentChanged(QListViewItem*) ) );
+ connect( cbOutputDev, SIGNAL( activated(int) ), this, SLOT( cbOutputDevActivated(int) ) );
+ connect( bInputOpen, SIGNAL( clicked() ), this, SLOT( bInputOpenClick() ) );
+ connect( bInputOpenDir, SIGNAL( clicked() ), this, SLOT( bInputOpenDirClick() ) );
+ connect( listView1, SIGNAL( itemRenamed(QListViewItem*,int) ), this, SLOT( itemRenamed(QListViewItem*,int) ) );
+
+ // tab order
+ setTabOrder( cbInputDev, cbOutputDev );
+ setTabOrder( cbOutputDev, bInputOpenDir );
+ setTabOrder( bInputOpenDir, bInputOpen );
+ setTabOrder( bInputOpen, cbBurnSpeed );
+ setTabOrder( cbBurnSpeed, listView1 );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+MainDlg::~MainDlg()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void MainDlg::languageChange()
+{
+ setCaption( tr2i18n( "MainDlg" ) );
+ lblInput_2->setText( tr2i18n( "Output device " ) );
+ lblInput->setText( tr2i18n( "input device" ) );
+ listView1->header()->setLabel( 0, tr2i18n( "Title" ) );
+ listView1->header()->setLabel( 1, tr2i18n( "Size" ) );
+ listView1->header()->setLabel( 2, tr2i18n( "Content" ) );
+ textLabel2_2->setText( tr2i18n( "X" ) );
+ cbBurnSpeed->clear();
+ cbBurnSpeed->insertItem( tr2i18n( "default" ) );
+ textLabel1_3->setText( tr2i18n( "@" ) );
+ bInputOpenDir->setText( QString::null );
+ QToolTip::add( bInputOpenDir, tr2i18n( "Open a folder" ) );
+ bInputOpen->setText( QString::null );
+ QToolTip::add( bInputOpen, tr2i18n( "Open an iso image" ) );
+}
+
+void MainDlg::bSaveClick()
+{
+ qWarning( "MainDlg::bSaveClick(): Not implemented yet" );
+}
+
+void MainDlg::bDevicesClick()
+{
+ qWarning( "MainDlg::bDevicesClick(): Not implemented yet" );
+}
+
+void MainDlg::listView1CurrentChanged(QListViewItem*)
+{
+ qWarning( "MainDlg::listView1CurrentChanged(QListViewItem*): Not implemented yet" );
+}
+
+void MainDlg::cbOutputDevActivated(int)
+{
+ qWarning( "MainDlg::cbOutputDevActivated(int): Not implemented yet" );
+}
+
+void MainDlg::bInputOpenClick()
+{
+ qWarning( "MainDlg::bInputOpenClick(): Not implemented yet" );
+}
+
+void MainDlg::bInputOpenDirClick()
+{
+ qWarning( "MainDlg::bInputOpenDirClick(): Not implemented yet" );
+}
+
+void MainDlg::ckMp4AspectRatioClick()
+{
+ qWarning( "MainDlg::ckMp4AspectRatioClick(): Not implemented yet" );
+}
+
+void MainDlg::itemRenamed(QListViewItem*,int)
+{
+ qWarning( "MainDlg::itemRenamed(QListViewItem*,int): Not implemented yet" );
+}
+
+#include "k9mainw.moc"
diff --git a/src/k9mainw.ui b/src/k9mainw.ui
new file mode 100644
index 0000000..5598e0b
--- /dev/null
+++ b/src/k9mainw.ui
@@ -0,0 +1,427 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>MainDlg</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>MainDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>743</width>
+ <height>585</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>200</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>MainDlg</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>lblInput_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Output device </string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lblInput</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>input device</string>
+ </property>
+ </widget>
+ <widget class="QWidget" row="2" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="KGradientSelector" row="1" column="0">
+ <property name="name">
+ <cstring>factor</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>15</height>
+ </size>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="firstColor">
+ <color>
+ <red>170</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ <property name="secondColor">
+ <color>
+ <red>0</red>
+ <green>255</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ </widget>
+ <widget class="QListView" row="0" column="0">
+ <column>
+ <property name="text">
+ <string>Title</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Content</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>listView1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>200</height>
+ </size>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLabel" row="1" column="4">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>X</string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="1" column="3">
+ <item>
+ <property name="text">
+ <string>default</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cbBurnSpeed</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>@</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>cbInputDev</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ <property name="autoCompletion">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="2" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bInputOpenDir</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Open a folder</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bInputOpen</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Open an iso image</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>50</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>cbOutputDev</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="editable">
+ <bool>false</bool>
+ </property>
+ <property name="autoCompletion">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>listView1</sender>
+ <signal>currentChanged(QListViewItem*)</signal>
+ <receiver>MainDlg</receiver>
+ <slot>listView1CurrentChanged(QListViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>cbOutputDev</sender>
+ <signal>activated(int)</signal>
+ <receiver>MainDlg</receiver>
+ <slot>cbOutputDevActivated(int)</slot>
+ </connection>
+ <connection>
+ <sender>bInputOpen</sender>
+ <signal>clicked()</signal>
+ <receiver>MainDlg</receiver>
+ <slot>bInputOpenClick()</slot>
+ </connection>
+ <connection>
+ <sender>bInputOpenDir</sender>
+ <signal>clicked()</signal>
+ <receiver>MainDlg</receiver>
+ <slot>bInputOpenDirClick()</slot>
+ </connection>
+ <connection>
+ <sender>listView1</sender>
+ <signal>itemRenamed(QListViewItem*,int)</signal>
+ <receiver>MainDlg</receiver>
+ <slot>itemRenamed(QListViewItem*,int)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>cbInputDev</tabstop>
+ <tabstop>cbOutputDev</tabstop>
+ <tabstop>bInputOpenDir</tabstop>
+ <tabstop>bInputOpen</tabstop>
+ <tabstop>cbBurnSpeed</tabstop>
+ <tabstop>listView1</tabstop>
+</tabstops>
+<slots>
+ <slot>bSaveClick()</slot>
+ <slot>bDevicesClick()</slot>
+ <slot>listView1CurrentChanged( QListViewItem * )</slot>
+ <slot>cbOutputDevActivated(int)</slot>
+ <slot>bInputOpenClick()</slot>
+ <slot>bInputOpenDirClick()</slot>
+ <slot>ckMp4AspectRatioClick()</slot>
+ <slot>itemRenamed(QListViewItem*,int)</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kselect.h</includehint>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/src/k9mainwsov.ui b/src/k9mainwsov.ui
new file mode 100644
index 0000000..e798ad8
--- /dev/null
+++ b/src/k9mainwsov.ui
@@ -0,0 +1,424 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>MainDlg</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>MainDlg</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>747</width>
+ <height>585</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MainDlg</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>lblInput_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Output device </string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>@</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lblInput</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Input device </string>
+ </property>
+ </widget>
+ <widget class="KComboBox" row="1" column="3">
+ <item>
+ <property name="text">
+ <string>default</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cbBurnSpeed</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <property name="name">
+ <cstring>cbInputDev</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="editable">
+ <bool>true</bool>
+ </property>
+ <property name="autoCompletion">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <property name="name">
+ <cstring>cbOutputDev</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="editable">
+ <bool>false</bool>
+ </property>
+ <property name="autoCompletion">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="4">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>X</string>
+ </property>
+ </widget>
+ <widget class="QTabWidget" row="2" column="0" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>tabWidget2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>D&amp;VD</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>1</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="KGradientSelector" row="1" column="0">
+ <property name="name">
+ <cstring>factor</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>4</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>15</height>
+ </size>
+ </property>
+ <property name="value">
+ <number>0</number>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="maxValue">
+ <number>100</number>
+ </property>
+ <property name="firstColor">
+ <color>
+ <red>170</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ <property name="secondColor">
+ <color>
+ <red>0</red>
+ <green>255</green>
+ <blue>0</blue>
+ </color>
+ </property>
+ </widget>
+ <widget class="QSplitter" row="0" column="0">
+ <property name="name">
+ <cstring>splitter1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Title</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Size</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>listView1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>NoColumn</enum>
+ </property>
+ </widget>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget" row="0" column="2" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bInputOpenDir</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>bInputOpen</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>50</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>listView1</sender>
+ <signal>currentChanged(QListViewItem*)</signal>
+ <receiver>MainDlg</receiver>
+ <slot>listView1CurrentChanged(QListViewItem*)</slot>
+ </connection>
+ <connection>
+ <sender>cbOutputDev</sender>
+ <signal>activated(int)</signal>
+ <receiver>MainDlg</receiver>
+ <slot>cbOutputDevActivated(int)</slot>
+ </connection>
+ <connection>
+ <sender>bInputOpen</sender>
+ <signal>clicked()</signal>
+ <receiver>MainDlg</receiver>
+ <slot>bInputOpenClick()</slot>
+ </connection>
+ <connection>
+ <sender>bInputOpenDir</sender>
+ <signal>clicked()</signal>
+ <receiver>MainDlg</receiver>
+ <slot>bInputOpenDirClick()</slot>
+ </connection>
+ <connection>
+ <sender>listView1</sender>
+ <signal>itemRenamed(QListViewItem*,int)</signal>
+ <receiver>MainDlg</receiver>
+ <slot>itemRenamed(QListViewItem*,int)</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>cbInputDev</tabstop>
+ <tabstop>cbOutputDev</tabstop>
+ <tabstop>bInputOpenDir</tabstop>
+ <tabstop>bInputOpen</tabstop>
+ <tabstop>cbBurnSpeed</tabstop>
+ <tabstop>tabWidget2</tabstop>
+ <tabstop>listView1</tabstop>
+</tabstops>
+<slots>
+ <slot>bSaveClick()</slot>
+ <slot>bDevicesClick()</slot>
+ <slot>listView1CurrentChanged( QListViewItem * )</slot>
+ <slot>cbOutputDevActivated(int)</slot>
+ <slot>bInputOpenClick()</slot>
+ <slot>bInputOpenDirClick()</slot>
+ <slot>ckMp4AspectRatioClick()</slot>
+ <slot>itemRenamed(QListViewItem*,int)</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kcombobox.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kselect.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/src/k9mencodercmdgen.cpp b/src/k9mencodercmdgen.cpp
new file mode 100644
index 0000000..2681b82
--- /dev/null
+++ b/src/k9mencodercmdgen.cpp
@@ -0,0 +1,670 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+
+#include "k9mencodercmdgen.h"
+#include <qscrollview.h>
+#include <qtabwidget.h>
+#include <qfile.h>
+#include <qdom.h>
+#include <qlabel.h>
+#include <knuminput.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qframe.h>
+#include <qwidgetstack.h>
+#include <klocale.h>
+#include <qheader.h>
+#include <qlayout.h>
+#include <qvbox.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <kstandarddirs.h>
+#include <kapplication.h>
+class _k9CheckListItem: public QCheckListItem {
+public:
+ _k9CheckListItem(QListViewItem *_item):QCheckListItem(_item,"",QCheckListItem::CheckBox) {};
+ QString root;
+ QDomDocument doc;
+ int page;
+ QFrame *frame;
+ int rtti () const {return 1001;}
+protected:
+ void stateChange(bool _state);
+};
+
+void _k9CheckListItem::stateChange(bool _state) {
+ QDomElement eRoot=doc.documentElement().elementsByTagName(root).item(0).toElement();
+ QDomElement eCodec=eRoot.elementsByTagName(text()).item(0).toElement();
+ eCodec.setAttribute("selected",_state?"true":"false");
+}
+
+
+k9MencoderCmdGen::k9MencoderCmdGen(QWidget* parent, const QString &_cmd, bool modal, WFlags fl)
+: MyDialog1(parent,"", modal,fl)
+{
+ setCaption(kapp->makeStdCaption(i18n("MEncoder options")));
+ m_row=0; m_page=1;
+ loadXml();
+ parseCmd(_cmd);
+
+ fillListView();
+}
+
+void k9MencoderCmdGen::fillListView() {
+ listView->clear();
+ listView->header()->hide();
+ QListViewItem *item=new QListViewItem(listView);
+ item->setOpen(true);
+ item->setText(0,i18n("Audio Codec"));
+ QDomElement root=m_doc.documentElement().elementsByTagName("AUDIO").item(0).toElement();
+ for (int i=0; i< root.childNodes().count();i++) {
+ QDomElement eChild=root.childNodes().item(i).toElement();
+ _k9CheckListItem *child=new _k9CheckListItem(item);
+ child->setText(0,eChild.nodeName());
+ child->root="AUDIO";
+ child->doc=m_doc;
+ QDomAttr attr=eChild.attributeNode("selected");
+ if (!attr.isNull())
+ child->setOn(attr.value()=="true");
+
+ addWidgets(child, "AUDIO",eChild.nodeName());
+
+ }
+ item=new QListViewItem(listView);
+ item->setText(0,i18n("Video Codec"));
+ item->setOpen(true);
+ root=m_doc.documentElement().elementsByTagName("VIDEO").item(0).toElement();
+ for (int i=0; i< root.childNodes().count();i++) {
+ QDomElement eChild=root.childNodes().item(i).toElement();
+ _k9CheckListItem *child=new _k9CheckListItem(item);
+ child->setText(0,eChild.nodeName());
+ child->root="VIDEO";
+ child->doc=m_doc;
+ QDomAttr attr=eChild.attributeNode("selected");
+ if (!attr.isNull())
+ child->setOn(attr.value()=="true");
+
+ addWidgets(child, "VIDEO",eChild.nodeName());
+
+
+ }
+
+ item=new QListViewItem(listView);
+ item->setText(0,i18n("Filters"));
+ item->setOpen(true);
+ root=m_doc.documentElement().elementsByTagName("FILTERS").item(0).toElement();
+ for (int i=0; i< root.childNodes().count();i++) {
+ QDomElement eChild=root.childNodes().item(i).toElement();
+ _k9CheckListItem *child=new _k9CheckListItem(item);
+ child->setText(0,eChild.nodeName());
+ child->root="FILTERS";
+ child->doc=m_doc;
+ QDomAttr attr=eChild.attributeNode("selected");
+ if (!attr.isNull())
+ child->setOn(attr.value()=="true");
+
+ addWidgets(child, "FILTERS",eChild.nodeName());
+ }
+
+}
+
+k9MencoderCmdGen::~k9MencoderCmdGen()
+{
+}
+
+/*$SPECIALIZATION$*/
+
+void k9MencoderCmdGen::listViewCurrentChanged(QListViewItem *_item) {
+ if (_item->parent() == NULL)
+ wsOptions->raiseWidget(0);
+ else if (_item->rtti()==1001) {
+ _k9CheckListItem *item=(_k9CheckListItem*) _item;
+ wsOptions->raiseWidget(item->page);
+
+
+ }
+}
+
+void k9MencoderCmdGen::loadXml() {
+ QFile file(KGlobal::dirs()->findResource( "data", "k9copy/mencoder.xml"));
+ if ( !file.open( IO_ReadOnly ) )
+ return;
+ if ( !m_doc.setContent( &file ) ) {
+ file.close();
+ return;
+ }
+ file.close();
+
+
+ }
+
+void k9MencoderCmdGen::addWidgets(_k9CheckListItem *_listItem,QString _root,QString _cat) {
+ m_cpt=0;
+ QVBox *vbox=new QVBox(wsOptions);
+ wsOptions->addWidget(vbox,m_page);
+ _listItem->page=m_page;
+ m_page++;
+
+ QFrame *fr=new QFrame(vbox);
+ _listItem->frame=fr;
+
+
+ QGridLayout *m_grid1=new QGridLayout(fr,1,1,0,0);
+ m_scrollView=new QScrollView(fr,0);
+ m_scrollView->viewport()->setPaletteBackgroundColor(this->paletteBackgroundColor());
+ m_scrollView->setVScrollBarMode(QScrollView::AlwaysOn);
+ m_grid1->addWidget(m_scrollView,0,0);
+
+ m_grid=new QGrid(2,m_scrollView->viewport());
+ m_grid->setSpacing(2);
+ m_scrollView->addChild(m_grid);
+
+
+ //finds the VIDEO node
+ QDomElement eVideo=m_doc.documentElement().elementsByTagName(_root).item(0).toElement();
+ //gets the codec list
+ QDomNodeList lCodecs=eVideo.elementsByTagName(_cat);
+ for (int i=0; i<lCodecs.count();i++) {
+ QDomElement eCodec=lCodecs.item(i).toElement();
+ //gets codec options
+ QDomNodeList lOptions=eCodec.elementsByTagName("opt");
+ for (int j=0;j<lOptions.count();j++) {
+ QDomElement eOpt=lOptions.item(j).toElement();
+ QDomAttr aType=eOpt.attributeNode("type");
+ if (aType.value() == "int")
+ addInt(eOpt);
+ else if(aType.value()=="float")
+ addFloat(eOpt);
+ else if (aType.value()=="bool")
+ addBool(eOpt);
+ else if (aType.value()=="string")
+ addString(eOpt);
+ else if (aType.value()=="")
+ addList(eOpt);
+ }
+ }
+}
+
+void k9MencoderCmdGen::addList(QDomElement _eOpt) {
+ QString sName=_eOpt.attributeNode("name").value();
+ bool bSel=false;
+ QDomAttr aSel=_eOpt.attributeNode("selected");
+ if (!aSel.isNull())
+ bSel=aSel.value()=="true";
+
+
+ QCheckBox *ckLabel=new QCheckBox(sName,m_grid,QString("ck%1").arg(m_row++) );
+ ckLabel->setChecked(bSel);
+ m_hbox=new QGrid(2,m_grid);
+ m_hbox->setFrameShape(QFrame::StyledPanel);
+ m_hbox->setFrameShadow(QFrame::Raised);
+
+ if ( !_eOpt.attributeNode("description").isNull()) {
+ QToolTip::add(ckLabel,_eOpt.attributeNode("description").value());
+ QWhatsThis::add(ckLabel,_eOpt.attributeNode("description").value());
+ }
+
+
+ QDomNodeList lOption=_eOpt.elementsByTagName("subopt");
+ for (int i=0; i<lOption.count();i++) {
+ QDomElement eSubOpt=lOption.item(i).toElement();
+ QDomAttr aType=eSubOpt.attributeNode("type");
+ if (aType.value() == "int")
+ addInt(eSubOpt);
+ else if(aType.value()=="float")
+ addFloat(eSubOpt);
+ else if (aType.value()=="bool")
+ addBool(eSubOpt);
+ else if (aType.value()=="string")
+ addString(eSubOpt);
+ }
+
+ _eOpt.setAttribute("checkbox",ckLabel->name());
+
+}
+
+
+void k9MencoderCmdGen::addInt(QDomElement _eOpt) {
+ QString sName=_eOpt.attributeNode("name").value();
+ bool blist=false;
+ if (_eOpt.nodeName()=="subopt")
+ blist=true;
+
+ int iMin=_eOpt.attributeNode("min").value().toInt();
+ int iMax=_eOpt.attributeNode("max").value().toInt();
+ int iDefault=_eOpt.attributeNode("default").value().toInt();
+
+ QWidget *parent;
+ if (!blist) {
+ parent=m_grid;
+ } else
+ parent=m_hbox;
+
+ bool bSel=false;
+ QDomAttr aSel=_eOpt.attributeNode("selected");
+ if (!aSel.isNull())
+ bSel=aSel.value()=="true";
+
+ QCheckBox *ckLabel=new QCheckBox(sName,parent,QString("ck%1").arg(m_row++) );
+ ckLabel->setChecked(bSel);
+ ckLabel->setBackgroundColor(parent->backgroundColor());
+
+ if ( !_eOpt.attributeNode("description").isNull()) {
+ QToolTip::add(ckLabel,_eOpt.attributeNode("description").value());
+ QWhatsThis::add(ckLabel,_eOpt.attributeNode("description").value());
+ }
+ _eOpt.setAttribute("checkbox",ckLabel->name());
+
+
+ KIntSpinBox *sb= new KIntSpinBox(iMin,iMax,1,iDefault,10,parent,QString("int%1").arg(m_row++));
+ if (iMax <1000)
+ sb->setFixedWidth(50);
+ else
+ sb->setFixedWidth(100);
+ if( !_eOpt.attributeNode("special").isNull()){
+ sb->setSpecialValueText(_eOpt.attributeNode("special").value());
+ if (_eOpt.attributeNode("special").value()== _eOpt.attributeNode("default").value())
+ sb->setValue(iMin-1);
+
+ }
+
+ _eOpt.setAttribute("widget",sb->name());
+
+ //m_grid->addWidget(label,m_row++,0);
+}
+void k9MencoderCmdGen::addFloat(QDomElement _eOpt) {
+ QString sName=_eOpt.attributeNode("name").value();
+ double dMin=_eOpt.attributeNode("min").value().toDouble();
+ double dMax=_eOpt.attributeNode("max").value().toDouble();
+ double dDefault=_eOpt.attributeNode("default").value().toDouble();
+ bool bSel=false;
+ bool blist=false;
+ if (_eOpt.nodeName()=="subopt")
+ blist=true;
+
+ QWidget *parent;
+ if (!blist) {
+ parent=m_grid;
+ } else
+ parent=m_hbox;
+ QDomAttr aSel=_eOpt.attributeNode("selected");
+ if (!aSel.isNull())
+ bSel=aSel.value()=="true";
+
+ QCheckBox *ckLabel=new QCheckBox(sName,parent,QString("ck%1").arg(m_row++));
+ ckLabel->setChecked(bSel);
+ if ( !_eOpt.attributeNode("description").isNull()) {
+ QToolTip::add(ckLabel,_eOpt.attributeNode("description").value());
+ QWhatsThis::add(ckLabel,_eOpt.attributeNode("description").value());
+ }
+ _eOpt.setAttribute("checkbox",ckLabel->name());
+
+ double dStep=0.01;
+ int iPrecision=2;
+ if (!_eOpt.attributeNode("step").isNull()) {
+ dStep=_eOpt.attributeNode("step").value().toDouble();
+ }
+ if (!_eOpt.attributeNode("precision").isNull()) {
+ iPrecision=_eOpt.attributeNode("precision").value().toInt();
+ }
+ KDoubleSpinBox *sb= new KDoubleSpinBox(dMin,dMax,dStep,dDefault,iPrecision,parent,QString("float%1").arg(m_row++));
+ if (dMax <1000)
+ sb->setFixedWidth(80);
+ else
+ sb->setFixedWidth(120);
+ if( !_eOpt.attributeNode("special").isNull()){
+ sb->setSpecialValueText(_eOpt.attributeNode("special").value());
+ }
+
+ _eOpt.setAttribute("widget",sb->name());
+}
+
+void k9MencoderCmdGen::addBool(QDomElement _eOpt) {
+ QString sName=_eOpt.attributeNode("name").value();
+ bool blist=false;
+ if (_eOpt.nodeName()=="subopt")
+ blist=true;
+
+ bool bSel=false;
+ QWidget *parent;
+ if (!blist) {
+ parent = m_grid;
+ } else
+ parent = m_hbox;
+
+ QDomAttr aSel=_eOpt.attributeNode("selected");
+ if (!aSel.isNull())
+ bSel=aSel.value()=="true";
+
+ QCheckBox *ckLabel=new QCheckBox(sName,parent,QString("ck%1").arg(m_row++));
+
+ if ( !_eOpt.attributeNode("description").isNull()) {
+ QToolTip::add(ckLabel,_eOpt.attributeNode("description").value());
+ QWhatsThis::add(ckLabel,_eOpt.attributeNode("description").value());
+ }
+ QWidget *w=new QWidget(parent);
+
+ if ((_eOpt.attributeNode("default").value()=="true") && bSel)
+ ckLabel->setChecked(true);
+
+ _eOpt.setAttribute("checkbox",ckLabel->name());
+
+}
+
+void k9MencoderCmdGen::addString(QDomElement _eOpt) {
+ QString sName=_eOpt.attributeNode("name").value();
+ bool blist=false;
+ if (_eOpt.nodeName()=="subopt")
+ blist=true;
+
+ QString sDefault=_eOpt.attributeNode("default").value();
+ QWidget *parent;
+ if( !blist) {
+ parent=m_grid;
+ } else
+ parent=m_hbox;
+
+ bool bSel=false;
+ QDomAttr aSel=_eOpt.attributeNode("selected");
+ if (!aSel.isNull())
+ bSel=aSel.value()=="true";
+
+ QCheckBox *ckLabel=new QCheckBox(sName,parent,QString("ck%1").arg(m_row++));
+ ckLabel->setChecked(bSel);
+ if ( !_eOpt.attributeNode("description").isNull()) {
+ QToolTip::add(ckLabel,_eOpt.attributeNode("description").value());
+ QWhatsThis::add(ckLabel,_eOpt.attributeNode("description").value());
+ }
+ _eOpt.setAttribute("checkbox",ckLabel->name());
+
+ QComboBox *cb=new QComboBox(parent,QString("string%1").arg(m_row++));
+
+ QDomNodeList values=_eOpt.elementsByTagName("value");
+ int def=0;
+ if (values.count()==0) {
+ cb->setEditable(true);
+ cb->setCurrentText(sDefault);
+ } else {
+ for (int i=0;i<values.count();i++) {
+ QDomElement e=values.item(i).toElement();
+ cb->insertItem(e.attributeNode("name").value());
+ if (e.attributeNode("name").value() ==sDefault)
+ def=cb->count()-1;
+ }
+ cb->setCurrentItem(def);
+ }
+ _eOpt.setAttribute("widget",cb->name());
+
+}
+
+const QString & k9MencoderCmdGen::getCmd(const QString &_root) {
+ /* QString str;
+ QTextStream ts(&str,IO_WriteOnly);
+ m_doc.save(ts,4);
+ QFile f ("/home/jmp/doc.xml");
+ f.open(IO_WriteOnly);
+ f.writeBlock(str.latin1(),str.length());
+ f.close();
+*/
+ m_cmd="";
+ QString m_sepOpt=":";
+ QString m_sepValues=",";
+ //finds the VIDEO node
+ QDomElement eRoot=m_doc.documentElement().elementsByTagName(_root).item(0).toElement();
+
+ //gets the codec list
+ QDomNodeList lCodecs=eRoot.childNodes();
+ for (int i=0; i<lCodecs.count();i++) {
+ QString sCmd="",sCmd1="";
+ QDomElement eCodec=lCodecs.item(i).toElement();
+ QDomAttr eSep=eCodec.attributeNode("separator");
+ if (!eSep.isNull())
+ m_sepOpt=eSep.value();
+
+ QDomAttr eAttr=eCodec.attributeNode("selected");
+ if (eAttr.isNull())
+ continue;
+ if (eAttr.value()=="false")
+ continue;
+
+ //gets codec options
+ QDomNodeList lOptions=eCodec.elementsByTagName("opt");
+ for (int j=0;j<lOptions.count();j++) {
+ QDomElement eOpt=lOptions.item(j).toElement();
+ QDomAttr aType=eOpt.attributeNode("type");
+ QDomAttr aCheckBox=eOpt.attributeNode("checkbox");
+ QDomAttr aWidget=eOpt.attributeNode("widget");
+ QCheckBox *ck=(QCheckBox*)this->child(aCheckBox.value().latin1());
+ if (ck->isChecked()) {
+ if (sCmd1.isEmpty()){
+ if (eCodec.attributeNode("options").isNull())
+ sCmd1=" -"+eCodec.tagName()+" ";
+ else
+ sCmd1=eCodec.tagName()+" -"+eCodec.attributeNode("options").value()+" ";
+
+ }
+ if(aType.isNull()) {
+ //build list
+ eSep=eOpt.attributeNode("separator");
+ if (!eSep.isNull())
+ m_sepValues=eSep.value();
+ QDomNodeList lSubOpt=eOpt.elementsByTagName("subopt");
+ QString sCmd2="";
+ QString sTmp="";
+ for (int k=0;k<lSubOpt.count();k++) {
+ QDomElement eSOpt=lSubOpt.item(k).toElement();
+ QDomAttr aSType=eSOpt.attributeNode("type");
+ QDomAttr aSWidget=eSOpt.attributeNode("widget");
+ QString sPrefix="";
+ if (!eSOpt.attributeNode("prefix").isNull())
+ sPrefix=eSOpt.attributeNode("prefix").value();
+ QCheckBox *Sck=(QCheckBox*)this->child(eSOpt.attributeNode("checkbox").value().latin1());
+ if(aSType.value()=="int" && Sck->isChecked()) {
+ KIntSpinBox *isb=(KIntSpinBox*) this->child(aSWidget.value().latin1(),"KIntSpinBox");
+ if (!sCmd2.isEmpty())
+ sCmd2 +=m_sepValues;
+ sCmd2+=sTmp+sPrefix+isb->text().stripWhiteSpace() ;
+ sTmp="";
+ } else if(aSType.value()=="float" && Sck->isChecked()) {
+ KDoubleSpinBox *isb=(KDoubleSpinBox*) this->child(aSWidget.value().latin1(),"KDoubleSpinBox");
+ if (!sCmd2.isEmpty())
+ sCmd2 +=m_sepValues;
+ sCmd2+=sTmp+sPrefix+isb->text().replace(",",".").stripWhiteSpace();
+ sTmp="";
+ } else if(aSType.value()=="string" && Sck->isChecked()) {
+ QComboBox *cb=(QComboBox*) this->child(aSWidget.value().latin1(),"QComboBox");
+ if (!sCmd2.isEmpty() )
+ sCmd2 +=m_sepValues;
+ // sCmd2+= cb->text(cb->currentItem());
+ sCmd2+= sTmp+ sPrefix+cb->currentText();
+ sTmp="";
+ }else if(aSType.value()=="bool" && Sck->isChecked()) {
+ if (!sCmd2.isEmpty() )
+ sCmd2 +=m_sepValues;
+ sCmd2+= sTmp+ eSOpt.attributeNode("name").value();
+ sTmp="";
+ } else if(sPrefix==""){
+ sTmp +=m_sepValues;
+ }
+ }
+ if (!sCmd.isEmpty())
+ sCmd +=m_sepOpt;;
+ sCmd+= eOpt.attributeNode("name").value() + "=" +sCmd2;
+ }else if(aType.value()=="int") {
+ KIntSpinBox *isb=(KIntSpinBox*) this->child(aWidget.value().latin1(),"KIntSpinBox");
+ if (!sCmd.isEmpty())
+ sCmd +=m_sepOpt;
+ sCmd+= eOpt.attributeNode("name").value() + "=" + isb->text();
+ } else if(aType.value()=="float") {
+ KDoubleSpinBox *isb=(KDoubleSpinBox*) this->child(aWidget.value().latin1(),"KDoubleSpinBox");
+ if (!sCmd.isEmpty())
+ sCmd +=m_sepOpt;
+ sCmd+= eOpt.attributeNode("name").value() + "=" + isb->text().replace(",",".");
+ } else if(aType.value()=="string") {
+ QComboBox *cb=(QComboBox*) this->child(aWidget.value().latin1(),"QComboBox");
+ if (!sCmd.isEmpty())
+ sCmd +=m_sepOpt;
+ sCmd+= eOpt.attributeNode("name").value() + "=" + cb->currentText();
+ } else if(aType.value()=="bool") {
+ if (!sCmd.isEmpty())
+ sCmd +=m_sepOpt;
+ sCmd+=eOpt.attributeNode("name").value() ;
+ }
+ }
+ }
+ m_cmd+=sCmd1+sCmd;
+
+ }
+
+ return m_cmd;
+}
+
+bool k9MencoderCmdGen::getMencoderOptions(QString &_cmd) {
+ k9MencoderCmdGen * m_cmdGen=new k9MencoderCmdGen(NULL,_cmd);
+ m_cmdGen->m_cmd=_cmd;
+ bool res=m_cmdGen->exec();
+ if (res) {
+ QString m_video=m_cmdGen->getCmd("VIDEO").stripWhiteSpace();
+ QString m_audio=m_cmdGen->getCmd("AUDIO").stripWhiteSpace();
+ QString m_filters=m_cmdGen->getCmd("FILTERS").stripWhiteSpace();
+ if (!m_video.isEmpty())
+ m_video="-ovc "+m_video;
+ if (!m_audio.isEmpty())
+ m_audio="-oac " +m_audio;
+ _cmd=" "+m_video+" "+m_audio+" "+m_filters;
+ }
+ delete m_cmdGen;
+ return res;
+}
+
+void k9MencoderCmdGen::parseCmd(const QString &_cmd){
+ QString cmd(_cmd);
+ cmd=cmd.replace("\n"," ").simplifyWhiteSpace();
+ QStringList cmdList=QStringList::split(" ",cmd);
+ for (QStringList::iterator it=cmdList.begin();it!=cmdList.end();++it) {
+ if (*it=="-ovc") {
+ ++it;
+ selectCodec("VIDEO",*it);
+ } else if (*it=="-oac") {
+ ++it;
+ selectCodec("AUDIO",*it);
+ } else {
+ if (*it=="-vf")
+ selectCodec("FILTERS","vf");
+ else if (*it=="-af")
+ selectCodec("FILTERS","af");
+ QDomNodeList lRoot=m_doc.documentElement().childNodes();
+ bool bFound=false;
+ QString sCodec=*it;
+ for (int i=0;i<lRoot.count();i++) {
+ QDomElement eRoot=lRoot.item(i).toElement();
+ QDomNodeList lCodec=eRoot.childNodes();
+ for (int j=0;j<lCodec.count();j++) {
+ QDomElement eCodec=lCodec.item(j).toElement();
+ QString sOptName="";
+ if (eCodec.attributeNode("options").isNull())
+ sOptName="-"+eCodec.nodeName();
+ else
+ sOptName="-"+eCodec.attributeNode("options").value();
+ if ( sOptName ==sCodec) {
+ if (!bFound)
+ ++it;
+ parseCodecOptions(eRoot.nodeName(),eCodec.nodeName(),*it);
+ bFound=true;
+ }
+ }
+
+ }
+ }
+ }
+}
+
+void k9MencoderCmdGen::parseCodecOptions(const QString &_root,const QString &_codec,const QString & _options) {
+
+ QString m_sepOpt=":";
+ QString m_sepValues=",";
+
+ QDomElement eRoot=m_doc.documentElement().elementsByTagName(_root).item(0).toElement();
+ QDomElement eCodec=eRoot.elementsByTagName(_codec).item(0).toElement();
+
+ if (! eCodec.attributeNode("separator").isNull())
+ m_sepOpt=eCodec.attributeNode("separator").value();
+
+ QStringList slOptions=QStringList::split(m_sepOpt,_options);
+ QDomNodeList lOpt=eCodec.elementsByTagName("opt");
+
+
+ for (int i=0;i <lOpt.count();i++) {
+ QDomElement eOpt=lOpt.item(i).toElement();
+ QString sName=eOpt.attributeNode("name").value();
+ if (! eOpt.attributeNode("separator").isNull())
+ m_sepValues=eOpt.attributeNode("separator").value();
+
+ //extract the option (optname=value)
+ QStringList sl=slOptions.grep(sName,false);
+ QString sOpt="";
+ for (QStringList::iterator it=slOptions.begin();it !=slOptions.end();++it)
+ if (*it==sName || (*it).startsWith(sName+"="))
+ sOpt=*it;
+
+ if (sOpt!="") {
+ //QString sOpt=*(sl.at(0));
+ QString value;
+ if (eOpt.attributeNode("type").isNull()) {
+ //it's a list of values
+ QString sValues=sOpt.replace("="+m_sepValues,"= "+m_sepValues).replace(m_sepValues+m_sepValues,m_sepValues+" "+m_sepValues).replace(m_sepValues+m_sepValues,m_sepValues+" "+m_sepValues).section("=",1);
+ QStringList slValues=QStringList::split(m_sepValues,sValues);
+ //loop on values nodes
+ QDomNodeList lSOpt=eOpt.elementsByTagName("subopt");
+ for (int j=0;j<lSOpt.count();j++) {
+ QDomElement eSOpt=lSOpt.item(j).toElement();
+ //if (eSOpt.attributeNode("type").value()=="int") {
+ if (eSOpt.attributeNode("prefix").isNull()) {
+ if (j< slValues.count() && *(slValues.at(j)) !=" " ) {
+ QString sVal=*(slValues.at(j));
+ if (eSOpt.attributeNode("type").value()=="bool")
+ sVal="true";
+ eSOpt.setAttribute("default",sVal);
+ eSOpt.setAttribute("selected","true");
+ }
+ } else {
+ QString sPrefix=eSOpt.attributeNode("prefix").value();
+ for (int k=0;k<slValues.count();k++) {
+ QString s=*(slValues.at(k));
+ if (s.startsWith(sPrefix)) {
+ eSOpt.setAttribute("default",s.replace(sPrefix,""));
+ eSOpt.setAttribute("selected","true");
+ }
+ }
+ }
+ }
+ } else if (eOpt.attributeNode("type").value()=="bool" )
+ value="true";
+ else
+ value=sOpt.section("=",1,1);
+ eOpt.setAttribute("default",value);
+ eOpt.setAttribute("selected","true");
+ }
+ }
+}
+
+void k9MencoderCmdGen::selectCodec(const QString &_root,const QString &_codec) {
+ QDomElement root=m_doc.documentElement().elementsByTagName(_root).item(0).toElement();
+ QDomElement codec=root.elementsByTagName(_codec).item(0).toElement();
+ if (!codec.isNull())
+ codec.setAttribute("selected","true");
+}
+
+
+#include "k9mencodercmdgen.moc"
+
diff --git a/src/k9mencodercmdgen.h b/src/k9mencodercmdgen.h
new file mode 100644
index 0000000..c0b617a
--- /dev/null
+++ b/src/k9mencodercmdgen.h
@@ -0,0 +1,67 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9MENCODERCMDGEN_H
+#define K9MENCODERCMDGEN_H
+
+#include "mencoderCmdGen.h"
+#include <qscrollview.h>
+#include <qgrid.h>
+#include <qdom.h>
+#include <qlayout.h>
+#include <qlistview.h>
+#include <qhbox.h>
+class _k9CheckListItem;
+
+class k9MencoderCmdGen : public MyDialog1
+{
+ Q_OBJECT
+
+public:
+ k9MencoderCmdGen(QWidget* parent, const QString &_cmd, bool modal = FALSE, WFlags fl = 0 );
+ ~k9MencoderCmdGen();
+ /*$PUBLIC_FUNCTIONS$*/
+ static bool getMencoderOptions(QString &_cmd);
+public slots:
+ /*$PUBLIC_SLOTS$*/
+private:
+ QScrollView *m_scrollView;
+ QGrid *m_grid;
+ QGrid *m_hbox;
+ int m_row,m_page,m_cpt;
+ QDomDocument m_doc;
+ QString m_cmd;
+
+ void addWidgets(_k9CheckListItem *_item,QString _root,QString _cat);
+ void loadXml();
+ void fillListView();
+ void addInt(QDomElement _eOpt);
+ void addFloat(QDomElement _eOpt);
+ void addBool(QDomElement _eOpt);
+ void addString(QDomElement _eOpt);
+ void addList(QDomElement _eOpt);
+
+ const QString & getCmd(const QString &_root);
+ void selectCodec(const QString &_root,const QString &_codec);
+ void parseCodecOptions(const QString &_root,const QString &_codec,const QString & _options);
+ void parseCmd(const QString &_cmd);
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ void listViewCurrentChanged(QListViewItem*);
+};
+
+#endif
+
diff --git a/src/k9mp4title.cpp b/src/k9mp4title.cpp
new file mode 100644
index 0000000..00bf426
--- /dev/null
+++ b/src/k9mp4title.cpp
@@ -0,0 +1,210 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "k9common.h"
+#include "k9mp4title.h"
+#include "k9config.h"
+#include "k9titleencopt.h"
+#include "k9dvdtitle.h"
+#include <qcombobox.h>
+#include <qspinbox.h>
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qstringlist.h>
+#include <klocale.h>
+#include <qlabel.h>
+#include <qframe.h>
+#include <qtabwidget.h>
+#include <qradiobutton.h>
+
+k9MP4Title::k9MP4Title(QWidget* parent, const char* name, WFlags fl)
+: prefMPEG4(parent,name,fl)
+{
+ m_titleEncOpt=NULL;
+ load();
+ ckUseCache->hide();
+ tabWidget->setEnabled(false);
+ lTitle->setText(i18n("Select a Title in the treeview..."));
+
+}
+
+k9MP4Title::~k9MP4Title()
+{
+}
+
+
+void k9MP4Title::load() {
+ k9Config config;
+
+ sbMp4Size->setValue(config.getPrefMp4Size());
+ sbMp4Size->setSuffix(" "+ i18n("MB"));
+ sbMp4NumberCD->setValue(config.getPrefMp4NumberCD());
+ sbAudioGain->setValue(config.getPrefMp4AudioGain());
+
+
+ leMp4Width->setText(config.getPrefMp4Width());
+ leMp4Height->setText(config.getPrefMp4Height());
+
+ ckMp4AspectRatio->setChecked(config.getPrefMp4AspectRatio());
+ leMp4Height->setEnabled(!ckMp4AspectRatio->isChecked());
+
+ ck2passes->setChecked(config.getPrefMp42Passes());
+ ckUseCache->setChecked(config.getPrefUseCellCache());
+
+ leMp4AudioBitrate->setText(config.getPrefMp4AudioBitrate());
+ leMp4VideoBitrate->setText(config.getPrefMp4VideoBitrate());
+
+ QStringList m_codecLabels=config.getCodecLabels();
+ QStringList m_codecLabelsAudio=config.getCodecLabelsAudio();
+
+ cbMp4Codec->clear();
+
+ cbMp4Codec->insertStringList(m_codecLabels);
+ cbMp4Codec->setCurrentItem(config.getPrefMp4Codec());
+
+ cbMp4AudioCodec->clear();
+ cbMp4AudioCodec->insertStringList(m_codecLabelsAudio);
+ cbMp4AudioCodec->setCurrentItem(config.getPrefMp4AudioCodec());
+
+ cbMp4AudioCodec->setCurrentItem(config.getPrefMp4AudioCodec());
+ if(config.getPrefMp4VideoBitrate() =="")
+ rbSize->setChecked(true);
+ else
+ rbBitrate->setChecked(true);
+}
+
+
+/*$SPECIALIZATION$*/
+void k9MP4Title::ckMp4AspectRatioClick()
+{
+ leMp4Height->setEnabled(!ckMp4AspectRatio->isChecked());
+ if (m_titleEncOpt)
+ m_titleEncOpt->setKeepAspectRatio(ckMp4AspectRatio->isChecked());
+
+}
+
+void k9MP4Title::selectionChanged(k9DVD *_dvd,bool) {
+ if (_dvd==NULL)
+ m_titleEncOpt=NULL;
+ if (m_titleEncOpt)
+ tabWidget->setEnabled(m_titleEncOpt->getTitle()->isSelected());;
+
+
+}
+
+
+void k9MP4Title::titleChanged( k9DVDTitle *_title) {
+ if (_title==NULL) {
+ m_titleEncOpt=NULL;
+ tabWidget->setEnabled(false);
+ lTitle->setText(i18n("Select a Title in the treeview..."));
+ }
+ else {
+ lTitle->setText(_title->getname());
+ tabWidget->setEnabled( _title->isSelected());
+ m_titleEncOpt=_title->getEncOpt();
+ k9TitleEncOpt *opt=m_titleEncOpt;
+ sbMp4Size->setValue(opt->getMaxSize());
+ sbMp4NumberCD->setValue(opt->getNumParts() );
+ sbAudioGain->setValue(opt->getAudioGain() );
+
+ leMp4Width->setText(opt->getWidth() );
+ leMp4Height->setText(opt->getHeight());
+
+ ckMp4AspectRatio->setChecked(opt->getKeepAspectRatio());
+ leMp4Height->setEnabled(!ckMp4AspectRatio->isChecked());
+
+ ck2passes->setChecked(opt->get2Passes());
+ ckUseCache->setChecked(opt->getUseCache());
+
+ leMp4AudioBitrate->setText(opt->getAudioBr());
+ leMp4VideoBitrate->setText(opt->getVideoBr());
+ cbMp4Codec->setCurrentItem(opt->getCodec() );
+ cbMp4AudioCodec->setCurrentItem(opt->getAudioCodec());
+
+ if(opt->getVideoBr() =="")
+ rbSize->setChecked(true);
+ else
+ rbBitrate->setChecked(true);
+ }
+ leMp4VideoBitrate->setEnabled(rbBitrate->isChecked());
+ sbMp4Size->setEnabled(rbSize->isChecked());
+
+}
+
+
+void k9MP4Title::cbMp4CodecActivated( int _value) {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setCodec(_value);
+}
+
+void k9MP4Title::cbMp4AudioCodecActivated( int _value) {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setAudioCodec(_value);
+}
+
+void k9MP4Title::ck2passesClicked() {
+ if (m_titleEncOpt)
+ m_titleEncOpt->set2Passes(ck2passes->isChecked());
+}
+
+void k9MP4Title::ckUseCacheClick() {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setUseCache(ckUseCache->isChecked());
+}
+
+void k9MP4Title::sbMp4SizeValueChanged( int _value) {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setMaxSize(_value);
+}
+
+void k9MP4Title::sbMp4NumberCDValueChanged( int _value ) {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setNumParts(_value);
+}
+
+void k9MP4Title::sbAudioGainValueChanged( int _value ) {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setAudioGain(_value);
+}
+
+void k9MP4Title::leMp4WidthTextChanged( const QString & _value) {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setWidth(_value);
+}
+
+void k9MP4Title::leMp4HeightTextChanged( const QString & _value) {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setHeight(_value);
+}
+
+void k9MP4Title::leMp4AudioBitrateTextChanged( const QString & _value) {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setAudioBr(_value);
+}
+
+
+void k9MP4Title::leMp4VideoBitrateTextChanged( const QString & _value) {
+ if (m_titleEncOpt)
+ m_titleEncOpt->setVideoBr(_value);
+}
+
+
+void k9MP4Title::rgVideoSizeChanged(){
+ if (rbSize->isChecked())
+ leMp4VideoBitrate->setText("");
+ leMp4VideoBitrate->setEnabled(rbBitrate->isChecked());
+ sbMp4Size->setEnabled(rbSize->isChecked());
+}
+
+#include "k9mp4title.moc"
+
diff --git a/src/k9mp4title.h b/src/k9mp4title.h
new file mode 100644
index 0000000..da020f4
--- /dev/null
+++ b/src/k9mp4title.h
@@ -0,0 +1,59 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9MP4TITLE_H
+#define K9MP4TITLE_H
+
+#include "prefMPEG4.h"
+#include "k9titleencopt.h"
+
+
+class k9DVDTitle;
+class k9DVD;
+class k9MP4Title : public prefMPEG4
+{
+ Q_OBJECT
+
+public:
+ k9MP4Title(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~k9MP4Title();
+ /*$PUBLIC_FUNCTIONS$*/
+private:
+ k9TitleEncOpt *m_titleEncOpt;
+public slots:
+ /*$PUBLIC_SLOTS$*/
+ virtual void ckMp4AspectRatioClick();
+ virtual void load();
+ virtual void titleChanged(k9DVDTitle *_title);
+ virtual void selectionChanged(k9DVD *_dvd,bool);
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ virtual void cbMp4CodecActivated( int );
+ virtual void cbMp4AudioCodecActivated( int );
+
+ virtual void ck2passesClicked();
+ virtual void sbMp4SizeValueChanged( int );
+ virtual void sbAudioGainValueChanged( int );
+
+ virtual void sbMp4NumberCDValueChanged( int );
+ virtual void leMp4WidthTextChanged( const QString & );
+ virtual void leMp4HeightTextChanged( const QString & );
+ virtual void leMp4AudioBitrateTextChanged( const QString & );
+ virtual void leMp4VideoBitrateTextChanged( const QString & );
+
+ virtual void rgVideoSizeChanged();
+
+ virtual void ckUseCacheClick();
+};
+
+#endif
+
diff --git a/src/k9play.cpp b/src/k9play.cpp
new file mode 100644
index 0000000..c772a1d
--- /dev/null
+++ b/src/k9play.cpp
@@ -0,0 +1,568 @@
+//
+// C++ Implementation: k9play
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "k9play.h"
+#include "k9dvdread.h"
+#include "k9cell.h"
+#include "k9vamps.h"
+#include "ac.h"
+
+#include "dvdnav.h"
+#include "k9saveimage.h"
+#include <stdio.h>
+#include <unistd.h>
+#include <inttypes.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include "dvdread.h"
+#include <ktempfile.h>
+#include <kstandarddirs.h>
+
+void k9play::saveStatus(k9play_st _status) {
+ QFile fstatus(m_inject);
+ fstatus.open(IO_WriteOnly);
+ fstatus.writeBlock((const char*)&_status,sizeof(k9play_st));
+ fstatus.close();
+ kdebug (QString("saving status : %1 %2 %3 %4 %5 %6 %7\n").arg(_status.title).arg(_status.chapter).arg(_status.cell).arg(_status.sector).arg(_status.bytesWritten).arg(_status.bytesRead).arg(_status.bytesSkipped));
+
+}
+
+void k9play::readStatus(k9play_st &_status) {
+ QFile fstatus(m_inject);
+ if (fstatus.open(IO_ReadOnly)) {
+ fstatus.readBlock((char*)&_status,sizeof(k9play_st));
+ fstatus.close();
+ } else memset(&_status,0,sizeof(k9play_st));
+
+ kdebug (QString("reading status : title:%1 chapter:%2 cell:%3 sector:%4 written:%5 readen:%6 skipped:%7 chapters:%8 \n").arg(_status.title).arg(_status.chapter).arg(_status.cell).arg(_status.sector).arg(_status.bytesWritten).arg(_status.bytesRead).arg(_status.bytesSkipped).arg(_status.bytesChapters));
+
+}
+
+
+k9play::k9play() {
+ m_stderr.open(IO_WriteOnly,stderr);
+ m_startSector=0xFFFFFFFF;
+ m_endSector=0xFFFFFFFF;
+ m_vampsFactor=1;
+ m_inputSize=1;
+ m_chapterSize=0;
+ m_chapter=0;
+ m_cell=0;
+ m_totalSize=0;
+ m_forcedFactor=false;
+ m_firstPass=false;
+ m_useCache=false;
+}
+
+void k9play::kdebug(QString const & _msg) {
+ #ifdef debug
+ m_stderr.writeBlock(_msg.latin1(),_msg.length());
+ #endif
+}
+
+void k9play::writeOutput(QString const & _msg) {
+ m_stderr.writeBlock(_msg.latin1(),_msg.length());
+}
+
+
+k9play::~k9play() {
+ m_stderr.close();
+}
+
+void k9play::setstartSector(QString _value) {
+ if (_value !="")
+ m_startSector=_value.toUInt();
+}
+
+void k9play::setinject(QString _value) {
+ m_inject=_value;
+}
+
+void k9play::setendSector(QString _value) {
+ if (_value!="")
+ m_endSector=_value.toUInt();
+}
+
+void k9play::setaudioFilter( QString _value) {
+ if (_value!="")
+ m_audioFilter=QStringList::split(",",_value);
+}
+
+void k9play::setsubpictureFilter( QString _value) {
+ if (_value!="")
+ m_subpictureFilter=QStringList::split(",",_value);
+}
+
+void k9play::setchapterList( QString _value) {
+ if (_value!="")
+ m_chapterList=QStringList::split(",",_value);
+}
+
+void k9play::setvampsFactor(QString _value) {
+ if (_value!="")
+ m_vampsFactor=_value.toDouble();
+}
+
+void k9play::setinputSize( QString _value) {
+ if (_value!="")
+ m_inputSize=_value.toULongLong();
+}
+
+void k9play::settotalSize( QString _value) {
+ if (_value!="")
+ m_totalSize=_value.toULongLong();
+}
+
+void k9play::setdvdSize( QString _value) {
+ if (_value!="")
+ m_dvdSize=_value.toULongLong();
+}
+
+void k9play::setchapterSize( QString _value) {
+ if (_value!="")
+ m_chapterSize=_value.toULongLong();
+}
+
+
+void k9play::setchapter( QString _value) {
+ if (_value!="")
+ m_chapter=_value.toUInt();
+}
+
+void k9play::setcell(QString _value) {
+ if (_value !="")
+ m_cell=_value.toUInt();
+}
+
+void k9play::setinitStatus(bool _value) {
+ m_initstatus=_value;
+}
+
+void k9play::setcontinue(bool _value) {
+ m_continue=_value;
+}
+
+void k9play::setfirstPass(bool _value) {
+ m_firstPass=_value;
+}
+
+void k9play::setforcedFactor( bool _value) {
+ m_forcedFactor=_value;
+}
+
+void k9play::setuseCache(bool _value) {
+ m_useCache=_value;
+}
+void k9play::execute() {
+ //playCell();
+ play();
+ return;
+}
+
+
+void k9play::insert_nav_pack (int8_t *buf)
+{
+ int8_t *ptr = (int8_t*)buf;
+ static uint8_t nav_pack1 [] =
+ {
+ /* pack header: SCR=0, mux rate=10080000bps, stuffing length=0 */
+ 0, 0, 1, 0xba, 0x44, 0x00, 0x04, 0x00, 0x04, 0x01, 0x01, 0x89, 0xc3, 0xf8,
+ /* system header */
+ 0, 0, 1, 0xbb, 0x00, 0x12,
+ /* contents of system header filled in at run time (18 bytes) */
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ /* PES header for first private stream 2 packet */
+ 0, 0, 1, 0xbf, 0x03, 0xd4
+ };
+ static uint8_t nav_pack2 [] =
+ {
+ /* PES header for second private stream 2 packet */
+ 0, 0, 1, 0xbf, 0x03, 0xfa
+ };
+
+ memcpy (ptr, nav_pack1, sizeof (nav_pack1));
+ ptr += sizeof (nav_pack1);
+ memset (ptr, 0, DVD_VIDEO_LB_LEN/2 - sizeof (nav_pack1));
+ ptr = buf + DVD_VIDEO_LB_LEN/2;
+ memcpy (ptr, nav_pack2, sizeof (nav_pack2));
+ ptr += sizeof (nav_pack2);
+ memset (ptr, 0, DVD_VIDEO_LB_LEN/2 - sizeof (nav_pack2));
+}
+
+void k9play::insert_dummy_pack (int8_t *buf)
+{
+ int8_t *ptr = buf;
+ static uint8_t dummy_pack [] =
+ {
+ /* pack header: SCR=0, mux rate=10080000bps, stuffing length=0 */
+ 0, 0, 1, 0xba, 0x44, 0x00, 0x04, 0x00, 0x04, 0x01, 0x01, 0x89, 0xc3, 0xf8,
+ /* PES header for dummy video packet */
+ 0, 0, 1, 0xe0, 0x07, 0xec, 0x81, 0x00, 0x00
+ };
+
+ memcpy (ptr, dummy_pack, sizeof (dummy_pack));
+ ptr += sizeof (dummy_pack);
+ memset (ptr, 0xff, DVD_VIDEO_LB_LEN - sizeof (dummy_pack));
+}
+
+
+
+/* which is the default language for menus/audio/subpictures? */
+#define DVD_LANGUAGE "en"
+#define DVD_READ_CACHE 1
+
+void k9play::play() {
+ dvdnav_t *dvdnav;
+ uint8_t mem[DVD_VIDEO_LB_LEN];
+ int finished = 0;
+ bool skipped=false;
+ int32_t tt = 0,ptt=0;
+ uint32_t pos, lgr;
+ uint currCell=0;
+ m_pos=0xFFFFFFFF;
+ k9play_st status;
+
+ if (m_initstatus)
+ memset(&status,0,sizeof(k9play_st));
+ else {
+ readStatus( status);
+ if (m_continue)
+ m_startSector=status.sector;
+ }
+
+
+
+ KTempFile *bufferFile;
+ if (m_useCache) {
+ bufferFile=new KTempFile(locateLocal("tmp", "k9copy/k9p"), "");
+ m_output=bufferFile->file();
+ } else {
+ m_output=new QFile();
+ m_output->open(IO_WriteOnly,stdout);
+ }
+ k9vamps vamps(NULL);
+ vamps.reset();
+ vamps.setPreserve( false);
+ vamps.setOutput(m_output);
+ k9SaveImage saveImage;
+ saveImage.play();
+ vamps.setSaveImage(&saveImage);
+
+ // if reading of previous cell reached end of chapter, don't seek for cell
+ if (m_chapter !=0 && m_cell !=0) {
+ if (m_cell==1) {
+ if (status.bytesRead <=status.bytesChapters)
+ status.bytesSkipped = status.bytesChapters - status.bytesRead;
+ else
+ status.bytesSkipped=0;
+ status.bytesChapters += m_chapterSize;
+ }
+ if (status.title == m_title &&
+ status.chapter > m_chapter) {
+ skipped=true;
+ }
+ }
+
+ //vamps.setVapFactor( m_vampsFactor);
+ if (m_totalSize>0 && !m_forcedFactor) {
+ double factor;
+ factor = (double) (m_totalSize - (status.bytesRead +status.bytesSkipped)) / (double) (m_dvdSize-status.bytesWritten) ;
+ if (factor <1) factor =1;
+ kdebug(QString("shrink factor %1 totalSize:%2 (status.bytesRead +status.bytesSkipped):%3 m_dvdSize:%4 status.bytesWritten:%5").arg(factor).arg(m_totalSize).arg(status.bytesRead +status.bytesSkipped).arg(m_dvdSize).arg(status.bytesWritten) );
+ vamps.setVapFactor(factor);
+ } else {
+ vamps.setVapFactor(m_vampsFactor);
+ kdebug(QString("vamps factor %1\n").arg(m_vampsFactor));
+ }
+
+
+ vamps.setInputSize(m_inputSize);
+ for ( QStringList::Iterator it = m_audioFilter.begin(); it != m_audioFilter.end(); ++it ) {
+ vamps.addAudio((*it).toInt());
+ }
+
+ for ( QStringList::Iterator it = m_subpictureFilter.begin(); it != m_subpictureFilter.end(); ++it ) {
+ vamps.addSubpicture((*it).toInt());
+ }
+
+ /* open dvdnav handle */
+ if (dvdnav_open(&dvdnav, m_device,NULL) != DVDNAV_STATUS_OK) {
+ writeOutput("ERR:Error on dvdnav_open\n");
+ return ;
+ }
+
+ /* set read ahead cache usage */
+ if (dvdnav_set_readahead_flag(dvdnav, DVD_READ_CACHE) != DVDNAV_STATUS_OK) {
+ writeOutput( QString("ERR:Error on dvdnav_set_readahead_flag: %1\n").arg(dvdnav_err_to_string(dvdnav)));
+ return;
+ }
+
+ /* set the language */
+ if (dvdnav_menu_language_select(dvdnav, DVD_LANGUAGE) != DVDNAV_STATUS_OK ||
+ dvdnav_audio_language_select(dvdnav, DVD_LANGUAGE) != DVDNAV_STATUS_OK ||
+ dvdnav_spu_language_select(dvdnav, DVD_LANGUAGE) != DVDNAV_STATUS_OK) {
+ writeOutput( QString("ERR:Error on setting languages: %1\n").arg(dvdnav_err_to_string(dvdnav)));
+ return ;
+ }
+
+ /* set the PGC positioning flag to have position information relatively to the
+ * whole feature instead of just relatively to the current chapter */
+ if (dvdnav_set_PGC_positioning_flag(dvdnav, 1) != DVDNAV_STATUS_OK) {
+ writeOutput(QString("ERR:Error on dvdnav_set_PGC_positioning_flag: %1\n").arg(dvdnav_err_to_string(dvdnav)));
+ return ;
+ }
+
+ int32_t parts;
+ dvdnav_get_number_of_parts(dvdnav , m_title, &parts);
+
+ if (m_chapter ==0)
+ dvdnav_title_play(dvdnav , m_title);
+ else {
+ dvdnav_part_play(dvdnav, m_title, m_chapter);
+ ptt=m_chapter;
+ }
+ /* the read loop which regularly calls dvdnav_get_next_block
+ * and handles the returned events */
+ bool bcopy=false;
+ bool bcell=true;
+
+
+ while (!finished && !skipped) {
+ int result, event, len;
+ uint8_t *buf = mem;
+
+ /* the main reading function */
+#if DVD_READ_CACHE
+
+ result = dvdnav_get_next_cache_block(dvdnav, &buf, &event, &len);
+#else
+
+ result = dvdnav_get_next_block(dvdnav, buf, &event, &len);
+#endif
+
+
+ if (result == DVDNAV_STATUS_ERR) {
+ writeOutput(QString("ERR:Error getting next block: %1\n").arg(dvdnav_err_to_string(dvdnav)));
+ return;
+ }
+ switch (event) {
+ case DVDNAV_NAV_PACKET:
+ {
+ dvdnav_current_title_info(dvdnav, &tt, &ptt);
+ dvdnav_get_position(dvdnav, &pos, &lgr);
+ m_length=lgr;
+ status.title=tt;
+ status.chapter=ptt;
+ status.cell=currCell;
+ status.sector=pos;
+
+ if ((m_endSector !=0xFFFFFFFF) && (((status.bytesRead+status.bytesSkipped)/2048) >m_endSector)) {
+ finished=1;
+ kdebug(QString("pos >m_endSector %1 %2").arg((status.bytesRead+status.bytesSkipped)/2048).arg(m_endSector));
+ }
+ if ((m_chapter !=0 && ptt !=m_chapter) || (tt != m_title))
+ finished=1;
+ if (m_cell!=0 && currCell>m_cell)
+ finished=1;
+
+ if (!finished && m_chapterList.count() >0) {
+ if (m_chapterList.findIndex( QString::number(ptt)) == -1) {
+ dvdnav_part_play(dvdnav,tt, ptt+1);
+ kdebug( QString("skipping chapter %1").arg(ptt));
+ continue;
+ //dvdnav_part_play(dvdnav_t *self, int32_t title, int32_t part);
+ }
+
+ }
+
+ if (m_continue) {
+ dvdnav_sector_search(dvdnav,m_startSector , SEEK_SET);
+ kdebug (QString("repositionning on %1").arg(m_startSector));
+ m_continue=false;
+ finished=0;
+ bcell=true;
+ } else {
+ if ((m_cell==0 || (m_cell!=0 && currCell==m_cell)) && finished==0) {
+ if (!vamps.running())
+ vamps.start(QThread::NormalPriority);
+ bcopy=true;
+ vamps.addData( buf,len);
+ status.bytesRead +=len;
+ if (!m_useCache)
+ writeOutput(QString("\rINFOPOS: %1 %2").arg((status.bytesRead+status.bytesSkipped) / DVD_VIDEO_LB_LEN).arg(lgr));
+ if (m_pos==0xFFFFFFFF)
+ m_pos=(status.bytesRead+status.bytesSkipped) / DVD_VIDEO_LB_LEN;
+ }
+
+ }
+
+ }
+ break;
+ //removed break --> save
+ case DVDNAV_BLOCK_OK:
+ /* We have received a regular block of the currently playing MPEG stream.*/
+ if (m_cell==0 || (m_cell!=0 && currCell==m_cell)) {
+ if (!vamps.running())
+ vamps.start(QThread::NormalPriority);
+ vamps.addData( buf,len);
+ status.bytesRead +=len;
+ bcopy=true;
+ }
+ break;
+ case DVDNAV_NOP:
+ /* Nothing to do here. */
+ break;
+ case DVDNAV_STILL_FRAME:
+ /* We have reached a still frame. A real player application would wait
+ * the amount of time specified by the still's length while still handling
+ * user input to make menus and other interactive stills work.
+ * A length of 0xff means an indefinite still which has to be skipped
+ * indirectly by some user interaction. */
+ {
+ dvdnav_still_skip(dvdnav);
+ }
+ break;
+ case DVDNAV_WAIT:
+ /* We have reached a point in DVD playback, where timing is critical.
+ * Player application with internal fifos can introduce state
+ * inconsistencies, because libdvdnav is always the fifo's length
+ * ahead in the stream compared to what the application sees.
+ * Such applications should wait until their fifos are empty
+ * when they receive this type of event. */
+ dvdnav_wait_skip(dvdnav);
+ break;
+ case DVDNAV_SPU_CLUT_CHANGE:
+ /* Player applications should pass the new colour lookup table to their
+ * SPU decoder */
+ break;
+ case DVDNAV_SPU_STREAM_CHANGE:
+ /* Player applications should inform their SPU decoder to switch channels */
+ break;
+ case DVDNAV_AUDIO_STREAM_CHANGE:
+ /* Player applications should inform their audio decoder to switch channels */
+ break;
+ case DVDNAV_HIGHLIGHT:
+ /* Player applications should inform their overlay engine to highlight the
+ * given button */
+ break;
+ case DVDNAV_VTS_CHANGE:
+ /* Some status information like video aspect and video scale permissions do
+ * not change inside a VTS. Therefore this event can be used to query such
+ * information only when necessary and update the decoding/displaying
+ * accordingly. */
+ break;
+ case DVDNAV_CELL_CHANGE:
+ if (bcell) {
+ currCell++;
+ dvdnav_get_position(dvdnav, &pos, &lgr);
+ status.title=tt;
+ status.chapter=ptt;
+ status.cell=currCell;
+ status.sector=pos;
+
+ if (m_useCache) {
+ flush(saveImage);
+ delete bufferFile;
+ bufferFile=new KTempFile(locateLocal("tmp", "k9copy/k9p"), "");
+ m_output=bufferFile->file();
+ vamps.setOutput(m_output);
+ }
+ }
+ break;
+ case DVDNAV_HOP_CHANNEL:
+ /* This event is issued whenever a non-seamless operation has been executed.
+ * Applications with fifos should drop the fifos content to speed up responsiveness. */
+ break;
+ case DVDNAV_STOP:
+ /* Playback should end here. */
+ {
+ finished = 1;
+ }
+ break;
+ default:
+ finished = 1;
+ break;
+ }
+
+#if DVD_READ_CACHE
+ dvdnav_free_cache_block(dvdnav, buf);
+#endif
+
+ }
+ vamps.setNoData();
+ vamps.wait();
+ /* destroy dvdnav handle */
+ dvdnav_close(dvdnav);
+
+ if (! bcopy) {
+ int8_t buf[DVD_VIDEO_LB_LEN];
+ insert_nav_pack(buf);
+ m_output->writeBlock((const char*)buf,DVD_VIDEO_LB_LEN);
+ insert_dummy_pack(buf);
+ m_output->writeBlock((const char*)buf,DVD_VIDEO_LB_LEN);
+
+ }
+ if (m_useCache)
+ flush(saveImage);
+ else {
+ m_output->close();
+ delete m_output;
+ }
+ saveImage.stop();
+
+ status.bytesWritten +=vamps.getOutputBytes();
+ if (!m_firstPass)
+ saveStatus( status);
+ delete bufferFile;
+}
+
+void k9play::flush(k9SaveImage &_saveImage ) {
+ char buffer[20*DVD_VIDEO_LB_LEN];
+ m_output->reset();
+ QFile out;
+ out.open(IO_WriteOnly,stdout);
+ while(!m_output->atEnd()) {
+ writeOutput(QString("\rINFOPOS: %1 %2").arg(m_pos).arg(m_length));
+ m_pos+=20;
+ int l=m_output->readBlock(buffer,20*DVD_VIDEO_LB_LEN);
+ if (l>0) {
+ out.writeBlock(buffer,l);
+ }
+ }
+ m_output->close();
+ m_output->remove();
+ m_pos=0xFFFFFFFF;
+}
+
+bool k9play::readNavPack (k9DVDFile *fh, dsi_t *dsi,int sector,uchar *_buffer)
+{
+ int n;
+ /* try max_read_retries+1 times */
+ n = fh->readBlocks( sector, 1,_buffer);
+
+ if (n == 1)
+ {
+ /* read Ok */
+ if (k9Cell::isNavPack (_buffer))
+ /* parse contained DSI pack */
+ navRead_DSI (dsi, _buffer + DSI_START_BYTE);
+ if (sector == dsi -> dsi_gi.nv_pck_lbn) {
+ return true;
+ }
+ }
+ return false;
+}
+
+
+
+
+
diff --git a/src/k9play.h b/src/k9play.h
new file mode 100644
index 0000000..8a9232a
--- /dev/null
+++ b/src/k9play.h
@@ -0,0 +1,101 @@
+//
+// C++ Interface: k9play
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef K9PLAY_H
+#define K9PLAY_H
+
+#include "k9common.h"
+#include "k9dvdtitle.h"
+#include <qfile.h>
+/**
+ @author Jean-Michel PETIT <k9copy@free.fr>
+*/
+
+typedef struct {
+ uint title;
+ uint chapter;
+ uint cell;
+ uint32_t sector;
+ uint64_t bytesWritten;
+ uint64_t bytesRead;
+ uint64_t bytesSkipped;
+ uint64_t bytesChapters;
+} k9play_st;
+
+
+class k9SaveImage;
+class k9play{
+private:
+ int m_title;
+ k9DVD *m_dvd;
+ k9DVDTitle *m_dvdTitle;
+ QString m_device;
+ QFile *m_output;
+ QFile m_stderr;
+ uint32_t m_totalBytes;
+ uint32_t m_startSector,m_endSector;
+ uint32_t m_pos,m_length;
+ double m_vampsFactor;
+ uint64_t m_inputSize;
+ uint64_t m_totalSize;
+ uint64_t m_chapterSize;
+ uint64_t m_dvdSize;
+ uint m_chapter;
+ uint m_cell;
+ bool m_initstatus;
+ bool m_continue;
+ bool m_firstPass;
+ bool m_forcedFactor;
+ bool m_useCache;
+ QString m_inject;
+ QStringList m_audioFilter;
+ QStringList m_subpictureFilter;
+ QStringList m_chapterList;
+ void kdebug(QString const & _msg);
+ bool readNavPack (k9DVDFile *fh, dsi_t *dsi,int sector, uchar *_buffer);
+ void insert_dummy_pack (int8_t *buf);
+ void insert_nav_pack (int8_t *buf);
+ void saveStatus(k9play_st _status);
+ void readStatus(k9play_st &_status);
+ void flush(k9SaveImage &_saveImage);
+public:
+ k9play();
+
+ ~k9play();
+ void execute();
+ void play();
+ void writeOutput(QString const & _msg);
+
+ void setTitle(int _value) {m_title = _value;};
+
+ void setDevice(const QString& _value) {m_device = _value;};
+
+ void setstartSector(QString _value);
+ void setendSector(QString _value);
+ void setaudioFilter(QString _value);
+ void setsubpictureFilter(QString _value);
+ void setchapterList(QString _value);
+ void setvampsFactor(QString _value);
+ void setinputSize(QString _value);
+ void settotalSize(QString _value);
+ void setchapter(QString _value);
+ void setcell(QString _value);
+ void setinject(QString _value);
+ void setdvdSize(QString _value);
+ void setchapterSize(QString _value);
+ void setinitStatus(bool _value);
+ void setcontinue (bool _value);
+ void setfirstPass (bool _value);
+ void setforcedFactor(bool _value);
+ void setuseCache(bool _value);
+};
+
+#endif
diff --git a/src/k9playbackoptions.cpp b/src/k9playbackoptions.cpp
new file mode 100644
index 0000000..3bf9715
--- /dev/null
+++ b/src/k9playbackoptions.cpp
@@ -0,0 +1,223 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+
+#include "k9playbackoptions.h"
+#include "k9config.h"
+#include <kpushbutton.h>
+#include <kiconloader.h>
+
+k9PlaybackOptions::k9PlaybackOptions(k9Main *mainWindow, QWidget* parent, const char* name, WFlags fl)
+: PlaybackOptionsw(parent,name,fl)
+{
+
+ setMain( mainWindow);
+ m_main->setPlaybackOptions(this);
+ enable(false);
+ bSeqUp->setPixmap(SmallIcon("1uparrow"));
+ bSeqDown->setPixmap(SmallIcon("1downarrow"));
+ k9Config config;
+ ckMenu->setChecked(config.getKeepMenus());
+ ckMenuClick();
+
+}
+
+k9PlaybackOptions::~k9PlaybackOptions()
+{
+}
+
+/*$SPECIALIZATION$*/
+ void k9PlaybackOptions::setMain(k9Main* _value) {
+ m_main = _value; m_dvd=m_main->dvd;
+}
+
+
+void k9PlaybackOptions::fillTitleList() {
+ QString txt=lbSequence->currentText();
+
+ lbSequence->clear();
+ k9DVDTitle *title=m_dvd->getstart();
+
+ bool found=title !=NULL;
+ //Reconstitution de l'ordre de lecture à partir des titres du DVD
+ while (found) {
+ if (title->isSelected()) {
+ lbItem *item=new lbItem(lbSequence,title->getname());
+ item->setTitle(title);
+ if (title->getname()==txt)
+ lbSequence->setCurrentItem(item);
+ }
+ title=title->getnextTitle();
+ found=title!=NULL;
+ }
+
+
+ for (int i=0;i<m_dvd->gettitleCount();i++) {
+ k9DVDTitle* l_track=m_dvd->gettitle(i);
+ if (l_track->getIndexed()) {
+ QString sTitle=l_track->getname();
+ if(l_track->isSelected()) {
+ bool foundtitle=false;
+ for (uint j=0; j<lbSequence->count();j++) {
+ lbItem *tmp=(lbItem*)lbSequence->item(j);
+ if (tmp->getTitle() == l_track)
+ foundtitle=true;
+ }
+ if (!foundtitle) {
+ lbItem *item=new lbItem(lbSequence,sTitle);
+ item->setTitle(l_track);
+ if (sTitle==txt)
+ lbSequence->setCurrentItem(item);
+ }
+ }
+ }
+ }
+ if (lbSequence->currentItem()==-1)
+ lbSequence->setCurrentItem(0);
+ setSequence();
+ enable(!ckMenu->isChecked() );
+
+}
+
+void k9PlaybackOptions::ckMenuClick() {
+
+ if (m_main!=NULL) {
+ enable((!ckMenu->isChecked()) && m_dvd->getopened());
+ m_main->updateFactor();
+ } else
+ enable(false);
+}
+
+void k9PlaybackOptions::bSeqUpClick() {
+ int cur=lbSequence->currentItem();
+ if (cur >0) {
+ lbItem *lbi=(lbItem*)lbSequence->item(cur);
+ lbSequence->takeItem(lbi);
+ lbSequence->insertItem(lbi,cur-1);
+ lbSequence->setCurrentItem(lbi);
+ }
+ setSequence();
+}
+
+void k9PlaybackOptions::bSeqDownClick() {
+ uint cur=lbSequence->currentItem();
+ if (cur <lbSequence->count()) {
+ lbItem *lbi=(lbItem*)lbSequence->item(cur);
+ lbSequence->takeItem(lbi);
+ lbSequence->insertItem(lbi,cur+1);
+ lbSequence->setCurrentItem(lbi);
+ }
+ setSequence();
+}
+
+void k9PlaybackOptions::setSequence() {
+ for (int i=0;i <m_dvd->gettitleCount();i++)
+ m_dvd->gettitle(i)->setnextTitle( NULL);
+
+ lbItem *lbi = (lbItem*)lbSequence->item(lbSequence->topItem());
+ if (lbi !=NULL) {
+ lbItem *lbi2;
+ m_dvd->setstart(lbi->getTitle());
+ for (uint i=0 ; i < lbSequence->count()-1;i++) {
+ lbi=(lbItem*)lbSequence->item(i);
+ lbi2=(lbItem*)lbSequence->item(i+1);
+ lbi->getTitle()->setnextTitle(lbi2->getTitle());
+ }
+ }
+}
+
+void k9PlaybackOptions::lbSequenceChanged(QListBoxItem *_item) {
+ if (_item == NULL)
+ return;
+ lbItem *lbi=(lbItem*) _item;
+ k9DVDTitle *title=lbi->getTitle();
+ cbDefAudio->clear();
+ cbDefSub->clear();
+ lstAudioDef.clear();
+ lstSubDef.clear();
+ cbDefAudio->insertItem(i18n("default"));
+ lstAudioDef.append(NULL);
+ cbDefSub->insertItem(i18n("none"));
+ lstSubDef.append(NULL);
+
+ for (int i=0;i < title->getaudioStreamCount();i++) {
+ if (title->getaudioStream(i)->getselected()) {
+// if ( !title->getDefAudioSet())
+// title->setDefAudio(title->getaudioStream(i));
+ cbDefAudio->insertItem( QString("%1 - %2").arg(title->getaudioStream(i)->getID()).arg(title->getaudioStream(i)->getlanguage()));
+ if (title->getaudioStream(i)==title->getDefAudio()) {
+ cbDefAudio->setCurrentItem(cbDefAudio->count()-1);
+ }
+ lstAudioDef.append(title->getaudioStream(i));
+ }
+ }
+
+ for (int i=0;i < title->getsubPictureCount();i++) {
+ if (title->getsubtitle(i)->getselected()) {
+ QPixmap icon;
+ cbDefSub->insertItem(QString("%1 - %2").arg(title->getsubtitle(i)->getID().first()).arg(title->getsubtitle(i)->getlanguage()));
+ if (title->getsubtitle(i)==title->getDefSubtitle()) {
+ cbDefSub->setCurrentItem(cbDefSub->count()-1);
+ }
+ lstSubDef.append(title->getsubtitle(i));
+ }
+ }
+
+}
+
+void k9PlaybackOptions::cbDefAudioActivated(int _index) {
+ int cur=lbSequence->currentItem();
+ lbItem *lbi=(lbItem*)lbSequence->item(cur);
+ lbi->getTitle()->setDefAudio(lstAudioDef.at(_index));
+}
+
+void k9PlaybackOptions::cbDefSubActivated(int _index) {
+ int cur=lbSequence->currentItem();
+ lbItem *lbi=(lbItem*)lbSequence->item(cur);
+ lbi->getTitle()->setDefSubtitle(lstSubDef.at(_index));
+}
+
+void k9PlaybackOptions::titleRenamed (k9DVDTitle *_title, QString _newName) {
+ for (uint j=0; j<lbSequence->count();j++) {
+ lbItem *tmp=(lbItem*)lbSequence->item(j);
+ if (tmp->getTitle() == _title) {
+ lbItem *item=new lbItem(NULL,_newName);
+ item->setTitle(_title);
+ lbSequence->changeItem(item,j);
+ break;
+ }
+ }
+
+}
+
+bool k9PlaybackOptions::withMenus() {
+ return ckMenu->isChecked();
+}
+
+void k9PlaybackOptions::setwithMenus(bool _value) {
+ ckMenu->setChecked(_value);
+
+}
+
+
+void k9PlaybackOptions::enable(bool _value) {
+ frPlayback->setEnabled(_value);
+}
+
+void k9PlaybackOptions::clear() {
+ lbSequence->clear();
+ enable(false);
+}
+
+
+#include "k9playbackoptions.moc"
+
diff --git a/src/k9playbackoptions.h b/src/k9playbackoptions.h
new file mode 100644
index 0000000..55ee39d
--- /dev/null
+++ b/src/k9playbackoptions.h
@@ -0,0 +1,79 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9PLAYBACKOPTIONS_H
+#define K9PLAYBACKOPTIONS_H
+#include "k9common.h"
+#include "playbackoptionsw.h"
+#include "k9dvd.h"
+#include "k9main.h"
+#include "k9dvdtitle.h"
+#include <qcheckbox.h>
+#include <qlistbox.h>
+
+class lbItem : public QListBoxText {
+protected:
+ k9DVDTitle *m_title;
+public:
+
+ lbItem(QListBox * listbox, const QString & text = QString::null ):
+ QListBoxText(listbox,text) {}
+ ;
+ void setTitle(k9DVDTitle *_value) {
+ m_title = _value;
+ }
+ k9DVDTitle *getTitle() const {
+ return m_title;
+ }
+};
+
+class k9Main;
+
+class k9PlaybackOptions : public PlaybackOptionsw
+{
+ Q_OBJECT
+
+public:
+ k9PlaybackOptions(k9Main *mainWindow,QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~k9PlaybackOptions();
+ /*$PUBLIC_FUNCTIONS$*/
+ void fillTitleList();
+ k9DVD *m_dvd;
+ k9Main *m_main;
+ void setDvd(k9DVD* _value) {m_dvd = _value;}
+ void setMain(k9Main* _value);
+ void setSequence();
+ void titleRenamed (k9DVDTitle *_title, QString _newName);
+ bool withMenus() ;
+ void setwithMenus(bool _value);
+ void enable(bool _value);
+ void clear();
+public slots:
+ /*$PUBLIC_SLOTS$*/
+ virtual void ckMenuClick();
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+ QPtrList <k9DVDAudioStream> lstAudioDef;
+ QPtrList <k9DVDSubtitle> lstSubDef;
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ virtual void bSeqUpClick();
+ virtual void bSeqDownClick();
+ virtual void cbDefAudioActivated(int _index);
+ virtual void cbDefSubActivated(int _index);
+ virtual void lbSequenceChanged (QListBoxItem * _item);
+};
+
+#endif
+
diff --git a/src/k9prefauthor.cpp b/src/k9prefauthor.cpp
new file mode 100644
index 0000000..6717bce
--- /dev/null
+++ b/src/k9prefauthor.cpp
@@ -0,0 +1,60 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "k9prefauthor.h"
+#include "k9config.h"
+#include <qcombobox.h>
+#include <knuminput.h>
+#include <kcolorbutton.h>
+#include <kfontdialog.h>
+
+k9prefAuthor::k9prefAuthor(QWidget* parent, const char* name, WFlags fl)
+: prefAuthor(parent,name,fl)
+{
+ load();
+}
+
+void k9prefAuthor::load() {
+ k9Config config;
+ cbAudioFormat->setCurrentText(config.getPrefAudioFormat());
+ cbAudioBitrate->setCurrentText(QString::number(config.getPrefAudioBitrate()));
+ inButtonWidth->setValue(config.getPrefButtonWidth());
+ inButtonHeight->setValue(config.getPrefButtonHeight());
+ cbHiliteColor->setColor(config.getPrefButtonHiliteColor());
+ cbTextColor->setColor(config.getPrefButtonTextColor());
+ m_font=config.getPrefButtonFont();
+}
+
+k9prefAuthor::~k9prefAuthor()
+{
+}
+
+/*$SPECIALIZATION$*/
+void k9prefAuthor::bButtonFontClicked()
+{
+ KFontDialog::getFont( m_font );
+}
+
+void k9prefAuthor::save() {
+ k9Config config;
+ config.setPrefAudioFormat(cbAudioFormat->currentText());
+ config.setPrefAudioBitrate(cbAudioBitrate->currentText().toInt());
+ config.setPrefButtonWidth(inButtonWidth->value());
+ config.setPrefButtonHeight(inButtonHeight->value());
+ config.setPrefButtonHiliteColor(cbHiliteColor->color());
+ config.setPrefButtonFont(m_font);
+ config.setPrefButtonTextColor(cbTextColor->color());
+ config.save();
+}
+
+#include "k9prefauthor.moc"
+
diff --git a/src/k9prefauthor.h b/src/k9prefauthor.h
new file mode 100644
index 0000000..be59c40
--- /dev/null
+++ b/src/k9prefauthor.h
@@ -0,0 +1,41 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9PREFAUTHOR_H
+#define K9PREFAUTHOR_H
+#include "k9common.h"
+#include "prefAuthor.h"
+#include <qfont.h>
+
+class k9prefAuthor : public prefAuthor
+{
+ Q_OBJECT
+
+public:
+ k9prefAuthor(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~k9prefAuthor();
+ /*$PUBLIC_FUNCTIONS$*/
+ void load();
+public slots:
+ /*$PUBLIC_SLOTS$*/
+ virtual void bButtonFontClicked();
+ virtual void save();
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+ QFont m_font;
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+
+};
+
+#endif
+
diff --git a/src/k9prefdvd.cpp b/src/k9prefdvd.cpp
new file mode 100644
index 0000000..8238b1c
--- /dev/null
+++ b/src/k9prefdvd.cpp
@@ -0,0 +1,57 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+
+#include "k9prefdvd.h"
+#include "k9config.h"
+#include <kstandarddirs.h>
+#include <kurlrequester.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <klocale.h>
+
+k9prefDVD::k9prefDVD(QWidget* parent, const char* name, WFlags fl)
+: prefDVD(parent,name,fl)
+{
+ k9Config config;
+ urOutput->setMode(2);
+ urOutput->setURL(config.getPrefOutput());
+ ckK3b->setChecked(config.getPrefK3b());
+
+ ckAutoBurn->setChecked(config.getPrefAutoBurn());
+ ckQuickScan->setChecked(config.getQuickScan());
+ ckDvdAuthor->setChecked(config.getUseDvdAuthor());
+ ckDelTmpFiles->setChecked(config.getPrefDelTmpFiles());
+ sbSize->setValue(config.getPrefSize());
+ sbSize->setSuffix(" "+ i18n("MB"));
+}
+
+k9prefDVD::~k9prefDVD()
+{
+}
+
+/*$SPECIALIZATION$*/
+
+void k9prefDVD::save() {
+ k9Config config;
+ config.setPrefOutput( urOutput->url());
+ config.setPrefK3b(ckK3b->isChecked());
+ config.setPrefAutoBurn( ckAutoBurn->isChecked());
+ config.setPrefSize(sbSize->value());
+ config.setQuickScan( ckQuickScan->isChecked());
+ config.setUseDvdAuthor( ckDvdAuthor->isChecked());
+ config.setPrefDelTmpFiles(ckDelTmpFiles->isChecked());
+ config.save();
+}
+
+#include "k9prefdvd.moc"
+
diff --git a/src/k9prefdvd.h b/src/k9prefdvd.h
new file mode 100644
index 0000000..f0479c8
--- /dev/null
+++ b/src/k9prefdvd.h
@@ -0,0 +1,40 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9PREFDVD_H
+#define K9PREFDVD_H
+#include "k9common.h"
+#include "prefDVD.h"
+
+class k9prefDVD : public prefDVD
+{
+ Q_OBJECT
+
+public:
+ k9prefDVD(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~k9prefDVD();
+ /*$PUBLIC_FUNCTIONS$*/
+ void save();
+
+public slots:
+ /*$PUBLIC_SLOTS$*/
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+
+};
+
+#endif
+
diff --git a/src/k9prefmencoder.cpp b/src/k9prefmencoder.cpp
new file mode 100644
index 0000000..b8d92d8
--- /dev/null
+++ b/src/k9prefmencoder.cpp
@@ -0,0 +1,198 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+
+#include "k9prefmencoder.h"
+#include <qlistbox.h>
+#include <qtextedit.h>
+#include "k9mencodercmdgen.h"
+#include <kpushbutton.h>
+#include <kiconloader.h>
+#include <klocale.h>
+
+k9prefMencoder::k9prefMencoder(QWidget* parent, const char* name, WFlags fl)
+: prefMencoder(parent,name,fl)
+{
+ m_update=false;
+ load();
+ btnOpt1->setPixmap(SmallIcon("configure"));
+ btnOpt2->setPixmap(SmallIcon("configure"));
+ btnOpt3->setPixmap(SmallIcon("configure"));
+ btnOptA->setPixmap(SmallIcon("configure"));
+
+}
+
+void k9prefMencoder::load() {
+ lbvCodecs->clear();
+ for (int i=0;i < m_codecs.count();i++) {
+ lbvCodecs->insertItem(m_codecs.getCodecName(i));
+ }
+ lbvCodecs->setCurrentItem(0);
+
+ lbaCodecs->clear();
+ for (int i=0;i < m_audioCodecs.count();i++) {
+ lbaCodecs->insertItem(m_audioCodecs.getCodecName(i));
+ }
+ lbaCodecs->setCurrentItem(0);
+
+}
+
+void k9prefMencoder::lbvCodecsCurrentChanged(QListBoxItem *_item) {
+ if (_item) {
+ int i=lbvCodecs->currentItem();
+ m_update=true;
+ leFourcc->setText(m_codecs.getFourcc(i));
+ teOpt1->setText(m_codecs.getOptions0(i));
+ teOpt2->setText(m_codecs.getOptions1(i));
+ teOpt3->setText(m_codecs.getOptions2(i));
+ leVLabel->setText(_item->text());
+ m_update=false;
+ }
+}
+
+void k9prefMencoder::lbaCodecsCurrentChanged(QListBoxItem *_item) {
+ if (_item) {
+ int i=lbaCodecs->currentItem();
+ m_update=true;
+ teOptA->setText(m_audioCodecs.getOptions(i));
+ leALabel->setText(_item->text());
+ m_update=false;
+ }
+}
+
+void k9prefMencoder::save()
+{
+ m_codecs.save();
+ m_audioCodecs.save();
+
+}
+
+void k9prefMencoder::btnOpt1Clicked() {
+ QString s=teOpt1->text();
+ if( k9MencoderCmdGen::getMencoderOptions(s))
+ teOpt1->setText(s);
+
+}
+void k9prefMencoder::btnOpt2Clicked() {
+ QString s=teOpt2->text();
+ if( k9MencoderCmdGen::getMencoderOptions(s))
+ teOpt2->setText(s);
+
+}
+void k9prefMencoder::btnOpt3Clicked() {
+ QString s=teOpt3->text();
+ if( k9MencoderCmdGen::getMencoderOptions(s))
+ teOpt3->setText(s);
+
+}
+void k9prefMencoder::btnOptAClicked() {
+ QString s=teOptA->text();
+ if( k9MencoderCmdGen::getMencoderOptions(s))
+ teOptA->setText(s);
+
+}
+
+void k9prefMencoder::btnAddVClicked() {
+ lbvCodecs->insertItem(i18n("new profile"));
+ m_codecs.setOptions0(lbvCodecs->count()-1,"-ovc copy");
+ m_codecs.setOptions1(lbvCodecs->count()-1,"-ovc copy");
+ m_codecs.setOptions2(lbvCodecs->count()-1,"-ovc copy");
+ m_codecs.setCodecName(lbvCodecs->count()-1,i18n("new profile"));
+ lbvCodecs->setCurrentItem(lbvCodecs->count()-1);
+
+}
+
+void k9prefMencoder::btnDeleteVClicked() {
+ m_codecs.remove(lbvCodecs->currentItem());
+ lbvCodecs->removeItem(lbvCodecs->currentItem());
+}
+
+void k9prefMencoder::btnAddAClicked() {
+ lbaCodecs->insertItem(i18n("new profile"));
+ m_audioCodecs.setOptions (lbaCodecs->count()-1,"-oac copy");
+ m_audioCodecs.setCodecName(lbaCodecs->count()-1,i18n("new profile"));
+ lbaCodecs->setCurrentItem(lbaCodecs->count()-1);
+
+}
+
+void k9prefMencoder::bResetClicked() {
+ m_codecs.reset();
+ m_audioCodecs.reset();
+ load();
+ lbvCodecs->setCurrentItem(0);
+ lbaCodecs->setCurrentItem(0);
+ lbvCodecsCurrentChanged (lbvCodecs->item(0));
+ lbaCodecsCurrentChanged (lbaCodecs->item(0));
+
+
+}
+
+void k9prefMencoder::btnDeleteAClicked() {
+ m_audioCodecs.remove(lbaCodecs->currentItem());
+ lbaCodecs->removeItem(lbaCodecs->currentItem());
+}
+
+
+void k9prefMencoder::teOptATextChanged() {
+ if (!m_update)
+ m_audioCodecs.setOptions(lbaCodecs->currentItem(),teOptA->text());
+}
+
+void k9prefMencoder::teOpt1TextChanged() {
+ if (!m_update)
+ m_codecs.setOptions0(lbvCodecs->currentItem(),teOpt1->text());
+}
+
+void k9prefMencoder::teOpt2TextChanged() {
+ if (!m_update)
+ m_codecs.setOptions1(lbvCodecs->currentItem(),teOpt2->text());
+
+}
+
+void k9prefMencoder::teOpt3TextChanged() {
+ if (!m_update)
+ m_codecs.setOptions2(lbvCodecs->currentItem(),teOpt3->text());
+
+}
+
+
+void k9prefMencoder::leVLabelTextChanged(const QString &_value) {
+ if (!m_update) {
+ lbvCodecs->changeItem(_value,lbvCodecs->currentItem());
+ m_codecs.setCodecName(lbvCodecs->currentItem(),_value);
+ }
+}
+void k9prefMencoder::leALabelTextChanged(const QString &_value) {
+ if (!m_update) {
+ lbaCodecs->changeItem(_value,lbaCodecs->currentItem());
+ m_audioCodecs.setCodecName(lbaCodecs->currentItem(),_value);
+ }
+}
+
+void k9prefMencoder::leFourccTextChanged(const QString &_value) {
+ if (!m_update) {
+ m_codecs.setFourcc(lbvCodecs->currentItem(),_value);
+ }
+}
+
+
+k9prefMencoder::~k9prefMencoder()
+{
+}
+
+
+
+/*$SPECIALIZATION$*/
+
+
+#include "k9prefmencoder.moc"
+
diff --git a/src/k9prefmencoder.h b/src/k9prefmencoder.h
new file mode 100644
index 0000000..54ab311
--- /dev/null
+++ b/src/k9prefmencoder.h
@@ -0,0 +1,65 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9PREFMENCODER_H
+#define K9PREFMENCODER_H
+
+#include "k9common.h"
+#include "prefMencoder.h"
+#include "k9videocodecs.h"
+#include "k9audiocodecs.h"
+#include <qstringlist.h>
+#include <qstring.h>
+#include <qlineedit.h>
+
+class k9prefMencoder : public prefMencoder
+{
+ Q_OBJECT
+
+public:
+ k9prefMencoder(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~k9prefMencoder();
+ /*$PUBLIC_FUNCTIONS$*/
+ void save(void);
+ void load();
+public slots:
+ /*$PUBLIC_SLOTS$*/
+ void teOptATextChanged();
+
+ void teOpt1TextChanged();
+ void teOpt3TextChanged();
+ void teOpt2TextChanged();
+ void leVLabelTextChanged(const QString &);
+ void leALabelTextChanged(const QString &);
+ void leFourccTextChanged(const QString &);
+private:
+ k9VideoCodecs m_codecs;
+ k9AudioCodecs m_audioCodecs;
+ bool m_update;
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ void lbvCodecsCurrentChanged(QListBoxItem *_item);
+ void lbaCodecsCurrentChanged(QListBoxItem *_item);
+ void btnOpt1Clicked();
+ void btnOpt2Clicked();
+ void btnOpt3Clicked();
+ void btnOptAClicked();
+ void btnAddVClicked();
+ void btnDeleteVClicked();
+ void btnAddAClicked();
+ void btnDeleteAClicked();
+ void bResetClicked();
+};
+
+
+#endif
+
diff --git a/src/k9prefmpeg4.cpp b/src/k9prefmpeg4.cpp
new file mode 100644
index 0000000..db752bb
--- /dev/null
+++ b/src/k9prefmpeg4.cpp
@@ -0,0 +1,110 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "k9common.h"
+#include "k9prefmpeg4.h"
+#include "k9config.h"
+#include <qcombobox.h>
+#include <qspinbox.h>
+#include <qcheckbox.h>
+#include <qlineedit.h>
+#include <qstringlist.h>
+#include <klocale.h>
+#include <qradiobutton.h>
+
+k9prefMPEG4::k9prefMPEG4(QWidget* parent, const char* name, WFlags fl)
+: prefMPEG4(parent,name,fl)
+{
+ load();
+}
+
+void k9prefMPEG4::load() {
+ //KSimpleConfig settings("K9Copy");
+ k9Config config;
+ sbMp4Size->setValue(config.getPrefMp4Size());
+ sbMp4Size->setSuffix(" "+ i18n("MB"));
+ sbMp4NumberCD->setValue(config.getPrefMp4NumberCD());
+ sbAudioGain->setValue(config.getPrefMp4AudioGain());
+
+ leMp4Width->setText(config.getPrefMp4Width());
+ leMp4Height->setText(config.getPrefMp4Height());
+
+ ckMp4AspectRatio->setChecked(config.getPrefMp4AspectRatio());
+ leMp4Height->setEnabled(!ckMp4AspectRatio->isChecked());
+
+ ck2passes->setChecked(config.getPrefMp42Passes());
+
+ leMp4AudioBitrate->setText(config.getPrefMp4AudioBitrate());
+ leMp4VideoBitrate->setText(config.getPrefMp4VideoBitrate());
+
+ QStringList m_codecLabels=config.getCodecLabels();
+ QStringList m_codecLabelsAudio=config.getCodecLabelsAudio();
+
+ cbMp4Codec->clear();
+ cbMp4Codec->insertStringList(m_codecLabels);
+ cbMp4Codec->setCurrentItem(config.getPrefMp4Codec());
+
+ cbMp4AudioCodec->clear();
+ cbMp4AudioCodec->insertStringList(m_codecLabelsAudio);
+ cbMp4AudioCodec->setCurrentItem(config.getPrefMp4AudioCodec());
+
+ ckUseCache->setChecked(config.getPrefUseCellCache());
+
+ if(config.getPrefMp4VideoBitrate() =="")
+ rbSize->setChecked(true);
+ else
+ rbBitrate->setChecked(true);
+ leMp4VideoBitrate->setEnabled(rbBitrate->isChecked());
+ sbMp4Size->setEnabled(rbSize->isChecked());
+
+}
+
+
+k9prefMPEG4::~k9prefMPEG4()
+{
+}
+
+void k9prefMPEG4::save() {
+ k9Config config;
+ config.setPrefMp4Codec(cbMp4Codec->currentItem());
+ config.setPrefMp4AudioCodec(cbMp4AudioCodec->currentItem());
+ config.setPrefMp4Size( (int)sbMp4Size->value());
+ config.setPrefMp4NumberCD( (int)sbMp4NumberCD->value());
+ config.setPrefMp4AudioGain( (int)sbAudioGain->value());
+ config.setPrefMp4Width( leMp4Width->text());
+ config.setPrefMp4Height(leMp4Height->text());
+ config.setPrefMp4AspectRatio( ckMp4AspectRatio->isChecked());
+ config.setPrefMp4AudioBitrate( leMp4AudioBitrate->text());
+ config.setPrefMp4VideoBitrate( leMp4VideoBitrate->text());
+ config.setPrefMp42Passes(ck2passes->isChecked());
+ config.setPrefUseCellCache(ckUseCache->isChecked());
+ config.save();
+}
+
+void k9prefMPEG4::ckMp4AspectRatioClick() {
+ leMp4Height->setEnabled(!ckMp4AspectRatio->isChecked());
+ if (ckMp4AspectRatio->isChecked()) leMp4Height->setText("");
+}
+
+void k9prefMPEG4::rgVideoSizeChanged(){
+ if (rbSize->isChecked())
+ leMp4VideoBitrate->setText("");
+ leMp4VideoBitrate->setEnabled(rbBitrate->isChecked());
+ sbMp4Size->setEnabled(rbSize->isChecked());
+
+}
+
+/*$SPECIALIZATION$*/
+
+
+#include "k9prefmpeg4.moc"
+
diff --git a/src/k9prefmpeg4.h b/src/k9prefmpeg4.h
new file mode 100644
index 0000000..b8f692d
--- /dev/null
+++ b/src/k9prefmpeg4.h
@@ -0,0 +1,58 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9PREFMPEG4_H
+#define K9PREFMPEG4_H
+
+#include "prefMPEG4.h"
+#include "k9common.h"
+class k9prefMPEG4 : public prefMPEG4
+{
+ Q_OBJECT
+
+public:
+ k9prefMPEG4(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~k9prefMPEG4();
+ /*$PUBLIC_FUNCTIONS$*/
+ void save();
+ void load();
+public slots:
+ /*$PUBLIC_SLOTS$*/
+
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+ virtual void ckMp4AspectRatioClick();
+ virtual void rgVideoSizeChanged();
+
+ virtual void cbMp4CodecActivated( int ){};
+ virtual void cbMp4AudioCodecActivated( int ){};
+
+ virtual void ck2passesClicked(){};
+ virtual void sbMp4SizeValueChanged( int ){};
+ virtual void sbAudioGainValueChanged( int ){};
+
+ virtual void sbMp4NumberCDValueChanged( int ) {};
+ virtual void leMp4WidthTextChanged( const QString & ) {};
+ virtual void leMp4HeightTextChanged( const QString & ) {};
+ virtual void leMp4AudioBitrateTextChanged( const QString & ) {};
+ virtual void leMp4VideoBitrateTextChanged( const QString & ) {};
+
+ virtual void ckUseCacheClick() {};
+
+
+};
+
+#endif
+
diff --git a/src/k9prefpreview.cpp b/src/k9prefpreview.cpp
new file mode 100644
index 0000000..e1c4fbf
--- /dev/null
+++ b/src/k9prefpreview.cpp
@@ -0,0 +1,76 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+
+#include "k9prefpreview.h"
+#include "k9config.h"
+#include <qwidgetstack.h>
+#include <qradiobutton.h>
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <klocale.h>
+
+k9prefPreview::k9prefPreview(QWidget* parent, const char* name, WFlags fl)
+: prefPreview(parent,name,fl)
+{ load();
+}
+
+k9prefPreview::~k9prefPreview()
+{
+}
+
+/*$SPECIALIZATION$*/
+
+void k9prefPreview::load() {
+ k9Config config;
+
+ ckUseGL->setChecked(config.getUseGL());
+ cbVout->setCurrentItem(config.getMplayerVout());
+ cbAout->setCurrentItem(config.getMplayerAout());
+ rbMplayer->setChecked(config.getUseMplayer());
+ rbInternal->setChecked(!config.getUseMplayer());
+
+ if (rbMplayer->isChecked())
+ rbMplayerClick();
+ else
+ rbInternalClick();
+
+}
+
+
+
+void k9prefPreview::save() {
+ k9Config config;
+
+ if (rbMplayer->isChecked()) {
+ config.setMplayerVout( cbVout->currentItem());
+ config.setMplayerAout( cbAout->currentItem());
+ }else {
+ config.setUseGL( ckUseGL->isChecked());
+ }
+ config.setUseMplayer( rbMplayer->isChecked());
+ config.save();
+}
+
+
+void k9prefPreview::rbInternalClick() {
+ wsOptions->raiseWidget(0);
+}
+
+void k9prefPreview::rbMplayerClick() {
+ wsOptions->raiseWidget(1);
+}
+
+
+
+#include "k9prefpreview.moc"
+
diff --git a/src/k9prefpreview.h b/src/k9prefpreview.h
new file mode 100644
index 0000000..b5e661f
--- /dev/null
+++ b/src/k9prefpreview.h
@@ -0,0 +1,41 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9PREFPREVIEW_H
+#define K9PREFPREVIEW_H
+
+#include "k9common.h"
+#include "prefpreview.h"
+
+class k9prefPreview : public prefPreview
+{
+ Q_OBJECT
+
+public:
+ k9prefPreview(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~k9prefPreview();
+ /*$PUBLIC_FUNCTIONS$*/
+ void save();
+public slots:
+ /*$PUBLIC_SLOTS$*/
+ void rbInternalClick();
+ void rbMplayerClick();
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+ void load();
+protected slots:
+ /*$PROTECTED_SLOTS$*/
+
+};
+
+#endif
+
diff --git a/src/k9redirect.cpp b/src/k9redirect.cpp
new file mode 100644
index 0000000..f5d2066
--- /dev/null
+++ b/src/k9redirect.cpp
@@ -0,0 +1,44 @@
+//
+// C++ Implementation: k9redirect
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "k9redirect.h"
+#include <kprocess.h>
+k9Redirect::k9Redirect()
+{
+}
+
+
+k9Redirect::~k9Redirect()
+{
+}
+
+void k9Redirect::execute() {
+ KProcess *p=new KProcess();
+ *p << "mencoder";
+ *p << "-oac" << "lavc" << "-ovc" << "lavc" << "-of" << "mpeg";
+ *p << "-mpegopts" << "format=dvd" << "-vf" << "scale=720:576,harddup" << "-srate" << "48000" << "-af" << "lavcresample=48000" << "-lavcopts" << "vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:acodec=ac3:abitrate=192:aspect=16/9" << "-ofps" << "25" << "-o" << "/tmp/kde-jmp/k9copy/tmp.mpeg" << "-ss" << "00:00:00.000" << "-endpos" << "00:00:57.360" << "-really-quiet" << "/home/jmp/t.avi";
+ p->start(KProcess::NotifyOnExit);
+ p->wait();
+
+
+ QFile f("/tmp/kde-jmp/k9copy/tmp.mpeg");
+ QFile fout;
+ f.open(IO_ReadOnly );
+ fout.open(IO_WriteOnly,stdout);
+ while ( ! f.atEnd()) {
+ char *buf=new char [2048];
+ f.readBlock(buf,2048);
+ fout.writeBlock(buf,2048);
+ delete buf;
+ }
+ f.close();
+ fout.close();
+}
diff --git a/src/k9redirect.h b/src/k9redirect.h
new file mode 100644
index 0000000..24b3cd5
--- /dev/null
+++ b/src/k9redirect.h
@@ -0,0 +1,28 @@
+//
+// C++ Interface: k9redirect
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef K9REDIRECT_H
+#define K9REDIRECT_H
+
+#include "k9common.h"
+#include <qfile.h>
+/**
+ @author Jean-Michel PETIT <k9copy@free.fr>
+*/
+class k9Redirect{
+public:
+ k9Redirect();
+
+ ~k9Redirect();
+ void execute();
+};
+
+#endif
diff --git a/src/k9settings.cpp b/src/k9settings.cpp
new file mode 100644
index 0000000..3bdad1e
--- /dev/null
+++ b/src/k9settings.cpp
@@ -0,0 +1,97 @@
+//
+// C++ Implementation: k9settings
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#include "k9settings.h"
+
+#include <qframe.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+#include <qlayout.h>
+
+k9settings::k9settings(QWidget *parent,const QString &caption): KDialogBase (IconList,caption,
+ Ok|Apply|Cancel, Ok) {
+
+ setInitialSize(QSize(750,350), false);
+
+ QFrame *frDevices;
+ frDevices=addPage (i18n("Devices"),i18n("Devices not detected by k9copy"),KGlobal::iconLoader()->loadIcon("blockdevice", KIcon::Panel, KIcon::SizeMedium));
+ QGridLayout *grid = new QGridLayout(frDevices, 0, 0, 10 );
+ m_configDlg=new kConfigDlg(frDevices);
+ grid->addWidget(m_configDlg,0,0);
+
+
+ QFrame *frDVD;
+ frDVD=addPage (i18n("DVD"),i18n("DVD Backup"),KGlobal::iconLoader()->loadIcon("dvdcopy", KIcon::Panel, KIcon::SizeMedium));
+ grid = new QGridLayout(frDVD, 0, 0, 10 );
+ m_prefDVD =new k9prefDVD(frDVD);
+ grid->addWidget(m_prefDVD,0,0);
+
+ //TODO afficher uniquement si mencoder et mplayer installés
+
+ QFrame *frMencoder;
+ frMencoder=addPage (i18n("MEncoder"),i18n("MPEG-4 Codecs"),KGlobal::iconLoader()->loadIcon("mencoder", KIcon::Panel, KIcon::SizeMedium));
+ m_prefMencoder =new k9prefMencoder(frMencoder);
+
+
+
+ QFrame *frMPEG4;
+ frMPEG4=addPage (i18n("MPEG-4"),i18n("MPEG-4 Encoding"),KGlobal::iconLoader()->loadIcon("mp4", KIcon::Panel, KIcon::SizeMedium));
+ grid = new QGridLayout(frMPEG4, 0, 0, 10 );
+ m_prefMPEG4 =new k9prefMPEG4(frMPEG4);
+ grid->addWidget(m_prefMPEG4,0,0);
+
+ grid = new QGridLayout(frMencoder, 0, 0, 10 );
+ grid->addWidget(m_prefMencoder,0,0);
+
+ QFrame *frPreview;
+ frPreview=addPage (i18n("Preview"),i18n("Title preview"),KGlobal::iconLoader()->loadIcon("mplayer", KIcon::Panel, KIcon::SizeMedium));
+ grid = new QGridLayout(frPreview, 0, 0, 10 );
+ m_prefPreview =new k9prefPreview(frPreview);
+ grid->addWidget(m_prefPreview,0,0);
+
+ QFrame *frAuthor;
+ frAuthor=addPage(i18n("Authoring"),i18n("Authoring"),KGlobal::iconLoader()->loadIcon("author",KIcon::Panel,KIcon::SizeMedium));
+ grid = new QGridLayout(frAuthor, 0, 0, 10 );
+ m_prefAuthor =new k9prefAuthor(frAuthor);
+ grid->addWidget(m_prefAuthor,0,0);
+
+
+ connect(this, SIGNAL(okClicked()), SLOT(slotOkClicked()));
+ connect(this, SIGNAL(applyClicked()), SLOT(slotApplyClicked()));
+}
+
+void k9settings::slotOkClicked() {
+ m_configDlg->save();
+ m_prefDVD->save();
+ m_prefMPEG4->save();
+ m_prefMencoder->save();
+ m_prefPreview->save();
+ m_prefAuthor->save();
+}
+
+void k9settings::slotApplyClicked() {
+ slotOkClicked();
+
+ m_prefMPEG4->load();
+}
+
+k9settings::~k9settings() {
+ /* delete m_configDlg;
+ delete m_prefDVD;
+ delete m_prefMPEG4;
+ delete m_prefMencoder;
+ delete m_prefPreview;
+*/
+}
+
+#include "k9settings.moc"
diff --git a/src/k9settings.h b/src/k9settings.h
new file mode 100644
index 0000000..d1cc237
--- /dev/null
+++ b/src/k9settings.h
@@ -0,0 +1,46 @@
+//
+// C++ Interface: k9settings
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef K9SETTINGS_H
+#define K9SETTINGS_H
+
+#include "k9common.h"
+#include "kconfigdlg.h"
+#include "k9prefdvd.h"
+#include "k9prefmpeg4.h"
+#include "k9prefmencoder.h"
+#include "k9prefpreview.h"
+#include "k9prefauthor.h"
+#include <kdialogbase.h>
+
+/**
+ @author Jean-Michel PETIT <k9copy@free.fr>
+*/
+class k9settings:public KDialogBase{
+Q_OBJECT
+public:
+ k9settings(QWidget *parent,const QString &caption);
+
+ virtual ~k9settings();
+
+private:
+ kConfigDlg *m_configDlg;
+ k9prefDVD *m_prefDVD;
+ k9prefMPEG4 *m_prefMPEG4;
+ k9prefMencoder *m_prefMencoder;
+ k9prefPreview *m_prefPreview;
+ k9prefAuthor *m_prefAuthor;
+private slots:
+ void slotOkClicked();
+ void slotApplyClicked();
+};
+
+#endif
diff --git a/src/k9titlefactor.cpp b/src/k9titlefactor.cpp
new file mode 100644
index 0000000..d020e52
--- /dev/null
+++ b/src/k9titlefactor.cpp
@@ -0,0 +1,145 @@
+//
+// C++ Implementation:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+
+#include "k9titlefactor.h"
+#include "k9cellcopylist.h"
+#include "k9dvdsize.h"
+#include <qgroupbox.h>
+#include <qslider.h>
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <klocale.h>
+
+
+
+k9TitleFactor::k9TitleFactor(QWidget* parent, const char* name, WFlags fl)
+ : titleFactor(parent,name,fl) {
+ m_current=NULL;
+ m_slFactorPressed=false;
+ m_factor=-1;
+ m_dvd=NULL;
+ m_updating=false;
+ SelectionChanged( NULL,m_withMenus);
+ m_useDvdAuthor=false;
+ slFactor->setPageStep(0);
+}
+
+k9TitleFactor::~k9TitleFactor() {}
+
+/*$SPECIALIZATION$*/
+void k9TitleFactor::setUseDvdAuthor( bool _value) {
+ m_useDvdAuthor=_value;
+}
+
+float k9TitleFactor::getFactor() {
+ if (m_factor==-1)
+ m_factor=m_dvd->getfactor( m_withMenus,false,m_useDvdAuthor);
+ return m_factor;
+}
+
+void k9TitleFactor::ckAutoClicked(bool checked) {
+ if (m_current!=NULL && !m_updating) {
+ m_current->setforceFactor(checked);
+ if ( checked) {
+ m_current->setfactor( getFactor());
+ slFactor->setValue(m_current->getfactor()*100.0);
+ setMinFactor();
+ } else {
+ slFactor->setValue(getFactor()*100.0);
+ slFactor->setMinValue(100);
+ }
+
+ }
+}
+
+void k9TitleFactor::slFactorReleased() {
+ m_slFactorPressed=false;
+}
+
+void k9TitleFactor::slFactorPressed() {
+ if (m_current !=NULL) {
+ m_current->setforceFactor(true);
+ setMinFactor();
+ }
+ m_slFactorPressed=true;
+
+}
+
+void k9TitleFactor::slFactor_valueChanged( int ) {
+ if (m_current !=NULL ) {
+ if (m_slFactorPressed) {
+ m_current->setfactor( (double)slFactor->value() /100);
+ for (int i=0;i <m_current->getTitles().count();i++) {
+ k9DVDTitle * title=m_current->getTitles().at(i);
+ title->setfactor( (double)slFactor->value() /100);
+ }
+ m_factor=-1;
+ }
+ if (m_current->getforceFactor())
+ tFactor->setText(QString("%1").arg(m_current->getfactor(),4,'f',2));
+ else
+ tFactor->setText(QString("%1").arg(getFactor(),4,'f',2));
+ }
+
+}
+
+void k9TitleFactor::changedTitle(k9DVDTitle *_title) {
+ if (_title ==NULL) {
+ gbTitle->hide();
+ lbTitle->setText(i18n("Select a Title in the treeview..."));
+ return;
+ }
+
+ gbTitle->show();
+ m_current=_title;
+
+ m_updating=true;
+ gbTitle->setChecked(m_current->getforceFactor());
+ m_updating=false;
+
+ lbTitle->setText(QString(i18n("Shrink Factor for %1")).arg(m_current->getname()));
+ if (m_current->getforceFactor()) {
+ slFactor->setValue(m_current->getfactor()*100.0);
+ tFactor->setText(QString("%1").arg(m_current->getfactor(),4,'f',2));
+ setMinFactor();
+ } else {
+ slFactor->setValue(getFactor()*100.0);
+ tFactor->setText(QString("%1").arg(getFactor(),4,'f',2));
+ slFactor->setMinValue(100);
+ }
+
+}
+
+
+void k9TitleFactor::setMinFactor() {
+ k9CellCopyList *lst=new k9CellCopyList(m_dvd->getdvd(),m_dvd);
+ double minFactor=lst->getMinFactor( true); //TODO : corriger pour copie sans menus
+ slFactor->setMinValue(minFactor*100);
+
+ delete lst;
+}
+
+void k9TitleFactor::SelectionChanged( k9DVD *_dvd,bool _withMenus) {
+ m_dvd=_dvd;
+ if (_dvd==NULL)
+ m_current=NULL;
+ m_factor=-1;
+ m_withMenus=_withMenus;
+
+ changedTitle( m_current);
+
+}
+
+
+#include "k9titlefactor.moc"
+
diff --git a/src/k9titlefactor.h b/src/k9titlefactor.h
new file mode 100644
index 0000000..65a02f9
--- /dev/null
+++ b/src/k9titlefactor.h
@@ -0,0 +1,55 @@
+//
+// C++ Interface:
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2006
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+
+#ifndef K9TITLEFACTOR_H
+#define K9TITLEFACTOR_H
+
+#include "k9common.h"
+#include "titlefactor.h"
+#include "k9dvd.h"
+#include "k9dvdtitle.h"
+
+
+class k9TitleFactor : public titleFactor
+{
+ Q_OBJECT
+
+public:
+ k9TitleFactor(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+ ~k9TitleFactor();
+ /*$PUBLIC_FUNCTIONS$*/
+private :
+ k9DVDTitle *m_current;
+ k9DVD *m_dvd;
+ bool m_slFactorPressed;
+ bool m_withMenus;
+ bool m_useDvdAuthor;
+ float m_factor;
+ bool m_updating;
+public slots:
+ /*$PUBLIC_SLOTS$*/
+ virtual void ckAutoClicked(bool _checked);
+ virtual void slFactorReleased();
+ virtual void slFactorPressed();
+ virtual void slFactor_valueChanged( int );
+ virtual void SelectionChanged( k9DVD *_dvd,bool _withMenus);
+ virtual void changedTitle(k9DVDTitle *_title);
+ virtual void setUseDvdAuthor(bool _value);
+protected:
+ /*$PROTECTED_FUNCTIONS$*/
+ void setMinFactor();
+ float getFactor();
+
+};
+
+#endif
+
diff --git a/src/k9updatefactor.cpp b/src/k9updatefactor.cpp
new file mode 100644
index 0000000..76a99c5
--- /dev/null
+++ b/src/k9updatefactor.cpp
@@ -0,0 +1,43 @@
+//
+// C++ Implementation: k9updatefactor
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#include "k9updatefactor.h"
+
+k9UpdateFactor::k9UpdateFactor(QObject *parent, const char *name)
+ : QObject(parent, name), QThread()
+{
+}
+
+
+k9UpdateFactor::~k9UpdateFactor()
+{
+ wait();
+}
+
+void k9UpdateFactor::run(){
+ do {
+ m_restart=false;
+ emit updateFactor_internal();
+ } while (m_restart);
+}
+
+void k9UpdateFactor::updateFactor() {
+ m_mutex.lock();
+ if (running()) {
+ m_restart=true;
+ }
+ else
+ start();
+ m_mutex.unlock();
+}
+
+
+#include "k9updatefactor.moc"
diff --git a/src/k9updatefactor.h b/src/k9updatefactor.h
new file mode 100644
index 0000000..8ca98e2
--- /dev/null
+++ b/src/k9updatefactor.h
@@ -0,0 +1,42 @@
+//
+// C++ Interface: k9updatefactor
+//
+// Description:
+//
+//
+// Author: Jean-Michel PETIT <k9copy@free.fr>, (C) 2007
+//
+// Copyright: See COPYING file that comes with this distribution
+//
+//
+#ifndef K9UPDATEFACTOR_H
+#define K9UPDATEFACTOR_H
+
+#include "k9common.h"
+#include <qobject.h>
+#include <qthread.h>
+#include <qmutex.h>
+/**
+ @author Jean-Michel PETIT <k9copy@free.fr>
+*/
+
+class k9Main;
+class k9UpdateFactor : public QObject, public QThread
+{
+Q_OBJECT
+private:
+ QMutex m_mutex;
+ bool m_restart;
+protected:
+ void run();
+public:
+ k9UpdateFactor(QObject *parent = 0, const char *name = 0);
+
+ ~k9UpdateFactor();
+ void updateFactor();
+signals:
+ void updateFactor_internal();
+
+};
+
+#endif
diff --git a/src/kconfigdlg.cpp b/src/kconfigdlg.cpp
new file mode 100644
index 0000000..1507939
--- /dev/null
+++ b/src/kconfigdlg.cpp
@@ -0,0 +1,151 @@
+/**************************************************************************
+* 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 "kconfigdlg.h"
+#include "kmessagebox.h"
+
+#include <kiconloader.h>
+#include <kpushbutton.h>
+
+#include <kstdguiitem.h>
+#include <kguiitem.h>
+#include "k9config.h"
+
+kConfigDlg::kConfigDlg(QWidget *parent)
+ : configDlg(parent)
+{
+ QStringList ldev;
+ QStringList llabels;
+ QStringList lIO;
+ tblDevices->setColumnWidth(0,150);
+ tblDevices->setColumnWidth(1,210);
+ tblDevices->setColumnWidth(2,40);
+ tblDevices->setColumnWidth(3,45);
+ //KSimpleConfig settings("K9Copy");
+ k9Config config;
+
+ ldev=config.getDevices();
+ llabels=config.getDevicesLabels();
+ lIO=config.getDevicesIO();
+ int row=0;
+ for ( QStringList::Iterator it = ldev.begin(); it != ldev.end(); ++it )
+ {
+ tblDevices->setNumRows(row+1);
+ tblDevices->setText(row,0,(*it));
+ QStringList::Iterator it2=llabels.at(row);
+ tblDevices->setText(row,1,(*it2));
+
+ row++;
+
+ }
+ for ( int j = 0; j < tblDevices->numRows(); ++j )
+ {
+ QCheckTableItem *I = new QCheckTableItem( tblDevices, "" );
+ QCheckTableItem *O = new QCheckTableItem( tblDevices, "" ) ;
+ QStringList::Iterator it=lIO.at(j);
+ QString c=(*it);
+ if((c =="I") || (c =="IO")) I->setChecked(true);
+ if((c =="O") || (c =="IO")) O->setChecked(true);
+ tblDevices->setItem( j, 2, I );
+ tblDevices->setItem( j, 3, O);
+ }
+
+
+// buttonCancel->setIconSet(KStdGuiItem::cancel().iconSet());
+// buttonOk->setIconSet(KStdGuiItem::ok().iconSet());
+}
+
+
+kConfigDlg::~kConfigDlg()
+{}
+
+
+
+
+/*!
+ \fn kConfigDlg::bAddClick()
+ */
+void kConfigDlg::bAddClick()
+{
+ tblDevices->setNumRows(tblDevices->numRows()+1);
+ QCheckTableItem *I = new QCheckTableItem( tblDevices, "" );
+ QCheckTableItem *O = new QCheckTableItem( tblDevices, "" ) ;
+ tblDevices->setItem( tblDevices->numRows()-1, 2, I );
+ tblDevices->setItem( tblDevices->numRows()-1, 3, O);
+}
+
+
+/*!
+ \fn kConfigDlg::bRemoveClick()
+ */
+void kConfigDlg::bRemoveClick()
+{
+ tblDevices->removeRow(tblDevices->currentRow());
+}
+
+
+void kConfigDlg::save()
+{
+ QStringList ldev;
+ QStringList llabels;
+ QStringList lIO;
+ //KSimpleConfig settings("K9Copy");
+ k9Config config;
+ ldev.clear();
+ llabels.clear();
+ for (int i=0;i<tblDevices->numRows();i++)
+ {
+ QString c=tblDevices->text(i,0);
+ if (!c.isEmpty())
+ {
+ if (QFile::exists(c))
+ {
+ ldev.append(tblDevices->text(i,0));
+ c=tblDevices->text(i,1);
+ if (c.isEmpty()) c=tblDevices->text(i,0);
+ llabels.append(c);
+ QCheckTableItem *I = (QCheckTableItem*)tblDevices->item(i,2);
+ QCheckTableItem *O = (QCheckTableItem*)tblDevices->item(i,3);
+ if (O->isChecked() && I->isChecked())
+ {
+ lIO.append("IO");
+ }
+ else
+ {
+ if (O->isChecked()) lIO.append("O");
+ if (I->isChecked()) lIO.append("I");
+ if ((!O->isChecked()) && (!I->isChecked()))
+ {
+ lIO.append("x");
+ }
+ }
+ }
+ else
+ {
+ KMessageBox::error( this, c + " is not a valid device", "Devices");
+ }
+ }
+ }
+
+ config.setDevicesLabels(llabels);
+ config.setDevices(ldev);
+ config.setDevicesIO(lIO);
+ config.save();
+}
diff --git a/src/kconfigdlg.h b/src/kconfigdlg.h
new file mode 100644
index 0000000..7dbc016
--- /dev/null
+++ b/src/kconfigdlg.h
@@ -0,0 +1,44 @@
+/**************************************************************************
+* 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. *
+***************************************************************************/
+#ifndef KCONFIGDLG_H
+#define KCONFIGDLG_H
+
+#include "k9common.h"
+#include <configDlg.h>
+#include <qtable.h>
+#include <qstringlist.h>
+#include <qfile.h>
+
+/**
+@author Jean-Michel PETIT
+*/
+class kConfigDlg : public configDlg
+{
+public:
+ kConfigDlg(QWidget *parent);
+
+ ~kConfigDlg();
+ void bAddClick();
+ void bRemoveClick();
+ void save();
+
+};
+
+#endif
diff --git a/src/kviewmpeg2.cpp b/src/kviewmpeg2.cpp
new file mode 100755
index 0000000..899f31d
--- /dev/null
+++ b/src/kviewmpeg2.cpp
@@ -0,0 +1,229 @@
+/**************************************************************************
+* 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 "k9common.h"
+#include <qpixmap.h>
+#include <qpainter.h>
+#include <qlabel.h>
+#include <qimage.h>
+#include <qpaintdevice.h>
+#include <qslider.h>
+#include <qapplication.h>
+#include <qtoolbutton.h>
+#include <qlayout.h>
+
+#include <string.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <klocale.h>
+#include <kiconloader.h>
+#include "kviewmpeg2.h"
+#include "k9config.h"
+
+
+
+k9Widget::k9Widget(QWidget *parent):QWidget(parent) {
+ m_image=NULL;
+}
+
+void k9Widget::setImage(QImage *_image) {
+ m_image=_image;
+ //paintEvent( NULL);
+ repaint(FALSE);
+}
+
+void k9Widget::paintEvent( QPaintEvent *_event) {
+ setPaletteBackgroundColor(Qt::black);
+ int top,left;
+ if (m_image !=NULL) {
+ QPainter p(this);
+ double wratio=(double)width()/(double)m_image->width();
+ double hratio=(double)height()/(double)m_image->height();
+ double ratio= wratio < hratio ? wratio:hratio;
+
+ top =(int) (height() -m_image->height()*ratio)/2+1;
+ left =(int) (width() -m_image->width()*ratio)/2 +1;
+
+ p.scale(ratio,ratio);
+
+ p.drawImage((int)(left/ratio),(int)(top/ratio),*m_image);
+
+ p.end();
+ }
+}
+
+kViewMPEG2::kViewMPEG2() {
+ m_widget=NULL;
+ m_GLwidget=NULL;
+ m_layout=NULL;
+ bPlay->setPixmap(SmallIcon("player_play"));
+ bStop->setPixmap(SmallIcon("player_stop"));
+ connect(&m_player , SIGNAL(setPosition(uint32_t)), this, SLOT(setPosition(uint32_t)));
+ connect(&m_player , SIGNAL(setMax(uint32_t)), this, SLOT(setMax(uint32_t)));
+ connect(&m_player , SIGNAL(setMin(uint32_t)), this, SLOT(setMin(uint32_t)));
+ lockSlider=false;
+ stopped=true;
+
+ m_layout=new QGridLayout(label,1,1);
+
+#ifdef HAVE_OPENGL
+
+ readSettings();
+#else
+
+ m_prefUseGL=FALSE;
+#endif
+ //disable the option use_gl, so if k9copy crash, we restart without gl
+ if (m_prefUseGL) {
+ k9Config config;
+ config.setUseGL( false);
+ config.save();
+ }
+ m_player.getDecoder()->setUseGL(m_prefUseGL);
+ if (m_prefUseGL) {
+ connect(m_player.getDecoder() , SIGNAL(ppmReady(uchar *,int,int,int)), this, SLOT(drawppm(uchar *,int,int,int)));
+
+ m_GLwidget= k9GLWidget::createWidget(label);
+ m_widget=NULL;
+ m_layout->addWidget(m_GLwidget,0,0);
+
+ //init ok, we can put the gl flag to true
+ k9Config config;
+ config.setUseGL( true);
+ config.save();
+
+ } else {
+ connect(m_player.getDecoder() , SIGNAL(pixmapReady(QImage *)), this, SLOT(drawPixmap(QImage *)));
+ m_widget=new k9Widget(label);
+ m_layout->addWidget(m_widget,0,0);
+
+ m_GLwidget=NULL;
+ }
+
+}
+
+
+void kViewMPEG2::readSettings() {
+ m_player.stop();
+
+ //KSimpleConfig settings("K9Copy");
+ k9Config config;
+ m_prefUseGL=config.getUseGL();
+ //m_prefUseGL=settings.readEntry("/options/useGL",0).toInt();
+
+}
+
+
+kViewMPEG2::~kViewMPEG2() {
+ stopped=true;
+ m_player.stop();
+}
+
+
+void kViewMPEG2::lock() {
+ mutex.lock();
+}
+
+void kViewMPEG2::unlock() {
+ mutex.unlock();
+}
+
+void kViewMPEG2::setPosition( uint32_t _position) {
+ if (!lockSlider)
+ slider->setValue(_position);
+}
+
+void kViewMPEG2::setMax( uint32_t _position) {
+ slider->setMaxValue(_position);
+}
+
+void kViewMPEG2::setMin(uint32_t _position) {
+ slider->setMinValue(_position);
+}
+
+
+/** No descriptions */
+void kViewMPEG2::drawPixmap(QImage *image) {
+ if (qApp==NULL)
+ return;
+ if (qApp->tryLock()) {
+ m_widget->setImage( image);
+ if (qApp!=NULL)
+ qApp->unlock();
+ }
+}
+
+/** No descriptions */
+void kViewMPEG2::drawppm(uchar *_buf,int _width,int _height,int _len) {
+ if (qApp==NULL)
+ return;
+// if (qApp->tryLock()) {
+ m_GLwidget->setImage(_buf,_width,_height,_len);
+ // if (qApp !=NULL)
+ // qApp->unlock();
+ // } else
+ // free(_buf);
+}
+
+
+void kViewMPEG2::bPlayClick() {
+ m_player.play();
+}
+
+
+int kViewMPEG2::open (k9DVD *_dvd,k9DVDTitle * title,int chapter) {
+ m_player.open(_dvd->getdvd()->getDvd(), _dvd->getDevice(),title,chapter);
+}
+
+
+/** No descriptions */
+void kViewMPEG2::setError(const QString & err) {
+ error=true;
+ errMsg=err;
+}
+
+
+void kViewMPEG2::resizeEvent(QResizeEvent *_event) {}
+
+void kViewMPEG2::bStopClick() {
+ m_player.stop();
+}
+
+void kViewMPEG2::sliderReleased() {
+ pause=true;
+ int i;
+ i=slider->value();
+ m_player.updatePos(i);
+ lockSlider=false;
+
+}
+
+void kViewMPEG2::closeEvent( QCloseEvent* ce ) {
+ stopped=true;
+ ce->accept();
+ return;
+
+}
+/** No descriptions */
+void kViewMPEG2::sliderPressed() {
+ lockSlider=true;
+}
diff --git a/src/kviewmpeg2.h b/src/kviewmpeg2.h
new file mode 100755
index 0000000..bd21253
--- /dev/null
+++ b/src/kviewmpeg2.h
@@ -0,0 +1,101 @@
+/**************************************************************************
+* 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. *
+***************************************************************************/
+
+#ifndef KVIEWMPEG2_H
+#define KVIEWMPEG2_H
+
+#include "k9dvdtitle.h"
+
+#include <qthread.h>
+#include <viewmpeg2.h>
+#include <qwidget.h>
+#include <qstring.h>
+#include <qevent.h>
+#include <qmutex.h>
+#include <qgl.h>
+#include "k9plaympeg2.h"
+#include "k9glwidget.h"
+#include "k9mplayer.h"
+
+/**
+ *@author
+ */
+
+class k9Widget : public QWidget {
+Q_OBJECT
+protected:
+ QImage *m_image;
+ void paintEvent ( QPaintEvent * _event);
+public:
+ k9Widget (QWidget *_parent);
+ void setImage(QImage *_image);
+};
+
+
+class kViewMPEG2 : public ViewMPEG2 {
+Q_OBJECT
+public:
+ kViewMPEG2();
+ ~kViewMPEG2();
+private:
+ QMutex mutex;
+ k9DVDTitle *m_title;
+ QString dev;
+ int selTitle;
+ unsigned long idxLect;
+ bool pause;
+ bool lockSlider;
+ QImage img;
+ bool stopped;
+ void sliderReleased();
+ /** No descriptions */
+ void sliderPressed();
+ void lock();
+ void unlock();
+ QString file;
+ QString errMsg;
+ bool error;
+ QString length;
+ uint startSector;
+ uint lastSector;
+ k9PlayMPEG2 m_player;
+ QGridLayout *m_layout;
+ bool m_prefUseGL;
+ k9GLWidget *m_GLwidget;
+ k9Widget *m_widget;
+protected:
+ void closeEvent( QCloseEvent* );
+ void resizeEvent ( QResizeEvent * );
+public slots: // Public slots
+ /** No descriptions */
+ int open (k9DVD *_dvd,k9DVDTitle * title,int chapter);
+ void drawPixmap( QImage *image);
+ void drawppm(uchar *_buf,int _width,int _height,int _len);
+ void setError(const QString & err);
+ void setPosition(uint32_t _position);
+ void setMax(uint32_t _position);
+ void setMin(uint32_t _position);
+ void bPlayClick();
+ void bStopClick();
+ void readSettings();
+
+};
+
+#endif
diff --git a/src/langselectw.cpp b/src/langselectw.cpp
new file mode 100644
index 0000000..357acfd
--- /dev/null
+++ b/src/langselectw.cpp
@@ -0,0 +1,123 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './langselectw.ui'
+**
+** Created: dim. oct. 26 08:57:34 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "langselectw.h"
+
+#include <qvariant.h>
+#include <qheader.h>
+#include <qlistview.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qimage.h>
+#include <qpixmap.h>
+
+static const unsigned char img0_langselectw[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x12,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0xbd, 0xf9, 0x35, 0x54, 0x00, 0x00, 0x02,
+ 0x27, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x9d, 0xd2, 0x4f, 0x48, 0xd3,
+ 0x61, 0x18, 0xc0, 0xf1, 0xef, 0xef, 0x97, 0xca, 0x0a, 0xff, 0xe5, 0x82,
+ 0x22, 0x0c, 0x9a, 0x82, 0x59, 0x66, 0xed, 0x20, 0x25, 0x1d, 0x86, 0x51,
+ 0x20, 0x81, 0xc1, 0x82, 0x9d, 0xa2, 0xc3, 0x3a, 0x64, 0x07, 0x0f, 0xa5,
+ 0xd0, 0xa5, 0x0e, 0x5b, 0x5d, 0x0a, 0x42, 0x72, 0x75, 0x08, 0xba, 0x48,
+ 0x07, 0x3b, 0x49, 0x18, 0x51, 0x14, 0x44, 0x1b, 0x24, 0xb5, 0x9c, 0xe5,
+ 0x24, 0x10, 0x29, 0x64, 0x30, 0x41, 0xf1, 0xb7, 0x7f, 0xbf, 0xad, 0xed,
+ 0x37, 0x75, 0x9b, 0x6f, 0x87, 0xe5, 0xdc, 0x3f, 0x5d, 0xf4, 0xc2, 0x03,
+ 0xef, 0xe1, 0x79, 0x3e, 0xef, 0xc3, 0xf3, 0x3e, 0x92, 0x10, 0x02, 0x49,
+ 0x92, 0x28, 0x3e, 0x1e, 0x30, 0xd7, 0x18, 0x0c, 0xb6, 0x3a, 0x93, 0xc9,
+ 0x28, 0xd7, 0xd7, 0xb3, 0x01, 0xf8, 0xc6, 0xc6, 0x5c, 0xe7, 0xc2, 0xe1,
+ 0xb3, 0x9b, 0x39, 0x42, 0x88, 0xa2, 0x4b, 0x21, 0x60, 0x5c, 0x30, 0x99,
+ 0x84, 0xf0, 0x78, 0x84, 0x98, 0x9e, 0xce, 0xc5, 0xc2, 0xd0, 0x90, 0x78,
+ 0x09, 0x3d, 0xf9, 0x88, 0x10, 0x02, 0xb9, 0x44, 0x00, 0xd2, 0x60, 0xde,
+ 0xd7, 0xd7, 0x07, 0xa1, 0x50, 0x41, 0xb4, 0xf4, 0xf6, 0xa2, 0x6b, 0x6e,
+ 0x7e, 0x54, 0x9c, 0xbf, 0x1d, 0xe2, 0x4a, 0xb9, 0xdd, 0x10, 0x0c, 0x96,
+ 0xc4, 0x71, 0x8b, 0xc5, 0xf8, 0x1c, 0xac, 0x15, 0x91, 0x14, 0x34, 0x0a,
+ 0x4d, 0xcb, 0x16, 0x06, 0x02, 0x05, 0xc8, 0x21, 0x83, 0x81, 0xfd, 0xed,
+ 0xed, 0xb6, 0xa7, 0xd0, 0xb8, 0x99, 0x5f, 0x05, 0xf0, 0x75, 0xfc, 0x61,
+ 0xa4, 0xe6, 0xdb, 0x0b, 0x57, 0xfc, 0xfe, 0xcc, 0x6c, 0x0a, 0x1a, 0xea,
+ 0x74, 0x3a, 0x6b, 0x53, 0x6b, 0x6b, 0xb6, 0x10, 0xa0, 0x68, 0xf0, 0x9d,
+ 0x5d, 0x5d, 0x87, 0x7f, 0xcd, 0xcf, 0xdf, 0x04, 0xec, 0x39, 0xe4, 0x60,
+ 0x62, 0x1c, 0xdd, 0xc5, 0x0b, 0xe6, 0x5d, 0x33, 0xc2, 0x5c, 0xab, 0xd5,
+ 0x53, 0xd5, 0xd2, 0x82, 0x94, 0x4e, 0x67, 0xbb, 0xf8, 0x0b, 0xac, 0xb8,
+ 0xdd, 0x78, 0xbd, 0x5e, 0x35, 0x03, 0x5e, 0xa1, 0xd7, 0x23, 0xc1, 0x8d,
+ 0x02, 0x44, 0x8b, 0x46, 0x1d, 0x0d, 0x72, 0xd2, 0x16, 0xe8, 0x39, 0xc0,
+ 0xde, 0xa9, 0x3d, 0x10, 0x8b, 0x6d, 0x3d, 0x2b, 0x49, 0x24, 0xfd, 0x7e,
+ 0x3e, 0x78, 0xbd, 0x13, 0x1a, 0x5c, 0xed, 0x07, 0x95, 0x50, 0x08, 0x80,
+ 0x81, 0xfc, 0x99, 0xac, 0x67, 0xe4, 0x11, 0xe5, 0xc7, 0xa4, 0xba, 0xbb,
+ 0xfb, 0x24, 0xd1, 0xcc, 0x72, 0xb6, 0x83, 0xbc, 0x58, 0x54, 0x14, 0x12,
+ 0xe0, 0xe8, 0x07, 0xb5, 0xdc, 0x0c, 0x65, 0x80, 0xce, 0xc1, 0x39, 0x35,
+ 0x1c, 0x4a, 0x38, 0x74, 0xf2, 0x6f, 0xc2, 0xa7, 0xf4, 0x25, 0x48, 0x54,
+ 0xd3, 0xb8, 0x0e, 0xae, 0x72, 0x40, 0xc1, 0xef, 0x6c, 0x64, 0x18, 0x59,
+ 0x9e, 0xfd, 0xac, 0xd6, 0x9e, 0x3f, 0x4d, 0xb8, 0x3a, 0xba, 0x85, 0x28,
+ 0x0a, 0xc9, 0xd5, 0xd5, 0xed, 0xea, 0x0b, 0x91, 0xee, 0x3b, 0x73, 0xaa,
+ 0x12, 0x58, 0x1f, 0x94, 0x63, 0x0b, 0x2c, 0x5d, 0x3a, 0x01, 0x91, 0x08,
+ 0x44, 0x22, 0xc4, 0xe2, 0x71, 0xe6, 0xd7, 0xd6, 0x26, 0x76, 0x54, 0x8a,
+ 0xd7, 0xfe, 0xfb, 0xf0, 0x31, 0xdf, 0xd2, 0xa4, 0x4d, 0xbc, 0x31, 0x36,
+ 0xf9, 0xde, 0x82, 0xf3, 0x19, 0x8c, 0x0e, 0xe7, 0xed, 0x44, 0x71, 0xad,
+ 0x10, 0xa2, 0x14, 0x79, 0x7d, 0xeb, 0xa8, 0xd5, 0xff, 0xea, 0xb2, 0x70,
+ 0x3e, 0xb6, 0xf8, 0x76, 0x7c, 0x7d, 0x27, 0x04, 0xe0, 0xa3, 0xbd, 0xc3,
+ 0x17, 0x9e, 0x79, 0x20, 0x46, 0xaf, 0xb5, 0x5b, 0xff, 0x05, 0x29, 0xbb,
+ 0xf6, 0x4a, 0x30, 0x33, 0xa8, 0xfe, 0xfc, 0x42, 0xdb, 0x19, 0x93, 0xad,
+ 0x52, 0x37, 0x39, 0xad, 0xdc, 0x79, 0x7f, 0xbb, 0xcd, 0x19, 0x98, 0xba,
+ 0x27, 0x9e, 0x5c, 0x39, 0x62, 0xff, 0xaf, 0x4e, 0x00, 0x16, 0x57, 0xe4,
+ 0xbb, 0xee, 0x77, 0x9f, 0x08, 0x56, 0x77, 0x34, 0x54, 0x6a, 0xe4, 0x0f,
+ 0x51, 0x7b, 0x2c, 0x24, 0xc5, 0xd9, 0x54, 0x2e, 0x00, 0x00, 0x00, 0x00,
+ 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+
+
+/*
+ * Constructs a langSelect as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+langSelect::langSelect( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ QImage img;
+ img.loadFromData( img0_langselectw, sizeof( img0_langselectw ), "PNG" );
+ image0 = img;
+ if ( !name )
+ setName( "langSelect" );
+ setIcon( image0 );
+ langSelectLayout = new QGridLayout( this, 1, 1, 2, 6, "langSelectLayout");
+
+ lvLanguages = new QListView( this, "lvLanguages" );
+ lvLanguages->addColumn( tr2i18n( "Languages" ) );
+ lvLanguages->header()->setClickEnabled( FALSE, lvLanguages->header()->count() - 1 );
+ lvLanguages->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)7, 0, 0, lvLanguages->sizePolicy().hasHeightForWidth() ) );
+ lvLanguages->setMinimumSize( QSize( 208, 0 ) );
+ lvLanguages->setHScrollBarMode( QListView::AlwaysOff );
+ lvLanguages->setResizeMode( QListView::LastColumn );
+
+ langSelectLayout->addWidget( lvLanguages, 0, 0 );
+ languageChange();
+ resize( QSize(600, 480).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+langSelect::~langSelect()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void langSelect::languageChange()
+{
+ setCaption( tr2i18n( "Selection" ) );
+ lvLanguages->header()->setLabel( 0, tr2i18n( "Languages" ) );
+}
+
+#include "langselectw.moc"
diff --git a/src/langselectw.ui b/src/langselectw.ui
new file mode 100644
index 0000000..943d72a
--- /dev/null
+++ b/src/langselectw.ui
@@ -0,0 +1,72 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>langSelect</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>langSelect</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Selection</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <widget class="QListView" row="0" column="0">
+ <column>
+ <property name="text">
+ <string>Languages</string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>lvLanguages</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>208</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="hScrollBarMode">
+ <enum>AlwaysOff</enum>
+ </property>
+ <property name="resizeMode">
+ <enum>LastColumn</enum>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="PNG" length="608">89504e470d0a1a0a0000000d4948445200000011000000120806000000bdf935540000022749444154388d9dd24f48d36118c0f1efef97ca0affe582220c9a825966ed20251d86512081c1829da2c33a64070fa5d0a50e5b5d0a42727508ba48073b49185114441b24b59ce5241029643041f1b77fbfaded37759b6f87e5dc3f5df4c203efe1793eefc3f33e9210024992283e1e30d7180cb63a93c928d7d7b301f8c6c65ce7c2e1b39b394288a24b21605c309984f07884989ecec5c2d09078093df9881002b94400d260ded7d707a15041b4f4f6a26b6e7e549cbf1de24ab9dd100c96c4718bc5f81cac159114340a4dcb16060205c8218381fdededb6a7d0b8995f05f075fc61a4e6db0b57fcfecc6c0a1aea743a6b536b6bb610a068f09d5d5d877fcdcfdf04ec39e460621cddc50be65d33c25cabd553d5d282944e67bbf80bacb8dd78bd5e35035ea1d723c18d02448b461d0d72d216e839c0dea93d108b6d3d2b4924fd7e3e78bd131a5ced079550088081fc99ac67e411e5c7a4babbfb24d1cc72b683bc58541412e0e807b5dc0c6580cec139351c4a3874f26fc2a7f4254854d3b80eae7240c1ef6c6418599efdacd69e3f4db83aba85280ac9d5d5edea0b91ee3b73aa12581f94630b2c5d3a0191084422c4e271e6d7d62676548ad7fefbf031dfd2a44dbc3136f9de82f3198c0ee7ed4471ad10a214797deba8d5ffeab2703eb6f8767c7d2704e0a3bdc3179e792046afb55bff0529bbf64a3033a8fefc42db1993ad523739addc797fbbcd1998ba279e5c3962ffaf4e001657e4bbee779f08567734546ae40f517b2c24c5d9542e0000000049454e44ae426082</data>
+ </image>
+</images>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100755
index 0000000..2158608
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,154 @@
+/**************************************************************************
+* 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 "k9common.h"
+#include "k9play.h"
+#include <kapplication.h>
+#include <kaboutdata.h>
+#include <kcmdlineargs.h>
+#include <klocale.h>
+#include "ac.h"
+#include "k9copy.h"
+#include "dvdread.h"
+#include "k9redirect.h"
+
+static const char description[] =
+ I18N_NOOP("A DVD Backup tool for KDE");
+
+static const char version[] = VERSION ;// "1.1.1-2";
+
+static const KCmdLineOptions options[] = {
+ { "input <device>", I18N_NOOP("input device"), 0
+ },
+ { "output <device>", I18N_NOOP("output device"), 0 },
+ { "dvdtitle <number>", I18N_NOOP("title to play"), 0 },
+ { "play", I18N_NOOP("play title to stdout"), 0 },
+ { "startsector <number>", I18N_NOOP("start sector"),0},
+ { "endsector <number>", I18N_NOOP("end sector"),0},
+ { "audiofilter <number,number>", I18N_NOOP("list of audio streams"),0},
+ { "subpicturefilter <number,number>", I18N_NOOP("list of spu streams"),0},
+ { "vampsfactor <number>", I18N_NOOP("shrink factor"),0},
+ { "ffactor", I18N_NOOP("shrink factor forced"),0},
+ { "inputsize <number>", I18N_NOOP("size of the cell to be copied"),0},
+ { "totalsize <number>", I18N_NOOP("total size of selected titles"),0},
+ { "chaptersize <number>", I18N_NOOP("size of the chapters being copied"),0},
+ { "chapterlist <list>",I18N_NOOP("selected chapters"),0},
+ { "dvdsize <number>", I18N_NOOP("new dvd size"),0},
+ { "chapter <number>", I18N_NOOP("selected chapter"),0},
+ { "cell <number>", I18N_NOOP("cell number in selected chapter"),0},
+ { "inject <filename>", I18N_NOOP("status file name"),0},
+ { "initstatus" ,I18N_NOOP("initialize status file"),0},
+ { "continue" ,I18N_NOOP("continue playing from last sector"),0},
+ { "firstpass" ,I18N_NOOP("don't save status at end"),0},
+ { "usecache" ,I18N_NOOP("save cell in a temporary file before encoding"),0},
+ { "redirect" ,I18N_NOOP("for internal use"),0},
+ KCmdLineLastOption // End of options.
+ };
+
+
+int main(int argc, char **argv) {
+ KAboutData about("k9copy", I18N_NOOP("k9copy"), version,description,
+ KAboutData::License_GPL, "(C) 2004-2006 Jean-Michel PETIT", 0, 0, "k9copy@free.fr");
+ about.addAuthor( "Jean-Michel PETIT", 0, "k9copy@free.Fr" );
+ about.setTranslator(I18N_NOOP("_: NAME OF TRANSLATORS\\nYour names")
+ ,I18N_NOOP("_: EMAIL OF TRANSLATORS\\nYour emails"));
+
+ KCmdLineArgs::init(argc, argv, &about);
+ KCmdLineArgs::addCmdLineOptions( options );
+
+ KApplication app;
+ // kMainDlg *mainWin = 0;
+
+ // see if we are starting with session management
+ if (app.isRestored()) {
+ RESTORE(k9Copy);
+ } else {
+ ac_mmtest();
+ tc_memcpy_init( 0, ac_mmflag());
+
+ // no session.. just start up normally
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+ QString TitleNumber(args->getOption("dvdtitle"));
+ QString InputOptionArg( args->getOption("input"));
+ QString OutputOptionArg( args->getOption("output"));
+ QString startSectorArg(args->getOption("startsector"));
+ QString endSectorArg(args->getOption("endsector"));
+ QString audioFilterArg(args->getOption("audiofilter"));
+ QString subpictureFilterArg(args->getOption("subpicturefilter"));
+ QString vampsFactorArg(args->getOption("vampsfactor"));
+ QString inputSizeArg(args->getOption("inputsize"));
+ QString chapterArg(args->getOption("chapter"));
+ QString cellArg(args->getOption("cell"));
+ QString injectArg(args->getOption("inject"));
+ QString totalSizeArg(args->getOption("totalsize"));
+ QString dvdSizeArg(args->getOption("dvdsize"));
+ QString chapterSizeArg(args->getOption("chaptersize"));
+ QString chapterListArg(args->getOption("chapterlist"));
+ bool ffactor=args->isSet("ffactor");
+ bool play= args->isSet("play");
+ bool redirect = args->isSet("redirect");
+ if (play) {
+ k9play player;
+ player.setinitStatus( args->isSet("initstatus"));
+ player.setcontinue( args->isSet("continue"));
+ player.setfirstPass(args->isSet("firstpass"));
+ player.setuseCache(args->isSet("usecache"));
+ player.setDevice(InputOptionArg);
+ player.setTitle(TitleNumber.toInt());
+ player.setstartSector(startSectorArg);
+ player.setendSector(endSectorArg );
+ player.setaudioFilter( audioFilterArg);
+ player.setsubpictureFilter( subpictureFilterArg);
+ player.setvampsFactor( vampsFactorArg);
+ player.setinputSize( inputSizeArg);
+ player.setchapter(chapterArg);
+ player.setcell(cellArg);
+ player.setinject(injectArg);
+ player.settotalSize(totalSizeArg);
+ player.setdvdSize(dvdSizeArg);
+ player.setchapterSize( chapterSizeArg);
+ player.setforcedFactor(ffactor);
+ player.setchapterList( chapterListArg);
+ player.execute();
+ return 0;
+ } else if (redirect) {
+ k9Redirect redirect;
+ redirect.execute();
+ return 0;
+ } else {
+
+ k9Copy *widget = new k9Copy;
+ if (InputOptionArg !="") {
+ widget->setInput( InputOptionArg);
+ widget->fileOpen();
+ }
+ if (OutputOptionArg !="")
+ widget->setOutput( OutputOptionArg);
+
+ if ((InputOptionArg !="") && (OutputOptionArg!=""))
+ widget->clone( InputOptionArg,OutputOptionArg);
+ widget->show();
+ }
+ }
+
+
+ int ret= app.exec();
+ return ret;
+}
+
diff --git a/src/mencoder.xml b/src/mencoder.xml
new file mode 100644
index 0000000..ed0a8e8
--- /dev/null
+++ b/src/mencoder.xml
@@ -0,0 +1,726 @@
+<OPTIONS>
+ <FILTERS>
+ <vf separator=",">
+ <opt name="crop" separator=":" description="&lt;b&gt;crop[=w:h:x:y]&lt;/b&gt; Crops the given part of the image and discards the rest.&lt;br&gt;Useful to remove black bands from widescreen movies.">
+ <subopt name="w" type="int" min="0" max="1000" default="0" description="Cropped width and height, defaults to original width and height."/>
+ <subopt name="h" type="int" min="0" max="1000" default="0" description="Cropped width and height, defaults to original width and height."/>
+ <subopt name="x" type="int" min="0" max="1000" default="0" description="Position of the cropped picture, defaults to center."/>
+ <subopt name="y" type="int" min="0" max="1000" default="0" description="Position of the cropped picture, defaults to center."/>
+ </opt>
+ <opt name="cropdetect" separator=":" description="Calculates necessary cropping parameters and prints the recommended parameters to stdout.">
+ <subopt name="limit" type="int" min="0" max="255" default="24" description="limit : Threshold, which can be optionally specified from nothing (0) to everything (255) (default: 24)."/>
+ <subopt name="round" type="int" min="0" max="255" default="16" description="round : Value which the width/height should be divisible by (default: 16).&lt;br&gt; The offset is automatically adjusted to center the video. Use 2 to get only even dimensions (needed for 4:2:2 video). 16 is best when encoding to most video codecs." />
+ </opt>
+ <opt name="expand" separator=":" description="Expands (not scales) movie resolution to the given value and places the unscaled original at coordinates x, y. Can be used for placing subtitles/OSD in the resulting black bands">
+ <subopt name="w" type="int" min="-1000" max="1000" default="0" description="Expanded width,height (default: original width,height).&lt;br&gt;Negative values for w and h are treated as offsets to the original size."/>
+ <subopt name="h" type="int" min="-1000" max="1000" default="0" description="Expanded width,height (default: original width,height).&lt;br&gt;Negative values for w and h are treated as offsets to the original size."/>
+ <subopt name="x" type="int" min="-1000" max="1000" default="0" description=" position of original image on the expanded image (default: center)"/>
+ <subopt name="y" type="int" min="-1000" max="1000" default="0" description=" position of original image on the expanded image (default: center)"/>
+ <subopt name="o" type="int" min="0" max="1" default="0" description="OSD/subtitle rendering &lt;br&gt; 0: disable (default)&lt;br&gt; 1: enable"/>
+ <subopt name="a" type="string" description="Expands to fit an aspect instead of a resolution (default: 0).&lt;br&gt;&lt;br&gt;EXAMPLE:&lt;br&gt;expand=800:::::4/3 Expands to 800x600, unless the source is higher resolution, in which case it expands to fill a 4/3 aspect." />
+ <subopt name="r" type="int" min="1" max="100" default="1" description="Rounds up to make both width and height divisible by r (default: 1)."/>
+ </opt>
+ <opt type="bool" name="flip" default="false" description="Flips the image upside down."/>
+ <opt type="bool" name="mirror" default="false" description="Mirrors the image on the Y axis."/>
+ <opt name="scale" separator=":" description="Scales the image with the software scaler (slow) and performs a YUV to RGB colorspace conversion (also see −sws)">
+ <subopt name="w" type="int" min="-11" max="10000" default="0" special="$WIDTH" description="scaled width/height (default: original width/height)&lt;br&gt;NOTE: If −zoom is used, and underlying filters (including libvo) are incapable of scaling, it defaults to d_width/d_height!&lt;br&gt;- 0: scaled d_width/d_height&lt;br&gt;- -1: original width/height&lt;br&gt;- -2: Calculate w/h using the other dimension and the prescaled aspect ratio.&lt;br&gt;- -3: Calculate w/h using the other dimension and the original aspect ratio.&lt;br&gt;- -(n+8): Like -n above, but rounding the dimension to the closest multiple of 16."/>
+ <subopt name="h" type="int" min="-11" max="10000" default="0" special="$HEIGHT"/>
+ <subtop name="ilaced" type="int" min="0" max="1" default="0" description="Toggle interlaced scaling.&lt;br&gt;- 0: off (default)&lt;br&gt;- 1: on"/>
+ <subopt name="chr_drop" type="int" min="0" max="3" default="0" description="chroma skipping&lt;br&gt;. 0: Use all available input lines for chroma.&lt;br&gt;. 1: Use only every 2. input line for chroma.&lt;br&gt;. 2: Use only every 4. input line for chroma.&lt;br&gt;. 3: Use only every 8. input line for chroma."/>
+ <subopt name="par" type="float" min="0" max="100" default="0" description="(also see −sws) : Set some scaling parameters depending on the type of scaler selected with −sws.&lt;br&gt;−sws 2 (bicubic): B (blurring) and C (ringing)&lt;br&gt;0.00:0.60 default&lt;br&gt;0.00:0.75 VirtualDub’s 'precise bicubic'&lt;br&gt;0.00:0.50 Catmull-Rom spline&lt;br&gt;0.33:0.33 Mitchell-Netravali spline&lt;br&gt;1.00:0.00 cubic B-spline&lt;br&gt;−sws 7 (gaussian): sharpness (0 (soft) − 100 (sharp))&lt;br&gt;−sws 9 (lanczos): filter length (1−10)"/>
+ <subopt name="par2" type="float" min="0" max="100" default="0"/>
+ <subopt name="presize" type="string" default="" description="Scale to preset sizes.&lt;br&gt;- qntsc: 352x240 (NTSC quarter screen)&lt;br&gt;- qpal: 352x288 (PAL quarter screen)&lt;br&gt;- ntsc: 720x480 (standard NTSC)&lt;br&gt;. pal: 720x576 (standard PAL)&lt;br&gt;- sntsc: 640x480 (square pixel NTSC)&lt;br&gt;- spal: 768x576 (square pixel PAL)">
+ <value name=""/>
+ <value name="qntsc"/>
+ <value name="qpal"/>
+ <value name="ntsc"/>
+ <value name="pal"/>
+ <value name="sntsc"/>
+ <value name="spal"/>
+ </subopt>
+ <subopt name="noup" type="integer" min="0" max="2" default="0" description="Disallow upscaling past the original dimensions.&lt;br&gt;- 0: Allow upscaling (default).&lt;br&gt;- 1: Disallow upscaling if one dimension exceeds its original value.&lt;br&gt;- 2: Disallow upscaling if both dimensions exceed their original values."/>
+ <subopt name="arnd" type="bool" default="false" description="Accurate rounding for the vertical scaler, which may be faster or slower than the default rounding.&lt;br&gt;- 0: Disable accurate rounding (default).&lt;br&gt;- 1: Enable accurate rounding."/>
+ </opt>
+
+ <opt name="dsize" separator=":" description="Changes the intended display size/aspect at an arbitrary point in the filter chain.&lt;br&gt;You may specify the exact display width and height desired. Note that this filter does not do any scaling itself; it just affects what later scalers (software or hardware) will do when auto-scaling to correct aspect.&lt;br &gt;">
+ <subopt name="aspect" type="string" default="" description="Aspect can be given as a fraction (4/3) or floating point number (1.33)."/>
+ <subopt name="h" type="int" min="-3" max="10000" default="-1" description="New display width and height. Can also be these special values:&lt;br&gt;- 0: original display width and height&lt;br&gt;- -1: original video width and height (default)&lt;br&gt;- -2: Calculate w/h using the other dimension and the original display aspect ratio.&lt;br&gt;- -3: Calculate w/h using the other dimension and the original video aspect ratio.&lt;br&gt;&lt;br&gt;EXAMPLE:&lt;br&gt;dsize=800:-2&lt;br&gt;Specifies a display resolution of 800x600 for a 4/3 aspect video, or 800x450 for a 16/9 aspect video."/>
+ <subopt name="w" type="int" min="-3" max="10000" default="0" description="New display width and height. Can also be these special values:&lt;br&gt;- 0: original display width and height&lt;br&gt;- -1: original video width and height (default)&lt;br&gt;- -2: Calculate w/h using the other dimension and the original display aspect ratio.&lt;br&gt;- -3: Calculate w/h using the other dimension and the original video aspect ratio.&lt;br&gt;&lt;br&gt;EXAMPLE:&lt;br&gt;dsize=800:-2&lt;br&gt;Specifies a display resolution of 800x600 for a 4/3 aspect video, or 800x450 for a 16/9 aspect video."/>
+ <subopt name="aspect-method" type="int" min="-1" max="3" default="0" description="Modifies width and height according to original aspect ratios.&lt;br&gt;- -1: Ignore original aspect ratio (default).&lt;br&gt;- 0: Keep display aspect ratio by using w and h as maximum resolution.&lt;br&gt;- 1: Keep display aspect ratio by using w and h as minimum resolution.&lt;br&gt;- 2: Keep video aspect ratio by using w and h as maximum resolution.&lt;br&gt;- 3: Keep video aspect ratio by using w and h as minimum resolution.&lt;br&gt;&lt;br&gt;EXAMPLE:&lt;br&gt;dsize=800:600:0&lt;br&gt;Specifies a display resolution of at most 800x600, or smaller, in order to keep aspect."/>
+ <subopt name="r" type="int" min="0" max="100" default="1" description="Rounds up to make both width and height divisible by r (default: 1)."/>
+ </opt>
+ <opt name="yuy2" type="bool" default="false" description="Forces software YV12/I420/422P to YUY2 conversion.&lt;br&gt;Useful for video cards/drivers with slow YV12 but fast YUY2 support."/>
+ <opt name="yuv9" type="bool" default="false" description="Forces software YVU9 to YV12 colorspace conversion.&lt;br&gt;Deprecated in favor of the software scaler."/>
+ <opt name="yuvcsp" type="bool" default="false" description="Clamps YUV color values to the CCIR 601 range without doing real conversion."/>
+ <opt name="rgb2bgr" type="string" default="" description="RGB 24/32 − BGR 24/32 colorspace conversion.&lt;br&gt;swap : Also perform R - B swapping.">
+ <value name=""/>
+ <value name="swap"/>
+ </opt>
+ <opt name="palette" type ="bool" default="false" description="RGB/BGR 8 −> 15/16/24/32bpp colorspace conversion using palette."/>
+ <opt name="format" type="string" default="yuy2" description="Restricts the colorspace for the next filter without doing any conversion. Use together with the scale filter for a real conversion.&lt;br&gt;NOTE: For a list of available formats see mencoder -vf format=fmt=help.&lt;br&gt;- fourcc : format name like rgb15, bgr24, yv12, etc (default: yuy2)"/>
+ <opt name="noformat" type="string" default="yv12" description="Restricts the colorspace for the next filter without doing any conversion. Unlike the format filter, this will allow any colorspace except the one you specify.&lt;br&gt;NOTE: For a list of available formats see noformat=fmt=help.&lt;br&gt;- fourcc : format name like rgb15, bgr24, yv12, etc (default: yv12)"/>
+ <opt name="pp" type="string" default="de" description="Enables the specified chain of postprocessing subfilters. Subfilters must be separated by ’/’ and can be disabled by prepending a ’−’. Each subfilter and some options have a short and a long name that can be used interchangeably, i.e. dr/dering are the same. All subfilters share common options to determine their scope:&lt;br&gt;- a/autoq : Automatically switch the subfilter off if the CPU is too slow.&lt;br&gt;- c/chrom : Do chrominance filtering, too (default).&lt;br&gt;- y/nochrom : Do luminance filtering only (no chrominance).&lt;br&gt;- n/noluma : Do chrominance filtering only (no luminance).&lt;br&gt;&lt;br&gt;NOTE: −pphelp shows a list of available subfilters.&lt;br&gt;Available subfilters are&lt;br&gt;- hb/hdeblock[:difference[:flatness]] : horizontal deblocking filter&lt;br&gt;.....&bnsp;difference: Difference factor where higher values mean more deblocking (default: 32).&lt;br&gt;.....&bnsp;flatness : Flatness threshold where lower values mean more deblocking (default: 39).&lt;br&gt;.....&bnsp;vb/vdeblock[:difference[:flatness]] : vertical deblocking filter&lt;br&gt;.....&bnsp;difference : Difference factor where higher values mean more deblocking (default: 32).&lt;br&gt;.....&bnsp;flatness : Flatness threshold where lower values mean more deblocking (default: 39).&lt;br&gt;- ha/hadeblock[:difference[:flatness]] : accurate horizontal deblocking filter&lt;br&gt;.....&bnsp;difference : Difference factor where higher values mean more deblocking (default: 32).&lt;br&gt;.....&bnsp;flatness : Flatness threshold where lower values mean more deblocking (default: 39).&lt;br&gt;- va/vadeblock[:difference[:flatness]] : accurate vertical deblocking filter&lt;br&gt;.....&bnsp;difference: Difference factor where higher values mean more deblocking (default: 32).&lt;br&gt;.....&bnsp;flatness : Flatness threshold where lower values mean more deblocking (default: 39).&lt;br&gt;The horizontal and vertical deblocking filters share the difference and flatness values so you cannot set different horizontal and vertical thresholds.&lt;br&gt;- h1/x1hdeblock : experimental horizontal deblocking filter&lt;br&gt;- v1/x1vdeblock : experimental vertical deblocking filter&lt;br&gt;- dr/dering : deringing filter&lt;br&gt;- tn/tmpnoise[:threshold1[:threshold2[:threshold3]]] : temporal noise reducer&lt;br&gt;.....&bnsp;threshold1: larger -> stronger filtering&lt;br&gt;.....&bnsp; threshold2: larger -> stronger filtering&lt;br&gt;threshold3 : larger -> stronger filtering&lt;br&gt;- al/autolevels[:f/fullyrange] : automatic brightness / contrast correction&lt;br&gt;- f/fullyrange: Stretch luminance to (0−255).&lt;br&gt;- lb/linblenddeint : Linear blend deinterlacing filter that deinterlaces the given block by filtering all lines with a (1 2 1) filter.&lt;br&gt;- li/linipoldeint : Linear interpolating deinterlacing filter that deinterlaces the given block by linearly interpolating every second line.&lt;br&gt;- ci/cubicipoldeint : Cubic interpolating deinterlacing filter deinterlaces the given block by cubically interpolating every second line.&lt;br&gt;- md/mediandeint : Median deinterlacing filter that deinterlaces the given block by applying a median filter to every second line.&lt;br&gt;- fd/ffmpegdeint : FFmpeg deinterlacing filter that deinterlaces the given block by filtering every second line with a (-1 4 2 4 -1) filter.&lt;br&gt;- l5/lowpass5 : Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given block by filtering all lines with a (-1 2 6 2 -1) filter.&lt;br&gt;- fq/forceQuant[:quantizer] : Overrides the quantizer table from the input with the constant quantizer you specify.&lt;br&gt;.....&bnsp;quantizer: quantizer to use&lt;br&gt;- de/default : default pp filter combination (hb:a,vb:a,dr:a)&lt;br&gt;- fa/fast : fast pp filter combination (h1:a,v1:a,dr:a)&lt;br&gt;- ac : high quality pp filter combination (ha:a:128:7,va:a,dr:a)&lt;br&gt;EXAMPLE:&lt;br&gt;−vf pp=hb/vb/dr/al : horizontal and vertical deblocking, deringing and automatic brightness/contrast&lt;br&gt;−vf pp=de/-al : default filters without brightness/contrast correction&lt;br&gt;−vf pp=default/tmpnoise:1:2:3 : Enable default filters and temporal denoiser.&lt;br&gt;−vf pp=hb:y/vb:a : Horizontal deblocking on luminance only, and switch vertical deblocking on or off automatically depending on available CPU time."/>
+ <opt name="spp" separator=":" description="Simple postprocessing filter that compresses and decompresses the image at several (or − in the case of quality level 6 − all) shifts and averages the results.">
+ <subopt name="quality" type="int" min="0" max="6" default="3" description="0−6 (default: 3)"/>
+ <subopt name="qp" type="int" min="0" max="100" default="0" description="Force quantization parameter (default: 0, use QP from video)."/>
+ <subopt name="mode" type="string" default="0" description="0: hard thresholding (default)&lt;br&gt;1: soft thresholding (better deringing, but blurrier)&lt;br&gt;4: like 0, but also use B-frames’ QP (may cause flicker)&lt;br&gt;5: like 1, but also use B-frames’ QP (may cause flicker)">
+ <value name="0"/>
+ <value name="1"/>
+ <value name="4"/>
+ <value name="5"/>
+ </subopt>
+ </opt>
+ <opt name="uspp" separator=":" description="Ultra simple and slow postprocessing filter that compresses and decompresses the image at several (or − in the case of quality level 8 − all) shifts and averages the results.&lt;br&gt;The way this differs from the behavior of spp is that uspp actually encodes and decodes each case with libavcodec Snow, whereas spp uses a simplified intra only 8x8 DCT similar to MJPEG.">
+ <subopt name="quality" type="int" min="0" max="8" default="3" description="0−8 (default: 3)"/>
+ <subopt name="qp" type="int" min="0" max="100" default="0" description="Force quantization parameter (default: 0, use QP from video)."/>
+ </opt>
+ <opt name="fspp" separator=":" description="faster version of the simple postprocessing filter">
+ <subopt name="quality" type="int" min="4" max="5" default="4" description="4−5 (equivalent to spp; default: 4)"/>
+ <subopt name="qp" type="int" min="0" max="100" default="0" description="Force quantization parameter (default: 0, use QP from video)."/>
+ <subopt name="strength" type="int" min="-15" max="32" default="0" description="Filter strength, lower values mean more details but also more artifacts,&lt;br&gt;while higher values make the image smoother but also blurrier (default: 0 − PSNR optimal)."/>
+ <subopt name="bframes" type="int" min="0" max="1" default="0" description="0: do not use QP from B-frames (default)&lt;br&gt;1: use QP from B-frames too (may cause flicker)"/>
+ </opt>
+ <opt name="pp7" separator=":" description="Variant of the spp filter, similar to spp=6 with 7 point DCT where only the center sample is used after IDCT.">
+ <subopt name="qp" type="int" min="0" max="100" default="0" description="Force quantization parameter (default: 0, use QP from video)."/>
+ <subopt name="mode" type="int" min="0" max="2" default="2" description="0: hard thresholding&lt;br&gt;1: soft thresholding (better deringing, but blurrier)&lt;br&gt;2: medium thresholding (default, good results)"/>
+ </opt>
+ <opt name="qp" type="string" default="" description="quantization parameter (QP) change filter&lt;br&gt;equation : some equation like '2+2*sin(PI*qp)'"/>
+ <opt name="geq" type="string" default="" description="generic equation change filter&lt;br&gt;equation&lt;br&gt;Some equation, e.g. ’p(W-XY)’ to flip the image horizontally. You can use whitespace to make the equation more readable. There are a couple of constants that can be used in the equation:&lt;br&gt;....PI: the number pi&lt;br&gt;....E: the number e&lt;br&gt;....X / Y: the coordinates of the current sample&lt;br&gt;....W / H: width and height of the image&lt;br&gt;....SW / SH: width/height scale depending on the currently filtered plane, e.g. 1,1 and 0.5,0.5 for YUV 4:2:0.&lt;br&gt;....p(x,y): returns the value of the pixel at location x/y of the current plane."/>
+ <opt name="test" type="bool" default="false" description="Generate various test patterns."/>
+ <opt name="rgbtest" type="bool" default="false" description="Generate an RGB test pattern useful for detecting RGB vs BGR issues.&lt;br&gt;You should see a red, green and blue stripe from top to bottom."/>
+ <opt name="lavc" separator=":" description="Fast software YV12 to MPEG-1 conversion with libavcodec for use with DVB/DXR3/IVTV.">
+ <subopt name="quality" type="int" min="1" max="32" default="32" description="1−31: fixed qscale&lt;br&gt;32−: fixed bitrate in kbits"/>
+ <subopt name="fps" type="int" min="0" max="50" default="0" description="force output fps (float value) (default: 0, autodetect based on height)"/>
+ </opt>
+ <opt name="dvbscale" type="string" default="" description="Set up optimal scaling for DVB cards, scaling the x axis in hardware and calculating the y axis scaling in software to keep aspect. Only useful together with expand and scale.&lt;br&gt;Control aspect ratio, calculate as DVB_HEIGHT*ASPECTRATIO (default: 576*4/3=768), set it to 576*(16/9)=1024 for a 16:9 TV."/>
+ <opt name="noise" type="string" default="" description="&lt;b&gt;luma[u][t|a][h][p]:chroma[u][t|a][h][p]]&lt;/b&gt;&lt;br&gt;Adds noise.&lt;br&gt;0−100 : luma noise&lt;br&gt;0−100 : chroma noise&lt;br&gt;u : uniform noise (gaussian otherwise)&lt;br&gt;t : temporal noise (noise pattern changes between frames)&lt;br&gt;a :averaged temporal noise (smoother, but a lot slower)&lt;br&gt;h :high quality (slightly better looking, slightly slower)&lt;br&gt;p : mix random noise with a (semi)regular pattern"/>
+ <opt name="denoise3d" separator=":" description="This filter aims to reduce image noise producing smooth images and making still images really still (This should enhance compressibility.).">
+ <subopt name="luma_spatial" type="int" min="0" max="100" default="4" description="spatial luma strength (default: 4)"/>
+ <subopt name="chroma_spatial" type="int" min="0" max="100" default="3" description="spatial chroma strength (default: 3)"/>
+ <subopt name="luma_tmp" type="int" min="0" max="100" default="6" description="luma temporal strength (default: 6)"/>
+ <subopt name="chroma_tmp" type="int" min="0" max="100" default="4" description="chroma temporal strength (default: luma_tmp*chroma_spatial/luma_spatial)"/>
+ </opt>
+ <opt name="hqdn3d" separator=":" description="High precision/quality version of the denoise3d filter. Parameters and usage are the same.">
+ <subopt name="luma_spatial" type="int" min="0" max="100" default="4" description="spatial luma strength (default: 4)"/>
+ <subopt name="chroma_spatial" type="int" min="0" max="100" default="3" description="spatial chroma strength (default: 3)"/>
+ <subopt name="luma_tmp" type="int" min="0" max="100" default="6" description="luma temporal strength (default: 6)"/>
+ <subopt name="chroma_tmp" type="int" min="0" max="100" default="4" description="chroma temporal strength (default: luma_tmp*chroma_spatial/luma_spatial)"/>
+ </opt>
+ <opt name="eq" separator=":" description="OBSOLETE !!&lt;br&gt;Software equalizer with interactive controls just like the hardware equalizer, for cards/drivers that do not support brightness and contrast controls in hardware.&lt;br&gt;Might also be useful with MEncoder, either for fixing poorly captured movies, or for slightly reducing contrast to mask artifacts and get by with lower bitrates.">
+ <subopt name="brightness" type="int" min="-100" max="100" default="0" description="initital brightness"/>
+ <subopt name="contrast" type="int" min="-100" max="100" default="0" description="initial contrast"/>
+ </opt>
+ <opt name="eq2" separator=":" description="Alternative software equalizer that uses lookup tables (very slow), allowing gamma correction in addition to simple brightness and contrast adjustment.&lt;br&gt;Note that it uses the same MMX optimized code as −vf eq if all gamma values are 1.0. The parameters are given as floating point values.">
+ <subopt name="gamma" type="float" min="0.1" max="10." default="1.0" description="initial gamma value (default: 1.0)"/>
+ <subopt name="contrast" type="float" min="-2.0" max="2.0" default="1.0" description="initial contrast, where negative values result in a negative image (default: 1.0)"/>
+ <subopt name="brightness" type="float" min="-1.0" max="1.0" default="0.0" description="initial brightness (default: 0.0)"/>
+ <subopt name="saturation" type="float" min="0.0" max="3.0" default="1.0" description="initial saturation (default: 1.0)"/>
+ <subopt name="rg" type="float" min="0.1" max="10.0" default="1.0" description="gamma value for the red component (default: 1.0)"/>
+ <subopt name="gg" type="float" min="0.1" max="10.0" default="1.0" description="gamma value for the green component (default: 1.0)"/>
+ <subopt name="bg" type="float" min="0.1" max="10.0" default="1.0" description="gamma value for the blue component (default: 1.0)"/>
+ <subopt name="weight" type="float" min="0.0" max="1.0" default="1.0" description="The weight parameter can be used to reduce the effect of a high gamma value on bright image areas, e.g. keep them from getting overamplified and just plain white.&lt;br&gt;A value of 0.0 turns the gamma correction all the way down while 1.0 leaves it at its full strength (default: 1.0)."/>
+ </opt>
+ <opt name="hue" separator=":" description="Software equalizer with interactive controls just like the hardware equalizer, for cards/drivers that do not support hue and saturation controls in hardware.">
+ <subopt name="hue" type="float" min="-180.0" max="180.0" default="0.0" description="initial hue (default: 0.0)"/>
+ <subopt name="saturation" type="float" min="-100.0" max="100.0" default="0.0" description="initial saturation, where negative values result in a negative chroma (default: 1.0)"/>
+ </opt>
+ <opt name="halfpack" type="int" min="0" max="100" default="0" description="Convert planar YUV 4:2:0 to half-height packed 4:2:2, downsampling luma but keeping all chroma samples.&lt;br&gt;Useful for output to low-resolution display devices when hardware downscaling is poor quality or is not available. Can also be used as a primitive luma-only deinterlacer with very low CPU usage.&lt;br&gt;&lt;br&gt;By default, halfpack averages pairs of lines when downsampling. Any value different from 0 or 1 gives the default (averaging) behavior.&lt;br&gt;- 0: Only use even lines when downsampling.&lt;br&gt;- 1: Only use odd lines when downsampling."/>
+ <opt name="ilpack" type="int" min="0" max="1" default="1" description="When interlaced video is stored in YUV 4:2:0 formats, chroma interlacing does not line up properly due to vertical downsampling of the chroma channels. This filter packs the planar 4:2:0 data into YUY2 (4:2:2) format with the chroma lines in their proper locations, so that in any given scanline, the luma and chroma data both come from the same field.&lt;br&gt;&lt;br&gt;Select the sampling mode.&lt;br&gt;- 0: nearest-neighbor sampling, fast but incorrect&lt;br&gt;- 1: linear interpolation (default)"/>
+ <opt name="harddup" type="bool" default="false" description="Only useful with MEncoder. If harddup is used when encoding, it will force duplicate frames to be encoded in the output.&lt;br&gt;This uses slightly more space, but is necessary for output to MPEG files or if you plan to demux and remux the video stream after encoding. Should be placed at or near the end of the filter chain unless you have a good reason to do otherwise."/>
+ <opt name="softskip" type="bool" default="false" description="Only useful with MEncoder. Softskip moves the frame skipping (dropping) step of encoding from before the filter chain to some point during the filter chain.&lt;br&gt;This allows filters which need to see all frames (inverse telecine, temporal denoising, etc.) to function properly. Should be placed after the filters which need to see all frames and before any subsequent filters that are CPU-intensive."/>
+ <opt name="decimate" separator=":" description="Drops frames that do not differ greatly from the previous frame in order to reduce framerate. The main use of this filter is for very-low-bitrate encoding (e.g. streaming over dialup modem), but it could in theory be used for fixing movies that were inverse-telecined incorrectly.">
+ <subopt name="max" min="-100" max="100" default="0" description="Sets the maximum number of consecutive frames which can be dropped (if positive), or the minimum interval between dropped frames (if negative)."/>
+ <subopt name="hi" min="-100" max="100" default="0" description="A frame is a candidate for dropping if no 8x8 region differs by more than a threshold of hi, and if not more than frac portion (1 meaning the whole image) differs by more than a threshold of lo. Values of hi and lo are for 8x8 pixel blocks and represent actual pixel value differences, so a threshold of 64 corresponds to 1 unit of difference for each pixel, or the same spread out differently over the block."/>
+ <subopt name="lo" min="-100" max="100" default="0" description="A frame is a candidate for dropping if no 8x8 region differs by more than a threshold of hi, and if not more than frac portion (1 meaning the whole image) differs by more than a threshold of lo. Values of hi and lo are for 8x8 pixel blocks and represent actual pixel value differences, so a threshold of 64 corresponds to 1 unit of difference for each pixel, or the same spread out differently over the block."/>
+ <subopt name="frac" min="-100" max="100" default="0" description="A frame is a candidate for dropping if no 8x8 region differs by more than a threshold of hi, and if not more than frac portion (1 meaning the whole image) differs by more than a threshold of lo. Values of hi and lo are for 8x8 pixel blocks and represent actual pixel value differences, so a threshold of 64 corresponds to 1 unit of difference for each pixel, or the same spread out differently over the block."/>
+ </opt>
+ <opt name="dint" separator=":" description="The drop-deinterlace (dint) filter detects and drops the first from a set of interlaced video frames.">
+ <subopt name="sense" type="float" min="0.0" max="1.0" default="0.1" description="relative difference between neighboring pixels (default: 0.1)"/>
+ <subopt name="level" type="float" min="0.0" max="1.0" default="0.15" description="What part of the image has to be detected as interlaced to drop the frame (default: 0.15)."/>
+ </opt>
+ <opt name="kerndeint" separator=":" description="Donald Graft’s adaptive kernel deinterlacer.&lt;br&gt;Deinterlaces parts of a video if a configurable threshold is exceeded.">
+ <subopt name="thresh" type="int" min="0" max="255" default="10" description="threshold (default: 10)"/>
+ <subopt name="map" type="int" min="0" max="1" default="0" description="0: Ignore pixels exceeding the threshold (default).&lt;br&gt;1: Paint pixels exceeding the threshold white."/>
+ <subopt name="order" type="int" min="0" max="1" default="0" description="0: Leave fields alone (default).&lt;br&gt;1: Swap fields."/>
+ <subopt name="sharp" type="int" min="0" max="1" default="0" description="0: Disable additional sharpening (default).&lt;br&gt;1: Enable additional sharpening."/>
+ <subopt name="twoway" type="int" min="0" max="1" default="0" description="0: Disable twoway sharpening (default).&lt;br&gt;1: Enable twoway sharpening."/>
+ </opt>
+ <opt name="unsharp" type="string" default="" description="&lt;b&gt;unsharp[=l|cWxH:amount[:l|cWxH:amount]]&lt;/b&gt;&lt;br&gt;unsharp mask / gaussian blur&lt;br&gt;- l : Apply effect on luma component.&lt;br&gt;- c : Apply effect on chroma components.&lt;br&gt;- |width|x|height| : width and height of the matrix, odd sized in both directions (min = 3x3, max = 13x11 or 11x13, usually something between 3x3 and 7x7)&lt;br&gt;- amount : Relative amount of sharpness/blur to add to the image (a sane range should be -1.5−1.5). less than 0: blur | greater than 0: sharpen"/>
+ <opt name="swapuv" type="bool" default="false" description="Swap U and V plane."/>
+ <opt name="il" separator=":" description="De)interleaves lines. The goal of this filter is to add the ability to process interlaced images pre-field without deinterlacing them.&lt;br&gt;You can filter your interlaced DVD and play it on a TV without breaking the interlacing. While deinterlacing (with the postprocessing filter) removes interlacing permanently (by smoothing, averaging, etc) deinterleaving splits the frame into 2 fields (so called half pictures), so you can process (filter) them independently and then re-interleave them.">
+ <subopt name="-" type="string" default="" description="d : deinterleave (placing one above the other)&lt;br&gt;i : interleave&lt;br&gt;s : swap fields (exchange even and odd lines)">
+ <value name=""/>
+ <value name="d"/>
+ <value name="i"/>
+ <value name="s"/>
+ </subopt>
+ <subopt name="-" type="string" default="" description="d : deinterleave (placing one above the other)&lt;br&gt;i : interleave&lt;br&gt;s : swap fields (exchange even and odd lines)">
+ <value name=""/>
+ <value name="d"/>
+ <value name="i"/>
+ <value name="s"/>
+ </subopt>
+ </opt>
+ <opt name ="fil" type="string" default="d" description="(De)interleaves lines. This filter is very similar to the il filter but much faster, the main disadvantage is that it does not always work. Especially if combined with other filters it may produce randomly messed up images, so be happy if it works but do not complain if it does not for your combination of filters.&lt;br&gt;- d : Deinterleave fields, placing them side by side.&lt;br&gt;- i : Interleave fields again (reversing the effect of fil=d).">
+ <value name="d"/>
+ <value name="i"/>
+ </opt>
+ <opt name="field" type="int" min="1" max="2" default=" " special=" " description="Extracts a single field from an interlaced image using stride arithmetic to avoid wasting CPU time.&lt;br&gt;The optional argument n specifies whether to extract the even or the odd field (depending on whether n is even or odd)."/>
+ <opt name="detc" separator=":" description="Attempts to reverse the ’telecine’ process to recover a clean, non-interlaced stream at film framerate.&lt;br&gt;This was the first and most primitive inverse telecine filter to be added to MPlayer/MEncoder. It works by latching onto the telecine 3:2 pattern and following it as long as possible. This makes it suitable for perfectly-telecined material, even in the presence of a fair degree of noise, but it will fail in the presence of complex post-telecine edits. Development on this filter is no longer taking place, as ivtc, pullup, and filmdint are better for most applications. The following arguments (see syntax above) may be used to control detc’s behavior">
+ <subopt name="dr" type="int" min="0" max="2" default="0" prefix="dr=" description="Set the frame dropping mode.&lt;br&gt;0: Do not drop frames to maintain fixed output framerate (default).&lt;br&gt;1: Always drop a frame when there have been no drops or telecine merges in the past 5 frames.&lt;br&gt;2: Always maintain exact 5:4 input to output frame ratio.&lt;br&gt;NOTE: Use mode 1 or 2 with MEncoder."/>
+ <subopt name="am" type="int" min="0" max="1" default="1" prefix="am=" description="Analysis mode.&lt;br&gt;0: Fixed pattern with initial frame number specified by fr.&lt;br&gt;1: aggressive search for telecine pattern (default)"/>
+ <subopt name="fr" type="int" min="-1" max="4" default="0" prefix="fr=" description="Set initial frame number in sequence. 0−2 are the three clean progressive frames; 3 and 4 are the two interlaced frames. The default, -1, means ’not in telecine sequence’.&lt;br&gt; The number specified here is the type for the imaginary previous frame before the movie starts."/>
+ <subopt name="t0" type="int" min="0" max="100" default="0" prefix="t0=" description="Threshold values to be used in certain modes."/>
+ <subopt name="t1" type="int" min="0" max="100" default="0" prefix="t1=" description="Threshold values to be used in certain modes."/>
+ <subopt name="t2" type="int" min="0" max="100" default="0" prefix="t2=" description="Threshold values to be used in certain modes."/>
+ <subopt name="t3" type="int" min="0" max="100" default="0" prefix="t3=" description="Threshold values to be used in certain modes."/>
+ </opt>
+ <opt name="ivtc" type="int" min="1" max="1" default="1" description="Experimental ’stateless’ inverse telecine filter. Rather than trying to lock on to a pattern like the detc filter does, ivtc makes its decisions independently for each frame.&lt;br&gt;This will give much better results for material that has undergone heavy editing after telecine was applied, but as a result it is not as forgiving of noisy input, for example TV capture. The optional parameter (ivtc=1) corresponds to the dr=1 option for the detc filter, and should be used with MEncoder but not with MPlayer. As with detc, you must specify the correct output framerate (−ofps 24000/1001) when using MEncoder. Further development on ivtc has stopped, as the pullup and filmdint filters appear to be much more accurate."/>
+ <opt name="pullup" separator=":" description="Third-generation pulldown reversal (inverse telecine) filter, capable of handling mixed hard-telecine, 24000/1001 fps progressive, and 30000/1001 fps progressive content.&lt;br&gt;The pullup filter is designed to be much more robust than detc or ivtc, by taking advantage of future context in making its decisions. Like ivtc, pullup is stateless in the sense that it does not lock onto a pattern to follow, but it instead looks forward to the following fields in order to identify matches and rebuild progressive frames. It is still under development, but believed to be quite accurate.&lt;br&gt;NOTE: Always follow pullup with the softskip filter when encoding to ensure that pullup is able to see each frame. Failure to do so will lead to incorrect output and will usually crash, due to design limitations in the codec/filter layer.">
+ <subopt name="jl" type="bool" default="false" description="These options set the amount of 'junk' to ignore at the left, right, top, and bottom of the image, respectively.&lt;br&gt;Left/right are in units of 8 pixels, while top/bottom are in units of 2 lines. The default is 8 pixels on each side."/>
+ <subopt name="jr" type="bool" default="false" description="These options set the amount of 'junk' to ignore at the left, right, top, and bottom of the image, respectively.&lt;br&gt;Left/right are in units of 8 pixels, while top/bottom are in units of 2 lines. The default is 8 pixels on each side."/>
+ <subopt name="jt" type="bool" default="false" description="These options set the amount of 'junk' to ignore at the left, right, top, and bottom of the image, respectively.&lt;br&gt;Left/right are in units of 8 pixels, while top/bottom are in units of 2 lines. The default is 8 pixels on each side."/>
+ <subopt name="jb" type="bool" default="false" description="These options set the amount of 'junk' to ignore at the left, right, top, and bottom of the image, respectively.&lt;br&gt;Left/right are in units of 8 pixels, while top/bottom are in units of 2 lines. The default is 8 pixels on each side."/>
+ <subopt name="sb" type="bool" default="false" description="Setting this option to 1 will reduce the chances of pullup generating an occasional mismatched frame, but it may also cause an excessive number of frames to be dropped during high motion sequences.&lt;br&gt;Conversely, setting it to -1 will make pullup match fields more easily. This may help processing of video where there is slight blurring between the fields, but may also cause there to be interlaced frames in the output."/>
+ <subopt name="mp" type="bool" default="false" description="This option may be set to 1 or 2 to use a chroma plane instead of the luma plane for doing pullup’s computations.&lt;br&gt;This may improve accuracy on very clean source material, but more likely will decrease accuracy, especially if there is chroma noise (rainbow effect) or any grayscale video. The main purpose of setting mp to a chroma plane is to reduce CPU load and make pullup usable in realtime on slow machines."/>
+ </opt>
+ <opt name="filmdint" type="string" default="" description="Inverse telecine filter, similar to the pullup filter above.&lt;br&gt;It is designed to handle any pulldown pattern, including mixed soft and hard telecine and limited support for movies that are slowed down or sped up from their original framerate for TV. Only the luma plane is used to find the frame breaks. If a field has no match, it is deinterlaced with simple linear approximation. If the source is MPEG-2, this must be the first filter to allow access to the field-flags set by the MPEG-2 decoder. Depending on the source MPEG, you may be fine ignoring this advice, as long as you do not see lots of 'Bottom-first field' warnings. With no options it does normal inverse telecine, and should be used together with mencoder −fps 30000/1001 −ofps 24000/1001. When this filter is used with mplayer, it will result in an uneven framerate during playback, but it is still generally better than using pp=lb or no deinterlacing at all. Multiple options can be specified separated by /.&lt;br&gt;crop=w:h:x:y&lt;br&gt;Just like the crop filter, but faster, and works on mixed hard and soft telecined content as well as when y is not a multiple of 4. If x or y would require cropping fractional pixels from the chroma planes, the crop area is extended. This usually means that x and y must be even.&lt;br&gt;&lt;br&gt;io=ifps:ofps&lt;br&gt;For each ifps input frames the filter will output ofps frames. The ratio of ifps/ofps should match the −fps/−ofps ratio. This could be used to filter movies that are broadcast on TV at a frame rate different from their original framerate.&lt;br&gt;&lt;br&gt;luma_only=n&lt;br&gt;If n is nonzero, the chroma plane is copied unchanged. This is useful for YV12 sampled TV, which discards one of the chroma fields.&lt;br&gt;&lt;br&gt;mmx2=n&lt;br&gt;On x86, if n=1, use MMX2 optimized functions, if n=2, use 3DNow! optimized functions, otherwise, use plain C. If this option is not specified, MMX2 and 3DNow! are auto-detected, use this option to override auto-detection.&lt;br&gt;&lt;br&gt;fast=n&lt;br&gt;The larger n will speed up the filter at the expense of accuracy. The default value is n=3. If n is odd, a frame immediately following a frame marked with the REPEAT_FIRST_FIELD MPEG flag is assumed to be progressive, thus filter will not spend any time on soft-telecined MPEG-2 content. This is the only effect of this flag if MMX2 or 3DNow! is available. Without MMX2 and 3DNow, if n=0 or 1, the same calculations will be used as with n=2 or 3. If n=2 or 3, the number of luma levels used to find the frame breaks is reduced from 256 to 128, which results in a faster filter without losing much accuracy. If n=4 or 5, a faster, but much less accurate metric will be used to find the frame breaks, which is more likely to misdetect high vertical detail as interlaced content.&lt;br&gt;&lt;br&gt;verbose=n&lt;br&gt;If n is nonzero, print the detailed metrics for each frame. Useful for debugging.&lt;br&gt;&lt;br&gt;dint_thres=n&lt;br&gt;Deinterlace threshold. Used during de-interlacing of unmatched frames. Larger value means less deinterlacing, use n=256 to completely turn off deinterlacing. Default is n=8.&lt;br&gt;&lt;br&gt;comb_thres=n&lt;br&gt;Threshold for comparing a top and bottom fields. Defaults to 128.&lt;br&gt;&lt;br&gt;diff_thres=n&lt;br&gt;Threshold to detect temporal change of a field. Default is 128.&lt;br&gt;&lt;br&gt;sad_thres=n&lt;br&gt;Sum of Absolute Difference threshold, default is 64."/>
+ <opt name="softpulldown" type="bool" default="false" description="This filter works only correct with MEncoder and acts on the MPEG-2 flags used for soft 3:2 pulldown (soft telecine).&lt;br&gt;If you want to use the ivtc or detc filter on movies that are partly soft telecined, inserting this filter before them should make them more reliable."/>
+ <opt name="divtc" type="string" default="" description="Inverse telecine for deinterlaced video. If 3:2-pulldown telecined video has lost one of the fields or is deinterlaced using a method that keeps one field and interpolates the other, the result is a juddering video that has every fourth frame duplicated.&lt;br&gt;This filter is intended to find and drop those duplicates and restore the original film framerate. When using this filter, you must specify −ofps that is 4/5 of the fps of the input file and place the softskip later in the filter chain to make sure that divtc sees all the frames. Two different modes are available: One pass mode is the default and is straightforward to use, but has the disadvantage that any changes in the telecine phase (lost frames or bad edits) cause momentary judder until the filter can resync again. Two pass mode avoids this by analyzing the whole video beforehand so it will have forward knowledge about the phase changes and can resync at the exact spot. These passes do not correspond to pass one and two of the encoding process. You must run an extra pass using divtc pass one before the actual encoding throwing the resulting video away. Use −nosound −ovc raw −o /dev/null to avoid wasting CPU power for this pass. You may add something like crop=2:2:0:0 after divtc to speed things up even more. Then use divtc pass two for the actual encoding. If you use multiple encoder passes, use divtc pass two for all of them. The options are:&lt;br&gt;pass=1|2 : Use two pass mode.&lt;br&gt;&lt;br&gt;file=filename : Set the two pass log filename (default: 'framediff.log').&lt;br&gt;&lt;br&gt;threshold=value : Set the minimum strength the telecine pattern must have for the filter to believe in it (default: 0.5). This is used to avoid recognizing false pattern from the parts of the video that are very dark or very still.&lt;br&gt;&lt;br&gt;window=numframes : &lt;br&gt;Set the number of past frames to look at when searching for pattern (default: 30). Longer window improves the reliability of the pattern search, but shorter window improves the reaction time to the changes in the telecine phase. This only affects the one pass mode. The two pass mode currently uses fixed window that extends to both future and past.&lt;br&gt;&lt;br&gt;phase=0|1|2|3|4 : Sets the initial telecine phase for one pass mode (default: 0). The two pass mode can see the future, so it is able to use the correct phase from the beginning, but one pass mode can only guess. It catches the correct phase when it finds it, but this option can be used to fix the possible juddering at the beginning. The first pass of the two pass mode also uses this, so if you save the output from the first pass, you get constant phase result.&lt;br&gt;&lt;br&gt;deghost=value : Set the deghosting threshold (0−255 for one pass mode, -255−255 for two pass mode, default 0). If nonzero, deghosting mode is used. This is for video that has been deinterlaced by blending the fields together instead of dropping one of the fields. Deghosting amplifies any compression artifacts in the blended frames, so the parameter value is used as a threshold to exclude those pixels from deghosting that differ from the previous frame less than specified value. If two pass mode is used, then negative value can be used to make the filter analyze the whole video in the beginning of pass-2 to determine whether it needs deghosting or not and then select either zero or the absolute value of the parameter. Specify this option for pass-2, it makes no difference on pass-1."/>
+ <opt name="phase" separator=":" description="Delay interlaced video by one field time so that the field order changes. The intended use is to fix PAL movies that have been captured with the opposite field order to the film-to-video transfer">
+ <subopt name="option" type="string" default="t" description="- t : Capture field order top-first, transfer bottom-first. Filter will delay the bottom field.&lt;br&gt;- b : Capture bottom-first, transfer top-first. Filter will delay the top field.&lt;br&gt;- p : Capture and transfer with the same field order. This mode only exists for the documentation of the other options to refer to, but if you actually select it, the filter will faithfully do nothing ;-)&lt;br&gt;- a : Capture field order determined automatically by field flags, transfer opposite. Filter selects among t and b modes on a frame by frame basis using field flags. If no field information is available, then this works just like u.&lt;br&gt;- u : Capture unknown or varying, transfer opposite. Filter selects among t and b on a frame by frame basis by analyzing the images and selecting the alternative that produces best match between the fields.&lt;br&gt;- T : Capture top-first, transfer unknown or varying. Filter selects among t and p using image analysis.&lt;br&gt;- B : Capture bottom-first, transfer unknown or varying. Filter selects among b and p using image analysis.&lt;br&gt;- A : Capture determined by field flags, transfer unknown or varying. Filter selects among t, b and p using field flags and image analysis. If no field information is available, then this works just like U. This is the default mode.&lt;br&gt;- U : Both capture and transfer unknown or varying. Filter selects among t, b and p using image analysis only.">
+ <value name="t"/>
+ <value name="b"/>
+ <value name="p"/>
+ <value name="a"/>
+ <value name="u"/>
+ <value name="T"/>
+ <value name="B"/>
+ <value name="A"/>
+ <value name="U"/>
+ </subopt>
+ <subopt name="v" type="bool" default="false" description="Verbose operation. Prints the selected mode for each frame and the average squared difference between fields for t, b, and p alternatives."/>
+ </opt>
+ <opt name="telecine" separator=":" description="">
+ <subopt name="start" type="bool" default="false" description="Apply 3:2 ’telecine’ process to increase framerate by 20%.&lt;br&gt;This most likely will not work correctly with MPlayer, but it can be used with ’mencoder −fps 30000/1001 −ofps 30000/1001 −vf telecine’. Both fps options are essential! (A/V sync will break if they are wrong.) The optional start parameter tells the filter where in the telecine pattern to start (0−3)."/>
+ </opt>
+ <opt name="tinterlace" type="int" min="0" max="4" default="0" description="Temporal field interlacing − merge pairs of frames into an interlaced frame, halving the framerate. Even frames are moved into the upper field, odd frames to the lower field. This can be used to fully reverse the effect of the tfields filter (in mode 0). Available modes are:&lt;br&gt;- 0 : Move odd frames into the upper field, even into the lower field, generating a full-height frame at half framerate.&lt;br&gt;- 1 : Only output odd frames, even frames are dropped; height unchanged.&lt;br&gt;- 2 : Only output even frames, odd frames are dropped; height unchanged.&lt;br&gt;- 3 : Expand each frame to full height, but pad alternate lines with black; framerate unchanged.&lt;br&gt;- 4 : Interleave even lines from even frames with odd lines from odd frames. Height unchanged at half framerate."/>
+ <opt name="tfields" separator=":" description="Temporal field separation − split fields into frames, doubling the output framerate.&lt;br&gt;Like the telecine filter, tfields will only work properly with MEncoder, and only if both −fps and −ofps are set to the desired (double) framerate!">
+ <subopt name="mode" type="int" min="0" max="4" default="4" description="0: Leave fields unchanged (will jump/flicker).&lt;br&gt;1: Interpolate missing lines. (The algorithm used might not be so good.)&lt;br&gt;2: Translate fields by 1/4 pixel with linear interpolation (no jump).&lt;br&gt;4: Translate fields by 1/4 pixel with 4tap filter (higher quality) (default)."/>
+ <subopt name="field_dominance" type="int" min="-1" max="1" default="-1" description="(DEPRECATED)&lt;br&gt;-1: auto (default) Only works if the decoder exports the appropriate information and no other filters which discard that information come before tfields in the filter chain, otherwise it falls back to 0 (top field first).&lt;br&gt;0: top field first&lt;br&gt;1: bottom field first&lt;br&gt;NOTE: This option will possibly be removed in a future version. Use −field-dominance instead."/>
+ </opt>
+ <opt name="yadif" separator=":" description="Yet another deinterlacing filter">
+ <subopt name="mode" type="int" min="1" max="3" default="1" description="0: Output 1 frame for each frame.&lt;br&gt;1: Output 1 frame for each field.&lt;br&gt;2: Like 0 but skips spatial interlacing check.&lt;br&gt;3: Like 1 but skips spatial interlacing check."/>
+ <subopt name="field_dominance" type="int" min="-1" max="1" default="-1" description="(DEPRECATED)&lt;br&gt;-1: auto (default) Only works if the decoder exports the appropriate information and no other filters which discard that information come before tfields in the filter chain, otherwise it falls back to 0 (top field first).&lt;br&gt;0: top field first&lt;br&gt;1: bottom field first&lt;br&gt;NOTE: This option will possibly be removed in a future version. Use −field-dominance instead."/>
+ </opt>
+ <opt name="mcdeint" separator=":" description="Motion compensating deinterlacer.&lt;br&gt;It needs one field per frame as input and must thus be used together with tfields=1 or yadif=1/3 or equivalent.">
+ <subopt name="mode" type="int" min="0" max="3" default="0" description="0: fast&lt;br&gt;1: medium&lt;br&gt;2: slow, iterative motion estimation&lt;br&gt;3: extra slow, like 2 plus multiple reference frames"/>
+ <subopt name="parity" type="int" min="0" max="1" default="0" description="0 or 1 selects which field to use (note: no autodetection yet!)."/>
+ <subopt name="qp" type="int" min="0" max="100" default="0" description="Higher values should result in a smoother motion vector field but less optimal individual vectors."/>
+ </opt>
+ <opt name="boxblur" separator=":" description="box blur">
+ <subopt name="radius" type="float" min="0.1" max="10.0" default="0.1" description="blur filter strength"/>
+ <subopt name="power" type="float" min="0.0" max="100.0" default="0.0" description="number of filter applications"/>
+ <subopt name="radius" type="float" min="0.1" max="10.0" default="0.1" description="blur filter strength"/>
+ <subopt name="power" type="float" min="0.0" max="100.0" default="0.0" description="number of filter applications"/>
+ </opt>
+ <opt name="sab" separator=":" description="shape adaptive blur">
+ <subopt name="radius" type="float" min="0.1" max="10.0" default="0.1" description="blur filter strength (~0.1−4.0) (slower if larger)"/>
+ <subopt name="pf" type="float" min="0.1" max="10.0" default="0.1" description="prefilter strength (~0.1−2.0)"/>
+ <subopt name="colordiff" type="float" min="0.0" max="100.0" default="0.0" description="maximum difference between pixels to still be considered (~0.1−100.0)"/>
+ <subopt name="radius" type="float" min="0.1" max="10.0" default="0.1" description="blur filter strength (~0.1−4.0) (slower if larger)"/>
+ <subopt name="pf" type="float" min="0.1" max="10.0" default="0.1" description="prefilter strength (~0.1−2.0)"/>
+ <subopt name="colordiff" type="float" min="0.0" max="100.0" default="0.0" description="maximum difference between pixels to still be considered (~0.1−100.0)"/>
+ </opt>
+ <opt name="smartblur" separator=":" description="smart blur">
+ <subopt name="radius" type="float" min="0.1" max="10.0" default="0.1" description="blur filter strength (~0.1−5.0) (slower if larger)"/>
+ <subopt name="strength" type="float" min="-1.0" max="1.0" default="0.0" description="blur (0.0−1.0) or sharpen (-1.0−0.0)"/>
+ <subopt name="threshold" type="int" min="-30" max="30" default="0" description="filter all (0), filter flat areas (0−30) or filter edges (-30−0)"/>
+ <subopt name="radius" type="float" min="0.1" max="10.0" default="0.1" description="blur filter strength (~0.1−5.0) (slower if larger)"/>
+ <subopt name="strength" type="float" min="-1.0" max="1.0" default="0.0" description="blur (0.0−1.0) or sharpen (-1.0−0.0)"/>
+ <subopt name="threshold" type="int" min="-30" max="30" default="0" description="filter all (0), filter flat areas (0−30) or filter edges (-30−0)"/>
+ </opt>
+ <opt name="perspective" separator=":" description="Correct the perspective of movies not filmed perpendicular to the screen.">
+ <subopt name="x0" type="int" min="0" max="10000" default="0" description="coordinates of top left"/>
+ <subopt name="y0" type="int" min="0" max="10000" default="0" description="coordinates of top left"/>
+ <subopt name="x1" type="int" min="0" max="10000" default="0" description="coordinates of top right"/>
+ <subopt name="y1" type="int" min="0" max="10000" default="0" description="coordinates of top right"/>
+ <subopt name="x2" type="int" min="0" max="10000" default="0" description="coordinates of bottom left"/>
+ <subopt name="y2" type="int" min="0" max="10000" default="0" description="coordinates of bottom left"/>
+ <subopt name="x3" type="int" min="0" max="10000" default="0" description="coordinates of bottom right"/>
+ <subopt name="x3" type="int" min="0" max="10000" default="0" description="coordinates of bottom right"/>
+ <subopt name="t" type="int" min="0" max="1" default="0" description="inear (0) or cubic resampling (1)"/>
+ </opt>
+ <opt name="2xsai" type="bool" default="false" description="Scale and smooth the image with the 2x scale and interpolate algorithm."/>
+ <opt name="1bpp" type="bool" default="false" description="1bpp bitmap to YUV/BGR 8/15/16/32 conversion"/>
+ <opt name="down3dright" separator=":" description="Reposition and resize stereoscopic images.&lt;br&gt;Extracts both stereo fields and places them side by side, resizing them to maintain the original movie aspect.">
+ <subopt name="lines" type="int" min="0" max="100" default="12" description="number of lines to select from the middle of the image (default: 12)"/>
+ </opt>
+ <opt name="bmovl" separator=":" description="The bitmap overlay filter reads bitmaps from a FIFO and displays them on top of the movie,&lt;br&gt;allowing some transformations on the image. Also see TOOLS/bmovl-test.c for a small bmovl test program.">
+ <subopt name="hidden" type="int" min="0" max="1" default="0" description="Set the default value of the ’hidden’ flag (0=visible, 1=hidden)."/>
+ <subopt name="opaque" type="int" min="0" max="1" default="0" description="Set the default value of the ’opaque’ flag (0=transparent, 1=opaque)."/>
+ <subopt name="fifo" type="string" default="" description="path/filename for the FIFO (named pipe connecting ’mencoder −vf bmovl’ to the controlling application)&lt;br&gt;FIFO commands are:&lt;br&gt;- RGBA32 width height xpos ypos alpha. clear followed by width*height*4 Bytes of raw RGBA32 data.&lt;br&gt;- ABGR32 width height xpos ypos alpha. clear followed by width*height*4 Bytes of raw ABGR32 data.&lt;br&gt;- RGB24 width height xpos ypos alpha clear. followed by width*height*3 Bytes of raw RGB24 data.&lt;br&gt;- BGR24 width height xpos ypos alpha clear. followed by width*height*3 Bytes of raw BGR24 data.&lt;br&gt;- ALPHA width height xpos ypos alpha. Change alpha transparency of the specified area.&lt;br&gt;- CLEAR width height xpos ypos. Clear area.&lt;br&gt;- OPAQUE : Disable all alpha transparency. Send 'ALPHA 0 0 0 0 0' to enable it again.&lt;br&gt;- HIDE : Hide bitmap.&lt;br&gt;- SHOW : Show bitmap.&lt;br&gt;&lt;br&gt;Arguments are:&lt;br&gt;width, height : image/area size&lt;br&gt;xpos, ypos : Start blitting at position x/y.&lt;br&gt;alpha : Set alpha difference. If you set this to -255 you can then send a sequence of ALPHA-commands to set the area to -225, -200, -175 etc for a nice fade-in-effect! ;)&lt;br&gt;...0: same as original&lt;br&gt;...255: Make everything opaque.&lt;br&gt;...-255: Make everything transparent.&lt;br&gt;clear : Clear the framebuffer before blitting.&lt;br&gt;...0: The image will just be blitted on top of the old one, so you do not need to send 1.8MB of RGBA32 data every time a small part of the screen is updated.&lt;br&gt;...1: clear"/>
+ </opt>
+ <opt name="framestep" separator=":" description="Renders only every nth frame or every intra frame (keyframe).&lt;br&gt;If you call the filter with I (uppercase) as the parameter, then only keyframes are rendered. For DVDs it generally means one in every 15/12 frames (IBBPBBPBBPBBPBB), for AVI it means every scene change or every keyint value (see −lavcopts keyint= value if you use MEncoder to encode the video).&lt;br&gt;When a keyframe is found, an ’I!’ string followed by a newline character is printed, leaving the current line of MPlayer/ MEncoder output on the screen, because it contains the time (in seconds) and frame number of the keyframe (You can use this information to split the AVI.).&lt;br&gt;If you call the filter with a numeric parameter ’step’ then only one in every ’step’ frames is rendered.&lt;br&gt;If you put an ’i’ (lowercase) before the number then an ’I!’ is printed (like the I parameter).&lt;br&gt;If you give only the i then nothing is done to the frames, only I! is printed.">
+ <subopt name="i" type="int" min="1" max="100" default=" " prefix="i" description="" special=" "/>
+ <subopt name="I" type="int" min="1" max="100" default=" " prefix="I" description="" special=" "/>
+ </opt>
+ <opt name="tile" separator=":" description="Tile a series of images into a single, bigger image.&lt;br&gt;If you omit a parameter or use a value less than 0, then the default value is used. You can also stop when you are satisfied (... −vf tile=10:5 ...). It is probably a good idea to put the scale filter before the tile :-)">
+ <subopt name="xtiles" type="int" min="0" max="100" default="5" description="number of tiles on the x axis (default: 5)"/>
+ <subopt name="ytiles" type="int" min="0" max="100" default="5" description="number of tiles on the y axis (default: 5)"/>
+ <subopt name="output" type="int" min="0" max="100" default="50" description="Render the tile when ’output’ number of frames are reached, where ’output’ should be a number less than xtile * ytile. Missing tiles are left blank. You could, for example, write an 8 * 7 tile every 50 frames to have one image every 2 seconds @ 25 fps."/>
+ <subopt name="start" type="int" min="0" max="100" default="2" description="outer border thickness in pixels (default: 2)"/>
+ <subopt name="delta" type="int" min="0" max="100" default="4" description="inner border thickness in pixels (default: 4)"/>
+ </opt>
+ <opt name="delogo" separator=":" description="Suppresses a TV station logo by a simple interpolation of the surrounding pixels. Just set a rectangle covering the logo and watch it disappear (and sometimes something even uglier appear − your mileage may vary).">
+ <subopt name="x" type="int" min="0" max="1000" default="0" description="left corner of the logo"/>
+ <subopt name="y" type="int" min="0" max="1000" default="0" description="top corner of the logo"/>
+ <subopt name="w" type="int" min="0" max="1000" default="0" description="width of the cleared rectangle"/>
+ <subopt name="h" type="int" min="0" max="1000" default="0" description="height of the cleared rectangle"/>
+ <subopt name="t" type="int" min="0" max="1000" default="0" description="Thickness of the fuzzy edge of the rectangle (added to w and h).&lt;br&gt; When set to -1, a green rectangle is drawn on the screen to simplify finding the right x,y,w,h parameters."/>
+ </opt>
+ <opt name="remove-logo" type="string" default="" description="Suppresses a TV station logo, using a PGM or PPM image file to determine which pixels comprise the logo. The width and height of the image file must match those of the video stream being processed. Uses the filter image and a circular blur algorithm to remove the logo.&lt;br&gt;/path/to/logo_bitmap_file_name.pgm : [path] + filename of the filter image."/>
+ </vf>
+ <af separator=",">
+ <opt name="resample" separator=":" description="Changes the sample rate of the audio stream. Can be used if you have a fixed frequency sound card or if you are stuck with an old sound card that is only capable of max 44.1kHz. This filter is automatically enabled if necessary. It only supports 16-bit integer and float in native-endian format as input.&lt;br&gt;NOTE: With MEncoder, you need to also use −srate srate.">
+ <subopt name="srate" type="int" min="8000" max="192000" default="44100" description="output sample frequency in Hz. The valid range for this parameter is 8000 to 192000.&lt;br&gt;If the input and output sample frequency are the same or if this parameter is omitted the filter is automatically unloaded. A high sample frequency normally improves the audio quality, especially when used in combination with other filters."/>
+ <subopt name="sloppy" type="int" min="0" max="1" default="0" description="Allow (1) or disallow (0) the output frequency to differ slightly from the frequency given by srate (default: 1).&lt;br&gt;Can be used if the startup of the playback is extremely slow."/>
+ <subopt name="type" type="int" min="0" max="2" default="0" description="Selects which resampling method to use.&lt;br&gt;0: linear interpolation (fast, poor quality especially when upsampling)&lt;br&gt;1: polyphase filterbank and integer processing&lt;br&gt;2: polyphase filterbank and floating point processing (slow, best quality)"/>
+ </opt>
+ <opt name="lavcresample" separator=":" description="Changes the sample rate of the audio stream to an integer srate in Hz. It only supports the 16-bit native-endian format.&lt;br&gt;NOTE: With MEncoder, you need to also use −srate srate.">
+ <subopt name="srate" type="int" min="8000" max="192000" default="44100" description="the output sample rate"/>
+ <subtop name="length" type="int" min="0" max="100" default="16" description="length of the filter with respect to the lower sampling rate (default: 16)"/>
+ <subopt name="linear" type="int" min="0" max="1" default="0" description="if 1 then filters will be linearly interpolated between polyphase entries"/>
+ <subopt name="count" type="int" min="0" max="100" default="10" description="log2 of the number of polyphase entries (..., 10->1024, 11->2048, 12->4096, ...) (default: 10->1024)"/>
+ <subopt name="cutoff" type="float" min="0.0" max="1.0" default="0.0" description="cutoff frequency (0.0-1.0), default set depending upon filter length"/>
+ </opt>
+ <opt name="sweep" type="float" min="0.0" max="1.0" default="0.0" description="Produces a sine sweep.&lt;br&gt;0.0−1.0 : Sine function delta, use very low values to hear the sweep."/>
+ <opt name="sinesuppress" separator=":" description="Remove a sine at the specified frequency. Useful to get rid of the 50/60Hz noise on low quality audio equipment. It probably only works on mono input.">
+ <subopt name="freq" type="int" min="0" max="100" default="50" description="The frequency of the sine which should be removed (in Hz) (default: 50)"/>
+ <subopt name="decay" type="float" min="0.0" max="1.0" default="0.0001" step="0.0001" precision="4" description="Controls the adaptivity (a larger value will make the filter adapt to amplitude and phase changes quicker, a smaller value will make the adaptation slower) (default: 0.0001).&lt;br&gt; Reasonable values are around 0.001."/>
+ </opt>
+ <opt name="hrtf" type="string" default="0" description="Head-related transfer function: Converts multichannel audio to 2 channel output for headphones, preserving the spatiality of the sound.&lt;br&gt;Flag Meaning&lt;br&gt;- m : matrix decoding of the rear channel&lt;br&gt;- s : 2-channel matrix decoding&lt;br&gt;- 0 : no matrix decoding (default)">
+ <value name="m"/>
+ <value name="s"/>
+ <value name="0"/>
+ </opt>
+ <opt name="equalizer" separator=":" description="10 octave band graphic equalizer, implemented using 10 IIR band pass filters. This means that it works regardless of what type of audio is being played back. The center frequencies for the 10 bands are:&lt;br&gt;No. frequency&lt;br&gt;0 31.25 Hz&lt;br&gt;1 62.50 Hz&lt;br&gt;2 125.00 Hz&lt;br&gt;3 250.00 Hz&lt;br&gt;4 500.00 Hz&lt;br&gt;5 1.00 kHz&lt;br&gt;6 2.00 kHz&lt;br&gt;7 4.00 kHz&lt;br&gt;8 8.00 kHz&lt;br&gt;9 16.00 kHz&lt;br&gt;&lt;br&gt;If the sample rate of the sound being played is lower than the center frequency for a frequency band, then that band will be disabled. A known bug with this filter is that the characteristics for the uppermost band are not completely symmetric if the sample rate is close to the center frequency of that band. This problem can be worked around by upsampling the sound using the resample filter before it reaches this filter.">
+ <subopt name="g1" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ <subopt name="g2" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ <subopt name="g3" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ <subopt name="g4" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ <subopt name="g5" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ <subopt name="g6" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ <subopt name="g7" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ <subopt name="g8" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ <subopt name="g9" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ <subopt name="g10" type="float" min="-12.0" max="12.0" default="0.0" description="floating point numbers representing the gain in dB for each frequency band (-12−12)"/>
+ </opt>
+ <opt name="channels" type="string" default="" description="&lt;b&gt;channels=nch[:nr:from1:to1:from2:to2:from3:to3:...]&lt;/b&gt;&lt;br&gt;Can be used for adding, removing, routing and copying audio channels. If only nch is given the default routing is used, it works as follows: If the number of output channels is bigger than the number of input channels empty channels are inserted (except mixing from mono to stereo, then the mono channel is repeated in both of the output channels). If the number of output channels is smaller than the number of input channels the exceeding channels are truncated.&lt;br&gt;nch : number of output channels (1−6)&lt;br&gt;nr : number of routes (1−6)&lt;br&gt;from1:to1:from2:to2:from3:to3:...: Pairs of numbers between 0 and 5 that define where to route each channel."/>
+ <opt name="format" type="string" default="" description="Convert between different sample formats. Automatically enabled when needed by the sound card or another filter.&lt;br&gt;format : Sets the desired format. The general form is ’sbe’, where ’s’ denotes the sign (either ’s’ for signed or ’u’ for unsigned), ’b’ denotes the number of bits per sample (16, 24 or 32) and ’e’ denotes the endianness (’le’ means little-endian, ’be’ big-endian and ’ne’ the endianness of the computer MPlayer is running on). Valid values (amongst others) are: ’s16le’, ’u32be’ and ’u24ne’. Exceptions to this rule that are also valid format specifiers: u8, s8, floatle, floatbe, floatne, mulaw, alaw, mpeg2, ac3 and imaadpcm."/>
+ <opt name="volume" separator=":" description="Implements software volume control. Use this filter with caution since it can reduce the signal to noise ratio of the sound. In most cases it is best to set the level for the PCM sound to max, leave this filter out and control the output level to your speakers with the master volume control of the mixer. In case your sound card has a digital PCM mixer instead of an analog one, and you hear distortion, use the MASTER mixer instead. If there is an external amplifier connected to the computer (this is almost always the case), the noise level can be minimized by adjusting the master level and the volume knob on the amplifier until the hissing noise in the background is gone.&lt;br&gt;This filter has a second feature: It measures the overall maximum sound level and prints out that level when MPlayer exits. This volume estimate can be used for setting the sound level in MEncoder such that the maximum dynamic range is utilized.&lt;br&gt;NOTE: This filter is not reentrant and can therefore only be enabled once for every audio stream.">
+ <subopt name="v" type="int" min="-200" max="60" default="0" description="Sets the desired gain in dB for all channels in the stream from -200dB to +60dB,&lt;br&gt;where -200dB mutes the sound completely and +60dB equals a gain of 1000 (default: 0)."/>
+ <subopt name="sc" type="int" min="0" max="1" default="0" description="Turns soft clipping on (1) or off (0). Soft-clipping can make the sound more smooth if very high volume levels are used. Enable this option if the dynamic range of the loudspeakers is very low.&lt;br&gt;WARNING: This feature creates distortion and should be considered a last resort."/>
+ </opt>
+ <opt name="pan" type="string" default="" description="Mixes channels arbitrarily. Basically a combination of the volume and the channels filter that can be used to down-mix many channels to only a few, e.g. stereo to mono or vary the 'width' of the center speaker in a surround sound system. This filter is hard to use, and will require some tinkering before the desired result is obtained. The number of options for this filter depends on the number of output channels. An example how to downmix a six-channel file to two channels with this filter can be found in the examples section near the end.&lt;br&gt;&lt;br&gt;n : number of output channels (1−6)&lt;br&gt;Lij : How much of input channel i is mixed into output channel j (0−1). So in principle you first have n numbers saying what to do with the first input channel, then n numbers that act on the second input channel etc. If you do not specify any numbers for some input channels, 0 is assumed.&lt;br&gt;&lt;br&gt;EXAMPLE:&lt;br&gt;mplayer −af pan=1:0.5:0.5 media.avi&lt;br&gt;Would down-mix from stereo to mono.&lt;br&gt;mplayer −af pan=3:1:0:0.5:0:1:0.5 media.avi&lt;br&gt;Would give 3 channel output leaving channels 0 and 1 intact, and mix channels 0 and 1 into output channel 2 (which could be sent to a subwoofer for example)."/>
+ <opt name="sub" separator=":" description="Adds a subwoofer channel to the audio stream. The audio data used for creating the subwoofer channel is an average of the sound in channel 0 and channel 1. The resulting sound is then low-pass filtered by a 4th order Butterworth filter with a default cutoff frequency of 60Hz and added to a separate channel in the audio stream.&lt;br&gt;Warning: Disable this filter when you are playing DVDs with Dolby Digital 5.1 sound, otherwise this filter will disrupt the sound to the subwoofer.">
+ <subopt name="fc" type="int" min="20" max="300" default="60" description="cutoff frequency in Hz for the low-pass filter (20Hz to 300Hz) (default: 60Hz)&lt;br&gt;For the best result try setting the cutoff frequency as low as possible. This will improve the stereo or surround sound experience."/>
+ <subopt name="ch" type="int" min="0" max="5" default="5" description="Determines the channel number in which to insert the sub-channel audio. Channel number can be between 0 and 5 (default: 5).&lt;br&gt;Observe that the number of channels will automatically be increased to ch if necessary."/>
+ </opt>
+ <opt name="center" type="int" min="0" max="5" default="5" description="Creates a center channel from the front channels. May currently be low quality as it does not implement a high-pass filter for proper extraction yet, but averages and halves the channels instead.&lt;br&gt;&lt;br&gt;ch : Determines the channel number in which to insert the center channel. Channel number can be between 0 and 5 (default: 5). Observe that the number of channels will automatically be increased to ch if necessary."/>
+ <opt name="surround" type="int" min="0" max="1000" default="20" description="Decoder for matrix encoded surround sound like Dolby Surround. Many files with 2 channel audio actually contain matrixed surround sound. Requires a sound card supporting at least 4 channels.&lt;br&gt;&lt;br&gt;delay : delay time in ms for the rear speakers (0 to 1000) (default: 20) This delay should be set as follows: If d1 is the distance from the listening position to the front speakers and d2 is the distance from the listening position to the rear speakers, then the delay should be set to 15ms if d1 lt or = d2 and to 15 + 5*(d1-d2) if d1 > d2."/>
+ <opt name="delay" separator=":" description="Delays the sound to the loudspeakers such that the sound from the different channels arrives at the listening position simultaneously. It is only useful if you have more than 2 loudspeakers.&lt;br&gt;- 1.Measure the distance to the loudspeakers in meters in relation to your listening position, giving you the distances s1 to s5 (for a 5.1 system). There is no point in compensating for the subwoofer (you will not hear the difference anyway).&lt;br&gt;- 2. Subtract the distances s1 to s5 from the maximum distance, i.e. s[i] = max(s) - s[i]; i = 1...5.&lt;br&gt;- 3. Calculate the required delays in ms as d[i] = 1000*s[i]/342; i = 1...5.">
+ <subopt name="ch0" type="float" min="0" max="1000" default="0.0" description="the delay in ms that should be imposed on each channel (floating point number between 0 and 1000)."/>
+ <subopt name="ch1" type="float" min="0" max="1000" default="0.0" description="the delay in ms that should be imposed on each channel (floating point number between 0 and 1000)."/>
+ <subopt name="ch2" type="float" min="0" max="1000" default="0.0" description="the delay in ms that should be imposed on each channel (floating point number between 0 and 1000)."/>
+ <subopt name="ch3" type="float" min="0" max="1000" default="0.0" description="the delay in ms that should be imposed on each channel (floating point number between 0 and 1000)."/>
+ <subopt name="ch4" type="float" min="0" max="1000" default="0.0" description="the delay in ms that should be imposed on each channel (floating point number between 0 and 1000)."/>
+ <subopt name="ch5" type="float" min="0" max="1000" default="0.0" description="the delay in ms that should be imposed on each channel (floating point number between 0 and 1000)."/>
+ </opt>
+ <opt name="extrastereo" type="float" min="-10.0" max="10.0" default="2.5" description="(Linearly) increases the difference between left and right channels which adds some sort of 'live' effect to playback.&lt;br&gt;&lt;br&gt;mul : Sets the difference coefficient (default: 2.5). 0.0 means mono sound (average of both channels), with 1.0 sound will be unchanged, with -1.0 left and right channels will be swapped."/>
+ <opt name="volnorm" separator=":" description="Maximizes the volume without distorting the sound.">
+ <subopt name="method" type="int" min="1" max="2" default="1" description="Sets the used method.&lt;br&gt;1: Use a single sample to smooth the variations via the standard weighted mean over past samples (default).&lt;br&gt;2: Use several samples to smooth the variations via the standard weighted mean over past samples."/>
+ <subopt name="target" type="float" min="0.0" max="10.0" default="0.25" description="Sets the target amplitude as a fraction of the maximum for the sample type (default: 0.25)."/>
+ </opt>
+ <opt name="comp" type="bool" default="false" description="Compressor/expander filter usable for microphone input.&lt;br&gt;Prevents artifacts on very loud sound and raises the volume on very low sound. This filter is untested, maybe even unusable."/>
+ <opt name="gate" type="bool" default="false" description="Noise gate filter similar to the comp audio filter.&lt;br&gt;This filter is untested, maybe even unusable."/>
+ <opt name="karaoke" type="bool" default="false" description="Simple voice removal filter exploiting the fact that voice is usually recorded with mono gear and later ’center’ mixed onto the final audio stream.&lt;br&gt;Beware that this filter will turn your signal into mono. Works well for 2 channel tracks; do not bother trying it on anything but 2 channel stereo."/>
+ </af>
+ </FILTERS>
+ <AUDIO>
+ <lavc options="lavcopts">
+ <opt type="string" name="acodec" default="mp3">
+ <value name="mp3"/>
+ <value name="mp2"/>
+ <value name="ac3"/>
+ <value name="adpcm_ima_wav"/>
+ <value name="sonic"/>
+ </opt>
+ <opt type="int" name="abitrate" min="1" max="1000" default="$AUDBR" special="$AUDBR"/>
+ </lavc>
+ <toolame options="toolameopts">
+ <opt type="int" name="br" min="0" max="384" default="$AUDBR" special="$AUDBR"/>
+ <opt type="int" name="vbr" min="-50" max="50" default="0" />
+ <opt type="int" name="maxvbr" min="32" max="384" default="384"/>
+ <opt type="string" name="mode" default="stereo">
+ <value name="stereo"/>
+ <value name="jstereo"/>
+ <value name="mono"/>
+ <value name="dual"/>
+ </opt>
+ <opt type="int" name="psy" min="1" max="4"/>
+ <opt type="int" name="errprot" min="0" max="1" default="0" />
+ </toolame>
+ <faac options="faacopts">
+ <opt type="int" name="br" min="1" max="1000" default="$AUDBR" special="$AUDBR" description="average bitrate in kbps (mutually exclusive with quality)"/>
+ <opt type="int" name="quality" min="1" max="1000" default="500" description="quality mode, the higher the better (mutually exclusive with br)"/>
+ <opt type="int" name="object" min="1" max="4" default="1" description="object type complexity&lt;br&gt;1:MAIN&lt;br&gt;2:LOW&lt;br&gt;3:SSR&lt;br&gt;4:LTP (extremely slow)"/>
+ <opt type="string" name="mpeg" default="4">
+ <value name="2"/>
+ <value name="4"/>
+ </opt>
+ <opt type="bool" name="tns" default="true" description="Enables temporal noise shaping."/>
+ <opt type="int" name="cutoff" min="0" max="24000" default="22050" description="cutoff frequency (default: sampling_rate/2)"/>
+ <opt type="bool" name="raw" default="false" description="Stores the bitstream as raw payload with extradata in the container header (default: 0, corresponds to ADTS).&lt;br&gt;Do not set this flag if not explicitly required or you will not be able to remux the audio stream later on."/>
+ </faac>
+ </AUDIO>
+
+ <VIDEO>
+ <xvid options="xvidencopts">
+ <opt type="int" name="pass" min="1" max="2" default="$PASS" special="$PASS" description="Specify the pass in two pass mode."/>
+ <opt type="bool" name="turbo" default="false" description="Dramatically speeds up pass one using faster algorithms and disabling CPU-intensive options.&lt;br&gt; This will probably reduce global PSNR a little bit and change individual frame type and PSNR a little bit more." />
+ <opt type="int" name="bitrate" default="$VIDBR" min="0" max="16000" special="$VIDBR" description="Sets the bitrate to be used in kbits/second. &lt;br&gt;(default: 687 kbits/s)." />
+ <opt type="int" name="fixed_quant" default="1" min="1" max="31" description="Switch to fixed quantizer mode and specify the quantizer to be used."/>
+ <opt type="int" name="me_quality" default="6" min="0" max="6" description="This option controls the motion estimation subsystem. The higher the value, the more precise the estimation should be (default: 6)&lt;br&gt; The more precise the motion estimation is, the more bits can be saved. Precision is gained at the expense of CPU time so decrease this setting if you need realtime encoding."/>
+ <opt type="bool" name="qpel" default="false" description="MPEG-4 uses a half pixel precision for its motion search by default. The standard proposes a mode where encoders are allowed to use quarter pixel precision.&lt;br&gt;This option usually results in a sharper image. Unfortunately it has a great impact on bitrate and sometimes the higher bitrate use will prevent it from giving a better image quality at a fixed bitrate. It is better to test with and without this option and see whether it is worth activating."/>
+ <opt type="bool" name="noqpel" default="false" description="MPEG-4 uses a half pixel precision for its motion search by default. The standard proposes a mode where encoders are allowed to use quarter pixel precision.&lt;br&gt;This option usually results in a sharper image. Unfortunately it has a great impact on bitrate and sometimes the higher bitrate use will prevent it from giving a better image quality at a fixed bitrate. It is better to test with and without this option and see whether it is worth activating."/>
+ <opt type="bool" name="gmc" default="false" description="Enable Global Motion Compensation, which makes Xvid generate special frames (GMC-frames) which are well suited for Pan/Zoom/ Rotating images.&lt;br&gt; Whether or not the use of this option will save bits is highly dependent on the source material."/>
+ <opt type="bool" name="nogmc" default="false" description="Enable Global Motion Compensation, which makes Xvid generate special frames (GMC-frames) which are well suited for Pan/Zoom/ Rotating images.&lt;br&gt; Whether or not the use of this option will save bits is highly dependent on the source material."/>
+ <opt type="bool" name="trellis" default="false" description="Trellis Quantization is a kind of adaptive quantization method that saves bits by modifying quantized coefficients to make them more compressible by the entropy encoder.&lt;br&gt;Its impact on quality is good, and if VHQ uses too much CPU for you, this setting can be a good alternative to save a few bits (and gain quality at fixed bitrate) at a lesser cost than with VHQ (default: on)."/>
+ <opt type="bool" name="notrellis" default="false" description="Trellis Quantization is a kind of adaptive quantization method that saves bits by modifying quantized coefficients to make them more compressible by the entropy encoder.&lt;br&gt;Its impact on quality is good, and if VHQ uses too much CPU for you, this setting can be a good alternative to save a few bits (and gain quality at fixed bitrate) at a lesser cost than with VHQ (default: on)."/>
+ <opt type="bool" name="cartoon" default="false" description="Activate this if your encoded sequence is an anime/cartoon.&lt;br&gt;It modifies some Xvid internal thresholds so Xvid takes better decisions on frame types and motion vectors for flat looking cartoons."/>
+ <opt type="bool" name="nocartoon" default="false" description="Activate this if your encoded sequence is an anime/cartoon.&lt;br&gt;It modifies some Xvid internal thresholds so Xvid takes better decisions on frame types and motion vectors for flat looking cartoons."/>
+ <opt type="bool" name="chroma_me" default="false" description="The usual motion estimation algorithm uses only the luminance information to find the best motion vector.&lt;br&gt; However for some video material, using the chroma planes can help find better vectors. This setting toggles the use of chroma planes for motion estimation (default: on)."/>
+ <opt type="bool" name="nochroma_me" default="false" description="The usual motion estimation algorithm uses only the luminance information to find the best motion vector.&lt;br&gt; However for some video material, using the chroma planes can help find better vectors. This setting toggles the use of chroma planes for motion estimation (default: on)."/>
+ <opt type="bool" name="chroma_opt" default="false" description="Enable a chroma optimizer prefilter. It will do some extra magic on color information to minimize the stepped-stairs effect on edges.&lt;br&gt; It will improve quality at the cost of encoding speed. It reduces PSNR by nature, as the mathematical deviation to the original picture will get bigger, but the subjective image quality will raise. Since it works with color information, you might want to turn it off when encoding in grayscale."/>
+ <opt type="bool" name="nochroma_opt" default="false" description="Enable a chroma optimizer prefilter. It will do some extra magic on color information to minimize the stepped-stairs effect on edges.&lt;br&gt; It will improve quality at the cost of encoding speed. It reduces PSNR by nature, as the mathematical deviation to the original picture will get bigger, but the subjective image quality will raise. Since it works with color information, you might want to turn it off when encoding in grayscale."/>
+ <opt type="bool" name="hq_ac" default="false" description="Activates high-quality prediction of AC coefficients&lt;br&gt;for intra frames from neighbor blocks (default: on)."/>
+ <opt type="bool" name="nohq_ac" default="false" description="Activates high-quality prediction of AC coefficients&lt;br&gt;for intra frames from neighbor blocks (default: on)."/>
+ <opt type="int" name="vhq" default="1" min="0" max="4" description="The motion search algorithm is based on a search in the usual color domain and tries to find a motion vector that minimizes the difference between the reference frame and the encoded frame.&lt;br&gt; With this setting activated, Xvid will also use the frequency domain (DCT) to search for a motion vector that minimizes not only the spatial difference but also the encoding length of the block. Fastest to slowest:&lt;br&gt;0 : off&lt;br&gt;1 : mode decision (inter/intra MB) (default)&lt;br&gt;2 : limited search&lt;br&gt;3 : medium search&lt;br&gt;4 : wide search"/>
+ <opt type="bool" name="lumi_mask" default="false" description="Adaptive quantization allows the macroblock quantizers to vary inside each frame.&lt;br&gt; This is a ’psychosensory’ setting that is supposed to make use of the fact that the human eye tends to notice fewer details in very bright and very dark parts of the picture. It compresses those areas more strongly than medium ones, which will save bits that can be spent again on other frames, raising overall subjective quality and possibly reducing PSNR."/>
+ <opt type="bool" name="nolumi_mask" default="false" description="Adaptive quantization allows the macroblock quantizers to vary inside each frame.&lt;br&gt; This is a ’psychosensory’ setting that is supposed to make use of the fact that the human eye tends to notice fewer details in very bright and very dark parts of the picture. It compresses those areas more strongly than medium ones, which will save bits that can be spent again on other frames, raising overall subjective quality and possibly reducing PSNR."/>
+ <opt type="bool" name="grayscale" default="false" description="Make Xvid discard chroma planes so the encoded video is grayscale only.&lt;br&gt;Note that this does not speed up encoding, it just prevents chroma data from being written in the last stage of encoding."/>
+ <opt type="bool" name="nograyscale" default="false" description="Make Xvid discard chroma planes so the encoded video is grayscale only.&lt;br&gt;Note that this does not speed up encoding, it just prevents chroma data from being written in the last stage of encoding."/>
+ <opt type="bool" name="interlacing" default="false" description="Encode the fields of interlaced video material. Turn this option on for interlaced content.&lt;br&gt;NOTE: Should you rescale the video, you would need an interlace-aware resizer, which you can activate with −vf scale=width:height:1."/>
+ <opt type="bool" name="nointerlacing" default="false" description="Encode the fields of interlaced video material. Turn this option on for interlaced content.&lt;br&gt;NOTE: Should you rescale the video, you would need an interlace-aware resizer, which you can activate with −vf scale=width:height:1."/>
+ <opt type="int" name="min_iquant" default="2" min="0" max="31" description="minimum I-frame quantizer (default: 2)"/>
+ <opt type="int" name="max_iquant" default="31" min="0" max="31" description="maximum I-frame quantizer (default: 31)"/>
+ <opt type="int" name="min_bquant" default="2" min="0" max="31" description="minimum B-frame quantizer (default: 2)"/>
+ <opt type="int" name="max_bquant" default="31" min="0" max="31" description="maximum B-frame quantizer (default: 31)"/>
+ <opt type="int" name="min_pquant" default="2" min="0" max="31" description="minimum P-frame quantizer (default: 2)"/>
+ <opt type="int" name="max_pquant" default="31" min="0" max="31" description="maximum P-frame quantizer (default: 31)"/>
+ <opt type="int" name="min_key_interval" default="0" min="0" max="400" description=" (two pass only)&lt;br&gt;minimum interval between keyframes (default: 0)"/>
+ <opt type="int" name="max_key_interval" default="0" min="0" max="400" description="maximum interval between keyframes (default: 10*fps)"/>
+ <opt type="string" name="quant_type" default="mpeg" description="Sets the type of quantizer to use.&lt;br&gt;For high bitrates, you will find that MPEG quantization preserves more detail. For low bitrates, the smoothing of H.263 will give you less block noise. When using custom matrices, MPEG quantization must be used.">
+ <value name="h263"/>
+ <value name="mpeg"/>
+ </opt>
+ <opt type="int" name="keyframe_boost" default="0" min="0" max="1000" description="Shift some bits from the pool for other frame types to intra frames, thus improving keyframe quality.&lt;br&gt;This amount is an extra percentage, so a value of 10 will give your keyframes 10% more bits than normal (default: 0).&lt;br&gt;(two pass mode only)"/>
+ <opt type="int" name="kfthreshold" default="10" min="0" max="100" description="Works together with kfreduction. Determines the minimum distance below which you consider that two frames are considered consecutive and treated differently according to kfreduction (default: 10).&lt;br&gt;(two pass mode only)"/>
+ <opt type="int" name="kfreduction" default="30" min="0" max="100" description="The above two settings can be used to adjust the size of keyframes that you consider too close to the first (in a row). kfthreshold sets the range in which keyframes are reduced, and kfreduction determines the bitrate reduction they get. The last I-frame will get treated normally (default: 30)&lt;br&gt;(two pass mode only)"/>
+ <opt type="int" name="max_bframes" min="0" max="4" default="2" description="Maximum number of B-frames to put between I/P-frames (default: 2)."/>
+ <opt type="int" name="bquant_ratio" min="0" max="1000" default="150" description="quantizer ratio between B- and non-B-frames, 150=1.50 (default: 150)"/>
+ <opt type="int" name="bquant_offset" min="-1000" max="1000" default="100" description="quantizer offset between B- and non-B-frames, 100=1.00 (default: 100)"/>
+ <opt type="int" name="bf_threshold" min="-255" max="255" default="0" description="This setting allows you to specify what priority to place on the use of B-frames.&lt;br&gt;The higher the value, the higher the probability of B-frames being used (default: 0). Do not forget that B-frames usually have a higher quantizer, and therefore aggressive production of B-frames may cause worse visual quality."/>
+ <opt type="bool" name="closed_gop" default="true" description="This option tells Xvid to close every GOP (Group Of Pictures bounded by two I-frames), which makes GOPs independent from each other.&lt;br&gt;This just implies that the last frame of the GOP is either a P-frame or a N-frame but not a B-frame. It is usually a good idea to turn this option on (default: on)"/>
+ <opt type="bool" name="noclosed_gop" default="true" description="This option tells Xvid to close every GOP (Group Of Pictures bounded by two I-frames), which makes GOPs independent from each other.&lt;br&gt;This just implies that the last frame of the GOP is either a P-frame or a N-frame but not a B-frame. It is usually a good idea to turn this option on (default: on)"/>
+ <opt type="bool" name="packed" default="true" description="This option is meant to solve frame-order issues when encoding to container formats like AVI that cannot cope with out-of-order frames.&lt;br&gt;In practice, most decoders (both software and hardware) are able to deal with frame-order themselves, and may get confused when this option is turned on, so you can safely leave if off, unless you really know what you are doing.&lt;br&gt;WARNING: This will generate an illegal bitstream, and will not be decodable by ISO-MPEG-4 decoders except DivX/libavcodec/ Xvid.&lt;br&gt;WARNING: This will also store a fake DivX version in the file so the bug autodetection of some decoders might be confused."/>
+ <opt type="bool" name="nopacked" default="true" description="This option is meant to solve frame-order issues when encoding to container formats like AVI that cannot cope with out-of-order frames.&lt;br&gt;In practice, most decoders (both software and hardware) are able to deal with frame-order themselves, and may get confused when this option is turned on, so you can safely leave if off, unless you really know what you are doing.&lt;br&gt;WARNING: This will generate an illegal bitstream, and will not be decodable by ISO-MPEG-4 decoders except DivX/libavcodec/ Xvid.&lt;br&gt;WARNING: This will also store a fake DivX version in the file so the bug autodetection of some decoders might be confused."/>
+ <opt type="int" name="frame_drop_ratio" default="0" min="0" max="100" description="This setting allows the creation of variable framerate video streams. The value of the setting specifies a threshold under which, if the difference of the following frame to the previous frame is below or equal to this threshold, a frame gets not coded (a so called n-vop is placed in the stream). On playback, when reaching an n-vop the previous frame will be displayed.&lt;br&gt;WARNING: Playing with this setting may result in a jerky video, so use it at your own risks!"/>
+ <opt type="int" name="rc_reacting_delay_factor" min="0" max="1000" default="0" description="This parameter controls the number of frames the CBR rate controller will wait before reacting to bitrate changes&lt;br&gt;and compensating for them to obtain a constant bitrate over an averaging range of frames."/>
+ <opt type="int" name="rc_averaging_period" min="0" max="1000" default="0" description="Real CBR is hard to achieve. Depending on the video material, bitrate can be variable, and hard to predict.&lt;br&gt;Therefore Xvid uses an averaging period for which it guarantees a given amount of bits (minus a small variation). This settings expresses the 'number of frames' for which Xvid averages bitrate and tries to achieve CBR."/>
+ <opt type="int" name="rc_buffer" min="0" max="10000" default="0" description="size of the rate control buffer"/>
+ <opt type="int" name="curve_compression_high" min="0" max="100" default="0" description="This setting allows Xvid to take a certain percentage of bits away from high bitrate scenes and give them back to the bit reservoir.&lt;br&gt;You could also use this if you have a clip with so many bits allocated to high-bitrate scenes that the low(er)-bitrate scenes start to look bad (default: 0)"/>
+ <opt type="int" name="curve_compression_low" min="0" max="100" default="0" description="This setting allows Xvid to give a certain percentage of extra bits to the low bitrate scenes, taking a few bits from the entire clip.&lt;br&gt;This might come in handy if you have a few low-bitrate scenes that are still blocky (default: 0)."/>
+ <opt type="int" name="overflow_control_strength" min="0" max="100" default="5" description="During pass one of two pass encoding, a scaled bitrate curve is computed. The difference between that expected curve and the result obtained during encoding is called overflow. Obviously, the two pass rate controller tries to compensate for that overflow, distributing it over the next frames. This setting controls how much of the overflow is distributed every time there is a new frame. Low values allow lazy overflow control, big rate bursts are compensated for more slowly (could lead to lack of precision for small clips). Higher values will make changes in bit redistribution more abrupt, possibly too abrupt if you set it too high, creating artifacts (default: 5).&lt;br&gt;NOTE: This setting impacts quality a lot, play with it carefully!"/>
+ <opt type="int" name="max_overflow_improvement" min="0" max="100" default="5" description="During the frame bit allocation, overflow control may increase the frame size.&lt;br&gt;This parameter specifies the maximum percentage by which the overflow control is allowed to increase the frame size, compared to the ideal curve allocation (default: 5)."/>
+ <opt type="int" name="max_overflow_degradation" min="0" max="100" default="5" description="During the frame bit allocation, overflow control may decrease the frame size.&lt;br&gt;This parameter specifies the maximum percentage by which the overflow control is allowed to decrease the frame size, compared to the ideal curve allocation (default: 5)."/>
+ <opt type="int" name="container_frame_overhead" min="0" max="1000" default="0" description="Specifies a frame average overhead per frame, in bytes. Most of the time users express their target bitrate for video w/o taking care of the video container overhead.&lt;br&gt;This small but (mostly) constant overhead can cause the target file size to be exceeded. Xvid allows users to set the amount of overhead per frame the container generates (give only an average per frame). 0 has a special meaning, it lets Xvid use its own default values (default: 24 − AVI average overhead)."/>
+ <opt type="string" name="profile" default="unrestricted" description="Restricts options and VBV (peak bitrate over a short period) according to the Simple, Advanced Simple and DivX profiles. The resulting videos should be playable on standalone players adhering to these profile specifications.&lt;br&gt;- unrestricted : no restrictions (default)&lt;br&gt;- sp0 : simple profile at level 0&lt;br&gt;- sp1 : simple profile at level 1&lt;br&gt;- sp2 : simple profile at level 2&lt;br&gt;- sp3 : simple profile at level 3&lt;br&gt;- asp0 : advanced simple profile at level 0&lt;br&gt;- asp1 : advanced simple profile at level 1&lt;br&gt;- asp2 : advanced simple profile at level 2&lt;br&gt;- asp3 : advanced simple profile at level 3&lt;br&gt;- asp4 : advanced simple profile at level 4&lt;br&gt;- asp5 : advanced simple profile at level 5&lt;br&gt;- dxnhandheld : DXN handheld profile&lt;br&gt;- dxnportntsc : DXN portable NTSC profile&lt;br&gt;- dxnportpal : DXN portable PAL profile&lt;br&gt;- dxnhtntsc : DXN home theater NTSC profile&lt;br&gt;- dxnhtpal : DXN home theater PAL profile&lt;br&gt;- dxnhdtv : DXN HDTV profile&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: These profiles should be used in conjunction with an appropriate −ffourcc. Generally DX50 is applicable, as some players do not recognize Xvid but most recognize DivX.">
+ <value name="unrestricted"/>
+ <value name="sp0"/>
+ <value name="sp3"/>
+ <value name="asp0"/>
+ <value name="asp1"/>
+ <value name="asp2"/>
+ <value name="asp3"/>
+ <value name="asp4"/>
+ <value name="asp5"/>
+ <value name="dxnhandheld"/>
+ <value name="dxnportntsc"/>
+ <value name="dxnhtntsc"/>
+ <value name="dxnhtpal"/>
+ <value name="dxnhdtv"/>
+ </opt>
+ <opt type="string" name="par" default="vga11" description="Specifies the Pixel Aspect Ratio mode (not to be confused with DAR, the Display Aspect Ratio). PAR is the ratio of the width and height of a single pixel. So both are related like this: DAR = PAR * (width/height).&lt;br&gt;MPEG-4 defines 5 pixel aspect ratios and one extended one, giving the opportunity to specify a specific pixel aspect ratio. 5 standard modes can be specified:&lt;br&gt;- vga11 : It is the usual PAR for PC content. Pixels are a square unit.&lt;br&gt;- pal43 : PAL standard 4:3 PAR. Pixels are rectangles.&lt;br&gt;- pal169 : same as above&lt;br&gt;- ntsc43 : same as above&lt;br&gt;- ntsc169 : same as above (Do not forget to give the exact ratio.)&lt;br&gt;- ext :Allows you to specify your own pixel aspect ratio with par_width and par_height.&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: In general, setting aspect and autoaspect options is enough.">
+ <value name="vga11"/>
+ <value name="pal43"/>
+ <value name="pal169"/>
+ <value name="ntsc43"/>
+ <value name="ntsc169"/>
+ <value name="ext"/>
+ </opt>
+ <opt type="int" name="par_width" min="1" max="255" default="1" description="Specifies the width of the custom pixel aspect ratio."/>
+ <opt type="int" name="par_height" min="1" max="255" default="1" description="Specifies the height of the custom pixel aspect ratio."/>
+ <opt type="string" name="aspect" default="16/9" description="Store movie aspect internally, just like MPEG files. Much nicer solution than rescaling, because quality is not decreased.&lt;br&gt;MPlayer and a few others players will play these files correctly, others will display them with the wrong aspect. The aspect parameter can be given as a ratio or a floating point number." />
+ <opt type="bool" name="autoaspect" default="false" description="Same as the aspect option, but automatically computes aspect, taking into account all the adjustments (crop/expand/scale/ etc.) made in the filter chain."/>
+ <opt type="bool" name="noautoaspect" default="false" description="Same as the aspect option, but automatically computes aspect, taking into account all the adjustments (crop/expand/scale/ etc.) made in the filter chain."/>
+ <opt type="bool" name="psnr" default="false" description="Print the PSNR (peak signal to noise ratio) for the whole video after encoding and store the per frame PSNR in a file with a name like ’psnr_hhmmss.log’ in the current directory.&lt;br&gt;Returned values are in dB (decibel), the higher the better."/>
+ <opt type="bool" name="debug" default="false" description="Save per-frame statistics in ./xvid.dbg. (This is not the two pass control file.)" />
+ <opt type="int" name="threads" default="0" min="0" max="50" description="Create n threads to run the motion estimation (default: 0).&lt;br&gt;The maximum number of threads that can be used is the picture height divided by 16."/>
+ </xvid>
+ <x264 options="x264encopts">
+ <opt type="int" name="bitrate" min="0" max="16000" special="$VIDBR" default="$VIDBR" description="Sets the average bitrate to be used in kbits/second (default: off).&lt;br&gt;Since local bitrate may vary, this average may be inaccurate for very short videos (see ratetol). Constant bitrate can be achieved by combining this with vbv_maxrate, at significant reduction in quality."/>
+ <opt type="int" name="qp" min="0" max="51" default="26" description="This selects the quantizer to use for P-frames. I- and B-frames are offset from this value by ip_factor and pb_factor, respectively. 20−40 is a useful range (default: 26).&lt;br&gt;Lower values result in better fidelity, but higher bitrates. 0 is lossless. Note that quantization in H.264 works differently from MPEG-1/2/4: H.264’s quantization parameter (QP) is on a logarithmic scale. The mapping is approximately H264QP = 12 + 6*log2(MPEGQP). For example, MPEG at QP=2 is equivalent to H.264 at QP=18"/>
+ <opt type="double" name="crf" min="1.0" max="50.0" default="0" description="Enables constant quality mode, and selects the quality. The scale is similar to QP. Like the bitrate-based modes, this allows each frame to use a different QP based on the frame’s complexity."/>
+ <opt type="int" name="pass" min="1" max="3" special="$PASS" default="$PASS" description="Enable 2 or 3-pass mode. It is recommended to always encode in 2 or 3-pass mode as it leads to a better bit distribution and improves overall quality.&lt;br&gt;- 1 : first pass&lt;br&gt;- 2 : second pass (of two pass encoding)&lt;br&gt;- 3 : Nth pass (second and third passes of three pass encoding)&lt;br&gt;&lt;br&gt;Here is how it works, and how to use it:&lt;br&gt;The first pass (pass=1) collects statistics on the video and writes them to a file. You might want to deactivate some CPU-hungry options, apart from the ones that are on by default.&lt;br&gt;In two pass mode, the second pass (pass=2) reads the statistics file and bases ratecontrol decisions on it.&lt;br&gt;In three pass mode, the second pass (pass=3, that is not a typo) does both: It first reads the statistics, then overwrites them. You can use all encoding options, except very CPU-hungry options.&lt;br&gt;The third pass (pass=3) is the same as the second pass, except that it has the second pass’ statistics to work from. You can use all encoding options, including CPU-hungry ones.&lt;br&gt;The first pass may use either average bitrate or constant quantizer. ABR is recommended, since it does not require guessing a quantizer. Subsequent passes are ABR, and must specify bitrate."/>
+ <opt type="int" name="turbo" min="0" max="2" default="0" description="Fast first pass mode. During the first pass of a two or more pass encode it is possible to gain speed by disabling some options with negligible or even no impact on the final pass output quality.&lt;br&gt;- 0 : disabled (default)&lt;br&gt;- 1 : Reduce subq, frameref and disable some inter-macroblock partition analysis modes.&lt;br&gt;- 2 : Reduce subq and frameref to 1, use a diamond ME search and disable all partition analysis modes.&lt;br&gt;&lt;br&gt;Level 1 can increase first pass speed up to 2x with no change in the global PSNR of the final pass compared to a full quality first pass.&lt;br&gt;Level 2 can increase first pass speed up to 4x with about +/- 0.05dB change in the global PSNR of the final pass compared to a full quality first pass."/>
+ <opt type="int" name="keyint" min="0" max="1000" default="250" description="Sets maximum interval between IDR-frames (default: 250). Larger values save bits, thus improve quality, at the cost of seeking precision.&lt;br&gt;Unlike MPEG-1/2/4, H.264 does not suffer from DCT drift with large values of keyint."/>
+ <opt type="int" name="keyint_min" min="0" max="1000" default="25" description="Sets minimum interval between IDR-frames (default: 25).&lt;br&gt;If scenecuts appear within this interval, they are still encoded as I-frames, but do not start a new GOP. In H.264, I-frames do not necessarily bound a closed GOP because it is allowable for a P-frame to be predicted from more frames than just the one frame before it (also see frameref). Therefore, I-frames are not necessarily seekable. IDR-frames restrict subsequent P-frames from referring to any frame prior to the IDR-frame."/>
+ <opt type="int" name="scenecut" min="1" max="100" default="40" description="Controls how aggressively to insert extra I-frames (default: 40).&lt;br&gt;With small values of scenecut, the codec often has to force an I-frame when it would exceed keyint. Good values of scenecut may find a better location for the I-frame. Large values use more I-frames than necessary, thus wasting bits. -1 disables scene-cut detection, so I-frames are inserted only once every other keyint frames, even if a scene-cut occurs earlier. This is not recommended and wastes bitrate as scenecuts encoded as P-frames are just as big as I-frames, but do not reset the 'keyint counter'."/>
+ <opt type="int" name="frameref" min="1" max="16" default="1" description="Number of previous frames used as predictors in B- and P-frames (default: 1).&lt;br&gt;This is effective in anime, but in live-action material the improvements usually drop off very rapidly above 6 or so reference frames. This has no effect on decoding speed, but does increase the memory needed for decoding. Some decoders can only handle a maximum of 15 reference frames."/>
+ <opt type="int" name="bframes" min="0" max="16" default="0" description="maximum number of consecutive B-frames between I- and P-frames (default: 0)"/>
+ <opt type="bool" name="b_adapt" default="true" description="Automatically decides when to use B-frames and how many, up to the maximum specified above (default: on).&lt;br&gt;If this option is disabled, then the maximum number of B-frames is used."/>
+ <opt type="bool" name="nob_adapt" default="true" description="Automatically decides when to use B-frames and how many, up to the maximum specified above (default: on).&lt;br&gt;If this option is disabled, then the maximum number of B-frames is used."/>
+ <opt type="int" name="b_bias" min="-100" max="100" default="0" description="Controls the decision performed by b_adapt. A higher b_bias produces more B-frames (default: 0)."/>
+ <opt type="bool" name="b_pyramid" default="false" description="Allows B-frames to be used as references for predicting other frames.&lt;br&gt;For example, consider 3 consecutive B-frames: I0 B1 B2 B3 P4. Without this option, B-frames follow the same pattern as MPEG-[124]. So they are coded in the order I0 P4 B1 B2 B3, and all the B-frames are predicted from I0 and P4. With this option, they are coded as I0 P4 B2 B1 B3. B2 is the same as above, but B1 is predicted from I0 and B2, and B3 is predicted from B2 and P4. This usually results in slightly improved compression, at almost no speed cost. However, this is an experimental option: it is not fully tuned and may not always help. Requires bframes >= 2. Disadvantage: increases decoding delay to 2 frames."/>
+ <opt type="bool" name="nob_pyramid" default="false" description="Allows B-frames to be used as references for predicting other frames.&lt;br&gt;For example, consider 3 consecutive B-frames: I0 B1 B2 B3 P4. Without this option, B-frames follow the same pattern as MPEG-[124]. So they are coded in the order I0 P4 B1 B2 B3, and all the B-frames are predicted from I0 and P4. With this option, they are coded as I0 P4 B2 B1 B3. B2 is the same as above, but B1 is predicted from I0 and B2, and B3 is predicted from B2 and P4. This usually results in slightly improved compression, at almost no speed cost. However, this is an experimental option: it is not fully tuned and may not always help. Requires bframes >= 2. Disadvantage: increases decoding delay to 2 frames."/>
+ <opt type="bool" name="deblock" default="true" description="Use deblocking filter (default: on). As it takes very little time compared to its quality gain,&lt;br&gt;it is not recommended to disable it."/>
+ <opt type="bool" name="nodeblock" default="false" description="Use deblocking filter (default: on). As it takes very little time compared to its quality gain,&lt;br&gt;it is not recommended to disable it."/>
+ <opt name="deblock" description="The first parameter is AlphaC0 (default: 0). This adjusts thresholds for the H.264 in-loop deblocking filter. First, this parameter adjusts the maximum amount of change that the filter is allowed to cause on any one pixel. Secondly, this parameter affects the threshold for difference across the edge being filtered. A positive value reduces blocking artifacts more, but will also smear details. The second parameter is Beta (default: 0).&lt;br&gt; This affects the detail threshold. Very detailed blocks are not filtered, since the smoothing caused by the filter would be more noticeable than the original blocking.The default behavior of the filter almost always achieves optimal quality, so it is best to either leave it alone, or make only small adjustments. However, if your source material already has some blocking or noise which you would like to remove, it may be a good idea to turn it up a little bit.">
+ <subopt type="int" min="-6" max="6" default="0"/>
+ <subopt type="int" min="-6" max="6" default="0"/>
+ </opt>
+ <opt type="bool" name="cabac" default="true" description="Use CABAC (Context-Adaptive Binary Arithmetic Coding) (default: on). Slightly slows down encoding and decoding, but should save 10-15% bitrate.&lt;br&gt;Unless you are looking for decoding speed, you should not disable it."/>
+ <opt type="bool" name="nocabac" default="false" description="Use CABAC (Context-Adaptive Binary Arithmetic Coding) (default: on). Slightly slows down encoding and decoding, but should save 10-15% bitrate.&lt;br&gt;Unless you are looking for decoding speed, you should not disable it."/>
+ <opt type="int" name="qp_min" min="1" max="51" default="10" description="(ABR or two pass)&lt;br&gt;Minimum quantizer, 10−30 seems to be a useful range (default: 10)."/>
+ <opt type="int" name="qp_max" min="1" max="51" default="51" description="(ABR or two pass)&lt;br&gt;maximum quantizer (default: 51)"/>
+ <opt type="int" name="qp_step" min="1" max="50" default="4" description="(ABR or two pass)&lt;br&gt;maximum value by which the quantizer may be incremented/decremented between frames (default: 4)"/>
+ <opt type="float" name="ratetol" min="0.1" max="100.0" default="1.0" description="(ABR or two pass)&lt;br&gt;allowed variance in average bitrate (no particular units) (default: 1.0) "/>
+ <opt type="int" name="vbv_maxrate" min="0" max="16000" default="0" description="(ABR or two pass)&lt;br&gt;maximum local bitrate, in kbits/second (default: disabled)"/>
+ <opt type="int" name="vbv_bufsize" min="0" max="10000" default="0" description="(ABR or two pass)&lt;br&gt;averaging period for vbv_maxrate, in kbits (default: none, must be specified if vbv_maxrate is enabled)"/>
+ <opt type="float" name="vbv_init" min="0.0" max="1.0" default="0.9" description="(ABR or two pass)&lt;br&gt;initial buffer occupancy, as a fraction of vbv_bufsize (default: 0.9)"/>
+ <opt type="float" name="ip_factor" min="0.0" max="10.0" default="1.4" description="quantizer factor between I- and P-frames (default: 1.4)"/>
+ <opt type="float" name="pb_factor" min="0.0" max="10.0" default="1.3" description="quantizer factor between P- and B-frames (default: 1.3)"/>
+ <opt type="float" name="qcomp" min="0.0" max="1.0" default="0.6" description="(ABR or two pass)&lt;br&gt;quantizer compression (default: 0.6). A lower value makes the bitrate more constant, while a higher value makes the quantization parameter more constant."/>
+ <opt type="int" name="cplx_blur" min="0" max="999" default="20" description="(two pass only)&lt;br&gt;Temporal blur of the estimated frame complexity, before curve compression (default: 20).&lt;br&gt; Lower values allow the quantizer value to jump around more, higher values force it to vary more smoothly. cplx_blur ensures that each I-frame has quality comparable to the following P-frames, and ensures that alternating high and low complexity frames (e.g. low fps animation) do not waste bits on fluctuating quantizer."/>
+ <opt type="float" name="qblur" min="0" max="99" default="0.5" description="(two pass only)&lt;br&gt;Temporal blur of the quantization parameter, after curve compression (default: 0.5). Lower values allow the quantizer value to jump around more, higher values force it to vary more smoothly.&lt;br&gt;"/>
+ <opt type="string" name="direct_pred" default="spatial" description="Determines the type of motion prediction used for direct macroblocks in B-frames.&lt;br&gt;- none : Direct macroblocks are not used&lt;br&gt;- spatial : Motion vectors are extrapolated from neighboring blocks. (default)&lt;br&gt;- temporal : Motion vectors are interpolated from the following P-frame.&lt;br&gt;- auto : The codec selects between spatial and temporal for each frame.&lt;br&gt;Spatial and temporal are approximately the same speed and PSNR, the choice between them depends on the video content. Auto is slightly better, but slower. Auto is most effective when combined with multipass. direct_pred=none is both slower and lower quality.">
+ <value name="none"/>
+ <value name="spatial"/>
+ <value name="temporal"/>
+ <value name="auto"/>
+ </opt>
+ <opt type="bool" name="weight_b" default="false" description="Use weighted prediction in B-frames. Without this option, bidirectionally predicted macroblocks give equal weight to each reference frame.&lt;br&gt;With this option, the weights are determined by the temporal position of the B-frame relative to the references. Requires bframes > 1."/>
+ <opt type="bool" name="noweight_b" default="false" description="Use weighted prediction in B-frames. Without this option, bidirectionally predicted macroblocks give equal weight to each reference frame.&lt;br&gt;With this option, the weights are determined by the temporal position of the B-frame relative to the references. Requires bframes > 1."/>
+ <opt name="partitions" description="Enable some optional macroblock types (default: p8x8,b8x8,i8x8,i4x4)&lt;br&gt;- p8x8 : Enable types p16x8, p8x16, p8x8&lt;br&gt;- p4x4 : Enable types p8x4, p4x8, p4x4. p4x4 is recommended only with subq >= 5, and only at low resolutions.&lt;br&gt;- b8x8 : Enable types b16x8, b8x16, b8x8.&lt;br&gt;- i8x8 : Enable type i8x8. i8x8 has no effect unless 8x8dct is enabled.&lt;br&gt;- i4x4 : Enable type i4x4.&lt;br&gt;- all :Enable all of the above types.&lt;br&gt;- none : Disable all of the above types.&lt;br&gt;Regardless of this option, macroblock types p16x16, b16x16, and i16x16 are always enabled.&lt;br&gt;The idea is to find the type and size that best describe a certain area of the picture. For example, a global pan is better represented by 16x16 blocks, while small moving objects are better represented by smaller blocks.">
+ <subopt type="string" default="p8x8">
+ <value name="all"/>
+ <value name="none"/>
+ <value name=""/>
+ <value name="p8x8"/>
+ </subopt>
+ <subopt type="string" default="">
+ <value name=""/>
+ <value name="p4x4"/>
+ </subopt>
+ <subopt type="string" default="b8x8">
+ <value name=""/>
+ <value name="b8x8"/>
+ </subopt>
+ <subopt type="string" default="i4x4">
+ <value name=""/>
+ <value name="i4x4"/>
+ </subopt>
+ </opt>
+ <opt type="bool" name="8x8dct" default="false" description="Adaptive spatial transform size: allows macroblocks to choose between 4x4 and 8x8 DCT.&lt;br&gt; Also allows the i8x8 macroblock type. Without this option, only 4x4 DCT is used."/>
+ <opt type="bool" name="no8x8dct" default="false" description="Adaptive spatial transform size: allows macroblocks to choose between 4x4 and 8x8 DCT.&lt;br&gt; Also allows the i8x8 macroblock type. Without this option, only 4x4 DCT is used."/>
+ <opt type="string" name="me" default="hex" description="Select fullpixel motion estimation algorithm.&lt;br&gt;- dia : diamond search, radius 1 (fast)&lt;br&gt;- hex : hexagon search, radius 2 (default)&lt;br&gt;- umh : uneven multi-hexagon search (slow)&lt;br&gt;- esa : exhaustive search (very slow, and no better than umh)">
+ <value name="dia"/>
+ <value name="hex"/>
+ <value name="umh"/>
+ <value name="esa"/>
+ </opt>
+ <opt type="int" name="me_range" min="4" max="64" default="16" description="radius of exhaustive or multi-hexagon motion search (default: 16)"/>
+ <opt type="int" name="subq" min="1" max="7" default="5" description="Adjust subpel refinement quality. This parameter controls quality versus speed tradeoffs involved in the motion estimation decision process. subq=5 can compress up to 10% better than subq=1.&lt;br&gt;- 1 : Runs fullpixel precision motion estimation on all candidate macroblock types. Then selects the best type. Then refines the motion of that type to fast quarterpixel precision (fastest).&lt;br&gt;- 2 : Runs halfpixel precision motion estimation on all candidate macroblock types. Then selects the best type. Then refines the motion of that type to fast quarterpixel precision.&lt;br&gt;- 3 : As 2, but uses a slower quarterpixel refinement.&lt;br&gt;- 4 : Runs fast quarterpixel precision motion estimation on all candidate macroblock types. Then selects the best type. Then finishes the quarterpixel refinement for that type.&lt;br&gt;- 5 : Runs best quality quarterpixel precision motion estimation on all candidate macroblock types, before selecting the best type (default).&lt;br&gt;- 6 : Enables rate-distortion optimization of macroblock types in I- and P-frames.&lt;br&gt;- 7 : Enables rate-distortion optimization of motion vectors and intra modes. (best)&lt;br&gt;In the above, 'all candidates' does not exactly mean all enabled types: 4x4, 4x8, 8x4 are tried only if 8x8 is better than 16x16."/>
+ <opt type="bool" name="chroma_me" default="true" description="Takes into account chroma information during subpixel motion search (default: enabled).&lt;br&gt; Requires subq>=5."/>
+ <opt type="bool" name="nochroma_me" default="true" description="Takes into account chroma information during subpixel motion search (default: enabled).&lt;br&gt; Requires subq>=5."/>
+ <opt type="bool" name="mixed_refs" default="false" description="Allows each 8x8 or 16x8 motion partition to independently select a reference frame.&lt;br&gt;Without this option, a whole macroblock must use the same reference. Requires frameref>1."/>
+ <opt type="bool" name="nomixed_refs" default="false" description="Allows each 8x8 or 16x8 motion partition to independently select a reference frame.&lt;br&gt;Without this option, a whole macroblock must use the same reference. Requires frameref>1."/>
+ <opt type="bool" name="brdo" default="false" description="Enables rate-distortion optimization of macroblock types in B-frames. Requires subq>=6."/>
+ <opt type="bool" name="nobrdo" default="false" description="Enables rate-distortion optimization of macroblock types in B-frames. Requires subq>=6."/>
+ <opt type="bool" name="bime" default="false" description="Refine the two motion vectors used in bidirectional macroblocks, rather than re-using vectors from the forward and backward searches. &lt;br&gt;This option has no effect without B-frames."/>
+ <opt type="bool" name="nobime" default="false" description="Refine the two motion vectors used in bidirectional macroblocks, rather than re-using vectors from the forward and backward searches. &lt;br&gt;This option has no effect without B-frames."/>
+ <opt type="int" name="trellis" min="0" max="2" default="0" description="rate-distortion optimal quantization&lt;br&gt;- 0 : disabled (default)&lt;br&gt;- 1 : enabled only for the final encode&lt;br&gt;- 2 : enabled during all mode decisions (slow, requires subq>=6)"/>
+ <opt type="int" name="deadzone_inter" min="0" max="32" default="21" description="Set the size of the inter luma quantization deadzone for non-trellis quantization (default: 21).&lt;br&gt;Lower values help to preserve fine details and film grain (typically useful for high bitrate/quality encode), while higher values help filter out these details to save bits that can be spent again on other macroblocks and frames (typically useful for bitrate-starved encodes). It is recommended that you start by tweaking deadzone_intra before changing this parameter."/>
+ <opt type="int" name="deadzone_intra" min="0" max="32" default="11" description="Set the size of the intra luma quantization deadzone for non-trellis quantization (default: 11).&lt;br&gt;This option has the same effect as deadzone_inter except that it affects intra frames. It is recommended that you start by tweaking this parameter before changing deadzone_inter."/>
+ <opt type="bool" name="fast_pskip" default="true" description="Performs early skip detection in P-frames (default: enabled).&lt;br&gt;This usually improves speed at no cost, but it can sometimes produce artifacts in areas with no details, like sky."/>
+ <opt type="bool" name="nofast_pskip" default="true" description="Performs early skip detection in P-frames (default: enabled).&lt;br&gt;This usually improves speed at no cost, but it can sometimes produce artifacts in areas with no details, like sky."/>
+ <opt type="bool" name="dct_decimate" default="true" description="Eliminate dct blocks in P-frames containing only a small single coefficient (default: enabled).&lt;br&gt; This will remove some details, so it will save bits that can be spent again on other frames, hopefully raising overall subjective quality. If you are compressing non-anime content with a high target bitrate, you may want to disable this to preserve as much detail as possible."/>
+ <opt type="int" name="nr" min="0" max="0−100000" default="0" description="Noise reduction, 0 means disabled. 100−1000 is a useful range for typical content, but you may want to turn it up a bit more for very noisy content (default: 0).&lt;br&gt;Given its small impact on speed, you might want to prefer to use this over filtering noise away with video filters like denoise3d or hqdn3d."/>
+ <opt type="int" name="chroma_qp_offset" min="-12" max="12" default="0" description="Use a different quantizer for chroma as compared to luma.&lt;br&gt;Useful values are in the range -2−2 (default: 0)."/>
+ <opt type="int" name="level_idc" min="10" max="51" default="51" description="Set the bitstream’s level as defined by annex A of the H.264 standard (default: 51 - Level 5.1).&lt;br&gt;This is used for telling the decoder what capabilities it needs to support. Use this parameter only if you know what it means, and you have a need to set it."/>
+ <opt type="int" name="threads" min="0" max="16" default="1" special="auto" description="Spawn threads to encode in parallel on multiple CPUs (default: 1). This has a slight penalty to compression quality.&lt;br&gt;0 or ’auto’ tells x264 to detect how many CPUs you have and pick an appropriate number of threads."/>
+ <opt type="bool" name="global_header" default="false" description="Causes SPS and PPS to appear only once, at the beginning of the bitstream (default: disabled).&lt;br&gt;Some players, such as the Sony PSP, require the use of this option. The default behavior causes SPS and PPS to repeat prior to each IDR frame."/>
+ <opt type="bool" name="noglobal_header" default="false" description="Causes SPS and PPS to appear only once, at the beginning of the bitstream (default: disabled).&lt;br&gt;Some players, such as the Sony PSP, require the use of this option. The default behavior causes SPS and PPS to repeat prior to each IDR frame."/>
+ <opt type="bool" name="interlaced" default="false" description="Treat the video content as interlaced."/>
+ <opt type="bool" name="nointerlaced" default="false" description="Treat the video content as interlaced."/>
+ <opt type="bool" name="ssim" default="false" description="Print the Structural Similarity Metric results.&lt;br&gt;This is an alternative to PSNR, and may be better correlated with the perceived quality of the compressed video."/>
+ <opt type="bool" name="nossim" default="false" description="Print the Structural Similarity Metric results.&lt;br&gt;This is an alternative to PSNR, and may be better correlated with the perceived quality of the compressed video."/>
+ <opt type="bool" name="visualize" default="false" description="Enable x264 visualizations during encoding. If the x264 on your system supports it, a new window will be opened during the encoding process, in which x264 will attempt to present an overview of how each frame gets encoded.&lt;br&gt;Each block type on the visualized movie will be colored as follows:&lt;br&gt;- red/pink&lt;br&gt;- intra block&lt;br&gt;- blue&lt;br&gt;- inter block&lt;br&gt;- green&lt;br&gt;- skip block&lt;br&gt;- yellow&lt;br&gt;- B-block&lt;br&gt;&lt;br&gt;This feature can be considered experimental and subject to change. In particular, it depends on x264 being compiled with visualizations enabled. Note that as of writing this, x264 pauses after encoding and visualizing each frame, waiting for the user to press a key, at which point the next frame will be encoded."/>
+ </x264>
+ <lavc options="lavcopts">
+ <opt type="bool" name="bit_exact" default="false" description="Use only bit exact algorithms (except (I)DCT). Additionally bit_exact disables several optimizations and thus should only be used for regression tests, which need binary identical files even if the encoder version changes.&lt;br&gt;This also suppresses the user_data header in MPEG-4 streams. Do not use this option unless you know exactly what you are doing."/>
+ <opt type="int" name="threads" min="1" max="8" default="1" description="Maximum number of threads to use (default: 1). May have a slight negative effect on motion estimation."/>
+ <opt type="string" name="vcodec" default="mpeg4" description="The video codec">
+ <value name="mjpeg"/>
+ <value name="ljpeg"/>
+ <value name="h261"/>
+ <value name="h263"/>
+ <value name="h263p"/>
+ <value name="mpeg4"/>
+ <value name="msmpeg4"/>
+ <value name="msmpeg4v2"/>
+ <value name="wmv1"/>
+ <value name="wmv2"/>
+ <value name="rv10"/>
+ <value name="mpeg1video"/>
+ <value name="mpeg2video"/>
+ <value name="huffyuv"/>
+ <value name="ffvhuf"/>
+ <value name="asv1"/>
+ <value name="asv2"/>
+ <value name="ffv1"/>
+ <value name="flv"/>
+ <value name="dvvideo"/>
+ <value name="svq1"/>
+ <value name="snow"/>
+ </opt>
+ <opt type="float" name="lmin" min="0.01" max="255.0" default="2.0" description="Minimum frame-level Lagrange multiplier for ratecontrol (default: 2.0). Lavc will rarely use quantizers below the value of lmin.&lt;br&gt;Lowering lmin will make lavc more likely to choose lower quantizers for some frames, but not lower than the value of vqmin. Likewise, raising lmin will make lavc less likely to choose low quantizers, even if vqmin would have allowed them. You probably want to set lmin approximately equal to vqmin. When adaptive quantization is in use, changing lmin/lmax may have less of an effect; see mblmin/mblmax."/>
+ <opt type="float" name="lmax" min="0.01" max="255.0" default="31.0" description="maximum Lagrange multiplier for ratecontrol (default: 31.0)"/>
+ <opt type="float" name="mblmin" min="0.01" max="255.0" default="2.0" description="Minimum macroblock-level Lagrange multiplier for ratecontrol (default:2.0).&lt;br&gt;This parameter affects adaptive quantization options like qprd, lumi_mask, etc.."/>
+ <opt type="float" name="mblmax" min="0.01" max="255.0" default="31.0" description="Maximum macroblock-level Lagrange multiplier for ratecontrol (default: 31.0)."/>
+ <opt type="int" name="vqscale" min="-1" max="31" default="-1" description="Constant quantizer / constant quality encoding (selects fixed quantizer mode). A lower value means better quality but larger files (default: -1).&lt;br&gt;In case of snow codec, value 0 means lossless encoding. Since the other codecs do not support this, vqscale=0 will have an undefined effect. 1 is not recommended (see vqmin for details)."/>
+ <opt type="int" name="vqmin" min="1" max="8" default="2" description="minimum quantizer (pass 1/2)&lt;br&gt;-1 : Not recommended (much larger file, little quality difference and weird side effects: msmpeg4, h263 will be very low quality, ratecontrol will be confused resulting in lower quality and some decoders will not be able to decode it).&lt;br&gt;- 2 :Recommended for normal mpeg4/mpeg1video encoding (default).&lt;br&gt;- 3 : Recommended for h263(p)/msmpeg4. The reason for preferring 3 over 2 is that 2 could lead to overflows. (This will be fixed for h263(p) by changing the quantizer per MB in the future, msmpeg4 cannot be fixed as it does not support that.)"/>
+ <opt type="int" name="vqmax" min="1" max="31" default="31" description="Maximum quantizer (pass 1/2), 10−31 should be a sane range (default: 31)."/>
+ <opt type="int" name="vqdiff" min="1" max="31" default="3" description="maximum quantizer difference between consecutive I- or P-frames (pass 1/2) (default: 3)"/>
+ <opt type="int" name="vmax_b_frames" min="0" max="4" default="0" description="maximum number of B-frames between non-B-frames:&lt;br&gt;- 0 : no B-frames (default)&lt;br&gt;- 0−2 : sane range for MPEG-4"/>
+ <opt type="int" name="vme" min="0" max="5" default="4" description="motion estimation method. Available methods are:&lt;br&gt;- 0 : none (very low quality)&lt;bt&gt;- 1 : full (slow, currently unmaintained and disabled)&lt;br&gt;- 2 : log (low quality, currently unmaintained and disabled)&lt;br&gt;- 3 : phods (low quality, currently unmaintained and disabled)&lt;br&gt;- 4 : EPZS: size=1 diamond, size can be adjusted with the *dia options (default)&lt;br&gt;- 5 : X1 (experimental, currently aliased to EPZS)&lt;br&gt;- 8 : iter (iterative overlapped block, only used in snow)&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: 0−3 currently ignores the amount of bits spent, so quality may be low."/>
+ <opt type="int" name="me_range" min="0" max="9999" default="0" description="motion estimation search range (default: 0 (unlimited))"/>
+ <opt type="int" name="mbd" min="0" max="2" default="0" description="Macroblock decision algorithm (high quality mode), encode each macro block in all modes and choose the best. This is slow but results in better quality and file size. When mbd is set to 1 or 2, the value of mbcmp is ignored when comparing macroblocks. If any comparison setting (precmp, subcmp, cmp, or mbcmp) is nonzero, however, a slower but better half-pel motion search will be used, regardless of what mbd is set to. If qpel is set, quarter-pel motion search will be used regardless.&lt;br&gt;-0 : Use comparison function given by mbcmp (default).&lt;br&gt;- 1 : Select the MB mode which needs the fewest bits (=vhq).&lt;br&gt;- 2 : Select the MB mode which has the best rate distortion."/>
+ <opt type="bool" name="vhq" default="false" description="Same as mbd=1, kept for compatibility reasons."/>
+ <opt type="bool" name="v4mv" default="false" description="Allow 4 motion vectors per macroblock (slightly better quality).&lt;br&gt;Works better if used with mbd>0."/>
+ <opt type="bool" name="obmc" default="false" description="overlapped block motion compensation (H.263+)"/>
+ <opt type="int" name="inter_threshold" min="-1000" max="1000" default="0"/>
+ <opt type="int" name="keyint" min="0" max="300" default="250" description="maximum interval between keyframes in frames (default: 250 or one keyframe every ten seconds in a 25fps movie. This is the recommended default for MPEG-4).&lt;br&gt;Most codecs require regular keyframes in order to limit the accumulation of mismatch error. Keyframes are also needed for seeking, as seeking is only possible to a keyframe - but keyframes need more space than other frames, so larger numbers here mean slightly smaller files but less precise seeking. 0 is equivalent to 1, which makes every frame a keyframe. Values >300 are not recommended as the quality might be bad depending upon decoder, encoder and luck. It is a common for MPEG-1/2 to use values less or =30."/>
+ <opt type="int" name="sc_threshold" min="-1000000000" max="1000000000" default="0" description="Threshold for scene change detection. A keyframe is inserted by libavcodec when it detects a scene change.&lt;br&gt;You can specify the sensitivity of the detection with this option. -1000000000 means there is a scene change detected at every frame, 1000000000 means no scene changes are detected (default: 0)."/>
+ <opt type="int" name="sc_factor" min="1" max="20" default="1" description="Causes frames with higher quantizers to be more likely to trigger a scene change detection and make libavcodec use an I-frame (default: 1).&lt;br&gt;1−16 is a sane range. Values between 2 and 6 may yield increasing PSNR (up to approximately 0.04 dB) and better placement of I-frames in high-motion scenes. Higher values than 6 may give very slightly better PSNR (approximately 0.01 dB more than sc_factor=6), but noticably worse visual quality."/>
+ <opt type="int" name="vb_strategy" min="0" max="2" default="0" description="strategy to choose between I/P/B-frames:&lt;br&gt;- 0 : Always use the maximum number of B-frames (default).&lt;br&gt;- 1 : Avoid B-frames in high motion scenes. See the b_sensitivity option to tune this strategy.&lt;br&gt;- 2 : Places B-frames more or less optimally to yield maximum quality (slower). You may want to reduce the speed impact of this option by tuning the option brd_scale."/>
+ <opt type="int" name="b_sensitivity" min="0" max="50" default="40" description="Adjusts how sensitively vb_strategy=1 detects motion and avoids using B-frames (default: 40).&lt;br&gt;Lower sensitivities will result in more B-frames. Using more B-frames usually improves PSNR, but too many B-frames can hurt quality in high-motion scenes. Unless there is an extremely high amount of motion, b_sensitivity can safely be lowered below the default; 10 is a reasonable value in most cases."/>
+ <opt type="int" name="brd_scale" min="0" max="10" default="0" description="Downscales frames for dynamic B-frame decision (default: 0). Each time brd_scale is increased by one, the frame dimensions are divided by two, which improves speed by a factor of four. Both dimensions of the fully downscaled frame must be even numbers, so brd_scale=1 requires the original dimensions to be multiples of four, brd_scale=2 requires multiples of eight, etc.&lt;br&gt;In other words, the dimensions of the original frame must both be divisible by 2^(brd_scale+1) with no remainder."/>
+ <opt type="int" name="bidir_refine" min="0" max="4" default="0" description="Refine the two motion vectors used in bidirectional macroblocks, rather than re-using vectors from the forward and backward searches. This option has no effect without B-frames.&lt;br&gt;- 0 : Disabled (default).&lt;br&gt;- 1−4 : Use a wider search (larger values are slower)."/>
+ <opt type="int" name="vpass" min="1" max="3" default="$PASS" special="$PASS" description="Activates internal two (or more) pass mode, only specify if you wish to use two (or more) pass encoding.&lt;br&gt;- 1 : first pass (also see turbo)&lt;br&gt;- 2 : second pass&lt;br&gt;- 3 : Nth pass (second and subsequent passes of N-pass encoding)&lt;br&gt;&lt;br&gt;Here is how it works, and how to use it:&lt;br&gt;The first pass (vpass=1) writes the statistics file. You might want to deactivate some CPU-hungry options, like 'turbo' mode does.&lt;br&gt;In two pass mode, the second pass (vpass=2) reads the statistics file and bases ratecontrol decisions on it.&lt;br&gt;In N-pass mode, the second pass (vpass=3, that is not a typo) does both: It first reads the statistics, then overwrites them. You might want to backup divx2pass.log before doing this if there is any possibility that you will have to cancel MEncoder. You can use all encoding options, except very CPU-hungry options like 'qns'.&lt;br&gt;You can run this same pass over and over to refine the encode. Each subsequent pass will use the statistics from the previous pass to improve. The final pass can include any CPU-hungry encoding options.&lt;br&gt;If you want a 2 pass encode, use first vpass=1, and then vpass=2.&lt;br&gt;If you want a 3 or more pass encode, use vpass=1 for the first pass and then vpass=3 and then vpass=3 again and again until you are satisfied with the encode."/>
+ <opt type="bool" name="turbo" default="true" description="Dramatically speeds up pass one using faster algorithms and disabling CPU-intensive options.&lt;br&gt;This will probably reduce global PSNR a little bit (around 0.01dB) and change individual frame type and PSNR a little bit more (up to 0.03dB)."/>
+ <opt type="string" name="aspect" default="" description="Store movie aspect internally, just like with MPEG files. Much nicer than rescaling, because quality is not decreased. Only MPlayer will play these files correctly, other players will display them with wrong aspect. The aspect parameter can be given as a ratio or a floating point number.&lt;br&gt;EXAMPLE: aspect=16/9 or aspect=1.78"/>
+ <opt type="bool" name="autoaspect" default="false" description="Same as the aspect option, but automatically computes aspect, taking into account all the adjustments (crop/expand/scale/ etc.) made in the filter chain.&lt;br&gt;Does not incur a performance penalty, so you can safely leave it always on."/>
+ <opt type="int" name="vbitrate" min="4" max="16000" default="$VIDBR" special="$VIDBR" description="Specify bitrate (pass 1/2) (default: 800)."/>
+ <opt type="int" name="vratetol" min="1000" max="100000" default="8000" description="approximated file size tolerance in kbit. 1000−100000 is a sane range. (warning: 1kbit = 1000 bits) (default: 8000)&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: vratetol should not be too large during the second pass or there might be problems if vrc_(min|max)rate is used."/>
+ <opt type="int" name="vrc_maxrate" min="0" max="16000" default="0" description="maximum bitrate in kbit/sec (pass 1/2) (default: 0, unlimited)"/>
+ <opt type="int" name="vrc_minrate" min="0" max="16000" default="0" description="minimum bitrate in kbit/sec (pass 1/2) (default: 0, unlimited)"/>
+ <opt type="int" name="vrc_buf_size" min="0" max="2000" default="1835" description="buffer size in kbit (pass 1/2).&lt;br&gt;For MPEG-1/2 this also sets the vbv buffer size, use 327 for VCD, 917 for SVCD and 1835 for DVD."/>
+ <opt type="int" name="vrc_strategy" min="0" max="1" default="0" description="Ratecontrol method. Note that some of the ratecontrol-affecting options will have no effect if vrc_strategy is not set to 0.&lt;br&gt;- 0 : Use internal lavc ratecontrol (default).&lt;br&gt;- 1 : Use Xvid ratecontrol (experimental; requires MEncoder to be compiled with support for Xvid 1.1 or higher)."/>
+ <opt type="float" name="vb_qfactor" min="-31.0" max="31.0" default="1.25" description="quantizer factor between B- and non-B-frames (pass 1/2) (default: 1.25)"/>
+ <opt type="float" name="vi_qfactor" min="-31.0" max="31.0" default="0.8" description="quantizer factor between I- and non-I-frames (pass 1/2) (default: 0.8)"/>
+ <opt type="float" name="vb_qoffset" min="-31.0" max="31.0" default="1.25" description="quantizer offset between B- and non-B-frames (pass 1/2) (default: 1.25)"/>
+ <opt type="float" name="vi_qoffset" min="-31.0" max="31.0" default="0.0" description="(pass 1/2) (default: 0.0)&lt;br&gt;if v{b|i}_qfactor > 0 I/B-frame quantizer = P-frame quantizer * v{b|i}_qfactor + v{b|i}_qoffset&lt;br&gt;else do normal ratecontrol (do not lock to next P-frame quantizer) and set q= -q * v{b|i}_qfactor + v{b|i}_qoffset&lt;br&gt;&lt;u&br;HINT&lt;/u&gt;: To do constant quantizer encoding with different quantizers for I/P- and B-frames you can use: lmin=ip_quant:lmax=ip_quant:vb_qfactor=b_quant/ip_quant."/>
+ <opt type="float" name="vqblur" min="0.0" max="99.0" default="0.0" description="Pass One: Quantizer blur (default: 0.5), larger values will average the quantizer more over time (slower change).&lt;br&gt;- 0.0 : Quantizer blur disabled.&lt;br&gt;- 1.0 : Average the quantizer over all previous frames.&lt;br&gt;&lt;br&gt;Pass Two: Quantizer gaussian blur (default: 0.5), larger values will average the quantizer more over time (slower change)."/>
+ <opt type="float" name="vqcomp" min="0.0" max="1.0" default="0.5" description="Quantizer compression, vrc_eq depends upon this (pass 1/2) (default: 0.5).&lt;br&gt;For instance, assuming the default rate control equation is used, if vqcomp=1.0, the ratecontrol allocates to each frame the number of bits needed to encode them all at the same QP. If vqcomp=0.0, the ratecontrol allocates the same number of bits to each frame, i.e. strict CBR.&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: Those are extreme settings and should never be used. Perceptual quality will be optimal somewhere in between these two extremes."/>
+ <opt type="int" name="vrc_init_cplx" min="0" max="1000" default="0" description="initial complexity (pass 1)"/>
+ <opt type="float" name="vrc_init_occupancy" min="0.0" max="1.0" default="0.9" description="initial buffer occupancy, as a fraction of vrc_buf_size (default: 0.9)"/>
+ <opt type="int" name="vqsquish" min="0" max="1" default="1" description="Specify how to keep the quantizer between qmin and qmax (pass 1/2).&lt;br&gt;- 0 : Use clipping.&lt;br&gt;- 1 : Use a nice differentiable function (default)."/>
+ <opt type="int" name="vlelim" min="-1000" max="1000" default="0" description="Sets single coefficient elimination threshold for luminance. Negative values will also consider the DC coefficient (should be at least -4 or lower for encoding at quant=1):&lt;br&gt;- 0 : disabled (default)&lt;br&gt;- -4 : JVT recommendation"/>
+ <opt type="int" name="vcelim" min="-1000" max="1000" default="0" description="Sets single coefficient elimination threshold for chrominance. Negative values will also consider the DC coefficient (should be at least -4 or lower for encoding at quant=1):&lt;br&gt;- 0 : disabled (default)&lt;br&gt;- 7 : JVT recommendation"/>
+ <opt type="int" name="vstrict" min="-2" max="1" default="0" description="strict standard compliance&lt;br&gt;- 0 : disabled&lt;br&gt;- 1 : Only recommended if you want to feed the output into the MPEG-4 reference decoder.&lt;br&gt;- -1 : Allow libavcodec specific extensions (default).&lt;br&gt;- -2 : Enables experimental codecs and features which may not be playable with future MPlayer versions (snow)."/>
+ <opt type="bool" name="vdpart" default="false" description="Data partitioning. Adds 2 Bytes per video packet, improves error-resistance when transferring over unreliable channels (e.g. streaming over the internet). Each video packet will be encoded in 3 separate partitions:&lt;br&gt;- 1. MVs movement&lt;br&gt;- 2. DC coefficients low res picture&lt;br&gt;- 3. AC coefficients details&lt;br&gt;&lt;br&gt;MV &amp; DC are most important, loosing them looks far worse than loosing the AC and the 1. &amp; 2. partition. (MV &amp; DC) are far smaller than the 3. partition (AC) meaning that errors will hit the AC partition much more often than the MV &amp; DC partitions. Thus, the picture will look better with partitioning than without, as without partitioning an error will trash AC/DC/MV equally."/>
+ <opy type="int" name="vpsize" min="0" max="10000" default="0" description="Video packet size, improves error-resistance.&lt;br&gt;- 0 : disabled (default)&lt;br&gt;- 100−1000 : good choice"/>
+ <opt type="bool" name="ss" default="false" description="slice structured mode for H.263+"/>
+ <opt type="bool" name="gray" default="false" description="grayscale only encoding (faster)"/>
+ <opt type="int" name="vfdct" min="0" max="6" default="0" description="DCT algorithm&lt;br&gt;- 0 : Automatically select a good one (default).&lt;br&gt;- 1 : fast integer&lt;br&gt;- 2 : accurate integer&lt;br&gt;- 3 : MMX&lt;br&gt;- 4 : mlib&lt;br&gt;- 5 : AltiVec&lt;br&gt;- 6 : floating point AAN"/>
+ <opt type="int" name="idct" min="0" max="9" default="0" description="IDCT algorithm&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: To the best of our knowledge all these IDCTs do pass the IEEE1180 tests.&lt;br&gt;- 0 : Automatically select a good one (default).&lt;br&gt;- 1 : JPEG reference integer&lt;br&gt;- 2 : simple&lt;br&gt;- 3 : simplemmx&lt;br&gt;- 4 : libmpeg2mmx (inaccurate, do not use for encoding with keyint >100)&lt;br&gt;- 5 : ps2&lt;br&gt;- 6 : mlib&lt;br&gt;- 7 : arm&lt;br&gt;- 8 : AltiVec&lt;br&gt;- 9 : sh4"/>
+ <opt type="float" name="lumi_mask" min="0" max="1.0" default="0.0" description="Luminance masking is a ’psychosensory’ setting that is supposed to make use of the fact that the human eye tends to notice fewer details in very bright parts of the picture. Luminance masking compresses bright areas stronger than medium ones, so it will save bits that can be spent again on other frames, raising overall subjective quality, while possibly reducing PSNR.&lt;br&gt;WARNING: Be careful, overly large values can cause disastrous things.&lt;br&gt;WARNING: Large values might look good on some monitors but may look horrible on other monitors.&lt;br&gt;- 0.0 : disabled (default)&lt;br&gt;- 0.0−0.3 : sane range"/>
+ <opt type="float" name="dark_mask" min="0" max="1.0" default="0.0" description="Darkness masking is a ’psychosensory’ setting that is supposed to make use of the fact that the human eye tends to notice fewer details in very dark parts of the picture. Darkness masking compresses dark areas stronger than medium ones, so it will save bits that can be spent again on other frames, raising overall subjective quality, while possibly reducing PSNR.&lt;br&gt;WARNING: Be careful, overly large values can cause disastrous things.&lt;br&gt;WARNING: Large values might look good on some monitors but may look horrible on other monitors / TV / TFT.&lt;br&gt;- 0.0 : disabled (default)&lt;br&gt;- 0.0−0.3 : sane range"/>
+ <opt type="float" name="tcplx_mask" min="0" max="1.0" default="0.0" description="Temporal complexity masking (default: 0.0 (disabled)). Imagine a scene with a bird flying across the whole scene;&lt;br&gt;tcplx_mask will raise the quantizers of the bird’s macroblocks (thus decreasing their quality), as the human eye usually does not have time to see all the bird’s details. Be warned that if the masked object stops (e.g. the bird lands) it is likely to look horrible for a short period of time, until the encoder figures out that the object is not moving and needs refined blocks. The saved bits will be spent on other parts of the video, which may increase subjective quality, provided that tcplx_mask is carefully chosen."/>
+ <opt type="float" name="scplx_mask" min="0" max="1.0" default="0.0" description="Spatial complexity masking. Larger values help against blockiness, if no deblocking filter is used for decoding, which is maybe not a good idea.&lt;br&gt;Imagine a scene with grass (which usually has great spatial complexity), a blue sky and a house; scplx_mask will raise the quantizers of the grass’ macroblocks, thus decreasing its quality, in order to spend more bits on the sky and the house.&lt;br&gt;HINT: Crop any black borders completely as they will reduce the quality of the macroblocks (also applies without scplx_mask).&lt;br&gt;- 0.0 : disabled (default)&lt;br&gt;- 0.0−0.5 : sane range&lt;br&gt;&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: This setting does not have the same effect as using a custom matrix that would compress high frequencies harder, as scplx_mask will reduce the quality of P blocks even if only DC is changing. The result of scplx_mask will probably not look as good."/>
+ <opt type="float" name="p_mask" min="0" max="1.0" default="0.0" description="Reduces the quality of inter blocks.&lt;br&gt;This is equivalent to increasing the quality of intra blocks, because the same average bitrate will be distributed by the rate controller to the whole video sequence (default: 0.0 (disabled)). p_mask=1.0 doubles the bits allocated to each intra block."/>
+ <opt type="float" name="border_mask" min="0" max="1.0" default="0.0" description="border-processing for MPEG-style encoders.&lt;br&gt;Border processing increases the quantizer for macroblocks which are less than 1/5th of the frame width/height away from the frame border, since they are often visually less important."/>
+ <opt type="bool" name="naq" default="false" description="Normalize adaptive quantization (experimental).&lt;br&gt;When using adaptive quantization (*_mask), the average per-MB quantizer may no longer match the requested frame-level quantizer. Naq will attempt to adjust the per-MB quantizers to maintain the proper average."/>
+ <opt type="bool" name="ildct" default="false" description="Use interlaced DCT."/>
+ <opt type="bool" name="ilme" default="false" description="Use interlaced motion estimation (mutually exclusive with qpel)."/>
+ <opt type="bool" name="alt" default="false" description="Use alternative scantable."/>
+ <opt type="int" name="top" min="-1" max="1" default="-1" description="- -1 : automatic&lt;br&gt;- 0 : bottom field first&lt;br&gt;- 1 : top field first"/>
+ <opt type="string" name="format" default="YV12" description="- YV12 : default&lt;br&gt;- 444P : for ffv1&lt;br&gt;- 422P : for HuffYUV, lossless JPEG, dv and ffv1&lt;br&gt;- 411P : for lossless JPEG, dv and ffv1&lt;br&gt;- YVU9 : for lossless JPEG, ffv1 and svq1&lt;br&gt;- BGR32 : for lossless JPEG and ffv1">
+ <value name="YV12"/>
+ <value name="444P"/>
+ <value name="422P"/>
+ <value name="411P"/>
+ <value name="YVU9"/>
+ <value name="BGR32"/>
+ </opt>
+ <opt type="string" name="pred" default="0" description="for HuffYUV&lt;br&gt;- 0 : left prediction&lt;br&gt;- 1 : plane/gradient prediction&lt;br&gt;- 2 : median prediction&lt;br&gt;&lt;br&gt;for lossless JPEG&lt;br&gt;- 0 : left prediction&lt;br&gt;- 1 : top prediction&lt;br&gt;- 2 : topleft prediction&lt;br&gt;- 3 : plane/gradient prediction&lt;br&gt;- 6 : mean prediction">
+ <value name="0"/>
+ <value name="1"/>
+ <value name="2"/>
+ <value name="3"/>
+ <value name="6"/>
+ </opt>
+ <opt type="int" name="coder" min="0" max="1" default="0" description="for ffv1&lt;br&gt;- 0 : vlc coding (Golomb-Rice).&lt;br&gt;- 1 : arithmetic coding (CABAC)"/>
+ <opt type="int" name="context" min="0" max="1" default="0" description="for ffv1&lt;br&gt;- 0 : small context model&lt;br&gt;- 1 : large context model&lt;br&gt;&lt;br&gt;for ffvhuff&lt;br&gt;- 0 : predetermined Huffman tables (builtin or two pass)&lt;br&gt;- 1 : adaptive Huffman tables"/>
+ <opt type="bool" name="qpel" default="false" description="Use quarter pel motion compensation (mutually exclusive with ilme).&lt;br&gt;HINT: This seems only useful for high bitrate encodings."/>
+ <opt type="int" name="mbcmp" min="0" max="2000" default="0" description="Sets the comparison function for the macroblock decision, has only an effect if mbd=0.&lt;br&gt;- 0 (SAD) : sum of absolute differences, fast (default)&lt;br&gt;- 1 (SSE) : sum of squared errors&lt;br&gt;- 2 (SATD) : sum of absolute Hadamard transformed differences&lt;br&gt;- 3 (DCT) : sum of absolute DCT transformed differences&lt;br&gt;- 4 (PSNR) : sum of squared quantization errors (avoid, low quality)&lt;br&gt;- 5 (BIT) : number of bits needed for the block&lt;br&gt;- 6 (RD) : rate distortion optimal, slow&lt;br&gt;- 7 (ZERO) : 0&lt;br&gt;- 8 (VSAD) : sum of absolute vertical differences&lt;br&gt;- 9 (VSSE) : sum of squared vertical differences&lt;br&gt;- 10 (NSSE) : noise preserving sum of squared differences&lt;br&gt;- 11 (W53) : 5/3 wavelet, only used in snow&lt;br&gt;- 12 (W97) : 9/7 wavelet, only used in snow&lt;br&gt;- +256 : Also use chroma, currently does not work (correctly) with B-frames."/>
+ <opt type="int" name="ildctcmp" min="0" max="2000" default="0" description="Sets the comparison function for interlaced DCT decision&lt;br&gt;(see mbcmp for available comparison functions)."/>
+ <opt type="int" name="precmp" min="0" max="2000" default="0" description="Sets the comparison function for motion estimation pre pass&lt;br&gt;(see mbcmp for available comparison functions) (default: 0)."/>
+ <opt type="int" name="cmp" min="0" max="2000" default="0" description="Sets the comparison function for full pel motion estimation&lt;br&gt;(see mbcmp for available comparison functions) (default: 0)."/>
+ <opt type="int" name="subcmp" min="0" max="2000" default="0" description="Sets the comparison function for sub pel motion estimation&lt;br&gt;(see mbcmp for available comparison functions) (default: 0)."/>
+ <opt type="int" name="nssew" min="0" max="1000000" default="8" description="This setting controls NSSE weight, where larger weights will result in more noise.&lt;br&gt;0 NSSE is identical to SSE You may find this useful if you prefer to keep some noise in your encoded video rather than filtering it away before encoding (default: 8)."/>
+ <opt type="int" name="predia" min="-99" max="6" default="0" description="diamond type and size for motion estimation pre-pass"/>
+ <opt type="int" name="dia" min="-99" max="6" default="0" description="Diamond type &amp; size for motion estimation. Motion search is an iterative process. Using a small diamond does not limit the search to finding only small motion vectors. It is just somewhat more likely to stop before finding the very best motion vector, especially when noise is involved. Bigger diamonds allow a wider search for the best motion vector, thus are slower but result in better quality.&lt;br&gt;Big normal diamonds are better quality than shape-adaptive diamonds.&lt;br&gt;Shape-adaptive diamonds are a good tradeoff between speed and quality.&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: The sizes of the normal diamonds and shape adaptive ones do not have the same meaning.&lt;br&gt;- -3 : shape adaptive (fast) diamond with size 3&lt;br&gt;- -2 : shape adaptive (fast) diamond with size 2&lt;br&gt;- -1 : uneven multi-hexagon search (slow)&mt;br&gt;- 1 : normal size=1 diamond (default) =EPZS type diamond&lt;br&gt;0&lt;br&gt;000&lt;br&gt;0&lt;br&gt;- 2 : normal size=2 diamond&lt;br&gt;0&lt;br&gt;000&lt;br&gt;00000&lt;br&gt;000&lt;br&gt;0"/>
+ <opt type="bool" name="trell" default="false" description="Trellis searched quantization. This will find the optimal encoding for each 8x8 block. Trellis searched quantization is quite simply an optimal quantization in the PSNR versus bitrate sense (Assuming that there would be no rounding errors introduced by the IDCT, which is obviously not the case.). It simply finds a block for the minimum of error and lambda*bits.&lt;br&gt;- lambda : quantization parameter (QP) dependent constant&lt;br&gt;- bits : amount of bits needed to encode the block&lt;br&gt;- error : sum of squared errors of the quantization"/>
+ <opt type="bool" name="cbp" default="false" description="Rate distorted optimal coded block pattern.&lt;br&gt;Will select the coded block pattern which minimizes distortion + lambda*rate. This can only be used together with trellis quantization."/>
+ <opt type="bool" name="mv0" default="false" description="Try to encode each MB with MV=0,0 and choose the better one.&lt;br&gt;This has no effect if mbd=0."/>
+ <opt type="int" name="mv0_threshold" min="0" max="1000" default="256" description="When surrounding motion vectors are 0,0 and the motion estimation score of the current block is less than mv0_threshold, 0,0 is used for the motion vector and further motion estimation is skipped (default: 256). Lowering mv0_threshold to 0 can give a slight (0.01dB) PSNR increase and possibly make the encoded video look slightly better; raising mv0_threshold past 320 results in diminished PSNR and visual quality. Higher values speed up encoding very slightly (usually less than 1%, depending on the other options used).&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: This option does not require mv0 to be enabled."/>
+ <opt type="bool" name="qprd" default="false" description="rate distorted optimal quantization parameter (QP) for the given lambda of each macroblock"/>
+ <opt type="int" name="last_pred" min="0" max="99" default="0" description="amount of motion predictors from the previous frame&lt;br&gt;- 0 : (default)&lt;br&gt;- a : Will use 2a+1 x 2a+1 macroblock square of motion vector predictors from the previous frame."/>
+ <opt type="int" name="preme" min="0" max="2" default="0" description="motion estimation pre-pass&lt;br&gt;- 0 : disabled&lt;br&gt;- 1 : only after I-frames (default)&lt;br&gt;- 2 : always"/>
+ <opt type="int" name="subq" min="1" max="8" default="1" description="subpel refinement quality (for qpel) (default: 8 (high quality))&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: This has a significant effect on speed."/>
+ <opt type="bool" name="mpeg_quant" default="false" description="Use MPEG quantizers instead of H.263."/>
+ <opt type="bool" name="aic" default="false" description="Enable AC prediction for MPEG-4 or advanced intra prediction for H.263+. This will improve quality very slightly (around 0.02 dB PSNR) and slow down encoding very slightly (about 1%).&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: vqmin should be 8 or larger for H.263+ AIC."/>
+ <opt type="bool" name="aiv" default="false" description="alternative inter vlc for H.263+"/>
+ <opt type="bool" name="umv" default="false" description="unlimited MVs (H.263+ only) Allows encoding of arbitrarily long MVs."/>
+ <opt type="int" name="ibias" min="-256" max="-256" default="0" description="intra quantizer bias (256 equals 1.0, MPEG style quantizer default: 96, H.263 style quantizer default: 0)&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: The H.263 MMX quantizer cannot handle positive biases (set vfdct=1 or 2), the MPEG MMX quantizer cannot handle negative biases (set vfdct=1 or 2)."/>
+ <opt type="int" name="pbias" min="-256" max="-256" default="0" description="inter quantizer bias (256 equals 1.0, MPEG style quantizer default: 0, H.263 style quantizer default: -64)&lt;br&gt;&lt;u&gt;NOTE&lt;/u&gt;: The H.263 MMX quantizer cannot handle positive biases (set vfdct=1 or 2), the MPEG MMX quantizer cannot handle negative biases (set vfdct=1 or 2).&lt;br&gt;&lt;u&gt;HINT&lt;/u&gt;: A more positive bias (-32 − -16 instead of -64) seems to improve the PSNR."/>
+ <opt type="int" name="nr" min="0" max="100000" default="0" description="Noise reduction, 0 means disabled.&lt;br&gt;0−600 is a useful range for typical content, but you may want to turn it up a bit more for very noisy content (default: 0). Given its small impact on speed, you might want to prefer to use this over filtering noise away with video filters like denoise3d or hqdn3d."/>
+ <opt type="int" name="qns" min="0" max="3" default="0" description="Quantizer noise shaping. Rather than choosing quantization to most closely match the source video in the PSNR sense, it chooses quantization such that noise (usually ringing) will be masked by similar-frequency content in the image. Larger values are slower but may not result in better quality. This can and should be used together with trellis quantization, in which case the trellis quantization (optimal for constant weight) will be used as startpoint for the iterative search.&lt;br&gt;- 0 : disabled (default)&lt;br&gt;- 1 : Only lower the absolute value of coefficients.&lt;br&gt;- 2 : Only change coefficients before the last non-zero coefficient + 1.&lt;br&gt;- 3 : Try all."/>
+ <opt type="bool" name="vqmod_amp" default="false" description="experimental quantizer modulation"/>
+ <opt type="bool" name="vqmod_freq" default="false" description="experimental quantizer modulation"/>
+ <opt type="string" name="dc" default="8" description="intra DC precision in bits (default: 8).&lt;br&gt;If you specify vcodec=mpeg2video this value can be 8, 9, 10 or 11.">
+ <value name="8"/>
+ <value name="9"/>
+ <value name="10"/>
+ <value name="11"/>
+ </opt>
+ <opt type="bool" name="cgop" default="false" description="Close all GOPs. Currently it only works if scene change&lt;br&gt;detection is disabled (sc_threshold=1000000000)."/>
+ <opt type="int" name="vglobal" min="0" max="3" default="0" description="Control writing global video headers.&lt;br&gt;- 0 : Codec decides where to write global headers (default).&lt;br&gt;- 1 : Write global headers only in extradata (needed for .mp4/MOV/NUT).&lt;br&gt;- 2 : Write global headers only in front of keyframes.&lt;br&gt;- 3 : Combine 1 and 2."/>
+ <opt type="int" name="level" min="0" max="100" default="0" description="Set CodecContext Level. Use 31 or 41 to play video on a Playstation 3."/>
+ </lavc>
+ </VIDEO>
+</OPTIONS> \ No newline at end of file
diff --git a/src/mencoderCmdGen.cpp b/src/mencoderCmdGen.cpp
new file mode 100644
index 0000000..93701c5
--- /dev/null
+++ b/src/mencoderCmdGen.cpp
@@ -0,0 +1,129 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './mencoderCmdGen.ui'
+**
+** Created: dim. oct. 26 08:57:34 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "mencoderCmdGen.h"
+
+#include <qvariant.h>
+#include <kpushbutton.h>
+#include <qheader.h>
+#include <qlistview.h>
+#include <qwidgetstack.h>
+#include <qwidget.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qimage.h>
+#include <qpixmap.h>
+
+#include "kpushbutton.h"
+
+/*
+ * Constructs a MyDialog1 as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ *
+ * The dialog will by default be modeless, unless you set 'modal' to
+ * TRUE to construct a modal dialog.
+ */
+MyDialog1::MyDialog1( QWidget* parent, const char* name, bool modal, WFlags fl )
+ : QDialog( parent, name, modal, fl )
+{
+ if ( !name )
+ setName( "MyDialog1" );
+ setSizeGripEnabled( TRUE );
+ MyDialog1Layout = new QGridLayout( this, 1, 1, 11, 6, "MyDialog1Layout");
+
+ Layout1 = new QHBoxLayout( 0, 0, 6, "Layout1");
+ Horizontal_Spacing2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ Layout1->addItem( Horizontal_Spacing2 );
+
+ buttonOk = new KPushButton( this, "buttonOk" );
+ buttonOk->setAutoDefault( TRUE );
+ buttonOk->setDefault( TRUE );
+ buttonOk->setProperty( "stdItem", 1 );
+ Layout1->addWidget( buttonOk );
+
+ buttonCancel = new KPushButton( this, "buttonCancel" );
+ buttonCancel->setAutoDefault( TRUE );
+ buttonCancel->setProperty( "stdItem", 2 );
+ Layout1->addWidget( buttonCancel );
+
+ MyDialog1Layout->addMultiCellLayout( Layout1, 1, 1, 0, 1 );
+
+ listView = new QListView( this, "listView" );
+ listView->addColumn( QString::null );
+ listView->header()->setClickEnabled( FALSE, listView->header()->count() - 1 );
+ listView->header()->setResizeEnabled( FALSE, listView->header()->count() - 1 );
+ listView->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)7, 0, 0, listView->sizePolicy().hasHeightForWidth() ) );
+ listView->setMinimumSize( QSize( 200, 0 ) );
+ listView->setResizeMode( QListView::LastColumn );
+
+ MyDialog1Layout->addWidget( listView, 0, 0 );
+
+ wsOptions = new QWidgetStack( this, "wsOptions" );
+
+ WStackPage = new QWidget( wsOptions, "WStackPage" );
+ wsOptions->addWidget( WStackPage, 0 );
+
+ MyDialog1Layout->addWidget( wsOptions, 0, 1 );
+ languageChange();
+ resize( QSize(655, 498).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
+ connect( listView, SIGNAL( currentChanged(QListViewItem*) ), this, SLOT( listViewCurrentChanged(QListViewItem*) ) );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+MyDialog1::~MyDialog1()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void MyDialog1::languageChange()
+{
+ setCaption( tr2i18n( "MEncoder options" ) );
+ listView->header()->setLabel( 0, QString::null );
+ listView->clear();
+ QListViewItem * item_2 = new QListViewItem( listView, 0 );
+ item_2->setOpen( TRUE );
+ QListViewItem * item = new QListViewItem( item_2, 0 );
+ item->setText( 0, tr2i18n( "faac" ) );
+ item_2->setOpen( TRUE );
+ item = new QListViewItem( item_2, item );
+ item->setText( 0, tr2i18n( "lavc" ) );
+ item_2->setText( 0, tr2i18n( "Audio Codec" ) );
+
+ QListViewItem * item_3 = new QListViewItem( listView, item_2 );
+ item_3->setOpen( TRUE );
+ item = new QListViewItem( item_3, item_2 );
+ item->setText( 0, tr2i18n( "x264" ) );
+ item_3->setOpen( TRUE );
+ item = new QListViewItem( item_3, item );
+ item->setText( 0, tr2i18n( "xvid" ) );
+ item_3->setOpen( TRUE );
+ item = new QListViewItem( item_3, item );
+ item->setText( 0, tr2i18n( "lavc" ) );
+ item_3->setText( 0, tr2i18n( "Video Codec" ) );
+
+}
+
+void MyDialog1::listViewCurrentChanged(QListViewItem*)
+{
+ qWarning( "MyDialog1::listViewCurrentChanged(QListViewItem*): Not implemented yet" );
+}
+
+#include "mencoderCmdGen.moc"
diff --git a/src/mencoderCmdGen.ui b/src/mencoderCmdGen.ui
new file mode 100644
index 0000000..219764e
--- /dev/null
+++ b/src/mencoderCmdGen.ui
@@ -0,0 +1,215 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>MyDialog1</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>MyDialog1</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>655</width>
+ <height>498</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>MEncoder options</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>2</number>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QListView" row="0" column="0">
+ <column>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="clickable">
+ <bool>false</bool>
+ </property>
+ <property name="resizable">
+ <bool>false</bool>
+ </property>
+ </column>
+ <item>
+ <property name="text">
+ <string>Audio Codec</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <item>
+ <property name="text">
+ <string>faac</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>lavc</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ </item>
+ <item>
+ <property name="text">
+ <string>Video Codec</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <item>
+ <property name="text">
+ <string>x264</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>xvid</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>lavc</string>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ </item>
+ </item>
+ <property name="name">
+ <cstring>listView</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="resizeMode">
+ <enum>LastColumn</enum>
+ </property>
+ </widget>
+ <widget class="QWidgetStack" row="0" column="1">
+ <property name="name">
+ <cstring>wsOptions</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>WStackPage</cstring>
+ </property>
+ <attribute name="id">
+ <number>0</number>
+ </attribute>
+ </widget>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog1</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>MyDialog1</receiver>
+ <slot>reject()</slot>
+ </connection>
+ <connection>
+ <sender>listView</sender>
+ <signal>currentChanged(QListViewItem*)</signal>
+ <receiver>MyDialog1</receiver>
+ <slot>listViewCurrentChanged(QListViewItem*)</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>listViewCurrentChanged(QListViewItem*)</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/src/pellicule.png b/src/pellicule.png
new file mode 100644
index 0000000..87340c3
--- /dev/null
+++ b/src/pellicule.png
Binary files differ
diff --git a/src/playbackoptionsw.cpp b/src/playbackoptionsw.cpp
new file mode 100644
index 0000000..a6a4860
--- /dev/null
+++ b/src/playbackoptionsw.cpp
@@ -0,0 +1,279 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './playbackoptionsw.ui'
+**
+** Created: dim. oct. 26 08:57:35 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "playbackoptionsw.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qcheckbox.h>
+#include <qframe.h>
+#include <qlistbox.h>
+#include <kpushbutton.h>
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qimage.h>
+#include <qpixmap.h>
+
+#include "kpushbutton.h"
+static const unsigned char img0_playbackoptionsw[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x03,
+ 0x16, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x75, 0x93, 0x4f, 0x48, 0x2b,
+ 0x67, 0x14, 0xc5, 0x4f, 0xbe, 0x99, 0x38, 0xc9, 0xc4, 0x38, 0x32, 0x6a,
+ 0xd0, 0x3e, 0x17, 0xc1, 0xaa, 0x0b, 0x17, 0x0a, 0x0d, 0x0a, 0xea, 0x03,
+ 0x69, 0x17, 0x2d, 0x2e, 0x5c, 0x08, 0x5d, 0x04, 0xba, 0xd1, 0xbd, 0xa9,
+ 0xd0, 0x4d, 0x37, 0x85, 0x3e, 0x5c, 0x06, 0x51, 0x74, 0xd1, 0xba, 0x2a,
+ 0xb4, 0x50, 0x05, 0xa9, 0xa0, 0x08, 0x82, 0xae, 0x6c, 0x03, 0x6d, 0x4d,
+ 0x9a, 0xc0, 0xf3, 0xa9, 0x1b, 0x17, 0x41, 0x34, 0x91, 0x50, 0x89, 0x89,
+ 0x9d, 0x7f, 0xdf, 0xcc, 0x7c, 0x73, 0xbb, 0x28, 0x86, 0x22, 0xed, 0x59,
+ 0x9f, 0xdf, 0xbd, 0x07, 0xee, 0xb9, 0x21, 0xbc, 0xd0, 0xe4, 0xe4, 0xe4,
+ 0x47, 0x53, 0x53, 0x53, 0xe9, 0x89, 0x89, 0x89, 0x8f, 0x93, 0xc9, 0x64,
+ 0x67, 0x3c, 0x1e, 0x47, 0xb1, 0x58, 0x7c, 0x3a, 0x3a, 0x3a, 0xfa, 0xe9,
+ 0xe0, 0xe0, 0xe0, 0x7b, 0xcb, 0xb2, 0xde, 0xbe, 0x64, 0x00, 0x00, 0xbd,
+ 0xbd, 0xbd, 0x3d, 0xcb, 0xcb, 0xcb, 0xdf, 0x95, 0xcb, 0x65, 0x41, 0xff,
+ 0xa3, 0x52, 0xa9, 0xf4, 0xd7, 0xec, 0xec, 0xec, 0x1b, 0x00, 0x6d, 0x2f,
+ 0x79, 0x7d, 0x63, 0x63, 0xe3, 0x0f, 0xd7, 0x75, 0x89, 0x88, 0xc8, 0x75,
+ 0x5d, 0xf2, 0x3c, 0x8f, 0x38, 0xe7, 0x64, 0xdb, 0x36, 0x71, 0xce, 0xc9,
+ 0xf7, 0x7d, 0x22, 0x22, 0xb2, 0x2c, 0x8b, 0x16, 0x17, 0x17, 0x77, 0x00,
+ 0x48, 0x2d, 0x3a, 0x9d, 0x4e, 0x7f, 0x53, 0xad, 0x56, 0xe9, 0xe6, 0xe6,
+ 0x86, 0x9a, 0xcd, 0x26, 0x39, 0x8e, 0xd3, 0x82, 0x0d, 0xc3, 0x68, 0x0d,
+ 0x11, 0xe2, 0x9f, 0x70, 0x8f, 0x8f, 0x8f, 0x94, 0x4a, 0xa5, 0x3e, 0x07,
+ 0x00, 0x49, 0xd3, 0xb4, 0x0f, 0xb2, 0xd9, 0xec, 0xb7, 0xb2, 0x2c, 0x33,
+ 0xdf, 0xf7, 0x11, 0x04, 0x01, 0xda, 0xda, 0xda, 0x20, 0xcb, 0x32, 0x00,
+ 0x80, 0x88, 0x10, 0x0a, 0x85, 0x10, 0x0e, 0x87, 0x41, 0x44, 0xe0, 0x9c,
+ 0x43, 0x55, 0x55, 0x74, 0x76, 0x76, 0xa6, 0xf6, 0xf6, 0xf6, 0x7e, 0x94,
+ 0xa7, 0xa7, 0xa7, 0x3f, 0xed, 0xea, 0xea, 0x92, 0x6d, 0xdb, 0x46, 0x2c,
+ 0x16, 0x83, 0x10, 0x02, 0xb6, 0x6d, 0x03, 0x00, 0x3c, 0xcf, 0x83, 0xef,
+ 0xfb, 0xd0, 0x34, 0x0d, 0x44, 0x04, 0xc7, 0x71, 0x60, 0xdb, 0x36, 0x1a,
+ 0x8d, 0x06, 0x52, 0xa9, 0x54, 0x62, 0x60, 0x60, 0xe0, 0x13, 0x79, 0x6c,
+ 0x6c, 0xec, 0x43, 0xd7, 0x75, 0x21, 0x49, 0x12, 0x42, 0xa1, 0x10, 0x24,
+ 0x49, 0x82, 0xeb, 0xba, 0x68, 0x36, 0x9b, 0xa8, 0xd5, 0x6a, 0x7e, 0x2c,
+ 0x16, 0x63, 0x9e, 0xe7, 0x31, 0x55, 0x55, 0xc1, 0x39, 0x87, 0x69, 0x9a,
+ 0xb0, 0x2c, 0x0b, 0x44, 0x84, 0x91, 0x91, 0x91, 0x09, 0x59, 0xd7, 0xf5,
+ 0x57, 0x00, 0xc0, 0x18, 0x83, 0x24, 0x49, 0x08, 0x87, 0xc3, 0xcf, 0x5b,
+ 0x68, 0x6e, 0x6e, 0xee, 0xb3, 0xd1, 0xd1, 0xd1, 0x57, 0x5b, 0x5b, 0x5b,
+ 0x6b, 0xa6, 0x69, 0x42, 0x08, 0x81, 0xa7, 0xa7, 0x27, 0x18, 0x86, 0x01,
+ 0x45, 0x51, 0xa0, 0xeb, 0x7a, 0x9f, 0xec, 0x79, 0x9e, 0xdb, 0xd1, 0xd1,
+ 0x01, 0x00, 0x50, 0x14, 0x05, 0x8c, 0x31, 0xc8, 0xb2, 0x8c, 0xf6, 0xf6,
+ 0xf6, 0xd0, 0xc2, 0xc2, 0xc2, 0xeb, 0xbe, 0xbe, 0xbe, 0xde, 0x46, 0xa3,
+ 0x81, 0x48, 0x24, 0x02, 0xce, 0x39, 0x0c, 0xc3, 0x80, 0x10, 0x02, 0x8a,
+ 0xa2, 0x80, 0x73, 0x2e, 0xe4, 0xeb, 0xeb, 0xeb, 0x77, 0xd1, 0x68, 0xf4,
+ 0x7d, 0xc6, 0x18, 0xc2, 0xe1, 0x30, 0x22, 0x91, 0x08, 0xba, 0xbb, 0xbb,
+ 0x51, 0xab, 0xd5, 0x90, 0xc9, 0x64, 0x32, 0x41, 0x10, 0xc0, 0x34, 0x4d,
+ 0x38, 0x8e, 0x03, 0xcb, 0xb2, 0x10, 0x04, 0x01, 0x18, 0x63, 0x08, 0x82,
+ 0x00, 0xe5, 0x72, 0xf9, 0x86, 0xe5, 0x72, 0xb9, 0x43, 0xcb, 0xb2, 0xa0,
+ 0xaa, 0x2a, 0x14, 0x45, 0x81, 0x10, 0x02, 0xb7, 0xb7, 0xb7, 0x70, 0x1c,
+ 0x07, 0xaa, 0xaa, 0x22, 0x91, 0x48, 0x40, 0x51, 0x14, 0x54, 0x2a, 0x15,
+ 0x70, 0xce, 0x5b, 0x17, 0xa9, 0x56, 0xab, 0xb8, 0xba, 0xba, 0xfa, 0x45,
+ 0xaa, 0xd7, 0xeb, 0x77, 0xc9, 0x64, 0x32, 0x3d, 0x33, 0x33, 0xa3, 0x31,
+ 0xc6, 0xb0, 0xb2, 0xb2, 0x82, 0x42, 0xa1, 0x80, 0xa5, 0xa5, 0x25, 0x98,
+ 0xa6, 0x89, 0x7c, 0x3e, 0x8f, 0xd5, 0xd5, 0x55, 0x48, 0x92, 0x84, 0xc3,
+ 0xc3, 0x43, 0x8c, 0x8f, 0x8f, 0x43, 0xd3, 0x34, 0x6c, 0x6f, 0x6f, 0xbf,
+ 0x2d, 0x14, 0x0a, 0x6f, 0x18, 0x80, 0x3f, 0xd7, 0xd6, 0xd6, 0xbe, 0x3c,
+ 0x3b, 0x3b, 0x83, 0x65, 0x59, 0xc8, 0xe7, 0xf3, 0x08, 0x82, 0x00, 0xf3,
+ 0xf3, 0xf3, 0x38, 0x3e, 0x3e, 0x46, 0xad, 0x56, 0x43, 0x34, 0x1a, 0x05,
+ 0x11, 0x61, 0x78, 0x78, 0x18, 0x89, 0x44, 0x02, 0xa7, 0xa7, 0xa7, 0xee,
+ 0xce, 0xce, 0xce, 0x57, 0x00, 0x9a, 0xad, 0x36, 0x0e, 0x0e, 0x0e, 0x7e,
+ 0xbd, 0xbb, 0xbb, 0xeb, 0x97, 0x4a, 0x25, 0xca, 0xe5, 0x72, 0x54, 0x2c,
+ 0x16, 0x69, 0x7f, 0x7f, 0x9f, 0x2a, 0x95, 0x0a, 0x5d, 0x5c, 0x5c, 0xd0,
+ 0xe5, 0xe5, 0x25, 0x3d, 0x3c, 0x3c, 0xd0, 0xfa, 0xfa, 0xba, 0x15, 0x8f,
+ 0xc7, 0xbf, 0x78, 0xe6, 0x5a, 0x7d, 0xae, 0xd7, 0xeb, 0x3f, 0x9f, 0x9c,
+ 0x9c, 0xbc, 0xf3, 0x3c, 0x6f, 0x50, 0xd7, 0xf5, 0xf7, 0x88, 0x08, 0x43,
+ 0x43, 0x43, 0x60, 0x8c, 0x81, 0x73, 0x8e, 0xf3, 0xf3, 0xf3, 0x20, 0x9b,
+ 0xcd, 0xfe, 0xbe, 0xb9, 0xb9, 0x99, 0x71, 0x1c, 0xe7, 0x87, 0x67, 0x2e,
+ 0xf4, 0x1f, 0x8f, 0xd9, 0xae, 0x28, 0xca, 0xeb, 0xfe, 0xfe, 0xfe, 0xc9,
+ 0x9e, 0x9e, 0x9e, 0x7e, 0x21, 0x04, 0xdd, 0xdf, 0xdf, 0xdf, 0xde, 0xdd,
+ 0xdd, 0xfd, 0x0a, 0xe0, 0x37, 0x00, 0xc6, 0xbf, 0xcd, 0x7f, 0x03, 0x0c,
+ 0x63, 0xc7, 0xb7, 0xdc, 0x56, 0x84, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49,
+ 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+
+
+/*
+ * Constructs a PlaybackOptionsw as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+PlaybackOptionsw::PlaybackOptionsw( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ QImage img;
+ img.loadFromData( img0_playbackoptionsw, sizeof( img0_playbackoptionsw ), "PNG" );
+ image0 = img;
+ if ( !name )
+ setName( "PlaybackOptionsw" );
+ setIcon( image0 );
+ PlaybackOptionswLayout = new QGridLayout( this, 1, 1, 2, 6, "PlaybackOptionswLayout");
+
+ ckMenu = new QCheckBox( this, "ckMenu" );
+
+ PlaybackOptionswLayout->addWidget( ckMenu, 1, 0 );
+
+ frPlayback = new QFrame( this, "frPlayback" );
+ frPlayback->setEnabled( FALSE );
+ frPlayback->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, 0, 0, frPlayback->sizePolicy().hasHeightForWidth() ) );
+ frPlayback->setFrameShape( QFrame::NoFrame );
+ frPlayback->setFrameShadow( QFrame::Sunken );
+ frPlaybackLayout = new QGridLayout( frPlayback, 1, 1, 0, 2, "frPlaybackLayout");
+
+ lbSequence = new QListBox( frPlayback, "lbSequence" );
+ lbSequence->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, lbSequence->sizePolicy().hasHeightForWidth() ) );
+
+ frPlaybackLayout->addMultiCellWidget( lbSequence, 1, 5, 0, 0 );
+ spacer5 = new QSpacerItem( 20, 31, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ frPlaybackLayout->addMultiCell( spacer5, 0, 1, 1, 1 );
+
+ bSeqUp = new KPushButton( frPlayback, "bSeqUp" );
+ bSeqUp->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, bSeqUp->sizePolicy().hasHeightForWidth() ) );
+ bSeqUp->setMinimumSize( QSize( 21, 21 ) );
+ bSeqUp->setMaximumSize( QSize( 21, 21 ) );
+
+ frPlaybackLayout->addMultiCellWidget( bSeqUp, 2, 2, 1, 2 );
+
+ bSeqDown = new KPushButton( frPlayback, "bSeqDown" );
+ bSeqDown->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, bSeqDown->sizePolicy().hasHeightForWidth() ) );
+ bSeqDown->setMinimumSize( QSize( 21, 21 ) );
+ bSeqDown->setMaximumSize( QSize( 21, 21 ) );
+
+ frPlaybackLayout->addMultiCellWidget( bSeqDown, 4, 4, 1, 2 );
+ spacer7 = new QSpacerItem( 20, 16, QSizePolicy::Minimum, QSizePolicy::Fixed );
+ frPlaybackLayout->addItem( spacer7, 3, 1 );
+
+ textLabel4 = new QLabel( frPlayback, "textLabel4" );
+ textLabel4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, textLabel4->sizePolicy().hasHeightForWidth() ) );
+ QFont textLabel4_font( textLabel4->font() );
+ textLabel4_font.setBold( TRUE );
+ textLabel4->setFont( textLabel4_font );
+
+ frPlaybackLayout->addWidget( textLabel4, 0, 0 );
+
+ frame4 = new QFrame( frPlayback, "frame4" );
+ frame4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, frame4->sizePolicy().hasHeightForWidth() ) );
+ frame4->setMinimumSize( QSize( 211, 100 ) );
+ frame4->setFrameShape( QFrame::NoFrame );
+ frame4->setFrameShadow( QFrame::Raised );
+ frame4Layout = new QGridLayout( frame4, 1, 1, 0, 0, "frame4Layout");
+
+ textLabel1 = new QLabel( frame4, "textLabel1" );
+ textLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, textLabel1->sizePolicy().hasHeightForWidth() ) );
+ QFont textLabel1_font( textLabel1->font() );
+ textLabel1_font.setBold( TRUE );
+ textLabel1->setFont( textLabel1_font );
+
+ frame4Layout->addMultiCellWidget( textLabel1, 0, 0, 0, 2 );
+
+ cbDefSub = new QComboBox( FALSE, frame4, "cbDefSub" );
+ cbDefSub->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)5, 0, 0, cbDefSub->sizePolicy().hasHeightForWidth() ) );
+
+ frame4Layout->addWidget( cbDefSub, 2, 2 );
+
+ textLabel3 = new QLabel( frame4, "textLabel3" );
+ textLabel3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, textLabel3->sizePolicy().hasHeightForWidth() ) );
+
+ frame4Layout->addWidget( textLabel3, 2, 0 );
+
+ cbDefAudio = new QComboBox( FALSE, frame4, "cbDefAudio" );
+ cbDefAudio->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)5, 0, 0, cbDefAudio->sizePolicy().hasHeightForWidth() ) );
+
+ frame4Layout->addWidget( cbDefAudio, 1, 2 );
+
+ textLabel2_3 = new QLabel( frame4, "textLabel2_3" );
+ textLabel2_3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, textLabel2_3->sizePolicy().hasHeightForWidth() ) );
+
+ frame4Layout->addWidget( textLabel2_3, 1, 0 );
+ spacer4 = new QSpacerItem( 16, 21, QSizePolicy::Fixed, QSizePolicy::Minimum );
+ frame4Layout->addMultiCell( spacer4, 1, 2, 1, 1 );
+
+ frPlaybackLayout->addWidget( frame4, 6, 0 );
+ spacer6 = new QSpacerItem( 20, 280, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ frPlaybackLayout->addMultiCell( spacer6, 5, 6, 1, 1 );
+
+ PlaybackOptionswLayout->addWidget( frPlayback, 0, 0 );
+ languageChange();
+ resize( QSize(328, 491).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( bSeqDown, SIGNAL( clicked() ), this, SLOT( bSeqDownClick() ) );
+ connect( bSeqUp, SIGNAL( clicked() ), this, SLOT( bSeqUpClick() ) );
+ connect( ckMenu, SIGNAL( clicked() ), this, SLOT( ckMenuClick() ) );
+ connect( cbDefAudio, SIGNAL( activated(int) ), this, SLOT( cbDefAudioActivated(int) ) );
+ connect( cbDefSub, SIGNAL( activated(int) ), this, SLOT( cbDefSubActivated(int) ) );
+ connect( lbSequence, SIGNAL( currentChanged(QListBoxItem*) ), this, SLOT( lbSequenceChanged(QListBoxItem*) ) );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+PlaybackOptionsw::~PlaybackOptionsw()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void PlaybackOptionsw::languageChange()
+{
+ setCaption( tr2i18n( "DVD playback options" ) );
+ ckMenu->setText( tr2i18n( "&Keep original menus" ) );
+ ckMenu->setAccel( QKeySequence( tr2i18n( "Alt+K" ) ) );
+ bSeqUp->setText( QString::null );
+ bSeqDown->setText( QString::null );
+ textLabel4->setText( tr2i18n( "Selected Titles" ) );
+ textLabel1->setText( tr2i18n( "Default language" ) );
+ textLabel3->setText( tr2i18n( "Subtitle" ) );
+ textLabel2_3->setText( tr2i18n( "Audio" ) );
+}
+
+void PlaybackOptionsw::cbStartActivated(int)
+{
+ qWarning( "PlaybackOptionsw::cbStartActivated(int): Not implemented yet" );
+}
+
+void PlaybackOptionsw::cbTitleActivated(int)
+{
+ qWarning( "PlaybackOptionsw::cbTitleActivated(int): Not implemented yet" );
+}
+
+void PlaybackOptionsw::ckMenuClick()
+{
+ qWarning( "PlaybackOptionsw::ckMenuClick(): Not implemented yet" );
+}
+
+void PlaybackOptionsw::bSeqUpClick()
+{
+ qWarning( "PlaybackOptionsw::bSeqUpClick(): Not implemented yet" );
+}
+
+void PlaybackOptionsw::bSeqDownClick()
+{
+ qWarning( "PlaybackOptionsw::bSeqDownClick(): Not implemented yet" );
+}
+
+void PlaybackOptionsw::lbSequenceChanged(QListBoxItem*)
+{
+ qWarning( "PlaybackOptionsw::lbSequenceChanged(QListBoxItem*): Not implemented yet" );
+}
+
+void PlaybackOptionsw::cbDefAudioActivated(int)
+{
+ qWarning( "PlaybackOptionsw::cbDefAudioActivated(int): Not implemented yet" );
+}
+
+void PlaybackOptionsw::cbDefSubActivated(int)
+{
+ qWarning( "PlaybackOptionsw::cbDefSubActivated(int): Not implemented yet" );
+}
+
+#include "playbackoptionsw.moc"
diff --git a/src/playbackoptionsw.ui b/src/playbackoptionsw.ui
new file mode 100644
index 0000000..8f3105e
--- /dev/null
+++ b/src/playbackoptionsw.ui
@@ -0,0 +1,405 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>PlaybackOptionsw</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>PlaybackOptionsw</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>328</width>
+ <height>491</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>DVD playback options</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>ckMenu</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Keep original menus</string>
+ </property>
+ <property name="accel">
+ <string>Alt+K</string>
+ </property>
+ </widget>
+ <widget class="QFrame" row="0" column="0">
+ <property name="name">
+ <cstring>frPlayback</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QListBox" row="1" column="0" rowspan="5" colspan="1">
+ <property name="name">
+ <cstring>lbSequence</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer row="0" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton" row="2" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>bSeqUp</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>21</width>
+ <height>21</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>21</width>
+ <height>21</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="4" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>bSeqDown</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>21</width>
+ <height>21</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>21</width>
+ <height>21</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>spacer7</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Selected Titles</string>
+ </property>
+ </widget>
+ <widget class="QFrame" row="6" column="0">
+ <property name="name">
+ <cstring>frame4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>211</width>
+ <height>100</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>0</number>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Default language</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="2">
+ <property name="name">
+ <cstring>cbDefSub</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Subtitle</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="2">
+ <property name="name">
+ <cstring>cbDefAudio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2_3</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Audio</string>
+ </property>
+ </widget>
+ <spacer row="1" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>16</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer row="5" column="1" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>280</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="PNG" length="847">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000031649444154388d75934f482b6714c54fbe9938c9c438326ad03e17c1aa0b170a0d0aea0369172d2e5c085d04bad1bda9d04d37853e5c065174d1ba2ab45005a9a00882ae6c036d4d9ac0f3a91b174134915089899d7fdfcc7c73bb288622ed599fdfbd07eeb921bcd0e4e4e447535353e98989898f93c964673c1e47b1587c3a3a3afae9e0e0e07bcbb2debe640000bdbdbd3dcbcbcbdf95cb6541ffa352a9f4d7ececec1b006d2f797d6363e30fd7758988c8755df23c8f38e764db3671cec9f77d2222b22c8b1617177700482d3a9d4e7f53ad56e9e6e6869acd26398ed3820dc3680d11e29f708f8f8f944aa53e070049d3b40fb2d9ecb7b22c33dff7110401dadada20cb32008088100a85100e874144e09c435555747676a6f6f6f67e94a7a7a73fedeaea926ddb462c16831002b66d03003ccf83effbd0340d4404c77160db361a8d0652a954626060e013796c6cec43d77521491242a110244982ebba68369ba8d56a7e2c16639ee7315555c13987699ab02c0b44849191910959d7f55700c0188324490887c3cf5b686e6eeeb3d1d1d1575b5b5b6ba669420881a7a7271886014551a0eb7a9fec799edbd1d101005014058c31c8b28cf6f6f6d0c2c2c2ebbebebede46a381482402ce390cc38010028aa280732ee4ebebeb77d168f47dc618c2e130229108babbbb51abd590c964324110c0344d388e03cbb21004011863088200e572f986e572b943cbb2a0aa2a1445811002b7b7b7701c07aaaa229148405114542a1570ce5b17a956abb8babafa45aad7eb77c964323d3333a331c6b0b2b28242a180a5a52598a6897c3e8fd5d555489284c3c3438c8f8f43d3346c6f6fbf2d140a6f18803fd7d6d6be3c3b3b836559c8e7f3088200f3f3f3383e3e46ad5643341a051161787818894402a7a7a7eececece57009aad360e0e0e7ebdbbbbeb974a25cae572542c16697f7f9f2a950a5d5c5cd0e5e5253d3c3cd0fafaba158fc7bf78e65a7daed7eb3f9f9c9cbcf33c6f50d7f5f78808434343608c81738ef3f3f3209bcdfebeb9b999711ce787672ef41f8fd9ae28caebfefefec99e9e9e7e2104dddfdfdfdeddddfd0ae03700c6bfcd7f030c63c7b7dc5684a70000000049454e44ae426082</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>bSeqDown</sender>
+ <signal>clicked()</signal>
+ <receiver>PlaybackOptionsw</receiver>
+ <slot>bSeqDownClick()</slot>
+ </connection>
+ <connection>
+ <sender>bSeqUp</sender>
+ <signal>clicked()</signal>
+ <receiver>PlaybackOptionsw</receiver>
+ <slot>bSeqUpClick()</slot>
+ </connection>
+ <connection>
+ <sender>ckMenu</sender>
+ <signal>clicked()</signal>
+ <receiver>PlaybackOptionsw</receiver>
+ <slot>ckMenuClick()</slot>
+ </connection>
+ <connection>
+ <sender>cbDefAudio</sender>
+ <signal>activated(int)</signal>
+ <receiver>PlaybackOptionsw</receiver>
+ <slot>cbDefAudioActivated(int)</slot>
+ </connection>
+ <connection>
+ <sender>cbDefSub</sender>
+ <signal>activated(int)</signal>
+ <receiver>PlaybackOptionsw</receiver>
+ <slot>cbDefSubActivated(int)</slot>
+ </connection>
+ <connection>
+ <sender>lbSequence</sender>
+ <signal>currentChanged(QListBoxItem*)</signal>
+ <receiver>PlaybackOptionsw</receiver>
+ <slot>lbSequenceChanged(QListBoxItem*)</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>cbStartActivated( int )</slot>
+ <slot>cbTitleActivated( int )</slot>
+ <slot>ckMenuClick()</slot>
+ <slot>bSeqUpClick()</slot>
+ <slot>bSeqDownClick()</slot>
+ <slot>lbSequenceChanged(QListBoxItem*)</slot>
+ <slot>cbDefAudioActivated(int)</slot>
+ <slot>cbDefSubActivated(int)</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/src/prefAuthor.cpp b/src/prefAuthor.cpp
new file mode 100644
index 0000000..f43d619
--- /dev/null
+++ b/src/prefAuthor.cpp
@@ -0,0 +1,165 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './prefAuthor.ui'
+**
+** Created: dim. oct. 26 08:57:35 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "prefAuthor.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qgroupbox.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <knuminput.h>
+#include <kpushbutton.h>
+#include <kcolorbutton.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include "knuminput.h"
+#include "kpushbutton.h"
+#include "kcolorbutton.h"
+
+/*
+ * Constructs a prefAuthor as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+prefAuthor::prefAuthor( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ if ( !name )
+ setName( "prefAuthor" );
+ prefAuthorLayout = new QGridLayout( this, 1, 1, 11, 6, "prefAuthorLayout");
+
+ groupBox1 = new QGroupBox( this, "groupBox1" );
+ groupBox1->setColumnLayout(0, Qt::Vertical );
+ groupBox1->layout()->setSpacing( 6 );
+ groupBox1->layout()->setMargin( 11 );
+ groupBox1Layout = new QGridLayout( groupBox1->layout() );
+ groupBox1Layout->setAlignment( Qt::AlignTop );
+
+ cbAudioFormat = new QComboBox( FALSE, groupBox1, "cbAudioFormat" );
+
+ groupBox1Layout->addWidget( cbAudioFormat, 0, 1 );
+
+ cbAudioBitrate = new QComboBox( FALSE, groupBox1, "cbAudioBitrate" );
+
+ groupBox1Layout->addWidget( cbAudioBitrate, 1, 1 );
+
+ textLabel1 = new QLabel( groupBox1, "textLabel1" );
+
+ groupBox1Layout->addWidget( textLabel1, 0, 0 );
+
+ textLabel2 = new QLabel( groupBox1, "textLabel2" );
+
+ groupBox1Layout->addWidget( textLabel2, 1, 0 );
+ spacer1 = new QSpacerItem( 151, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ groupBox1Layout->addMultiCell( spacer1, 0, 1, 2, 2 );
+
+ prefAuthorLayout->addWidget( groupBox1, 0, 0 );
+ spacer3 = new QSpacerItem( 20, 60, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ prefAuthorLayout->addItem( spacer3, 2, 0 );
+
+ groupBox2 = new QGroupBox( this, "groupBox2" );
+ groupBox2->setColumnLayout(0, Qt::Vertical );
+ groupBox2->layout()->setSpacing( 6 );
+ groupBox2->layout()->setMargin( 11 );
+ groupBox2Layout = new QGridLayout( groupBox2->layout() );
+ groupBox2Layout->setAlignment( Qt::AlignTop );
+
+ textLabel3 = new QLabel( groupBox2, "textLabel3" );
+
+ groupBox2Layout->addWidget( textLabel3, 0, 0 );
+ spacer2 = new QSpacerItem( 121, 31, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ groupBox2Layout->addItem( spacer2, 0, 2 );
+
+ textLabel5 = new QLabel( groupBox2, "textLabel5" );
+
+ groupBox2Layout->addWidget( textLabel5, 1, 0 );
+
+ inButtonHeight = new KIntNumInput( groupBox2, "inButtonHeight" );
+ inButtonHeight->setMinValue( 0 );
+ inButtonHeight->setMaxValue( 480 );
+
+ groupBox2Layout->addWidget( inButtonHeight, 1, 1 );
+
+ inButtonWidth = new KIntNumInput( groupBox2, "inButtonWidth" );
+ inButtonWidth->setMinValue( 0 );
+ inButtonWidth->setMaxValue( 700 );
+
+ groupBox2Layout->addWidget( inButtonWidth, 0, 1 );
+
+ bButtonFont = new KPushButton( groupBox2, "bButtonFont" );
+
+ groupBox2Layout->addWidget( bButtonFont, 4, 1 );
+
+ textLabel6 = new QLabel( groupBox2, "textLabel6" );
+
+ groupBox2Layout->addWidget( textLabel6, 2, 0 );
+
+ cbHiliteColor = new KColorButton( groupBox2, "cbHiliteColor" );
+
+ groupBox2Layout->addWidget( cbHiliteColor, 2, 1 );
+
+ textLabel6_2 = new QLabel( groupBox2, "textLabel6_2" );
+
+ groupBox2Layout->addWidget( textLabel6_2, 3, 0 );
+
+ cbTextColor = new KColorButton( groupBox2, "cbTextColor" );
+
+ groupBox2Layout->addWidget( cbTextColor, 3, 1 );
+
+ prefAuthorLayout->addWidget( groupBox2, 1, 0 );
+ languageChange();
+ resize( QSize(600, 480).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( bButtonFont, SIGNAL( clicked() ), this, SLOT( bButtonFontClicked() ) );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+prefAuthor::~prefAuthor()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void prefAuthor::languageChange()
+{
+ setCaption( tr2i18n( "Authoring options" ) );
+ groupBox1->setTitle( tr2i18n( "Audio" ) );
+ cbAudioFormat->clear();
+ cbAudioFormat->insertItem( tr2i18n( "AC3" ) );
+ cbAudioFormat->insertItem( tr2i18n( "MP2" ) );
+ cbAudioBitrate->clear();
+ cbAudioBitrate->insertItem( tr2i18n( "128" ) );
+ cbAudioBitrate->insertItem( tr2i18n( "192" ) );
+ cbAudioBitrate->insertItem( tr2i18n( "320" ) );
+ textLabel1->setText( tr2i18n( "Format" ) );
+ textLabel2->setText( tr2i18n( "Bitrate" ) );
+ groupBox2->setTitle( tr2i18n( "Buttons" ) );
+ textLabel3->setText( tr2i18n( "Width" ) );
+ textLabel5->setText( tr2i18n( "Height" ) );
+ bButtonFont->setText( tr2i18n( "Font" ) );
+ textLabel6->setText( tr2i18n( "Hilite color" ) );
+ cbHiliteColor->setText( QString::null );
+ textLabel6_2->setText( tr2i18n( "Text color" ) );
+ cbTextColor->setText( QString::null );
+}
+
+void prefAuthor::bButtonFontClicked()
+{
+ qWarning( "prefAuthor::bButtonFontClicked(): Not implemented yet" );
+}
+
+#include "prefAuthor.moc"
diff --git a/src/prefAuthor.ui b/src/prefAuthor.ui
new file mode 100644
index 0000000..0f3db9a
--- /dev/null
+++ b/src/prefAuthor.ui
@@ -0,0 +1,251 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>prefAuthor</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>prefAuthor</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>480</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Authoring options</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox" row="0" column="0">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Audio</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>AC3</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>MP2</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cbAudioFormat</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>128</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>192</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>320</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cbAudioBitrate</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Format</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>Bitrate</string>
+ </property>
+ </widget>
+ <spacer row="0" column="2" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>151</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>60</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Buttons</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Width</string>
+ </property>
+ </widget>
+ <spacer row="0" column="2">
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>121</width>
+ <height>31</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>Height</string>
+ </property>
+ </widget>
+ <widget class="KIntNumInput" row="1" column="1">
+ <property name="name">
+ <cstring>inButtonHeight</cstring>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="maxValue">
+ <number>480</number>
+ </property>
+ </widget>
+ <widget class="KIntNumInput" row="0" column="1">
+ <property name="name">
+ <cstring>inButtonWidth</cstring>
+ </property>
+ <property name="minValue">
+ <number>0</number>
+ </property>
+ <property name="maxValue">
+ <number>700</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="4" column="1">
+ <property name="name">
+ <cstring>bButtonFont</cstring>
+ </property>
+ <property name="text">
+ <string>Font</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>Hilite color</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="2" column="1">
+ <property name="name">
+ <cstring>cbHiliteColor</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel6_2</cstring>
+ </property>
+ <property name="text">
+ <string>Text color</string>
+ </property>
+ </widget>
+ <widget class="KColorButton" row="3" column="1">
+ <property name="name">
+ <cstring>cbTextColor</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>bButtonFont</sender>
+ <signal>clicked()</signal>
+ <receiver>prefAuthor</receiver>
+ <slot>bButtonFontClicked()</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>bButtonFontClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+ <includehint>kcolorbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/src/prefDVD.cpp b/src/prefDVD.cpp
new file mode 100644
index 0000000..d0aef30
--- /dev/null
+++ b/src/prefDVD.cpp
@@ -0,0 +1,114 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './prefDVD.ui'
+**
+** Created: dim. oct. 26 08:57:35 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "prefDVD.h"
+
+#include <qvariant.h>
+#include <qlabel.h>
+#include <kurlrequester.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include "kurlrequester.h"
+#include "klineedit.h"
+#include "kpushbutton.h"
+
+/*
+ * Constructs a prefDVD as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+prefDVD::prefDVD( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ if ( !name )
+ setName( "prefDVD" );
+ prefDVDLayout = new QGridLayout( this, 1, 1, 11, 6, "prefDVDLayout");
+
+ lblworkDir = new QLabel( this, "lblworkDir" );
+ lblworkDir->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)5, 0, 0, lblworkDir->sizePolicy().hasHeightForWidth() ) );
+
+ prefDVDLayout->addWidget( lblworkDir, 0, 0 );
+
+ urOutput = new KURLRequester( this, "urOutput" );
+ urOutput->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, urOutput->sizePolicy().hasHeightForWidth() ) );
+
+ prefDVDLayout->addMultiCellWidget( urOutput, 0, 0, 1, 2 );
+
+ ckK3b = new QCheckBox( this, "ckK3b" );
+
+ prefDVDLayout->addMultiCellWidget( ckK3b, 2, 2, 0, 2 );
+
+ ckAutoBurn = new QCheckBox( this, "ckAutoBurn" );
+ ckAutoBurn->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, ckAutoBurn->sizePolicy().hasHeightForWidth() ) );
+
+ prefDVDLayout->addMultiCellWidget( ckAutoBurn, 3, 3, 0, 2 );
+
+ textLabel1_2 = new QLabel( this, "textLabel1_2" );
+
+ prefDVDLayout->addWidget( textLabel1_2, 1, 0 );
+
+ sbSize = new QSpinBox( this, "sbSize" );
+ sbSize->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, sbSize->sizePolicy().hasHeightForWidth() ) );
+ sbSize->setMinimumSize( QSize( 80, 0 ) );
+ sbSize->setMaxValue( 9000 );
+ sbSize->setLineStep( 100 );
+ sbSize->setValue( 4400 );
+
+ prefDVDLayout->addWidget( sbSize, 1, 1 );
+
+ ckQuickScan = new QCheckBox( this, "ckQuickScan" );
+
+ prefDVDLayout->addMultiCellWidget( ckQuickScan, 4, 4, 0, 2 );
+ spacer1 = new QSpacerItem( 21, 110, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ prefDVDLayout->addItem( spacer1, 7, 2 );
+
+ ckDvdAuthor = new QCheckBox( this, "ckDvdAuthor" );
+
+ prefDVDLayout->addMultiCellWidget( ckDvdAuthor, 5, 5, 0, 2 );
+
+ ckDelTmpFiles = new QCheckBox( this, "ckDelTmpFiles" );
+
+ prefDVDLayout->addMultiCellWidget( ckDelTmpFiles, 6, 6, 0, 2 );
+ languageChange();
+ resize( QSize(600, 347).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+prefDVD::~prefDVD()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void prefDVD::languageChange()
+{
+ setCaption( tr2i18n( "prefDVD" ) );
+ lblworkDir->setText( tr2i18n( "Output directory" ) );
+ ckK3b->setText( tr2i18n( "Burn with k3b" ) );
+ ckK3b->setAccel( QKeySequence( tr2i18n( "Alt+B" ) ) );
+ ckAutoBurn->setText( tr2i18n( "Auto burn" ) );
+ ckAutoBurn->setAccel( QKeySequence( tr2i18n( "Alt+T" ) ) );
+ textLabel1_2->setText( tr2i18n( "DVD size" ) );
+ ckQuickScan->setText( tr2i18n( "Quick scan" ) );
+ ckQuickScan->setAccel( QKeySequence( tr2i18n( "Alt+Q" ) ) );
+ ckDvdAuthor->setText( tr2i18n( "use dvdAuthor for copy without menus" ) );
+ ckDvdAuthor->setAccel( QKeySequence( tr2i18n( "Alt+D" ) ) );
+ ckDelTmpFiles->setText( tr2i18n( "Clear output directory on exit" ) );
+ ckDelTmpFiles->setAccel( QKeySequence( tr2i18n( "Alt+Y" ) ) );
+}
+
+#include "prefDVD.moc"
diff --git a/src/prefDVD.ui b/src/prefDVD.ui
new file mode 100644
index 0000000..d610ee8
--- /dev/null
+++ b/src/prefDVD.ui
@@ -0,0 +1,175 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>prefDVD</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>prefDVD</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>600</width>
+ <height>347</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>prefDVD</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lblworkDir</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Output directory</string>
+ </property>
+ </widget>
+ <widget class="KURLRequester" row="0" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>urOutput</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>ckK3b</cstring>
+ </property>
+ <property name="text">
+ <string>Burn with k3b</string>
+ </property>
+ <property name="accel">
+ <string>Alt+B</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>ckAutoBurn</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Auto burn</string>
+ </property>
+ <property name="accel">
+ <string>Alt+T</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>DVD size</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="1">
+ <property name="name">
+ <cstring>sbSize</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>80</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maxValue">
+ <number>9000</number>
+ </property>
+ <property name="lineStep">
+ <number>100</number>
+ </property>
+ <property name="value">
+ <number>4400</number>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="4" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>ckQuickScan</cstring>
+ </property>
+ <property name="text">
+ <string>Quick scan</string>
+ </property>
+ <property name="accel">
+ <string>Alt+Q</string>
+ </property>
+ </widget>
+ <spacer row="7" column="2">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>110</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QCheckBox" row="5" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>ckDvdAuthor</cstring>
+ </property>
+ <property name="text">
+ <string>use dvdAuthor for copy without menus</string>
+ </property>
+ <property name="accel">
+ <string>Alt+D</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="6" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>ckDelTmpFiles</cstring>
+ </property>
+ <property name="text">
+ <string>Clear output directory on exit</string>
+ </property>
+ <property name="accel">
+ <string>Alt+Y</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kurlrequester.h</includehint>
+ <includehint>klineedit.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/src/prefMPEG4.cpp b/src/prefMPEG4.cpp
new file mode 100644
index 0000000..9787413
--- /dev/null
+++ b/src/prefMPEG4.cpp
@@ -0,0 +1,418 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './prefMPEG4.ui'
+**
+** Created: dim. oct. 26 08:57:35 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "prefMPEG4.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qtabwidget.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qspinbox.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qimage.h>
+#include <qpixmap.h>
+
+static const unsigned char img0_prefMPEG4[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x02,
+ 0x86, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x85, 0x52, 0xdd, 0x4b, 0x53,
+ 0x71, 0x18, 0x7e, 0xce, 0xd9, 0x39, 0x73, 0xf3, 0x98, 0xdb, 0xd0, 0xd0,
+ 0xf9, 0x39, 0x27, 0x47, 0x1d, 0x44, 0xa4, 0x4e, 0xfc, 0x82, 0x89, 0x83,
+ 0x62, 0x5e, 0x18, 0x61, 0x84, 0xa0, 0x65, 0x61, 0x17, 0x56, 0x57, 0x86,
+ 0xd1, 0x5d, 0x97, 0xf5, 0x27, 0x04, 0x5d, 0x84, 0x49, 0x17, 0xdd, 0x44,
+ 0x1a, 0x21, 0xcd, 0x0a, 0x6b, 0x22, 0xa6, 0x53, 0x18, 0x36, 0xb7, 0xe9,
+ 0x74, 0x1f, 0x88, 0x5f, 0xcb, 0xb5, 0xe3, 0xc7, 0x5c, 0xfb, 0x3c, 0xa7,
+ 0x8b, 0x3c, 0x31, 0x87, 0xd8, 0x0b, 0x3f, 0xde, 0xf7, 0xf9, 0xf1, 0x3c,
+ 0xcf, 0xfb, 0x5c, 0xbc, 0x04, 0x32, 0xaa, 0xa9, 0xa9, 0x99, 0x6d, 0x6b,
+ 0x33, 0xf4, 0x57, 0x6a, 0x0a, 0xda, 0x95, 0x0a, 0xa6, 0x2c, 0xc5, 0x0b,
+ 0xc9, 0x60, 0x28, 0xbc, 0xe2, 0x70, 0x7a, 0x3e, 0x5a, 0x2c, 0x96, 0x61,
+ 0x97, 0xcb, 0xc9, 0xa5, 0xf3, 0x09, 0x71, 0x50, 0xab, 0x8b, 0xa4, 0xbd,
+ 0x3d, 0xdd, 0xcf, 0xba, 0x3a, 0x5b, 0x06, 0x6b, 0x2f, 0x14, 0x49, 0x64,
+ 0x32, 0x1a, 0x20, 0x28, 0x2c, 0xb9, 0xfc, 0x58, 0x58, 0xdc, 0xc0, 0xaf,
+ 0xd0, 0x3e, 0x2a, 0x2b, 0x8a, 0xb9, 0xb1, 0x0f, 0x53, 0x0f, 0x47, 0x46,
+ 0x5e, 0x8d, 0x88, 0x3a, 0xc9, 0xb1, 0x98, 0x7e, 0x30, 0x70, 0x73, 0x74,
+ 0xe8, 0xfe, 0x95, 0xdb, 0x6c, 0x45, 0x3e, 0x49, 0x51, 0x14, 0x02, 0xbb,
+ 0xfb, 0x78, 0x3b, 0xbe, 0x80, 0xed, 0xdf, 0x4a, 0x34, 0x5c, 0xac, 0x81,
+ 0x00, 0x1a, 0x94, 0x24, 0x2c, 0xef, 0xba, 0xde, 0x71, 0x0d, 0xc8, 0x8e,
+ 0x5b, 0xad, 0xd6, 0xe9, 0x7f, 0x06, 0x03, 0x03, 0x77, 0x9f, 0x0e, 0xdd,
+ 0x29, 0xed, 0x57, 0x31, 0x87, 0x88, 0x09, 0x2a, 0xbc, 0x1b, 0x9f, 0xc7,
+ 0xcc, 0x5a, 0x12, 0xda, 0xd6, 0x0e, 0x9c, 0xd7, 0x56, 0xc1, 0xeb, 0x74,
+ 0xa2, 0xb1, 0x96, 0xc5, 0xc4, 0x17, 0x2b, 0xda, 0x0d, 0x3a, 0xe8, 0xaa,
+ 0x35, 0x46, 0x6e, 0x8f, 0x9f, 0xb3, 0xdb, 0xed, 0x6b, 0x92, 0xba, 0xba,
+ 0x7a, 0xcd, 0xa3, 0x7b, 0x86, 0x37, 0x6c, 0x49, 0x4c, 0xf2, 0x6d, 0x6e,
+ 0x03, 0xaf, 0xc7, 0x56, 0x20, 0xab, 0x31, 0xa2, 0x80, 0xd5, 0x01, 0x14,
+ 0x85, 0x14, 0x41, 0x02, 0x72, 0x06, 0xbe, 0x45, 0x1b, 0x5a, 0x5b, 0xf4,
+ 0x30, 0x4f, 0x7c, 0x82, 0xa9, 0x9d, 0x25, 0x12, 0xc9, 0xac, 0x86, 0xc9,
+ 0xaf, 0x33, 0xcf, 0x25, 0x7d, 0x7d, 0x7d, 0x83, 0x3d, 0x26, 0xb9, 0x71,
+ 0xd5, 0x17, 0xc4, 0x5a, 0x40, 0x0d, 0x5d, 0xb5, 0x16, 0x3e, 0x8e, 0x07,
+ 0x9d, 0xa3, 0x40, 0x0a, 0x24, 0x78, 0x90, 0xa0, 0x18, 0x06, 0xbb, 0x3b,
+ 0x01, 0x1c, 0x05, 0xb7, 0x90, 0x4c, 0xf0, 0x50, 0x30, 0x11, 0xb0, 0xda,
+ 0xc2, 0xfc, 0x79, 0xdb, 0xa6, 0x85, 0xac, 0xd2, 0x64, 0x1b, 0xb2, 0xa8,
+ 0x23, 0xe8, 0x6a, 0x4a, 0xe0, 0x70, 0x3a, 0x20, 0x20, 0x05, 0x55, 0x22,
+ 0x00, 0xee, 0x20, 0x82, 0xdd, 0xbd, 0x30, 0x42, 0x07, 0x11, 0x84, 0xa3,
+ 0x29, 0xa4, 0xf2, 0x0a, 0x31, 0xbb, 0x60, 0xc3, 0x5e, 0xc8, 0x8b, 0x17,
+ 0x2f, 0x47, 0x91, 0x2f, 0xf7, 0xa2, 0xbe, 0x5e, 0x6f, 0xa4, 0xce, 0xc9,
+ 0x0e, 0x8b, 0x11, 0xf3, 0x03, 0x28, 0x47, 0xef, 0xd5, 0x3c, 0x0c, 0xbf,
+ 0xb7, 0xa1, 0xb9, 0xf1, 0x12, 0x96, 0x97, 0xed, 0x88, 0xa8, 0xca, 0x3c,
+ 0x0c, 0x23, 0x97, 0x72, 0xab, 0x9f, 0x4b, 0x1d, 0x6e, 0x17, 0x72, 0x73,
+ 0x48, 0x68, 0x89, 0x2d, 0x04, 0x83, 0xdb, 0x98, 0x9e, 0x32, 0x43, 0x99,
+ 0xdb, 0x5c, 0x4e, 0x3c, 0x79, 0xdc, 0xeb, 0xf1, 0xba, 0xbf, 0x6b, 0x93,
+ 0x3c, 0x0d, 0x90, 0x52, 0xac, 0xfa, 0x8f, 0xc0, 0x13, 0x0c, 0x92, 0x3c,
+ 0x09, 0x2e, 0x2a, 0x44, 0xe3, 0xb1, 0xa8, 0x94, 0x56, 0x28, 0x49, 0x46,
+ 0xc1, 0x80, 0x20, 0x05, 0xa4, 0x36, 0xdd, 0xa0, 0x89, 0x04, 0x0e, 0x0e,
+ 0xa3, 0xa0, 0x68, 0xa5, 0x1f, 0xdd, 0x37, 0x3a, 0x67, 0x85, 0xe3, 0x02,
+ 0x20, 0x9c, 0x36, 0x8b, 0x58, 0x7c, 0xe9, 0x98, 0xfc, 0xb1, 0xe4, 0xb1,
+ 0x65, 0x5e, 0xe3, 0x89, 0x4b, 0x23, 0x88, 0x13, 0xf8, 0xaf, 0xf6, 0x24,
+ 0xe1, 0x56, 0xfa, 0xc6, 0xcc, 0x9e, 0x99, 0x20, 0x13, 0x93, 0x82, 0x20,
+ 0xc4, 0xff, 0x97, 0x40, 0x4c, 0x91, 0xbe, 0x5d, 0x9c, 0xc9, 0xb3, 0xe2,
+ 0x9e, 0x65, 0x26, 0x76, 0xf2, 0x18, 0xc4, 0x33, 0x89, 0x67, 0x19, 0xa6,
+ 0xff, 0x9f, 0xca, 0xd0, 0xeb, 0x1b, 0x6a, 0x4d, 0x26, 0xd3, 0x65, 0xb5,
+ 0xba, 0x50, 0xbb, 0xbe, 0xbe, 0x4e, 0x04, 0x02, 0x3f, 0x7d, 0x66, 0xb3,
+ 0x79, 0x72, 0x67, 0x67, 0xdb, 0x06, 0x20, 0x91, 0xce, 0xfd, 0x03, 0xf3,
+ 0x98, 0x43, 0xeb, 0x06, 0xad, 0xb9, 0x96, 0x00, 0x00, 0x00, 0x00, 0x49,
+ 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+
+
+/*
+ * Constructs a prefMPEG4 as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+prefMPEG4::prefMPEG4( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ QImage img;
+ img.loadFromData( img0_prefMPEG4, sizeof( img0_prefMPEG4 ), "PNG" );
+ image0 = img;
+ if ( !name )
+ setName( "prefMPEG4" );
+ setIcon( image0 );
+ prefMPEG4Layout = new QGridLayout( this, 1, 1, 5, 2, "prefMPEG4Layout");
+
+ lTitle = new QLabel( this, "lTitle" );
+ QFont lTitle_font( lTitle->font() );
+ lTitle_font.setBold( TRUE );
+ lTitle->setFont( lTitle_font );
+
+ prefMPEG4Layout->addWidget( lTitle, 0, 0 );
+
+ tabWidget = new QTabWidget( this, "tabWidget" );
+
+ tabVideo = new QWidget( tabWidget, "tabVideo" );
+ tabVideoLayout = new QGridLayout( tabVideo, 1, 1, 11, 6, "tabVideoLayout");
+
+ ck2passes = new QCheckBox( tabVideo, "ck2passes" );
+
+ tabVideoLayout->addMultiCellWidget( ck2passes, 0, 0, 3, 6 );
+
+ textLabel1_4 = new QLabel( tabVideo, "textLabel1_4" );
+
+ tabVideoLayout->addWidget( textLabel1_4, 0, 0 );
+
+ cbMp4Codec = new QComboBox( FALSE, tabVideo, "cbMp4Codec" );
+ cbMp4Codec->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, cbMp4Codec->sizePolicy().hasHeightForWidth() ) );
+
+ tabVideoLayout->addMultiCellWidget( cbMp4Codec, 0, 0, 1, 2 );
+
+ textLabel3_2 = new QLabel( tabVideo, "textLabel3_2" );
+
+ tabVideoLayout->addWidget( textLabel3_2, 1, 0 );
+
+ textLabel3_2_2 = new QLabel( tabVideo, "textLabel3_2_2" );
+
+ tabVideoLayout->addWidget( textLabel3_2_2, 2, 0 );
+
+ leMp4Width = new QLineEdit( tabVideo, "leMp4Width" );
+ leMp4Width->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, leMp4Width->sizePolicy().hasHeightForWidth() ) );
+ leMp4Width->setMinimumSize( QSize( 0, 0 ) );
+ leMp4Width->setMaximumSize( QSize( 70, 32767 ) );
+ leMp4Width->setMaxLength( 4 );
+ leMp4Width->setAlignment( int( QLineEdit::AlignAuto ) );
+
+ tabVideoLayout->addWidget( leMp4Width, 1, 1 );
+
+ ckMp4AspectRatio = new QCheckBox( tabVideo, "ckMp4AspectRatio" );
+ ckMp4AspectRatio->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, ckMp4AspectRatio->sizePolicy().hasHeightForWidth() ) );
+ ckMp4AspectRatio->setChecked( TRUE );
+
+ tabVideoLayout->addMultiCellWidget( ckMp4AspectRatio, 1, 1, 3, 6 );
+ spacer9 = new QSpacerItem( 380, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ tabVideoLayout->addMultiCell( spacer9, 2, 2, 2, 6 );
+
+ leMp4Height = new QLineEdit( tabVideo, "leMp4Height" );
+ leMp4Height->setEnabled( FALSE );
+ leMp4Height->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, leMp4Height->sizePolicy().hasHeightForWidth() ) );
+ leMp4Height->setMinimumSize( QSize( 0, 0 ) );
+ leMp4Height->setMaximumSize( QSize( 70, 32767 ) );
+ leMp4Height->setMaxLength( 4 );
+ leMp4Height->setAlignment( int( QLineEdit::AlignAuto ) );
+
+ tabVideoLayout->addWidget( leMp4Height, 2, 1 );
+ spacer8 = new QSpacerItem( 21, 110, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ tabVideoLayout->addItem( spacer8, 4, 5 );
+
+ sbMp4NumberCD = new QSpinBox( tabVideo, "sbMp4NumberCD" );
+ sbMp4NumberCD->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, sbMp4NumberCD->sizePolicy().hasHeightForWidth() ) );
+ sbMp4NumberCD->setMaxValue( 9 );
+ sbMp4NumberCD->setMinValue( 1 );
+
+ tabVideoLayout->addWidget( sbMp4NumberCD, 3, 5 );
+
+ textLabel1 = new QLabel( tabVideo, "textLabel1" );
+ textLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, textLabel1->sizePolicy().hasHeightForWidth() ) );
+
+ tabVideoLayout->addWidget( textLabel1, 3, 4 );
+
+ buttonGroup1 = new QButtonGroup( tabVideo, "buttonGroup1" );
+ buttonGroup1->setFrameShape( QButtonGroup::NoFrame );
+ buttonGroup1->setColumnLayout(0, Qt::Vertical );
+ buttonGroup1->layout()->setSpacing( 6 );
+ buttonGroup1->layout()->setMargin( 2 );
+ buttonGroup1Layout = new QGridLayout( buttonGroup1->layout() );
+ buttonGroup1Layout->setAlignment( Qt::AlignTop );
+
+ rbSize = new QRadioButton( buttonGroup1, "rbSize" );
+
+ buttonGroup1Layout->addWidget( rbSize, 0, 0 );
+
+ sbMp4Size = new QSpinBox( buttonGroup1, "sbMp4Size" );
+ sbMp4Size->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, sbMp4Size->sizePolicy().hasHeightForWidth() ) );
+ sbMp4Size->setMinimumSize( QSize( 80, 0 ) );
+ sbMp4Size->setButtonSymbols( QSpinBox::UpDownArrows );
+ sbMp4Size->setMaxValue( 9999 );
+ sbMp4Size->setMinValue( 1 );
+ sbMp4Size->setLineStep( 10 );
+ sbMp4Size->setValue( 700 );
+
+ buttonGroup1Layout->addWidget( sbMp4Size, 0, 1 );
+
+ rbBitrate = new QRadioButton( buttonGroup1, "rbBitrate" );
+
+ buttonGroup1Layout->addWidget( rbBitrate, 1, 0 );
+ spacer6 = new QSpacerItem( 51, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ buttonGroup1Layout->addMultiCell( spacer6, 0, 1, 2, 2 );
+
+ leMp4VideoBitrate = new QLineEdit( buttonGroup1, "leMp4VideoBitrate" );
+ leMp4VideoBitrate->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, leMp4VideoBitrate->sizePolicy().hasHeightForWidth() ) );
+
+ buttonGroup1Layout->addWidget( leMp4VideoBitrate, 1, 1 );
+
+ tabVideoLayout->addMultiCellWidget( buttonGroup1, 3, 3, 0, 3 );
+ spacer3 = new QSpacerItem( 130, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ tabVideoLayout->addItem( spacer3, 3, 6 );
+ tabWidget->insertTab( tabVideo, QString::fromLatin1("") );
+
+ tabAudio = new QWidget( tabWidget, "tabAudio" );
+ tabAudioLayout = new QGridLayout( tabAudio, 1, 1, 11, 6, "tabAudioLayout");
+
+ textLabel1_4_2 = new QLabel( tabAudio, "textLabel1_4_2" );
+
+ tabAudioLayout->addWidget( textLabel1_4_2, 0, 0 );
+
+ cbMp4AudioCodec = new QComboBox( FALSE, tabAudio, "cbMp4AudioCodec" );
+ cbMp4AudioCodec->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, cbMp4AudioCodec->sizePolicy().hasHeightForWidth() ) );
+
+ tabAudioLayout->addMultiCellWidget( cbMp4AudioCodec, 0, 0, 1, 2 );
+
+ textLabel1_5 = new QLabel( tabAudio, "textLabel1_5" );
+
+ tabAudioLayout->addWidget( textLabel1_5, 1, 0 );
+
+ leMp4AudioBitrate = new QLineEdit( tabAudio, "leMp4AudioBitrate" );
+ leMp4AudioBitrate->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, leMp4AudioBitrate->sizePolicy().hasHeightForWidth() ) );
+ leMp4AudioBitrate->setMinimumSize( QSize( 0, 0 ) );
+ leMp4AudioBitrate->setMaximumSize( QSize( 70, 32767 ) );
+ leMp4AudioBitrate->setMaxLength( 3 );
+ leMp4AudioBitrate->setAlignment( int( QLineEdit::AlignAuto ) );
+
+ tabAudioLayout->addWidget( leMp4AudioBitrate, 1, 1 );
+ spacer4 = new QSpacerItem( 376, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ tabAudioLayout->addMultiCell( spacer4, 1, 1, 2, 3 );
+
+ sbAudioGain = new QSpinBox( tabAudio, "sbAudioGain" );
+ sbAudioGain->setMaxValue( 10 );
+ sbAudioGain->setMinValue( 1 );
+
+ tabAudioLayout->addWidget( sbAudioGain, 2, 1 );
+
+ textLabel1_2 = new QLabel( tabAudio, "textLabel1_2" );
+
+ tabAudioLayout->addWidget( textLabel1_2, 2, 0 );
+ spacer14 = new QSpacerItem( 20, 61, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ tabAudioLayout->addItem( spacer14, 3, 3 );
+ tabWidget->insertTab( tabAudio, QString::fromLatin1("") );
+
+ prefMPEG4Layout->addWidget( tabWidget, 1, 0 );
+
+ ckUseCache = new QCheckBox( this, "ckUseCache" );
+
+ prefMPEG4Layout->addWidget( ckUseCache, 2, 0 );
+ languageChange();
+ resize( QSize(582, 460).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( cbMp4AudioCodec, SIGNAL( activated(int) ), this, SLOT( cbMp4AudioCodecActivated(int) ) );
+ connect( cbMp4Codec, SIGNAL( activated(int) ), this, SLOT( cbMp4CodecActivated(int) ) );
+ connect( ck2passes, SIGNAL( clicked() ), this, SLOT( ck2passesClicked() ) );
+ connect( ckMp4AspectRatio, SIGNAL( clicked() ), this, SLOT( ckMp4AspectRatioClick() ) );
+ connect( rbBitrate, SIGNAL( clicked() ), this, SLOT( rgVideoSizeChanged() ) );
+ connect( rbSize, SIGNAL( clicked() ), this, SLOT( rgVideoSizeChanged() ) );
+ connect( leMp4Width, SIGNAL( textChanged(const QString&) ), this, SLOT( leMp4WidthTextChanged(const QString&) ) );
+ connect( leMp4Height, SIGNAL( textChanged(const QString&) ), this, SLOT( leMp4HeightTextChanged(const QString&) ) );
+ connect( sbMp4Size, SIGNAL( valueChanged(int) ), this, SLOT( sbMp4SizeValueChanged(int) ) );
+ connect( sbMp4NumberCD, SIGNAL( valueChanged(int) ), this, SLOT( sbMp4NumberCDValueChanged(int) ) );
+ connect( leMp4VideoBitrate, SIGNAL( textChanged(const QString&) ), this, SLOT( leMp4VideoBitrateTextChanged(const QString&) ) );
+ connect( sbAudioGain, SIGNAL( valueChanged(int) ), this, SLOT( sbAudioGainValueChanged(int) ) );
+ connect( leMp4AudioBitrate, SIGNAL( textChanged(const QString&) ), this, SLOT( leMp4AudioBitrateTextChanged(const QString&) ) );
+ connect( ckUseCache, SIGNAL( clicked() ), this, SLOT( ckUseCacheClick() ) );
+
+ // tab order
+ setTabOrder( tabWidget, cbMp4Codec );
+ setTabOrder( cbMp4Codec, ck2passes );
+ setTabOrder( ck2passes, leMp4Width );
+ setTabOrder( leMp4Width, ckMp4AspectRatio );
+ setTabOrder( ckMp4AspectRatio, leMp4Height );
+ setTabOrder( leMp4Height, rbSize );
+ setTabOrder( rbSize, rbBitrate );
+ setTabOrder( rbBitrate, sbMp4Size );
+ setTabOrder( sbMp4Size, leMp4VideoBitrate );
+ setTabOrder( leMp4VideoBitrate, sbMp4NumberCD );
+ setTabOrder( sbMp4NumberCD, cbMp4AudioCodec );
+ setTabOrder( cbMp4AudioCodec, leMp4AudioBitrate );
+ setTabOrder( leMp4AudioBitrate, sbAudioGain );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+prefMPEG4::~prefMPEG4()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void prefMPEG4::languageChange()
+{
+ setCaption( tr2i18n( "Form1" ) );
+ lTitle->setText( QString::null );
+ ck2passes->setText( tr2i18n( "2 pass" ) );
+ ck2passes->setAccel( QKeySequence( tr2i18n( "Alt+2" ) ) );
+ textLabel1_4->setText( tr2i18n( "Codec" ) );
+ cbMp4Codec->clear();
+ cbMp4Codec->insertItem( tr2i18n( "XviD" ) );
+ cbMp4Codec->insertItem( tr2i18n( "lavc MPEG4" ) );
+ cbMp4Codec->insertItem( tr2i18n( "x264" ) );
+ cbMp4Codec->setCurrentItem( 1 );
+ textLabel3_2->setText( tr2i18n( "Width" ) );
+ textLabel3_2_2->setText( tr2i18n( "Height" ) );
+ leMp4Width->setText( tr2i18n( "640" ) );
+ leMp4Width->setInputMask( QString::null );
+ ckMp4AspectRatio->setText( tr2i18n( "&keep aspect ratio" ) );
+ ckMp4AspectRatio->setAccel( QKeySequence( tr2i18n( "Alt+K" ) ) );
+ leMp4Height->setInputMask( QString::null );
+ textLabel1->setText( tr2i18n( "X" ) );
+ buttonGroup1->setTitle( QString::null );
+ rbSize->setText( tr2i18n( "File size" ) );
+ rbSize->setAccel( QKeySequence( tr2i18n( "Alt+S" ) ) );
+ sbMp4Size->setSuffix( tr2i18n( " MB" ) );
+ rbBitrate->setText( tr2i18n( "Bitrate" ) );
+ rbBitrate->setAccel( QKeySequence( tr2i18n( "Alt+B" ) ) );
+ tabWidget->changeTab( tabVideo, tr2i18n( "Video" ) );
+ textLabel1_4_2->setText( tr2i18n( "Codec" ) );
+ cbMp4AudioCodec->clear();
+ cbMp4AudioCodec->insertItem( tr2i18n( "mp3" ) );
+ cbMp4AudioCodec->insertItem( tr2i18n( "faac" ) );
+ cbMp4AudioCodec->insertItem( tr2i18n( "mp2" ) );
+ cbMp4AudioCodec->insertItem( tr2i18n( "ac3" ) );
+ cbMp4AudioCodec->insertItem( tr2i18n( "adpcm ima" ) );
+ textLabel1_5->setText( tr2i18n( "Bitrate" ) );
+ leMp4AudioBitrate->setText( QString::null );
+ textLabel1_2->setText( tr2i18n( "Gain" ) );
+ tabWidget->changeTab( tabAudio, tr2i18n( "Audio" ) );
+ ckUseCache->setText( tr2i18n( "use cell cache" ) );
+}
+
+void prefMPEG4::ckMp4AspectRatioClick()
+{
+ qWarning( "prefMPEG4::ckMp4AspectRatioClick(): Not implemented yet" );
+}
+
+void prefMPEG4::cbMp4CodecActivated(int)
+{
+ qWarning( "prefMPEG4::cbMp4CodecActivated(int): Not implemented yet" );
+}
+
+void prefMPEG4::cbMp4AudioCodecActivated(int)
+{
+ qWarning( "prefMPEG4::cbMp4AudioCodecActivated(int): Not implemented yet" );
+}
+
+void prefMPEG4::ck2passesClicked()
+{
+ qWarning( "prefMPEG4::ck2passesClicked(): Not implemented yet" );
+}
+
+void prefMPEG4::sbMp4SizeValueChanged(int)
+{
+ qWarning( "prefMPEG4::sbMp4SizeValueChanged(int): Not implemented yet" );
+}
+
+void prefMPEG4::sbMp4NumberCDValueChanged(int)
+{
+ qWarning( "prefMPEG4::sbMp4NumberCDValueChanged(int): Not implemented yet" );
+}
+
+void prefMPEG4::leMp4WidthTextChanged(const QString&)
+{
+ qWarning( "prefMPEG4::leMp4WidthTextChanged(const QString&): Not implemented yet" );
+}
+
+void prefMPEG4::leMp4HeightTextChanged(const QString&)
+{
+ qWarning( "prefMPEG4::leMp4HeightTextChanged(const QString&): Not implemented yet" );
+}
+
+void prefMPEG4::leMp4AudioBitrateTextChanged(const QString&)
+{
+ qWarning( "prefMPEG4::leMp4AudioBitrateTextChanged(const QString&): Not implemented yet" );
+}
+
+void prefMPEG4::rgVideoSizeChanged()
+{
+ qWarning( "prefMPEG4::rgVideoSizeChanged(): Not implemented yet" );
+}
+
+void prefMPEG4::leMp4VideoBitrateTextChanged(const QString&)
+{
+ qWarning( "prefMPEG4::leMp4VideoBitrateTextChanged(const QString&): Not implemented yet" );
+}
+
+void prefMPEG4::sbAudioGainValueChanged(int)
+{
+ qWarning( "prefMPEG4::sbAudioGainValueChanged(int): Not implemented yet" );
+}
+
+void prefMPEG4::ckUseCacheClick()
+{
+ qWarning( "prefMPEG4::ckUseCacheClick(): Not implemented yet" );
+}
+
+#include "prefMPEG4.moc"
diff --git a/src/prefMPEG4.ui b/src/prefMPEG4.ui
new file mode 100644
index 0000000..fc21017
--- /dev/null
+++ b/src/prefMPEG4.ui
@@ -0,0 +1,705 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>prefMPEG4</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>prefMPEG4</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>582</width>
+ <height>460</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>5</number>
+ </property>
+ <property name="spacing">
+ <number>2</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lTitle</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QTabWidget" row="1" column="0">
+ <property name="name">
+ <cstring>tabWidget</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabVideo</cstring>
+ </property>
+ <attribute name="title">
+ <string>Video</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox" row="0" column="3" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>ck2passes</cstring>
+ </property>
+ <property name="text">
+ <string>2 pass</string>
+ </property>
+ <property name="accel">
+ <string>Alt+2</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_4</cstring>
+ </property>
+ <property name="text">
+ <string>Codec</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1" rowspan="1" colspan="2">
+ <item>
+ <property name="text">
+ <string>XviD</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>lavc MPEG4</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>x264</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cbMp4Codec</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="currentItem">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>Width</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel3_2_2</cstring>
+ </property>
+ <property name="text">
+ <string>Height</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>leMp4Width</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>70</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>640</string>
+ </property>
+ <property name="maxLength">
+ <number>4</number>
+ </property>
+ <property name="alignment">
+ <set>AlignAuto</set>
+ </property>
+ <property name="inputMask">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="3" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>ckMp4AspectRatio</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&amp;keep aspect ratio</string>
+ </property>
+ <property name="accel">
+ <string>Alt+K</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer row="2" column="2" rowspan="1" colspan="5">
+ <property name="name">
+ <cstring>spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>380</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLineEdit" row="2" column="1">
+ <property name="name">
+ <cstring>leMp4Height</cstring>
+ </property>
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>70</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="maxLength">
+ <number>4</number>
+ </property>
+ <property name="alignment">
+ <set>AlignAuto</set>
+ </property>
+ <property name="inputMask">
+ <string></string>
+ </property>
+ </widget>
+ <spacer row="4" column="5">
+ <property name="name">
+ <cstring>spacer8</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>110</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QSpinBox" row="3" column="5">
+ <property name="name">
+ <cstring>sbMp4NumberCD</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maxValue">
+ <number>9</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="4">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>X</string>
+ </property>
+ </widget>
+ <widget class="QButtonGroup" row="3" column="0" rowspan="1" colspan="4">
+ <property name="name">
+ <cstring>buttonGroup1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <widget class="QRadioButton" row="0" column="0">
+ <property name="name">
+ <cstring>rbSize</cstring>
+ </property>
+ <property name="text">
+ <string>File size</string>
+ </property>
+ <property name="accel">
+ <string>Alt+S</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="1">
+ <property name="name">
+ <cstring>sbMp4Size</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>80</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="suffix">
+ <string> MB</string>
+ </property>
+ <property name="buttonSymbols">
+ <enum>UpDownArrows</enum>
+ </property>
+ <property name="maxValue">
+ <number>9999</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ <property name="lineStep">
+ <number>10</number>
+ </property>
+ <property name="value">
+ <number>700</number>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="1" column="0">
+ <property name="name">
+ <cstring>rbBitrate</cstring>
+ </property>
+ <property name="text">
+ <string>Bitrate</string>
+ </property>
+ <property name="accel">
+ <string>Alt+B</string>
+ </property>
+ </widget>
+ <spacer row="0" column="2" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>51</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>leMp4VideoBitrate</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row="3" column="6">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>130</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tabAudio</cstring>
+ </property>
+ <attribute name="title">
+ <string>Audio</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1_4_2</cstring>
+ </property>
+ <property name="text">
+ <string>Codec</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1" rowspan="1" colspan="2">
+ <item>
+ <property name="text">
+ <string>mp3</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>faac</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>mp2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ac3</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>adpcm ima</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cbMp4AudioCodec</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1_5</cstring>
+ </property>
+ <property name="text">
+ <string>Bitrate</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="1">
+ <property name="name">
+ <cstring>leMp4AudioBitrate</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>70</width>
+ <height>32767</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="maxLength">
+ <number>3</number>
+ </property>
+ <property name="alignment">
+ <set>AlignAuto</set>
+ </property>
+ </widget>
+ <spacer row="1" column="2" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>376</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QSpinBox" row="2" column="1">
+ <property name="name">
+ <cstring>sbAudioGain</cstring>
+ </property>
+ <property name="maxValue">
+ <number>10</number>
+ </property>
+ <property name="minValue">
+ <number>1</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Gain</string>
+ </property>
+ </widget>
+ <spacer row="3" column="3">
+ <property name="name">
+ <cstring>spacer14</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>61</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ </widget>
+ <widget class="QCheckBox" row="2" column="0">
+ <property name="name">
+ <cstring>ckUseCache</cstring>
+ </property>
+ <property name="text">
+ <string>use cell cache</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="PNG" length="703">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000028649444154388d8552dd4b5371187eced93973f398dbd0d0f93927471d44a44efc828983625e186184a0656117565786d15d97f527045d844917dd441a21cd0a6b22a6531836b7e9741f885fcbb5e3c75cfb3ca78b3c3187d80b3fdef7f9f13ccffb5cbc0432aaa9a9996d6b33f4576a0ada950aa62cc50bc96028bce2707a3e5a2c966197cbc9a5f3097150ab8ba4bd3dddcfba3a5b066b2f144964321a20282cb9fc5858dcc0afd03e2a2b8ab9b10f530f47465e8d883ac9b1987e30707374e8fe95db6c453e49511402bbfb783bbe80eddf4a345cac81001a94242cefbade710dc88e5badd6e97f060303779f0edd29ed57318788092abc1b9fc7cc5a12dad60e9cd756c1eb74a2b196c5c4172bda0d3ae8aa35466e8f9fb3dbed6b92baba7acda37b86376c494cf26d6e03afc75620ab31a280d50114851441027206be451b5a5bf4304f7c82a99d2512c9ac86c9af33cf257d7d7d833d26b971d517c45a400d5db5163e8e079da3400a247890a01806bb3b011c05b7904cf0503011b0dac2fc79dba685acd2641bb2a823e86a4ae0703a202005552200ee2082ddbd3042071184a329a4f20a31bb60c35ec88b172f47912ff7a2be5e6fa4cec90e8b11f3032847efd53c0cbfb7a1b9f1129697ed88a8ca3c0c239772ab9f4b1d6e1772734868892d0483db989e324399db5c4e3c79dcebf1babf6b933c0d9052acfa8fc0130c923c092e2a44e3b1a89456284946c1802005a436dda089040e0ea3a068a51fdd373a6785e302209c368b587ce998fcb1e4b1655ee3894b238813f8aff624e156fac6cc9e992013938220c4ff97404c91be5d9cc9b3e29e652676f218c433896719a6ff9fcad0eb1b6a4d26d365b5ba50bbbebe4e04023f7d66b379726767db062091cefd03f39843eb06adb9960000000049454e44ae426082</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>cbMp4AudioCodec</sender>
+ <signal>activated(int)</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>cbMp4AudioCodecActivated(int)</slot>
+ </connection>
+ <connection>
+ <sender>cbMp4Codec</sender>
+ <signal>activated(int)</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>cbMp4CodecActivated(int)</slot>
+ </connection>
+ <connection>
+ <sender>ck2passes</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>ck2passesClicked()</slot>
+ </connection>
+ <connection>
+ <sender>ckMp4AspectRatio</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>ckMp4AspectRatioClick()</slot>
+ </connection>
+ <connection>
+ <sender>rbBitrate</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>rgVideoSizeChanged()</slot>
+ </connection>
+ <connection>
+ <sender>rbSize</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>rgVideoSizeChanged()</slot>
+ </connection>
+ <connection>
+ <sender>leMp4Width</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>leMp4WidthTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>leMp4Height</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>leMp4HeightTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>sbMp4Size</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>sbMp4SizeValueChanged(int)</slot>
+ </connection>
+ <connection>
+ <sender>sbMp4NumberCD</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>sbMp4NumberCDValueChanged(int)</slot>
+ </connection>
+ <connection>
+ <sender>leMp4VideoBitrate</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>leMp4VideoBitrateTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>sbAudioGain</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>sbAudioGainValueChanged(int)</slot>
+ </connection>
+ <connection>
+ <sender>leMp4AudioBitrate</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>leMp4AudioBitrateTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>ckUseCache</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMPEG4</receiver>
+ <slot>ckUseCacheClick()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>tabWidget</tabstop>
+ <tabstop>cbMp4Codec</tabstop>
+ <tabstop>ck2passes</tabstop>
+ <tabstop>leMp4Width</tabstop>
+ <tabstop>ckMp4AspectRatio</tabstop>
+ <tabstop>leMp4Height</tabstop>
+ <tabstop>rbSize</tabstop>
+ <tabstop>rbBitrate</tabstop>
+ <tabstop>sbMp4Size</tabstop>
+ <tabstop>leMp4VideoBitrate</tabstop>
+ <tabstop>sbMp4NumberCD</tabstop>
+ <tabstop>cbMp4AudioCodec</tabstop>
+ <tabstop>leMp4AudioBitrate</tabstop>
+ <tabstop>sbAudioGain</tabstop>
+</tabstops>
+<slots>
+ <slot>ckMp4AspectRatioClick()</slot>
+ <slot>cbMp4CodecActivated( int )</slot>
+ <slot>cbMp4AudioCodecActivated( int )</slot>
+ <slot>ck2passesClicked()</slot>
+ <slot>sbMp4SizeValueChanged( int )</slot>
+ <slot>sbMp4NumberCDValueChanged( int )</slot>
+ <slot>leMp4WidthTextChanged( const QString &amp; )</slot>
+ <slot>leMp4HeightTextChanged( const QString &amp; )</slot>
+ <slot>leMp4AudioBitrateTextChanged( const QString &amp; )</slot>
+ <slot>rgVideoSizeChanged()</slot>
+ <slot>leMp4VideoBitrateTextChanged(const QString &amp;)</slot>
+ <slot>sbAudioGainValueChanged(int)</slot>
+ <slot>ckUseCacheClick()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/prefMencoder.cpp b/src/prefMencoder.cpp
new file mode 100644
index 0000000..98a56ca
--- /dev/null
+++ b/src/prefMencoder.cpp
@@ -0,0 +1,426 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './prefMencoder.ui'
+**
+** Created: dim. oct. 26 08:57:36 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "prefMencoder.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qtabwidget.h>
+#include <qlistbox.h>
+#include <kpushbutton.h>
+#include <qtextedit.h>
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include "kpushbutton.h"
+
+/*
+ * Constructs a prefMencoder as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+prefMencoder::prefMencoder( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ if ( !name )
+ setName( "prefMencoder" );
+ prefMencoderLayout = new QGridLayout( this, 1, 1, 11, 6, "prefMencoderLayout");
+
+ layout2 = new QGridLayout( 0, 1, 1, 0, 6, "layout2");
+
+ textLabel2 = new QLabel( this, "textLabel2" );
+ textLabel2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, textLabel2->sizePolicy().hasHeightForWidth() ) );
+ QFont textLabel2_font( textLabel2->font() );
+ textLabel2_font.setBold( TRUE );
+ textLabel2->setFont( textLabel2_font );
+
+ layout2->addWidget( textLabel2, 0, 0 );
+
+ textLabel2_2 = new QLabel( this, "textLabel2_2" );
+ textLabel2_2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, textLabel2_2->sizePolicy().hasHeightForWidth() ) );
+
+ layout2->addWidget( textLabel2_2, 0, 1 );
+
+ prefMencoderLayout->addLayout( layout2, 2, 0 );
+
+ tabWidget2 = new QTabWidget( this, "tabWidget2" );
+
+ tab = new QWidget( tabWidget2, "tab" );
+ tabLayout = new QGridLayout( tab, 1, 1, 11, 6, "tabLayout");
+
+ lbvCodecs = new QListBox( tab, "lbvCodecs" );
+
+ tabLayout->addMultiCellWidget( lbvCodecs, 0, 4, 0, 1 );
+
+ btnDeleteV = new KPushButton( tab, "btnDeleteV" );
+ btnDeleteV->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, btnDeleteV->sizePolicy().hasHeightForWidth() ) );
+ btnDeleteV->setProperty( "stdItem", 28 );
+
+ tabLayout->addWidget( btnDeleteV, 5, 1 );
+
+ btnAddV = new KPushButton( tab, "btnAddV" );
+ btnAddV->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, btnAddV->sizePolicy().hasHeightForWidth() ) );
+ btnAddV->setProperty( "stdItem", 27 );
+
+ tabLayout->addWidget( btnAddV, 5, 0 );
+
+ textLabel1_3 = new QLabel( tab, "textLabel1_3" );
+
+ tabLayout->addWidget( textLabel1_3, 0, 2 );
+
+ textLabel2_3 = new QLabel( tab, "textLabel2_3" );
+
+ tabLayout->addWidget( textLabel2_3, 1, 2 );
+
+ textLabel1_2_3 = new QLabel( tab, "textLabel1_2_3" );
+
+ tabLayout->addWidget( textLabel1_2_3, 3, 2 );
+
+ layout9 = new QGridLayout( 0, 1, 1, 0, 6, "layout9");
+
+ teOpt2 = new QTextEdit( tab, "teOpt2" );
+ teOpt2->setEnabled( TRUE );
+
+ layout9->addMultiCellWidget( teOpt2, 0, 1, 0, 0 );
+ spacer5 = new QSpacerItem( 20, 81, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ layout9->addItem( spacer5, 1, 1 );
+
+ btnOpt2 = new KPushButton( tab, "btnOpt2" );
+ btnOpt2->setMinimumSize( QSize( 22, 22 ) );
+ btnOpt2->setMaximumSize( QSize( 22, 22 ) );
+
+ layout9->addWidget( btnOpt2, 0, 1 );
+
+ tabLayout->addLayout( layout9, 3, 3 );
+
+ layout10 = new QGridLayout( 0, 1, 1, 0, 6, "layout10");
+
+ teOpt3 = new QTextEdit( tab, "teOpt3" );
+ teOpt3->setEnabled( TRUE );
+
+ layout10->addMultiCellWidget( teOpt3, 0, 1, 0, 0 );
+
+ btnOpt3 = new KPushButton( tab, "btnOpt3" );
+ btnOpt3->setMinimumSize( QSize( 22, 22 ) );
+ btnOpt3->setMaximumSize( QSize( 22, 22 ) );
+
+ layout10->addWidget( btnOpt3, 0, 1 );
+ spacer6 = new QSpacerItem( 20, 60, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ layout10->addItem( spacer6, 1, 1 );
+
+ tabLayout->addMultiCellLayout( layout10, 4, 5, 3, 3 );
+
+ textLabel1_2 = new QLabel( tab, "textLabel1_2" );
+
+ tabLayout->addWidget( textLabel1_2, 2, 2 );
+
+ layout8 = new QGridLayout( 0, 1, 1, 0, 6, "layout8");
+ spacer4 = new QSpacerItem( 20, 90, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ layout8->addItem( spacer4, 1, 1 );
+
+ teOpt1 = new QTextEdit( tab, "teOpt1" );
+ teOpt1->setEnabled( TRUE );
+ teOpt1->setWordWrap( QTextEdit::WidgetWidth );
+
+ layout8->addMultiCellWidget( teOpt1, 0, 1, 0, 0 );
+
+ btnOpt1 = new KPushButton( tab, "btnOpt1" );
+ btnOpt1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, btnOpt1->sizePolicy().hasHeightForWidth() ) );
+ btnOpt1->setMinimumSize( QSize( 22, 22 ) );
+ btnOpt1->setMaximumSize( QSize( 22, 22 ) );
+
+ layout8->addWidget( btnOpt1, 0, 1 );
+
+ tabLayout->addLayout( layout8, 2, 3 );
+
+ textLabel1_2_3_2 = new QLabel( tab, "textLabel1_2_3_2" );
+
+ tabLayout->addMultiCellWidget( textLabel1_2_3_2, 4, 5, 2, 2 );
+
+ leFourcc = new QLineEdit( tab, "leFourcc" );
+
+ tabLayout->addWidget( leFourcc, 1, 3 );
+
+ leVLabel = new QLineEdit( tab, "leVLabel" );
+ leVLabel->setEnabled( TRUE );
+
+ tabLayout->addWidget( leVLabel, 0, 3 );
+ tabWidget2->insertTab( tab, QString::fromLatin1("") );
+
+ tab_2 = new QWidget( tabWidget2, "tab_2" );
+ tabLayout_2 = new QGridLayout( tab_2, 1, 1, 11, 6, "tabLayout_2");
+
+ btnDeleteA = new KPushButton( tab_2, "btnDeleteA" );
+ btnDeleteA->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, btnDeleteA->sizePolicy().hasHeightForWidth() ) );
+ btnDeleteA->setProperty( "stdItem", 28 );
+
+ tabLayout_2->addWidget( btnDeleteA, 2, 1 );
+
+ btnAddA = new KPushButton( tab_2, "btnAddA" );
+ btnAddA->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, btnAddA->sizePolicy().hasHeightForWidth() ) );
+ btnAddA->setProperty( "stdItem", 27 );
+
+ tabLayout_2->addWidget( btnAddA, 2, 0 );
+
+ lbaCodecs = new QListBox( tab_2, "lbaCodecs" );
+
+ tabLayout_2->addMultiCellWidget( lbaCodecs, 0, 1, 0, 1 );
+
+ leALabel = new QLineEdit( tab_2, "leALabel" );
+
+ tabLayout_2->addWidget( leALabel, 0, 3 );
+
+ textLabel3 = new QLabel( tab_2, "textLabel3" );
+
+ tabLayout_2->addWidget( textLabel3, 0, 2 );
+
+ layout11 = new QGridLayout( 0, 1, 1, 0, 6, "layout11");
+
+ teOptA = new QTextEdit( tab_2, "teOptA" );
+
+ layout11->addMultiCellWidget( teOptA, 0, 1, 0, 0 );
+ spacer4_2 = new QSpacerItem( 20, 78, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ layout11->addItem( spacer4_2, 1, 1 );
+
+ btnOptA = new KPushButton( tab_2, "btnOptA" );
+ btnOptA->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)0, 0, 0, btnOptA->sizePolicy().hasHeightForWidth() ) );
+ btnOptA->setMinimumSize( QSize( 22, 22 ) );
+ btnOptA->setMaximumSize( QSize( 22, 22 ) );
+
+ layout11->addWidget( btnOptA, 0, 1 );
+
+ tabLayout_2->addMultiCellLayout( layout11, 1, 2, 3, 3 );
+
+ textLabel1_2_2_2 = new QLabel( tab_2, "textLabel1_2_2_2" );
+ textLabel1_2_2_2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, textLabel1_2_2_2->sizePolicy().hasHeightForWidth() ) );
+
+ tabLayout_2->addMultiCellWidget( textLabel1_2_2_2, 1, 2, 2, 2 );
+ tabWidget2->insertTab( tab_2, QString::fromLatin1("") );
+
+ prefMencoderLayout->addMultiCellWidget( tabWidget2, 0, 0, 0, 2 );
+
+ textLabel1 = new QLabel( this, "textLabel1" );
+ textLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, textLabel1->sizePolicy().hasHeightForWidth() ) );
+ QFont textLabel1_font( textLabel1->font() );
+ textLabel1_font.setBold( TRUE );
+ textLabel1->setFont( textLabel1_font );
+
+ prefMencoderLayout->addWidget( textLabel1, 1, 0 );
+
+ bReset = new KPushButton( this, "bReset" );
+ bReset->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, bReset->sizePolicy().hasHeightForWidth() ) );
+ bReset->setProperty( "stdItem", 21 );
+
+ prefMencoderLayout->addMultiCellWidget( bReset, 1, 2, 2, 2 );
+ spacer5_2 = new QSpacerItem( 121, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ prefMencoderLayout->addItem( spacer5_2, 1, 1 );
+ languageChange();
+ resize( QSize(672, 587).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( lbvCodecs, SIGNAL( currentChanged(QListBoxItem*) ), this, SLOT( lbvCodecsCurrentChanged(QListBoxItem*) ) );
+ connect( teOpt1, SIGNAL( textChanged() ), this, SLOT( teOpt1TextChanged() ) );
+ connect( teOpt2, SIGNAL( textChanged() ), this, SLOT( teOpt2TextChanged() ) );
+ connect( leVLabel, SIGNAL( textChanged(const QString&) ), this, SLOT( leVLabelTextChanged(const QString&) ) );
+ connect( teOpt3, SIGNAL( textChanged() ), this, SLOT( teOpt3TextChanged() ) );
+ connect( lbaCodecs, SIGNAL( currentChanged(QListBoxItem*) ), this, SLOT( lbaCodecsCurrentChanged(QListBoxItem*) ) );
+ connect( teOptA, SIGNAL( textChanged() ), this, SLOT( teOptATextChanged() ) );
+ connect( leALabel, SIGNAL( textChanged(const QString&) ), this, SLOT( leALabelTextChanged(const QString&) ) );
+ connect( btnOpt1, SIGNAL( clicked() ), this, SLOT( btnOpt1Clicked() ) );
+ connect( btnOpt2, SIGNAL( clicked() ), this, SLOT( btnOpt2Clicked() ) );
+ connect( btnOpt3, SIGNAL( clicked() ), this, SLOT( btnOpt3Clicked() ) );
+ connect( btnOptA, SIGNAL( clicked() ), this, SLOT( btnOptAClicked() ) );
+ connect( btnAddA, SIGNAL( clicked() ), this, SLOT( btnAddAClicked() ) );
+ connect( btnAddV, SIGNAL( clicked() ), this, SLOT( btnAddVClicked() ) );
+ connect( btnDeleteA, SIGNAL( clicked() ), this, SLOT( btnDeleteAClicked() ) );
+ connect( btnDeleteV, SIGNAL( clicked() ), this, SLOT( btnDeleteVClicked() ) );
+ connect( leFourcc, SIGNAL( textChanged(const QString&) ), this, SLOT( leFourccTextChanged(const QString&) ) );
+ connect( bReset, SIGNAL( clicked() ), this, SLOT( bResetClicked() ) );
+
+ // tab order
+ setTabOrder( lbvCodecs, leVLabel );
+ setTabOrder( leVLabel, leFourcc );
+ setTabOrder( leFourcc, teOpt1 );
+ setTabOrder( teOpt1, btnOpt1 );
+ setTabOrder( btnOpt1, teOpt2 );
+ setTabOrder( teOpt2, btnOpt2 );
+ setTabOrder( btnOpt2, teOpt3 );
+ setTabOrder( teOpt3, btnOpt3 );
+ setTabOrder( btnOpt3, btnAddV );
+ setTabOrder( btnAddV, btnDeleteV );
+ setTabOrder( btnDeleteV, lbaCodecs );
+ setTabOrder( lbaCodecs, leALabel );
+ setTabOrder( leALabel, teOptA );
+ setTabOrder( teOptA, btnOptA );
+ setTabOrder( btnOptA, btnAddA );
+ setTabOrder( btnAddA, btnDeleteA );
+ setTabOrder( btnDeleteA, tabWidget2 );
+
+ // buddies
+ textLabel1_3->setBuddy( leVLabel );
+ textLabel3->setBuddy( leALabel );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+prefMencoder::~prefMencoder()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void prefMencoder::languageChange()
+{
+ setCaption( tr2i18n( "Form1" ) );
+ textLabel2->setText( tr2i18n( "$PASS\n"
+"$WIDTH\n"
+"$HEIGHT\n"
+"$VIDBR\n"
+"$AUDBR" ) );
+ textLabel2_2->setText( tr2i18n( "pass number\n"
+"video width\n"
+"video height\n"
+"video bitrate\n"
+"audio bitrate" ) );
+ lbvCodecs->clear();
+ lbvCodecs->insertItem( tr2i18n( "XviD" ) );
+ lbvCodecs->insertItem( tr2i18n( "x264" ) );
+ lbvCodecs->insertItem( tr2i18n( "MJPEG" ) );
+ lbvCodecs->insertItem( tr2i18n( "LJPEG" ) );
+ lbvCodecs->insertItem( tr2i18n( "H.261" ) );
+ lbvCodecs->insertItem( tr2i18n( "H.263" ) );
+ lbvCodecs->insertItem( tr2i18n( "MPEG-4 (DivX 4/5)" ) );
+ lbvCodecs->insertItem( tr2i18n( "DivX 3" ) );
+ lbvCodecs->insertItem( tr2i18n( "MS MPEG-4 v2" ) );
+ lbvCodecs->insertItem( tr2i18n( "WMV7" ) );
+ lbvCodecs->insertItem( tr2i18n( "WMV8" ) );
+ lbvCodecs->insertItem( tr2i18n( "RealVideo" ) );
+ lbvCodecs->insertItem( tr2i18n( "MPEG-1" ) );
+ lbvCodecs->insertItem( tr2i18n( "MPEG-2" ) );
+ lbvCodecs->insertItem( tr2i18n( "HuffYUV" ) );
+ lbvCodecs->insertItem( tr2i18n( "ffvHuff" ) );
+ lbvCodecs->insertItem( tr2i18n( "ASUS v1" ) );
+ lbvCodecs->insertItem( tr2i18n( "ASUS v2" ) );
+ btnDeleteV->setAccel( QKeySequence( QString::null ) );
+ textLabel1_3->setText( tr2i18n( "label" ) );
+ textLabel2_3->setText( tr2i18n( "fourcc" ) );
+ textLabel1_2_3->setText( tr2i18n( "first pass" ) );
+ btnOpt2->setText( QString::null );
+ btnOpt3->setText( QString::null );
+ textLabel1_2->setText( tr2i18n( "one pass" ) );
+ teOpt1->setText( QString::null );
+ btnOpt1->setText( QString::null );
+ textLabel1_2_3_2->setText( tr2i18n( "second pass" ) );
+ tabWidget2->changeTab( tab, tr2i18n( "Video codecs" ) );
+ lbaCodecs->clear();
+ lbaCodecs->insertItem( tr2i18n( "New Item" ) );
+ textLabel3->setText( tr2i18n( "label" ) );
+ btnOptA->setText( QString::null );
+ textLabel1_2_2_2->setText( tr2i18n( "options" ) );
+ tabWidget2->changeTab( tab_2, tr2i18n( "Audio codecs" ) );
+ textLabel1->setText( tr2i18n( "Available variables" ) );
+}
+
+void prefMencoder::lbvCodecsCurrentChanged(QListBoxItem*)
+{
+ qWarning( "prefMencoder::lbvCodecsCurrentChanged(QListBoxItem*): Not implemented yet" );
+}
+
+void prefMencoder::teOpt1TextChanged()
+{
+ qWarning( "prefMencoder::teOpt1TextChanged(): Not implemented yet" );
+}
+
+void prefMencoder::teOpt2TextChanged()
+{
+ qWarning( "prefMencoder::teOpt2TextChanged(): Not implemented yet" );
+}
+
+void prefMencoder::leVLabelTextChanged(const QString&)
+{
+ qWarning( "prefMencoder::leVLabelTextChanged(const QString&): Not implemented yet" );
+}
+
+void prefMencoder::teOpt3TextChanged()
+{
+ qWarning( "prefMencoder::teOpt3TextChanged(): Not implemented yet" );
+}
+
+void prefMencoder::lbaCodecsCurrentChanged(QListBoxItem*)
+{
+ qWarning( "prefMencoder::lbaCodecsCurrentChanged(QListBoxItem*): Not implemented yet" );
+}
+
+void prefMencoder::teOptATextChanged()
+{
+ qWarning( "prefMencoder::teOptATextChanged(): Not implemented yet" );
+}
+
+void prefMencoder::leALabelTextChanged(const QString&)
+{
+ qWarning( "prefMencoder::leALabelTextChanged(const QString&): Not implemented yet" );
+}
+
+void prefMencoder::btnOpt1Clicked()
+{
+ qWarning( "prefMencoder::btnOpt1Clicked(): Not implemented yet" );
+}
+
+void prefMencoder::btnOpt2Clicked()
+{
+ qWarning( "prefMencoder::btnOpt2Clicked(): Not implemented yet" );
+}
+
+void prefMencoder::btnOpt3Clicked()
+{
+ qWarning( "prefMencoder::btnOpt3Clicked(): Not implemented yet" );
+}
+
+void prefMencoder::btnOptAClicked()
+{
+ qWarning( "prefMencoder::btnOptAClicked(): Not implemented yet" );
+}
+
+void prefMencoder::btnAddVClicked()
+{
+ qWarning( "prefMencoder::btnAddVClicked(): Not implemented yet" );
+}
+
+void prefMencoder::btnDeleteVClicked()
+{
+ qWarning( "prefMencoder::btnDeleteVClicked(): Not implemented yet" );
+}
+
+void prefMencoder::btnAddAClicked()
+{
+ qWarning( "prefMencoder::btnAddAClicked(): Not implemented yet" );
+}
+
+void prefMencoder::btnDeleteAClicked()
+{
+ qWarning( "prefMencoder::btnDeleteAClicked(): Not implemented yet" );
+}
+
+void prefMencoder::leFourccTextChanged(const QString&)
+{
+ qWarning( "prefMencoder::leFourccTextChanged(const QString&): Not implemented yet" );
+}
+
+void prefMencoder::bResetClicked()
+{
+ qWarning( "prefMencoder::bResetClicked(): Not implemented yet" );
+}
+
+#include "prefMencoder.moc"
diff --git a/src/prefMencoder.ui b/src/prefMencoder.ui
new file mode 100644
index 0000000..e12aec6
--- /dev/null
+++ b/src/prefMencoder.ui
@@ -0,0 +1,825 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>prefMencoder</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>prefMencoder</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>672</width>
+ <height>587</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>layout2</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>$PASS
+$WIDTH
+$HEIGHT
+$VIDBR
+$AUDBR</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>pass number
+video width
+video height
+video bitrate
+audio bitrate</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QTabWidget" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>tabWidget2</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Video codecs</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListBox" row="0" column="0" rowspan="5" colspan="2">
+ <item>
+ <property name="text">
+ <string>XviD</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>x264</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>MJPEG</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>LJPEG</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>H.261</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>H.263</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>MPEG-4 (DivX 4/5)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>DivX 3</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>MS MPEG-4 v2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>WMV7</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>WMV8</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>RealVideo</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>MPEG-1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>MPEG-2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>HuffYUV</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ffvHuff</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ASUS v1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ASUS v2</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>lbvCodecs</cstring>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="5" column="1">
+ <property name="name">
+ <cstring>btnDeleteV</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>28</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="5" column="0">
+ <property name="name">
+ <cstring>btnAddV</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>27</number>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>label</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leVLabel</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>textLabel2_3</cstring>
+ </property>
+ <property name="text">
+ <string>fourcc</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="2">
+ <property name="name">
+ <cstring>textLabel1_2_3</cstring>
+ </property>
+ <property name="text">
+ <string>first pass</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="3" column="3">
+ <property name="name">
+ <cstring>layout9</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTextEdit" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>teOpt2</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer row="1" column="1">
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>81</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>btnOpt2</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget" row="4" column="3" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTextEdit" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>teOpt3</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>btnOpt3</cstring>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <spacer row="1" column="1">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>60</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QLabel" row="2" column="2">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>one pass</string>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="3">
+ <property name="name">
+ <cstring>layout8</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer row="1" column="1">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>90</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QTextEdit" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>teOpt1</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="wordWrap">
+ <enum>WidgetWidth</enum>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>btnOpt1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLabel" row="4" column="2" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>textLabel1_2_3_2</cstring>
+ </property>
+ <property name="text">
+ <string>second pass</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="1" column="3">
+ <property name="name">
+ <cstring>leFourcc</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="3">
+ <property name="name">
+ <cstring>leVLabel</cstring>
+ </property>
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>tab</cstring>
+ </property>
+ <attribute name="title">
+ <string>Audio codecs</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton" row="2" column="1">
+ <property name="name">
+ <cstring>btnDeleteA</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>28</number>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="2" column="0">
+ <property name="name">
+ <cstring>btnAddA</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>27</number>
+ </property>
+ </widget>
+ <widget class="QListBox" row="0" column="0" rowspan="2" colspan="2">
+ <item>
+ <property name="text">
+ <string>New Item</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>lbaCodecs</cstring>
+ </property>
+ </widget>
+ <widget class="QLineEdit" row="0" column="3">
+ <property name="name">
+ <cstring>leALabel</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="2">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>label</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>leALabel</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="1" column="3" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QTextEdit" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>teOptA</cstring>
+ </property>
+ </widget>
+ <spacer row="1" column="1">
+ <property name="name">
+ <cstring>spacer4_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>78</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton" row="0" column="1">
+ <property name="name">
+ <cstring>btnOptA</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>22</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLabel" row="1" column="2" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>textLabel1_2_2_2</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>options</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Available variables</string>
+ </property>
+ </widget>
+ <widget class="KPushButton" row="1" column="2" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>bReset</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="stdItem" stdset="0">
+ <number>21</number>
+ </property>
+ </widget>
+ <spacer row="1" column="1">
+ <property name="name">
+ <cstring>spacer5_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>121</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>lbvCodecs</sender>
+ <signal>currentChanged(QListBoxItem*)</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>lbvCodecsCurrentChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>teOpt1</sender>
+ <signal>textChanged()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>teOpt1TextChanged()</slot>
+ </connection>
+ <connection>
+ <sender>teOpt2</sender>
+ <signal>textChanged()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>teOpt2TextChanged()</slot>
+ </connection>
+ <connection>
+ <sender>leVLabel</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>leVLabelTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>teOpt3</sender>
+ <signal>textChanged()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>teOpt3TextChanged()</slot>
+ </connection>
+ <connection>
+ <sender>lbaCodecs</sender>
+ <signal>currentChanged(QListBoxItem*)</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>lbaCodecsCurrentChanged(QListBoxItem*)</slot>
+ </connection>
+ <connection>
+ <sender>teOptA</sender>
+ <signal>textChanged()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>teOptATextChanged()</slot>
+ </connection>
+ <connection>
+ <sender>leALabel</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>leALabelTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>btnOpt1</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>btnOpt1Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>btnOpt2</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>btnOpt2Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>btnOpt3</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>btnOpt3Clicked()</slot>
+ </connection>
+ <connection>
+ <sender>btnOptA</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>btnOptAClicked()</slot>
+ </connection>
+ <connection>
+ <sender>btnAddA</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>btnAddAClicked()</slot>
+ </connection>
+ <connection>
+ <sender>btnAddV</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>btnAddVClicked()</slot>
+ </connection>
+ <connection>
+ <sender>btnDeleteA</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>btnDeleteAClicked()</slot>
+ </connection>
+ <connection>
+ <sender>btnDeleteV</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>btnDeleteVClicked()</slot>
+ </connection>
+ <connection>
+ <sender>leFourcc</sender>
+ <signal>textChanged(const QString&amp;)</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>leFourccTextChanged(const QString&amp;)</slot>
+ </connection>
+ <connection>
+ <sender>bReset</sender>
+ <signal>clicked()</signal>
+ <receiver>prefMencoder</receiver>
+ <slot>bResetClicked()</slot>
+ </connection>
+</connections>
+<tabstops>
+ <tabstop>lbvCodecs</tabstop>
+ <tabstop>leVLabel</tabstop>
+ <tabstop>leFourcc</tabstop>
+ <tabstop>teOpt1</tabstop>
+ <tabstop>btnOpt1</tabstop>
+ <tabstop>teOpt2</tabstop>
+ <tabstop>btnOpt2</tabstop>
+ <tabstop>teOpt3</tabstop>
+ <tabstop>btnOpt3</tabstop>
+ <tabstop>btnAddV</tabstop>
+ <tabstop>btnDeleteV</tabstop>
+ <tabstop>lbaCodecs</tabstop>
+ <tabstop>leALabel</tabstop>
+ <tabstop>teOptA</tabstop>
+ <tabstop>btnOptA</tabstop>
+ <tabstop>btnAddA</tabstop>
+ <tabstop>btnDeleteA</tabstop>
+ <tabstop>tabWidget2</tabstop>
+</tabstops>
+<slots>
+ <slot>lbvCodecsCurrentChanged(QListBoxItem*)</slot>
+ <slot>teOpt1TextChanged()</slot>
+ <slot>teOpt2TextChanged()</slot>
+ <slot>leVLabelTextChanged(const QString &amp;)</slot>
+ <slot>teOpt3TextChanged()</slot>
+ <slot>lbaCodecsCurrentChanged(QListBoxItem*)</slot>
+ <slot>teOptATextChanged()</slot>
+ <slot>leALabelTextChanged(const QString&amp;)</slot>
+ <slot>btnOpt1Clicked()</slot>
+ <slot>btnOpt2Clicked()</slot>
+ <slot>btnOpt3Clicked()</slot>
+ <slot>btnOptAClicked()</slot>
+ <slot>btnAddVClicked()</slot>
+ <slot>btnDeleteVClicked()</slot>
+ <slot>btnAddAClicked()</slot>
+ <slot>btnDeleteAClicked()</slot>
+ <slot>leFourccTextChanged(const QString&amp;)</slot>
+ <slot>bResetClicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/src/prefpreview.cpp b/src/prefpreview.cpp
new file mode 100644
index 0000000..54a959e
--- /dev/null
+++ b/src/prefpreview.cpp
@@ -0,0 +1,171 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './prefpreview.ui'
+**
+** Created: dim. oct. 26 08:57:36 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "prefpreview.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qbuttongroup.h>
+#include <qradiobutton.h>
+#include <qwidgetstack.h>
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/*
+ * Constructs a prefPreview as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+prefPreview::prefPreview( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ if ( !name )
+ setName( "prefPreview" );
+ prefPreviewLayout = new QGridLayout( this, 1, 1, 11, 6, "prefPreviewLayout");
+
+ buttonGroup1 = new QButtonGroup( this, "buttonGroup1" );
+ buttonGroup1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, buttonGroup1->sizePolicy().hasHeightForWidth() ) );
+ buttonGroup1->setFrameShape( QButtonGroup::NoFrame );
+ buttonGroup1->setColumnLayout(0, Qt::Vertical );
+ buttonGroup1->layout()->setSpacing( 6 );
+ buttonGroup1->layout()->setMargin( 11 );
+ buttonGroup1Layout = new QGridLayout( buttonGroup1->layout() );
+ buttonGroup1Layout->setAlignment( Qt::AlignTop );
+
+ rbInternal = new QRadioButton( buttonGroup1, "rbInternal" );
+
+ buttonGroup1Layout->addWidget( rbInternal, 0, 0 );
+
+ rbMplayer = new QRadioButton( buttonGroup1, "rbMplayer" );
+
+ buttonGroup1Layout->addWidget( rbMplayer, 1, 0 );
+
+ prefPreviewLayout->addWidget( buttonGroup1, 0, 0 );
+ spacer5 = new QSpacerItem( 21, 210, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ prefPreviewLayout->addItem( spacer5, 2, 0 );
+
+ wsOptions = new QWidgetStack( this, "wsOptions" );
+ wsOptions->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, 0, 0, wsOptions->sizePolicy().hasHeightForWidth() ) );
+ wsOptions->setFrameShape( QWidgetStack::NoFrame );
+ wsOptions->setFrameShadow( QWidgetStack::Sunken );
+ wsOptions->setLineWidth( 1 );
+ wsOptions->setMidLineWidth( 0 );
+
+ wspInternal = new QWidget( wsOptions, "wspInternal" );
+ wspInternalLayout = new QGridLayout( wspInternal, 1, 1, 11, 6, "wspInternalLayout");
+
+ textLabel1 = new QLabel( wspInternal, "textLabel1" );
+ QFont textLabel1_font( textLabel1->font() );
+ textLabel1_font.setBold( TRUE );
+ textLabel1->setFont( textLabel1_font );
+
+ wspInternalLayout->addWidget( textLabel1, 0, 0 );
+
+ ckUseGL = new QCheckBox( wspInternal, "ckUseGL" );
+
+ wspInternalLayout->addWidget( ckUseGL, 1, 0 );
+ spacer1 = new QSpacerItem( 21, 30, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ wspInternalLayout->addItem( spacer1, 2, 0 );
+ wsOptions->addWidget( wspInternal, 0 );
+
+ wspMplayer = new QWidget( wsOptions, "wspMplayer" );
+ wspMplayerLayout = new QGridLayout( wspMplayer, 1, 1, 11, 6, "wspMplayerLayout");
+
+ textLabel3 = new QLabel( wspMplayer, "textLabel3" );
+
+ wspMplayerLayout->addWidget( textLabel3, 1, 0 );
+
+ textLabel4 = new QLabel( wspMplayer, "textLabel4" );
+ textLabel4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, 0, 0, textLabel4->sizePolicy().hasHeightForWidth() ) );
+
+ wspMplayerLayout->addWidget( textLabel4, 2, 0 );
+
+ cbVout = new QComboBox( FALSE, wspMplayer, "cbVout" );
+
+ wspMplayerLayout->addWidget( cbVout, 1, 1 );
+
+ cbAout = new QComboBox( FALSE, wspMplayer, "cbAout" );
+ cbAout->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, cbAout->sizePolicy().hasHeightForWidth() ) );
+
+ wspMplayerLayout->addWidget( cbAout, 2, 1 );
+ spacer3 = new QSpacerItem( 81, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ wspMplayerLayout->addItem( spacer3, 1, 2 );
+ spacer6 = new QSpacerItem( 20, 21, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ wspMplayerLayout->addItem( spacer6, 3, 1 );
+
+ textLabel2 = new QLabel( wspMplayer, "textLabel2" );
+ QFont textLabel2_font( textLabel2->font() );
+ textLabel2_font.setBold( TRUE );
+ textLabel2->setFont( textLabel2_font );
+
+ wspMplayerLayout->addMultiCellWidget( textLabel2, 0, 0, 0, 2 );
+ wsOptions->addWidget( wspMplayer, 1 );
+
+ prefPreviewLayout->addWidget( wsOptions, 1, 0 );
+ spacer4 = new QSpacerItem( 230, 21, QSizePolicy::Expanding, QSizePolicy::Minimum );
+ prefPreviewLayout->addItem( spacer4, 0, 1 );
+ languageChange();
+ resize( QSize(536, 470).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( rbInternal, SIGNAL( clicked() ), this, SLOT( rbInternalClick() ) );
+ connect( rbMplayer, SIGNAL( clicked() ), this, SLOT( rbMplayerClick() ) );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+prefPreview::~prefPreview()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void prefPreview::languageChange()
+{
+ setCaption( tr2i18n( "Form1" ) );
+ buttonGroup1->setTitle( QString::null );
+ rbInternal->setText( tr2i18n( "&Internal Player" ) );
+ rbInternal->setAccel( QKeySequence( tr2i18n( "Alt+I" ) ) );
+ rbMplayer->setText( tr2i18n( "MPlayer" ) );
+ rbMplayer->setAccel( QKeySequence( tr2i18n( "Alt+M" ) ) );
+ textLabel1->setText( tr2i18n( "Internal viewer options" ) );
+ ckUseGL->setText( tr2i18n( "use OpenGL" ) );
+ textLabel3->setText( tr2i18n( "Video output" ) );
+ textLabel4->setText( tr2i18n( "Audio output" ) );
+ cbVout->clear();
+ cbVout->insertItem( tr2i18n( "X11" ) );
+ cbVout->insertItem( tr2i18n( "Xv" ) );
+ cbVout->insertItem( tr2i18n( "OpenGL" ) );
+ cbVout->insertItem( tr2i18n( "SDL" ) );
+ cbAout->clear();
+ cbAout->insertItem( tr2i18n( "ALSA" ) );
+ cbAout->insertItem( tr2i18n( "OSS" ) );
+ cbAout->insertItem( tr2i18n( "SDL" ) );
+ textLabel2->setText( tr2i18n( "MPlayer options" ) );
+}
+
+void prefPreview::rbInternalClick()
+{
+ qWarning( "prefPreview::rbInternalClick(): Not implemented yet" );
+}
+
+void prefPreview::rbMplayerClick()
+{
+ qWarning( "prefPreview::rbMplayerClick(): Not implemented yet" );
+}
+
+#include "prefpreview.moc"
diff --git a/src/prefpreview.ui b/src/prefpreview.ui
new file mode 100644
index 0000000..901b1ce
--- /dev/null
+++ b/src/prefpreview.ui
@@ -0,0 +1,336 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>prefPreview</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>prefPreview</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>536</width>
+ <height>470</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QButtonGroup" row="0" column="0">
+ <property name="name">
+ <cstring>buttonGroup1</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="title">
+ <string></string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton" row="0" column="0">
+ <property name="name">
+ <cstring>rbInternal</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Internal Player</string>
+ </property>
+ <property name="accel">
+ <string>Alt+I</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton" row="1" column="0">
+ <property name="name">
+ <cstring>rbMplayer</cstring>
+ </property>
+ <property name="text">
+ <string>MPlayer</string>
+ </property>
+ <property name="accel">
+ <string>Alt+M</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>210</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QWidgetStack" row="1" column="0">
+ <property name="name">
+ <cstring>wsOptions</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>NoFrame</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="lineWidth">
+ <number>1</number>
+ </property>
+ <property name="midLineWidth">
+ <number>0</number>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>wspInternal</cstring>
+ </property>
+ <attribute name="id">
+ <number>0</number>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Internal viewer options</string>
+ </property>
+ </widget>
+ <widget class="QCheckBox" row="1" column="0">
+ <property name="name">
+ <cstring>ckUseGL</cstring>
+ </property>
+ <property name="text">
+ <string>use OpenGL</string>
+ </property>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>21</width>
+ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>wspMplayer</cstring>
+ </property>
+ <attribute name="id">
+ <number>1</number>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>Video output</string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="2" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Audio output</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>X11</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Xv</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>OpenGL</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>SDL</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cbVout</cstring>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>ALSA</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>OSS</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>SDL</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>cbAout</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <spacer row="1" column="2">
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>81</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="3" column="1">
+ <property name="name">
+ <cstring>spacer6</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel" row="0" column="0" rowspan="1" colspan="3">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>MPlayer options</string>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ <spacer row="0" column="1">
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>230</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<connections>
+ <connection>
+ <sender>rbInternal</sender>
+ <signal>clicked()</signal>
+ <receiver>prefPreview</receiver>
+ <slot>rbInternalClick()</slot>
+ </connection>
+ <connection>
+ <sender>rbMplayer</sender>
+ <signal>clicked()</signal>
+ <receiver>prefPreview</receiver>
+ <slot>rbMplayerClick()</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>rbInternalClick()</slot>
+ <slot>rbMplayerClick()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/titlefactor.cpp b/src/titlefactor.cpp
new file mode 100644
index 0000000..e09fe73
--- /dev/null
+++ b/src/titlefactor.cpp
@@ -0,0 +1,346 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './titlefactor.ui'
+**
+** Created: dim. oct. 26 08:57:36 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "titlefactor.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qlabel.h>
+#include <qgroupbox.h>
+#include <qslider.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qimage.h>
+#include <qpixmap.h>
+
+static const unsigned char img0_titlefactor[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x1e, 0x3f, 0x88, 0xb1, 0x00, 0x00, 0x09,
+ 0xf8, 0x49, 0x44, 0x41, 0x54, 0x68, 0x81, 0xed, 0x99, 0x6b, 0x6c, 0x5b,
+ 0xe5, 0x19, 0xc7, 0x7f, 0xc7, 0x3e, 0x3e, 0xc7, 0xd7, 0xc4, 0xa9, 0xe3,
+ 0xa4, 0x71, 0x12, 0xc7, 0xad, 0xd3, 0x92, 0x26, 0xbd, 0x37, 0x30, 0xae,
+ 0x03, 0x0a, 0x12, 0x9b, 0x36, 0x6d, 0xd0, 0xc2, 0x2e, 0x6c, 0xc0, 0x24,
+ 0x18, 0x7c, 0x18, 0x1a, 0xac, 0x50, 0x86, 0x00, 0xa1, 0x6e, 0xdc, 0x2a,
+ 0xca, 0x2a, 0x90, 0x46, 0x05, 0x6c, 0x42, 0x65, 0x83, 0x69, 0x08, 0x0a,
+ 0x13, 0x13, 0x12, 0x63, 0xac, 0x2d, 0x2d, 0x74, 0xd0, 0x06, 0xda, 0xd0,
+ 0x06, 0x92, 0x94, 0x84, 0x38, 0x4d, 0x9c, 0x38, 0x89, 0x13, 0xc7, 0xf7,
+ 0xcb, 0xf1, 0x79, 0xf7, 0xa1, 0x69, 0xa0, 0x6b, 0x1d, 0x9b, 0x11, 0xb1,
+ 0x72, 0xf9, 0x7f, 0x3b, 0x3e, 0xc7, 0xcf, 0xfb, 0xfc, 0xde, 0xf7, 0x3c,
+ 0x97, 0xf7, 0x3d, 0xd2, 0x8d, 0x6f, 0xf5, 0xf2, 0x65, 0x90, 0xe1, 0xff,
+ 0xed, 0xc0, 0x6c, 0xe9, 0x6b, 0x90, 0x53, 0x4d, 0x5f, 0x83, 0x9c, 0x6a,
+ 0x9a, 0x11, 0xe4, 0x06, 0xa7, 0x2a, 0xee, 0x69, 0xaa, 0x16, 0x9f, 0x97,
+ 0x33, 0x33, 0xe9, 0x87, 0x06, 0x7d, 0x46, 0x3f, 0x0a, 0x82, 0x6c, 0x5a,
+ 0x5e, 0x27, 0x6e, 0x7f, 0xe0, 0x6f, 0xac, 0xb9, 0xe1, 0x09, 0x1a, 0xda,
+ 0x7b, 0xc4, 0x4d, 0xd5, 0xf6, 0xcf, 0x1d, 0x68, 0xf3, 0x2a, 0xaf, 0x58,
+ 0x3d, 0x31, 0x29, 0x8e, 0xfc, 0xe1, 0x1f, 0xe2, 0xce, 0x07, 0x5f, 0xa2,
+ 0xa9, 0xb3, 0xbf, 0xa0, 0x0f, 0x72, 0xa1, 0x1b, 0x8a, 0x22, 0xb3, 0xac,
+ 0xb9, 0x8e, 0x97, 0xb7, 0x1f, 0xe4, 0x4f, 0xcf, 0xbd, 0xc5, 0xf3, 0x2f,
+ 0xbf, 0x4b, 0x99, 0xdd, 0x22, 0x56, 0x2d, 0xf5, 0xd2, 0xdc, 0x38, 0x97,
+ 0x15, 0x8b, 0xeb, 0x71, 0xcf, 0xb1, 0x73, 0x6f, 0x6f, 0x58, 0x9a, 0x2d,
+ 0xa7, 0x7b, 0x02, 0xa3, 0x0c, 0x85, 0xa2, 0x74, 0x74, 0x07, 0xd9, 0xd7,
+ 0x1e, 0xe0, 0xe2, 0x87, 0xc6, 0x99, 0x8c, 0x25, 0xd1, 0x34, 0x1d, 0xbb,
+ 0x4d, 0xe5, 0xd2, 0x4b, 0x96, 0xb1, 0x31, 0x30, 0x71, 0xd2, 0xff, 0x4b,
+ 0x33, 0x15, 0xc4, 0xbb, 0xe6, 0xbb, 0xc4, 0xa5, 0x3f, 0x7f, 0x9c, 0x15,
+ 0x2d, 0xf5, 0xf8, 0xea, 0x5d, 0x7c, 0x70, 0x78, 0x88, 0x0f, 0x0e, 0xf4,
+ 0x11, 0x97, 0x24, 0x54, 0x45, 0x46, 0x55, 0x65, 0xcc, 0xaa, 0x09, 0xb3,
+ 0x6a, 0x62, 0xc1, 0xbc, 0x2a, 0xca, 0xec, 0x66, 0xb2, 0x59, 0x0d, 0x4f,
+ 0x75, 0x39, 0xde, 0xda, 0x39, 0x18, 0x8d, 0xc7, 0x2f, 0xb8, 0xc1, 0x20,
+ 0x31, 0x36, 0x9e, 0xa0, 0xb7, 0x7f, 0x8c, 0x9c, 0x96, 0x07, 0x20, 0x38,
+ 0x1c, 0x61, 0x70, 0x38, 0x42, 0x4e, 0xd3, 0x89, 0x27, 0x33, 0xe4, 0xb2,
+ 0x1a, 0x52, 0x26, 0x87, 0xc7, 0xe7, 0x66, 0x79, 0x4b, 0x3d, 0xe5, 0x0e,
+ 0x33, 0x4f, 0xbf, 0xb0, 0x97, 0x2b, 0xbe, 0xb3, 0x92, 0xb1, 0xb3, 0x9b,
+ 0x0b, 0x4e, 0x5a, 0xc1, 0x15, 0x01, 0xb8, 0xb7, 0x37, 0x2c, 0x35, 0xf9,
+ 0xab, 0xc5, 0x91, 0xe0, 0x04, 0x37, 0x5f, 0xbb, 0x9a, 0x6b, 0xd6, 0x7e,
+ 0x83, 0xa8, 0x2c, 0x33, 0xd1, 0x3b, 0x4c, 0x70, 0x68, 0x82, 0xee, 0x81,
+ 0x71, 0xc2, 0xe3, 0x71, 0x22, 0xd1, 0x14, 0xc1, 0xde, 0x61, 0xfa, 0x35,
+ 0x1d, 0x61, 0x55, 0xd9, 0xdf, 0x31, 0xc0, 0x48, 0x38, 0x8a, 0xa6, 0xe9,
+ 0x27, 0xd8, 0x74, 0xd8, 0xcd, 0x78, 0xaa, 0xcb, 0xd1, 0x63, 0x29, 0xb4,
+ 0xbc, 0x8e, 0xd5, 0xe5, 0x60, 0xe5, 0x12, 0x2f, 0xaa, 0x22, 0x73, 0x5a,
+ 0xbd, 0x8b, 0x3a, 0x4f, 0x05, 0xae, 0x45, 0xf5, 0x38, 0xb3, 0x39, 0xcc,
+ 0xaa, 0xcc, 0xab, 0xbb, 0x3b, 0x91, 0x65, 0x03, 0x17, 0x9d, 0xdb, 0xc4,
+ 0xb3, 0x27, 0x9a, 0x2b, 0x0d, 0x04, 0xa0, 0x75, 0x69, 0x03, 0x8f, 0x3f,
+ 0xbd, 0x9b, 0x5c, 0x36, 0xc7, 0xbd, 0xbd, 0x89, 0xa9, 0x19, 0x91, 0xc0,
+ 0x3d, 0x87, 0xfb, 0x2f, 0x68, 0x11, 0x9a, 0x96, 0x47, 0xd3, 0x74, 0x92,
+ 0x8a, 0x4c, 0x36, 0x2f, 0x30, 0x25, 0x52, 0x68, 0x9a, 0x4e, 0x3a, 0x93,
+ 0x23, 0xaf, 0x0b, 0x3e, 0x39, 0x85, 0x02, 0x50, 0x4c, 0x46, 0xac, 0x16,
+ 0x85, 0xac, 0xd5, 0x8c, 0x41, 0x02, 0x35, 0x95, 0xc1, 0x66, 0x51, 0x30,
+ 0x48, 0x12, 0x56, 0x87, 0x85, 0x75, 0xfb, 0xfa, 0x24, 0x7a, 0x46, 0x01,
+ 0xb8, 0xbf, 0xa5, 0x46, 0x1c, 0xec, 0x1c, 0xc4, 0x6a, 0x51, 0x68, 0x5d,
+ 0xea, 0xe5, 0xd9, 0x03, 0x03, 0xff, 0x3b, 0xc8, 0xca, 0xc5, 0x5e, 0x0c,
+ 0x46, 0x89, 0xde, 0x8f, 0x46, 0x60, 0x8e, 0x93, 0xf1, 0x5c, 0x5e, 0xf4,
+ 0x25, 0xb2, 0x3c, 0x7d, 0x8e, 0x9f, 0x3b, 0x3a, 0x82, 0xd3, 0x7e, 0x6e,
+ 0x5c, 0xd5, 0x20, 0x14, 0x83, 0xc4, 0xba, 0xee, 0x50, 0x09, 0x31, 0x93,
+ 0xe2, 0x77, 0xa7, 0x57, 0x88, 0x9c, 0x2e, 0xb8, 0xbd, 0xeb, 0xe3, 0xe7,
+ 0xd7, 0x2f, 0xf6, 0x88, 0x77, 0x23, 0x29, 0xe1, 0xb3, 0x29, 0xcc, 0x31,
+ 0x19, 0xa5, 0xc8, 0x64, 0x92, 0x8e, 0xae, 0x21, 0x96, 0x37, 0xd7, 0xb3,
+ 0xfe, 0xc0, 0xc0, 0x8c, 0x76, 0x8b, 0xd6, 0x91, 0x96, 0x85, 0x35, 0x38,
+ 0x6c, 0x66, 0x0e, 0xbc, 0x17, 0xe0, 0xa1, 0xd6, 0x06, 0x71, 0x51, 0x4d,
+ 0x39, 0x7b, 0x86, 0x27, 0xb9, 0x6c, 0x47, 0x17, 0xeb, 0x5a, 0x3c, 0x02,
+ 0xe0, 0xbe, 0x95, 0x5e, 0xf1, 0xcc, 0x47, 0x63, 0xbc, 0x37, 0x91, 0x2c,
+ 0xce, 0x30, 0xa5, 0xc3, 0xd1, 0x14, 0x2f, 0xf6, 0x87, 0xb9, 0x67, 0x85,
+ 0x57, 0x00, 0xac, 0x6b, 0xf1, 0x88, 0xef, 0x6d, 0xef, 0x62, 0xcf, 0xf0,
+ 0x24, 0xe7, 0x57, 0x97, 0x01, 0x90, 0xc9, 0xe4, 0x38, 0x32, 0x34, 0xce,
+ 0xd2, 0x45, 0xb5, 0x45, 0xed, 0x15, 0x05, 0xb9, 0xf3, 0xfd, 0x21, 0xc9,
+ 0x60, 0x30, 0xd0, 0x3b, 0x1c, 0x21, 0x1a, 0x4b, 0x71, 0xa5, 0xcf, 0xc5,
+ 0x96, 0xb3, 0xfc, 0xb4, 0x8f, 0x27, 0xb8, 0x74, 0x7b, 0x27, 0x1b, 0x96,
+ 0xd7, 0x8b, 0x57, 0x06, 0x23, 0x3c, 0xd9, 0x1d, 0x62, 0x22, 0xab, 0x95,
+ 0x0c, 0x12, 0x4a, 0xe5, 0xd8, 0xd2, 0x15, 0xe2, 0xd5, 0x60, 0x84, 0x0d,
+ 0xcb, 0xeb, 0xc5, 0xa5, 0xdb, 0x3b, 0x69, 0x1f, 0x4f, 0xb0, 0xe5, 0x2c,
+ 0x3f, 0x57, 0xcd, 0xaf, 0x04, 0x60, 0x64, 0x3c, 0x8e, 0xa6, 0xe9, 0x78,
+ 0xaa, 0xcb, 0x3f, 0x3b, 0x08, 0xc0, 0x92, 0x26, 0x0f, 0x91, 0x78, 0x86,
+ 0x54, 0x2c, 0xc5, 0xfa, 0xb6, 0x80, 0x74, 0x6d, 0xa3, 0x9b, 0x47, 0xcf,
+ 0x9c, 0x47, 0x57, 0x34, 0xcd, 0x75, 0x7b, 0x7a, 0x78, 0xf0, 0xd0, 0x20,
+ 0xef, 0x84, 0x13, 0x4c, 0x7e, 0x0a, 0x90, 0x98, 0x96, 0x67, 0xdf, 0x68,
+ 0x9c, 0x7b, 0xda, 0x07, 0xb8, 0x72, 0x57, 0x37, 0xdd, 0xd1, 0x34, 0x5b,
+ 0xce, 0xf2, 0x73, 0x6d, 0xa3, 0x9b, 0xdb, 0xda, 0x02, 0xd2, 0xc3, 0xad,
+ 0x0d, 0x62, 0x78, 0x34, 0x8a, 0xaa, 0xc8, 0x34, 0xfa, 0xdc, 0xb3, 0x03,
+ 0xe2, 0xb0, 0x9b, 0x49, 0x24, 0xb3, 0xe4, 0xa7, 0xca, 0xd1, 0x2d, 0xfb,
+ 0xfa, 0xa4, 0x0f, 0x22, 0x29, 0xe9, 0xb6, 0xc5, 0x1e, 0x5e, 0x0b, 0x4e,
+ 0xf2, 0x4e, 0x38, 0x81, 0x26, 0x04, 0xed, 0x13, 0x49, 0x36, 0xb5, 0x36,
+ 0x14, 0x2d, 0x9c, 0x0f, 0x9f, 0xe1, 0x13, 0x1f, 0x44, 0x52, 0x68, 0x42,
+ 0x70, 0x28, 0x92, 0xe4, 0xf5, 0x50, 0x8c, 0xf5, 0x8b, 0x3d, 0xbc, 0x3f,
+ 0x91, 0x90, 0x6e, 0xd9, 0xd7, 0x27, 0x01, 0x64, 0x73, 0x79, 0x86, 0x46,
+ 0xa2, 0x98, 0x4c, 0x46, 0xdc, 0x15, 0xf6, 0xd9, 0x01, 0x39, 0x6d, 0x7e,
+ 0x35, 0xe1, 0x48, 0x82, 0x74, 0x22, 0x03, 0xc0, 0x8d, 0x8b, 0x6a, 0x84,
+ 0xdd, 0x64, 0x14, 0xdb, 0x02, 0x61, 0xe2, 0x53, 0xf5, 0x00, 0x60, 0xd7,
+ 0x70, 0x94, 0xbe, 0x78, 0xa6, 0xa8, 0xbd, 0x81, 0x44, 0x96, 0x3d, 0xa3,
+ 0xf1, 0xe9, 0xeb, 0x4c, 0x5e, 0x67, 0x5b, 0x20, 0x8c, 0xdd, 0x64, 0x14,
+ 0x37, 0x2e, 0xaa, 0x11, 0x70, 0x34, 0x3e, 0x06, 0x86, 0x23, 0x58, 0x2d,
+ 0x0a, 0x4e, 0xa7, 0x75, 0x76, 0x40, 0xdc, 0x2e, 0x3b, 0x5a, 0x2c, 0x45,
+ 0xd2, 0x6e, 0x06, 0x60, 0x34, 0x9d, 0x23, 0x93, 0xd7, 0x71, 0xc8, 0x46,
+ 0xac, 0xf2, 0xc7, 0x26, 0xde, 0x1e, 0x8b, 0xd3, 0x1b, 0x4b, 0x17, 0xb5,
+ 0xd7, 0x19, 0x4d, 0xb1, 0x63, 0x68, 0x72, 0xfa, 0xda, 0x2a, 0x1b, 0x70,
+ 0xc8, 0x46, 0x32, 0x79, 0x9d, 0xd1, 0x4c, 0x8e, 0x47, 0xce, 0xf0, 0x09,
+ 0x21, 0x04, 0xd9, 0xa9, 0x57, 0x75, 0xdd, 0x3b, 0xfd, 0x45, 0x33, 0x61,
+ 0xd1, 0xf4, 0x0b, 0x90, 0x4e, 0xe7, 0x00, 0x30, 0x4f, 0x5d, 0xb7, 0x38,
+ 0x2d, 0x2c, 0x70, 0xd4, 0x32, 0x96, 0xc9, 0xd1, 0x9f, 0xc8, 0x72, 0x38,
+ 0x9a, 0x66, 0xf7, 0x48, 0x94, 0xe7, 0xfb, 0xc2, 0x3c, 0x17, 0x08, 0xf3,
+ 0x50, 0xab, 0x4f, 0x6c, 0x38, 0x70, 0xe4, 0xa4, 0x83, 0x6f, 0x58, 0x5e,
+ 0x2f, 0x6e, 0x6d, 0xeb, 0x23, 0xae, 0xe5, 0xb9, 0xdc, 0xe7, 0xe2, 0xbc,
+ 0xaa, 0x32, 0x16, 0x94, 0x99, 0xf1, 0xda, 0x14, 0x2a, 0x55, 0x13, 0x8a,
+ 0x51, 0xe2, 0xa6, 0xbd, 0x7d, 0xd2, 0xdd, 0x8d, 0x95, 0x22, 0x95, 0xce,
+ 0x51, 0x51, 0x5e, 0x7c, 0x35, 0x4a, 0x06, 0xf1, 0x37, 0xb8, 0x91, 0x1d,
+ 0x16, 0xfa, 0x3a, 0x07, 0xd9, 0x7c, 0x61, 0x8b, 0x38, 0xd9, 0x0c, 0x6d,
+ 0x6e, 0xf5, 0x89, 0x2b, 0x1a, 0x5c, 0xe8, 0x42, 0x90, 0xd5, 0x0b, 0x97,
+ 0xe0, 0xac, 0xae, 0x73, 0x89, 0xc7, 0xc9, 0xb7, 0x6b, 0x2b, 0x38, 0xcb,
+ 0xed, 0xe0, 0xc1, 0x43, 0x83, 0xd2, 0xe1, 0x68, 0xea, 0x84, 0xe7, 0xd2,
+ 0x19, 0x8d, 0xd0, 0x58, 0x14, 0x5f, 0x9d, 0x8b, 0xec, 0x6c, 0x81, 0x54,
+ 0xbb, 0x1d, 0x28, 0x26, 0x23, 0xc3, 0xe1, 0x38, 0xf9, 0xfc, 0xc9, 0x9d,
+ 0x7c, 0xf0, 0xd0, 0xe0, 0x34, 0xdc, 0x9a, 0x06, 0x57, 0xc1, 0x80, 0x77,
+ 0xa9, 0x26, 0xde, 0x1c, 0x89, 0x49, 0x00, 0xbb, 0x43, 0xd1, 0x82, 0x63,
+ 0xe6, 0xf3, 0x3a, 0x99, 0x8c, 0x76, 0xb4, 0x0b, 0x28, 0xc1, 0xc7, 0x92,
+ 0x62, 0x44, 0xd3, 0x74, 0x84, 0x10, 0xc8, 0xb2, 0x01, 0x49, 0x2a, 0x5e,
+ 0xb8, 0x8f, 0x65, 0x9e, 0x4f, 0x7b, 0xef, 0xbf, 0x25, 0x49, 0x12, 0xfa,
+ 0xcc, 0xdb, 0x90, 0x69, 0x7d, 0x35, 0x76, 0x88, 0x5f, 0x24, 0x7d, 0x0d,
+ 0x72, 0xaa, 0xa9, 0x24, 0x90, 0x63, 0xf1, 0x2d, 0x4e, 0x89, 0x63, 0x88,
+ 0x93, 0xab, 0xa4, 0xf4, 0xab, 0x4d, 0xa5, 0x5c, 0x93, 0xc9, 0x88, 0xc1,
+ 0x50, 0x38, 0xe9, 0xfc, 0xd4, 0xef, 0x16, 0xb1, 0x5c, 0x9e, 0x65, 0x15,
+ 0x56, 0x7e, 0xdb, 0x7e, 0xf2, 0xfd, 0xc3, 0xdd, 0xcb, 0xea, 0x44, 0xfb,
+ 0x44, 0x12, 0x87, 0xc9, 0xc8, 0xd3, 0x3d, 0xa3, 0x33, 0x66, 0x30, 0x21,
+ 0xc4, 0x09, 0xdb, 0xe5, 0x42, 0x2a, 0x09, 0x64, 0x28, 0x14, 0x25, 0x9d,
+ 0xc9, 0x51, 0xeb, 0xb2, 0x1f, 0xd7, 0x2e, 0xdc, 0xbb, 0xc2, 0x2b, 0x06,
+ 0x92, 0x19, 0x3a, 0x27, 0x53, 0xb4, 0x4f, 0x24, 0xb9, 0xee, 0xcd, 0x1e,
+ 0x5a, 0x2b, 0x6d, 0x2c, 0x5c, 0x5e, 0x5f, 0xd0, 0x56, 0x2a, 0xaf, 0xf3,
+ 0x4c, 0xef, 0x28, 0x6d, 0x63, 0x09, 0x2e, 0x6b, 0x98, 0x23, 0x96, 0x55,
+ 0x58, 0x69, 0x2a, 0xb7, 0x50, 0x67, 0x55, 0xb9, 0x6b, 0xff, 0xc7, 0xb6,
+ 0x8d, 0x46, 0x03, 0xaa, 0x2a, 0x33, 0x1e, 0x49, 0x50, 0x4a, 0xbe, 0x2e,
+ 0x09, 0x24, 0x34, 0x16, 0x45, 0x24, 0xb3, 0x54, 0xd6, 0x57, 0x42, 0x28,
+ 0xce, 0xcf, 0x1a, 0xab, 0xc4, 0xbf, 0x86, 0x26, 0x59, 0xd7, 0xd6, 0x47,
+ 0xf7, 0x64, 0x8a, 0x3d, 0xa3, 0x31, 0x8e, 0xa5, 0xfb, 0xdb, 0x97, 0xd4,
+ 0xb2, 0xe9, 0x50, 0xb0, 0xe0, 0xd8, 0x9b, 0x0e, 0x05, 0xa5, 0x4b, 0x3c,
+ 0x4e, 0xb1, 0xf5, 0xc3, 0x51, 0x0e, 0x45, 0x92, 0x18, 0x24, 0x38, 0xdb,
+ 0xed, 0x60, 0x61, 0xb9, 0x85, 0xa6, 0x72, 0xab, 0x58, 0x3d, 0xb7, 0x8c,
+ 0xad, 0x1f, 0x8e, 0x48, 0x66, 0x55, 0xa6, 0xb2, 0xc2, 0x4e, 0x6f, 0xff,
+ 0x18, 0xfe, 0xd9, 0x02, 0x39, 0xa6, 0xcc, 0xd4, 0x32, 0xf7, 0xc4, 0xd2,
+ 0xec, 0x0a, 0x45, 0x69, 0x0b, 0xc7, 0x09, 0xa5, 0x72, 0xd3, 0xf7, 0x57,
+ 0xb9, 0x6c, 0x2c, 0xa9, 0xb0, 0xf2, 0xd6, 0x68, 0x6c, 0x46, 0x3b, 0x2b,
+ 0x5c, 0x76, 0x2e, 0x98, 0x5b, 0xc6, 0xce, 0xe1, 0x28, 0xba, 0x80, 0x37,
+ 0x46, 0x62, 0x1c, 0x8e, 0xa5, 0x19, 0x4d, 0x6b, 0xf8, 0xec, 0x2a, 0x00,
+ 0x26, 0xd9, 0x88, 0xdd, 0xa6, 0x4e, 0x37, 0x8e, 0xc5, 0x54, 0xd2, 0x0b,
+ 0x38, 0x34, 0x32, 0x89, 0xec, 0xb0, 0x60, 0x8d, 0x1f, 0xed, 0x6c, 0x77,
+ 0x87, 0xa2, 0xd2, 0x3c, 0xbb, 0x2a, 0x5d, 0xe3, 0x77, 0x1f, 0xb7, 0xec,
+ 0xdf, 0xac, 0x2e, 0x63, 0xde, 0x94, 0x23, 0x33, 0xa9, 0xc1, 0xa6, 0x70,
+ 0xa6, 0xdb, 0x71, 0xdc, 0x6f, 0xd7, 0xf8, 0xdd, 0x34, 0xd8, 0x14, 0x69,
+ 0xd7, 0xf0, 0xe4, 0xb4, 0x49, 0x45, 0x91, 0xd1, 0x85, 0x60, 0xf3, 0x2a,
+ 0x6f, 0xd1, 0x34, 0x53, 0x12, 0xc8, 0x47, 0x47, 0xc2, 0xb8, 0x9c, 0x36,
+ 0x2c, 0x16, 0x65, 0xfa, 0xb7, 0xb5, 0x0d, 0x2e, 0xb1, 0x2d, 0x30, 0xce,
+ 0x2a, 0x97, 0x1d, 0xaf, 0xed, 0xa8, 0xf3, 0x2b, 0x5d, 0x36, 0xee, 0x78,
+ 0xb7, 0x78, 0xcb, 0xbd, 0xbe, 0x2d, 0x20, 0x2d, 0x76, 0x5a, 0x91, 0x80,
+ 0x1a, 0x8b, 0xc2, 0xd2, 0x0a, 0x2b, 0x2f, 0xf6, 0x8f, 0xb3, 0xc6, 0xf7,
+ 0x71, 0x8f, 0xa6, 0xaa, 0x26, 0xea, 0xe6, 0x3a, 0x49, 0xa6, 0xb2, 0x44,
+ 0x26, 0x8b, 0x9f, 0x05, 0x94, 0x04, 0x32, 0x1a, 0x8e, 0xe1, 0x30, 0x9b,
+ 0x30, 0x4e, 0x81, 0xac, 0xf1, 0xb9, 0xc4, 0xda, 0x9d, 0x5d, 0xe4, 0x74,
+ 0xc1, 0xd6, 0x73, 0xfd, 0xfc, 0xa2, 0x69, 0x2e, 0x5e, 0x9b, 0x8a, 0x4b,
+ 0x35, 0x95, 0x62, 0x0e, 0x80, 0x3a, 0x9b, 0x42, 0xb3, 0xd3, 0xca, 0xcd,
+ 0xcd, 0x35, 0xfc, 0xe5, 0x9b, 0x0b, 0xc8, 0xe4, 0x05, 0x97, 0xef, 0xe8,
+ 0x9a, 0x86, 0x51, 0x4c, 0x46, 0x6a, 0xaa, 0xca, 0xc8, 0x4d, 0xed, 0x14,
+ 0x67, 0x05, 0xa4, 0xb7, 0x3f, 0x8c, 0xd7, 0xed, 0xa0, 0xbc, 0xc2, 0xc6,
+ 0xe5, 0x3e, 0x97, 0xb8, 0x7c, 0x47, 0x17, 0x76, 0xd9, 0xc8, 0x53, 0xe7,
+ 0x36, 0xf2, 0x58, 0x57, 0x48, 0xfa, 0xc9, 0xfc, 0x4a, 0xae, 0x5d, 0x50,
+ 0x85, 0x53, 0x31, 0x96, 0x0c, 0x62, 0x97, 0x8d, 0x5c, 0xed, 0x77, 0xf3,
+ 0xe3, 0x79, 0x95, 0x3c, 0xd6, 0x15, 0x92, 0x9e, 0x3a, 0xb7, 0x11, 0xbb,
+ 0x6c, 0x64, 0xed, 0xeb, 0x87, 0x59, 0xe3, 0x29, 0x17, 0x37, 0xb7, 0x05,
+ 0xa4, 0x9a, 0x2a, 0x27, 0x99, 0xac, 0xc6, 0xc1, 0xae, 0xe0, 0x67, 0x07,
+ 0xb9, 0xaf, 0xb9, 0x46, 0xe8, 0xba, 0x8e, 0xc7, 0x53, 0xc1, 0x9d, 0xfb,
+ 0x8f, 0x48, 0xbf, 0xef, 0x1c, 0xc6, 0x6d, 0x53, 0xd9, 0x7a, 0x5e, 0x23,
+ 0xdb, 0x02, 0x47, 0xcf, 0x7d, 0x37, 0x1e, 0x1c, 0x94, 0xae, 0xf2, 0xbb,
+ 0x99, 0x6f, 0x37, 0x17, 0x33, 0x37, 0xad, 0x5a, 0xab, 0xc2, 0x5a, 0x9f,
+ 0x6b, 0xba, 0xfd, 0xdf, 0x16, 0x08, 0x4b, 0x5b, 0xcf, 0x6b, 0xa4, 0xca,
+ 0x62, 0xe2, 0x91, 0xfe, 0xa3, 0xe7, 0xbb, 0xee, 0x0a, 0x2b, 0xaa, 0x22,
+ 0x33, 0x38, 0x1c, 0x29, 0x6a, 0xaf, 0x68, 0xd6, 0xea, 0xe8, 0x1e, 0x22,
+ 0x96, 0x48, 0xd3, 0xbc, 0xa8, 0x8e, 0x7e, 0x60, 0xe3, 0xaa, 0x06, 0x2c,
+ 0x08, 0x1e, 0xe8, 0x18, 0x3a, 0x2e, 0x16, 0x36, 0x77, 0x14, 0x4e, 0xb9,
+ 0x27, 0xd3, 0x7d, 0xef, 0x9d, 0x58, 0x30, 0x5f, 0xe8, 0x0b, 0x4b, 0xdb,
+ 0x2f, 0x5c, 0x28, 0x52, 0x9a, 0xce, 0xc3, 0x5d, 0x21, 0x2c, 0x56, 0x95,
+ 0xf9, 0xde, 0x4a, 0x3a, 0xba, 0x82, 0x94, 0xad, 0x68, 0xfc, 0x6c, 0x20,
+ 0x7b, 0xdb, 0xfb, 0xd0, 0xf3, 0x82, 0x96, 0xa6, 0x5a, 0x5e, 0x09, 0x46,
+ 0x79, 0x78, 0xca, 0xe1, 0x8d, 0x8b, 0x3d, 0x22, 0xa7, 0xe5, 0x49, 0x65,
+ 0x72, 0x64, 0xb2, 0x1a, 0x06, 0x01, 0xc9, 0x54, 0x96, 0x6c, 0x5e, 0x47,
+ 0xc0, 0x8c, 0x45, 0x4c, 0x00, 0x26, 0x83, 0x84, 0xc5, 0xa2, 0x20, 0x49,
+ 0x12, 0xb2, 0x6c, 0x38, 0x7a, 0x28, 0xae, 0x98, 0xb8, 0xf3, 0x13, 0x13,
+ 0x54, 0x66, 0x37, 0xe3, 0xf7, 0xb9, 0xd9, 0xf5, 0xf6, 0x61, 0x76, 0xac,
+ 0xa8, 0x17, 0xb7, 0xee, 0x3f, 0xf9, 0xf6, 0xb9, 0x24, 0x90, 0x37, 0xf6,
+ 0x7e, 0x48, 0x6d, 0x8d, 0x93, 0x44, 0x2a, 0xcb, 0xaf, 0xbd, 0x4e, 0x91,
+ 0x88, 0xa7, 0xf9, 0xf0, 0x48, 0x98, 0x47, 0xff, 0xbc, 0x8b, 0xf1, 0x48,
+ 0x82, 0x23, 0xc1, 0x09, 0xa2, 0xb1, 0x34, 0xb2, 0x6c, 0xa0, 0x3f, 0x38,
+ 0x41, 0x26, 0x93, 0x2b, 0x66, 0x12, 0x38, 0x16, 0xcc, 0xe5, 0x48, 0x92,
+ 0x84, 0xaa, 0xca, 0xd4, 0x54, 0x95, 0x53, 0x59, 0x61, 0x67, 0x75, 0x73,
+ 0xad, 0xa8, 0xae, 0x74, 0x50, 0x55, 0x59, 0x46, 0x34, 0x9e, 0x66, 0x49,
+ 0x53, 0x2d, 0xaf, 0xec, 0xec, 0xe0, 0xed, 0xfd, 0x1f, 0xcd, 0xe8, 0xee,
+ 0x8c, 0x20, 0xbf, 0xac, 0xb6, 0x89, 0xab, 0x87, 0x23, 0x34, 0xf9, 0xab,
+ 0x79, 0xf2, 0xd9, 0x3d, 0x74, 0xf5, 0x84, 0xe8, 0x1b, 0x08, 0x63, 0x34,
+ 0x1a, 0xb0, 0x59, 0x15, 0xcc, 0xaa, 0x09, 0xab, 0x59, 0xc1, 0xef, 0x73,
+ 0x63, 0xb5, 0x28, 0x5c, 0x74, 0xce, 0x69, 0xd4, 0xce, 0x75, 0x16, 0xed,
+ 0x8f, 0x0c, 0x06, 0x89, 0x89, 0x48, 0x92, 0x9e, 0xc0, 0x18, 0xe9, 0x6c,
+ 0x8e, 0xd0, 0x68, 0x94, 0xee, 0xde, 0x11, 0x0e, 0x66, 0x83, 0xbc, 0xf4,
+ 0xcf, 0x76, 0xb2, 0xb9, 0x3c, 0xaa, 0x6a, 0xa2, 0x75, 0x89, 0x17, 0xbf,
+ 0xcf, 0x8d, 0xa6, 0xe9, 0xfc, 0xfd, 0xb5, 0x83, 0x70, 0xf1, 0x8a, 0x82,
+ 0x36, 0x0b, 0x7e, 0x1f, 0x79, 0xe4, 0x0c, 0x9f, 0xf8, 0xd5, 0x6f, 0x9e,
+ 0x67, 0xe7, 0xbf, 0xbb, 0x91, 0x65, 0x23, 0x56, 0xb3, 0x89, 0xf9, 0xde,
+ 0x4a, 0x4e, 0x5f, 0xd6, 0xc0, 0xaa, 0x25, 0x0d, 0x78, 0x6b, 0x2b, 0xd8,
+ 0x18, 0x98, 0x98, 0x95, 0x8f, 0x3c, 0xd3, 0x63, 0x9e, 0xee, 0x13, 0x87,
+ 0xba, 0x82, 0xb4, 0xbf, 0x3f, 0x40, 0x67, 0x4f, 0x88, 0x7d, 0xed, 0x01,
+ 0xc2, 0x13, 0x71, 0x72, 0xb9, 0x3c, 0x56, 0xab, 0xc2, 0xb6, 0xc7, 0xaf,
+ 0x2f, 0x38, 0x66, 0x41, 0x90, 0x4d, 0xcb, 0xeb, 0xc4, 0xda, 0xeb, 0x9f,
+ 0xc0, 0x60, 0x30, 0xf0, 0xa3, 0xef, 0xb7, 0xf2, 0xad, 0xf3, 0x9b, 0xd9,
+ 0xd0, 0x3d, 0x32, 0xab, 0x8e, 0x97, 0xa2, 0x35, 0xf9, 0x9c, 0xf8, 0xeb,
+ 0x4b, 0x6d, 0x74, 0xf6, 0x84, 0xf8, 0xc1, 0x77, 0x57, 0xd2, 0xd9, 0xe4,
+ 0xfd, 0x74, 0x20, 0x00, 0xd7, 0x97, 0x2b, 0x62, 0xe1, 0xfc, 0x6a, 0x66,
+ 0x0a, 0xb2, 0xcf, 0x4b, 0xd7, 0x95, 0x29, 0xe2, 0x8f, 0xd1, 0x6c, 0x41,
+ 0x3f, 0x66, 0x04, 0xf9, 0x22, 0xe9, 0xab, 0xb5, 0xd5, 0xfd, 0x22, 0xe8,
+ 0x6b, 0x90, 0x53, 0x4d, 0x5f, 0x1a, 0x90, 0xff, 0x00, 0x4b, 0xa4, 0x33,
+ 0x5c, 0x02, 0x9a, 0xcf, 0x26, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
+ 0x44, 0xae, 0x42, 0x60, 0x82
+};
+
+
+/*
+ * Constructs a titleFactor as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+titleFactor::titleFactor( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ QImage img;
+ img.loadFromData( img0_titlefactor, sizeof( img0_titlefactor ), "PNG" );
+ image0 = img;
+ if ( !name )
+ setName( "titleFactor" );
+ setIcon( image0 );
+ titleFactorLayout = new QGridLayout( this, 1, 1, 5, 6, "titleFactorLayout");
+
+ lbTitle = new QLabel( this, "lbTitle" );
+ QFont lbTitle_font( lbTitle->font() );
+ lbTitle_font.setBold( TRUE );
+ lbTitle->setFont( lbTitle_font );
+
+ titleFactorLayout->addWidget( lbTitle, 0, 0 );
+
+ gbTitle = new QGroupBox( this, "gbTitle" );
+ gbTitle->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, gbTitle->sizePolicy().hasHeightForWidth() ) );
+ gbTitle->setAlignment( int( QGroupBox::AlignVCenter ) );
+ gbTitle->setFlat( FALSE );
+ gbTitle->setCheckable( TRUE );
+ gbTitle->setChecked( FALSE );
+ gbTitle->setColumnLayout(0, Qt::Vertical );
+ gbTitle->layout()->setSpacing( 1 );
+ gbTitle->layout()->setMargin( 6 );
+ gbTitleLayout = new QGridLayout( gbTitle->layout() );
+ gbTitleLayout->setAlignment( Qt::AlignTop );
+
+ tFactor = new QLabel( gbTitle, "tFactor" );
+
+ gbTitleLayout->addWidget( tFactor, 1, 1 );
+
+ slFactor = new QSlider( gbTitle, "slFactor" );
+ slFactor->setMinValue( 100 );
+ slFactor->setMaxValue( 250 );
+ slFactor->setOrientation( QSlider::Horizontal );
+ slFactor->setTickmarks( QSlider::Below );
+ slFactor->setTickInterval( 10 );
+
+ gbTitleLayout->addWidget( slFactor, 1, 0 );
+
+ titleFactorLayout->addWidget( gbTitle, 1, 0 );
+ spacer1 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
+ titleFactorLayout->addItem( spacer1, 2, 0 );
+ languageChange();
+ resize( QSize(551, 115).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( slFactor, SIGNAL( sliderPressed() ), this, SLOT( slFactorPressed() ) );
+ connect( slFactor, SIGNAL( sliderReleased() ), this, SLOT( slFactorReleased() ) );
+ connect( slFactor, SIGNAL( valueChanged(int) ), this, SLOT( slFactor_valueChanged(int) ) );
+ connect( gbTitle, SIGNAL( toggled(bool) ), this, SLOT( ckAutoClicked(bool) ) );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+titleFactor::~titleFactor()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void titleFactor::languageChange()
+{
+ setCaption( tr2i18n( "Shrink Factors" ) );
+ lbTitle->setText( tr2i18n( "Shrink Factor for Title %1" ) );
+ gbTitle->setTitle( tr2i18n( "Change Factor" ) );
+ tFactor->setText( tr2i18n( "0.00" ) );
+}
+
+void titleFactor::slFactor_valueChanged(int)
+{
+ qWarning( "titleFactor::slFactor_valueChanged(int): Not implemented yet" );
+}
+
+void titleFactor::slFactorPressed()
+{
+ qWarning( "titleFactor::slFactorPressed(): Not implemented yet" );
+}
+
+void titleFactor::slFactorReleased()
+{
+ qWarning( "titleFactor::slFactorReleased(): Not implemented yet" );
+}
+
+void titleFactor::ckAutoClicked(bool)
+{
+ qWarning( "titleFactor::ckAutoClicked(bool): Not implemented yet" );
+}
+
+#include "titlefactor.moc"
diff --git a/src/titlefactor.ui b/src/titlefactor.ui
new file mode 100644
index 0000000..4c0f145
--- /dev/null
+++ b/src/titlefactor.ui
@@ -0,0 +1,165 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>titleFactor</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>titleFactor</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>551</width>
+ <height>115</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Shrink Factors</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>5</number>
+ </property>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>lbTitle</cstring>
+ </property>
+ <property name="font">
+ <font>
+ <bold>1</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Shrink Factor for Title %1</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" row="1" column="0">
+ <property name="name">
+ <cstring>gbTitle</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Change Factor</string>
+ </property>
+ <property name="alignment">
+ <set>AlignVCenter</set>
+ </property>
+ <property name="flat">
+ <bool>false</bool>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>6</number>
+ </property>
+ <property name="spacing">
+ <number>1</number>
+ </property>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>tFactor</cstring>
+ </property>
+ <property name="text">
+ <string>0.00</string>
+ </property>
+ </widget>
+ <widget class="QSlider" row="1" column="0">
+ <property name="name">
+ <cstring>slFactor</cstring>
+ </property>
+ <property name="minValue">
+ <number>100</number>
+ </property>
+ <property name="maxValue">
+ <number>250</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>Below</enum>
+ </property>
+ <property name="tickInterval">
+ <number>10</number>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <spacer row="2" column="0">
+ <property name="name">
+ <cstring>spacer1</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="PNG" length="2609">89504e470d0a1a0a0000000d49484452000000320000003208060000001e3f88b1000009f8494441546881ed996b6c5be519c77fc73e3ec7d7c4a9e3a47112c7add39226bd3730ae030a129b366dd0c22e6cc024187c181aac508600a16edc2aca2a9046056c42658369080a13131263ac2d2d74d006dad006929484384d9c388913c7f7cbf179f7a169a06b1d9b11b172f97f3b3ec7cffbfcdef73c97f73dd28d6ff5f26590e1ffedc06ce96b90534d5f839c6a9a11e406a72aee69aa169f973333e987067d463f0a826c5a5e276e7fe06facb9e1091ada7bc44dd5f6cf1d68f32aaf583d31298efce11fe2ce075fa2a9b3bfa00f72a11b8a22b3acb98e97b71fe44fcfbdc5f32fbf4b99dd22562df5d2dc3897158beb71cfb1736f6f589a2da77b02a30c85a2747407d9d71ee0e287c6998c25d1341dbb4de5d24b96b1313071d2ff4b3315c4bbe6bbc4a53f7f9c152df5f8ea5d7c7078880f0ef41197245445465565ccaa09b36a62c1bc2acaec66b2590d4f7539deda39188dc72fb8c12031369ea0b77f8c9c960720381c617038424ed3892733e4b21a522687c7e766794b3de50e334fbfb0972bbeb392b1b39b0b4e5ac11501b8b7372c35f9abc591e004375fbb9a6bd67e83a82c33d13b4c706882ee8171c2e37122d114c1de61fa351d6155d9df31c048388aa6e927d874d8cd78aacbd16329b4bc8ed5e560e5122faa22735abd8b3a4f05ae45f538b339ccaaccabbb3b916503179ddbc4b3279a2b0d04a07569038f3fbd9b5c36c7bdbd89a91991c03d87fb2f68119a9647d374928a4c362f302552689a4e3a9323af0b3e398502504c46ac1685acd58c41023595c1665130481256878575fbfa247a4601b8bfa5461cec1cc46a51685deae5d90303ff3bc8cac55e0c4689de8f46608e93f15c5ef425b23c7d8e9f3b3a82d37e6e5cd5201483c4baee50093193e277a757889c2eb8bdebe3e7d72ff688772329e1b329cc3119a5c864928eae219637d7b3fec0c08c768bd691968535386c660ebc17e0a1d60671514d397b8627b96c4717eb5a3c02e0be955ef1cc4763bc37912cce30a5c3d1142ff687b967855700ac6bf188ef6def62cff024e757970190c9e4383234ced245b545ed1505b9f3fd21c96030d03b1c211a4b71a5cfc596b3fcb48f27b8747b271b96d78b5706233cd91d6222ab950c124ae5d8d215e2d560840dcbebc5a5db3b691f4fb0e52c3f57cdaf0460643c8ea6e978aacb3f3b08c092260f917886542cc5fab680746da39b47cf9c475734cd757b7a78f0d020ef84134c7e0a90989667df689c7bda07b8725737ddd1345bcef2736da39bdbda02d2c3ad0d6278348aaac834fadcb303e2b09b4924b3e4a7cad12dfbfaa40f2229e9b6c51e5e0b4ef24e38812604ed134936b536142d9c0f9fe1131f44526842702892e4f5508cf58b3dbc3f91906ed9d727016473798646a2984c46dc15f6d901396d7e35e14882742203c08d8b6a84dd6414db0261e253f50060d77094be78a6a8bd8144963da3f1e9eb4c5e675b208cdd6414372eaa1170343e068623582d0a4ea7757640dc2e3b5a2c45d26e0660349d2393d771c846acf2c726de1e8bd31b4b17b5d7194db1636872fada2a1b70c84632799dd14c8e47cef0092104d9a95775dd3bfd453361d1f40b904ee700304f5db7382d2c70d43296c9d19fc872389a66f74894e7fbc23c1708f350ab4f6c3870e4a4836f585e2f6e6deb23aee5b9dce7e2bcaa32169499f1da142a55138a51e2a6bd7dd2dd8d952295ce51515e7c354a06f137b8911d16fa3a07d97c618b38d90c6d6ef5892b1a5ce84290d50b97e0acae7389c7c9b76b2b38cbede0c14383d2e168ea84e7d2198dd058145f9d8bec6c8154bb1d282623c3e138f9fcc99d7cf0d0e034dc9a0657c18077a926de1c894900bb43d18263e6f33a998c76b40b28c1c7926244d3748410c8b201492a5eb88f659e4f7befbf254912faccdb90697d3576885f247d0d72aaa9249063f12d4e89638893aba4f4ab4da55c93c988c15038e9fcd4ef16b15c9e6515567edb7ef2fdc3ddcbea44fb441287c9c8d33da333663021c409dbe5422a09642814259dc951ebb21fd72edcbbc22b0692193a2753b44f24b9eecd1e5a2b6d2c5c5e5fd0562aaff34cef286d63092e6b9823965558692ab7506755b96bffc7b68d4603aa2a331e49504abe2e092434164524b354d6574228cecf1aabc4bf862659d7d647f7648a3da3318ea5fbdb97d4b2e950b0e0d89b0e05a54b3c4eb1f5c3510e4592182438dbed6061b985a672ab583db78cad1f8e486655a6b2c24e6fff18fed90239a6ccd432f7c4d2ec0a45690bc709a572d3f757b96c2ca9b0f2d6686c463b2b5c762e985bc6cee128ba803746621c8ea5194d6bf8ec2a0026d988dda64e378ec554d20b38343289ecb0608d1fed6c7787a2d23cbb2a5de3771fb7ecdfac2e63de942333a9c1a670a6db71dc6fd7f8dd34d81469d7f0e4b4494591d18560f32a6fd1345312c84747c2b89c362c1665fab7b50d2eb12d30ce2a971dafeda8f32b5d36ee78b778cbbdbe2d202d765a91801a8bc2d20a2b2ff68fb3c6f7718fa6aa26eae63a49a6b244268b9f059404321a8ee1309b304e81acf1b9c4da9d5de474c1d673fdfca2692e5e9b8a4b3595620e803a9b42b3d3cacdcd35fce59b0bc8e40597efe89a86514c466aaacac84ded146705a4b73f8cd7eda0bcc2c6e53e97b87c471776d9c853e736f2585748fac9fc4aae5d50855331960c62978d5ced77f3e379953cd615929e3ab711bb6c64edeb8759e3291737b705a49a2a2799acc6c1aee06707b9afb946e8ba8ec753c19dfb8f48bfef1cc66d53d97a5e23db0247cf7d371e1c94aef2bb996f37173337ad5aabc25a9f6bbafddf16084b5bcf6ba4ca62e291fea3e7bbee0a2baa2233381c296aaf68d6eae81e229648d3bca88e7e60e3aa062c081ee8183a2e163677144eb927d37def9d58305fe80b4bdb2f5c28529acec35d212c5695f9de4a3aba8294ad68fc6c207bdbfbd0f38296a65a5e09467978cae18d8b3d22a7e549657264b21a0601c954966c5e47c08c454c00268384c5a2204912b26c387a28ae98b8f31313546637e3f7b9d9f5f66176aca817b7ee3ff9f6b9249037f67e486d8d93442acbafbd4e9188a7f9f0489847ffbc8bf1488223c109a2b134b26ca03f384126932b66123816cce5489284aacad45495535961677573ada8ae7450555946349e6649532dafecece0edfd1fcde8ee8c20bfacb689ab872334f9ab79f2d93d74f584e81b0863341ab05915ccaa09ab59c1ef7363b5285c74ce69d4ce7516ed8f0c06898948929ec018e96c8ed06894eede110e6683bcf4cf76b2b93caa6aa2758917bfcf8da6e9fcfdb58370f18a82360b7e1f79e40c9ff8d56f9e67e7bfbb91652356b389f9de4a4e5fd6c0aa250d786b2bd8189898958f3cd3639eee1387ba82b4bf3f40674f887ded01c2137172b93c56abc2b6c7af2f386641904dcbebc4daeb9fc06030f0a3efb7f2adf39bd9d03d32ab8e97a235f99cf8eb4b6d74f684f8c17757d2d9e4fd742000d7972b62e1fc6a660ab2cf4bd79529e28fd16c413f6604f922e9abb5d5fd22e86b90534d5f1a90ff004ba4335c029acf260000000049454e44ae426082</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>slFactor</sender>
+ <signal>sliderPressed()</signal>
+ <receiver>titleFactor</receiver>
+ <slot>slFactorPressed()</slot>
+ </connection>
+ <connection>
+ <sender>slFactor</sender>
+ <signal>sliderReleased()</signal>
+ <receiver>titleFactor</receiver>
+ <slot>slFactorReleased()</slot>
+ </connection>
+ <connection>
+ <sender>slFactor</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>titleFactor</receiver>
+ <slot>slFactor_valueChanged(int)</slot>
+ </connection>
+ <connection>
+ <sender>gbTitle</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>titleFactor</receiver>
+ <slot>ckAutoClicked(bool)</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>slFactor_valueChanged( int )</slot>
+ <slot>slFactorPressed()</slot>
+ <slot>slFactorReleased()</slot>
+ <slot>ckAutoClicked(bool)</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/src/viewmpeg2.cpp b/src/viewmpeg2.cpp
new file mode 100644
index 0000000..66a966a
--- /dev/null
+++ b/src/viewmpeg2.cpp
@@ -0,0 +1,229 @@
+#include <klocale.h>
+/****************************************************************************
+** Form implementation generated from reading ui file './viewmpeg2.ui'
+**
+** Created: dim. oct. 26 08:57:36 2008
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "viewmpeg2.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qframe.h>
+#include <qtoolbutton.h>
+#include <qslider.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+#include <qimage.h>
+#include <qpixmap.h>
+
+static const unsigned char img0_viewmpeg2[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x02,
+ 0xe7, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x5d, 0x93, 0xb9, 0x6f, 0x5c,
+ 0x55, 0x14, 0xc6, 0x7f, 0xe7, 0xde, 0xfb, 0xb6, 0xd9, 0xbc, 0x66, 0xe2,
+ 0x19, 0xdb, 0x63, 0x27, 0x40, 0x6c, 0x30, 0x91, 0x85, 0xe4, 0x88, 0x86,
+ 0x06, 0xd2, 0x01, 0x2d, 0x2d, 0x12, 0x1d, 0x2d, 0xff, 0x4d, 0x94, 0x92,
+ 0x86, 0x86, 0x16, 0x29, 0x91, 0xc2, 0x92, 0x20, 0xb0, 0x82, 0x10, 0x12,
+ 0x04, 0x90, 0x92, 0x60, 0x05, 0x2f, 0x44, 0xce, 0x38, 0xf6, 0x78, 0xe6,
+ 0x2d, 0xf3, 0xe6, 0x6d, 0x97, 0x22, 0x16, 0xc2, 0x39, 0xd2, 0x57, 0x7c,
+ 0xfa, 0x8e, 0xce, 0xa2, 0xef, 0x1c, 0xe1, 0xa5, 0xb0, 0xd6, 0x9e, 0xe3,
+ 0x22, 0xf2, 0x72, 0xca, 0x79, 0xfd, 0xc6, 0xcd, 0xcf, 0x2f, 0xcf, 0xcd,
+ 0xcd, 0x74, 0x7d, 0xd7, 0xa1, 0x59, 0xf7, 0xfd, 0x38, 0x4e, 0x5e, 0x0d,
+ 0xe3, 0x78, 0xde, 0xf7, 0xdc, 0x70, 0x7a, 0xaa, 0xf5, 0x78, 0x92, 0xdb,
+ 0xd1, 0x24, 0xcb, 0xcf, 0x57, 0x11, 0xa1, 0x28, 0x0a, 0x7b, 0x74, 0x74,
+ 0xfc, 0xcc, 0x2c, 0x2c, 0xb4, 0xbf, 0x68, 0x35, 0xeb, 0x6f, 0x9e, 0x8c,
+ 0x22, 0xbb, 0x7b, 0x70, 0xac, 0x5c, 0xd7, 0x73, 0x2d, 0x81, 0x0c, 0x27,
+ 0xf0, 0xf4, 0xe9, 0x69, 0xde, 0x99, 0x6d, 0x15, 0xbd, 0x6e, 0x07, 0xcb,
+ 0xff, 0x27, 0x13, 0xd2, 0x34, 0x45, 0x2b, 0xb5, 0x6b, 0xca, 0x4a, 0xad,
+ 0x46, 0xe3, 0xbc, 0x76, 0x7f, 0x2f, 0xe2, 0xab, 0x07, 0xcf, 0x18, 0x84,
+ 0x11, 0xd6, 0xbe, 0xe8, 0x52, 0x55, 0xd6, 0x7b, 0x65, 0xde, 0xf7, 0x3e,
+ 0x7d, 0x77, 0x9d, 0x46, 0x2d, 0xf8, 0x6f, 0x3d, 0x0b, 0xf8, 0x8e, 0xa6,
+ 0x42, 0xaf, 0x1a, 0xa5, 0x8d, 0xfd, 0x7d, 0xff, 0x98, 0x3f, 0x9f, 0xbb,
+ 0xac, 0x2c, 0x5f, 0x61, 0x3a, 0x1a, 0x72, 0x10, 0x8d, 0x18, 0x97, 0x15,
+ 0x22, 0xf0, 0xb7, 0x85, 0x9b, 0xdb, 0x3b, 0x0c, 0x27, 0x42, 0x85, 0x00,
+ 0x42, 0x09, 0xbc, 0xbf, 0xb1, 0xc0, 0xf5, 0xd5, 0x19, 0x6b, 0x1c, 0x63,
+ 0x18, 0x46, 0x19, 0xcf, 0xfb, 0x39, 0x8b, 0x17, 0x3d, 0x2e, 0x2f, 0xb5,
+ 0xf1, 0x13, 0x9f, 0x83, 0xca, 0xa2, 0x94, 0x80, 0xc0, 0x24, 0x19, 0x50,
+ 0x4c, 0xd7, 0xa8, 0xb4, 0x83, 0x28, 0xa1, 0x02, 0x6c, 0xab, 0x81, 0xd6,
+ 0x06, 0xa3, 0x8d, 0x83, 0xd2, 0x82, 0x9b, 0x27, 0x4c, 0x99, 0x29, 0x4e,
+ 0x8a, 0x98, 0x72, 0xbe, 0x46, 0xc7, 0xf3, 0x10, 0x11, 0xc4, 0x96, 0xf8,
+ 0xa3, 0x9c, 0xc5, 0xce, 0x12, 0x5a, 0x1b, 0x3c, 0xad, 0xc8, 0xac, 0x65,
+ 0x21, 0xb0, 0x68, 0x32, 0x8c, 0xd6, 0x86, 0xcd, 0x8d, 0x1e, 0x83, 0xc1,
+ 0x23, 0x62, 0x3d, 0x41, 0x7a, 0x5d, 0x7a, 0xad, 0x3a, 0x4a, 0x14, 0x4a,
+ 0x81, 0x1c, 0xee, 0xb3, 0xb5, 0xd6, 0x61, 0x71, 0xa5, 0x87, 0x2b, 0x30,
+ 0xeb, 0x08, 0x3b, 0xc3, 0x98, 0x7c, 0x34, 0x44, 0xe5, 0x06, 0xa3, 0xb5,
+ 0x26, 0x8e, 0x4a, 0x46, 0xe5, 0x98, 0x61, 0x18, 0xb2, 0x1e, 0x74, 0xa8,
+ 0xfb, 0x42, 0x9e, 0x8e, 0x39, 0x7c, 0xb4, 0x43, 0xfa, 0x60, 0x9b, 0xbf,
+ 0x2e, 0xad, 0x53, 0x4c, 0x32, 0x2e, 0x34, 0x0d, 0x95, 0x99, 0xe0, 0xf4,
+ 0xf7, 0xa8, 0xc2, 0x12, 0xbd, 0xb2, 0x85, 0x71, 0x8c, 0xc3, 0x8f, 0x3b,
+ 0x7d, 0x6e, 0xf5, 0x85, 0xc0, 0x71, 0xd8, 0xff, 0xfa, 0x17, 0x9a, 0x2e,
+ 0x8c, 0xf3, 0x0a, 0x13, 0x34, 0xf8, 0x70, 0xfd, 0x35, 0x7e, 0xbd, 0x77,
+ 0x87, 0xab, 0xed, 0x94, 0x77, 0xde, 0xd8, 0x20, 0x70, 0x1d, 0x26, 0xcb,
+ 0x1d, 0x0e, 0x06, 0x05, 0x93, 0x50, 0x63, 0xb4, 0xd1, 0xb8, 0xad, 0x16,
+ 0xfe, 0x85, 0x17, 0x0e, 0xf7, 0xad, 0xe5, 0x54, 0x09, 0x9d, 0x59, 0x9f,
+ 0x6b, 0xcb, 0x2d, 0x3e, 0xd8, 0x6a, 0xf3, 0xfa, 0x9c, 0xc3, 0xad, 0xdb,
+ 0xdf, 0xe3, 0xba, 0x70, 0xb4, 0xfa, 0x0f, 0x77, 0x4f, 0x7f, 0xe6, 0x22,
+ 0x6b, 0x7c, 0x3c, 0xf7, 0x19, 0xc6, 0x18, 0x07, 0x6b, 0xc1, 0x51, 0xc2,
+ 0xf2, 0xb4, 0xc7, 0x66, 0xd7, 0xe7, 0xed, 0x9e, 0xcf, 0x7a, 0x1b, 0x9a,
+ 0xfe, 0x98, 0xa8, 0xf8, 0x0d, 0x77, 0x33, 0xe1, 0xf0, 0xc9, 0x1e, 0x5f,
+ 0xde, 0x8e, 0x08, 0x37, 0x42, 0xee, 0xd4, 0xbf, 0xe5, 0xa3, 0xee, 0x02,
+ 0x8e, 0x71, 0x30, 0x4a, 0x19, 0xb9, 0xda, 0xf5, 0x58, 0x5c, 0x3e, 0xa1,
+ 0x3d, 0x73, 0x44, 0xa6, 0xfa, 0x3c, 0x9c, 0x1c, 0xf2, 0xcd, 0x6e, 0x9f,
+ 0xc3, 0xf4, 0x98, 0x93, 0x6c, 0xc4, 0x28, 0x4f, 0x88, 0x57, 0xc7, 0x4c,
+ 0x25, 0x03, 0xae, 0xf7, 0xdf, 0x63, 0xfa, 0xd2, 0x0c, 0x33, 0xcc, 0xa2,
+ 0xb4, 0x16, 0x93, 0x17, 0xe5, 0xe3, 0xad, 0x6e, 0xc7, 0x4f, 0x69, 0xd8,
+ 0xa4, 0x4c, 0xc9, 0xca, 0x92, 0x25, 0x63, 0xb9, 0xd6, 0x04, 0x69, 0x82,
+ 0x88, 0x42, 0xe4, 0xec, 0xa9, 0xae, 0xc0, 0xc3, 0xed, 0x3f, 0x08, 0xf6,
+ 0x02, 0xb3, 0x36, 0xf7, 0x56, 0x59, 0x94, 0xd5, 0x13, 0xf3, 0xd3, 0xfd,
+ 0x1f, 0x3e, 0xd1, 0xca, 0xac, 0x0c, 0x07, 0x83, 0x20, 0x0a, 0x47, 0x41,
+ 0x1c, 0x47, 0x7e, 0x9a, 0x26, 0x5e, 0x96, 0x65, 0x6e, 0x59, 0x96, 0x5a,
+ 0x44, 0xac, 0x31, 0xa6, 0xf0, 0x3c, 0x3f, 0xab, 0xd5, 0xea, 0xa9, 0x68,
+ 0x49, 0xef, 0xdd, 0xfd, 0x4e, 0x3c, 0x6f, 0xfe, 0xd8, 0x93, 0xa9, 0x03,
+ 0x01, 0x1a, 0x40, 0x0d, 0x68, 0x9e, 0xa1, 0x7e, 0xc6, 0x03, 0xc0, 0x39,
+ 0x3b, 0xfd, 0x0c, 0x48, 0x80, 0x18, 0x88, 0x80, 0xf0, 0x0c, 0xc9, 0xbf,
+ 0xa0, 0xee, 0x36, 0x30, 0xfa, 0x5e, 0x19, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+
+static const unsigned char img1_viewmpeg2[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00,
+ 0x47, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0xd7, 0xb1, 0x0d, 0x00,
+ 0x20, 0x0c, 0x03, 0x41, 0x82, 0x98, 0xca, 0xfb, 0xcb, 0x6b, 0x91, 0x0d,
+ 0xa0, 0xa0, 0x30, 0xc5, 0xa7, 0x75, 0x24, 0x9f, 0xd2, 0xa5, 0x6c, 0x8f,
+ 0xe4, 0xcc, 0x68, 0x3b, 0x00, 0x00, 0x00, 0x7e, 0x00, 0xac, 0xdb, 0x82,
+ 0xa4, 0xfd, 0x52, 0x60, 0xbb, 0x4e, 0x79, 0xfc, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xe2, 0x31, 0x01, 0x00, 0x20, 0x0d, 0x68,
+ 0xfa, 0xa1, 0x08, 0xe5, 0x16, 0xc9, 0x6b, 0xf3, 0x00, 0x00, 0x00, 0x00,
+ 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+
+static const unsigned char img2_viewmpeg2[] = {
+ 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
+ 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20,
+ 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00,
+ 0x79, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0xd7, 0x41, 0x0a, 0xc0,
+ 0x20, 0x0c, 0x44, 0xd1, 0xa4, 0xf4, 0x54, 0x73, 0x7f, 0x72, 0x2d, 0xbb,
+ 0x12, 0xba, 0xd4, 0x64, 0x24, 0x94, 0x8e, 0x6b, 0xe1, 0xbf, 0x45, 0x22,
+ 0xe8, 0x11, 0x61, 0x9d, 0xe7, 0x6a, 0xad, 0x0b, 0x20, 0x80, 0x00, 0x9f,
+ 0x01, 0x00, 0x18, 0x00, 0x46, 0x1b, 0xe0, 0x0d, 0x69, 0x05, 0x4c, 0x04,
+ 0x13, 0x92, 0x9e, 0x01, 0x16, 0xa4, 0x3c, 0x84, 0x55, 0x08, 0x6d, 0x0b,
+ 0xb2, 0x10, 0xfa, 0x1a, 0xee, 0x42, 0x8e, 0xbd, 0x03, 0xab, 0x88, 0x63,
+ 0x80, 0x88, 0xf0, 0x95, 0x7b, 0x77, 0x57, 0x98, 0x0e, 0xd8, 0x0d, 0xd3,
+ 0x00, 0xd9, 0x70, 0x19, 0x50, 0x0d, 0xa7, 0x01, 0xac, 0xf0, 0x3c, 0x5b,
+ 0x5b, 0xc0, 0x8e, 0x9b, 0x99, 0xb9, 0xfe, 0x05, 0x02, 0x08, 0xf0, 0x7b,
+ 0xc0, 0x03, 0xaa, 0x86, 0x2c, 0xa8, 0x26, 0x27, 0x76, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
+};
+
+
+/*
+ * Constructs a ViewMPEG2 as a child of 'parent', with the
+ * name 'name' and widget flags set to 'f'.
+ */
+ViewMPEG2::ViewMPEG2( QWidget* parent, const char* name, WFlags fl )
+ : QWidget( parent, name, fl )
+{
+ QImage img;
+ img.loadFromData( img0_viewmpeg2, sizeof( img0_viewmpeg2 ), "PNG" );
+ image0 = img;
+ img.loadFromData( img1_viewmpeg2, sizeof( img1_viewmpeg2 ), "PNG" );
+ image1 = img;
+ img.loadFromData( img2_viewmpeg2, sizeof( img2_viewmpeg2 ), "PNG" );
+ image2 = img;
+ if ( !name )
+ setName( "ViewMPEG2" );
+ setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, sizePolicy().hasHeightForWidth() ) );
+ setSizeIncrement( QSize( 0, 0 ) );
+ setBaseSize( QSize( 0, 0 ) );
+ setIcon( image0 );
+ ViewMPEG2Layout = new QGridLayout( this, 1, 1, 2, 6, "ViewMPEG2Layout");
+
+ frame7 = new QFrame( this, "frame7" );
+ frame7->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)0, 0, 0, frame7->sizePolicy().hasHeightForWidth() ) );
+ frame7->setMaximumSize( QSize( 32767, 50 ) );
+ frame7->setFrameShape( QFrame::StyledPanel );
+ frame7->setFrameShadow( QFrame::Raised );
+ frame7Layout = new QGridLayout( frame7, 1, 1, 11, 6, "frame7Layout");
+
+ bStop = new QToolButton( frame7, "bStop" );
+ bStop->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)1, 0, 0, bStop->sizePolicy().hasHeightForWidth() ) );
+ bStop->setIconSet( QIconSet( image1 ) );
+
+ frame7Layout->addWidget( bStop, 0, 0 );
+
+ bPlay = new QToolButton( frame7, "bPlay" );
+ bPlay->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)1, 0, 0, bPlay->sizePolicy().hasHeightForWidth() ) );
+ bPlay->setIconSet( QIconSet( image2 ) );
+
+ frame7Layout->addWidget( bPlay, 0, 1 );
+
+ slider = new QSlider( frame7, "slider" );
+ slider->setOrientation( QSlider::Horizontal );
+
+ frame7Layout->addWidget( slider, 0, 2 );
+
+ ViewMPEG2Layout->addWidget( frame7, 1, 0 );
+
+ label = new QLabel( this, "label" );
+ label->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)2, (QSizePolicy::SizeType)2, 0, 0, label->sizePolicy().hasHeightForWidth() ) );
+
+ ViewMPEG2Layout->addWidget( label, 0, 0 );
+ languageChange();
+ resize( QSize(320, 320).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+
+ // signals and slots connections
+ connect( bStop, SIGNAL( clicked() ), this, SLOT( bStopClick() ) );
+ connect( bPlay, SIGNAL( clicked() ), this, SLOT( bPlayClick() ) );
+ connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) );
+ connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) );
+}
+
+/*
+ * Destroys the object and frees any allocated resources
+ */
+ViewMPEG2::~ViewMPEG2()
+{
+ // no need to delete child widgets, Qt does it all for us
+}
+
+/*
+ * Sets the strings of the subwidgets using the current
+ * language.
+ */
+void ViewMPEG2::languageChange()
+{
+ setCaption( tr2i18n( "k9Copy - Title Preview" ) );
+ bStop->setText( QString::null );
+ bPlay->setText( QString::null );
+}
+
+void ViewMPEG2::sliderReleased()
+{
+ qWarning( "ViewMPEG2::sliderReleased(): Not implemented yet" );
+}
+
+void ViewMPEG2::bStopClick()
+{
+ qWarning( "ViewMPEG2::bStopClick(): Not implemented yet" );
+}
+
+void ViewMPEG2::bPlayClick()
+{
+ qWarning( "ViewMPEG2::bPlayClick(): Not implemented yet" );
+}
+
+void ViewMPEG2::sliderPressed()
+{
+ qWarning( "ViewMPEG2::sliderPressed(): Not implemented yet" );
+}
+
+#include "viewmpeg2.moc"
diff --git a/src/viewmpeg2.ui b/src/viewmpeg2.ui
new file mode 100755
index 0000000..e327884
--- /dev/null
+++ b/src/viewmpeg2.ui
@@ -0,0 +1,183 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>ViewMPEG2</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>ViewMPEG2</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>320</width>
+ <height>320</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="sizeIncrement">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="baseSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>k9Copy - Title Preview</string>
+ </property>
+ <property name="icon">
+ <pixmap>image0</pixmap>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>2</number>
+ </property>
+ <widget class="QFrame" row="1" column="0">
+ <property name="name">
+ <cstring>frame7</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>32767</width>
+ <height>50</height>
+ </size>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QToolButton" row="0" column="0">
+ <property name="name">
+ <cstring>bStop</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="iconSet">
+ <iconset>image1</iconset>
+ </property>
+ </widget>
+ <widget class="QToolButton" row="0" column="1">
+ <property name="name">
+ <cstring>bPlay</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ <property name="iconSet">
+ <iconset>image2</iconset>
+ </property>
+ </widget>
+ <widget class="QSlider" row="0" column="2">
+ <property name="name">
+ <cstring>slider</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>label</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>2</hsizetype>
+ <vsizetype>2</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<images>
+ <image name="image0">
+ <data format="PNG" length="800">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000002e749444154388d5d93b96f5c5514c67fe7defbb6d9bc66e219db6327406c309185e4888606d2012d2d121d2dff4d94928686162991c29220b082101204909260052f44ce38f678e62df3e66d972216c239d2577cfa8ecea2ef1ce1a5b0d69ee322f272ca79fdc6cdcf2fcfcdcd747dd7a159f7fd384e5e0de378def7dc707aaaf57892dbd124cbcf5711a1280a7b7474fccc2c2cb4bf6835eb6f9e8c22bb7b70ac5cd7732d810c27f0f4e969de996d15bd6e07cbff2713d234452bb56bca4aad46e3bc767f2fe2ab07cf188411d6bee85255d67b65def73e7d779d462df86f3d0bf88ea642af1aa58dfd7dff983f9fbbac2c5f613a1a72108d18971522f0b7859bdb3b0c274285004209bcbfb1c0f5d5196b1c63184619cffb398b173d2e2fb5f1139f83caa29480c02419504cd7a8b48328a1026cab81d606a38d83d2829b274c99294e8a9872be46c7f31011c496f8a39cc5ce125a1b3cadc8ac6521b068328cd686cd8d1e83c123623d417a5d7aad3a4a144a811ceeb3b5d66171a5872b30eb083bc3987c3444e506a3b5268e4a46e5986118b21e74a8fb429e8e397cb443fa609bbf2ead534c322e340d9599e0f4f7a8c212bdb285718cc38f3b7d6ef585c071d8fffa179a2e8cf30a1334f870fd357ebd7787abed9477ded820701d26cb1d0e0605935063b4d1b8ad16fe85170ef7ade554099d599f6bcb2d3ed86af3fa9cc3addbdfe3ba70b4fa0f774f7fe6226b7c3cf719c618076bc151c2f2b4c766d7e7ed9ecf7a1b9afe98a8f80d7733e1f0c91e5fde8e083742eed4bfe5a3ee028e71304a19b9daf5585c3ea13d7344a6fa3c9c1cf2cd6e9fc3f498936cc4284f8857c74c2503aef7df63fad20c33cca2b4169317e5e3ad6ec74f69d8a44cc9ca922563b9d60469828842e4eca9aec0c3ed3f08f602b336f7565994d513f3d3fd1f3ed1caac0c0783200a47411c477e9a265e96656e59965a44ac31a6f03c3fabd5eaa96849efddfd4e3c6ffed893a903011a400d689ea17ec603c0393bfd0c4880188880f00cc9bfa0ee3630fa5e19660000000049454e44ae426082</data>
+ </image>
+ <image name="image1">
+ <data format="PNG" length="128">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af400000047494441545885edd7b10d00200c03418298cafbcb6b910da0a030c5a775249fd2a56c8fe4cc683b0000007e00acdb82a4fd5260bb4e79fc020000000000000080e2310100200d68faa108e516c96bf30000000049454e44ae426082</data>
+ </image>
+ <image name="image2">
+ <data format="PNG" length="178">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af400000079494441545885edd7410ac0200c44d1a4f454737f722dbb12bad46424948e6be1bf4522e811619de76aad0b2080009f01001800461be00d69054c0413929e0116a43c8455086d0bb210fa1aee428ebd03ab88638088f0957b7757980ed80dd300d97019500da701acf03c5b5bc08e9b99b9fe050208f07bc003aa862ca8262776fe0000000049454e44ae426082</data>
+ </image>
+</images>
+<connections>
+ <connection>
+ <sender>bStop</sender>
+ <signal>clicked()</signal>
+ <receiver>ViewMPEG2</receiver>
+ <slot>bStopClick()</slot>
+ </connection>
+ <connection>
+ <sender>bPlay</sender>
+ <signal>clicked()</signal>
+ <receiver>ViewMPEG2</receiver>
+ <slot>bPlayClick()</slot>
+ </connection>
+ <connection>
+ <sender>slider</sender>
+ <signal>sliderReleased()</signal>
+ <receiver>ViewMPEG2</receiver>
+ <slot>sliderReleased()</slot>
+ </connection>
+ <connection>
+ <sender>slider</sender>
+ <signal>sliderPressed()</signal>
+ <receiver>ViewMPEG2</receiver>
+ <slot>sliderPressed()</slot>
+ </connection>
+</connections>
+<slots>
+ <slot>sliderReleased()</slot>
+ <slot>bStopClick()</slot>
+ <slot>bPlayClick()</slot>
+ <slot>sliderPressed()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>