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
v3.5.13-sru
tpearson 15 years ago
commit 0d382a262c

@ -0,0 +1 @@
Jean-Michel PETIT <k9copy@free.fr>

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

@ -0,0 +1,167 @@
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
The file `configure.in' is used to create `configure' by a program
called `autoconf'. You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes a while. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Type `make install' to install the programs and any data files and
documentation.
4. You can remove the program binaries and object files from the
source code directory by typing `make clean'.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not supports the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory. After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
CPU-COMPANY-SYSTEM
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.
If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Operation Controls
==================
`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
Use and save the results of the tests in FILE instead of
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
debugging `configure'.
`--help'
Print a summary of the options to `configure', and exit.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made.
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--version'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`configure' also accepts some other, not widely useful, options.

@ -0,0 +1,39 @@
SUBDIRS = doc dvdread libdvdnav k9Mplayer libk9copy k9author k9decmpeg k9devices k9vamps \
po src
$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;
$(top_srcdir)/subdirs:
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs
$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in
@cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4
MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files
messages: rc.cpp
$(EXTRACTRC) `find . -name "*.ui"` >> rc.cpp
$(EXTRACTRC) `find . -name "*.rc"` >> rc.cpp
$(XGETTEXT) `find -name "*.cpp"` -o $(podir)/k9copy.pot
package-messages:
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common package-messages
$(MAKE) -C po merge
EXTRA_DIST = admin COPYING configure.in.in
dist-hook:
cd $(top_distdir) && perl admin/am_edit -padmin
cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs
AM_CXXFLAGS = -O0 -g3
INCLUDES = -I$(top_srcdir)/dvdread

@ -0,0 +1,10 @@
all:
@echo "This Makefile is only for the CVS repository"
@echo "This will be deleted before making the distribution"
@echo ""
$(MAKE) -f admin/Makefile.common cvs
dist:
$(MAKE) -f admin/Makefile.common dist
.SILENT:

@ -0,0 +1 @@

@ -0,0 +1,12 @@
install from sources:
make -f Makefile.cvs
./configure --prefix=/usr
make
make install (as root)
k9copy can now copy dvd with bad sectors.
for a faster copy from a dvd with bad sectors : reduce the readahead for the drive :
as root: hdparm -a8 /dev/dvd

@ -0,0 +1,3 @@
more options for mp4 encoding
improve copy with bad sectors

File diff suppressed because it is too large Load Diff

881
aclocal.m4 vendored

@ -0,0 +1,881 @@
# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
m4_if(AC_AUTOCONF_VERSION, [2.63],,
[m4_warning([this file was generated for autoconf 2.63.
You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.])])
# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
# Automake X.Y traces this macro to ensure aclocal.m4 has been
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.10'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
m4_if([$1], [1.10.1], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
# _AM_AUTOCONF_VERSION(VERSION)
# -----------------------------
# aclocal traces this macro to find the Autoconf version.
# This is a private macro too. Using m4_define simplifies
# the logic in aclocal, which can simply ignore this definition.
m4_define([_AM_AUTOCONF_VERSION], [])
# AM_SET_CURRENT_AUTOMAKE_VERSION
# -------------------------------
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.10.1])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
#
# Of course, Automake must honor this variable whenever it calls a
# tool from the auxiliary directory. The problem is that $srcdir (and
# therefore $ac_aux_dir as well) can be either absolute or relative,
# depending on how configure is run. This is pretty annoying, since
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
# source directory, any form will work fine, but in subdirectories a
# relative path needs to be adjusted first.
#
# $ac_aux_dir/missing
# fails when called from a subdirectory if $ac_aux_dir is relative
# $top_srcdir/$ac_aux_dir/missing
# fails if $ac_aux_dir is absolute,
# fails when called from a subdirectory in a VPATH build with
# a relative $ac_aux_dir
#
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
# are both prefixed by $srcdir. In an in-source build this is usually
# harmless because $srcdir is `.', but things will broke when you
# start a VPATH build or use an absolute $srcdir.
#
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
# and then we would define $MISSING as
# MISSING="\${SHELL} $am_aux_dir/missing"
# This will work as long as MISSING is not called from configure, because
# unfortunately $(top_srcdir) has no meaning in configure.
# However there are other variables, like CC, which are often used in
# configure, and could therefore not use this "fixed" $ac_aux_dir.
#
# Another solution, used here, is to always expand $ac_aux_dir to an
# absolute PATH. The drawback is that using absolute paths prevent a
# configured tree to be moved without reconfiguration.
AC_DEFUN([AM_AUX_DIR_EXPAND],
[dnl Rely on autoconf to set up CDPATH properly.
AC_PREREQ([2.50])dnl
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
])
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 8
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
AC_DEFUN([AM_CONDITIONAL],
[AC_PREREQ(2.52)dnl
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_SUBST([$1_TRUE])dnl
AC_SUBST([$1_FALSE])dnl
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi
AC_CONFIG_COMMANDS_PRE(
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
AC_MSG_ERROR([[conditional "$1" was never defined.
Usually this means the macro was only invoked conditionally.]])
fi])])
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 9
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX", "GCJ", or "OBJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
# dependency, and given that the user is not expected to run this macro,
# just rely on AC_PROG_CC.
AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
[$1], CXX, [depcc="$CXX" am_compiler_list=],
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
[$1], UPC, [depcc="$UPC" am_compiler_list=],
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
[depcc="$$1" am_compiler_list=])
AC_CACHE_CHECK([dependency style of $depcc],
[am_cv_$1_dependencies_compiler_type],
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named `D' -- because `-MD' means `put the output
# in D'.
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
# We will build objects and dependencies in a subdirectory because
# it helps to detect inapplicable dependency modes. For instance
# both Tru64's cc and ICC support -MD to output dependencies as a
# side effect of compilation, but ICC will put the dependencies in
# the current directory while Tru64 will put them in the object
# directory.
mkdir sub
am_cv_$1_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
# we should not choose a depcomp mode which is confused by this.
#
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
# Solaris 8's {/usr,}/bin/sh.
touch sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
case $depmode in
nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested
if test "x$enable_dependency_tracking" = xyes; then
continue
else
break
fi
;;
none) break ;;
esac
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this.
if depmode=$depmode \
source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
# that says an option was ignored or not supported.
# When given -MP, icc 7.0 and 7.1 complain thusly:
# icc: Command line warning: ignoring option '-M'; no argument required
# The diagnosis changed in icc 8.0:
# icc: Command line remark: option '-MP' not supported
if (grep 'ignoring option' conftest.err ||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
am_cv_$1_dependencies_compiler_type=$depmode
break
fi
fi
done
cd ..
rm -rf conftest.dir
else
am_cv_$1_dependencies_compiler_type=none
fi
])
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
AM_CONDITIONAL([am__fastdep$1], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
])
# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
])
# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
[AC_ARG_ENABLE(dependency-tracking,
[ --disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors])
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])dnl
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
])
# Generate code to set up dependency tracking. -*- Autoconf -*-
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
#serial 3
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[for mf in $CONFIG_FILES; do
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
# We used to match only the files named `Makefile.in', but
# some people rename them; so instead we look at the file content.
# Grep'ing the first line is not enough: some people post-process
# each Makefile.in and add a new line on top of each file to say so.
# Grep'ing the whole file is not good either: AIX grep has a line
# limit of 2048, but all sed's we know have understand at least 4000.
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
dirpart=`AS_DIRNAME("$mf")`
else
continue
fi
# Extract the definition of DEPDIR, am__include, and am__quote
# from the Makefile without running `make'.
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
# When using ansi2knr, U may be empty or an underscore; expand it
U=`sed -n 's/^U = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
# simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`AS_DIRNAME(["$file"])`
AS_MKDIR_P([$dirpart/$fdir])
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
# AM_OUTPUT_DEPENDENCY_COMMANDS
# -----------------------------
# This macro should only be invoked once -- use via AC_REQUIRE.
#
# This code is only required when automatic dependency tracking
# is enabled. FIXME. This creates each `.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 8
# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
# Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2008 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 13
# This macro actually does too much. Some checks are only needed if
# your package does certain things. But this isn't really a big deal.
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS])
# -----------------------------------------------
# The call with PACKAGE and VERSION arguments is the old style
# call (pre autoconf-2.50), which is being phased out. PACKAGE
# and VERSION should now be passed to AC_INIT and removed from
# the call to AM_INIT_AUTOMAKE.
# We support both call styles for the transition. After
# the next Automake release, Autoconf can make the AC_INIT
# arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_PREREQ([2.60])dnl
dnl Autoconf wants to disallow AM_ names. We explicitly allow
dnl the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
AC_REQUIRE([AC_PROG_INSTALL])dnl
if test "`cd $srcdir && pwd`" != "`pwd`"; then
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
# is not polluted with repeated "-I."
AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
# test to see if srcdir already configured
if test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
fi
fi
# test whether we have cygpath
if test -z "$CYGPATH_W"; then
if (cygpath --version) >/dev/null 2>/dev/null; then
CYGPATH_W='cygpath -w'
else
CYGPATH_W=echo
fi
fi
AC_SUBST([CYGPATH_W])
# Define the identity of the package.
dnl Distinguish between old-style and new-style calls.
m4_ifval([$2],
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
AC_SUBST([PACKAGE], [$1])dnl
AC_SUBST([VERSION], [$2])],
[_AM_SET_OPTIONS([$1])dnl
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
_AM_IF_OPTION([no-define],,
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AM_PROG_INSTALL_SH
AM_PROG_INSTALL_STRIP
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
[_AM_PROG_TAR([v7])])])
_AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_CC],
[_AM_DEPENDENCIES(CC)],
[define([AC_PROG_CC],
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_CXX],
[_AM_DEPENDENCIES(CXX)],
[define([AC_PROG_CXX],
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
[_AM_DEPENDENCIES(OBJC)],
[define([AC_PROG_OBJC],
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
])
])
# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
# that is generated. The stamp files are numbered to have different names.
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
# loop where config.status creates the headers, so we can generate
# our stamp files there.
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
[# Compute $1's index in $config_headers.
_am_arg=$1
_am_stamp_count=1
for _am_header in $config_headers :; do
case $_am_header in
$_am_arg | $_am_arg:* )
break ;;
* )
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
esac
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
AC_SUBST(install_sh)])
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# Check whether the underlying file-system supports filenames
# with a leading dot. For instance MS-DOS doesn't.
AC_DEFUN([AM_SET_LEADING_DOT],
[rm -rf .tst 2>/dev/null
mkdir .tst 2>/dev/null
if test -d .tst; then
am__leading_dot=.
else
am__leading_dot=_
fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 3
# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
am__doit:
@echo done
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
am__include="#"
am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# We grep out `Entering directory' and `Leaving directory'
# messages which can occur if `w' ends up in MAKEFLAGS.
# In particular we don't look at `^make:' because GNU make might
# be invoked under some other name (usually "gmake"), in which
# case it prints its new name instead of `make'.
if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
am__include=include
am__quote=
_am_result=GNU
fi
# Now try BSD make style include.
if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
am__include=.include
am__quote="\""
_am_result=BSD
fi
fi
AC_SUBST([am__include])
AC_SUBST([am__quote])
AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 5
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
AC_DEFUN([AM_MISSING_PROG],
[AC_REQUIRE([AM_MISSING_HAS_RUN])
$1=${$1-"${am_missing_run}$2"}
AC_SUBST($1)])
# AM_MISSING_HAS_RUN
# ------------------
# Define MISSING if not defined so far and test if it supports --run.
# If it does, set am_missing_run to use it, otherwise, to nothing.
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
AC_MSG_WARN([`missing' script is too old or missing])
fi
])
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_MKDIR_P
# ---------------
# Check for `mkdir -p'.
AC_DEFUN([AM_PROG_MKDIR_P],
[AC_PREREQ([2.60])dnl
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
dnl while keeping a definition of mkdir_p for backward compatibility.
dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
dnl Makefile.ins that do not define MKDIR_P, so we do our own
dnl adjustment using top_builddir (which is defined more often than
dnl MKDIR_P).
AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
case $mkdir_p in
[[\\/$]]* | ?:[[\\/]]*) ;;
*/*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
esac
])
# Helper functions for option handling. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 3
# _AM_MANGLE_OPTION(NAME)
# -----------------------
AC_DEFUN([_AM_MANGLE_OPTION],
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
# _AM_SET_OPTION(NAME)
# ------------------------------
# Set option NAME. Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION],
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
# _AM_SET_OPTIONS(OPTIONS)
# ----------------------------------
# OPTIONS is a space-separated list of Automake options.
AC_DEFUN([_AM_SET_OPTIONS],
[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
# -------------------------------------------
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
# Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 4
# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
# Just in case
sleep 1
echo timestamp > conftest.file
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
if test "$[*]" = "X"; then
# -L didn't work.
set X `ls -t $srcdir/configure conftest.file`
fi
rm -f conftest.file
if test "$[*]" != "X $srcdir/configure conftest.file" \
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
# If neither matched, then we have a broken ls. This can happen
# if, for instance, CONFIG_SHELL is bash and it inherits a
# broken ls alias from the environment. This has actually
# happened. Such a system could not be considered "sane".
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
alias in your environment])
fi
test "$[2]" = conftest.file
)
then
# Ok.
:
else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
AC_MSG_RESULT(yes)])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# AM_PROG_INSTALL_STRIP
# ---------------------
# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
# Fortunately install-sh will honor a STRIPPROG variable, so we
# always use install-sh in `make install-strip', and initialize
# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
# Installed binaries are usually stripped using `strip' when the user
# run `make install-strip'. However `strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the `STRIP' environment variable to overrule this program.
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
if test "$cross_compiling" != no; then
AC_CHECK_TOOL([STRIP], [strip], :)
fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Copyright (C) 2006 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# _AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
# This macro is traced by Automake.
AC_DEFUN([_AM_SUBST_NOTMAKE])
# Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# _AM_PROG_TAR(FORMAT)
# --------------------
# Check how to create a tarball in format FORMAT.
# FORMAT should be one of `v7', `ustar', or `pax'.
#
# Substitute a variable $(am__tar) that is a command
# writing to stdout a FORMAT-tarball containing the directory
# $tardir.
# tardir=directory && $(am__tar) > result.tar
#
# Substitute a variable $(am__untar) that extract such
# a tarball read from stdin.
# $(am__untar) < result.tar
AC_DEFUN([_AM_PROG_TAR],
[# Always define AMTAR for backward compatibility.
AM_MISSING_PROG([AMTAR], [tar])
m4_if([$1], [v7],
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
[m4_case([$1], [ustar],, [pax],,
[m4_fatal([Unknown tar format])])
AC_MSG_CHECKING([how to create a $1 tar archive])
# Loop over all known methods to create a tar archive until one works.
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
# Do not fold the above two line into one, because Tru64 sh and
# Solaris sh will not grok spaces in the rhs of `-'.
for _am_tool in $_am_tools
do
case $_am_tool in
gnutar)
for _am_tar in tar gnutar gtar;
do
AM_RUN_LOG([$_am_tar --version]) && break
done
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
am__untar="$_am_tar -xf -"
;;
plaintar)
# Must skip GNU tar: if it does not support --format= it doesn't create
# ustar tarball either.
(tar --version) >/dev/null 2>&1 && continue
am__tar='tar chf - "$$tardir"'
am__tar_='tar chf - "$tardir"'
am__untar='tar xf -'
;;
pax)
am__tar='pax -L -x $1 -w "$$tardir"'
am__tar_='pax -L -x $1 -w "$tardir"'
am__untar='pax -r'
;;
cpio)
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
am__untar='cpio -i -H $1 -d'
;;
none)
am__tar=false
am__tar_=false
am__untar=false
;;
esac
# If the value was cached, stop now. We just wanted to have am__tar
# and am__untar set.
test -n "${am_cv_prog_tar_$1}" && break
# tar/untar a dummy directory, and stop if the command works
rm -rf conftest.dir
mkdir conftest.dir
echo GrepMe > conftest.dir/file
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
rm -rf conftest.dir
if test -s conftest.tar; then
AM_RUN_LOG([$am__untar <conftest.tar])
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
fi
done
rm -rf conftest.dir
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
m4_include([acinclude.m4])

@ -0,0 +1,257 @@
/* config.h.in. Generated from configure.in by autoheader. */
/* Define if building universal (internal helper macro) */
#undef AC_APPLE_UNIVERSAL_BUILD
/* 386 architecture */
#undef ARCH_386
/* x86 architecture */
#undef ARCH_X86
/* x86_64 architecture */
#undef ARCH_X86_64
/* HAL API version 0.4 */
#undef HAL_0_4
/* Define if you have the CoreAudio API */
#undef HAVE_COREAUDIO
/* Define to 1 if you have the <crt_externs.h> header file. */
#undef HAVE_CRT_EXTERNS_H
/* Defines if your system has the crypt function */
#undef HAVE_CRYPT
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* compile in HAL support */
#undef HAVE_HAL
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define if you have libjpeg */
#undef HAVE_LIBJPEG
/* Define if you have libpng */
#undef HAVE_LIBPNG
/* Define if you have a working libpthread (will enable threaded code) */
#undef HAVE_LIBPTHREAD
/* Define if you have libz */
#undef HAVE_LIBZ
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define if your system needs _NSGetEnviron to set up the environment */
#undef HAVE_NSGETENVIRON
/* openGL support */
#undef HAVE_OPENGL
/* Define if you have the res_init function */
#undef HAVE_RES_INIT
/* Define if you have a STL implementation by SGI */
#undef HAVE_SGI_STL
/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define if you have strlcat */
#undef HAVE_STRLCAT
/* Define if you have the strlcat prototype */
#undef HAVE_STRLCAT_PROTO
/* Define if you have strlcpy */
#undef HAVE_STRLCPY
/* Define if you have the strlcpy prototype */
#undef HAVE_STRLCPY_PROTO
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if you have the `vsnprintf' function. */
#undef HAVE_VSNPRINTF
/* Suffix for lib directories */
#undef KDELIBSUFF
/* Define a safe value for MAXPATHLEN */
#undef KDEMAXPATHLEN
/* new ffmpeg */
#undef NEW_FFMPEG
/* No openGL support */
#undef NO_OPENGL
/* old ffmpeg */
#undef OLD_FFMPEG
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* The size of `char *', as computed by sizeof. */
#undef SIZEOF_CHAR_P
/* The size of `int', as computed by sizeof. */
#undef SIZEOF_INT
/* The size of `long', as computed by sizeof. */
#undef SIZEOF_LONG
/* The size of `short', as computed by sizeof. */
#undef SIZEOF_SHORT
/* The size of `size_t', as computed by sizeof. */
#undef SIZEOF_SIZE_T
/* The size of `unsigned long', as computed by sizeof. */
#undef SIZEOF_UNSIGNED_LONG
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Version number of package */
#undef VERSION
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
# define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
# undef WORDS_BIGENDIAN
# endif
#endif
/*
* jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
* headers and I'm too lazy to write a configure test as long as only
* unixware is related
*/
#ifdef _UNIXWARE
#define HAVE_BOOLEAN
#endif
/*
* AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
* that defines bzero.
*/
#if defined(_AIX)
#include <strings.h>
#endif
#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
# include <sys/time.h>
# include <crt_externs.h>
# define environ (*_NSGetEnviron())
#endif
#if !defined(HAVE_STRLCAT_PROTO)
#ifdef __cplusplus
extern "C" {
#endif
unsigned long strlcat(char*, const char*, unsigned long);
#ifdef __cplusplus
}
#endif
#endif
#if !defined(HAVE_STRLCPY_PROTO)
#ifdef __cplusplus
extern "C" {
#endif
unsigned long strlcpy(char*, const char*, unsigned long);
#ifdef __cplusplus
}
#endif
#endif
/*
* On HP-UX, the declaration of vsnprintf() is needed every time !
*/
#if !defined(HAVE_VSNPRINTF) || defined(hpux)
#if __STDC__
#include <stdarg.h>
#include <stdlib.h>
#else
#include <varargs.h>
#endif
#ifdef __cplusplus
extern "C"
#endif
int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
#ifdef __cplusplus
extern "C"
#endif
int snprintf(char *str, size_t n, char const *fmt, ...);
#endif
#if defined(__SVR4) && !defined(__svr4__)
#define __svr4__ 1
#endif
/* Compatibility define */
#undef ksize_t
/* Define the real type of socklen_t */
#undef socklen_t

@ -0,0 +1,3 @@
./admin/configure.in.min
configure.in.in
./k9devices/configure.in.in

@ -0,0 +1,273 @@
dnl This file is part of the KDE libraries/packages
dnl Copyright (C) 2001 Stephan Kulow (coolo@kde.org)
dnl This file is free software; you can redistribute it and/or
dnl modify it under the terms of the GNU Library General Public
dnl License as published by the Free Software Foundation; either
dnl version 2 of the License, or (at your option) any later version.
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Library General Public License for more details.
dnl You should have received a copy of the GNU Library General Public License
dnl along with this library; see the file COPYING.LIB. If not, write to
dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
dnl Boston, MA 02110-1301, USA.
# Original Author was Kalle@kde.org
# I lifted it in some mater. (Stephan Kulow)
# I used much code from Janos Farkas
dnl Process this file with autoconf to produce a configure script.
AC_INIT(acinclude.m4) dnl a source file from your sub dir
dnl This is so we can use kde-common
AC_CONFIG_AUX_DIR(admin)
dnl This ksh/zsh feature conflicts with `cd blah ; pwd`
unset CDPATH
dnl Checking host/target/build systems, for make, install etc.
AC_CANONICAL_SYSTEM
dnl Perform program name transformation
AC_ARG_PROGRAM
dnl Automake doc recommends to do this only here. (Janos)
AM_INIT_AUTOMAKE(k9copy, 1.2.4) dnl searches for some needed programs
KDE_SET_PREFIX
dnl generate the config header
AM_CONFIG_HEADER(config.h) dnl at the distribution this done
dnl Checks for programs.
AC_CHECK_COMPILERS
AC_ENABLE_SHARED(yes)
AC_ENABLE_STATIC(no)
KDE_PROG_LIBTOOL
dnl for NLS support. Call them in this order!
dnl WITH_NLS is for the po files
AM_KDE_WITH_NLS
KDE_USE_QT(3.0.0)
AC_PATH_KDE
#MIN_CONFIG(3.0.0)
dnl PACKAGE set before
AC_C_BIGENDIAN
AC_CHECK_KDEMAXPATHLEN
case "$target" in
i?86-* | k?-*)
AC_DEFINE([ARCH_X86],,[x86 architecture])
AC_DEFINE([ARCH_386],,[386 architecture])
ARCH_X86=yes
ARCH_386=yes
ARCH_X86_64=no
;;
x86_64-*)
AC_DEFINE([ARCH_X86_64],,[x86_64 architecture])
ARCH_X86=no
ARCH_386=no
ARCH_X86_64=yes
;;
*)
ARCH_X86=no
ARCH_386=no
ARCH_X86_64=no
;;
esac
AC_MSG_CHECKING(for X86 architecture)
AC_MSG_RESULT($ARCH_X86)
AM_CONDITIONAL(ARCH_X86, [test "$ARCH_X86" = "yes"])
AC_MSG_CHECKING(for 386 architecture)
AC_MSG_RESULT($ARCH_386)
AM_CONDITIONAL(ARCH_386, [test "$ARCH_386" = "yes"])
AC_MSG_CHECKING(for X86_64 architecture)
AC_MSG_RESULT($ARCH_X86_64)
AM_CONDITIONAL(ARCH_X86_64, [test "$ARCH_X86_64" = "yes"])
have_gl=no
AC_CHECK_HEADER([GL/gl.h], \
[AC_DEFINE(HAVE_OPENGL, 1, [openGL support]) have_gl=yes], \
[AC_DEFINE(NO_OPENGL, 1, [No openGL support])])
AC_CHECK_HEADER([ffmpeg/avcodec.h], \
[AC_DEFINE(OLD_FFMPEG,1, [old ffmpeg])], \
[AC_CHECK_HEADER([libavcodec/avcodec.h], \
[AC_DEFINE(NEW_FFMPEG,1, [new ffmpeg])], \
[AC_MSG_ERROR([libavcodec may be missing]) ])])
have_hal=no
AC_MSG_CHECKING(for the HAL)
AC_ARG_ENABLE([k3bdevices],
AC_HELP_STRING([--enable-k3bdevices],
[do not activate hal/dbus support (use k3bdevice instead)]),
[enable_hal=no],
[enable_hal=yes])
if test x"$enable_hal" = xyes; then
hal_inc=NOTFOUND
hal_lib=NOTFOUND
hal=NOTFOUND
search_incs="$kde_includes /usr/include /usr/include/hal /usr/local/include /usr/local/include/hal"
AC_FIND_FILE(libhal.h libhal-storage.h, $search_incs, hal_incdir)
if [test -r $hal_incdir/libhal.h] ; then
HAL_INCS="-I$hal_incdir"
hal_inc=FOUND
fi
if test -r $hal_incdir/libhal-storage.h ; then
hal_storage_version=4
grep LibHalVolume $hal_incdir/libhal-storage.h \
> /dev/null 2>&1 && hal_storage_version=5
if test $hal_storage_version = 4 ; then
AC_DEFINE(HAL_0_4, , [HAL API version 0.4])
fi
fi
search_libs="$kde_libraries /usr/lib64 /usr/lib /usr/local/lib /lib /lib64"
AC_FIND_FILE(libhal.so, $search_libs, hal_libdir)
if [test -r $hal_libdir/libhal.so] ; then
HAL_LIBS="-L$hal_libdir -lhal"
hal_lib=FOUND
fi
if [test -r $hal_libdir/libhal-storage.so] ; then
HAL_LIBS_STORAGE="-L$hal_libdir -lhal-storage"
hal_lib_storage=FOUND
fi
if [test $hal_inc = FOUND] && [test $hal_lib = FOUND] ; then
AC_MSG_RESULT(headers $hal_incdir libraries $hal_libdir)
hal=FOUND
else
AC_MSG_RESULT(searched but not found)
AC_MSG_ERROR(libhal may be missing)
fi
AC_SUBST(HAL_INCS)
AC_SUBST(HAL_LIBS)
########### Check for DBus
AC_MSG_CHECKING(for DBus)
dbus_inc=NOTFOUND
dbus_lib=NOTFOUND
dbus=NOTFOUND
search_incs="$kde_includes /usr/include /usr/include/dbus-1.0 /usr/local/include /usr/local/include/dbus-1.0"
AC_FIND_FILE(dbus/dbus.h, $search_incs, dbus_incdir)
search_incs_arch_deps="$kde_includes /usr/lib64/dbus-1.0/include /usr/lib/dbus-1.0/include /usr/local/lib/dbus-1.0/include"
AC_FIND_FILE(dbus/dbus-arch-deps.h, $search_incs_arch_deps, dbus_incdir_arch_deps)
if [test -r $dbus_incdir/dbus/dbus.h] && [test -r $dbus_incdir_arch_deps/dbus/dbus-arch-deps.h] ; then
DBUS_INCS="-I$dbus_incdir -I$dbus_incdir_arch_deps"
dbus_inc=FOUND
fi
search_libs="$kde_libraries /usr/lib64 /usr/lib /usr/local/lib /lib /lib64"
AC_FIND_FILE(libdbus-1.so, $search_libs, dbus_libdir)
if test -r $dbus_libdir/libdbus-1.so ; then
DBUS_LIBS="-L$dbus_libdir -ldbus-1"
dbus_lib=FOUND
fi
if [test $dbus_inc = FOUND] && [test $dbus_lib = FOUND] ; then
AC_MSG_RESULT(headers $dbus_incdir $dbus_incdir_arch_deps libraries $dbus_libdir)
dbus=FOUND
else
AC_MSG_RESULT(searched but not found)
AC_MSG_ERROR(dbus may be missing)
fi
AC_SUBST(DBUS_INCS)
AC_SUBST(DBUS_LIBS)
########### Check if media HAL backend should be compiled
HAL_DBUS_LIBS=""
if [test "x$hal" = "xFOUND"] && [test "x$dbus" = "xFOUND"] && [ test $hal_storage_version = 5 ] ; then
AC_DEFINE(HAVE_HAL, , [compile in HAL support])
have_hal=yes
HAL_DBUS_LIBS="$HAL_LIBS $HAL_LIBS_STORAGE $DBUS_LIBS"
fi
AC_SUBST(HAL_DBUS_LIBS)
else
search_incs="$kde_includes /usr/include /usr/local/include"
AC_FIND_FILE(k3bdevice.h, $search_incs, k3b_incdir)
if [test -r $k3b_incdir/k3bdevice.h] ; then
k3b_inc=FOUND
fi
search_libs="$kde_libraries /usr/lib64 /usr/lib /usr/local/lib /lib /lib64"
AC_FIND_FILE(libk3bdevice.so, $search_libs, k3b_libdir)
if [test -r $k3b_libdir/libk3bdevice.so] ; then
K3B_LIBS="-lk3bdevice"
k3b_lib=FOUND
fi
if [test $k3b_inc = FOUND] && [test $k3b_lib = FOUND] ; then
AC_MSG_RESULT(headers $k3b_incdir libraries $k3b_libdir)
k3b=FOUND
else
AC_MSG_RESULT(libk3bdevice searched but not found)
AC_MSG_ERROR(libk3bdevice may be missing)
fi
AC_SUBST(K3B_LIBS)
fi
KDE_CREATE_SUBDIRSLIST
AC_CONFIG_FILES([ Makefile ])
AC_CONFIG_FILES([ doc/Makefile ])
AC_CONFIG_FILES([ doc/k9copy/Makefile ])
AC_CONFIG_FILES([ dvdread/Makefile ])
AC_CONFIG_FILES([ k9author/Makefile ])
AC_CONFIG_FILES([ k9decmpeg/Makefile ])
AC_CONFIG_FILES([ k9devices/Makefile ])
AC_CONFIG_FILES([ k9Mplayer/Makefile ])
AC_CONFIG_FILES([ k9vamps/Makefile ])
AC_CONFIG_FILES([ libdvdnav/Makefile ])
AC_CONFIG_FILES([ libk9copy/Makefile ])
AC_CONFIG_FILES([ po/Makefile ])
AC_CONFIG_FILES([ src/Makefile ])
AC_CONFIG_FILES([ src/icons/Makefile ])
AC_OUTPUT
if test "$all_tests" = "bad"; then
if test ! "$cache_file" = "/dev/null"; then
echo ""
echo "Please remove the file $cache_file after changing your setup"
echo "so that configure will find the changes next time."
echo ""
fi
else
echo ""
echo "Good - your configure finished. Start make now"
echo ""
fi

@ -0,0 +1,54 @@
#MIN_CONFIG(3.0.0)
AM_INIT_AUTOMAKE(k9copy, 1.2.4)
AC_C_BIGENDIAN
AC_CHECK_KDEMAXPATHLEN
case "$target" in
i?86-* | k?-*)
AC_DEFINE([ARCH_X86],,[x86 architecture])
AC_DEFINE([ARCH_386],,[386 architecture])
ARCH_X86=yes
ARCH_386=yes
ARCH_X86_64=no
;;
x86_64-*)
AC_DEFINE([ARCH_X86_64],,[x86_64 architecture])
ARCH_X86=no
ARCH_386=no
ARCH_X86_64=yes
;;
*)
ARCH_X86=no
ARCH_386=no
ARCH_X86_64=no
;;
esac
AC_MSG_CHECKING(for X86 architecture)
AC_MSG_RESULT($ARCH_X86)
AM_CONDITIONAL(ARCH_X86, [test "$ARCH_X86" = "yes"])
AC_MSG_CHECKING(for 386 architecture)
AC_MSG_RESULT($ARCH_386)
AM_CONDITIONAL(ARCH_386, [test "$ARCH_386" = "yes"])
AC_MSG_CHECKING(for X86_64 architecture)
AC_MSG_RESULT($ARCH_X86_64)
AM_CONDITIONAL(ARCH_X86_64, [test "$ARCH_X86_64" = "yes"])
have_gl=no
AC_CHECK_HEADER([GL/gl.h], \
[AC_DEFINE(HAVE_OPENGL, 1, [openGL support]) have_gl=yes], \
[AC_DEFINE(NO_OPENGL, 1, [No openGL support])])
AC_CHECK_HEADER([ffmpeg/avcodec.h], \
[AC_DEFINE(OLD_FFMPEG,1, [old ffmpeg])], \
[AC_CHECK_HEADER([libavcodec/avcodec.h], \
[AC_DEFINE(NEW_FFMPEG,1, [new ffmpeg])], \
[AC_MSG_ERROR([libavcodec may be missing]) ])])

@ -0,0 +1,6 @@
# the SUBDIRS is filled automatically by am_edit. If files are
# in this directory they are installed into the english dir
KDE_LANG = en
KDE_DOCS = AUTO
SUBDIRS = k9copy

@ -0,0 +1,5 @@
KDE_LANG = en
KDE_DOCS = k9copy
kde_docs_KDEDOCS = mainwindow.png open1.png open2.png treeview.png \
keepmenus.png playback.png btncopy.png settingsDVD.png btnmp4.png settingsMP4.png \
settingsMencoder.png

Binary file not shown.

Binary file not shown.

@ -0,0 +1,459 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN" "dtd/kdex.dtd" [
<!-- Define an entity for your application if it is not part of KDE
CVS -->
<!ENTITY k9copy "<application>k9copy</application>">
<!ENTITY kappname "&k9copy;"><!-- replace kmyapplication here
do *not* replace kappname-->
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc. Leave
this unchanged if your
application is not maintained in KDE CVS -->
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"> <!-- ONLY If you are writing non-English
original documentation, change
the language here -->
]>
<book lang="&language;">
<bookinfo>
<title>&k9copy; Handbook</title>
<authorgroup>
<author>
<firstname>Jean-Michel</firstname>
<othername></othername>
<surname>Petit</surname>
<affiliation>
<address><email>k9copy@free.fr</email></address>
</affiliation>
</author>
</authorgroup>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
<copyright>
<year>2004</year>
<year>2007</year>
<holder>The k9copy Author</holder>
</copyright>
<!-- Translators: put here the copyright notice of the translation -->
<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
and in the FDL itself on how to use it. -->
<legalnotice>&FDLNotice;</legalnotice>
<!-- Date and version information of the documentation
Don't forget to include this last date and this last revision number, we
need them for translation coordination !
Please respect the format of the date (DD/MM/YYYY) and of the version
(V.MM.LL), it could be used by automation scripts.
Do NOT change these in the translation. -->
<date>02/11/2007</date>
<releaseinfo>1.1.0</releaseinfo>
<!-- Abstract about this handbook -->
<abstract>
<para>
A DVD Backup tool for KDE. <ulink url="http://k9copy.sourceforge.net">http://k9copy.sourceforge.net</ulink>
</para>
</abstract>
<!-- This is a set of Keywords for indexing by search engines.
Please at least include KDE, the KDE package it is in, the name
of your application, and a few relevant keywords. -->
<keywordset>
<keyword>k9copy</keyword>
<keyword>vamps</keyword>
<keyword>dvd</keyword>
</keywordset>
</bookinfo>
<!-- The contents of the documentation begin here. Label
each chapter so with the id attribute. This is necessary for two reasons: it
allows you to easily reference the chapter from other chapters of your
document, and if there is no ID, the name of the generated HTML files will vary
from time to time making it hard to manage for maintainers and for the CVS
system. Any chapter labelled (OPTIONAL) may be left out at the author's
discretion. Other chapters should not be left out in order to maintain a
consistent documentation style across all KDE apps. -->
<chapter id="k9copy-app">
<title>k9copy shell</title>
<sect1 id="mainwindow">
<title>The Main Window</title>
<screenshot>
<screeninfo>Main Window</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="mainwindow.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>The main goal of k9copy is to be an easy to use and powerfull DVD backup app.
</para>
<para>
Once oppened, the DVD structure is shown in a treeview (the central widget).
</para>
<para>
The selection is made by checkboxes. You can select the entire DVD, a Titleset or just a specific language or subtitle from a DVD title.
</para>
<para>The backup can be made in three ways :</para>
<para>- backup with orginal menus. In this case, k9copy reproduces the orginial structure of the DVD without the unselected parts.
</para>
<para>- backup without menus. In this case, k9copy reproduces the orginial structure of the DVD without the unselected parts and without menus.
</para>
<para>- backup without menus via dvdauthor . In this case, k9copy makes a reauthoring of the DVD. K9copy uses libdvdnav from xine to ensure that the DVD will be copied as it were played with xine.
</para>
</sect1>
<sect1 id="backupdvd">
<title>Make a dvd backup</title>
<sect2>
<title>Open the dvd</title>
<para>
Select a dvd device from the list or click on buttons on right of the list to select a directory or a dvd image file.
<inlinemediaobject>
<imageobject>
<imagedata fileref="open1.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para><para>
Click on the button Open from the main toolbar or <guimenuitem>File->Open</guimenuitem> from the main menu.
<inlinemediaobject>
<imageobject>
<imagedata fileref="open2.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
<para>
The treeview will be filled with the DVD structure
</para>
</sect2>
<sect2>
<title>Selection of titles to copy</title>
<screenshot>
<screeninfo>DVD structure</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="treeview.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
Use the checkbox at the top of the treeview to make a copy of the entire DVD.
</para>
<para>
Use the checkbox beside the titleset to make a copy of a whole titleset.
</para>
<para>
It's now possible to selecte only the wanted chapters from a title.
</para>
<para>
A title must have a video stream : if you select an audio language or a subtitle language, the video stream will be automatically selected. If you deselect the video stream, the title will not be backuped.
</para>
</sect2>
<sect2>
<title>Playback options of the new DVD</title>
<para>
If the DVD you want to backup has interactive menus, you can keep them on your backup. Some DVDs have menus whose size is important. To preserve these menus would increase the shrink factor and would involve a loss of quality.
<inlinemediaobject>
<imageobject>
<imagedata fileref="keepmenus.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
<para>
If you chose not to preserve the menus, you can then define some playback options :
</para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="playback.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
<para>
When a title is selected, it appears in the Selected Titles list. Use buttons on the right of this list to define in which order the titles will be played.
</para>
<para>
You can define the default audio language or the default subtitle for each title. Hilite a title in the title list and the two comboboxes will be filled with the available languages (those which where selected in the treeview).
</para>
</sect2>
<sect2>
<title>Perform the copy</title>
<para>
Once you have selected the titles, you can proceed with copy :
<inlinemediaobject>
<imageobject>
<imagedata fileref="btncopy.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
</sect2>
</sect1>
<sect1 id="dvdbackupsettings">
<title>DVD backup settings</title>
<screenshot>
<screeninfo>DVD backup settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="settingsDVD.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
<itemizedlist>
<listitem><para>Temporary files will be placed in the <guilabel>output directory</guilabel> </para></listitem>
<listitem><para>Define the max size of the backup</para></listitem>
<listitem><para>By default, &k9copy; uses its own burning method. Since the burning options are limited, you can use the a powerfull burning software: k3b.</para></listitem>
<listitem><para>AutoBurn allows to run the DVD burning without confirmation.</para></listitem>
<listitem><para>When using quickscan, &k9copy; will not analyze the dvd title to estimate the sizes of each stream. The DVD analyze can take a long time if DVD contains many features.</para></listitem>
</itemizedlist>
</para>
</sect1>
<sect1 id="encodemp4">
<title>MPEG-4 Encoding</title>
<para>&k9copy; offers the possibility to encode DVD titles in MPEG-4 via MEncoder.
</para>
<para>
Just select an audio stream from a title in the treeview and click on the button <inlinemediaobject>
<imageobject>
<imagedata fileref="btnmp4.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
</sect1>
<sect1 id="mp4backupsettings">
<title>MPEG-4 settings</title>
<screenshot>
<screeninfo>MPEG-4 settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="settingsMP4.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
<itemizedlist>
<listitem><para>Select the codec used to encode mp4. Default codecs are XViD and lavc MP4, but you can add other codecs supported by MEncoder.</para></listitem>
<listitem><para>Choose the max size of an avi file an the number of files wanted.</para></listitem>
<listitem><para>Enter the width of the mpeg4 video.</para></listitem>
<listitem><para>Enter the height of the mpeg4 video.</para></listitem>
<listitem><para>Audio will be encoded in mp3 using lame. You can choose the bitrate of the mp3 audio stream.</para></listitem>
</itemizedlist>
</para>
</sect1>
<sect1 id="mencodersettings">
<title>MEncoder settings</title>
<screenshot>
<screeninfo>MEncoder settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="settingsMencoder.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
You can add codecs supported by MEncoder:
</para>
<para>Video example : xvid -xvidencopts bitrate=$VIDBR
</para>
<para>Audio example : mp3lame -lameopts abr:br=$AUDBR</para>
<para>
You can use following variables :
<itemizedlist>
<listitem><para>$VIDBR : video bitrate (calculated)</para></listitem>
<listitem><para>$AUDBR : audio bitrate (settings)</para></listitem>
<listitem><para>$WIDTH : width (settings)</para></listitem>
<listitem><para>$HEIGHT : height (settings)</para></listitem>
<listitem><para>$PASS : pass number (runtime)</para></listitem>
</itemizedlist>
</para>
</sect1>
</chapter>
<chapter id="cmdline-options">
<title>Command Line Options</title>
<para>Usage:</para>
<cmdsynopsis>
<command>k9copy</command>
<arg>--input </arg>
<arg>--output</arg>
<arg>--play</arg>
<arg>--dvdtitle</arg>
<arg>--startsector</arg>
<arg>--endsector</arg>
<arg>--audiofilter</arg>
<arg>--subpicturefilter</arg>
<arg>--vampsfactor</arg>
<arg>--inputsize</arg>
<arg>--totalsize</arg>
<arg>--dvdsize</arg>
<arg>--chapter</arg>
<arg>--cell</arg>
<arg>--inject</arg>
<arg>--initstatus</arg>
</cmdsynopsis>
<para></para>
<informaltable>
<tgroup cols="2">
<tbody>
<row><entry><para><option>--input (argument)</option></para></entry>
<entry><para>input device</para></entry>
</row>
<row>
<entry><para><option>--output (argument)</option></para></entry>
<entry><para>output device</para></entry>
</row>
<row>
<entry><para><option>--play</option></para></entry>
<entry><para>&k9copy; is used to play a title or part of title to stdout
</para></entry>
</row>
<row>
<entry><para><option>--dvdtitle (argument)</option></para></entry>
<entry><para>the dvd title to play</para></entry>
</row>
<row>
<entry><para><option>--startsector (argument)</option></para></entry>
<entry><para>sector to start playing from</para></entry>
</row>
<row>
<entry><para><option>--endsector (argument)</option></para></entry>
<entry><para>sector to end playing from</para></entry>
</row>
<row><entry><para><option>--audiofilter (argument,argument..)</option></para></entry>
<entry><para>Selection of audio streams</para></entry>
</row>
<row>
<entry><para><option>--subpicturefilter (argument,argument,..)</option></para></entry>
<entry><para>Selection of subtitles</para></entry>
</row>
<row>
<entry><para><option>--vampsfactor (argument)</option></para></entry>
<entry><para>Shrink factor</para></entry>
</row>
<row>
<entry><para><option>--inputsize (argument)</option></para></entry>
<entry><para>Size of the cell being copied</para></entry>
</row>
<row>
<entry><para><option>--totalsize (argument)</option></para></entry>
<entry><para>Total size of titles to play</para></entry>
</row>
<row>
<entry><para><option>--dvdsize (argument)</option></para></entry>
<entry><para>Final size of the dvd to produce</para></entry>
</row>
<row>
<entry><para><option>--chapter (argument)</option></para></entry>
<entry><para>Number of the chapter to play</para></entry>
</row>
<row>
<entry><para><option>--cell (argument)</option></para></entry>
<entry><para>Number of a cell from chapter to play</para></entry>
</row>
<row>
<entry><para><option>--inject (argument)</option></para></entry>
<entry><para>Name of the file used to save status between 2 calls of k9copy</para></entry>
</row>
<row>
<entry><para><option>--initstatus</option></para></entry>
<entry><para>Initialize status file</para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</chapter>
<chapter id="credits">
<title>Copyright and License</title>
<para>
Program copyright 2004-2007, Jean-Michel Petit
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove. Commercial development should -->
<!-- replace this with their copyright and either remove it or re-set this.-->
<!-- Determine which license your application is licensed under,
and delete all the remaining licenses below:
(NOTE: All documentation are licensed under the FDL,
regardless of what license the application uses) -->
&underGPL; <!-- GPL License -->
</chapter>
&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->

@ -0,0 +1,445 @@
<?xml version="1.0" ?>
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN" "dtd/kdex.dtd" [
<!-- Define an entity for your application if it is not part of KDE
CVS -->
<!ENTITY k9copy "<application>K9Copy</application>">
<!ENTITY kappname "&k9copy;"><!-- replace kmyapplication here
do *not* replace kappname-->
<!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc. Leave
this unchanged if your
application is not maintained in KDE CVS -->
<!ENTITY % addindex "IGNORE">
<!ENTITY % English "INCLUDE"> <!-- ONLY If you are writing non-English
original documentation, change
the language here -->
]>
<book lang="&language;">
<bookinfo>
<title>&k9copy; Handbook</title>
<authorgroup>
<author>
<firstname>Jean-Michel</firstname>
<othername></othername>
<surname>Petit</surname>
<affiliation>
<address><email>k9copy@free.fr</email></address>
</affiliation>
</author>
</authorgroup>
<!-- TRANS:ROLES_OF_TRANSLATORS -->
<copyright>
<year>2004</year>
<year>2006</year>
<holder>The K9Copy Authors</holder>
</copyright>
<!-- Translators: put here the copyright notice of the translation -->
<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
and in the FDL itself on how to use it. -->
<legalnotice>&FDLNotice;</legalnotice>
<!-- Date and version information of the documentation
Don't forget to include this last date and this last revision number, we
need them for translation coordination !
Please respect the format of the date (DD/MM/YYYY) and of the version
(V.MM.LL), it could be used by automation scripts.
Do NOT change these in the translation. -->
<date>04/06/2006</date>
<releaseinfo>1.1.0</releaseinfo>
<!-- Abstract about this handbook -->
<abstract>
<para>
A DVD Backup tool for KDE. <ulink url="http://k9copy.sourceforge.net">http://k9copy.sourceforge.net</ulink>
</para>
</abstract>
<!-- This is a set of Keywords for indexing by search engines.
Please at least include KDE, the KDE package it is in, the name
of your application, and a few relevant keywords. -->
<keywordset>
<keyword>k9copy</keyword>
<keyword>vamps</keyword>
<keyword>dvd</keyword>
</keywordset>
</bookinfo>
<!-- The contents of the documentation begin here. Label
each chapter so with the id attribute. This is necessary for two reasons: it
allows you to easily reference the chapter from other chapters of your
document, and if there is no ID, the name of the generated HTML files will vary
from time to time making it hard to manage for maintainers and for the CVS
system. Any chapter labelled (OPTIONAL) may be left out at the author's
discretion. Other chapters should not be left out in order to maintain a
consistent documentation style across all KDE apps. -->
<chapter id="k9copy-app">
<title>k9copy shell</title>
<sect1 id="mainwindow">
<title>The Main Window</title>
<screenshot>
<screeninfo>Main Window</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="mainwindow.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>The main goal of k9copy is to be an easy to use and powerfull DVD backup app.
</para>
<para>
Once oppened, the DVD structure is shown in a treeview (the central widget).
</para>
<para>
The selection is made by checkboxes. You can select the entire DVD, a Titleset or just a specific language or subtitle from a DVD title.
</para>
<para>For DVD backup there are two possibilities :</para>
<para>- backup with orginal menus. In this case, k9copy reproduces the orginial structure of the DVD without the unselected parts.
</para>
<para>- backup without menus. In this case, k9copy makes a reauthoring of the DVD. K9copy uses libdvdnav from xine to ensure that the DVD will be copied as it were played with xine.
</para>
</sect1>
<sect1 id="backupdvd">
<title>Making a dvd backup</title>
<sect2>
<title>Open the dvd</title>
<para>
Select a dvd device from the list or click on buttons on right of the list to select a directory or a dvd image file.
<inlinemediaobject>
<imageobject>
<imagedata fileref="open1.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para><para>
Click on the button Open from the main toolbar or <guimenuitem>File->Open</guimenuitem> from the main menu.
<inlinemediaobject>
<imageobject>
<imagedata fileref="open2.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
<para>
The treeview will be filled with the DVD structure
</para>
</sect2>
<sect2>
<title>Selection of titles to copy</title>
<screenshot>
<screeninfo>DVD structure</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="treeview.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
Use the checkbox at the top of the treeview to make a copy of the entire DVD.
</para>
<para>
Use the checkbox beside the titleset to make a copy of an entire titleset.
</para>
<para>
A title must have a video stream : if you select an audio language or a subtitle language, the video stream will be automatically selected. If you deselect the video stream, the title will not be backuped.
</para>
</sect2>
<sect2>
<title>Playback options of the new DVD</title>
<para>
If the DVD you want to backup has interactive menus, you can keep them on your backup. On some DVDs, menus are very big and keeping them will increase the shrink factor and reduce the quality of the video stream.
<inlinemediaobject>
<imageobject>
<imagedata fileref="keepmenus.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
<para>
If you have choosen to not keep original menus, it's possible to define some playback options :
</para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="playback.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
<para>
When a title is selected, it appears in the Selected Titles list. Use buttons on the right of this list to define in which order the titles will be played.
</para>
<para>
You can define the default audio language or the default subtitle for each title. Hilite a title in the title list and the two comboboxes will be filled with the available languages (those which where selected in the treeview).
</para>
</sect2>
<sect2>
<title>Executing the copy</title>
<para>
Once you have selected the titles, you can proceed with copy :
<inlinemediaobject>
<imageobject>
<imagedata fileref="btncopy.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
</sect2>
</sect1>
<sect1 id="dvdbackupsettings">
<title>DVD backup settings</title>
<screenshot>
<screeninfo>DVD backup settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="settingsDVD.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
<itemizedlist>
<listitem><para>Temporary files will be placed in the <guilabel>output directory</guilabel> </para></listitem>
<listitem><para>Define the max size of the backup</para></listitem>
<listitem><para>By default, &k9copy; uses its own burning method. Since the burning options are limited, you can use the a powerfull burning software: k3b.</para></listitem>
<listitem><para>AutoBurn allows to run the DVD burning without confirmation.</para></listitem>
<listitem><para>When using quickscan, &k9copy; will not analyze the dvd title to estimate the sizes of each stream. The DVD analyze can take a long time if DVD contains many features.</para></listitem>
</itemizedlist>
</para>
</sect1>
<sect1 id="encodemp4">
<title>Encoding MPEG-4</title>
<para>&k9copy; offers the possibility to encode DVD titles in MPEG-4 by using MEncoder.
</para>
<para>
Just select an audio stream from a title in the treeview and click on the button <inlinemediaobject>
<imageobject>
<imagedata fileref="btnmp4.png" format="PNG"/>
</imageobject>
</inlinemediaobject>
</para>
</sect1>
<sect1 id="mp4backupsettings">
<title>MPEG-4 settings</title>
<screenshot>
<screeninfo>MPEG-4 settings</screeninfo>
<mediaobject>
<imageobject>
<imagedata fileref="settingsMP4.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Screenshot</phrase>
</textobject>
</mediaobject>
</screenshot>
<para>
<itemizedlist>
<listitem><para>Select the codec used to encode mp4. Default codecs are XViD and lavc MP4, but you can add other codecs supported by MEncoder.</para></listitem>
<listitem><para>Choose the max size of an avi file an the number of files wanted.</para></listitem>
<listitem><para>Enter the width of the mpeg4 video.</para></listitem>
<listitem><para>Enter the height of the mpeg4 video.</para></listitem>
<listitem><para>Audio will be encoded in mp3 using lame. You can choose the bitrate of the mp3 audio stream.</para></listitem>
</itemizedlist>
</para>
</sect1>
</chapter>
<chapter id="cmdline-options">
<title>Command Line Options</title>
<para>Usage:</para>
<cmdsynopsis>
<command>k9copy</command>
<group choice="opt">
<option>f</option>
<option>p</option><option>w</option>
<option>a</option><option>x</option>
<option>d</option>
</group>
<arg>--fullscreen</arg>
<arg>--play</arg>
<arg>--audiodriver</arg>
<arg>--videodriver</arg>
<arg>--device</arg>
<arg>--verbose</arg>
<arg>--wizard</arg>
<arg rep="repeat"><replaceable>file</replaceable></arg>
</cmdsynopsis>
<para></para>
<informaltable>
<tgroup cols="2">
<tbody>
<row><entry><para><option>-f,--fullscreen</option></para></entry>
<entry><para>Starts &k9copy; in fullscreen mode.
</para></entry>
</row>
<row>
<entry><para><option>-p,--play</option></para></entry>
<entry><para>Starts with last played track.
</para></entry>
</row>
<row>
<entry><para><option>-a,--audiodriver (argument)</option></para></entry>
<entry><para>Sets the audio driver. Arguments can be: alsa, arts, oss, ...
</para></entry>
</row>
<row>
<entry><para><option>-x,--videodriver (argument)</option></para></entry>
<entry><para>Sets the video driver. Arguments can be: xv, xshm, dxr3 ,...
</para></entry>
</row>
<row>
<entry><para><option>-d,--device (argument)</option></para></entry>
<entry><para>Sets the Audio-CD/VCD/DVD path to (argument).
</para></entry>
</row>
<row>
<entry><para><option>--verbose</option></para></entry>
<entry><para>Outputs more debug messages.
</para></entry>
</row>
<row><entry><para><option>-w,--wizard</option></para></entry>
<entry><para>Runs installation wizard.
</para></entry>
</row>
<row>
<entry><para><option>file...</option></para></entry>
<entry><para>Files to play. Can be local files, a directory, an URL or "AudioCD", "VCD", "DVD".
</para></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</chapter>
<chapter id="faq">
<title>Questions and Answers</title>
<para>
<ulink url="http://k9copy.sourceforge.net/index.php?page=faq">Kaffeine-FAQ</ulink>
</para>
<para>
<ulink url="http://xinehq.de/index.php/faq">xine-FAQ</ulink>
</para>
<para>For Questions use the <ulink url="http://lists.sourceforge.net/lists/listinfo/k9copy-user">k9copy-user mailinglist</ulink>.
(First check the <ulink url="http://sourceforge.net/mailarchive/forum.php?forum_id=34875">archive</ulink>
if the question is still answered.)
</para>
</chapter>
<chapter id="bug">
<title>Reporting BUGS</title>
<para>
Before you report a bug, please first make sure the bug has not been reported
yet in the bug tracking system at <ulink url="http://www.sourceforge.net/projects/k9copy">http://www.sourceforge.net/projects/k9copy</ulink>.
Also have a look into the mailinglist <ulink url="http://sourceforge.net/mailarchive/forum.php?forum_id=34875">archive</ulink>.
</para>
<para>
Please use only the tracking system on sourceforge for reporting bugs and log in before
submitting (if you've a sourceforge account).
</para>
<para>
When you submit a bug, please include all of the following information:
<itemizedlist>
<listitem><para>versions of Kaffeine, xine, KDE, X11</para></listitem>
<listitem><para>the backtrace from KDE's Crash Manager</para></listitem>
<listitem><para>console output (you can use --verbose to get more)</para></listitem>
</itemizedlist>
</para>
</chapter>
<chapter id="credits">
<title>Copyright and License</title>
<para>
Program copyright 2003-2005, The Kaffeine Authors
</para>
<para>
Documentation copyright 2003-2005, Jürgen Kofler <email>k9copy@gmx.net</email>, Christophe Thommeret <email>hftom@free.fr</email>
</para>
<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
&underFDL; <!-- FDL: do not remove. Commercial development should -->
<!-- replace this with their copyright and either remove it or re-set this.-->
<!-- Determine which license your application is licensed under,
and delete all the remaining licenses below:
(NOTE: All documentation are licensed under the FDL,
regardless of what license the application uses) -->
&underGPL; <!-- GPL License -->
</chapter>
&documentation.index;
</book>
<!--
Local Variables:
mode: sgml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
-->

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,8 @@
METASOURCES = AUTO
noinst_LTLIBRARIES = libdvdread.la
libdvdread_la_LDFLAGS = $(all_libraries)
libdvdread_la_SOURCES = dvd_input.c dvd_reader.c dvd_udf.c ifo_read.c md5.c \
nav_read.c
noinst_HEADERS = bswap.h dvd_input.h dvd_reader.h dvd_udf.h dvdread_internal.h \
ifo_read.h ifo_types.h md5.h nav_read.h nav_types.h

@ -0,0 +1,126 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef BSWAP_H_INCLUDED
#define BSWAP_H_INCLUDED
/*
* Copyright (C) 2000, 2001 Billy Biggs <vektor@dumbterm.net>,
* Håkan Hjort <d95hjort@dtek.chalmers.se>
*
* 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
*/
#if defined(WORDS_BIGENDIAN)
/* All bigendian systems are fine, just ignore the swaps. */
#define B2N_16(x) (void)(x)
#define B2N_32(x) (void)(x)
#define B2N_64(x) (void)(x)
#else
/* For __FreeBSD_version */
#if defined(HAVE_SYS_PARAM_H)
#include <sys/param.h>
#endif
#if defined(__linux__)
#include <byteswap.h>
#define B2N_16(x) x = bswap_16(x)
#define B2N_32(x) x = bswap_32(x)
#define B2N_64(x) x = bswap_64(x)
#elif defined(__NetBSD__)
#include <sys/endian.h>
#define B2N_16(x) BE16TOH(x)
#define B2N_32(x) BE32TOH(x)
#define B2N_64(x) BE64TOH(x)
#elif defined(__OpenBSD__)
#include <sys/endian.h>
#define B2N_16(x) x = swap16(x)
#define B2N_32(x) x = swap32(x)
#define B2N_64(x) x = swap64(x)
#elif defined(__FreeBSD__) && __FreeBSD_version >= 470000
#include <sys/endian.h>
#define B2N_16(x) x = be16toh(x)
#define B2N_32(x) x = be32toh(x)
#if __FreeBSD_version >= 500000
#define B2N_64(x) x = be64toh(x)
#else
#define B2N_64(x) \
x = ((((x) & 0xff00000000000000) >> 56) | \
(((x) & 0x00ff000000000000) >> 40) | \
(((x) & 0x0000ff0000000000) >> 24) | \
(((x) & 0x000000ff00000000) >> 8) | \
(((x) & 0x00000000ff000000) << 8) | \
(((x) & 0x0000000000ff0000) << 24) | \
(((x) & 0x000000000000ff00) << 40) | \
(((x) & 0x00000000000000ff) << 56))
#endif /* _FreeBSD_version >= 500000 */
#elif defined(__DragonFly__)
#include <sys/endian.h>
#define B2N_16(x) x = be16toh(x)
#define B2N_32(x) x = be32toh(x)
#define B2N_64(x) x = be64toh(x)
#elif defined(__APPLE__) || defined(__DARWIN__)
#include <libkern/OSByteOrder.h>
#define B2N_16(x) x = OSSwapBigToHostConstInt16(x)
#define B2N_32(x) x = OSSwapBigToHostConstInt32(x)
#define B2N_64(x) x = OSSwapBigToHostConstInt64(x)
#else
#if defined(__FreeBSD__) || defined(__sun) || defined(__bsdi__) || defined(WIN32) || defined(__BEOS__) || defined(__INTERIX)
/* These systems don't have swap macros */
#else
/* If there isn't a header provided with your system with this functionality
* add the relevant || define( ) to the list above.
*/
#warning "You should add endian swap macros for your system"
#endif
/* This is a slow but portable implementation, it has multiple evaluation
* problems so beware.
* Old FreeBSD's and Solaris don't have <byteswap.h> or any other such
* functionality!
*/
#define B2N_16(x) \
x = ((((x) & 0xff00) >> 8) | \
(((x) & 0x00ff) << 8))
#define B2N_32(x) \
x = ((((x) & 0xff000000) >> 24) | \
(((x) & 0x00ff0000) >> 8) | \
(((x) & 0x0000ff00) << 8) | \
(((x) & 0x000000ff) << 24))
#define B2N_64(x) \
x = ((((x) & 0xff00000000000000) >> 56) | \
(((x) & 0x00ff000000000000) >> 40) | \
(((x) & 0x0000ff0000000000) >> 24) | \
(((x) & 0x000000ff00000000) >> 8) | \
(((x) & 0x00000000ff000000) << 8) | \
(((x) & 0x0000000000ff0000) << 24) | \
(((x) & 0x000000000000ff00) << 40) | \
(((x) & 0x00000000000000ff) << 56))
#endif
#endif /* WORDS_BIGENDIAN */
#endif /* BSWAP_H_INCLUDED */

@ -0,0 +1,414 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
* Copyright (C) 2002 Samuel Hocevar <sam@zoy.org>,
* Håkan Hjort <d95hjort@dtek.chalmers.se>
*
* 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 02111, USA.
*/
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#define __USE_GNU /* to get O_DIRECT in linux */
#include <fcntl.h>
#include <unistd.h>
#include "dvd_reader.h"
#include "dvd_input.h"
#include "dvdread_internal.h"
/* The function pointers that is the exported interface of this file. */
dvd_input_t (*dvdinput_open) (const char *);
int (*dvdinput_close) (dvd_input_t);
int (*dvdinput_seek) (dvd_input_t, int);
int (*dvdinput_title) (dvd_input_t, int);
/**
* pointer must be aligned to 2048 bytes
* if reading from a raw/O_DIRECT file
*/
int (*dvdinput_read) (dvd_input_t, void *, int, int);
char * (*dvdinput_error) (dvd_input_t);
#ifdef HAVE_DVDCSS_DVDCSS_H
/* linking to libdvdcss */
#include <dvdcss/dvdcss.h>
#define DVDcss_open(a) dvdcss_open((char*)(a))
#define DVDcss_close dvdcss_close
#define DVDcss_seek dvdcss_seek
#define DVDcss_title dvdcss_title
#define DVDcss_read dvdcss_read
#define DVDcss_error dvdcss_error
#else
/* dlopening libdvdcss */
#include <dlfcn.h>
typedef struct dvdcss_s *dvdcss_handle;
static dvdcss_handle (*DVDcss_open) (const char *);
static int (*DVDcss_close) (dvdcss_handle);
static int (*DVDcss_seek) (dvdcss_handle, int, int);
static int (*DVDcss_title) (dvdcss_handle, int);
static int (*DVDcss_read) (dvdcss_handle, void *, int, int);
static char * (*DVDcss_error) (dvdcss_handle);
#endif
/* The DVDinput handle, add stuff here for new input methods. */
struct dvd_input_s {
/* libdvdcss handle */
dvdcss_handle dvdcss;
/* dummy file input */
int fd;
};
/**
* initialize and open a DVD device or file.
*/
static dvd_input_t css_open(const char *target)
{
dvd_input_t dev;
/* Allocate the handle structure */
dev = (dvd_input_t) malloc(sizeof(struct dvd_input_s));
if(dev == NULL) {
/* malloc has set errno to ENOMEM */
return NULL;
}
/* Really open it with libdvdcss */
dev->dvdcss = DVDcss_open(target);
if(dev->dvdcss == 0) {
free(dev);
dev = NULL;
}
return dev;
}
/**
* return the last error message
*/
static char *css_error(dvd_input_t dev)
{
return DVDcss_error(dev->dvdcss);
}
/**
* seek into the device.
*/
static int css_seek(dvd_input_t dev, int blocks)
{
/* DVDINPUT_NOFLAGS should match the DVDCSS_NOFLAGS value. */
return DVDcss_seek(dev->dvdcss, blocks, DVDINPUT_NOFLAGS);
}
/**
* set the block for the begining of a new title (key).
*/
static int css_title(dvd_input_t dev, int block)
{
return DVDcss_title(dev->dvdcss, block);
}
/**
* read data from the device.
*/
static int css_read(dvd_input_t dev, void *buffer, int blocks, int flags)
{
return DVDcss_read(dev->dvdcss, buffer, blocks, flags);
}
/**
* close the DVD device and clean up the library.
*/
static int css_close(dvd_input_t dev)
{
int ret;
ret = DVDcss_close(dev->dvdcss);
if(ret < 0)
return ret;
free(dev);
return 0;
}
/* Need to use O_BINARY for WIN32 */
#ifndef O_BINARY
#ifdef _O_BINARY
#define O_BINARY _O_BINARY
#else
#define O_BINARY 0
#endif
#endif
/**
* initialize and open a DVD device or file.
*/
static dvd_input_t file_open(const char *target)
{
dvd_input_t dev;
char *use_odirect;
int oflags;
oflags = O_RDONLY | O_BINARY;
use_odirect = getenv("DVDREAD_USE_DIRECT");
if(use_odirect) {
#ifndef O_DIRECT
#define O_DIRECT 0
#endif
oflags |= O_DIRECT;
}
/* Allocate the library structure */
dev = (dvd_input_t) malloc(sizeof(struct dvd_input_s));
if(dev == NULL) {
return NULL;
}
/* Open the device */
dev->fd = open(target, oflags);
if(dev->fd < 0) {
free(dev);
return NULL;
}
return dev;
}
/**
* return the last error message
*/
static char *file_error(dvd_input_t dev)
{
/* use strerror(errno)? */
return (char *)"unknown error";
}
/**
* seek into the device.
*/
static int file_seek(dvd_input_t dev, int blocks)
{
off_t pos = (off_t)blocks * (off_t)DVD_VIDEO_LB_LEN;
pos = lseek(dev->fd, pos, SEEK_SET);
if(pos < 0) {
return pos;
}
/* assert pos % DVD_VIDEO_LB_LEN == 0 */
return (int) (pos / DVD_VIDEO_LB_LEN);
}
/**
* set the block for the begining of a new title (key).
*/
static int file_title(dvd_input_t dev, int block)
{
return -1;
}
/**
* read data from the device.
*/
static int file_read(dvd_input_t dev, void *buffer, int blocks, int flags)
{
size_t len;
ssize_t ret;
unsigned char *buf = buffer;
len = (size_t)blocks * DVD_VIDEO_LB_LEN;
while(len > 0) {
ret = read(dev->fd, buf, len);
if(ret < 0) {
/* One of the reads failed, too bad. We won't even bother
* returning the reads that went ok, and as in the posix spec
* the file postition is left unspecified after a failure. */
return ret;
}
if(ret == 0) {
/* Nothing more to read. Return the whole blocks, if any, that we got.
and adjust the file possition back to the previous block boundary. */
size_t bytes = (size_t)blocks * DVD_VIDEO_LB_LEN - len;
off_t over_read = -(bytes % DVD_VIDEO_LB_LEN);
/*off_t pos =*/ lseek(dev->fd, over_read, SEEK_CUR);
/* should have pos % 2048 == 0 */
return (int) (bytes / DVD_VIDEO_LB_LEN);
}
buf+=ret;
len -= ret;
}
return blocks;
}
/**
* close the DVD device and clean up.
*/
static int file_close(dvd_input_t dev)
{
int ret;
ret = close(dev->fd);
if(ret < 0)
return ret;
free(dev);
return 0;
}
static void *dvdcss_library = NULL;
static int dvdcss_library_init = 0;
/**
* Free any objects allocated by dvdinput_setup.
* Should only be called when libdvdread is not to be used any more.
* Closes dlopened libraries.
*/
void dvdinput_free(void)
{
#ifdef HAVE_DVDCSS_DVDCSS_H
/* linked statically, nothing to free */
return;
#else
if(dvdcss_library) {
dlclose(dvdcss_library);
dvdcss_library = NULL;
}
dvdcss_library_init = 0;
return;
#endif
}
/**
* Setup read functions with either libdvdcss or minimal DVD access.
*/
int dvdinput_setup(void)
{
char **dvdcss_version = NULL;
int verbose;
/* dlopening libdvdcss */
if(dvdcss_library_init) {
/* libdvdcss is already dlopened, function ptrs set */
if(dvdcss_library) {
return 1; /* css available */
} else {
return 0; /* css not available */
}
}
verbose = get_verbose();
#ifdef HAVE_DVDCSS_DVDCSS_H
/* linking to libdvdcss */
dvdcss_library = &dvdcss_library; /* Give it some value != NULL */
/* the DVDcss_* functions have been #defined at the top */
dvdcss_version = &dvdcss_interface_2;
#else
dvdcss_library = dlopen("libdvdcss.so.2", RTLD_LAZY);
if(dvdcss_library != NULL) {
#if defined(__OpenBSD__) && !defined(__ELF__)
#define U_S "_"
#else
#define U_S
#endif
DVDcss_open = (dvdcss_handle (*)(const char*))
dlsym(dvdcss_library, U_S "dvdcss_open");
DVDcss_close = (int (*)(dvdcss_handle))
dlsym(dvdcss_library, U_S "dvdcss_close");
DVDcss_title = (int (*)(dvdcss_handle, int))
dlsym(dvdcss_library, U_S "dvdcss_title");
DVDcss_seek = (int (*)(dvdcss_handle, int, int))
dlsym(dvdcss_library, U_S "dvdcss_seek");
DVDcss_read = (int (*)(dvdcss_handle, void*, int, int))
dlsym(dvdcss_library, U_S "dvdcss_read");
DVDcss_error = (char* (*)(dvdcss_handle))
dlsym(dvdcss_library, U_S "dvdcss_error");
dvdcss_version = (char **)dlsym(dvdcss_library, U_S "dvdcss_interface_2");
if(dlsym(dvdcss_library, U_S "dvdcss_crack")) {
if(verbose >= 0) {
fprintf(stderr,
"libdvdread: Old (pre-0.0.2) version of libdvdcss found.\n"
"libdvdread: You should get the latest version from "
"http://www.videolan.org/\n" );
}
dlclose(dvdcss_library);
dvdcss_library = NULL;
} else if(!DVDcss_open || !DVDcss_close || !DVDcss_title || !DVDcss_seek
|| !DVDcss_read || !DVDcss_error || !dvdcss_version) {
if(verbose >= 0) {
fprintf(stderr, "libdvdread: Missing symbols in libdvdcss.so.2, "
"this shouldn't happen !\n");
}
dlclose(dvdcss_library);
dvdcss_library = NULL;
}
}
#endif /* HAVE_DVDCSS_DVDCSS_H */
dvdcss_library_init = 1;
if(dvdcss_library) {
/*
char *psz_method = getenv( "DVDCSS_METHOD" );
char *psz_verbose = getenv( "DVDCSS_VERBOSE" );
fprintf(stderr, "DVDCSS_METHOD %s\n", psz_method);
fprintf(stderr, "DVDCSS_VERBOSE %s\n", psz_verbose);
*/
if(verbose >= 1) {
fprintf(stderr, "libdvdread: Using libdvdcss version %s for DVD access\n",
*dvdcss_version);
}
/* libdvdcss wrapper functions */
dvdinput_open = css_open;
dvdinput_close = css_close;
dvdinput_seek = css_seek;
dvdinput_title = css_title;
dvdinput_read = css_read;
dvdinput_error = css_error;
return 1;
} else {
if(verbose >= 1) {
fprintf(stderr, "libdvdread: Encrypted DVD support unavailable.\n");
}
/* libdvdcss replacement functions */
dvdinput_open = file_open;
dvdinput_close = file_close;
dvdinput_seek = file_seek;
dvdinput_title = file_title;
dvdinput_read = file_read;
dvdinput_error = file_error;
return 0;
}
}

@ -0,0 +1,55 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef DVD_INPUT_H_INCLUDED
#define DVD_INPUT_H_INCLUDED
/*
* Copyright (C) 2001, 2002 Samuel Hocevar <sam@zoy.org>,
* Håkan Hjort <d95hjort@dtek.chalmers.se>
*
* 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 02111, USA.
*/
/**
* Defines and flags. Make sure they fit the libdvdcss API!
*/
#define DVDINPUT_NOFLAGS 0
#define DVDINPUT_READ_DECRYPT (1 << 0)
typedef struct dvd_input_s *dvd_input_t;
/**
* Pointers which will be filled either the input methods functions.
*/
extern dvd_input_t (*dvdinput_open) (const char *);
extern int (*dvdinput_close) (dvd_input_t);
extern int (*dvdinput_seek) (dvd_input_t, int);
extern int (*dvdinput_title) (dvd_input_t, int);
extern int (*dvdinput_read) (dvd_input_t, void *, int, int);
extern char * (*dvdinput_error) (dvd_input_t);
/**
* Free any objects allocated by dvdinput_setup.
* Should only be called when libdvdread is not to be used any more.
* Closes dlopened libraries.
*/
void dvdinput_free(void);
/**
* Setup function accessed by dvd_reader.c. Returns 1 if there is CSS support.
*/
int dvdinput_setup(void);
#endif /* DVD_INPUT_H_INCLUDED */

File diff suppressed because it is too large Load Diff

@ -0,0 +1,344 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef DVD_READER_H_INCLUDED
#define DVD_READER_H_INCLUDED
/*
* Copyright (C) 2001, 2002 Billy Biggs <vektor@dumbterm.net>,
* Håkan Hjort <d95hjort@dtek.chalmers.se>,
* Björn Englund <d4bjorn@dtek.chalmers.se>
*
* 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 <sys/types.h>
/**
* The DVD access interface.
*
* This file contains the functions that form the interface to to
* reading files located on a DVD.
*/
/**
* The current version. (0.9.4 => 904, 1.2.3 => 10203)
*/
#define DVDREAD_VERSION 907
/**
* The length of one Logical Block of a DVD.
*/
#define DVD_VIDEO_LB_LEN 2048
/**
* Maximum length of filenames allowed in UDF.
*/
#define MAX_UDF_FILE_NAME_LEN 2048
#ifdef __cplusplus
extern "C" {
#endif
/**
* Opaque type that is used as a handle for one instance of an opened DVD.
*/
typedef struct dvd_reader_s dvd_reader_t;
/**
* Opaque type for a file read handle, much like a normal fd or FILE *.
*/
typedef struct dvd_file_s dvd_file_t;
/**
* Returns the compiled version. (DVDREAD_VERSION as an int)
*/
int DVDVersion(void);
/**
* Opens a block device of a DVD-ROM file, or an image file, or a directory
* name for a mounted DVD or HD copy of a DVD.
*
* If the given file is a block device, or is the mountpoint for a block
* device, then that device is used for CSS authentication using libdvdcss.
* If no device is available, then no CSS authentication is performed,
* and we hope that the image is decrypted.
*
* If the path given is a directory, then the files in that directory may be
* in any one of these formats:
*
* path/VIDEO_TS/VTS_01_1.VOB
* path/video_ts/vts_01_1.vob
* path/VTS_01_1.VOB
* path/vts_01_1.vob
*
* @param path Specifies the the device, file or directory to be used.
* @return If successful a a read handle is returned. Otherwise 0 is returned.
*
* dvd = DVDOpen(path);
*
* Threads: this function uses chdir() and getcwd().
* The current working directory is global to all threads,
* so using chdir/getcwd in another thread could give unexpected results.
*/
dvd_reader_t *DVDOpen( const char * );
/**
* Closes and cleans up the DVD reader object.
*
* You must close all open files before calling this function.
*
* @param dvd A read handle that should be closed.
*
* DVDClose(dvd);
*/
void DVDClose( dvd_reader_t * );
/**
* Initializes libdvdread to be used with multithreading apps.
*
* You must call this function before using any other functions of libdvdread
* if you are going to use libdvdread in multiple threads in your program.
* If you are not using threads, or using libdvdread from just one thread,
* you do not need to call this, but you are allowed to do so anyway.
*
* There are several restrictions on how you can use libdvdread in
* multithreading apps, see further documentation.
*
* If you have called DVDFinish() you need to call DVDInit again to use
* libdvdread in multiple threads.
*
* DVDInit(void);
*/
void DVDInit(void);
/**
* frees any dlopened objects.
*
* You must DVDClose all handles opened with DVDOpen before calling this.
* Use this function if you need to close the dlopened libs and any other
* objects that have been dynamically allocated by libdvdread.
*
* DVDFinish(void);
*/
void DVDFinish(void);
/**
*
*/
typedef enum {
DVD_READ_INFO_FILE, /**< VIDEO_TS.IFO or VTS_XX_0.IFO (title) */
DVD_READ_INFO_BACKUP_FILE, /**< VIDEO_TS.BUP or VTS_XX_0.BUP (title) */
DVD_READ_MENU_VOBS, /**< VIDEO_TS.VOB or VTS_XX_0.VOB (title) */
DVD_READ_TITLE_VOBS /**< VTS_XX_[1-9].VOB (title). All files in
the title set are opened and read as a
single file. */
} dvd_read_domain_t;
/**
*
*/
typedef struct {
off_t size; /**< Total size of file in bytes */
int nr_parts; /**< Number of file parts */
off_t parts_size[9]; /**< Size of each part in bytes */
} dvd_stat_t;
/**
* Stats a file on the DVD given the title number and domain.
* The information about the file is stored in a dvd_stat_t
* which contains information about the size of the file and
* the number of parts in case of a multipart file and the respective
* sizes of the parts.
* A multipart file is for instance VTS_02_1.VOB, VTS_02_2.VOB, VTS_02_3.VOB
* The size of VTS_02_1.VOB will be stored in stat->parts_size[0],
* VTS_02_2.VOB in stat->parts_size[1], ...
* The total size (sum of all parts) is stored in stat->size and
* stat->nr_parts will hold the number of parts.
* Only DVD_READ_TITLE_VOBS (VTS_??_[1-9].VOB) can be multipart files.
*
* This function is only of use if you want to get the size of each file
* in the filesystem. These sizes are not needed to use any other
* functions in libdvdread.
*
* @param dvd A dvd read handle.
* @param titlenum Which Video Title Set should be used, VIDEO_TS is 0.
* @param domain Which domain.
* @param stat Pointer to where the result is stored.
* @return If successful 0, otherwise -1.
*
* int DVDFileStat(dvd, titlenum, domain, stat);
*/
int DVDFileStat(dvd_reader_t *, int, dvd_read_domain_t, dvd_stat_t *);
/**
* Opens a file on the DVD given the title number and domain.
*
* If the title number is 0, the video manager information is opened
* (VIDEO_TS.[IFO,BUP,VOB]). Returns a file structure which may be
* used for reads, or 0 if the file was not found.
*
* @param dvd A dvd read handle.
* @param titlenum Which Video Title Set should be used, VIDEO_TS is 0.
* @param domain Which domain.
* @return If successful a a file read handle is returned, otherwise 0.
*
* dvd_file = DVDOpenFile(dvd, titlenum, domain); */
dvd_file_t *DVDOpenFile( dvd_reader_t *, int, dvd_read_domain_t );
/**
* Closes a file and frees the associated structure.
*
* @param dvd_file The file read handle to be closed.
*
* DVDCloseFile(dvd_file);
*/
void DVDCloseFile( dvd_file_t * );
/**
* Reads block_count number of blocks from the file at the given block offset.
* Returns number of blocks read on success, -1 on error. This call is only
* for reading VOB data, and should not be used when reading the IFO files.
* When reading from an encrypted drive, blocks are decrypted using libdvdcss
* where required.
*
* @param dvd_file A file read handle.
* @param offset Block offset from the start of the file to start reading at.
* @param block_count Number of block to read.
* @param data Pointer to a buffer to write the data into.
* It must be aligned to the logical block size of the device when
* reading from a raw/O_DIRECT device (2048 bytes for DVD)
* @return Returns number of blocks read on success, -1 on error.
*
* blocks_read = DVDReadBlocks(dvd_file, offset, block_count, data);
*/
ssize_t DVDReadBlocks( dvd_file_t *, int, size_t, unsigned char * );
/**
* Seek to the given position in the file. Returns the resulting position in
* bytes from the beginning of the file. The seek position is only used for
* byte reads from the file, the block read call always reads from the given
* offset.
*
* @param dvd_file A file read handle.
* @param seek_offset Byte offset from the start of the file to seek to.
* @return The resulting position in bytes from the beginning of the file.
*
* offset_set = DVDFileSeek(dvd_file, seek_offset);
*/
int DVDFileSeek( dvd_file_t *, int );
/**
* Reads the given number of bytes from the file. This call can only be used
* on the information files, and may not be used for reading from a VOB. This
* reads from and increments the currrent seek position for the file.
*
* @param dvd_file A file read handle.
* @param data Pointer to a buffer to write the data into.
* @param bytes Number of bytes to read.
* @return Returns number of bytes read on success, -1 on error.
*
* bytes_read = DVDReadBytes(dvd_file, data, bytes);
*/
ssize_t DVDReadBytes( dvd_file_t *, void *, size_t );
/**
* Returns the file size in blocks.
*
* @param dvd_file A file read handle.
* @return The size of the file in blocks, -1 on error.
*
* blocks = DVDFileSize(dvd_file);
*/
ssize_t DVDFileSize( dvd_file_t * );
/**
* Get a unique 128 bit disc ID.
* This is the MD5 sum of VIDEO_TS.IFO and the VTS_0?_0.IFO files
* in title order (those that exist).
* If you need a 'text' representation of the id, print it as a
* hexadecimal number, using lowercase letters, discid[0] first.
* I.e. the same format as the command-line 'md5sum' program uses.
*
* @param dvd A read handle to get the disc ID from
* @param discid The buffer to put the disc ID into. The buffer must
* have room for 128 bits (16 chars).
* @return 0 on success, -1 on error.
*/
int DVDDiscID( dvd_reader_t *, unsigned char * );
/**
* Get the UDF VolumeIdentifier and VolumeSetIdentifier
* from the PrimaryVolumeDescriptor.
*
* @param dvd A read handle to get the disc ID from
* @param volid The buffer to put the VolumeIdentifier into.
* The VolumeIdentifier is latin-1 encoded (8bit unicode)
* null terminated and max 32 bytes (including '\0')
* @param volid_size No more than volid_size bytes will be copied to volid.
* If the VolumeIdentifier is truncated because of this
* it will still be null terminated.
* @param volsetid The buffer to put the VolumeSetIdentifier into.
* The VolumeIdentifier is 128 bytes as
* stored in the UDF PrimaryVolumeDescriptor.
* Note that this is not a null terminated string.
* @param volsetid_size At most volsetid_size bytes will be copied to volsetid.
* @return 0 on success, -1 on error.
*/
int DVDUDFVolumeInfo( dvd_reader_t *, char *, unsigned int,
unsigned char *, unsigned int );
/**
* Get the ISO9660 VolumeIdentifier and VolumeSetIdentifier
*
* * Only use this function as fallback if DVDUDFVolumeInfo returns 0 *
* * this will happen on a disc mastered only with a iso9660 filesystem *
* * All video DVD discs have UDF filesystem *
*
* @param dvd A read handle to get the disc ID from
* @param volid The buffer to put the VolumeIdentifier into.
* The VolumeIdentifier is coded with '0-9','A-Z','_'
* null terminated and max 33 bytes (including '\0')
* @param volid_size No more than volid_size bytes will be copied to volid.
* If the VolumeIdentifier is truncated because of this
* it will still be null terminated.
* @param volsetid The buffer to put the VolumeSetIdentifier into.
* The VolumeIdentifier is 128 bytes as
* stored in the ISO9660 PrimaryVolumeDescriptor.
* Note that this is not a null terminated string.
* @param volsetid_size At most volsetid_size bytes will be copied to volsetid.
* @return 0 on success, -1 on error.
*/
int DVDISOVolumeInfo( dvd_reader_t *, char *, unsigned int,
unsigned char *, unsigned int );
/**
* Sets the level of caching that is done when reading from a device
*
* @param dvd A read handle to get the disc ID from
* @param level The level of caching wanted.
* -1 - returns the current setting.
* 0 - UDF Cache turned off.
* 1 - (default level) Pointers to IFO files and some data from
* PrimaryVolumeDescriptor are cached.
*
* @return The level of caching.
*/
int DVDUDFCacheLevel( dvd_reader_t *, int );
#ifdef __cplusplus
};
#endif
#endif /* DVD_READER_H_INCLUDED */

File diff suppressed because it is too large Load Diff

@ -0,0 +1,66 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef DVD_UDF_H_INCLUDED
#define DVD_UDF_H_INCLUDED
/*
* This code is based on dvdudf by:
* Christian Wolff <scarabaeus@convergence.de>.
*
* Modifications by:
* Billy Biggs <vektor@dumbterm.net>.
* Björn Englund <d4bjorn@dtek.chalmers.se>.
*
* dvdudf: parse and read the UDF volume information of a DVD Video
* Copyright (C) 1999 Christian Wolff for convergence integrated media
* GmbH The author can be reached at scarabaeus@convergence.de, the
* project's page is at http://linuxtv.org/dvd/
*
* 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. Or, point your browser to
* http://www.gnu.org/copyleft/gpl.html
*/
#if defined(HAVE_INTTYPES_H)
#include <inttypes.h>
#elif defined(HAVE_STDINT_H)
#include <stdint.h>
#endif
#include "dvd_reader.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Looks for a file on the UDF disc/imagefile and returns the block number
* where it begins, or 0 if it is not found. The filename should be an
* absolute pathname on the UDF filesystem, starting with '/'. For example,
* '/VIDEO_TS/VTS_01_1.IFO'. On success, filesize will be set to the size of
* the file in bytes.
* This implementation relies on that the file size is less than 2^32
* A DVD file can at most be 2^30 (-2048 ?).
*/
uint32_t UDFFindFile( dvd_reader_t *device, char *filename, uint32_t *size );
void FreeUDFCache(dvd_reader_t *device, void *cache);
int UDFGetVolumeIdentifier(dvd_reader_t *device,
char *volid, unsigned int volid_size);
int UDFGetVolumeSetIdentifier(dvd_reader_t *device,
uint8_t *volsetid, unsigned int volsetid_size);
#ifdef __cplusplus
};
#endif
#endif /* DVD_UDF_H_INCLUDED */

@ -0,0 +1,18 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef DVDREAD_INTERNAL_H
#define DVDREAD_INTERNAL_H
#define CHECK_VALUE(arg) \
if(!(arg)) { \
fprintf(stderr, "\n*** libdvdread: CHECK_VALUE failed in %s:%i ***" \
"\n*** for %s ***\n\n", \
__FILE__, __LINE__, # arg ); \
}
int get_verbose(void);
int dvdread_verbose(dvd_reader_t *dvd);
dvd_reader_t *device_of_file(dvd_file_t *file);
#endif /* DVDREAD_INTERNAL_H */

File diff suppressed because it is too large Load Diff

@ -0,0 +1,228 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef IFO_READ_H_INCLUDED
#define IFO_READ_H_INCLUDED
/*
* Copyright (C) 2000, 2001, 2002 Bj<EFBFBD>rn Englund <d4bjorn@dtek.chalmers.se>,
* H<EFBFBD>kan Hjort <d95hjort@dtek.chalmers.se>
*
* 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 "ifo_types.h"
#include "dvd_reader.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* handle = ifoOpen(dvd, title);
*
* Opens an IFO and reads in all the data for the IFO file corresponding to the
* given title. If title 0 is given, the video manager IFO file is read.
* Returns a handle to a completely parsed structure.
*/
ifo_handle_t *ifoOpen(dvd_reader_t *, int );
/**
* handle = ifoOpenVMGI(dvd);
*
* Opens an IFO and reads in _only_ the vmgi_mat data. This call can be used
* together with the calls below to read in each segment of the IFO file on
* demand.
*/
ifo_handle_t *ifoOpenVMGI(dvd_reader_t *);
/**
* handle = ifoOpenVTSI(dvd, title);
*
* Opens an IFO and reads in _only_ the vtsi_mat data. This call can be used
* together with the calls below to read in each segment of the IFO file on
* demand.
*/
ifo_handle_t *ifoOpenVTSI(dvd_reader_t *, int);
/**
* ifoClose(ifofile);
* Cleans up the IFO information. This will free all data allocated for the
* substructures.
*/
void ifoClose(ifo_handle_t *);
/**
* The following functions are for reading only part of the VMGI/VTSI files.
* Returns 1 if the data was successfully read and 0 on error.
*/
/**
* okay = ifoRead_PLT_MAIT(ifofile);
*
* Read in the Parental Management Information table, filling the
* ifofile->ptl_mait structure and its substructures. This data is only
* located in the video manager information file. This fills the
* ifofile->ptl_mait structure and all its substructures.
*/
int ifoRead_PTL_MAIT(ifo_handle_t *);
/**
* okay = ifoRead_VTS_ATRT(ifofile);
*
* Read in the attribute table for the main menu vob, filling the
* ifofile->vts_atrt structure and its substructures. Only located in the
* video manager information file. This fills in the ifofile->vts_atrt
* structure and all its substructures.
*/
int ifoRead_VTS_ATRT(ifo_handle_t *);
/**
* okay = ifoRead_TT_SRPT(ifofile);
*
* Reads the title info for the main menu, filling the ifofile->tt_srpt
* structure and its substructures. This data is only located in the video
* manager information file. This structure is mandatory in the IFO file.
*/
int ifoRead_TT_SRPT(ifo_handle_t *);
/**
* okay = ifoRead_VTS_PTT_SRPT(ifofile);
*
* Reads in the part of title search pointer table, filling the
* ifofile->vts_ptt_srpt structure and its substructures. This data is only
* located in the video title set information file. This structure is
* mandatory, and must be included in the VTSI file.
*/
int ifoRead_VTS_PTT_SRPT(ifo_handle_t *);
/**
* okay = ifoRead_FP_PGC(ifofile);
*
* Reads in the first play program chain data, filling the
* ifofile->first_play_pgc structure. This data is only located in the video
* manager information file (VMGI). This structure is optional.
*/
int ifoRead_FP_PGC(ifo_handle_t *);
/**
* okay = ifoRead_PGCIT(ifofile);
*
* Reads in the program chain information table for the video title set. Fills
* in the ifofile->vts_pgcit structure and its substructures, which includes
* the data for each program chain in the set. This data is only located in
* the video title set information file. This structure is mandatory, and must
* be included in the VTSI file.
*/
int ifoRead_PGCIT(ifo_handle_t *);
/**
* okay = ifoRead_PGCI_UT(ifofile);
*
* Reads in the menu PGCI unit table for the menu VOB. For the video manager,
* this corresponds to the VIDEO_TS.VOB file, and for each title set, this
* corresponds to the VTS_XX_0.VOB file. This data is located in both the
* video manager and video title set information files. For VMGI files, this
* fills the ifofile->vmgi_pgci_ut structure and all its substructures. For
* VTSI files, this fills the ifofile->vtsm_pgci_ut structure.
*/
int ifoRead_PGCI_UT(ifo_handle_t *);
/**
* okay = ifoRead_VTS_TMAPT(ifofile);
*
* Reads in the VTS Time Map Table, this data is only located in the video
* title set information file. This fills the ifofile->vts_tmapt structure
* and all its substructures. When pressent enables VOBU level time-based
* seeking for One_Sequential_PGC_Titles.
*/
int ifoRead_VTS_TMAPT(ifo_handle_t *);
/**
* okay = ifoRead_C_ADT(ifofile);
*
* Reads in the cell address table for the menu VOB. For the video manager,
* this corresponds to the VIDEO_TS.VOB file, and for each title set, this
* corresponds to the VTS_XX_0.VOB file. This data is located in both the
* video manager and video title set information files. For VMGI files, this
* fills the ifofile->vmgm_c_adt structure and all its substructures. For VTSI
* files, this fills the ifofile->vtsm_c_adt structure.
*/
int ifoRead_C_ADT(ifo_handle_t *);
/**
* okay = ifoRead_TITLE_C_ADT(ifofile);
*
* Reads in the cell address table for the video title set corresponding to
* this IFO file. This data is only located in the video title set information
* file. This structure is mandatory, and must be included in the VTSI file.
* This call fills the ifofile->vts_c_adt structure and its substructures.
*/
int ifoRead_TITLE_C_ADT(ifo_handle_t *);
/**
* okay = ifoRead_VOBU_ADMAP(ifofile);
*
* Reads in the VOBU address map for the menu VOB. For the video manager, this
* corresponds to the VIDEO_TS.VOB file, and for each title set, this
* corresponds to the VTS_XX_0.VOB file. This data is located in both the
* video manager and video title set information files. For VMGI files, this
* fills the ifofile->vmgm_vobu_admap structure and all its substructures. For
* VTSI files, this fills the ifofile->vtsm_vobu_admap structure.
*/
int ifoRead_VOBU_ADMAP(ifo_handle_t *);
/**
* okay = ifoRead_TITLE_VOBU_ADMAP(ifofile);
*
* Reads in the VOBU address map for the associated video title set. This data
* is only located in the video title set information file. This structure is
* mandatory, and must be included in the VTSI file. Fills the
* ifofile->vts_vobu_admap structure and its substructures.
*/
int ifoRead_TITLE_VOBU_ADMAP(ifo_handle_t *);
/**
* okay = ifoRead_TXTDT_MGI(ifofile);
*
* Reads in the text data strings for the DVD. Fills the ifofile->txtdt_mgi
* structure and all its substructures. This data is only located in the video
* manager information file. This structure is mandatory, and must be included
* in the VMGI file.
*/
int ifoRead_TXTDT_MGI(ifo_handle_t *);
/**
* The following functions are used for freeing parsed sections of the
* ifo_handle_t structure and the allocated substructures. The free calls
* below are safe: they will not mind if you attempt to free part of an IFO
* file which was not read in or which does not exist.
*/
void ifoFree_PTL_MAIT(ifo_handle_t *);
void ifoFree_VTS_ATRT(ifo_handle_t *);
void ifoFree_TT_SRPT(ifo_handle_t *);
void ifoFree_VTS_PTT_SRPT(ifo_handle_t *);
void ifoFree_FP_PGC(ifo_handle_t *);
void ifoFree_PGCIT(ifo_handle_t *);
void ifoFree_PGCI_UT(ifo_handle_t *);
void ifoFree_VTS_TMAPT(ifo_handle_t *);
void ifoFree_C_ADT(ifo_handle_t *);
void ifoFree_TITLE_C_ADT(ifo_handle_t *);
void ifoFree_VOBU_ADMAP(ifo_handle_t *);
void ifoFree_TITLE_VOBU_ADMAP(ifo_handle_t *);
void ifoFree_TXTDT_MGI(ifo_handle_t *);
#ifdef __cplusplus
};
#endif
#endif /* IFO_READ_H_INCLUDED */

@ -0,0 +1,893 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef IFO_TYPES_H_INCLUDED
#define IFO_TYPES_H_INCLUDED
/*
* Copyright (C) 2000, 2001 Bj<EFBFBD>rn Englund <d4bjorn@dtek.chalmers.se>,
* H<EFBFBD>kan Hjort <d95hjort@dtek.chalmers.se>
*
* 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 "dvd_reader.h"
#if defined(__BEOS__)
#if !defined(_INTTYPES_H_) && !defined(_INTTYPES_H) && !defined(_STDINT_H_) && !defined(_STDINT_H)
#error "Must include <inttypes.h> or <stdint.h> before any libdvdread header."
#endif
#else
#if !defined(UINT8_MAX) || !defined(UINT16_MAX) || !defined(INT32_MAX)
#error "Must include <inttypes.h> or <stdint.h> before any libdvdread header."
#endif
#endif
#undef ATTRIBUTE_PACKED
#undef PRAGMA_PACK_BEGIN
#undef PRAGMA_PACK_END
#if defined(__GNUC__)
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
#define ATTRIBUTE_PACKED __attribute__ ((packed))
#define PRAGMA_PACK 0
#endif
#endif
#if !defined(ATTRIBUTE_PACKED)
#define ATTRIBUTE_PACKED
#define PRAGMA_PACK 1
#endif
#if PRAGMA_PACK
#pragma pack(1)
#endif
/**
* Common
*
* The following structures are used in both the VMGI and VTSI.
*/
/**
* DVD Time Information.
*/
typedef struct {
uint8_t hour;
uint8_t minute;
uint8_t second;
uint8_t frame_u; /* The two high bits are the frame rate. */
} ATTRIBUTE_PACKED dvd_time_t;
/**
* Type to store per-command data.
*/
typedef struct {
uint8_t bytes[8];
} ATTRIBUTE_PACKED vm_cmd_t;
#define COMMAND_DATA_SIZE 8U
/**
* Video Attributes.
*/
typedef struct {
#ifdef WORDS_BIGENDIAN
unsigned int mpeg_version : 2;
unsigned int video_format : 2;
unsigned int display_aspect_ratio : 2;
unsigned int permitted_df : 2;
unsigned int line21_cc_1 : 1;
unsigned int line21_cc_2 : 1;
unsigned int unknown1 : 1;
unsigned int bit_rate : 1;
unsigned int picture_size : 2;
unsigned int letterboxed : 1;
unsigned int film_mode : 1;
#else
unsigned int permitted_df : 2;
unsigned int display_aspect_ratio : 2;
unsigned int video_format : 2;
unsigned int mpeg_version : 2;
unsigned int film_mode : 1;
unsigned int letterboxed : 1;
unsigned int picture_size : 2;
unsigned int bit_rate : 1;
unsigned int unknown1 : 1;
unsigned int line21_cc_2 : 1;
unsigned int line21_cc_1 : 1;
#endif
} ATTRIBUTE_PACKED video_attr_t;
/**
* Audio Attributes.
*/
typedef struct {
#ifdef WORDS_BIGENDIAN
unsigned int audio_format : 3;
unsigned int multichannel_extension : 1;
unsigned int lang_type : 2;
unsigned int application_mode : 2;
unsigned int quantization : 2;
unsigned int sample_frequency : 2;
unsigned int unknown1 : 1;
unsigned int channels : 3;
#else
unsigned int application_mode : 2;
unsigned int lang_type : 2;
unsigned int multichannel_extension : 1;
unsigned int audio_format : 3;
unsigned int channels : 3;
unsigned int unknown1 : 1;
unsigned int sample_frequency : 2;
unsigned int quantization : 2;
#endif
uint16_t lang_code;
uint8_t lang_extension;
uint8_t code_extension;
uint8_t unknown3;
union {
struct {
#ifdef WORDS_BIGENDIAN
unsigned int unknown4 : 1;
unsigned int channel_assignment : 3;
unsigned int version : 2;
unsigned int mc_intro : 1; /* probably 0: true, 1:false */
unsigned int mode : 1; /* Karaoke mode 0: solo 1: duet */
#else
unsigned int mode : 1;
unsigned int mc_intro : 1;
unsigned int version : 2;
unsigned int channel_assignment : 3;
unsigned int unknown4 : 1;
#endif
} ATTRIBUTE_PACKED karaoke;
struct {
#ifdef WORDS_BIGENDIAN
unsigned int unknown5 : 4;
unsigned int dolby_encoded : 1; /* suitable for surround decoding */
unsigned int unknown6 : 3;
#else
unsigned int unknown6 : 3;
unsigned int dolby_encoded : 1;
unsigned int unknown5 : 4;
#endif
} ATTRIBUTE_PACKED surround;
} ATTRIBUTE_PACKED app_info;
} ATTRIBUTE_PACKED audio_attr_t;
/**
* MultiChannel Extension
*/
typedef struct {
#ifdef WORDS_BIGENDIAN
unsigned int zero1 : 7;
unsigned int ach0_gme : 1;
unsigned int zero2 : 7;
unsigned int ach1_gme : 1;
unsigned int zero3 : 4;
unsigned int ach2_gv1e : 1;
unsigned int ach2_gv2e : 1;
unsigned int ach2_gm1e : 1;
unsigned int ach2_gm2e : 1;
unsigned int zero4 : 4;
unsigned int ach3_gv1e : 1;
unsigned int ach3_gv2e : 1;
unsigned int ach3_gmAe : 1;
unsigned int ach3_se2e : 1;
unsigned int zero5 : 4;
unsigned int ach4_gv1e : 1;
unsigned int ach4_gv2e : 1;
unsigned int ach4_gmBe : 1;
unsigned int ach4_seBe : 1;
#else
unsigned int ach0_gme : 1;
unsigned int zero1 : 7;
unsigned int ach1_gme : 1;
unsigned int zero2 : 7;
unsigned int ach2_gm2e : 1;
unsigned int ach2_gm1e : 1;
unsigned int ach2_gv2e : 1;
unsigned int ach2_gv1e : 1;
unsigned int zero3 : 4;
unsigned int ach3_se2e : 1;
unsigned int ach3_gmAe : 1;
unsigned int ach3_gv2e : 1;
unsigned int ach3_gv1e : 1;
unsigned int zero4 : 4;
unsigned int ach4_seBe : 1;
unsigned int ach4_gmBe : 1;
unsigned int ach4_gv2e : 1;
unsigned int ach4_gv1e : 1;
unsigned int zero5 : 4;
#endif
uint8_t zero6[19];
} ATTRIBUTE_PACKED multichannel_ext_t;
/**
* Subpicture Attributes.
*/
typedef struct {
/*
* type: 0 not specified
* 1 language
* 2 other
* coding mode: 0 run length
* 1 extended
* 2 other
* language: indicates language if type == 1
* lang extension: if type == 1 contains the lang extension
*/
#ifdef WORDS_BIGENDIAN
unsigned int code_mode : 3;
unsigned int zero1 : 3;
unsigned int type : 2;
#else
unsigned int type : 2;
unsigned int zero1 : 3;
unsigned int code_mode : 3;
#endif
uint8_t zero2;
uint16_t lang_code;
uint8_t lang_extension;
uint8_t code_extension;
} ATTRIBUTE_PACKED subp_attr_t;
/**
* PGC Command Table.
*/
typedef struct {
uint16_t nr_of_pre;
uint16_t nr_of_post;
uint16_t nr_of_cell;
uint16_t last_byte;
vm_cmd_t *pre_cmds;
vm_cmd_t *post_cmds;
vm_cmd_t *cell_cmds;
} ATTRIBUTE_PACKED pgc_command_tbl_t;
#define PGC_COMMAND_TBL_SIZE 8U
/**
* PGC Program Map
*/
typedef uint8_t pgc_program_map_t;
/**
* Cell Playback Information.
*/
typedef struct {
#ifdef WORDS_BIGENDIAN
unsigned int block_mode : 2;
unsigned int block_type : 2;
unsigned int seamless_play : 1;
unsigned int interleaved : 1;
unsigned int stc_discontinuity: 1;
unsigned int seamless_angle : 1;
unsigned int playback_mode : 1; /**< When set, enter StillMode after each VOBU */
unsigned int restricted : 1; /**< ?? drop out of fastforward? */
unsigned int unknown2 : 6;
#else
unsigned int seamless_angle : 1;
unsigned int stc_discontinuity: 1;
unsigned int interleaved : 1;
unsigned int seamless_play : 1;
unsigned int block_type : 2;
unsigned int block_mode : 2;
unsigned int unknown2 : 6;
unsigned int restricted : 1;
unsigned int playback_mode : 1;
#endif
uint8_t still_time;
uint8_t cell_cmd_nr;
dvd_time_t playback_time;
uint32_t first_sector;
uint32_t first_ilvu_end_sector;
uint32_t last_vobu_start_sector;
uint32_t last_sector;
} ATTRIBUTE_PACKED cell_playback_t;
#define BLOCK_TYPE_NONE 0x0
#define BLOCK_TYPE_ANGLE_BLOCK 0x1
#define BLOCK_MODE_NOT_IN_BLOCK 0x0
#define BLOCK_MODE_FIRST_CELL 0x1
#define BLOCK_MODE_IN_BLOCK 0x2
#define BLOCK_MODE_LAST_CELL 0x3
/**
* Cell Position Information.
*/
typedef struct {
uint16_t vob_id_nr;
uint8_t zero_1;
uint8_t cell_nr;
} ATTRIBUTE_PACKED cell_position_t;
/**
* User Operations.
*/
typedef struct {
#ifdef WORDS_BIGENDIAN
unsigned int zero : 7; /* 25-31 */
unsigned int video_pres_mode_change : 1; /* 24 */
unsigned int karaoke_audio_pres_mode_change : 1; /* 23 */
unsigned int angle_change : 1;
unsigned int subpic_stream_change : 1;
unsigned int audio_stream_change : 1;
unsigned int pause_on : 1;
unsigned int still_off : 1;
unsigned int button_select_or_activate : 1;
unsigned int resume : 1; /* 16 */
unsigned int chapter_menu_call : 1; /* 15 */
unsigned int angle_menu_call : 1;
unsigned int audio_menu_call : 1;
unsigned int subpic_menu_call : 1;
unsigned int root_menu_call : 1;
unsigned int title_menu_call : 1;
unsigned int backward_scan : 1;
unsigned int forward_scan : 1; /* 8 */
unsigned int next_pg_search : 1; /* 7 */
unsigned int prev_or_top_pg_search : 1;
unsigned int time_or_chapter_search : 1;
unsigned int go_up : 1;
unsigned int stop : 1;
unsigned int title_play : 1;
unsigned int chapter_search_or_play : 1;
unsigned int title_or_time_play : 1; /* 0 */
#else
unsigned int video_pres_mode_change : 1; /* 24 */
unsigned int zero : 7; /* 25-31 */
unsigned int resume : 1; /* 16 */
unsigned int button_select_or_activate : 1;
unsigned int still_off : 1;
unsigned int pause_on : 1;
unsigned int audio_stream_change : 1;
unsigned int subpic_stream_change : 1;
unsigned int angle_change : 1;
unsigned int karaoke_audio_pres_mode_change : 1; /* 23 */
unsigned int forward_scan : 1; /* 8 */
unsigned int backward_scan : 1;
unsigned int title_menu_call : 1;
unsigned int root_menu_call : 1;
unsigned int subpic_menu_call : 1;
unsigned int audio_menu_call : 1;
unsigned int angle_menu_call : 1;
unsigned int chapter_menu_call : 1; /* 15 */
unsigned int title_or_time_play : 1; /* 0 */
unsigned int chapter_search_or_play : 1;
unsigned int title_play : 1;
unsigned int stop : 1;
unsigned int go_up : 1;
unsigned int time_or_chapter_search : 1;
unsigned int prev_or_top_pg_search : 1;
unsigned int next_pg_search : 1; /* 7 */
#endif
} ATTRIBUTE_PACKED user_ops_t;
/**
* Program Chain Information.
*/
typedef struct {
uint16_t zero_1;
uint8_t nr_of_programs;
uint8_t nr_of_cells;
dvd_time_t playback_time;
user_ops_t prohibited_ops;
uint16_t audio_control[8]; /* New type? */
uint32_t subp_control[32]; /* New type? */
uint16_t next_pgc_nr;
uint16_t prev_pgc_nr;
uint16_t goup_pgc_nr;
uint8_t pg_playback_mode;
uint8_t still_time;
uint32_t palette[16]; /* New type struct {zero_1, Y, Cr, Cb} ? */
uint16_t command_tbl_offset;
uint16_t program_map_offset;
uint16_t cell_playback_offset;
uint16_t cell_position_offset;
pgc_command_tbl_t *command_tbl;
pgc_program_map_t *program_map;
cell_playback_t *cell_playback;
cell_position_t *cell_position;
} ATTRIBUTE_PACKED pgc_t;
#define PGC_SIZE 236U
/**
* Program Chain Information Search Pointer.
*/
typedef struct {
uint8_t entry_id;
#ifdef WORDS_BIGENDIAN
unsigned int block_mode : 2;
unsigned int block_type : 2;
unsigned int unknown1 : 4;
#else
unsigned int unknown1 : 4;
unsigned int block_type : 2;
unsigned int block_mode : 2;
#endif
uint16_t ptl_id_mask;
uint32_t pgc_start_byte;
pgc_t *pgc;
} ATTRIBUTE_PACKED pgci_srp_t;
#define PGCI_SRP_SIZE 8U
/**
* Program Chain Information Table.
*/
typedef struct {
uint16_t nr_of_pgci_srp;
uint16_t zero_1;
uint32_t last_byte;
pgci_srp_t *pgci_srp;
} ATTRIBUTE_PACKED pgcit_t;
#define PGCIT_SIZE 8U
/**
* Menu PGCI Language Unit.
*/
typedef struct {
uint16_t lang_code;
uint8_t lang_extension;
uint8_t exists;
uint32_t lang_start_byte;
pgcit_t *pgcit;
} ATTRIBUTE_PACKED pgci_lu_t;
#define PGCI_LU_SIZE 8U
/**
* Menu PGCI Unit Table.
*/
typedef struct {
uint16_t nr_of_lus;
uint16_t zero_1;
uint32_t last_byte;
pgci_lu_t *lu;
} ATTRIBUTE_PACKED pgci_ut_t;
#define PGCI_UT_SIZE 8U
/**
* Cell Address Information.
*/
typedef struct {
uint16_t vob_id;
uint8_t cell_id;
uint8_t zero_1;
uint32_t start_sector;
uint32_t last_sector;
} ATTRIBUTE_PACKED cell_adr_t;
/**
* Cell Address Table.
*/
typedef struct {
uint16_t nr_of_vobs; /* VOBs */
uint16_t zero_1;
uint32_t last_byte;
cell_adr_t *cell_adr_table; /* No explicit size given. */
} ATTRIBUTE_PACKED c_adt_t;
#define C_ADT_SIZE 8U
/**
* VOBU Address Map.
*/
typedef struct {
uint32_t last_byte;
uint32_t *vobu_start_sectors;
} ATTRIBUTE_PACKED vobu_admap_t;
#define VOBU_ADMAP_SIZE 4U
/**
* VMGI
*
* The following structures relate to the Video Manager.
*/
/**
* Video Manager Information Management Table.
*/
typedef struct {
char vmg_identifier[12];
uint32_t vmg_last_sector;
uint8_t zero_1[12];
uint32_t vmgi_last_sector;
uint8_t zero_2;
uint8_t specification_version;
uint32_t vmg_category;
uint16_t vmg_nr_of_volumes;
uint16_t vmg_this_volume_nr;
uint8_t disc_side;
uint8_t zero_3[19];
uint16_t vmg_nr_of_title_sets; /* Number of VTSs. */
char provider_identifier[32];
uint64_t vmg_pos_code;
uint8_t zero_4[24];
uint32_t vmgi_last_byte;
uint32_t first_play_pgc;
uint8_t zero_5[56];
uint32_t vmgm_vobs; /* sector */
uint32_t tt_srpt; /* sector */
uint32_t vmgm_pgci_ut; /* sector */
uint32_t ptl_mait; /* sector */
uint32_t vts_atrt; /* sector */
uint32_t txtdt_mgi; /* sector */
uint32_t vmgm_c_adt; /* sector */
uint32_t vmgm_vobu_admap; /* sector */
uint8_t zero_6[32];
video_attr_t vmgm_video_attr;
uint8_t zero_7;
uint8_t nr_of_vmgm_audio_streams; /* should be 0 or 1 */
audio_attr_t vmgm_audio_attr;
audio_attr_t zero_8[7];
uint8_t zero_9[17];
uint8_t nr_of_vmgm_subp_streams; /* should be 0 or 1 */
subp_attr_t vmgm_subp_attr;
subp_attr_t zero_10[27]; /* XXX: how much 'padding' here? */
} ATTRIBUTE_PACKED vmgi_mat_t;
typedef struct {
#ifdef WORDS_BIGENDIAN
unsigned int zero_1 : 1;
unsigned int multi_or_random_pgc_title : 1; /* 0: one sequential pgc title */
unsigned int jlc_exists_in_cell_cmd : 1;
unsigned int jlc_exists_in_prepost_cmd : 1;
unsigned int jlc_exists_in_button_cmd : 1;
unsigned int jlc_exists_in_tt_dom : 1;
unsigned int chapter_search_or_play : 1; /* UOP 1 */
unsigned int title_or_time_play : 1; /* UOP 0 */
#else
unsigned int title_or_time_play : 1;
unsigned int chapter_search_or_play : 1;
unsigned int jlc_exists_in_tt_dom : 1;
unsigned int jlc_exists_in_button_cmd : 1;
unsigned int jlc_exists_in_prepost_cmd : 1;
unsigned int jlc_exists_in_cell_cmd : 1;
unsigned int multi_or_random_pgc_title : 1;
unsigned int zero_1 : 1;
#endif
} ATTRIBUTE_PACKED playback_type_t;
/**
* Title Information.
*/
typedef struct {
playback_type_t pb_ty;
uint8_t nr_of_angles;
uint16_t nr_of_ptts;
uint16_t parental_id;
uint8_t title_set_nr;
uint8_t vts_ttn;
uint32_t title_set_sector;
} ATTRIBUTE_PACKED title_info_t;
/**
* PartOfTitle Search Pointer Table.
*/
typedef struct {
uint16_t nr_of_srpts;
uint16_t zero_1;
uint32_t last_byte;
title_info_t *title;
} ATTRIBUTE_PACKED tt_srpt_t;
#define TT_SRPT_SIZE 8U
/**
* Parental Management Information Unit Table.
* Level 1 (US: G), ..., 7 (US: NC-17), 8
*/
typedef uint16_t pf_level_t[8];
/**
* Parental Management Information Unit Table.
*/
typedef struct {
uint16_t country_code;
uint16_t zero_1;
uint16_t pf_ptl_mai_start_byte;
uint16_t zero_2;
pf_level_t *pf_ptl_mai; /* table of (nr_of_vtss + 1), video_ts is first */
} ATTRIBUTE_PACKED ptl_mait_country_t;
#define PTL_MAIT_COUNTRY_SIZE 8U
/**
* Parental Management Information Table.
*/
typedef struct {
uint16_t nr_of_countries;
uint16_t nr_of_vtss;
uint32_t last_byte;
ptl_mait_country_t *countries;
} ATTRIBUTE_PACKED ptl_mait_t;
#define PTL_MAIT_SIZE 8U
/**
* Video Title Set Attributes.
*/
typedef struct {
uint32_t last_byte;
uint32_t vts_cat;
video_attr_t vtsm_vobs_attr;
uint8_t zero_1;
uint8_t nr_of_vtsm_audio_streams; /* should be 0 or 1 */
audio_attr_t vtsm_audio_attr;
audio_attr_t zero_2[7];
uint8_t zero_3[16];
uint8_t zero_4;
uint8_t nr_of_vtsm_subp_streams; /* should be 0 or 1 */
subp_attr_t vtsm_subp_attr;
subp_attr_t zero_5[27];
uint8_t zero_6[2];
video_attr_t vtstt_vobs_video_attr;
uint8_t zero_7;
uint8_t nr_of_vtstt_audio_streams;
audio_attr_t vtstt_audio_attr[8];
uint8_t zero_8[16];
uint8_t zero_9;
uint8_t nr_of_vtstt_subp_streams;
subp_attr_t vtstt_subp_attr[32];
} ATTRIBUTE_PACKED vts_attributes_t;
#define VTS_ATTRIBUTES_SIZE 542U
#define VTS_ATTRIBUTES_MIN_SIZE 356U
/**
* Video Title Set Attribute Table.
*/
typedef struct {
uint16_t nr_of_vtss;
uint16_t zero_1;
uint32_t last_byte;
vts_attributes_t *vts;
uint32_t *vts_atrt_offsets; /* offsets table for each vts_attributes */
} ATTRIBUTE_PACKED vts_atrt_t;
#define VTS_ATRT_SIZE 8U
/**
* Text Data. (Incomplete)
*/
typedef struct {
uint32_t last_byte; /* offsets are relative here */
uint16_t offsets[100]; /* == nr_of_srpts + 1 (first is disc title) */
#if 0
uint16_t unknown; /* 0x48 ?? 0x48 words (16bit) info following */
uint16_t zero_1;
uint8_t type_of_info; /* ?? 01 == disc, 02 == Title, 04 == Title part */
uint8_t unknown1;
uint8_t unknown2;
uint8_t unknown3;
uint8_t unknown4; /* ?? allways 0x30 language?, text format? */
uint8_t unknown5;
uint16_t offset; /* from first */
char text[12]; /* ended by 0x09 */
#endif
} ATTRIBUTE_PACKED txtdt_t;
/**
* Text Data Language Unit. (Incomplete)
*/
typedef struct {
uint16_t lang_code;
uint16_t unknown; /* 0x0001, title 1? disc 1? side 1? */
uint32_t txtdt_start_byte; /* prt, rel start of vmg_txtdt_mgi */
txtdt_t *txtdt;
} ATTRIBUTE_PACKED txtdt_lu_t;
#define TXTDT_LU_SIZE 8U
/**
* Text Data Manager Information. (Incomplete)
*/
typedef struct {
char disc_name[14]; /* how many bytes?? */
uint16_t nr_of_language_units; /* 32bit?? */
uint32_t last_byte;
txtdt_lu_t *lu;
} ATTRIBUTE_PACKED txtdt_mgi_t;
#define TXTDT_MGI_SIZE 20U
/**
* VTS
*
* Structures relating to the Video Title Set (VTS).
*/
/**
* Video Title Set Information Management Table.
*/
typedef struct {
char vts_identifier[12];
uint32_t vts_last_sector;
uint8_t zero_1[12];
uint32_t vtsi_last_sector;
uint8_t zero_2;
uint8_t specification_version;
uint32_t vts_category;
uint16_t zero_3;
uint16_t zero_4;
uint8_t zero_5;
uint8_t zero_6[19];
uint16_t zero_7;
uint8_t zero_8[32];
uint64_t zero_9;
uint8_t zero_10[24];
uint32_t vtsi_last_byte;
uint32_t zero_11;
uint8_t zero_12[56];
uint32_t vtsm_vobs; /* sector */
uint32_t vtstt_vobs; /* sector */
uint32_t vts_ptt_srpt; /* sector */
uint32_t vts_pgcit; /* sector */
uint32_t vtsm_pgci_ut; /* sector */
uint32_t vts_tmapt; /* sector */
uint32_t vtsm_c_adt; /* sector */
uint32_t vtsm_vobu_admap; /* sector */
uint32_t vts_c_adt; /* sector */
uint32_t vts_vobu_admap; /* sector */
uint8_t zero_13[24];
video_attr_t vtsm_video_attr;
uint8_t zero_14;
uint8_t nr_of_vtsm_audio_streams; /* should be 0 or 1 */
audio_attr_t vtsm_audio_attr;
audio_attr_t zero_15[7];
uint8_t zero_16[17];
uint8_t nr_of_vtsm_subp_streams; /* should be 0 or 1 */
subp_attr_t vtsm_subp_attr;
subp_attr_t zero_17[27];
uint8_t zero_18[2];
video_attr_t vts_video_attr;
uint8_t zero_19;
uint8_t nr_of_vts_audio_streams;
audio_attr_t vts_audio_attr[8];
uint8_t zero_20[17];
uint8_t nr_of_vts_subp_streams;
subp_attr_t vts_subp_attr[32];
uint16_t zero_21;
multichannel_ext_t vts_mu_audio_attr[8];
/* XXX: how much 'padding' here, if any? */
} ATTRIBUTE_PACKED vtsi_mat_t;
/**
* PartOfTitle Unit Information.
*/
typedef struct {
uint16_t pgcn;
uint16_t pgn;
} ATTRIBUTE_PACKED ptt_info_t;
/**
* PartOfTitle Information.
*/
typedef struct {
uint16_t nr_of_ptts;
ptt_info_t *ptt;
} ATTRIBUTE_PACKED ttu_t;
/**
* PartOfTitle Search Pointer Table.
*/
typedef struct {
uint16_t nr_of_srpts;
uint16_t zero_1;
uint32_t last_byte;
ttu_t *title;
uint32_t *ttu_offset; /* offset table for each ttu */
} ATTRIBUTE_PACKED vts_ptt_srpt_t;
#define VTS_PTT_SRPT_SIZE 8U
/**
* Time Map Entry.
*/
/* Should this be bit field at all or just the uint32_t? */
typedef uint32_t map_ent_t;
/**
* Time Map.
*/
typedef struct {
uint8_t tmu; /* Time unit, in seconds */
uint8_t zero_1;
uint16_t nr_of_entries;
map_ent_t *map_ent;
} ATTRIBUTE_PACKED vts_tmap_t;
#define VTS_TMAP_SIZE 4U
/**
* Time Map Table.
*/
typedef struct {
uint16_t nr_of_tmaps;
uint16_t zero_1;
uint32_t last_byte;
vts_tmap_t *tmap;
uint32_t *tmap_offset; /* offset table for each tmap */
} ATTRIBUTE_PACKED vts_tmapt_t;
#define VTS_TMAPT_SIZE 8U
#if PRAGMA_PACK
#pragma pack()
#endif
/**
* The following structure defines an IFO file. The structure is divided into
* two parts, the VMGI, or Video Manager Information, which is read from the
* VIDEO_TS.[IFO,BUP] file, and the VTSI, or Video Title Set Information, which
* is read in from the VTS_XX_0.[IFO,BUP] files.
*/
typedef struct {
dvd_file_t *file;
/* VMGI */
vmgi_mat_t *vmgi_mat;
tt_srpt_t *tt_srpt;
pgc_t *first_play_pgc;
ptl_mait_t *ptl_mait;
vts_atrt_t *vts_atrt;
txtdt_mgi_t *txtdt_mgi;
/* Common */
pgci_ut_t *pgci_ut;
c_adt_t *menu_c_adt;
vobu_admap_t *menu_vobu_admap;
/* VTSI */
vtsi_mat_t *vtsi_mat;
vts_ptt_srpt_t *vts_ptt_srpt;
pgcit_t *vts_pgcit;
vts_tmapt_t *vts_tmapt;
c_adt_t *vts_c_adt;
vobu_admap_t *vts_vobu_admap;
} ifo_handle_t;
#endif /* IFO_TYPES_H_INCLUDED */

@ -0,0 +1,407 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
/* md5.c - Functions to compute MD5 message digest of files or memory blocks
according to the definition of MD5 in RFC 1321 from April 1992.
Copyright (C) 1995, 1996, 2001 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C
Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
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, 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. */
/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */
#include "config.h"
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
#include "md5.h"
#ifdef _LIBC
# include <endian.h>
# if __BYTE_ORDER == __BIG_ENDIAN
# define WORDS_BIGENDIAN 1
# endif
#endif
#ifdef WORDS_BIGENDIAN
# define SWAP(n) \
(((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
#else
# define SWAP(n) (n)
#endif
/* This array contains the bytes used to pad the buffer to the next
64-byte boundary. (RFC 1321, 3.1: Step 1) */
static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
/* Initialize structure containing state of computation.
(RFC 1321, 3.3: Step 3) */
void
md5_init_ctx (ctx)
struct md5_ctx *ctx;
{
ctx->A = 0x67452301;
ctx->B = 0xefcdab89;
ctx->C = 0x98badcfe;
ctx->D = 0x10325476;
ctx->total[0] = ctx->total[1] = 0;
ctx->buflen = 0;
}
/* Put result from CTX in first 16 bytes following RESBUF. The result
must be in little endian byte order.
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
void *
md5_read_ctx (ctx, resbuf)
const struct md5_ctx *ctx;
void *resbuf;
{
((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
((md5_uint32 *) resbuf)[2] = SWAP (ctx->C);
((md5_uint32 *) resbuf)[3] = SWAP (ctx->D);
return resbuf;
}
/* Process the remaining bytes in the internal buffer and the usual
prolog according to the standard and write the result to RESBUF.
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
void *
md5_finish_ctx (ctx, resbuf)
struct md5_ctx *ctx;
void *resbuf;
{
/* Take yet unprocessed bytes into account. */
md5_uint32 bytes = ctx->buflen;
size_t pad;
/* Now count remaining bytes. */
ctx->total[0] += bytes;
if (ctx->total[0] < bytes)
++ctx->total[1];
pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
memcpy (&ctx->buffer[bytes], fillbuf, pad);
/* Put the 64-bit file length in *bits* at the end of the buffer. */
*(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
*(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
(ctx->total[0] >> 29));
/* Process last bytes. */
md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
return md5_read_ctx (ctx, resbuf);
}
/* Compute MD5 message digest for bytes read from STREAM. The
resulting message digest number will be written into the 16 bytes
beginning at RESBLOCK. */
int
md5_stream (stream, resblock)
FILE *stream;
void *resblock;
{
/* Important: BLOCKSIZE must be a multiple of 64. */
#define BLOCKSIZE 4096
struct md5_ctx ctx;
char buffer[BLOCKSIZE + 72];
size_t sum;
/* Initialize the computation context. */
md5_init_ctx (&ctx);
/* Iterate over full file contents. */
while (1)
{
/* We read the file in blocks of BLOCKSIZE bytes. One call of the
computation function processes the whole buffer so that with the
next round of the loop another block can be read. */
size_t n;
sum = 0;
/* Read block. Take care for partial reads. */
do
{
n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
sum += n;
}
while (sum < BLOCKSIZE && n != 0);
if (n == 0 && ferror (stream))
return 1;
/* If end of file is reached, end the loop. */
if (n == 0)
break;
/* Process buffer with BLOCKSIZE bytes. Note that
BLOCKSIZE % 64 == 0
*/
md5_process_block (buffer, BLOCKSIZE, &ctx);
}
/* Add the last bytes if necessary. */
if (sum > 0)
md5_process_bytes (buffer, sum, &ctx);
/* Construct result in desired memory. */
md5_finish_ctx (&ctx, resblock);
return 0;
}
/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
result is always in little endian byte order, so that a byte-wise
output yields to the wanted ASCII representation of the message
digest. */
void *
md5_buffer (buffer, len, resblock)
const char *buffer;
size_t len;
void *resblock;
{
struct md5_ctx ctx;
/* Initialize the computation context. */
md5_init_ctx (&ctx);
/* Process whole buffer but last len % 64 bytes. */
md5_process_bytes (buffer, len, &ctx);
/* Put result in desired memory area. */
return md5_finish_ctx (&ctx, resblock);
}
void
md5_process_bytes (buffer, len, ctx)
const void *buffer;
size_t len;
struct md5_ctx *ctx;
{
/* When we already have some bits in our internal buffer concatenate
both inputs first. */
if (ctx->buflen != 0)
{
size_t left_over = ctx->buflen;
size_t add = 128 - left_over > len ? len : 128 - left_over;
memcpy (&ctx->buffer[left_over], buffer, add);
ctx->buflen += add;
if (left_over + add > 64)
{
md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx);
/* The regions in the following copy operation cannot overlap. */
memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
(left_over + add) & 63);
ctx->buflen = (left_over + add) & 63;
}
buffer = (const char *) buffer + add;
len -= add;
}
/* Process available complete blocks. */
if (len > 64)
{
md5_process_block (buffer, len & ~63, ctx);
buffer = (const char *) buffer + (len & ~63);
len &= 63;
}
/* Move remaining bytes in internal buffer. */
if (len > 0)
{
memcpy (ctx->buffer, buffer, len);
ctx->buflen = len;
}
}
/* These are the four functions used in the four steps of the MD5 algorithm
and defined in the RFC 1321. The first function is a little bit optimized
(as found in Colin Plumbs public domain implementation). */
/* #define FF(b, c, d) ((b & c) | (~b & d)) */
#define FF(b, c, d) (d ^ (b & (c ^ d)))
#define FG(b, c, d) FF (d, b, c)
#define FH(b, c, d) (b ^ c ^ d)
#define FI(b, c, d) (c ^ (b | ~d))
/* Process LEN bytes of BUFFER, accumulating context into CTX.
It is assumed that LEN % 64 == 0. */
void
md5_process_block (buffer, len, ctx)
const void *buffer;
size_t len;
struct md5_ctx *ctx;
{
md5_uint32 correct_words[16];
const md5_uint32 *words = buffer;
size_t nwords = len / sizeof (md5_uint32);
const md5_uint32 *endp = words + nwords;
md5_uint32 A = ctx->A;
md5_uint32 B = ctx->B;
md5_uint32 C = ctx->C;
md5_uint32 D = ctx->D;
/* First increment the byte count. RFC 1321 specifies the possible
length of the file up to 2^64 bits. Here we only compute the
number of bytes. Do a double word increment. */
ctx->total[0] += len;
if (ctx->total[0] < len)
++ctx->total[1];
/* Process all bytes in the buffer with 64 bytes in each round of
the loop. */
while (words < endp)
{
md5_uint32 *cwp = correct_words;
md5_uint32 A_save = A;
md5_uint32 B_save = B;
md5_uint32 C_save = C;
md5_uint32 D_save = D;
/* First round: using the given function, the context and a constant
the next context is computed. Because the algorithms processing
unit is a 32-bit word and it is determined to work on words in
little endian byte order we perhaps have to change the byte order
before the computation. To reduce the work for the next steps
we store the swapped words in the array CORRECT_WORDS. */
#define OP(a, b, c, d, s, T) \
do \
{ \
a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \
++words; \
a = rol (a, s); \
a += b; \
} \
while (0)
/* Before we start, one word to the strange constants.
They are defined in RFC 1321 as
T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64, or
perl -e 'foreach(1..64){printf "0x%08x\n", int (4294967296 * abs (sin $_))}'
*/
/* Round 1. */
OP (A, B, C, D, 7, 0xd76aa478);
OP (D, A, B, C, 12, 0xe8c7b756);
OP (C, D, A, B, 17, 0x242070db);
OP (B, C, D, A, 22, 0xc1bdceee);
OP (A, B, C, D, 7, 0xf57c0faf);
OP (D, A, B, C, 12, 0x4787c62a);
OP (C, D, A, B, 17, 0xa8304613);
OP (B, C, D, A, 22, 0xfd469501);
OP (A, B, C, D, 7, 0x698098d8);
OP (D, A, B, C, 12, 0x8b44f7af);
OP (C, D, A, B, 17, 0xffff5bb1);
OP (B, C, D, A, 22, 0x895cd7be);
OP (A, B, C, D, 7, 0x6b901122);
OP (D, A, B, C, 12, 0xfd987193);
OP (C, D, A, B, 17, 0xa679438e);
OP (B, C, D, A, 22, 0x49b40821);
/* For the second to fourth round we have the possibly swapped words
in CORRECT_WORDS. Redefine the macro to take an additional first
argument specifying the function to use. */
#undef OP
#define OP(f, a, b, c, d, k, s, T) \
do \
{ \
a += f (b, c, d) + correct_words[k] + T; \
a = rol (a, s); \
a += b; \
} \
while (0)
/* Round 2. */
OP (FG, A, B, C, D, 1, 5, 0xf61e2562);
OP (FG, D, A, B, C, 6, 9, 0xc040b340);
OP (FG, C, D, A, B, 11, 14, 0x265e5a51);
OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa);
OP (FG, A, B, C, D, 5, 5, 0xd62f105d);
OP (FG, D, A, B, C, 10, 9, 0x02441453);
OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);
OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8);
OP (FG, A, B, C, D, 9, 5, 0x21e1cde6);
OP (FG, D, A, B, C, 14, 9, 0xc33707d6);
OP (FG, C, D, A, B, 3, 14, 0xf4d50d87);
OP (FG, B, C, D, A, 8, 20, 0x455a14ed);
OP (FG, A, B, C, D, 13, 5, 0xa9e3e905);
OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8);
OP (FG, C, D, A, B, 7, 14, 0x676f02d9);
OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
/* Round 3. */
OP (FH, A, B, C, D, 5, 4, 0xfffa3942);
OP (FH, D, A, B, C, 8, 11, 0x8771f681);
OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);
OP (FH, B, C, D, A, 14, 23, 0xfde5380c);
OP (FH, A, B, C, D, 1, 4, 0xa4beea44);
OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9);
OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60);
OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);
OP (FH, A, B, C, D, 13, 4, 0x289b7ec6);
OP (FH, D, A, B, C, 0, 11, 0xeaa127fa);
OP (FH, C, D, A, B, 3, 16, 0xd4ef3085);
OP (FH, B, C, D, A, 6, 23, 0x04881d05);
OP (FH, A, B, C, D, 9, 4, 0xd9d4d039);
OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);
OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);
OP (FH, B, C, D, A, 2, 23, 0xc4ac5665);
/* Round 4. */
OP (FI, A, B, C, D, 0, 6, 0xf4292244);
OP (FI, D, A, B, C, 7, 10, 0x432aff97);
OP (FI, C, D, A, B, 14, 15, 0xab9423a7);
OP (FI, B, C, D, A, 5, 21, 0xfc93a039);
OP (FI, A, B, C, D, 12, 6, 0x655b59c3);
OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92);
OP (FI, C, D, A, B, 10, 15, 0xffeff47d);
OP (FI, B, C, D, A, 1, 21, 0x85845dd1);
OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f);
OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
OP (FI, C, D, A, B, 6, 15, 0xa3014314);
OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);
OP (FI, A, B, C, D, 4, 6, 0xf7537e82);
OP (FI, D, A, B, C, 11, 10, 0xbd3af235);
OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb);
OP (FI, B, C, D, A, 9, 21, 0xeb86d391);
/* Add the starting values of the context. */
A += A_save;
B += B_save;
C += C_save;
D += D_save;
}
/* Put checksum in context given as argument. */
ctx->A = A;
ctx->B = B;
ctx->C = C;
ctx->D = D;
}

@ -0,0 +1,162 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
/* md5.h - Declaration of functions and data types used for MD5 sum
computing library functions.
Copyright (C) 1995, 1996, 1999 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C
Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
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, 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 _MD5_H
#define _MD5_H
#include <stdio.h>
#if defined HAVE_LIMITS_H || _LIBC
# include <limits.h>
#endif
/* The following contortions are an attempt to use the C preprocessor
to determine an unsigned integral type that is 32 bits wide. An
alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
doing that would require that the configure script compile and *run*
the resulting executable. Locally running cross-compiled executables
is usually not possible. */
#ifdef _LIBC
# include <sys/types.h>
typedef u_int32_t md5_uint32;
#else
# if defined __STDC__ && __STDC__
# define UINT_MAX_32_BITS 4294967295U
# else
# define UINT_MAX_32_BITS 0xFFFFFFFF
# endif
/* If UINT_MAX isn't defined, assume it's a 32-bit type.
This should be valid for all systems GNU cares about because
that doesn't include 16-bit systems, and only modern systems
(that certainly have <limits.h>) have 64+-bit integral types. */
# ifndef UINT_MAX
# define UINT_MAX UINT_MAX_32_BITS
# endif
# if UINT_MAX == UINT_MAX_32_BITS
typedef unsigned int md5_uint32;
# else
# if USHRT_MAX == UINT_MAX_32_BITS
typedef unsigned short md5_uint32;
# else
# if ULONG_MAX == UINT_MAX_32_BITS
typedef unsigned long md5_uint32;
# else
/* The following line is intended to evoke an error.
Using #error is not portable enough. */
"Cannot determine unsigned 32-bit data type."
# endif
# endif
# endif
#endif
#undef __P
#if defined (__STDC__) && __STDC__
#define __P(x) x
#else
#define __P(x) ()
#endif
/* Structure to save state of computation between the single steps. */
struct md5_ctx
{
md5_uint32 A;
md5_uint32 B;
md5_uint32 C;
md5_uint32 D;
md5_uint32 total[2];
md5_uint32 buflen;
char buffer[128];
};
/*
* The following three functions are build up the low level used in
* the functions `md5_stream' and `md5_buffer'.
*/
/* Initialize structure containing state of computation.
(RFC 1321, 3.3: Step 3) */
extern void md5_init_ctx __P ((struct md5_ctx *ctx));
/* Starting with the result of former calls of this function (or the
initialization function update the context for the next LEN bytes
starting at BUFFER.
It is necessary that LEN is a multiple of 64!!! */
extern void md5_process_block __P ((const void *buffer, size_t len,
struct md5_ctx *ctx));
/* Starting with the result of former calls of this function (or the
initialization function update the context for the next LEN bytes
starting at BUFFER.
It is NOT required that LEN is a multiple of 64. */
extern void md5_process_bytes __P ((const void *buffer, size_t len,
struct md5_ctx *ctx));
/* Process the remaining bytes in the buffer and put result from CTX
in first 16 bytes following RESBUF. The result is always in little
endian byte order, so that a byte-wise output yields to the wanted
ASCII representation of the message digest.
IMPORTANT: On some systems it is required that RESBUF be correctly
aligned for a 32 bits value. */
extern void *md5_finish_ctx __P ((struct md5_ctx *ctx, void *resbuf));
/* Put result from CTX in first 16 bytes following RESBUF. The result is
always in little endian byte order, so that a byte-wise output yields
to the wanted ASCII representation of the message digest.
IMPORTANT: On some systems it is required that RESBUF is correctly
aligned for a 32 bits value. */
extern void *md5_read_ctx __P ((const struct md5_ctx *ctx, void *resbuf));
/* Compute MD5 message digest for bytes read from STREAM. The
resulting message digest number will be written into the 16 bytes
beginning at RESBLOCK. */
extern int md5_stream __P ((FILE *stream, void *resblock));
/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
result is always in little endian byte order, so that a byte-wise
output yields to the wanted ASCII representation of the message
digest. */
extern void *md5_buffer __P ((const char *buffer, size_t len, void *resblock));
/* The following is from gnupg-1.0.2's cipher/bithelp.h. */
/* Rotate a 32 bit integer by n bytes */
#if defined __GNUC__ && defined __i386__
static md5_uint32
rol(md5_uint32 x, int n)
{
__asm__("roll %%cl,%0"
:"=r" (x)
:"0" (x),"c" (n));
return x;
}
#else
# define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
#endif
#endif

@ -0,0 +1,209 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
* Copyright (C) 2000, 2001, 2002, 2003 H<EFBFBD>kan Hjort <d95hjort@dtek.chalmers.se>
*
* 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 "config.h"
#include <stdio.h>
#include <string.h>
#if defined(HAVE_INTTYPES_H)
#include <inttypes.h>
#elif defined(HAVE_STDINT_H)
#include <stdint.h>
#endif
#include "bswap.h"
#include "nav_types.h"
#include "nav_read.h"
#include "dvdread_internal.h"
void navRead_PCI(pci_t *pci, unsigned char *buffer) {
int i, j;
CHECK_VALUE(sizeof(pci_t) == PCI_BYTES - 1); /* -1 for substream id*/
memcpy(pci, buffer, sizeof(pci_t));
/* Endian conversions */
/* pci pci_gi */
B2N_32(pci->pci_gi.nv_pck_lbn);
B2N_16(pci->pci_gi.vobu_cat);
B2N_32(pci->pci_gi.vobu_s_ptm);
B2N_32(pci->pci_gi.vobu_e_ptm);
B2N_32(pci->pci_gi.vobu_se_e_ptm);
/* pci nsml_agli */
for(i = 0; i < 9; i++)
B2N_32(pci->nsml_agli.nsml_agl_dsta[i]);
/* pci hli hli_gi */
B2N_16(pci->hli.hl_gi.hli_ss);
B2N_32(pci->hli.hl_gi.hli_s_ptm);
B2N_32(pci->hli.hl_gi.hli_e_ptm);
B2N_32(pci->hli.hl_gi.btn_se_e_ptm);
/* pci hli btn_colit */
for(i = 0; i < 3; i++)
for(j = 0; j < 2; j++)
B2N_32(pci->hli.btn_colit.btn_coli[i][j]);
/* NOTE: I've had to change the structure from the disk layout to get
* the packing to work with Sun's Forte C compiler. */
/* pci hli btni */
for(i = 0; i < 36; i++) {
char tmp[sizeof(pci->hli.btnit[i])], swap;
memcpy(tmp, &(pci->hli.btnit[i]), sizeof(pci->hli.btnit[i]));
/* Byte 4 to 7 are 'rotated' was: ABCD EFGH IJ is: ABCG DEFH IJ */
swap = tmp[6];
tmp[6] = tmp[5];
tmp[5] = tmp[4];
tmp[4] = tmp[3];
tmp[3] = swap;
/* Then there are the two B2N_24(..) calls */
#ifndef WORDS_BIGENDIAN
swap = tmp[0];
tmp[0] = tmp[2];
tmp[2] = swap;
swap = tmp[4];
tmp[4] = tmp[6];
tmp[6] = swap;
#endif
memcpy(&(pci->hli.btnit[i]), tmp, sizeof(pci->hli.btnit[i]));
}
#ifndef NDEBUG
/* Asserts */
/* pci pci gi */
CHECK_VALUE(pci->pci_gi.zero1 == 0);
/* pci hli hli_gi */
CHECK_VALUE(pci->hli.hl_gi.zero1 == 0);
CHECK_VALUE(pci->hli.hl_gi.zero2 == 0);
CHECK_VALUE(pci->hli.hl_gi.zero3 == 0);
CHECK_VALUE(pci->hli.hl_gi.zero4 == 0);
CHECK_VALUE(pci->hli.hl_gi.zero5 == 0);
/* Are there buttons defined here? */
if((pci->hli.hl_gi.hli_ss & 0x03) != 0) {
CHECK_VALUE(pci->hli.hl_gi.btn_ns != 0);
CHECK_VALUE(pci->hli.hl_gi.btngr_ns != 0);
} else {
CHECK_VALUE((pci->hli.hl_gi.btn_ns != 0 && pci->hli.hl_gi.btngr_ns != 0)
|| (pci->hli.hl_gi.btn_ns == 0 && pci->hli.hl_gi.btngr_ns == 0));
}
/* pci hli btnit */
for(i = 0; i < pci->hli.hl_gi.btngr_ns; i++) {
for(j = 0; j < (36 / pci->hli.hl_gi.btngr_ns); j++) {
int n = (36 / pci->hli.hl_gi.btngr_ns) * i + j;
CHECK_VALUE(pci->hli.btnit[n].zero1 == 0);
CHECK_VALUE(pci->hli.btnit[n].zero2 == 0);
CHECK_VALUE(pci->hli.btnit[n].zero3 == 0);
CHECK_VALUE(pci->hli.btnit[n].zero4 == 0);
CHECK_VALUE(pci->hli.btnit[n].zero5 == 0);
CHECK_VALUE(pci->hli.btnit[n].zero6 == 0);
if (j < pci->hli.hl_gi.btn_ns) {
CHECK_VALUE(pci->hli.btnit[n].x_start <= pci->hli.btnit[n].x_end);
CHECK_VALUE(pci->hli.btnit[n].y_start <= pci->hli.btnit[n].y_end);
CHECK_VALUE(pci->hli.btnit[n].up <= pci->hli.hl_gi.btn_ns);
CHECK_VALUE(pci->hli.btnit[n].down <= pci->hli.hl_gi.btn_ns);
CHECK_VALUE(pci->hli.btnit[n].left <= pci->hli.hl_gi.btn_ns);
CHECK_VALUE(pci->hli.btnit[n].right <= pci->hli.hl_gi.btn_ns);
/*vmcmd_verify(pci->hli.btnit[n].cmd);*/
} else {
int k;
CHECK_VALUE(pci->hli.btnit[n].btn_coln == 0);
CHECK_VALUE(pci->hli.btnit[n].auto_action_mode == 0);
CHECK_VALUE(pci->hli.btnit[n].x_start == 0);
CHECK_VALUE(pci->hli.btnit[n].y_start == 0);
CHECK_VALUE(pci->hli.btnit[n].x_end == 0);
CHECK_VALUE(pci->hli.btnit[n].y_end == 0);
CHECK_VALUE(pci->hli.btnit[n].up == 0);
CHECK_VALUE(pci->hli.btnit[n].down == 0);
CHECK_VALUE(pci->hli.btnit[n].left == 0);
CHECK_VALUE(pci->hli.btnit[n].right == 0);
for (k = 0; k < 8; k++)
CHECK_VALUE(pci->hli.btnit[n].cmd.bytes[k] == 0); /*CHECK_ZERO?*/
}
}
}
#endif /* !NDEBUG */
}
void navRead_DSI(dsi_t *dsi, unsigned char *buffer) {
int i;
CHECK_VALUE(sizeof(dsi_t) == DSI_BYTES - 1); /* -1 for substream id*/
memcpy(dsi, buffer, sizeof(dsi_t));
/* Endian conversions */
/* dsi dsi gi */
B2N_32(dsi->dsi_gi.nv_pck_scr);
B2N_32(dsi->dsi_gi.nv_pck_lbn);
B2N_32(dsi->dsi_gi.vobu_ea);
B2N_32(dsi->dsi_gi.vobu_1stref_ea);
B2N_32(dsi->dsi_gi.vobu_2ndref_ea);
B2N_32(dsi->dsi_gi.vobu_3rdref_ea);
B2N_16(dsi->dsi_gi.vobu_vob_idn);
/* dsi sml pbi */
B2N_16(dsi->sml_pbi.category);
B2N_32(dsi->sml_pbi.ilvu_ea);
B2N_32(dsi->sml_pbi.ilvu_sa);
B2N_16(dsi->sml_pbi.size);
B2N_32(dsi->sml_pbi.vob_v_s_s_ptm);
B2N_32(dsi->sml_pbi.vob_v_e_e_ptm);
/* dsi sml agli */
for(i = 0; i < 9; i++) {
B2N_32(dsi->sml_agli.data[ i ].address);
B2N_16(dsi->sml_agli.data[ i ].size);
}
/* dsi vobu sri */
B2N_32(dsi->vobu_sri.next_video);
for(i = 0; i < 19; i++)
B2N_32(dsi->vobu_sri.fwda[i]);
B2N_32(dsi->vobu_sri.next_vobu);
B2N_32(dsi->vobu_sri.prev_vobu);
for(i = 0; i < 19; i++)
B2N_32(dsi->vobu_sri.bwda[i]);
B2N_32(dsi->vobu_sri.prev_video);
/* dsi synci */
for(i = 0; i < 8; i++)
B2N_16(dsi->synci.a_synca[i]);
for(i = 0; i < 32; i++)
B2N_32(dsi->synci.sp_synca[i]);
/* Asserts */
/* dsi dsi gi */
CHECK_VALUE(dsi->dsi_gi.zero1 == 0);
}

@ -0,0 +1,52 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef NAV_READ_H_INCLUDED
#define NAV_READ_H_INCLUDED
/*
* Copyright (C) 2000, 2001, 2002 H<EFBFBD>kan Hjort <d95hjort@dtek.chalmers.se>.
*
* 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 "nav_types.h"
/**
* Parsing of NAV data, PCI and DSI parts.
*/
#ifdef __cplusplus
extern "C" {
#endif
/**
* Reads the PCI packet data pointed to into th pci struct.
*
* @param pci Pointer to the PCI data structure to be filled in.
* @param bufffer Pointer to the buffer of the on disc PCI data.
*/
void navRead_PCI(pci_t *, unsigned char *);
/**
* Reads the DSI packet data pointed to into dsi struct.
*
* @param dsi Pointer to the DSI data structure to be filled in.
* @param bufffer Pointer to the buffer of the on disc DSI data.
*/
void navRead_DSI(dsi_t *, unsigned char *);
#ifdef __cplusplus
};
#endif
#endif /* NAV_READ_H_INCLUDED */

@ -0,0 +1,307 @@
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
#ifndef NAV_TYPES_H_INCLUDED
#define NAV_TYPES_H_INCLUDED
/*
* Copyright (C) 2000, 2001, 2002 H<EFBFBD>kan Hjort <d95hjort@dtek.chalmers.se>
*
* The data structures in this file should represent the layout of the
* pci and dsi packets as they are stored in the stream. Information
* found by reading the source to VOBDUMP is the base for the structure
* and names of these data types.
*
* VOBDUMP: a program for examining DVD .VOB files.
* Copyright 1998, 1999 Eric Smith <eric@brouhaha.com>
*
* VOBDUMP is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. Note that I am not
* granting permission to redistribute or modify VOBDUMP under the terms
* of any later version of the General Public License.
*
* This program is distributed in the hope that it will be useful (or at
* least amusing), 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 "ifo_types.h"/* only dvd_time_t, vm_cmd_t and user_ops_t */
/* If it's ever removed add a uintX_t test. */
#undef ATTRIBUTE_PACKED
#undef PRAGMA_PACK_BEGIN
#undef PRAGMA_PACK_END
#if defined(__GNUC__)
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
#define ATTRIBUTE_PACKED __attribute__ ((packed))
#define PRAGMA_PACK 0
#endif
#endif
#if !defined(ATTRIBUTE_PACKED)
#define ATTRIBUTE_PACKED
#define PRAGMA_PACK 1
#endif
/* The length including the substream id byte. */
#define PCI_BYTES 0x3d4
#define DSI_BYTES 0x3fa
#define PS2_PCI_SUBSTREAM_ID 0x00
#define PS2_DSI_SUBSTREAM_ID 0x01
/* Remove this */
#define DSI_START_BYTE 1031
#if PRAGMA_PACK
#pragma pack(1)
#endif
/**
* PCI General Information
*/
typedef struct {
uint32_t nv_pck_lbn; /**< sector address of this nav pack */
uint16_t vobu_cat; /**< 'category' of vobu */
uint16_t zero1; /**< reserved */
user_ops_t vobu_uop_ctl; /**< UOP of vobu */
uint32_t vobu_s_ptm; /**< start presentation time of vobu */
uint32_t vobu_e_ptm; /**< end presentation time of vobu */
uint32_t vobu_se_e_ptm; /**< end ptm of sequence end in vobu */
dvd_time_t e_eltm; /**< Cell elapsed time */
char vobu_isrc[32];
} ATTRIBUTE_PACKED pci_gi_t;
/**
* Non Seamless Angle Information
*/
typedef struct {
uint32_t nsml_agl_dsta[9]; /**< address of destination vobu in AGL_C#n */
} ATTRIBUTE_PACKED nsml_agli_t;
/**
* Highlight General Information
*
* For btngrX_dsp_ty the bits have the following meaning:
* 000b: normal 4/3 only buttons
* XX1b: wide (16/9) buttons
* X1Xb: letterbox buttons
* 1XXb: pan&scan buttons
*/
typedef struct {
uint16_t hli_ss; /**< status, only low 2 bits 0: no buttons, 1: different 2: equal 3: eual except for button cmds */
uint32_t hli_s_ptm; /**< start ptm of hli */
uint32_t hli_e_ptm; /**< end ptm of hli */
uint32_t btn_se_e_ptm; /**< end ptm of button select */
#ifdef WORDS_BIGENDIAN
unsigned int zero1 : 2; /**< reserved */
unsigned int btngr_ns : 2; /**< number of button groups 1, 2 or 3 with 36/18/12 buttons */
unsigned int zero2 : 1; /**< reserved */
unsigned int btngr1_dsp_ty : 3; /**< display type of subpic stream for button group 1 */
unsigned int zero3 : 1; /**< reserved */
unsigned int btngr2_dsp_ty : 3; /**< display type of subpic stream for button group 2 */
unsigned int zero4 : 1; /**< reserved */
unsigned int btngr3_dsp_ty : 3; /**< display type of subpic stream for button group 3 */
#else
unsigned int btngr1_dsp_ty : 3;
unsigned int zero2 : 1;
unsigned int btngr_ns : 2;
unsigned int zero1 : 2;
unsigned int btngr3_dsp_ty : 3;
unsigned int zero4 : 1;
unsigned int btngr2_dsp_ty : 3;
unsigned int zero3 : 1;
#endif
uint8_t btn_ofn; /**< button offset number range 0-255 */
uint8_t btn_ns; /**< number of valid buttons <= 36/18/12 (low 6 bits) */
uint8_t nsl_btn_ns; /**< number of buttons selectable by U_BTNNi (low 6 bits) nsl_btn_ns <= btn_ns */
uint8_t zero5; /**< reserved */
uint8_t fosl_btnn; /**< forcedly selected button (low 6 bits) */
uint8_t foac_btnn; /**< forcedly activated button (low 6 bits) */
} ATTRIBUTE_PACKED hl_gi_t;
/**
* Button Color Information Table
* Each entry beeing a 32bit word that contains the color indexs and alpha
* values to use. They are all represented by 4 bit number and stored
* like this [Ci3, Ci2, Ci1, Ci0, A3, A2, A1, A0]. The actual palette
* that the indexes reference is in the PGC.
* @TODO split the uint32_t into a struct
*/
typedef struct {
uint32_t btn_coli[3][2]; /**< [button color number-1][select:0/action:1] */
} ATTRIBUTE_PACKED btn_colit_t;
/**
* Button Information
*
* NOTE: I've had to change the structure from the disk layout to get
* the packing to work with Sun's Forte C compiler.
* The 4 and 7 bytes are 'rotated' was: ABC DEF GHIJ is: ABCG DEFH IJ
*/
typedef struct {
#ifdef WORDS_BIGENDIAN
unsigned int btn_coln : 2; /**< button color number */
unsigned int x_start : 10; /**< x start offset within the overlay */
unsigned int zero1 : 2; /**< reserved */
unsigned int x_end : 10; /**< x end offset within the overlay */
unsigned int zero3 : 2; /**< reserved */
unsigned int up : 6; /**< button index when pressing up */
unsigned int auto_action_mode : 2; /**< 0: no, 1: activated if selected */
unsigned int y_start : 10; /**< y start offset within the overlay */
unsigned int zero2 : 2; /**< reserved */
unsigned int y_end : 10; /**< y end offset within the overlay */
unsigned int zero4 : 2; /**< reserved */
unsigned int down : 6; /**< button index when pressing down */
unsigned int zero5 : 2; /**< reserved */
unsigned int left : 6; /**< button index when pressing left */
unsigned int zero6 : 2; /**< reserved */
unsigned int right : 6; /**< button index when pressing right */
#else
unsigned int x_end : 10;
unsigned int zero1 : 2;
unsigned int x_start : 10;
unsigned int btn_coln : 2;
unsigned int up : 6;
unsigned int zero3 : 2;
unsigned int y_end : 10;
unsigned int zero2 : 2;
unsigned int y_start : 10;
unsigned int auto_action_mode : 2;
unsigned int down : 6;
unsigned int zero4 : 2;
unsigned int left : 6;
unsigned int zero5 : 2;
unsigned int right : 6;
unsigned int zero6 : 2;
#endif
vm_cmd_t cmd;
} ATTRIBUTE_PACKED btni_t;
/**
* Highlight Information
*/
typedef struct {
hl_gi_t hl_gi;
btn_colit_t btn_colit;
btni_t btnit[36];
} ATTRIBUTE_PACKED hli_t;
/**
* PCI packet
*/
typedef struct {
pci_gi_t pci_gi;
nsml_agli_t nsml_agli;
hli_t hli;
uint8_t zero1[189];
} ATTRIBUTE_PACKED pci_t;
/**
* DSI General Information
*/
typedef struct {
uint32_t nv_pck_scr;
uint32_t nv_pck_lbn; /**< sector address of this nav pack */
uint32_t vobu_ea; /**< end address of this VOBU */
uint32_t vobu_1stref_ea; /**< end address of the 1st reference image */
uint32_t vobu_2ndref_ea; /**< end address of the 2nd reference image */
uint32_t vobu_3rdref_ea; /**< end address of the 3rd reference image */
uint16_t vobu_vob_idn; /**< VOB Id number that this VOBU is part of */
uint8_t zero1; /**< reserved */
uint8_t vobu_c_idn; /**< Cell Id number that this VOBU is part of */
dvd_time_t c_eltm; /**< Cell elapsed time */
} ATTRIBUTE_PACKED dsi_gi_t;
/**
* Seamless Playback Information
*/
typedef struct {
uint16_t category; /**< 'category' of seamless VOBU */
uint32_t ilvu_ea; /**< end address of interleaved Unit */
uint32_t ilvu_sa; /**< start address of next interleaved unit */
uint16_t size; /**< size of next interleaved unit */
uint32_t vob_v_s_s_ptm; /**< video start ptm in vob */
uint32_t vob_v_e_e_ptm; /**< video end ptm in vob */
struct {
uint32_t stp_ptm1;
uint32_t stp_ptm2;
uint32_t gap_len1;
uint32_t gap_len2;
} vob_a[8];
} ATTRIBUTE_PACKED sml_pbi_t;
/**
* Seamless Angle Infromation for one angle
*/
typedef struct {
uint32_t address; /**< offset to next ILVU, high bit is before/after */
uint16_t size; /**< byte size of the ILVU pointed to by address */
} ATTRIBUTE_PACKED sml_agl_data_t;
/**
* Seamless Angle Infromation
*/
typedef struct {
sml_agl_data_t data[9];
} ATTRIBUTE_PACKED sml_agli_t;
/**
* VOBU Search Information
*/
typedef struct {
uint32_t next_video; /**< Next vobu that contains video */
uint32_t fwda[19]; /**< Forwards, time */
uint32_t next_vobu;
uint32_t prev_vobu;
uint32_t bwda[19]; /**< Backwards, time */
uint32_t prev_video;
} ATTRIBUTE_PACKED vobu_sri_t;
#define SRI_END_OF_CELL 0x3fffffff
/**
* Synchronous Information
*/
typedef struct {
uint16_t a_synca[8]; /**< offset to first audio packet for this VOBU */
uint32_t sp_synca[32]; /**< offset to first subpicture packet */
} ATTRIBUTE_PACKED synci_t;
/**
* DSI packet
*/
typedef struct {
dsi_gi_t dsi_gi;
sml_pbi_t sml_pbi;
sml_agli_t sml_agli;
vobu_sri_t vobu_sri;
synci_t synci;
uint8_t zero1[471];
} ATTRIBUTE_PACKED dsi_t;
#if PRAGMA_PACK
#pragma pack()
#endif
#endif /* NAV_TYPES_H_INCLUDED */

@ -0,0 +1,8 @@
INCLUDES = -I$(top_srcdir)/dvdread -I$(top_srcdir)/libk9copy $(all_includes)
METASOURCES = AUTO
noinst_LTLIBRARIES = libk9mplayer.la
libk9mplayer_la_SOURCES = mplayer.ui k9mplayer.cpp
libk9mplayer_la_LIBADD = $(top_builddir)/libdvdnav/libk9dvdnav.la
noinst_HEADERS = k9mplayer.h

@ -0,0 +1,234 @@
#include "k9common.h"
#include "k9config.h"
#include <qlayout.h>
#include <qslider.h>
#include <kselect.h>
#include "k9mplayer.h"
#include <qcombobox.h>
#include <kiconloader.h>
#include <kpushbutton.h>
#include "k9dvd.h"
#include "k9dvdtitle.h"
#include <kprocess.h>
#include <qlabel.h>
#include <qtimer.h>
#include <qapplication.h>
#include <qevent.h>
#include <klocale.h>
#include <kmessagebox.h>
K9Mplayer::K9Mplayer(QObject *parent,const char *name,const QStringList args):MPlayer((QWidget*)parent) {
m_seeking=FALSE;
m_initVol=TRUE;
m_title=0;
m_process=new KProcess(this);
m_ratio=4.0/3.0;
slider->setRange(0, 100);
slider->setSteps(1, 1);
bPlay->setPixmap(SmallIcon("player_play"));
bStop->setPixmap(SmallIcon("player_stop"));
bSwitchAudio->setPixmap(SmallIcon("cycle"));
connect(m_process,SIGNAL(receivedStdout( KProcess*, char*, int )),this,SLOT(receivedStdout( KProcess*, char*, int )));
m_timer=new QTimer(this);
connect(m_process,SIGNAL(wroteStdin( KProcess* )),this,SLOT(wroteStdin( KProcess* )));
connect(m_timer,SIGNAL(timeout()),this,SLOT(timeout()));
m_container=new QWidget(Label);
}
K9Mplayer::~K9Mplayer() {}
void K9Mplayer::resizeEvent ( QResizeEvent * _resizeEvent) {
int w,h;
w=Label->width();
h=Label->width() /m_ratio;
if (h>Label->height()) {
h=Label->height();
w=Label->height()*m_ratio;
}
m_container->resize(w,h);
m_container->move((Label->width()-w)/2,(Label->height()-h)/2);
}
void K9Mplayer::wroteStdin( KProcess *_process) {
m_canwrite = TRUE;
}
void K9Mplayer::timeout() {
sendCmd( "get_percent_pos");
}
void K9Mplayer::setDevice(const QString & _device) {
m_device=_device;
}
void K9Mplayer::setTitle( const QString & _numTitle,const QString &_numChapter) {
if (m_process->isRunning()) {
sendCmd("quit");
m_process->wait( 1000);
}
k9Config config;
QString vout[]= {"x11","xv","gl2","sdl"};
QString aout[]= {"alsa","oss","sdl"};
QString vo=vout[config.getMplayerVout()];
QString ao=aout[config.getMplayerAout()];
m_process->clearArguments();
*m_process << "mplayer";
*m_process << "-vo" << vo << "-ao" << ao << "-sws" << "0";
*m_process << "-framedrop";
*m_process << "-wid" << QString::number(m_container->winId()) ;
*m_process << "-slave" ;
*m_process << "-idle";
*m_process << "-dvd-device" << m_device;
if (_numChapter !="")
*m_process << "-chapter" << _numChapter;
*m_process << QString("dvd://%1").arg(_numTitle);
if (!m_process->start( KProcess::NotifyOnExit,KProcess::All)) {
KMessageBox::error (qApp->mainWidget(),i18n("Unable to run %1").arg("mplayer") , i18n("Preview"));
}
m_canwrite=TRUE;
m_position=0;
slider->setValue(m_position);
}
/*$SPECIALIZATION$*/
void K9Mplayer::receivedStdout (KProcess *proc, char *buffer, int buflen) {
QString buf = QString::fromLatin1(buffer, buflen);
sscanf(buf.latin1(),"ANS_PERCENT_POSITION=%d",&m_position);
if (!m_seeking && m_position>0) {
slider->setValue(m_position);
}
int audio=0;
if (buf.contains("ANS_switch_audio"))
sscanf(buf.latin1(),"ANS_switch_audio=%d",&audio);
if (audio >0) {
for (int i=0;i < m_dvdTitle->getaudioStreamCount();i++) {
k9DVDAudioStream * str=m_dvdTitle->getaudioStream(i);
if (str->getStreamId() == audio) {
cbAudio->setCurrentItem(i);
}
}
}
}
void K9Mplayer::slotLengthChanged() {}
void K9Mplayer::slotNewPosition(int _pos,const QTime & _time) {
slider->setValue(_pos);
}
void K9Mplayer::sliderReleased() {
sendCmd( QString("seek %1 1").arg((int)slider->value()));
m_seeking=FALSE;
}
void K9Mplayer::sliderChanged( int _value) {}
void K9Mplayer::sliderPressed() {
m_seeking=TRUE;
}
void K9Mplayer::bPlayClick() {
setTitle(QString::number( m_title),"");
}
void K9Mplayer::bStopClick() {
sendCmd("quit");
}
void K9Mplayer::bDownClick() {
sendCmd( QString("volume -1"));
}
void K9Mplayer::bSwitchAudioClick() {
sendCmd( QString("switch_audio"));
sendCmd( QString("get_property switch_audio"));
}
void K9Mplayer::bUpClick() {
sendCmd( QString("volume +1"));
}
void K9Mplayer::open( k9DVD *_dvd,k9DVDTitle *_title,int chapter) {
cbSub->clear();
cbAudio->clear();
for (int i=0; i< _title->getaudioStreamCount();i++) {
k9DVDAudioStream *aud=_title->getaudioStream(i);
cbAudio->insertItem(NULL,QString("%1-%2").arg(aud->getID()).arg(aud->getlanguage()),-1);
}
for (int i=0; i< _title->getsubPictureCount();i++) {
k9DVDSubtitle *sub=_title->getsubtitle(i);
cbSub->insertItem(NULL,QString("%1-%2").arg(sub->getID().first()).arg(sub->getlanguage()),-1);
}
if(_title->getaspectRatio()=="16:9")
m_ratio=16.0/9.0;
else
m_ratio=4.0/3.0;
resizeEvent( NULL);
setDevice( _dvd->getDevice());
m_dvdTitle=_title;
m_title=_title->getnumTitle();
setTitle( QString::number(m_title),QString::number(chapter));
if (_title->getaudioStreamCount() >0)
cbAudioActivated( 0);
if (_title->getsubPictureCount() >0)
cbSubActivated( 0);
if (!m_timer->isActive())
m_timer->start(200,FALSE);
}
void K9Mplayer::titleChanged() {}
void K9Mplayer::cbAudioActivated( int _value) {
if (m_dvdTitle) {
int value=m_dvdTitle->getaudioStream( _value)->getStreamId();
sendCmd(QString( "switch_audio %1").arg(value));
}
}
void K9Mplayer::cbSubActivated( int _value) {
sendCmd(QString("sub_select %1").arg(_value));
}
void K9Mplayer::sendCmd( QString _cmd) {
while (!m_canwrite) {
qApp->processEvents();
if ( !m_process->isRunning())
return;
}
_cmd +="\n";
m_canwrite=FALSE;
m_process->writeStdin( _cmd.latin1() ,_cmd.length());
}
#include "k9mplayer.moc"

@ -0,0 +1,66 @@
#ifndef K9Mplayer_H
#define K9Mplayer_H
#include "k9common.h"
#include "../k9Mplayer/mplayer.h"
class k9DVD;
class k9DVDTitle;
class KProcess;
class QTimer;
class QResizeEvent;
class K9Mplayer : public MPlayer
{
Q_OBJECT
private:
KProcess *m_process;
bool m_seeking,m_initVol;
int m_title;
k9DVDTitle *m_dvdTitle;
QString m_device;
QTimer *m_timer;
void sendCmd(QString _cmd);
int m_position;
bool m_canwrite;
QWidget *m_container;
float m_ratio;
public:
//K9Mplayer(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
K9Mplayer(QObject *parent=0,const char *name=0,const QStringList args=0);
~K9Mplayer();
/*$PUBLIC_FUNCTIONS$*/
void setDevice(const QString & _device);
void setTitle(const QString & _numTitle,const QString &_numChapter);
private slots:
void slotLengthChanged();
void slotNewPosition(int _pos,const QTime & _time);
void receivedStdout (KProcess *proc, char *buffer, int buflen);
void wroteStdin(KProcess *_process);
void timeout();
public slots:
/*$PUBLIC_SLOTS$*/
virtual void sliderReleased();
virtual void bPlayClick();
virtual void bStopClick();
virtual void sliderPressed();
virtual void sliderChanged(int _value);
virtual void open(k9DVD *_dvd,k9DVDTitle *_title,int chapter);
virtual void titleChanged();
virtual void cbAudioActivated (int _value);
virtual void cbSubActivated (int _value);
virtual void bUpClick();
virtual void bDownClick();
virtual void bSwitchAudioClick();
protected:
/*$PROTECTED_FUNCTIONS$*/
void resizeEvent ( QResizeEvent * _resiseEvent);
protected slots:
/*$PROTECTED_SLOTS$*/
};
#endif

@ -0,0 +1,663 @@
#include <klocale.h>
/****************************************************************************
** Form implementation generated from reading ui file './mplayer.ui'
**
** Created: dim. oct. 26 08:55:16 2008
**
** WARNING! All changes made in this file will be lost!
****************************************************************************/
#include "mplayer.h"
#include <qvariant.h>
#include <qpushbutton.h>
#include <qlabel.h>
#include <qcombobox.h>
#include <kpushbutton.h>
#include <qslider.h>
#include <qframe.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qimage.h>
#include <qpixmap.h>
#include "kicondialog.h"
#include "kpushbutton.h"
static const unsigned char img0_mplayer[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x27,
0x08, 0x06, 0x00, 0x00, 0x00, 0x9f, 0x74, 0x11, 0xc1, 0x00, 0x00, 0x05,
0x28, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0x59, 0x7d, 0x6c, 0x53,
0x55, 0x14, 0xff, 0xdd, 0xb7, 0x96, 0xc2, 0xf8, 0x18, 0x44, 0xe6, 0x24,
0x23, 0xac, 0x54, 0x37, 0x4d, 0x8b, 0x5a, 0xa6, 0x83, 0x65, 0x23, 0x92,
0xf8, 0x0f, 0x11, 0x03, 0xc9, 0x02, 0xcd, 0x08, 0x09, 0x9b, 0x6e, 0x2c,
0xa2, 0xb8, 0xfd, 0x83, 0xe0, 0x18, 0x6e, 0x44, 0xd4, 0x2c, 0x59, 0x20,
0x28, 0x06, 0xe5, 0x63, 0x84, 0x00, 0xe2, 0xf6, 0xc7, 0x16, 0x97, 0x99,
0x2c, 0x24, 0x10, 0x15, 0x71, 0x8f, 0xca, 0xe6, 0x36, 0x89, 0x20, 0x5f,
0x5b, 0x67, 0x07, 0x03, 0x44, 0x2c, 0xa2, 0x6c, 0x6b, 0x37, 0xee, 0xf1,
0x8f, 0xf2, 0xae, 0x7d, 0x7d, 0xaf, 0xeb, 0x74, 0xfd, 0xd0, 0xc4, 0x5f,
0xd2, 0xe4, 0xde, 0x7b, 0xce, 0x3b, 0xfd, 0x9d, 0x93, 0x73, 0xce, 0xbd,
0xef, 0x3e, 0x26, 0xcb, 0x32, 0xfe, 0x6d, 0xa8, 0xdb, 0x7f, 0x91, 0xa4,
0x04, 0x86, 0xfc, 0xa2, 0x0c, 0x36, 0x9a, 0x9e, 0x21, 0x56, 0x84, 0x82,
0xd1, 0xd2, 0xe0, 0xa6, 0x93, 0xc7, 0x7f, 0xc4, 0xc8, 0xc8, 0xfd, 0x90,
0x3a, 0x67, 0x5a, 0xaf, 0x10, 0x63, 0x0c, 0xdb, 0x6b, 0x5f, 0xd0, 0x75,
0x82, 0x45, 0x33, 0xf2, 0x1d, 0xad, 0x77, 0xa9, 0xb1, 0xee, 0x0c, 0x06,
0xef, 0x79, 0xc1, 0xa4, 0x51, 0x83, 0x18, 0x16, 0x3b, 0x0e, 0x2c, 0xd5,
0x18, 0x18, 0x37, 0xf9, 0x96, 0x06, 0x37, 0x9d, 0xed, 0x70, 0xe3, 0x46,
0xff, 0x1d, 0x24, 0x24, 0x48, 0xe3, 0xb2, 0x15, 0x0e, 0xc1, 0x0e, 0x8c,
0x29, 0x6d, 0x5a, 0x1a, 0xdc, 0xd4, 0x7d, 0xe9, 0x26, 0x2e, 0x5f, 0xb8,
0x01, 0xa3, 0x31, 0x41, 0x57, 0x27, 0xda, 0xc4, 0xf5, 0xa0, 0x22, 0x3f,
0xc3, 0x96, 0x45, 0xb9, 0x5f, 0xde, 0xc6, 0x2f, 0xcb, 0x1f, 0x56, 0x29,
0x65, 0x67, 0x67, 0xc7, 0x94, 0x54, 0x20, 0x18, 0x63, 0x70, 0x2c, 0xd9,
0x89, 0x6b, 0x7d, 0xbf, 0x6a, 0x65, 0xb2, 0x2c, 0xc3, 0x95, 0x6a, 0xa7,
0x92, 0xf6, 0xdf, 0xf0, 0x5c, 0xf2, 0x04, 0xb4, 0x2c, 0x9a, 0x11, 0x07,
0x8a, 0xe1, 0xc1, 0x18, 0xc3, 0xe9, 0xd3, 0xa7, 0x55, 0x69, 0xc3, 0x9a,
0xae, 0x0d, 0xd2, 0x6a, 0xe7, 0x1d, 0x00, 0xc0, 0x1f, 0x79, 0x29, 0x71,
0x21, 0x36, 0x56, 0x04, 0x3b, 0x20, 0x29, 0xc4, 0x3f, 0x9c, 0x3f, 0x2d,
0x6e, 0xa4, 0xc6, 0x0a, 0x22, 0x52, 0xcd, 0x45, 0x95, 0xad, 0x49, 0x9b,
0x14, 0x73, 0x32, 0xe3, 0x85, 0x20, 0x6f, 0x1c, 0x67, 0x1f, 0x8e, 0x07,
0x62, 0xdf, 0xdf, 0x22, 0x88, 0xff, 0xc9, 0xc7, 0x12, 0x5b, 0x87, 0x1f,
0x17, 0x55, 0xfb, 0x9f, 0x23, 0xff, 0xc5, 0xcf, 0x3e, 0x31, 0x36, 0x10,
0x00, 0xbd, 0x52, 0x65, 0xcc, 0xbf, 0xaa, 0xb4, 0xa7, 0xc0, 0xb9, 0x32,
0x56, 0xa0, 0xa7, 0x13, 0x2d, 0x4c, 0x0c, 0x38, 0x9d, 0x18, 0xa6, 0x19,
0x24, 0xfc, 0x3e, 0xc2, 0x35, 0x4a, 0x39, 0xd6, 0x4a, 0x00, 0x80, 0x7c,
0xfe, 0x1d, 0x10, 0x91, 0x98, 0xb7, 0x9e, 0xdb, 0x86, 0xa1, 0xa1, 0x61,
0x3c, 0x9f, 0xb9, 0x4d, 0xe8, 0xee, 0x3e, 0x54, 0x0c, 0xfb, 0xb3, 0x69,
0x00, 0xfc, 0x0e, 0x70, 0xae, 0xb5, 0x17, 0x29, 0x04, 0xc6, 0x45, 0xaa,
0xb2, 0x4e, 0x1e, 0x55, 0xb9, 0xb4, 0xe8, 0xa0, 0x26, 0xd2, 0x0a, 0x76,
0x1f, 0x2a, 0x46, 0xeb, 0xb9, 0x6d, 0x58, 0x5f, 0x78, 0x00, 0x00, 0xe0,
0xf5, 0x7a, 0x23, 0x46, 0x72, 0x2c, 0x90, 0xe6, 0xdf, 0x3a, 0x1b, 0xb2,
0xc1, 0x3f, 0x9a, 0x91, 0x82, 0xef, 0x9c, 0x3d, 0xc8, 0x7e, 0xe2, 0x2d,
0xf8, 0x7c, 0x23, 0x00, 0x10, 0xd2, 0x11, 0x00, 0xb0, 0x58, 0x2c, 0x62,
0x6c, 0x30, 0x18, 0x60, 0xb7, 0xdb, 0xe1, 0x76, 0xbb, 0x21, 0x49, 0xfe,
0xd2, 0x6a, 0x6b, 0x6b, 0x13, 0x63, 0x49, 0x92, 0x34, 0x63, 0x49, 0x92,
0xe0, 0xf5, 0x7a, 0x61, 0xb1, 0x58, 0x60, 0xb1, 0x58, 0x54, 0x3a, 0xba,
0xe4, 0xf5, 0x16, 0x15, 0x82, 0x47, 0x9a, 0x5e, 0x7f, 0x60, 0x9c, 0xa1,
0xfd, 0x4a, 0x35, 0x00, 0xa0, 0xb3, 0xad, 0x57, 0xe8, 0xbd, 0x56, 0x50,
0x8b, 0x85, 0x19, 0x5b, 0xb0, 0xfb, 0x50, 0x31, 0x00, 0xa0, 0xbf, 0xbf,
0x1f, 0xbb, 0x76, 0xed, 0x12, 0xa9, 0xd3, 0xd5, 0xd5, 0x85, 0xb2, 0xb2,
0x32, 0xa1, 0x9f, 0x92, 0xa2, 0x3e, 0x3b, 0xf9, 0x7c, 0x3e, 0x78, 0x3c,
0x1e, 0x00, 0x7f, 0xd5, 0x89, 0xc9, 0x64, 0x82, 0xcb, 0xe5, 0x42, 0x6f,
0x6f, 0x2f, 0x38, 0xe7, 0xa8, 0xad, 0xad, 0xd5, 0xf0, 0xab, 0x9f, 0x68,
0xa3, 0x90, 0xe4, 0xdd, 0x3f, 0xdd, 0x16, 0x06, 0x89, 0x93, 0xca, 0x78,
0x75, 0x55, 0x93, 0xd0, 0xfb, 0xe8, 0xf0, 0x5a, 0x7c, 0x7b, 0xe9, 0x3d,
0x91, 0xef, 0x00, 0x50, 0x5a, 0x5a, 0x8a, 0xab, 0x57, 0xaf, 0x8a, 0x79,
0x73, 0x73, 0x33, 0xf2, 0xf2, 0xf2, 0xc4, 0x3c, 0x30, 0x92, 0x46, 0xa3,
0x11, 0x9b, 0x37, 0x6f, 0x06, 0x00, 0x14, 0x16, 0x16, 0x8a, 0x5a, 0x59,
0xb7, 0x6e, 0x9d, 0xd0, 0x29, 0x2a, 0x2a, 0xd2, 0xf0, 0x3b, 0xd8, 0x3b,
0xe8, 0x1f, 0xc8, 0xb2, 0x8c, 0xc4, 0xc6, 0xeb, 0x44, 0x44, 0xc4, 0x39,
0x27, 0xce, 0x39, 0xcd, 0x4b, 0xdd, 0x40, 0x59, 0xe9, 0x15, 0xc4, 0x39,
0x27, 0x22, 0xa2, 0x93, 0x27, 0xce, 0x13, 0xe7, 0x9c, 0xb2, 0xd2, 0x2b,
0x28, 0x73, 0xee, 0x9b, 0x34, 0x38, 0xe0, 0xa3, 0xac, 0xf4, 0x0a, 0xea,
0x38, 0xe3, 0x12, 0xcf, 0x70, 0xce, 0x09, 0x80, 0x6a, 0x0c, 0x80, 0x3a,
0x3b, 0x3b, 0xc9, 0xef, 0x3b, 0x91, 0xc3, 0xe1, 0x20, 0x87, 0xc3, 0x21,
0x64, 0xc1, 0xba, 0x05, 0x05, 0x05, 0x62, 0x6e, 0x36, 0x9b, 0x55, 0xb6,
0x95, 0x5f, 0x62, 0xe3, 0x75, 0x4a, 0x6c, 0xbc, 0x4e, 0xb2, 0x2c, 0xfb,
0xcf, 0xf3, 0x8b, 0xfb, 0xe7, 0x92, 0x6f, 0xc5, 0x23, 0x51, 0x6d, 0x71,
0x80, 0x3f, 0xea, 0x4a, 0xab, 0xed, 0xe9, 0xe9, 0x81, 0xd9, 0x6c, 0xfe,
0xdb, 0x36, 0xa6, 0x7c, 0x76, 0x13, 0x00, 0x70, 0x62, 0x96, 0x8b, 0x19,
0x00, 0xe0, 0xa9, 0xa4, 0xd8, 0x5c, 0x22, 0x28, 0xc4, 0x23, 0xd5, 0x4a,
0x25, 0x00, 0xf8, 0x64, 0xc1, 0xf4, 0x88, 0x18, 0x0b, 0x07, 0x22, 0x8a,
0xe8, 0x1e, 0x20, 0x01, 0x80, 0xe7, 0x5c, 0x1b, 0x8b, 0x76, 0xca, 0x44,
0x1a, 0x17, 0x67, 0xd9, 0x29, 0x6e, 0x97, 0x4e, 0xc1, 0x60, 0x8c, 0xa1,
0x64, 0xd5, 0x3e, 0x5c, 0x38, 0x7f, 0x0d, 0x73, 0xcc, 0x33, 0x71, 0xb4,
0xb9, 0x74, 0xd4, 0x1a, 0x7c, 0xe3, 0xfb, 0xbb, 0xf1, 0xbb, 0x31, 0x53,
0xc0, 0x18, 0x43, 0xae, 0xad, 0x4a, 0xd4, 0x83, 0x77, 0x68, 0x18, 0xbd,
0xdd, 0xb7, 0x34, 0xc7, 0x93, 0x60, 0xd4, 0x65, 0x4f, 0x8f, 0x2f, 0x79,
0xc6, 0x18, 0x72, 0xac, 0x95, 0xf0, 0x0e, 0x0d, 0xa3, 0xbd, 0xbb, 0x5a,
0x23, 0x5f, 0xbe, 0xb8, 0x06, 0x39, 0xd6, 0x4a, 0xec, 0xaf, 0x7f, 0x05,
0xd6, 0x27, 0x53, 0x55, 0xb2, 0x29, 0x3d, 0x1d, 0x4c, 0xec, 0x18, 0x4e,
0xa7, 0x33, 0xe6, 0xef, 0x81, 0x39, 0xd6, 0x4a, 0x18, 0x8d, 0x09, 0x68,
0xef, 0xae, 0xc6, 0xec, 0xd9, 0xb3, 0x51, 0x53, 0x53, 0xa3, 0x92, 0x37,
0x9f, 0xdc, 0x84, 0xd5, 0x2f, 0xe5, 0xa2, 0x64, 0xd5, 0x5e, 0x30, 0xc6,
0xc4, 0xce, 0x6f, 0x7b, 0xd0, 0x1d, 0xe3, 0x76, 0x9e, 0xdf, 0xfb, 0xfe,
0x09, 0x00, 0xc0, 0x57, 0x5d, 0x5b, 0xc5, 0x5a, 0x79, 0x79, 0x39, 0x24,
0x49, 0x42, 0x5f, 0x5f, 0x9f, 0x58, 0x5b, 0xbf, 0x71, 0x09, 0x00, 0xe0,
0xe9, 0x39, 0x9b, 0x60, 0x68, 0xb8, 0x01, 0xfb, 0x74, 0x23, 0x3e, 0x48,
0xbc, 0xcc, 0x80, 0x20, 0xf2, 0x0b, 0x32, 0xb6, 0x44, 0x9f, 0xf5, 0x03,
0x1c, 0xde, 0xff, 0x35, 0x4c, 0x26, 0xfd, 0xac, 0x4d, 0x4b, 0x4b, 0x83,
0x24, 0x49, 0xa2, 0xad, 0x1e, 0xfd, 0xbc, 0x0c, 0x93, 0xa7, 0x98, 0x70,
0x2a, 0xd5, 0xc5, 0xb6, 0x4f, 0xba, 0x24, 0x32, 0x44, 0xf5, 0xb4, 0xd1,
0x98, 0x80, 0x5c, 0x5b, 0x15, 0x8c, 0x13, 0x0c, 0xd8, 0xf7, 0xe9, 0x5a,
0x3c, 0x94, 0x1c, 0xfa, 0x2e, 0x67, 0x66, 0xf2, 0xd4, 0x71, 0x3b, 0x70,
0xcc, 0x59, 0x31, 0xaa, 0xdc, 0x60, 0xf0, 0xd3, 0x0b, 0xd5, 0x75, 0x54,
0xe4, 0x07, 0xee, 0x79, 0x91, 0x38, 0xd9, 0x84, 0x61, 0xdf, 0x08, 0x5e,
0x5e, 0xb9, 0x67, 0xdc, 0xe4, 0x02, 0x71, 0xff, 0x3e, 0xc7, 0x33, 0x0b,
0x2d, 0x58, 0xf3, 0xaa, 0x55, 0x89, 0x1c, 0x49, 0xa3, 0x1c, 0xaf, 0x01,
0xc0, 0xe3, 0xf1, 0x20, 0x29, 0x29, 0x29, 0xa4, 0x5c, 0x45, 0xfe, 0xe3,
0xfa, 0x3c, 0xb6, 0xa1, 0xb8, 0xe5, 0x1f, 0xef, 0x56, 0xc4, 0x09, 0x53,
0x93, 0x26, 0x61, 0xe1, 0xa2, 0xc7, 0xb0, 0x74, 0xe5, 0x9c, 0xb0, 0x0d,
0x60, 0xd1, 0xbc, 0xad, 0x70, 0x5e, 0x7c, 0x57, 0xb3, 0x9e, 0x9f, 0x9f,
0x8f, 0xba, 0xba, 0x3a, 0x31, 0xdf, 0xb3, 0xf3, 0xb8, 0xee, 0xf3, 0x9a,
0xa4, 0xdb, 0x71, 0x60, 0x69, 0x58, 0x07, 0x06, 0x06, 0x7c, 0x58, 0xb6,
0x22, 0x73, 0x4c, 0x04, 0x43, 0x21, 0xd4, 0xff, 0xe8, 0x1d, 0x1f, 0x8e,
0xd4, 0x9e, 0x42, 0x9a, 0x25, 0x59, 0xb3, 0x1e, 0xd5, 0x2f, 0x23, 0xe1,
0xb0, 0xa1, 0xb8, 0x85, 0x18, 0x63, 0xf8, 0xe6, 0x87, 0xb7, 0xc1, 0x18,
0xd3, 0xcd, 0xed, 0x5c, 0x5b, 0x15, 0x00, 0xfd, 0x2f, 0x23, 0x71, 0xbd,
0xfa, 0x50, 0x08, 0xe5, 0xda, 0xaa, 0xe0, 0xf3, 0x8e, 0xa8, 0x64, 0xca,
0xce, 0x1b, 0xa8, 0x17, 0x8c, 0xb8, 0x46, 0x5e, 0xc1, 0xc6, 0x92, 0x63,
0xa4, 0x97, 0x2e, 0x9c, 0x13, 0x76, 0x1e, 0x7c, 0x31, 0x64, 0x6a, 0xfe,
0x09, 0xba, 0x8d, 0x3c, 0xd6, 0xd8, 0xe3, 0x9a, 0x01, 0x00, 0x00, 0x00,
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
};
static const unsigned char img1_mplayer[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16,
0x08, 0x06, 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x6c, 0x3b, 0x00, 0x00, 0x03,
0xf8, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x95, 0x95, 0xdd, 0x6f, 0x14,
0x55, 0x18, 0xc6, 0x7f, 0xe7, 0xcc, 0xc7, 0xee, 0x6c, 0x77, 0x96, 0x2d,
0x2d, 0x1f, 0x8b, 0xba, 0x14, 0xd1, 0x34, 0x06, 0x21, 0xb8, 0x2b, 0x26,
0xdc, 0x10, 0x63, 0xa2, 0x06, 0x89, 0x5e, 0x60, 0x42, 0x14, 0x13, 0xbd,
0x2a, 0x81, 0x3b, 0x13, 0x2f, 0xbc, 0xf2, 0x4a, 0x13, 0xfe, 0x02, 0xc3,
0xc5, 0x24, 0xc4, 0x3b, 0x2e, 0xc4, 0x44, 0x63, 0x22, 0x44, 0x88, 0x89,
0x51, 0xc4, 0x8f, 0xb2, 0x4d, 0x45, 0x94, 0x10, 0xa8, 0x7c, 0xa5, 0x6c,
0xb7, 0xdd, 0xed, 0x7e, 0xb0, 0x3b, 0x3b, 0xb3, 0x33, 0xe7, 0x78, 0xb1,
0xb4, 0xb6, 0x48, 0xb1, 0x3c, 0xc9, 0x93, 0xc9, 0x99, 0x39, 0xf3, 0x7b,
0x9f, 0xbc, 0x6f, 0xce, 0x8c, 0xe0, 0x21, 0x2a, 0x1c, 0x99, 0xb4, 0x40,
0xaf, 0x03, 0x95, 0x43, 0xeb, 0x14, 0x68, 0x40, 0xfb, 0x68, 0x55, 0xb6,
0x54, 0xb3, 0xf2, 0x8b, 0xf7, 0x72, 0xb8, 0xd2, 0xbb, 0xe2, 0x21, 0xd0,
0xdd, 0xc0, 0x01, 0xd0, 0x3b, 0x11, 0xe4, 0x11, 0xd6, 0x00, 0x00, 0x2a,
0xe8, 0xa0, 0xe3, 0x5b, 0xc0, 0xa4, 0x50, 0xd1, 0xc9, 0x82, 0x3e, 0x7e,
0xce, 0xf3, 0xbc, 0xf8, 0x7f, 0xc1, 0x85, 0x23, 0x93, 0x5b, 0x41, 0xbc,
0x8f, 0x61, 0x1d, 0x4c, 0x0f, 0xa4, 0xb2, 0x1b, 0x87, 0x33, 0x72, 0xc3,
0x50, 0x92, 0xd1, 0xe1, 0x16, 0x8e, 0x15, 0x73, 0xad, 0x96, 0xe6, 0x7a,
0x45, 0x31, 0x37, 0x3b, 0xab, 0x6a, 0x0d, 0xdf, 0x57, 0x91, 0x7f, 0xce,
0xd2, 0x77, 0x3f, 0xd9, 0xa1, 0x4f, 0x9c, 0xf7, 0x3c, 0x2f, 0x7a, 0x20,
0xb8, 0x70, 0x64, 0x72, 0x33, 0x88, 0x63, 0xd8, 0x99, 0xbd, 0x3b, 0x9f,
0x74, 0x78, 0x6d, 0x97, 0xcb, 0xf6, 0x27, 0x34, 0xeb, 0xb3, 0x16, 0x86,
0xec, 0x6f, 0xd5, 0xc0, 0x7c, 0x2b, 0x62, 0xaa, 0xdc, 0xe3, 0x54, 0xa9,
0xcb, 0x0f, 0x17, 0xe7, 0x09, 0xfd, 0xe6, 0x5f, 0x09, 0x55, 0xfb, 0xf0,
0x59, 0x7d, 0xf2, 0xd4, 0x02, 0xdc, 0xb8, 0x2f, 0xe9, 0xa7, 0xe9, 0x4c,
0xe6, 0xd5, 0x37, 0x76, 0xaf, 0x11, 0xef, 0xbe, 0xe8, 0xf0, 0x74, 0xce,
0x20, 0x61, 0x19, 0xf4, 0x62, 0x08, 0x23, 0xbd, 0x68, 0x43, 0x0a, 0x86,
0x33, 0x26, 0xdb, 0x37, 0x5b, 0x6c, 0x18, 0xb4, 0xf8, 0xbb, 0xa2, 0x87,
0x9b, 0x5d, 0xf1, 0x7c, 0x55, 0x6f, 0x29, 0xed, 0x2d, 0x3a, 0xb7, 0x4b,
0xa5, 0x92, 0x5e, 0x04, 0xe7, 0x76, 0x1d, 0x3e, 0x8a, 0xed, 0xbe, 0xb5,
0xef, 0x85, 0xac, 0x78, 0xbd, 0x68, 0x61, 0x5b, 0x92, 0x30, 0xd2, 0x04,
0xbd, 0xfb, 0x1c, 0x2a, 0x82, 0x9e, 0x22, 0x88, 0x34, 0x5a, 0x6b, 0x36,
0xad, 0xb5, 0x70, 0x53, 0x96, 0xf8, 0xf3, 0x76, 0x3c, 0xd4, 0x0d, 0xb5,
0xb5, 0x89, 0x89, 0x33, 0xc5, 0x62, 0xb1, 0x27, 0xfa, 0x69, 0x2f, 0xec,
0x16, 0x46, 0xf2, 0x9b, 0x1d, 0x4f, 0xad, 0xcd, 0x1e, 0xdc, 0xe3, 0xe0,
0x3a, 0x92, 0x6f, 0x27, 0xfc, 0x95, 0xe6, 0xba, 0x4c, 0xaf, 0x3c, 0xe7,
0xd0, 0x8b, 0x34, 0x5f, 0xfd, 0xea, 0xf3, 0xfd, 0x44, 0xa5, 0x61, 0x04,
0xd3, 0xef, 0x6d, 0xe7, 0x8b, 0xd3, 0x66, 0xe1, 0xf0, 0xb8, 0x85, 0xd6,
0x07, 0xd2, 0x03, 0xc9, 0x4c, 0x61, 0xab, 0x4d, 0xac, 0x14, 0x8d, 0xb6,
0x06, 0xe0, 0xa3, 0xb7, 0xd7, 0x3f, 0x14, 0xfa, 0xf1, 0x89, 0x0a, 0x9d,
0x40, 0xd1, 0x0d, 0x15, 0xa3, 0xb9, 0x98, 0xdf, 0xaf, 0x25, 0xdc, 0x5a,
0x35, 0xbd, 0xbf, 0xd2, 0x1b, 0xf9, 0xd9, 0x04, 0xd6, 0x01, 0x3b, 0x33,
0x99, 0x35, 0x32, 0x9b, 0x8c, 0x68, 0xb6, 0xe5, 0xaa, 0x92, 0x2e, 0xe8,
0xb3, 0x1f, 0x13, 0x00, 0x34, 0xfd, 0x14, 0x2d, 0xd2, 0x52, 0x51, 0xdf,
0xd6, 0x14, 0xf9, 0xbc, 0x09, 0xe4, 0x10, 0x32, 0x3f, 0xec, 0x0a, 0xfc,
0x50, 0xe1, 0x87, 0x8a, 0x7e, 0xde, 0xd5, 0x15, 0x10, 0x2a, 0xe4, 0x6a,
0x2d, 0xd3, 0x5f, 0x98, 0x26, 0x08, 0x23, 0x87, 0x61, 0xe7, 0x4d, 0x20,
0x85, 0x4c, 0x0c, 0xa4, 0xac, 0x1e, 0xf5, 0xb6, 0x42, 0x0a, 0xb0, 0xcd,
0x15, 0xcf, 0xcd, 0x32, 0x5d, 0x9b, 0x4b, 0x2e, 0x2f, 0x22, 0x04, 0xc8,
0x84, 0x23, 0x14, 0xae, 0xb9, 0x70, 0xb3, 0xd9, 0xb5, 0x98, 0x69, 0x68,
0x0c, 0x09, 0xae, 0xb3, 0x3a, 0x30, 0xc0, 0xd5, 0x5a, 0x06, 0xb1, 0xb0,
0x5d, 0xdf, 0x2b, 0x80, 0x92, 0x26, 0x68, 0x1f, 0x15, 0x74, 0x66, 0xda,
0x0e, 0xed, 0x38, 0xb9, 0xf8, 0x50, 0xaf, 0x7c, 0xda, 0x1f, 0xa8, 0x3e,
0x5c, 0x43, 0xdc, 0xed, 0x0a, 0x1d, 0x05, 0x26, 0x5a, 0x95, 0x81, 0x5b,
0x8d, 0x8e, 0xda, 0x12, 0x0b, 0xe7, 0x91, 0x60, 0x0b, 0x32, 0x8d, 0xfe,
0x44, 0xee, 0xfa, 0x01, 0xe8, 0xb8, 0x22, 0x55, 0xbb, 0x2c, 0x2d, 0xd5,
0xac, 0x00, 0x93, 0x04, 0x35, 0x65, 0x19, 0x1a, 0x7b, 0x89, 0x57, 0xab,
0xa4, 0x19, 0x63, 0x9b, 0x31, 0x22, 0xac, 0x2a, 0x93, 0xee, 0x95, 0xac,
0xbe, 0x71, 0x47, 0x00, 0x14, 0x0f, 0x9d, 0xdf, 0x23, 0xec, 0xf4, 0x97,
0xb9, 0xdc, 0xc6, 0xc1, 0x41, 0xd7, 0x7e, 0xa4, 0x26, 0x18, 0x12, 0x22,
0x05, 0xf3, 0xad, 0x90, 0xf2, 0xf4, 0x74, 0xcb, 0xe9, 0x5e, 0xfe, 0x60,
0x54, 0x9e, 0xfd, 0xda, 0x04, 0x28, 0xe8, 0xe3, 0xe7, 0x2e, 0x44, 0x63,
0x9f, 0xb7, 0xea, 0xb3, 0x87, 0x46, 0x86, 0x06, 0x49, 0x98, 0xa2, 0xff,
0x79, 0x5a, 0x08, 0x7d, 0xdf, 0x70, 0x34, 0x2c, 0x1b, 0x58, 0x10, 0x69,
0x6e, 0xd6, 0xe7, 0x51, 0x61, 0xe3, 0xbb, 0x51, 0x79, 0xf6, 0x27, 0xa0,
0x65, 0x00, 0x94, 0x4a, 0x25, 0xfd, 0x78, 0xe1, 0x9d, 0xa9, 0xa0, 0xc7,
0x33, 0x4a, 0xc5, 0x9b, 0x1f, 0x1b, 0x32, 0x44, 0x2a, 0x21, 0x48, 0x58,
0xba, 0x6f, 0x73, 0xf9, 0x35, 0x69, 0xff, 0xbb, 0x16, 0xf4, 0xb8, 0x72,
0xb3, 0xa9, 0xaa, 0xb5, 0xc6, 0xf8, 0x50, 0x7c, 0xe9, 0x58, 0x56, 0x4c,
0x5f, 0x5a, 0x04, 0x03, 0xec, 0x2b, 0x58, 0xd5, 0xaa, 0xce, 0x8f, 0x37,
0x7c, 0x73, 0x5b, 0xb3, 0x13, 0x8d, 0xb8, 0x29, 0x8b, 0xb5, 0xae, 0x89,
0x6d, 0x49, 0x6c, 0x53, 0xfc, 0xc7, 0x96, 0x01, 0x73, 0x8d, 0x1e, 0x17,
0xa7, 0x1a, 0x94, 0x67, 0x9b, 0xe3, 0xeb, 0xa2, 0x89, 0xa3, 0x79, 0x59,
0xfa, 0x0d, 0x98, 0xf3, 0x3c, 0x2f, 0x5e, 0x04, 0x97, 0x4a, 0x25, 0xbd,
0xb7, 0x98, 0xaa, 0x55, 0xf5, 0xc8, 0x44, 0xc3, 0x37, 0x52, 0xb3, 0x8d,
0xde, 0x48, 0xab, 0x13, 0xd9, 0x49, 0x33, 0x12, 0x03, 0x8e, 0x89, 0x29,
0x25, 0x52, 0x80, 0xd6, 0x31, 0xd5, 0xf9, 0x36, 0x7f, 0x5c, 0xef, 0xa8,
0xcb, 0x37, 0x5b, 0x77, 0xeb, 0xf5, 0xe6, 0xe9, 0xa1, 0xf8, 0xd2, 0xb1,
0x7b, 0xd0, 0x8a, 0xe7, 0x79, 0xbd, 0xa5, 0xdd, 0x5b, 0xd4, 0xd8, 0xd8,
0x98, 0x04, 0x06, 0x2e, 0xf2, 0xe6, 0x4b, 0x91, 0x4c, 0xef, 0x57, 0x58,
0xdb, 0xa4, 0x14, 0x39, 0xd7, 0x31, 0x1c, 0x80, 0x96, 0x1f, 0x77, 0x55,
0xac, 0x2a, 0x26, 0xdd, 0x2b, 0xc9, 0x78, 0xe6, 0xcc, 0xbd, 0x9e, 0xce,
0x00, 0xf5, 0x15, 0xff, 0x20, 0x4b, 0xe0, 0x02, 0xb0, 0x2b, 0xf1, 0x48,
0xb6, 0x29, 0xf2, 0x79, 0x0c, 0x3b, 0x2f, 0xc0, 0x15, 0x28, 0x29, 0x74,
0x14, 0x48, 0xd5, 0x2e, 0x67, 0xf5, 0x8d, 0x3b, 0x6b, 0x8c, 0xb9, 0x1a,
0xd0, 0x02, 0x7c, 0xcf, 0xf3, 0xd4, 0x52, 0xc6, 0x3f, 0x42, 0xb8, 0xe4,
0xbf, 0xe2, 0x7a, 0x6d, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
0x44, 0xae, 0x42, 0x60, 0x82
};
static const unsigned char img2_mplayer[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16,
0x08, 0x06, 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x6c, 0x3b, 0x00, 0x00, 0x04,
0x7c, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x85, 0x95, 0xdb, 0x6f, 0x54,
0x55, 0x14, 0x87, 0xbf, 0xbd, 0xcf, 0x65, 0x6e, 0x9d, 0xe9, 0x94, 0x16,
0x4b, 0x11, 0x86, 0x02, 0x31, 0x84, 0x54, 0xa0, 0x4e, 0x45, 0x83, 0x89,
0x97, 0x60, 0xd4, 0x54, 0xa2, 0x89, 0x68, 0x8c, 0xb7, 0xf8, 0x56, 0x02,
0x0f, 0x24, 0xbc, 0x10, 0xff, 0x00, 0x25, 0xfd, 0x03, 0xd4, 0xf4, 0xe1,
0x28, 0x0f, 0xbe, 0xf4, 0x41, 0x1e, 0x4d, 0x30, 0x62, 0x7c, 0x21, 0x48,
0x08, 0x65, 0x48, 0xad, 0x88, 0x21, 0xb1, 0x40, 0xa9, 0xd2, 0xce, 0xb4,
0xd3, 0x99, 0x33, 0xcc, 0xe5, 0xdc, 0xf6, 0xf6, 0x61, 0xda, 0x42, 0x4d,
0x8b, 0x27, 0x59, 0x59, 0x67, 0x9f, 0xbd, 0xd7, 0x77, 0x7e, 0x6b, 0x65,
0x65, 0x6d, 0xc1, 0x63, 0x9e, 0xfc, 0x89, 0x49, 0x0b, 0xf4, 0x66, 0x50,
0x7d, 0x68, 0x9d, 0x04, 0x0d, 0xe8, 0x26, 0x5a, 0xcd, 0x59, 0xca, 0x2d,
0x5e, 0x71, 0x5e, 0xf3, 0x37, 0x8a, 0x15, 0x8f, 0x81, 0x1e, 0x02, 0xde,
0x07, 0x3d, 0x88, 0x20, 0x87, 0xb0, 0x52, 0x00, 0x28, 0xaf, 0x81, 0x8e,
0xee, 0x01, 0x93, 0x42, 0x85, 0xe7, 0xf2, 0xfa, 0xec, 0x25, 0xc7, 0x71,
0xa2, 0xff, 0x05, 0xe7, 0x4f, 0x4c, 0xee, 0x06, 0x71, 0x0a, 0xc3, 0xfa,
0xa8, 0x23, 0x95, 0xcc, 0x6e, 0xe9, 0xc9, 0xc8, 0xde, 0xee, 0x38, 0x7b,
0x7a, 0x6a, 0x24, 0xac, 0x88, 0xbf, 0xca, 0x1d, 0xdc, 0x29, 0x2a, 0x16,
0x4a, 0x25, 0x55, 0xae, 0x36, 0x9b, 0x2a, 0x6c, 0x5e, 0xb2, 0xf4, 0x83,
0x2f, 0xf6, 0xeb, 0xf1, 0xcb, 0x8e, 0xe3, 0x84, 0xeb, 0x82, 0xf3, 0x27,
0x26, 0x77, 0x80, 0x18, 0xc3, 0xce, 0x0c, 0x0f, 0xee, 0x4a, 0xf0, 0xe6,
0xc1, 0x34, 0xfb, 0xb6, 0x6b, 0x9e, 0xc8, 0x5a, 0x18, 0xb2, 0x7d, 0x54,
0x03, 0x4b, 0xb5, 0x90, 0xe9, 0xb9, 0x80, 0xf3, 0x85, 0x16, 0x17, 0xa7,
0x96, 0xf0, 0x9b, 0xee, 0xcd, 0x98, 0x2a, 0x7f, 0xf6, 0xb4, 0x3e, 0x77,
0x7e, 0x05, 0x6e, 0xfc, 0x47, 0xe9, 0xd7, 0x1d, 0x99, 0xcc, 0x1b, 0x6f,
0x1f, 0xea, 0x14, 0x9f, 0xbe, 0x92, 0xe0, 0xa9, 0x3e, 0x83, 0x98, 0x65,
0xf0, 0xcd, 0x4f, 0x15, 0xf6, 0x6e, 0x8f, 0xe1, 0x87, 0x1a, 0x3f, 0xd4,
0x18, 0x52, 0xd0, 0x93, 0x31, 0xd9, 0xb7, 0xc3, 0xa2, 0xb7, 0xcb, 0xe2,
0x76, 0x51, 0xf7, 0xb8, 0x2d, 0xf1, 0xec, 0xa2, 0xde, 0x59, 0x18, 0x1e,
0x4a, 0xcc, 0x16, 0x0a, 0x05, 0xbd, 0x0a, 0xee, 0x3b, 0x78, 0x7c, 0x14,
0x3b, 0xfd, 0xc1, 0x91, 0xe7, 0xb2, 0xe2, 0xad, 0x21, 0x0b, 0xdb, 0x92,
0xf8, 0xa1, 0xc6, 0x0b, 0x34, 0xef, 0xbc, 0x90, 0xe5, 0xab, 0x1f, 0x16,
0xd9, 0xb5, 0xc5, 0xc2, 0xf3, 0x15, 0x5e, 0xa0, 0xf0, 0x42, 0x8d, 0xd6,
0x9a, 0xad, 0x9b, 0x2c, 0xd2, 0x49, 0x4b, 0xfc, 0x31, 0x1b, 0x75, 0xb7,
0x7c, 0x6d, 0x6d, 0xe5, 0xfa, 0x85, 0xa1, 0xa1, 0xa1, 0xc0, 0x68, 0xab,
0xbd, 0x76, 0x48, 0x18, 0xb1, 0xd1, 0x03, 0xbb, 0x33, 0xf1, 0xe1, 0xbc,
0x85, 0x94, 0xe0, 0x07, 0x8a, 0x56, 0xd0, 0x86, 0x6c, 0xeb, 0x89, 0xf1,
0xe2, 0x40, 0x8a, 0x93, 0xdf, 0x69, 0x9e, 0xc9, 0x05, 0x78, 0x81, 0x5e,
0xde, 0x6f, 0x67, 0xb0, 0xa9, 0x43, 0x52, 0xf7, 0x4d, 0x66, 0x4a, 0x41,
0x7f, 0x29, 0xda, 0x3e, 0xd9, 0xcb, 0xcd, 0xdb, 0x46, 0xfe, 0xf8, 0x84,
0x05, 0x9c, 0x4a, 0xa7, 0xd3, 0x2f, 0xbd, 0x3a, 0x98, 0x12, 0x5d, 0x1d,
0xe0, 0x05, 0x9a, 0x56, 0xd0, 0x56, 0xeb, 0x05, 0x9a, 0xdd, 0x5b, 0xe3,
0x00, 0xbc, 0xf7, 0xbc, 0xc1, 0xe9, 0x71, 0xc1, 0xde, 0x2d, 0xfe, 0x9a,
0xfd, 0x56, 0xa0, 0xb0, 0x0d, 0x9f, 0xe9, 0x79, 0x65, 0xd7, 0x5b, 0x61,
0x60, 0x84, 0xd5, 0x8b, 0x26, 0xb0, 0x19, 0x18, 0xcc, 0x64, 0x3a, 0x65,
0x36, 0x1e, 0xe2, 0xd6, 0xe5, 0x46, 0x1d, 0x08, 0xc0, 0xf8, 0x49, 0x9b,
0x0f, 0xbf, 0x84, 0xa3, 0x07, 0x5c, 0xa2, 0x48, 0x33, 0x5b, 0x8e, 0x98,
0x9a, 0xcb, 0xe2, 0x36, 0x93, 0xd4, 0xe8, 0x90, 0x8a, 0xca, 0x80, 0x2b,
0x72, 0x39, 0x13, 0xe8, 0x43, 0xc8, 0x5c, 0x4f, 0x5a, 0xd0, 0xf4, 0x15,
0x4d, 0x5f, 0xa1, 0x97, 0xdb, 0x65, 0xc5, 0xaf, 0x0f, 0xcf, 0xb0, 0xbf,
0xb7, 0xc2, 0xe4, 0xdf, 0x29, 0x66, 0xdd, 0x76, 0x46, 0x98, 0x26, 0x08,
0xa3, 0x0f, 0xc3, 0xce, 0x49, 0x20, 0x89, 0x8c, 0xa5, 0x92, 0x56, 0x40,
0xa5, 0xae, 0x70, 0x1b, 0x0a, 0xcf, 0xd7, 0xb4, 0x7c, 0xbd, 0xea, 0x37,
0x52, 0xfe, 0xdb, 0x7c, 0x96, 0x52, 0x23, 0xb9, 0xfa, 0x4d, 0x08, 0x01,
0x32, 0x96, 0x10, 0x90, 0x5e, 0xcd, 0xdb, 0x6d, 0x59, 0xcc, 0x57, 0x25,
0x45, 0x57, 0x52, 0x6d, 0x4a, 0x2a, 0x4d, 0x83, 0x7b, 0x95, 0x18, 0x57,
0x67, 0x52, 0x8f, 0x2d, 0x8b, 0x1f, 0x19, 0x08, 0x41, 0xdb, 0x56, 0x7e,
0x80, 0x92, 0x26, 0xe8, 0x26, 0xca, 0x6b, 0xcc, 0xd7, 0x13, 0xd4, 0xa3,
0x78, 0x3b, 0x7f, 0x40, 0x23, 0xa8, 0xf9, 0x36, 0x7a, 0x7d, 0xc1, 0x00,
0xbc, 0x3e, 0xfa, 0xf0, 0x5d, 0x88, 0x76, 0x14, 0x51, 0xab, 0x25, 0x74,
0xe8, 0x99, 0x68, 0x35, 0x07, 0xdc, 0xab, 0x36, 0xd4, 0xce, 0x48, 0x24,
0xd6, 0x04, 0x6a, 0xe4, 0x86, 0xd3, 0xe4, 0xf0, 0x19, 0x08, 0x96, 0x27,
0x84, 0x69, 0x80, 0x04, 0x1e, 0x34, 0x3d, 0xd0, 0x51, 0x51, 0xaa, 0xfa,
0x9c, 0xb4, 0x94, 0x5b, 0x04, 0x26, 0xf1, 0xca, 0xca, 0x32, 0x34, 0xf6,
0x23, 0x16, 0x33, 0x22, 0xd6, 0x93, 0x7c, 0xf8, 0x0c, 0x80, 0x22, 0x69,
0x45, 0x24, 0xad, 0x88, 0xb8, 0x19, 0x61, 0x9b, 0x11, 0xc2, 0x5f, 0x54,
0x26, 0xad, 0x5b, 0x59, 0x7d, 0xf7, 0xbe, 0x79, 0xc5, 0x79, 0xcd, 0x1f,
0x3a, 0x76, 0xf9, 0x5c, 0xe4, 0x55, 0x3f, 0xb1, 0xa2, 0x44, 0x57, 0x57,
0xda, 0x5e, 0x23, 0x52, 0x69, 0x80, 0xcc, 0xea, 0x7a, 0x64, 0xac, 0xc6,
0xb6, 0x34, 0x08, 0xa1, 0x57, 0xcf, 0xb5, 0xe7, 0x87, 0x8f, 0x6a, 0x2d,
0xd5, 0x13, 0xd1, 0xfc, 0x85, 0x4e, 0x63, 0xa1, 0x6c, 0x02, 0xe4, 0xf5,
0xd9, 0x4b, 0xd7, 0xc2, 0x91, 0xef, 0x6b, 0x95, 0xd2, 0xb1, 0xfe, 0xee,
0x2e, 0x62, 0xa6, 0x78, 0xd8, 0x6f, 0x3c, 0x04, 0x9f, 0xfe, 0x76, 0x9e,
0xac, 0x0d, 0xda, 0x5e, 0xa9, 0x69, 0xfb, 0x8c, 0x17, 0x6a, 0x66, 0x2a,
0x4b, 0x28, 0xbf, 0xfa, 0xcb, 0x1e, 0xf9, 0xf3, 0xaf, 0x40, 0xcd, 0x00,
0x28, 0x14, 0x0a, 0x7a, 0x5b, 0xfe, 0xe3, 0x69, 0x2f, 0x60, 0xaf, 0x52,
0xd1, 0x8e, 0x27, 0xbb, 0x0d, 0x91, 0x8c, 0x09, 0x62, 0x96, 0x26, 0x66,
0x69, 0x5e, 0xde, 0x97, 0xe6, 0xf3, 0xf1, 0xfb, 0xc4, 0xcc, 0xf6, 0x3a,
0x6e, 0xb7, 0x7d, 0xcc, 0xd4, 0x08, 0x02, 0x6e, 0xcd, 0xb8, 0x6a, 0xb1,
0x5c, 0x9d, 0xe8, 0x8e, 0x6e, 0x8c, 0x65, 0xc5, 0x3f, 0x37, 0x56, 0xc1,
0x00, 0x47, 0xf2, 0xd6, 0xe2, 0xa2, 0xce, 0x4d, 0x54, 0x9b, 0xe6, 0x80,
0xdb, 0x08, 0xfb, 0xd3, 0x49, 0x8b, 0x4d, 0x69, 0x13, 0xdb, 0x92, 0x5c,
0xbe, 0x59, 0xc7, 0x36, 0xc5, 0x1a, 0xb3, 0x0c, 0x58, 0xa8, 0x06, 0x4c,
0x4d, 0x57, 0x99, 0x2b, 0xb9, 0x13, 0x9b, 0xc3, 0xeb, 0xa3, 0x39, 0x59,
0xb8, 0x0a, 0x2c, 0x38, 0x8e, 0x13, 0xad, 0x82, 0x0b, 0x85, 0x82, 0x1e,
0x1e, 0x4a, 0x96, 0x17, 0x75, 0xff, 0xf5, 0x6a, 0xd3, 0x48, 0x96, 0xaa,
0x41, 0x7f, 0xad, 0x11, 0xda, 0x71, 0x33, 0x14, 0xa9, 0x84, 0x89, 0x29,
0x25, 0x52, 0x80, 0xd6, 0x11, 0x8b, 0x4b, 0x75, 0x7e, 0xbf, 0xd3, 0x50,
0x7f, 0xce, 0xd4, 0x1e, 0x54, 0x2a, 0xee, 0x8f, 0xdd, 0xd1, 0x8d, 0xb1,
0x65, 0x68, 0xd1, 0x71, 0x9c, 0x00, 0xd6, 0x69, 0xa6, 0x91, 0x91, 0x11,
0x09, 0xa4, 0xa6, 0x78, 0xf7, 0x70, 0x28, 0x3b, 0x8e, 0x2a, 0xac, 0x01,
0x29, 0x45, 0x5f, 0x3a, 0x61, 0x24, 0x00, 0x6a, 0xcd, 0xa8, 0xa5, 0x22,
0x55, 0x34, 0x69, 0xdd, 0x8a, 0x47, 0xf3, 0x17, 0x96, 0x6b, 0x3a, 0x0f,
0x54, 0x36, 0xbc, 0x41, 0x1e, 0x81, 0x0b, 0xc0, 0x2e, 0x46, 0xfd, 0x59,
0x57, 0xe4, 0x72, 0x18, 0x76, 0x4e, 0x40, 0x5a, 0xa0, 0xa4, 0xd0, 0xa1,
0x27, 0x55, 0x7d, 0x2e, 0xab, 0xef, 0xde, 0xef, 0x34, 0x16, 0xca, 0x40,
0x0d, 0x68, 0x3a, 0x8e, 0xa3, 0x1e, 0x65, 0xfc, 0x0b, 0x65, 0xf3, 0x41,
0x6e, 0xc3, 0xc8, 0xf6, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
0x44, 0xae, 0x42, 0x60, 0x82
};
static const unsigned char img3_mplayer[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16,
0x08, 0x06, 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x6c, 0x3b, 0x00, 0x00, 0x04,
0x6e, 0x49, 0x44, 0x41, 0x54, 0x38, 0x8d, 0x95, 0x94, 0x4f, 0x68, 0xdb,
0x56, 0x1c, 0xc7, 0xbf, 0xcf, 0x96, 0x2d, 0xdb, 0x92, 0x6d, 0x49, 0xb5,
0x83, 0x93, 0xda, 0x8e, 0x9b, 0xd0, 0x36, 0x81, 0xae, 0x0d, 0xa5, 0x0c,
0xf7, 0x32, 0xe8, 0xc6, 0x46, 0x42, 0xc8, 0x8a, 0xd2, 0x32, 0xda, 0x83,
0x19, 0x65, 0xf4, 0xb2, 0xc1, 0x46, 0xa0, 0x97, 0xb2, 0x0d, 0xb6, 0x6b,
0x61, 0x30, 0xc6, 0x7a, 0xef, 0x9f, 0xd3, 0x28, 0xad, 0x2e, 0xa5, 0x26,
0xec, 0x52, 0xba, 0xd1, 0x43, 0x58, 0x1d, 0xdc, 0x85, 0x26, 0x6d, 0x5d,
0xb7, 0x69, 0xfc, 0xa7, 0x69, 0x1c, 0x59, 0xb2, 0x54, 0x63, 0xcb, 0x8a,
0xdf, 0x0e, 0x5b, 0x44, 0xbc, 0x64, 0x29, 0xfb, 0x81, 0x4e, 0xfa, 0x7e,
0x3f, 0xef, 0xfb, 0x7e, 0xef, 0xbd, 0x1f, 0xa1, 0x94, 0xe2, 0x6d, 0x25,
0xcb, 0x72, 0x5f, 0x30, 0x18, 0x3c, 0xea, 0x72, 0xb9, 0x18, 0x5d, 0xd7,
0xff, 0x50, 0x14, 0xe5, 0xd5, 0xdb, 0x3c, 0x64, 0x27, 0xb0, 0x2c, 0xcb,
0xfe, 0x54, 0x2a, 0xf5, 0x7d, 0x24, 0x12, 0x19, 0x93, 0x24, 0x29, 0x9e,
0x4a, 0xa5, 0x62, 0xd1, 0x68, 0x54, 0x20, 0x84, 0xa0, 0x56, 0xab, 0xe9,
0xcf, 0x9f, 0x3f, 0x7f, 0xb5, 0xbe, 0xbe, 0x5e, 0x5e, 0x5b, 0x5b, 0x5b,
0x58, 0x5e, 0x5e, 0xfe, 0x46, 0x51, 0x14, 0x73, 0x57, 0xb0, 0x2c, 0xcb,
0x64, 0x60, 0x60, 0xe0, 0xcb, 0x64, 0x32, 0xf9, 0xd9, 0xc4, 0xc4, 0xc4,
0x3b, 0x8d, 0x46, 0x03, 0xe5, 0x72, 0x19, 0x4f, 0x9f, 0x3e, 0xc5, 0xca,
0xca, 0x0a, 0x28, 0xa5, 0x48, 0x24, 0x12, 0xd8, 0xbf, 0x7f, 0x3f, 0xf6,
0xee, 0xdd, 0x0b, 0x41, 0x10, 0x90, 0xcd, 0x66, 0x17, 0x97, 0x97, 0x97,
0xaf, 0x55, 0x2a, 0x95, 0x4b, 0x8a, 0xa2, 0x74, 0xb7, 0x81, 0x65, 0x59,
0xe6, 0x0f, 0x1c, 0x38, 0x90, 0x3d, 0x79, 0xf2, 0x64, 0xda, 0xeb, 0xf5,
0x32, 0xd9, 0x6c, 0x16, 0xd5, 0x6a, 0x75, 0xd7, 0xed, 0xf6, 0xf5, 0xf5,
0x61, 0x72, 0x72, 0x12, 0xdd, 0x6e, 0xb7, 0x7b, 0xeb, 0xd6, 0xad, 0xf9,
0x27, 0x4f, 0x9e, 0x7c, 0xa8, 0x28, 0x4a, 0xbd, 0x07, 0x7c, 0xe1, 0xc2,
0x85, 0xdb, 0x99, 0x4c, 0x66, 0xb2, 0x54, 0x2a, 0xe1, 0xde, 0xbd, 0x7b,
0x6f, 0x6b, 0x61, 0x4f, 0xa5, 0xd3, 0x69, 0x0c, 0x0f, 0x0f, 0xe3, 0xfa,
0xf5, 0xeb, 0x77, 0x0b, 0x85, 0xc2, 0x07, 0x8a, 0xa2, 0x74, 0x19, 0x00,
0x98, 0x99, 0x99, 0xb9, 0x74, 0xea, 0xd4, 0xa9, 0x8f, 0x2c, 0xcb, 0x42,
0x2e, 0x97, 0x03, 0xcf, 0xf3, 0xff, 0x0b, 0xbc, 0xb0, 0xb0, 0x80, 0xfe,
0xfe, 0x7e, 0xc8, 0xb2, 0xfc, 0xde, 0xcd, 0x9b, 0x37, 0x7f, 0x06, 0xf0,
0x39, 0x99, 0x9e, 0x9e, 0x1e, 0x99, 0x9a, 0x9a, 0xfa, 0x3d, 0x9d, 0x4e,
0xef, 0x99, 0x9d, 0x9d, 0x45, 0xb7, 0xdb, 0xdd, 0x66, 0x4c, 0x24, 0x12,
0x88, 0x44, 0x22, 0xf8, 0xe7, 0xf0, 0x9c, 0x7e, 0x6f, 0x2d, 0x42, 0x08,
0xc6, 0xc7, 0xc7, 0x91, 0xcf, 0xe7, 0x8d, 0x3b, 0x77, 0xee, 0xbc, 0xcf,
0x44, 0xa3, 0xd1, 0x33, 0x83, 0x83, 0x83, 0x7b, 0x5a, 0xad, 0x16, 0x38,
0x8e, 0xeb, 0x11, 0x87, 0xc3, 0x61, 0xa4, 0xd3, 0x69, 0x48, 0x92, 0x04,
0x00, 0xe8, 0x74, 0x3a, 0xb0, 0x6d, 0x1b, 0xba, 0xae, 0x63, 0x7e, 0x7e,
0x1e, 0x9a, 0xa6, 0xf5, 0xe8, 0x9b, 0xcd, 0x26, 0x52, 0xa9, 0x54, 0x50,
0x14, 0xc5, 0x33, 0x0c, 0xc7, 0x71, 0x87, 0xfd, 0x7e, 0x3f, 0x74, 0x5d,
0xef, 0x69, 0x81, 0xdb, 0xed, 0xc6, 0x91, 0x23, 0x47, 0x10, 0x0a, 0x85,
0x60, 0xdb, 0xb6, 0x93, 0xca, 0x30, 0x0c, 0xd8, 0xb6, 0x8d, 0x83, 0x07,
0x0f, 0xe2, 0xf1, 0xe3, 0xc7, 0xce, 0x3f, 0x00, 0xd0, 0x34, 0x0d, 0x92,
0x24, 0x81, 0xe7, 0xf9, 0x11, 0xc6, 0xe7, 0xf3, 0x0d, 0x79, 0xbd, 0x5e,
0x34, 0x9b, 0x4d, 0x04, 0x83, 0x41, 0x47, 0xe4, 0xf3, 0xf9, 0x60, 0x59,
0x16, 0x54, 0x55, 0x05, 0x00, 0x50, 0x4a, 0x1d, 0xb0, 0x69, 0x9a, 0xa0,
0x94, 0x42, 0x10, 0x04, 0xb4, 0xdb, 0x6d, 0xc7, 0xb3, 0xb1, 0xb1, 0x01,
0xb7, 0xdb, 0x0d, 0x9f, 0xcf, 0x37, 0xc4, 0x74, 0x3a, 0x9d, 0xf6, 0xea,
0xea, 0x2a, 0x62, 0xb1, 0x18, 0xdc, 0x6e, 0xb7, 0x23, 0xb2, 0x6d, 0x1b,
0xa5, 0x52, 0x09, 0x7e, 0xbf, 0x1f, 0x0c, 0xc3, 0x38, 0xad, 0x78, 0xf3,
0xe6, 0x0d, 0x28, 0xa5, 0xa0, 0x94, 0xc2, 0xe3, 0xf1, 0xf4, 0xec, 0x32,
0x14, 0x0a, 0x61, 0x6d, 0x6d, 0x0d, 0x96, 0x65, 0x59, 0x8c, 0x61, 0x18,
0xc5, 0xf5, 0xf5, 0xf5, 0x77, 0x93, 0xc9, 0x64, 0x4f, 0x62, 0xc3, 0x30,
0xb0, 0xba, 0xba, 0xea, 0x40, 0x36, 0xbf, 0xcd, 0xf4, 0x9b, 0x8f, 0x65,
0xab, 0x87, 0x65, 0x59, 0xa8, 0xaa, 0x0a, 0xc3, 0x30, 0x9e, 0x31, 0xa6,
0x69, 0xce, 0x69, 0x9a, 0x76, 0xc6, 0x34, 0x4d, 0x88, 0xa2, 0xe8, 0x88,
0x78, 0x9e, 0x47, 0xb5, 0x5a, 0xc5, 0xeb, 0xd7, 0xaf, 0xb7, 0x01, 0x29,
0xa5, 0x88, 0x44, 0x22, 0x88, 0xc7, 0xe3, 0x20, 0x84, 0xf4, 0x84, 0x69,
0x34, 0x1a, 0x68, 0x34, 0x1a, 0x7f, 0xba, 0x87, 0x86, 0x86, 0x5e, 0xba,
0x5c, 0xae, 0xe9, 0x56, 0xab, 0x25, 0xf6, 0xf7, 0xf7, 0x43, 0x92, 0x24,
0xb0, 0x2c, 0x0b, 0x96, 0x65, 0x11, 0x8f, 0xc7, 0xd1, 0x6e, 0xb7, 0xb1,
0xb2, 0xb2, 0x02, 0xc3, 0x30, 0xd0, 0x6c, 0x36, 0xd1, 0xe9, 0x74, 0x30,
0x3a, 0x3a, 0x8a, 0xe3, 0xc7, 0x8f, 0x23, 0x10, 0x08, 0x38, 0x5a, 0xc3,
0x30, 0x90, 0xcb, 0xe5, 0x50, 0x2c, 0x16, 0x2b, 0xe5, 0x72, 0xf9, 0x2b,
0x42, 0x29, 0x45, 0x26, 0x93, 0x39, 0x97, 0x4c, 0x26, 0x7f, 0x18, 0x18,
0x18, 0x10, 0x4f, 0x9c, 0x38, 0x81, 0x44, 0x22, 0xd1, 0x73, 0x8d, 0x28,
0xa5, 0xd0, 0x75, 0xdd, 0x39, 0xb0, 0xad, 0x29, 0x01, 0xa0, 0x5c, 0x2e,
0xe3, 0xfe, 0xfd, 0xfb, 0x28, 0x95, 0x4a, 0x66, 0xb1, 0x58, 0xfc, 0xfa,
0xca, 0x95, 0x2b, 0x3f, 0x39, 0x4f, 0x3a, 0x93, 0xc9, 0xfc, 0x38, 0x38,
0x38, 0xf8, 0x85, 0x24, 0x49, 0xcc, 0xb1, 0x63, 0xc7, 0x30, 0x3a, 0x3a,
0x8a, 0x68, 0x34, 0x8a, 0xdd, 0xaa, 0x56, 0xab, 0x61, 0x69, 0x69, 0x09,
0xf9, 0x7c, 0x1e, 0xaa, 0xaa, 0x76, 0x0b, 0x85, 0xc2, 0xb5, 0xab, 0x57,
0xaf, 0x9e, 0x03, 0x00, 0x66, 0x53, 0x64, 0x9a, 0xe6, 0xcc, 0x8b, 0x17,
0x2f, 0xb8, 0x7a, 0xbd, 0xfe, 0xb1, 0xaa, 0xaa, 0x7d, 0x0f, 0x1f, 0x3e,
0xc4, 0xa1, 0x43, 0x87, 0x10, 0x0e, 0x87, 0x21, 0x08, 0x82, 0xb3, 0x48,
0xad, 0x56, 0x43, 0xbd, 0x5e, 0x47, 0xa3, 0xd1, 0xc0, 0xd2, 0xd2, 0x12,
0xaa, 0xd5, 0x2a, 0x34, 0x4d, 0x53, 0x55, 0x55, 0x9d, 0x35, 0x0c, 0xe3,
0xfc, 0x26, 0x6f, 0xdb, 0x3c, 0x3e, 0x7d, 0xfa, 0xf4, 0xd1, 0x40, 0x20,
0xf0, 0x5b, 0x38, 0x1c, 0x0e, 0xb0, 0x2c, 0x0b, 0x42, 0x08, 0x58, 0x96,
0x75, 0x5a, 0xa0, 0x69, 0x1a, 0x2c, 0xcb, 0x72, 0xae, 0xa4, 0x6d, 0xdb,
0xed, 0x4a, 0xa5, 0x32, 0x7e, 0xe3, 0xc6, 0x8d, 0xbb, 0x5b, 0x39, 0x3b,
0x0e, 0xfa, 0xb3, 0x67, 0xcf, 0xfe, 0x22, 0x8a, 0xe2, 0x27, 0x5e, 0xaf,
0x17, 0x84, 0x10, 0x74, 0x3a, 0x1d, 0x6c, 0x6c, 0x6c, 0x80, 0x10, 0x02,
0xaf, 0xd7, 0x0b, 0x8e, 0xe3, 0x10, 0x0e, 0x87, 0x31, 0x36, 0x36, 0x86,
0x07, 0x0f, 0x1e, 0xdc, 0xbe, 0x78, 0xf1, 0xe2, 0xd4, 0xbf, 0x19, 0xcc,
0x36, 0x2a, 0x80, 0x56, 0xab, 0x75, 0x5e, 0xd7, 0xf5, 0xa4, 0x24, 0x49,
0xe9, 0x58, 0x2c, 0x86, 0x7d, 0xfb, 0xf6, 0x41, 0x10, 0x04, 0x88, 0xa2,
0x88, 0xe1, 0xe1, 0x61, 0xf0, 0x3c, 0x0f, 0x42, 0x08, 0x2e, 0x5f, 0xbe,
0x9c, 0x9b, 0x9b, 0x9b, 0xfb, 0x74, 0x27, 0xc6, 0x8e, 0x89, 0x81, 0xbf,
0x07, 0x3f, 0xcb, 0xb2, 0xdf, 0xf9, 0xfd, 0xfe, 0x89, 0x44, 0x22, 0x11,
0x1f, 0x19, 0x19, 0x09, 0xa5, 0x52, 0x29, 0xb8, 0x5c, 0x2e, 0xe3, 0xd1,
0xa3, 0x47, 0x95, 0x42, 0xa1, 0xf0, 0xeb, 0xe2, 0xe2, 0xe2, 0xb7, 0x8a,
0xa2, 0x68, 0x3b, 0xf9, 0xff, 0x13, 0xbc, 0x65, 0x01, 0x0f, 0x80, 0x21,
0x8e, 0xe3, 0x0e, 0x7b, 0x3c, 0x1e, 0xb7, 0xa6, 0x69, 0x79, 0x00, 0xcf,
0x14, 0x45, 0xb1, 0x76, 0xf3, 0xfd, 0x05, 0x05, 0x39, 0x26, 0x66, 0x88,
0x20, 0x72, 0x94, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
0x42, 0x60, 0x82
};
/*
* Constructs a MPlayer as a child of 'parent', with the
* name 'name' and widget flags set to 'f'.
*/
MPlayer::MPlayer( QWidget* parent, const char* name, WFlags fl )
: QWidget( parent, name, fl )
{
QImage img;
img.loadFromData( img0_mplayer, sizeof( img0_mplayer ), "PNG" );
image0 = img;
img.loadFromData( img1_mplayer, sizeof( img1_mplayer ), "PNG" );
image1 = img;
img.loadFromData( img2_mplayer, sizeof( img2_mplayer ), "PNG" );
image2 = img;
img.loadFromData( img3_mplayer, sizeof( img3_mplayer ), "PNG" );
image3 = img;
if ( !name )
setName( "MPlayer" );
setEnabled( TRUE );
setIcon( image0 );
MPlayerLayout = new QGridLayout( this, 1, 1, 3, 3, "MPlayerLayout");
textLabel1 = new QLabel( this, "textLabel1" );
MPlayerLayout->addWidget( textLabel1, 0, 0 );
cbAudio = new QComboBox( FALSE, this, "cbAudio" );
MPlayerLayout->addWidget( cbAudio, 0, 1 );
spacer1 = new QSpacerItem( 190, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
MPlayerLayout->addItem( spacer1, 0, 5 );
cbSub = new QComboBox( FALSE, this, "cbSub" );
MPlayerLayout->addWidget( cbSub, 0, 4 );
textLabel1_2 = new QLabel( this, "textLabel1_2" );
MPlayerLayout->addWidget( textLabel1_2, 0, 3 );
bSwitchAudio = new KPushButton( this, "bSwitchAudio" );
bSwitchAudio->setMaximumSize( QSize( 22, 22 ) );
bSwitchAudio->setFlat( TRUE );
MPlayerLayout->addWidget( bSwitchAudio, 0, 2 );
layout6 = new QHBoxLayout( 0, 0, 6, "layout6");
bStop = new KPushButton( this, "bStop" );
bStop->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, bStop->sizePolicy().hasHeightForWidth() ) );
bStop->setMinimumSize( QSize( 30, 30 ) );
bStop->setPixmap( image1 );
bStop->setFlat( TRUE );
layout6->addWidget( bStop );
bPlay = new KPushButton( this, "bPlay" );
bPlay->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, bPlay->sizePolicy().hasHeightForWidth() ) );
bPlay->setMinimumSize( QSize( 30, 30 ) );
bPlay->setPixmap( image2 );
bPlay->setFlat( TRUE );
layout6->addWidget( bPlay );
slider = new QSlider( this, "slider" );
slider->setOrientation( QSlider::Horizontal );
layout6->addWidget( slider );
layout5 = new QHBoxLayout( 0, 0, 6, "layout5");
bDown = new KPushButton( this, "bDown" );
bDown->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1, 0, 0, bDown->sizePolicy().hasHeightForWidth() ) );
bDown->setMinimumSize( QSize( 22, 22 ) );
bDown->setMaximumSize( QSize( 22, 22 ) );
QFont bDown_font( bDown->font() );
bDown_font.setBold( TRUE );
bDown->setFont( bDown_font );
bDown->setFlat( TRUE );
layout5->addWidget( bDown );
pixmapLabel1 = new QLabel( this, "pixmapLabel1" );
pixmapLabel1->setMaximumSize( QSize( 22, 22 ) );
pixmapLabel1->setPixmap( image3 );
pixmapLabel1->setScaledContents( TRUE );
layout5->addWidget( pixmapLabel1 );
bUp = new KPushButton( this, "bUp" );
bUp->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1, 0, 0, bUp->sizePolicy().hasHeightForWidth() ) );
bUp->setMinimumSize( QSize( 22, 22 ) );
bUp->setMaximumSize( QSize( 22, 22 ) );
QFont bUp_font( bUp->font() );
bUp_font.setBold( TRUE );
bUp->setFont( bUp_font );
bUp->setFlat( TRUE );
layout5->addWidget( bUp );
layout6->addLayout( layout5 );
MPlayerLayout->addMultiCellLayout( layout6, 4, 4, 0, 5 );
frame4 = new QFrame( this, "frame4" );
frame4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, frame4->sizePolicy().hasHeightForWidth() ) );
frame4->setFrameShape( QFrame::HLine );
frame4->setFrameShadow( QFrame::Raised );
MPlayerLayout->addMultiCellWidget( frame4, 1, 1, 0, 5 );
Label = new QLabel( this, "Label" );
Label->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, Label->sizePolicy().hasHeightForWidth() ) );
Label->setPaletteBackgroundColor( QColor( 0, 0, 0 ) );
Label->setAlignment( int( QLabel::AlignCenter ) );
MPlayerLayout->addMultiCellWidget( Label, 2, 2, 0, 5 );
frame3 = new QFrame( this, "frame3" );
frame3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, frame3->sizePolicy().hasHeightForWidth() ) );
frame3->setFrameShape( QFrame::HLine );
frame3->setFrameShadow( QFrame::Raised );
MPlayerLayout->addMultiCellWidget( frame3, 3, 3, 0, 5 );
languageChange();
resize( QSize(559, 458).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() ) );
connect( slider, SIGNAL( valueChanged(int) ), this, SLOT( sliderChanged(int) ) );
connect( cbAudio, SIGNAL( activated(int) ), this, SLOT( cbAudioActivated(int) ) );
connect( cbSub, SIGNAL( activated(int) ), this, SLOT( cbSubActivated(int) ) );
connect( bDown, SIGNAL( clicked() ), this, SLOT( bDownClick() ) );
connect( bUp, SIGNAL( clicked() ), this, SLOT( bUpClick() ) );
connect( bSwitchAudio, SIGNAL( clicked() ), this, SLOT( bSwitchAudioClick() ) );
}
/*
* Destroys the object and frees any allocated resources
*/
MPlayer::~MPlayer()
{
// no need to delete child widgets, Qt does it all for us
}
/*
* Sets the strings of the subwidgets using the current
* language.
*/
void MPlayer::languageChange()
{
setCaption( tr2i18n( "Preview" ) );
textLabel1->setText( tr2i18n( "Audio" ) );
textLabel1_2->setText( tr2i18n( "Subpicture" ) );
bSwitchAudio->setText( QString::null );
bStop->setText( QString::null );
bPlay->setText( QString::null );
bPlay->setAccel( QKeySequence( QString::null ) );
bDown->setText( tr2i18n( "-" ) );
bDown->setAccel( QKeySequence( QString::null ) );
bUp->setText( tr2i18n( "+" ) );
bUp->setAccel( QKeySequence( QString::null ) );
Label->setText( QString::null );
}
void MPlayer::bStopClick()
{
qWarning( "MPlayer::bStopClick(): Not implemented yet" );
}
void MPlayer::cbAudioActivated(int)
{
qWarning( "MPlayer::cbAudioActivated(int): Not implemented yet" );
}
void MPlayer::slider_sliderReleased()
{
qWarning( "MPlayer::slider_sliderReleased(): Not implemented yet" );
}
void MPlayer::sliderReleased()
{
qWarning( "MPlayer::sliderReleased(): Not implemented yet" );
}
void MPlayer::sliderPressed()
{
qWarning( "MPlayer::sliderPressed(): Not implemented yet" );
}
void MPlayer::sliderChanged(int)
{
qWarning( "MPlayer::sliderChanged(int): Not implemented yet" );
}
void MPlayer::bPlayClick()
{
qWarning( "MPlayer::bPlayClick(): Not implemented yet" );
}
void MPlayer::cbSubActivated(int)
{
qWarning( "MPlayer::cbSubActivated(int): Not implemented yet" );
}
void MPlayer::bUpClick()
{
qWarning( "MPlayer::bUpClick(): Not implemented yet" );
}
void MPlayer::bDownClick()
{
qWarning( "MPlayer::bDownClick(): Not implemented yet" );
}
void MPlayer::bSwitchAudioClick()
{
qWarning( "MPlayer::bSwitchAudioClick(): Not implemented yet" );
}
#include "mplayer.moc"

@ -0,0 +1,439 @@
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>MPlayer</class>
<widget class="QWidget">
<property name="name">
<cstring>MPlayer</cstring>
</property>
<property name="enabled">
<bool>true</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>559</width>
<height>458</height>
</rect>
</property>
<property name="caption">
<string>Preview</string>
</property>
<property name="icon">
<pixmap>image0</pixmap>
</property>
<grid>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>3</number>
</property>
<property name="spacing">
<number>3</number>
</property>
<widget class="QLabel" row="0" column="0">
<property name="name">
<cstring>textLabel1</cstring>
</property>
<property name="text">
<string>Audio</string>
</property>
</widget>
<widget class="QComboBox" row="0" column="1">
<property name="name">
<cstring>cbAudio</cstring>
</property>
</widget>
<spacer row="0" column="5">
<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>190</width>
<height>20</height>
</size>
</property>
</spacer>
<widget class="QComboBox" row="0" column="4">
<property name="name">
<cstring>cbSub</cstring>
</property>
</widget>
<widget class="QLabel" row="0" column="3">
<property name="name">
<cstring>textLabel1_2</cstring>
</property>
<property name="text">
<string>Subpicture</string>
</property>
</widget>
<widget class="KPushButton" row="0" column="2">
<property name="name">
<cstring>bSwitchAudio</cstring>
</property>
<property name="maximumSize">
<size>
<width>22</width>
<height>22</height>
</size>
</property>
<property name="text">
<string></string>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
<widget class="QLayoutWidget" row="4" column="0" rowspan="1" colspan="6">
<property name="name">
<cstring>layout6</cstring>
</property>
<hbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="KPushButton">
<property name="name">
<cstring>bStop</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>30</width>
<height>30</height>
</size>
</property>
<property name="text">
<string></string>
</property>
<property name="pixmap">
<pixmap>image1</pixmap>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
<widget class="KPushButton">
<property name="name">
<cstring>bPlay</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>30</width>
<height>30</height>
</size>
</property>
<property name="text">
<string></string>
</property>
<property name="pixmap">
<pixmap>image2</pixmap>
</property>
<property name="accel">
<string></string>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
<widget class="QSlider">
<property name="name">
<cstring>slider</cstring>
</property>
<property name="orientation">
<enum>Horizontal</enum>
</property>
</widget>
<widget class="QLayoutWidget">
<property name="name">
<cstring>layout5</cstring>
</property>
<hbox>
<property name="name">
<cstring>unnamed</cstring>
</property>
<widget class="KPushButton">
<property name="name">
<cstring>bDown</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="font">
<font>
<bold>1</bold>
</font>
</property>
<property name="text">
<string>-</string>
</property>
<property name="accel">
<string></string>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel">
<property name="name">
<cstring>pixmapLabel1</cstring>
</property>
<property name="maximumSize">
<size>
<width>22</width>
<height>22</height>
</size>
</property>
<property name="pixmap">
<pixmap>image3</pixmap>
</property>
<property name="scaledContents">
<bool>true</bool>
</property>
</widget>
<widget class="KPushButton">
<property name="name">
<cstring>bUp</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="font">
<font>
<bold>1</bold>
</font>
</property>
<property name="text">
<string>+</string>
</property>
<property name="accel">
<string></string>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</hbox>
</widget>
</hbox>
</widget>
<widget class="QFrame" row="1" column="0" rowspan="1" colspan="6">
<property name="name">
<cstring>frame4</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>HLine</enum>
</property>
<property name="frameShadow">
<enum>Raised</enum>
</property>
</widget>
<widget class="QLabel" row="2" column="0" rowspan="1" colspan="6">
<property name="name">
<cstring>Label</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>7</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="paletteBackgroundColor">
<color>
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</property>
<property name="text">
<string></string>
</property>
<property name="alignment">
<set>AlignCenter</set>
</property>
</widget>
<widget class="QFrame" row="3" column="0" rowspan="1" colspan="6">
<property name="name">
<cstring>frame3</cstring>
</property>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>HLine</enum>
</property>
<property name="frameShadow">
<enum>Raised</enum>
</property>
</widget>
</grid>
</widget>
<images>
<image name="image0">
<data format="PNG" length="1377">89504e470d0a1a0a0000000d494844520000002f0000002708060000009f7411c100000528494441545885ed597d6c535514ffddb796c2f81844e62423ac54374d8b5aa683652392f80f1103c902cd08099b6e2ca2b8fd83e0186e44d42c59202806e5638400e2f6c71697992c241015718fcae63689205f5b670703442ca26c6b37eef18ff2ae7d7dafeb74fdd0c45fd2e4de7bce3bfd9d9373cebdef3e26cb32fe6da8db7f91a40486fca20c369a9e21568482d1d2e0a693c77fc4c8c8fd903a675aaf10630cdb6b5fd075824533f21dad77a9b1ee0c06ef79c1a4518318163b0e2cd5181837f99606379ded70e346ff1d242448e3b2150ec10e8c296d5a1adcd47de9262e5fb801a331415727dac4f5a0223fc39645b95fdec62fcb1f5629656767c79454201863702cd9896b7dbf6a65b22cc3956aa792f6dff05cf204b42c9a11078ae1c118c3e9d3a75569c39aae0dd26ae71d00c01f792971213656043b2029c43f9c3f2d6ea4c60a2252cd4595ad499b147332e385206f1c671f8e0762dfdf2288ffc9c7125b871f1755fb9f23ffc5cf3e31361000bd5265ccbfaab4a7c0b93256a0a7132d4c0c389d18a61924fc3ec2354a39d64a00807cfe1d109198b79edb86a1a1613c9fb94de8ee3e540cfbb36900fc0e70aeb5172904c645aab24e1e55b9b4e8a026d20a761f2a46ebb96d585f780000e0f57a2346722c90e6df3a1bb2c13f9a9182ef9c3dc87ee22df87c230010d21100b0582c626c301860b7dbe176bb2149fed26a6b6b1363499234634992e0f57a61b15860b158543abae4f5161582479a5e7f609ca1fd4a3500a0b3ad57e8bd56508b85195bb0fb503100a0bfbf1fbb76ed12a9d3d5d585b2b232a19f92a23e3bf97c3e783c1e007fd589c96482cbe5426f6f2f38e7a8adadd5f0ab9f68a390e4dd3fdd16068993ca78755593d0fbe8f05a7c7be93d91ef00505a5a8aab57af8a79737333f2f2f2c43c309246a3119b376f06001416168a5a59b76e9dd0292a2ad2f03bd83be81fc8b28cc4c6eb4444c43927ce39cd4bdd4059e915c4392722a29327ce13e79cb2d22b2873ee9b3438e0a3acf40aea38e312cf70ce09806a0c803a3b3bc9ef3b91c3e12087c32164c1ba050505626e369b55b6955f62e3754a6cbc4eb22cfbcff38bfbe7926fc523516d71803fea4aabede9e981d96cfedb36a67c7613007062968b1900e0a9a4d85c2228c423d54a2500f864c1f488180b07228ae81e200180e75c1b8b76ca441a1767d9296e974ec1608ca164d53e5c387f0d73cc3371b4b974d41a7ce3fbbbf1bb3153c01843aead4ad483776818bdddb734c79360d4654f8f2f79c61872ac95f00e0da3bdbb5a235fbeb80639d64aecaf7f05d6275355b2293d1d4cec184ea733e6ef8139d64a188d0968efaec6ecd9b3515353a392379fdc84d52fe5a264d55e30c6c4ce6f7bd01de3769edffbfe0900c0575d5bc55a7979392449425f5f9f585bbf710900e0e9399b6068b801fb74233e48bccc8020f20b32b6449ff5031cdeff354c26fdac4d4b4b832449a2ad1efdbc0c93a798702ad5c5b64fba243244f5b4d198805c5b158c130cd8f7e95a3c941cfa2e6766f2d4713b70cc5931aadc60f0d30bd57554e407ee799138d98461df085e5eb967dce40271ff3ec7330b2d58f3aa55891c49a31caf01c0e3f120292929a45c45fee3fa3cb6a1b8e51fef56c40953932661e1a2c7b074e59cb00d60d1bcad705e7c57b39e9f9f8fbaba3a31dfb3f3b8eef39aa4db716069580706067c58b622734c044321d4ffe81d1f8ed49e429a2559b31ed52f23e1b0a1b8851863f8e687b7c118d3cded5c5b1500fd2f2371bdfa5008e5daaae0f38ea864cace1ba8178cb8465ec1c69263a4972e9c13761e7c31646afe09ba8d3cd6d8e39a010000000049454e44ae426082</data>
</image>
<image name="image1">
<data format="PNG" length="1073">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000003f849444154388d9595dd6f145518c67fe7ccc7ee6c77962d2d1f8bba14d1340621b82b26dc1063a206895e60421413bd2a813b132fbcf24a13fe02c3c524c43b2ec444632244888951c48fb24d459410a87ca56cb7dded7eb03b3bb333e778b1b4b648b13cc993c99939f37b9fbc6fce8ce0212a1c99b440af039543eb146840fb6855b654b3f28bf772b8d2bbe221d0ddc001d03b11e411d600002ae8a0e35bc0a450d1c9823e7ecef3bcf87fc18523935b41bc8f611d4c0fa4b21b873372c35092d1e1168e1573ad96e67a4531373bab6a0ddf57917fced2773fd9a14f9cf73c2f7a20b8706472338863d899bd3b9f74786d97cbf62734ebb31686ec6fd5c07c2b62aadce354a9cb0f17e709fde65f0955fbf0597df2d402dcb82fe9a7e94ce6d53776af11efbee8f074ce206119f4620823bd68430a863326db375b6c18b4f8bba2879b5df17c556f29ed2d3ab74ba5925e04e7761d3e8aedbeb5ef85ac78bd68615b9230d204bdfb1c2a829e2288345a6b36adb5705396f8f3763cd40db5b5898933c562b127fa692fec1646f29b1d4fadcd1edce3e03a926f27fc95e6ba4caf3ce7d08b345ffdeaf3fd44a56104d3ef6de78bd366e1f0b885d607d203c94c61ab4dac148db606e0a3b7d73f14faf1890a9d40d10d15a3b998dfaf25dc5a35bdbfd21bf9d904d6013b339935329b8c68b6e5aa922ee8b31f130034fd142dd25251dfd614f9bc09e410323fec0afc50e1878a7eded515102ae46a2dd35f982608238761e74d20854c0ca4ac1ef5b6420ab0cd15cfcd325d9b4b2e2f2204c8842314aeb970b3d9b59869680c09aeb33a30c0d55a06b1b05ddf2b809226681f157466da0eed38b9f850af7cda1fa83e5c43dced0a1d05265a95815b8d8eda120be791600b328dfe44eefa01e8b82255bb2c2dd5ac0093043565191a7b8957aba419639b3122ac2a93ee95acbe714700140f9ddf23ecf497b9dcc6c141d77ea42618122205f3ad90f2f474cbe95efe60549efdda0428e8e3e72e44639fb7eab3874686064998a2ff795a087ddf70342c1b5810696ed6e75161e3bb5179f627a06500944a25fd78e19da9a0c7334ac59b1f1b32442a214858ba6f73f93569ffbb16f4b872b3a9aab5c6f8507ce958564c5f5a0403ec2b58d5aace8f377c735bb3138db8298bb5ae896d496c53fcc79601738d1e17a71a94679be3eba289a37959fa0d98f33c2f5e04974a25bdb798aa55f5c844c33752b38dde48ab13d9493312038e8929255280d631d5f9367f5cefa8cb375b77ebf5e6e9a1f8d2b17bd08ae779bda5dd5bd4d8d89804062ef2e64b914cef5758dba41439d7311c80961f7755ac2a26dd2bc978e6ccbd9ece00f515ff204be002b02bf148b629f2790c3b2fc0152829741448d52e67f58d3b6b8cb91ad0027ccff3d452c63f42b8e4bfe27a6d4a0000000049454e44ae426082</data>
</image>
<image name="image2">
<data format="PNG" length="1205">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000047c49444154388d8595db6f54551487bfbdcf656e9de994164b118602318454a04e4583899760d454a289688cb7f856020f24bc10ff0025fd03d4f4e1280fbef4411e4d30627c2148086548ad8821b140a9d2ceb4d39933cce5dcf6f661da424d8b275959679fbdd7777e6b65656dc1639efc89490bf466507d689d040de8265acd59ca2d5e715ef3378a158f811e02de073d882087b0520028af818eee01934285e7f2faec25c771a2ff05e74f4cee06710ac3faa82395cc6ee9c9c8deee387b7a6a24ac88bfca1ddc292a164a2555ae369b2a6c5eb2f4832ff6ebf1cb8ee384eb82f32726778018c3ce0c0fee4af0e6c134fbb66b9ec85a18b27d54034bb590e9b980f3851617a796f09beecd982a7ff6b43e777e056efc47e9d71d99cc1b6f1fea149fbe92e0a93e839865f0cd4f15f66e8fe1871a3fd41852d09331d9b7c3a2b7cbe27651f7b82df1eca2de59181e4acc160a05bd0aee3b787c143bfdc191e7b2e2ad210bdb92f8a1c60b34efbc90e5ab1f16d9b5c5c2f3155ea0f0428dd69aad9b2cd2494bfc311b75b77c6d6de5fa85a1a1a1c068abbd764818b1d103bb33f1e1bc8594e0078a56d0866ceb89f1e2408a93df699ec90578815ede6f67b0a94352f74d664a417f29da3ed9cbcddb46fef884059c4aa7d32fbd3a98125d1de0059a56d056eb059add5be300bcf7bcc1e971c1de2dfe9afd56a0b00d9fe97965d75b616084d58b26b01918cc643a65361ee2d6e5461d08c0f8499b0fbf84a3075ca248335b8e989acbe23693d4e8908aca802b723913e843c85c4f5ad0f4154d5fa197db65c5af0fcfb0bfb7c2e4df2966dd7646982608a30fc3ce4920898ca5925640a5ae701b0acfd7b47cbdea3752fedb7c965223b9fa4d0801329610905ecddb6d59cc57254557526d4a2a4d837b95185767528f2d8b1f190841db567e809226e826ca6bccd713d4a3783b7f4023a8f9367a7dc100bc3efaf05d88761451ab2574e899683507dcab36d4ce4824d6046ae486d3e4f019089627846980041e343dd05151aafa9cb4945b0426f1caca3234f623163322d6937cf80c8022694524ad88b819619b11c25f5426ad5b597df7be79c579cd1f3a76f95ce4553fb1a2445757da5e23526980ccea7a64acc6b63408a157cfb5e7878f6a2dd513d1fc854e63a16c02e4f5d94bd7c291ef6b95d2b1feee2e62a678d86f3c049ffe769eac0dda5ea969fb8c176a662a4b28bffacb1ef9f3af40cd0028140a7a5bfee3692f60af52d18e27bb0d918c0962962666695ede97e6f3f1fbc4ccf63a6eb77dccd408026ecdb86ab15c9de88e6e8c65c53f3756c10047f2d6e2a2ce4d549be680db08fbd3498b4d6913db925cbe59c736c51ab30c58a8064c4d57992bb9139bc3eba33959b80a2c388e13ad820b85821e1e4a961775fff56ad34896aa417fad11da713314a9848929255280d6118b4b757ebfd3507fced41e542aee8fddd18db16568d1719c00d669a691911109a4a678f770283b8e2aac0129455f3a6124006acda8a522553469dd8a47f317966b3a0f5436bc411e810bc02e46fd5957e47218764e405aa0a4d0a127557d2eabefdeef3416ca400d683a8ea31e65fc0b65f3416ec3c8f69a0000000049454e44ae426082</data>
</image>
<image name="image3">
<data format="PNG" length="1191">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b0000046e49444154388d95944f68db561cc7bfcf962ddb926d49b58393da8e9bd03681ae0da50cf732e8c64642c88ad232da831965f4b2c146a097b20db66b6130c67aef9fd328ad2ea526ec52bad143581ddc85266d5db769fca7691c59b25463cb8adf0e5b44bc6429fb814efa7e3feffb7eefbd1fa194e26d25cb725f30183cea72b9185dd7ff5014e5d5db3c6427b02ccbfe542af57d2412199324299e4aa562d168542084a056abe9cf9f3f7fb5bebe5e5e5b5b5b585e5efe4651147357b02ccb646060e0cb6432f9d9c4c4c43b8d4603e572194f9f3ec5caca0a28a5482412d8bf7f3ff6eedd0b411090cd6617979797af552a954b8aa274b7816559e60f1c38903d79f264daebf532d96c16d56a75d7edf6f5f561727212dd6eb77bebd6adf9274f9e7ca8284abd077ce1c285db994c66b2542ae1debd7b6f6b614fa5d3690c0f0fe3faf5eb770b85c2078aa2741900989999b974ead4a98f2ccb422e9703cff3ff0bbcb0b080fefe7ec8b2fcdecd9b377f06f039999e9e1e999a9afa3d9d4eef999d9d45b7dbdd664c2412884422f8e7f09c7e6f2d4208c6c7c791cfe78d3b77eebccf44a3d1338383837b5aad16388eeb1187c361a4d36948920400e8743ab06d1bbaae637e7e1e9aa6f5e89bcd2652a9545014c5330cc77187fd7e3f745def6981dbedc6912347100a8560dbb693ca300cd8b68d83070fe2f1e3c7ce3f00d0340d922481e7f911c6e7f30d79bd5e349b4d04834147e4f3f960591654550500504a1db0699aa094421004b4db6dc7b3b1b101b7db0d9fcf37c4743a9df6eaea2a62b118dc6eb723b26d1ba552097ebf1f0cc338ad78f3e60d28a5a094c2e3f1f4ec32140a616d6d0d9665598c6118c5f5f5f57793c9644f62c330b0babaea4036bfcdf49b8f65ab876559a8aa0ac3309e31a669ce699a76c6344d88a2e888789e47b55ac5ebd7afb70129a588442288c7e32084f48469341a68341a7fba8786865eba5caee956ab25f6f7f7439224b02c0b9665118fc7d16eb7b1b2b202c330d06c36d1e974303a3a8ae3c78f231008385ac33090cbe5502c162be572f92b422945269339974c267f181818104f9c38814422d1738d28a5d075dd39b0ad2901a05c2ee3fefdfb28954a66b158fcfaca952b3f394f3a93c9fc383838f8852449ccb163c7303a3a8a68348addaa56ab61696909f97c1eaaaa760b85c2b5ab57af9e03006653649ae6cc8b172fb87abdfeb1aaaa7d0f1f3ec4a14387100e87210882b348ad5643bd5e47a3d1c0d2d212aad52a344d5355559d350ce3fc266fdb3c3e7dfaf4d14020f05b381c0eb02c0b42085896755aa0691a2ccb72aea46ddbed4aa5327ee3c68dbb5b393b0efab367cffe228ae2275eaf178410743a1d6c6c6c801002afd70b8ee3100e8731363686070f1edcbe78f1e2d4bf19cc362a8056ab755ed7f5a42449e9582c867dfbf641100488a288e1e161f03c0f42082e5fbe9c9b9b9bfb7427c68e8981bf073fcbb2dff9fdfe894422111f191909a55229b85c2ee3d1a3479542a1f0ebe2e2e2b78aa2683bf9ff13bc65010f80218ee30e7b3c1eb7a6697900cf1445b176f3fd0505392666882072940000000049454e44ae426082</data>
</image>
</images>
<connections>
<connection>
<sender>bStop</sender>
<signal>clicked()</signal>
<receiver>MPlayer</receiver>
<slot>bStopClick()</slot>
</connection>
<connection>
<sender>bPlay</sender>
<signal>clicked()</signal>
<receiver>MPlayer</receiver>
<slot>bPlayClick()</slot>
</connection>
<connection>
<sender>slider</sender>
<signal>sliderReleased()</signal>
<receiver>MPlayer</receiver>
<slot>sliderReleased()</slot>
</connection>
<connection>
<sender>slider</sender>
<signal>sliderPressed()</signal>
<receiver>MPlayer</receiver>
<slot>sliderPressed()</slot>
</connection>
<connection>
<sender>slider</sender>
<signal>valueChanged(int)</signal>
<receiver>MPlayer</receiver>
<slot>sliderChanged(int)</slot>
</connection>
<connection>
<sender>cbAudio</sender>
<signal>activated(int)</signal>
<receiver>MPlayer</receiver>
<slot>cbAudioActivated(int)</slot>
</connection>
<connection>
<sender>cbSub</sender>
<signal>activated(int)</signal>
<receiver>MPlayer</receiver>
<slot>cbSubActivated(int)</slot>
</connection>
<connection>
<sender>bDown</sender>
<signal>clicked()</signal>
<receiver>MPlayer</receiver>
<slot>bDownClick()</slot>
</connection>
<connection>
<sender>bUp</sender>
<signal>clicked()</signal>
<receiver>MPlayer</receiver>
<slot>bUpClick()</slot>
</connection>
<connection>
<sender>bSwitchAudio</sender>
<signal>clicked()</signal>
<receiver>MPlayer</receiver>
<slot>bSwitchAudioClick()</slot>
</connection>
</connections>
<slots>
<slot>bStopClick()</slot>
<slot>cbAudioActivated(int)</slot>
<slot>slider_sliderReleased()</slot>
<slot>sliderReleased()</slot>
<slot>sliderPressed()</slot>
<slot>sliderChanged( int )</slot>
<slot>bPlayClick()</slot>
<slot>cbSubActivated(int)</slot>
<slot>bUpClick()</slot>
<slot>bDownClick()</slot>
<slot>bSwitchAudioClick()</slot>
</slots>
<layoutdefaults spacing="6" margin="11"/>
<includehints>
<includehint>kicondialog.h</includehint>
<includehint>kpushbutton.h</includehint>
<includehint>kpushbutton.h</includehint>
<includehint>kpushbutton.h</includehint>
<includehint>kpushbutton.h</includehint>
</includehints>
</UI>

@ -0,0 +1,18 @@
AM_CPPFLAGS= -I$(srcdir) $(all_includes)
KDE_CXXFLAGS = $(ENABLE_PERMISSIVE_FLAG)
METASOURCES = AUTO
noinst_LTLIBRARIES = libk9author.la
libk9author_la_LDFLAGS = $(all_libraries)
libk9author_la_SOURCES = chapterEdit.ui import.ui k9avidecode.cpp k9avifile.cpp \
k9canvasselection.cpp k9chapteredit.cpp k9import.cpp k9importfiles.cpp k9lvitemimport.cpp \
k9menu.cpp k9menubutton.cpp k9menuedit.cpp k9menueditor.cpp k9newdvd.cpp \
k9newtitle.cpp k9title.cpp menuEdit.ui newTitle.ui
noinst_HEADERS = k9avidecode.h k9avifile.h k9canvasselection.h k9chapteredit.h \
k9import.h k9importfiles.h k9lvitemimport.h k9menu.h k9menubutton.h k9menuedit.h \
k9menueditor.h k9newdvd.h k9newtitle.h k9title.h
libk9author_la_LIBADD = $(top_builddir)/libk9copy/libk9copy.la $(LIB_KDEUI)
INCLUDES = -I$(top_srcdir)/dvdread -I$(top_srcdir)/k9devices \
-I$(top_srcdir)/k9vamps -I$(top_srcdir)/libk9copy -I$(top_srcdir)/src $(all_includes)

@ -0,0 +1,212 @@
#include <klocale.h>
/****************************************************************************
** Form implementation generated from reading ui file './chapterEdit.ui'
**
** Created: dim. oct. 26 08:56:28 2008
**
** WARNING! All changes made in this file will be lost!
****************************************************************************/
#include "chapterEdit.h"
#include <qvariant.h>
#include <qpushbutton.h>
#include <ktimewidget.h>
#include <qlabel.h>
#include <kurlrequester.h>
#include <kpushbutton.h>
#include <qcheckbox.h>
#include <qslider.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include "ktimewidget.h"
#include "kurlrequester.h"
#include "klineedit.h"
#include "kpushbutton.h"
/*
* Constructs a chapterEdit as a child of 'parent', with the
* name 'name' and widget flags set to 'f'.
*/
chapterEdit::chapterEdit( QWidget* parent, const char* name, WFlags fl )
: QWidget( parent, name, fl )
{
if ( !name )
setName( "chapterEdit" );
setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, 0, 0, sizePolicy().hasHeightForWidth() ) );
chapterEditLayout = new QGridLayout( this, 1, 1, 11, 6, "chapterEditLayout");
twstart = new KTimeWidget( this, "twstart" );
twstart->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, twstart->sizePolicy().hasHeightForWidth() ) );
chapterEditLayout->addWidget( twstart, 1, 2 );
textLabel1 = new QLabel( this, "textLabel1" );
chapterEditLayout->addWidget( textLabel1, 1, 1 );
textLabel3 = new QLabel( this, "textLabel3" );
chapterEditLayout->addWidget( textLabel3, 0, 1 );
urFile = new KURLRequester( this, "urFile" );
urFile->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)5, 0, 0, urFile->sizePolicy().hasHeightForWidth() ) );
urFile->setMinimumSize( QSize( 200, 0 ) );
chapterEditLayout->addMultiCellWidget( urFile, 0, 0, 2, 4 );
bStart = new KPushButton( this, "bStart" );
bStart->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, bStart->sizePolicy().hasHeightForWidth() ) );
chapterEditLayout->addWidget( bStart, 1, 3 );
spacer2 = new QSpacerItem( 16, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
chapterEditLayout->addMultiCell( spacer2, 1, 2, 4, 4 );
ckBreakStart = new QCheckBox( this, "ckBreakStart" );
chapterEditLayout->addMultiCellWidget( ckBreakStart, 2, 2, 2, 3 );
spacer1 = new QSpacerItem( 21, 60, QSizePolicy::Minimum, QSizePolicy::Expanding );
chapterEditLayout->addItem( spacer1, 6, 2 );
textLabel2 = new QLabel( this, "textLabel2" );
chapterEditLayout->addWidget( textLabel2, 4, 1 );
ckBreakEnd = new QCheckBox( this, "ckBreakEnd" );
chapterEditLayout->addMultiCellWidget( ckBreakEnd, 5, 5, 2, 3 );
twend = new KTimeWidget( this, "twend" );
twend->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, twend->sizePolicy().hasHeightForWidth() ) );
chapterEditLayout->addWidget( twend, 4, 2 );
spacer3 = new QSpacerItem( 20, 31, QSizePolicy::Minimum, QSizePolicy::Fixed );
chapterEditLayout->addItem( spacer3, 3, 2 );
layout3 = new QGridLayout( 0, 1, 1, 0, 6, "layout3");
lPosition = new QLabel( this, "lPosition" );
lPosition->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, lPosition->sizePolicy().hasHeightForWidth() ) );
layout3->addWidget( lPosition, 1, 1 );
slider = new QSlider( this, "slider" );
slider->setOrientation( QSlider::Horizontal );
layout3->addWidget( slider, 1, 0 );
image = new QLabel( this, "image" );
image->setMinimumSize( QSize( 320, 200 ) );
image->setPaletteBackgroundColor( QColor( 0, 0, 0 ) );
image->setScaledContents( TRUE );
layout3->addMultiCellWidget( image, 0, 0, 0, 1 );
chapterEditLayout->addMultiCellLayout( layout3, 0, 6, 0, 0 );
bEnd = new KPushButton( this, "bEnd" );
bEnd->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, bEnd->sizePolicy().hasHeightForWidth() ) );
chapterEditLayout->addWidget( bEnd, 4, 3 );
bTitleButton = new QPushButton( this, "bTitleButton" );
bTitleButton->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, bTitleButton->sizePolicy().hasHeightForWidth() ) );
chapterEditLayout->addWidget( bTitleButton, 7, 0 );
languageChange();
resize( QSize(627, 300).expandedTo(minimumSizeHint()) );
clearWState( WState_Polished );
// signals and slots connections
connect( urFile<