From 45edb6399e5170a2f0c47dfa688bed85c69e4a07 Mon Sep 17 00:00:00 2001 From: maroy Date: Sun, 31 Oct 2004 10:24:54 +0000 Subject: [PATCH] added PlaylistExecutor, with a minimal implementation using Helix libraries --- .../modules/playlistExecutor/bin/autogen.sh | 87 ++ .../playlistExecutor/bin/gen_coverage_data.sh | 80 ++ .../modules/playlistExecutor/doc/.keepme | 1 + .../modules/playlistExecutor/etc/Makefile.in | 178 +++ .../modules/playlistExecutor/etc/configure.ac | 66 + .../playlistExecutor/etc/doxygen.config | 1144 +++++++++++++++++ .../playlistExecutor/etc/helixPlayer.xml | 8 + .../playlistExecutor/etc/testResultToHtml.xsl | 63 + .../modules/playlistExecutor/lib/.keepme | 1 + .../playlistExecutor/src/AdviseSink.cxx | 309 +++++ .../modules/playlistExecutor/src/AdviseSink.h | 273 ++++ .../src/AuthenticationManager.cxx | 134 ++ .../src/AuthenticationManager.h | 140 ++ .../playlistExecutor/src/ClientContext.cxx | 243 ++++ .../playlistExecutor/src/ClientContext.h | 214 +++ .../playlistExecutor/src/ErrorSink.cxx | 150 +++ .../modules/playlistExecutor/src/ErrorSink.h | 176 +++ .../modules/playlistExecutor/src/HelixDefs.h | 524 ++++++++ .../playlistExecutor/src/HelixIIDs.cxx | 57 + .../playlistExecutor/src/HelixPlayer.cxx | 308 +++++ .../playlistExecutor/src/HelixPlayer.h | 278 ++++ .../playlistExecutor/src/HelixPlayerTest.cxx | 188 +++ .../playlistExecutor/src/HelixPlayerTest.h | 132 ++ .../playlistExecutor/src/TestRunner.cxx | 281 ++++ .../modules/playlistExecutor/tmp/.keepme | 1 + .../modules/playlistExecutor/var/test.mp3 | Bin 0 -> 236563 bytes 26 files changed, 5036 insertions(+) create mode 100755 livesupport/modules/playlistExecutor/bin/autogen.sh create mode 100755 livesupport/modules/playlistExecutor/bin/gen_coverage_data.sh create mode 100644 livesupport/modules/playlistExecutor/doc/.keepme create mode 100644 livesupport/modules/playlistExecutor/etc/Makefile.in create mode 100644 livesupport/modules/playlistExecutor/etc/configure.ac create mode 100644 livesupport/modules/playlistExecutor/etc/doxygen.config create mode 100644 livesupport/modules/playlistExecutor/etc/helixPlayer.xml create mode 100644 livesupport/modules/playlistExecutor/etc/testResultToHtml.xsl create mode 100644 livesupport/modules/playlistExecutor/lib/.keepme create mode 100644 livesupport/modules/playlistExecutor/src/AdviseSink.cxx create mode 100644 livesupport/modules/playlistExecutor/src/AdviseSink.h create mode 100644 livesupport/modules/playlistExecutor/src/AuthenticationManager.cxx create mode 100644 livesupport/modules/playlistExecutor/src/AuthenticationManager.h create mode 100644 livesupport/modules/playlistExecutor/src/ClientContext.cxx create mode 100644 livesupport/modules/playlistExecutor/src/ClientContext.h create mode 100644 livesupport/modules/playlistExecutor/src/ErrorSink.cxx create mode 100644 livesupport/modules/playlistExecutor/src/ErrorSink.h create mode 100644 livesupport/modules/playlistExecutor/src/HelixDefs.h create mode 100644 livesupport/modules/playlistExecutor/src/HelixIIDs.cxx create mode 100644 livesupport/modules/playlistExecutor/src/HelixPlayer.cxx create mode 100644 livesupport/modules/playlistExecutor/src/HelixPlayer.h create mode 100644 livesupport/modules/playlistExecutor/src/HelixPlayerTest.cxx create mode 100644 livesupport/modules/playlistExecutor/src/HelixPlayerTest.h create mode 100644 livesupport/modules/playlistExecutor/src/TestRunner.cxx create mode 100644 livesupport/modules/playlistExecutor/tmp/.keepme create mode 100644 livesupport/modules/playlistExecutor/var/test.mp3 diff --git a/livesupport/modules/playlistExecutor/bin/autogen.sh b/livesupport/modules/playlistExecutor/bin/autogen.sh new file mode 100755 index 000000000..96776430b --- /dev/null +++ b/livesupport/modules/playlistExecutor/bin/autogen.sh @@ -0,0 +1,87 @@ +#!/bin/sh +#------------------------------------------------------------------------------- +# Copyright (c) 2004 Media Development Loan Fund +# +# This file is part of the LiveSupport project. +# http://livesupport.campware.org/ +# To report bugs, send an e-mail to bugs@campware.org +# +# LiveSupport 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. +# +# LiveSupport 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 LiveSupport; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# +# Author : $Author: maroy $ +# Version : $Revision: 1.1 $ +# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/bin/autogen.sh,v $ +#------------------------------------------------------------------------------- + +#------------------------------------------------------------------------------- +# Run this to set up the build system: configure, makefiles, etc. +# (based on the version in enlightenment's cvs) +#------------------------------------------------------------------------------- + +package="PlaylistExecutor" + +# assume we're in $basedir/bin +basedir=`dirname $0`/.. +test -z "$basedir" && basedir=. + +tmpdir=$basedir/tmp + +cd "$tmpdir" +DIE=0 + +# look at all other directories as seen from ${basedir}/tmp +tmpdir=. +bindir=../bin +etcdir=../etc + +(autoheader --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have autoconf installed to compile $package." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have autoconf installed to compile $package." + echo "Download the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +if test -z "$*"; then + echo "I am going to run ./configure with no arguments - if you wish " + echo "to pass any to it, please specify them on the $0 command line." +fi + +echo "Generating configuration files for $package, please wait...." + +configure_ac=${etcdir}/configure.ac +configure=${tmpdir}/configure + +#echo " aclocal $ACLOCAL_FLAGS" +#aclocal $ACLOCAL_FLAGS +echo " autoheader ${configure_ac}" +autoheader ${configure_ac} +echo " autoconf -o ${configure} ${configure_ac}" +autoconf -o ${configure} ${configure_ac} + +${configure} "$@" && echo diff --git a/livesupport/modules/playlistExecutor/bin/gen_coverage_data.sh b/livesupport/modules/playlistExecutor/bin/gen_coverage_data.sh new file mode 100755 index 000000000..ad5f77a64 --- /dev/null +++ b/livesupport/modules/playlistExecutor/bin/gen_coverage_data.sh @@ -0,0 +1,80 @@ +#!/bin/sh +#------------------------------------------------------------------------------- +# Copyright (c) 2004 Media Development Loan Fund +# +# This file is part of the LiveSupport project. +# http://livesupport.campware.org/ +# To report bugs, send an e-mail to bugs@campware.org +# +# LiveSupport 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. +# +# LiveSupport 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 LiveSupport; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# +# Author : $Author: maroy $ +# Version : $Revision: 1.1 $ +# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/bin/gen_coverage_data.sh,v $ +#------------------------------------------------------------------------------- +#------------------------------------------------------------------------------- +# This script generates code coverage data for the module +#------------------------------------------------------------------------------- +module="LiveSupport PlaylistExecutor" + +reldir=`dirname $0`/.. +basedir=`cd $reldir; pwd; cd -` +bindir=$basedir/bin +docdir=$basedir/doc +tmpdir=$basedir/tmp + +usrdir=`cd $basedir/../../usr; pwd; cd -` + +coverage_report_dir=$docdir/coverage + +raw_coverage_file=$tmpdir/raw_coverage.info +coverage_file=$tmpdir/coverage.info + +lcov=$usrdir/bin/lcov +genhtml=$usrdir/bin/genhtml + + +cd $basedir + +#------------------------------------------------------------------------------- +# Re-configure with covarege collection enabled, compile and run the tests +#------------------------------------------------------------------------------- +$bindir/autogen.sh --enable-coverage +make clean +make check + +#------------------------------------------------------------------------------- +# Generate some symlinks so that the sources are visible from tmpdir +#------------------------------------------------------------------------------- +ln -s $basedir/include $tmpdir/include +ln -s $basedir/src $tmpdir/src + + +#------------------------------------------------------------------------------- +# Use lcov to generate an HTML report on the coverage data +#------------------------------------------------------------------------------- +$lcov -d $tmpdir -c > $raw_coverage_file +$lcov -e $raw_coverage_file "$tmpdir/*" > $coverage_file +rm -rf $coverage_report_dir +mkdir -p $coverage_report_dir +$genhtml -t "$module" -o $coverage_report_dir $coverage_file + + +#------------------------------------------------------------------------------- +# Clean up +#------------------------------------------------------------------------------- +rm -f $tmpdir/include +rm -f $tmpdir/src diff --git a/livesupport/modules/playlistExecutor/doc/.keepme b/livesupport/modules/playlistExecutor/doc/.keepme new file mode 100644 index 000000000..e0808fa16 --- /dev/null +++ b/livesupport/modules/playlistExecutor/doc/.keepme @@ -0,0 +1 @@ +keep me diff --git a/livesupport/modules/playlistExecutor/etc/Makefile.in b/livesupport/modules/playlistExecutor/etc/Makefile.in new file mode 100644 index 000000000..5f487ab20 --- /dev/null +++ b/livesupport/modules/playlistExecutor/etc/Makefile.in @@ -0,0 +1,178 @@ +#------------------------------------------------------------------------------- +# Copyright (c) 2004 Media Development Loan Fund +# +# This file is part of the LiveSupport project. +# http://livesupport.campware.org/ +# To report bugs, send an e-mail to bugs@campware.org +# +# LiveSupport 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. +# +# LiveSupport 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 LiveSupport; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# +# Author : $Author: maroy $ +# Version : $Revision: 1.1 $ +# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/etc/Makefile.in,v $ +# +# @configure_input@ +#------------------------------------------------------------------------------- + +#------------------------------------------------------------------------------- +# General command definitions +#------------------------------------------------------------------------------- +MKDIR = mkdir -p +RM = rm -f +RMDIR = rm -rf +DOXYGEN = doxygen + + +#------------------------------------------------------------------------------- +# Basic directory and file definitions +#------------------------------------------------------------------------------- +BASE_DIR = @builddir@ +DOC_DIR = ${BASE_DIR}/doc +DOXYGEN_DIR = ${DOC_DIR}/doxygen +COVERAGE_DIR = ${DOC_DIR}/coverage +ETC_DIR = ${BASE_DIR}/etc +INCLUDE_DIR = ${BASE_DIR}/include +LIB_DIR = ${BASE_DIR}/lib +SRC_DIR = ${BASE_DIR}/src +TMP_DIR = ${BASE_DIR}/tmp + +USR_DIR = ${BASE_DIR}/../../usr +USR_INCLUDE_DIR = ${USR_DIR}/include +USR_LIB_DIR = ${USR_DIR}/lib +BOOST_INCLUDE_DIR = ${USR_INCLUDE_DIR}/boost-1_31 +LIBXMLPP_INCLUDE_DIR = ${USR_INCLUDE_DIR}/libxml++-1.0 + +HELIX_INCLUDE_DIR = ${USR_INCLUDE_DIR}/helix +HELIX_LIB_DIR = ${USR_LIB_DIR}/helix +HELIX_LIBS = ${HELIX_LIB_DIR}/runtlib.a \ + ${HELIX_LIB_DIR}/syslib.a \ + ${HELIX_LIB_DIR}/contlib.a \ + ${HELIX_LIB_DIR}/debuglib.a \ + ${HELIX_LIB_DIR}/utillib.a +HELIX_CFLAGS = -march=i686 -D_UNIX + + +MODULES_DIR = ${BASE_DIR}/.. + +CORE_DIR = ${MODULES_DIR}/core +CORE_INCLUDE_DIR = ${CORE_DIR}/include +CORE_LIB_DIR = ${CORE_DIR}/lib +CORE_LIB = livesupport_core +CORE_LIB_FILE = ${CORE_LIB_DIR}/lib${CORE_LIB}.a + +VPATH = ${SRC_DIR} + +TEST_RESULTS = ${DOC_DIR}/testResults.xml +# the text result XSLT has to be relative to the test result file, e.g. TMP_DIR +TEST_XSLT = ../etc/testResultToHtml.xsl + +PLAYLIST_EXECUTOR_LIB = livesupport_playlist_executor +PLAYLIST_EXECUTOR_LIB_FILE = ${LIB_DIR}/lib${PLAYLIST_EXECUTOR_LIB}.a +TEST_RUNNER = ${TMP_DIR}/testRunner + +DOXYGEN_CONFIG = ${ETC_DIR}/doxygen.config + + +#------------------------------------------------------------------------------- +# Configuration parameters +#------------------------------------------------------------------------------- +CPPFLAGS = @CPPFLAGS@ +CXXFLAGS = @CXXFLAGS@ @DEFS@ @COVERAGE_CXXFLAGS@ \ + -Wall -Wno-long-long \ + ${HELIX_CFLAGS} \ + -I${USR_INCLUDE_DIR} \ + -I${BOOST_INCLUDE_DIR} \ + -I${LIBXMLPP_INCLUDE_DIR} \ + -I${HELIX_INCLUDE_DIR} \ + -I${CORE_INCLUDE_DIR} \ + -I${INCLUDE_DIR} -I${TMP_DIR} +LDFLAGS = @LDFLAGS@ -L${USR_LIB_DIR} -L${CORE_LIB_DIR} -L${HELIX_LIB_DIR} \ + -L${LIB_DIR} + + +#------------------------------------------------------------------------------- +# Dependencies +#------------------------------------------------------------------------------- +PLAYLIST_EXECUTOR_LIB_OBJS = ${TMP_DIR}/HelixPlayer.o \ + ${TMP_DIR}/AdviseSink.o \ + ${TMP_DIR}/AuthenticationManager.o \ + ${TMP_DIR}/ClientContext.o \ + ${TMP_DIR}/ErrorSink.o \ + ${TMP_DIR}/HelixIIDs.o +TEST_RUNNER_OBJS = ${TMP_DIR}/HelixPlayerTest.o \ + ${TMP_DIR}/TestRunner.o +TEST_RUNNER_LIBS = -l${PLAYLIST_EXECUTOR_LIB} -l${CORE_LIB} \ + ${HELIX_LIBS} \ + -lxml++-1.0 -lcppunit -ldl -lm -lpthread + + +#------------------------------------------------------------------------------- +# Targets +#------------------------------------------------------------------------------- +.PHONY: all dir_setup doc clean docclean depclean distclean + +all: dir_setup ${PLAYLIST_EXECUTOR_LIB_FILE} + +dir_setup: ${TMP_DIR} ${DOXYGEN_DIR} + +doc: + ${DOXYGEN} ${DOXYGEN_CONFIG} + +clean: + ${RM} ${PLAYLIST_EXECUTOR_LIB_OBJS} ${PLAYLIST_EXECUTOR_LIB_FILE} + ${RM} ${TEST_RUNNER_OBJS} ${TEST_RUNNER} + ${RM} ${TMP_DIR}/*.bb ${TMP_DIR}/*.bbg ${TMP_DIR}/*.da ${TMP_DIR}/*.info + +docclean: + ${RMDIR} ${DOXYGEN_DIR}/html + ${RMDIR} ${COVERAGE_DIR}/* + ${RM} ${TEST_RESULTS} + +depclean: clean + +distclean: clean docclean + ${RMDIR} ${TMP_DIR}/config* ${TMP_DIR}/autom4te* + +check: all ${TEST_RUNNER} + LD_LIBRARY_PATH=${USR_LIB_DIR} ${TEST_RUNNER} \ + -o ${TEST_RESULTS} -s ${TEST_XSLT} + + +#------------------------------------------------------------------------------- +# Specific targets +#------------------------------------------------------------------------------- +${PLAYLIST_EXECUTOR_LIB_FILE}: ${PLAYLIST_EXECUTOR_LIB_OBJS} + ${AR} crus $@ $^ + +${TMP_DIR}: + ${MKDIR} ${TMP_DIR} + +${DOXYGEN_DIR}: + ${MKDIR} ${DOXYGEN_DIR} + +${TEST_RUNNER}: ${CORE_LIB_FILE} ${TEST_RUNNER_OBJS} ${PLAYLIST_EXECUTOR_LIB_FILE} + ${CXX} ${LDFLAGS} -o $@ ${TEST_RUNNER_OBJS} ${TEST_RUNNER_LIBS} + +${CORE_LIB_FILE}: + ${MAKE} -C ${CORE_DIR} + + +#------------------------------------------------------------------------------- +# Pattern rules +#------------------------------------------------------------------------------- +${TMP_DIR}/%.o : ${SRC_DIR}/%.cxx + ${CXX} ${CPPFLAGS} ${CXXFLAGS} -c -o $@ $< + diff --git a/livesupport/modules/playlistExecutor/etc/configure.ac b/livesupport/modules/playlistExecutor/etc/configure.ac new file mode 100644 index 000000000..73f43f9bc --- /dev/null +++ b/livesupport/modules/playlistExecutor/etc/configure.ac @@ -0,0 +1,66 @@ +dnl----------------------------------------------------------------------------- +dnl Copyright (c) 2004 Media Development Loan Fund +dnl +dnl This file is part of the LiveSupport project. +dnl http://livesupport.campware.org/ +dnl To report bugs, send an e-mail to bugs@campware.org +dnl +dnl LiveSupport is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl LiveSupport 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 +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with LiveSupport; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +dnl +dnl +dnl Author : $Author: maroy $ +dnl Version : $Revision: 1.1 $ +dnl Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/etc/configure.ac,v $ +dnl----------------------------------------------------------------------------- + +dnl----------------------------------------------------------------------------- +dnl NOTE: Run all configure related scripts from the tmp directory of the +dnl project. +dnl This is due to the fact that configure spreads a lot of trash around, +dnl like atom4te cache directories, config.* files, etc. into the directory +dnl it is being run from. We clearly don't want these in our base directory. +dnl----------------------------------------------------------------------------- +AC_INIT(PlaylistExecutor, 1.0, bugs@campware.org) +AC_PREREQ(2.59) +AC_COPYRIGHT([Copyright (c) 2004 Media Development Loan Fund under the GNU GPL]) +AC_REVISION($Revision: 1.1 $) + +AC_CONFIG_SRCDIR(../src/HelixPlayer.cxx) + +AC_CONFIG_HEADERS(configure.h) +AC_PROG_CXX() + +AC_CHECK_HEADERS(getopt.h) + +dnl----------------------------------------------------------------------------- +dnl enable compilaton for code coverage data +dnl----------------------------------------------------------------------------- +AC_SUBST(COVERAGE_CXXFLAGS) + +AC_ARG_ENABLE( coverage, +[ --enable-coverage enable code coverage data generaton (no) ], + ENABLE_COVERAGE=${enableval}, ENABLE_COVERAGE="no" ) + +if test "x${ENABLE_COVERAGE}" == "xyes" ; then + COVERAGE_CXXFLAGS="-fprofile-arcs -ftest-coverage" + AC_MSG_RESULT([compiling in code coverage mode]) +else + AC_MSG_RESULT([not compiling in code coverage mode]) +fi + + +AC_CONFIG_FILES(../Makefile:../etc/Makefile.in) + +AC_OUTPUT() diff --git a/livesupport/modules/playlistExecutor/etc/doxygen.config b/livesupport/modules/playlistExecutor/etc/doxygen.config new file mode 100644 index 000000000..d90dbee65 --- /dev/null +++ b/livesupport/modules/playlistExecutor/etc/doxygen.config @@ -0,0 +1,1144 @@ +#------------------------------------------------------------------------------- +# Copyright (c) 2004 Media Development Loan Fund +# +# This file is part of the LiveSupport project. +# http://livesupport.campware.org/ +# To report bugs, send an e-mail to bugs@campware.org +# +# LiveSupport 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. +# +# LiveSupport 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 LiveSupport; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# +# Author : $Author: maroy $ +# Version : $Revision: 1.1 $ +# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/etc/doxygen.config,v $ +#------------------------------------------------------------------------------- + +# Doxyfile 1.3.6 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = LiveSupport + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = 1.0 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc/doxygen + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, +# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en +# (Japanese with English messages), Korean, Korean-en, Norwegian, Polish, Portuguese, +# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is used +# as the annotated text. Otherwise, the brief description is used as-is. If left +# blank, the following values are used ("$name" is automatically replaced with the +# name of the entity): "The $name class" "The $name widget" "The $name file" +# "is" "provides" "specifies" "contains" "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited +# members of a class in the documentation of that class as if those members were +# ordinary class members. Constructors, destructors and assignment operators of +# the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. It is allowed to use relative paths in the argument list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = YES + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = src + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp +# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories +# that are symbolic links (a Unix filesystem feature) are excluded from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. + +INPUT_FILTER = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = include + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superseded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes that +# lay further from the root node will be omitted. Note that setting this option to +# 1 or 2 may greatly reduce the computation time needed for large code bases. Also +# note that a graph may be further truncated if the graph's image dimensions are +# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). +# If 0 is used for the depth value (the default), the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/livesupport/modules/playlistExecutor/etc/helixPlayer.xml b/livesupport/modules/playlistExecutor/etc/helixPlayer.xml new file mode 100644 index 000000000..ec00150b9 --- /dev/null +++ b/livesupport/modules/playlistExecutor/etc/helixPlayer.xml @@ -0,0 +1,8 @@ + + + +]> + diff --git a/livesupport/modules/playlistExecutor/etc/testResultToHtml.xsl b/livesupport/modules/playlistExecutor/etc/testResultToHtml.xsl new file mode 100644 index 000000000..d2165c2a4 --- /dev/null +++ b/livesupport/modules/playlistExecutor/etc/testResultToHtml.xsl @@ -0,0 +1,63 @@ + + + + + + + LiveSupport unit test results + + +

Preface

+This document is part of the +LiveSupport +project, Copyright © 2004 Media +Development Loan Fund, under the GNU +GPL. +
+This is an automatically generated document. +

Scope

+This document contains the generated unit test results for the +LiveSupport project. +

Summary

+ + + + + + + + + + + + + + + + + + +
Total number of tests:
Tests passed:
Tests failed:
Test errors:
+
+

Tests

+ + + + + + + + + + + + + +
test nametest status
failedpassed
+ + +
+ +
+ diff --git a/livesupport/modules/playlistExecutor/lib/.keepme b/livesupport/modules/playlistExecutor/lib/.keepme new file mode 100644 index 000000000..e0808fa16 --- /dev/null +++ b/livesupport/modules/playlistExecutor/lib/.keepme @@ -0,0 +1 @@ +keep me diff --git a/livesupport/modules/playlistExecutor/src/AdviseSink.cxx b/livesupport/modules/playlistExecutor/src/AdviseSink.cxx new file mode 100644 index 000000000..417795faf --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/AdviseSink.cxx @@ -0,0 +1,309 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/AdviseSink.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include "HelixDefs.h" + +#include + +#include "AdviseSink.h" + +using namespace LiveSupport::PlaylistExecutor; + + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Construct the advise sink + *----------------------------------------------------------------------------*/ +AdviseSink::AdviseSink(IUnknown * pUnknown) throw () + : lRefCount(0) + , pUnknown(NULL) + , pRegistry(NULL) + , pScheduler(NULL) +{ + if (pUnknown) { + this->pUnknown = pUnknown; + this->pUnknown->AddRef(); + + if (HXR_OK != this->pUnknown->QueryInterface(IID_IHXRegistry, + (void**)&pRegistry)) { + pRegistry = NULL; + } + + if (HXR_OK != this->pUnknown->QueryInterface(IID_IHXScheduler, + (void**)&pScheduler)) { + pScheduler = NULL; + } + + IHXPlayer* pPlayer; + if (HXR_OK == this->pUnknown->QueryInterface(IID_IHXPlayer, + (void**)&pPlayer)) { + pPlayer->AddAdviseSink(this); + pPlayer->Release(); + } + } +} + + +/*------------------------------------------------------------------------------ + * Destruct the advise sink + *----------------------------------------------------------------------------*/ +AdviseSink::~AdviseSink(void) throw () +{ + if (pScheduler) { + pScheduler->Release(); + pScheduler = NULL; + } + + if (pRegistry) { + pRegistry->Release(); + pRegistry = NULL; + } + + if (pUnknown) { + pUnknown->Release(); + pUnknown = NULL; + } +} + + +// IUnknown methods + +/*------------------------------------------------------------------------------ + * Implement this to export the interfaces supported by your + * object. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::QueryInterface(REFIID riid, + void ** ppvObj) throw () +{ + if (IsEqualIID(riid, IID_IUnknown)) { + AddRef(); + *ppvObj = (IUnknown*)(IHXClientAdviseSink*)this; + return HXR_OK; + } else if (IsEqualIID(riid, IID_IHXClientAdviseSink)) { + AddRef(); + *ppvObj = (IHXClientAdviseSink*)this; + return HXR_OK; + } + + *ppvObj = NULL; + return HXR_NOINTERFACE; +} + + +/*------------------------------------------------------------------------------ + * Increase the refence count. + *----------------------------------------------------------------------------*/ +STDMETHODIMP_(ULONG32) +AdviseSink::AddRef() throw () +{ + return InterlockedIncrement(&lRefCount); +} + + +/*------------------------------------------------------------------------------ + * Decreaese the refence count. + *----------------------------------------------------------------------------*/ +STDMETHODIMP_(ULONG32) +AdviseSink::Release() throw () +{ + if (InterlockedDecrement(&lRefCount) > 0) { + return lRefCount; + } + + delete this; + return 0; +} + + +// IHXClientAdviseSink methods + +/*------------------------------------------------------------------------------ + * Called to advise the client that the position or length of the + * current playback context has changed. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnPosLength(UINT32 ulPosition, + UINT32 ulLength) throw () +{ + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called to advise the client a presentation has been opened. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnPresentationOpened() throw () +{ + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called to advise the client a presentation has been closed. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnPresentationClosed() throw () +{ + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called to advise the client that the presentation statistics + * have changed. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnStatisticsChanged(void) throw () +{ + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called by client engine to inform the client that a seek is + * about to occur. The render is informed the last time for the + * stream's time line before the seek, as well as the first new + * time for the stream's time line after the seek will be completed. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnPreSeek(ULONG32 ulOldTime, + ULONG32 ulNewTime) throw () +{ + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called by client engine to inform the client that a seek has + * just occured. The render is informed the last time for the + * stream's time line before the seek, as well as the first new + * time for the stream's time line after the seek. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnPostSeek(ULONG32 ulOldTime, + ULONG32 ulNewTime) throw () +{ + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called by client engine to inform the client that a stop has + * just occured. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnStop(void) throw () +{ + HXTimeval now; + + // Find out the current time and subtract the beginning time to + // figure out how many seconds we played + now = pScheduler->GetCurrentSchedulerTime(); + ulStopTime = now.tv_sec; + +// TODO: maybe save the number of seconds played? +// GetGlobal()->g_ulNumSecondsPlayed = ulStopTime - ulStartTime; + + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called by client engine to inform the client that a pause has + * just occured. The render is informed the last time for the + * stream's time line before the pause. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnPause(ULONG32 ulTime) throw () +{ + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called by client engine to inform the client that a begin or + * resume has just occured. The render is informed the first time + * for the stream's time line after the resume. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnBegin(ULONG32 ulTime) throw () +{ + HXTimeval now; + + // Record the current time, so we can figure out many seconds we played + now = pScheduler->GetCurrentSchedulerTime(); + ulStartTime = now.tv_sec; + + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called by client engine to inform the client that buffering + * of data is occuring. The render is informed of the reason for + * the buffering (start-up of stream, seek has occured, network + * congestion, etc.), as well as percentage complete of the + * buffering process. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnBuffering(ULONG32 ulFlags, + UINT16 unPercentComplete) throw () +{ + return HXR_OK; +} + + +/*------------------------------------------------------------------------------ + * Called by client engine to inform the client is contacting + * hosts(s). + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AdviseSink::OnContacting(const char* pHostName) throw () +{ + return HXR_OK; +} + diff --git a/livesupport/modules/playlistExecutor/src/AdviseSink.h b/livesupport/modules/playlistExecutor/src/AdviseSink.h new file mode 100644 index 000000000..1ebc3cf1e --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/AdviseSink.h @@ -0,0 +1,273 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/AdviseSink.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef AdviseSink_h +#define AdviseSink_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include +#include +#include +#include +#include + + +namespace LiveSupport { +namespace PlaylistExecutor { + +using namespace LiveSupport; + + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * A Helix client advise sink, receiving notifications on the status + * of the client playing. + * + * @author $Author: maroy $ + * @version $Revision: 1.1 $ + */ +class AdviseSink : public IHXClientAdviseSink +{ + private: + /** + * The reference count for this object. + */ + LONG32 lRefCount; + + /** + * The pointer to the object this is an advise sink for. + */ + IUnknown * pUnknown; + + /** + * Pointer to the registry of pUnkown. + */ + IHXRegistry * pRegistry; + + /** + * Pointer to the scheduler of pUnkown. + */ + IHXScheduler * pScheduler; + + /** + * The time playing is started. + */ + UINT32 ulStartTime; + + /** + * The time playing os stopped. + */ + UINT32 ulStopTime; + + + public: + + /** + * Constructor + */ + AdviseSink(IUnknown * pUnknown) throw (); + + + /** + * Destructor. + */ + virtual + ~AdviseSink(void) throw (); + + // IUnknown methods + + /** + * Query the object to determine if it supports a specific interface. + * + * @param riid the reference identifier for the interface queried. + * @param ppvObj points to an interface pointer, that is filled + * if the requested interface is implemented. + */ + STDMETHOD(QueryInterface) (THIS_ + REFIID riid, + void** ppvObj) throw (); + + /** + * Increase the objects reference count by one. + * + * @return the new reference count. + */ + STDMETHOD_(ULONG32,AddRef) (THIS) throw (); + + /** + * Decreases the objects reference count by one. If the count + * reaches 0, the object is destroyed. + * + * @return the new value of the reference count. + */ + STDMETHOD_(ULONG32,Release) (THIS) throw (); + + // IHXClientAdviseSink methods + + /** + * Called to advise the client that the position or length of the + * current playback context has changed. + * + * @param ulPosition the new position of the playback. + * @param ulLength the new length of the playback. + */ + STDMETHOD(OnPosLength) (THIS_ + UINT32 ulPosition, + UINT32 ulLength) throw (); + + /** + * Called to advise the client a presentation has been opened. + */ + STDMETHOD(OnPresentationOpened) (THIS) throw (); + + /** + * Called to advise the client a presentation has been closed. + */ + STDMETHOD(OnPresentationClosed) (THIS) throw (); + + /** + * Called to advise the client that the presentation statistics + * have changed. + */ + STDMETHOD(OnStatisticsChanged) (THIS) throw (); + + /** + * Called by client engine to inform the client that a seek is + * about to occur. The render is informed the last time for the + * stream's time line before the seek, as well as the first new + * time for the stream's time line after the seek will be completed. + * + * @param ulOldTime the end of the stream's time line before the + * current seek. + * @param ulNewTime the beginning of the stream's time line after the + * current seek. + */ + STDMETHOD (OnPreSeek) (THIS_ + ULONG32 ulOldTime, + ULONG32 ulNewTime) throw (); + + /** + * Called by client engine to inform the client that a seek has + * just occured. The render is informed the last time for the + * stream's time line before the seek, as well as the first new + * time for the stream's time line after the seek. + * + * @param ulOldTime the end of the stream's time line before the + * current seek. + * @param ulNewTime the beginning of the stream's time line after the + * current seek. + */ + STDMETHOD (OnPostSeek) (THIS_ + ULONG32 ulOldTime, + ULONG32 ulNewTime) throw (); + + /** + * Called by client engine to inform the client that a stop has + * just occured. + */ + STDMETHOD (OnStop) (THIS) throw (); + + /** + * Called by client engine to inform the client that a pause has + * just occured. The render is informed the last time for the + * stream's time line before the pause. + * + * @param ulTime the time in the streams time line before being + * paused. + */ + STDMETHOD (OnPause) (THIS_ + ULONG32 ulTime) throw (); + + /** + * Called by client engine to inform the client that a begin or + * resume has just occured. The render is informed the first time + * for the stream's time line after the resume. + * + * The time in the streams time line from which to begin or resume. + */ + STDMETHOD (OnBegin) (THIS_ + ULONG32 ulTime) throw (); + + /** + * Called by client engine to inform the client that buffering + * of data is occuring. The render is informed of the reason for + * the buffering (start-up of stream, seek has occured, network + * congestion, etc.), as well as percentage complete of the + * buffering process. + * + * @param ulFlags the reason for the buffering, one of: + * BUFFERING_START_UP, BUFFERING_SEEK, BUFFERING_CONGESTION + * or BUFFERING_LIVE_PAUSE + * @param unPercentComplete the percentage of the buffering that has + * completed. + */ + STDMETHOD (OnBuffering) (THIS_ + ULONG32 ulFlags, + UINT16 unPercentComplete) throw (); + + + /** + * Called by client engine to inform the client is contacting + * hosts(s). + * + * @param pHostName the name of the host being contacted. + */ + STDMETHOD (OnContacting) (THIS_ + const char* pHostName) throw (); + +}; + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + +} // namespace PlaylistExecutor +} // namespace LiveSupport + +#endif // AdviseSink_h + diff --git a/livesupport/modules/playlistExecutor/src/AuthenticationManager.cxx b/livesupport/modules/playlistExecutor/src/AuthenticationManager.cxx new file mode 100644 index 000000000..c4c249b60 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/AuthenticationManager.cxx @@ -0,0 +1,134 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/AuthenticationManager.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include "HelixDefs.h" + +#include + +#include "AuthenticationManager.h" + +using namespace LiveSupport::PlaylistExecutor; + + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Construct the Authentication manager + *----------------------------------------------------------------------------*/ +AuthenticationManager::AuthenticationManager() throw () + : lRefCount(0) +{ +} + + +/*------------------------------------------------------------------------------ + * Destruct the Authentication manager + *----------------------------------------------------------------------------*/ +AuthenticationManager::~AuthenticationManager() throw () +{ +} + + +// IUnknown methods + +/*------------------------------------------------------------------------------ + * Implement this to export the interfaces supported by your + * object. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AuthenticationManager::QueryInterface(REFIID riid, + void ** ppvObj) throw () +{ + if (IsEqualIID(riid, IID_IUnknown)) { + AddRef(); + *ppvObj = (IUnknown*)(IHXAuthenticationManager*)this; + return HXR_OK; + } else if (IsEqualIID(riid, IID_IHXAuthenticationManager)) { + AddRef(); + *ppvObj = (IHXAuthenticationManager*)this; + return HXR_OK; + } + + *ppvObj = NULL; + return HXR_NOINTERFACE; +} + + +/*------------------------------------------------------------------------------ + * Increase the refence count. + *----------------------------------------------------------------------------*/ +STDMETHODIMP_(UINT32) +AuthenticationManager::AddRef() throw () +{ + return InterlockedIncrement(&lRefCount); +} + + +/*------------------------------------------------------------------------------ + * Decreaese the refence count. + *----------------------------------------------------------------------------*/ +STDMETHODIMP_(UINT32) +AuthenticationManager::Release() throw () +{ + if (InterlockedDecrement(&lRefCount) > 0) { + return lRefCount; + } + + delete this; + return 0; +} + + +/*------------------------------------------------------------------------------ + * Handle an authentication request. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +AuthenticationManager::HandleAuthenticationRequest( + IHXAuthenticationManagerResponse* pResponse) + throw () +{ + // pass on anything + return HXR_OK; +} + diff --git a/livesupport/modules/playlistExecutor/src/AuthenticationManager.h b/livesupport/modules/playlistExecutor/src/AuthenticationManager.h new file mode 100644 index 000000000..841f92c33 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/AuthenticationManager.h @@ -0,0 +1,140 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/AuthenticationManager.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef AuthenticationManager_h +#define AuthenticationManager_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include + + +namespace LiveSupport { +namespace PlaylistExecutor { + +using namespace LiveSupport; + + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * A Helix client authentication manager. + * + * @author $Author: maroy $ + * @version $Revision: 1.1 $ + */ +class AuthenticationManager : public IHXAuthenticationManager +{ + private: + /** + * The reference count of this object. + */ + INT32 lRefCount; + + + public: + /** + * Constructor. + */ + AuthenticationManager() throw (); + + /** + * Destructor. + */ + virtual + ~AuthenticationManager() throw (); + + // IUnknown methods + + /** + * Query the object to determine if it supports a specific interface. + * + * @param riid the reference identifier for the interface queried. + * @param ppvObj points to an interface pointer, that is filled + * if the requested interface is implemented. + */ + STDMETHOD(QueryInterface) (THIS_ + REFIID riid, + void** ppvObj) throw (); + + /** + * Increase the objects reference count by one. + * + * @return the new reference count. + */ + STDMETHOD_(ULONG32,AddRef) (THIS) throw (); + + /** + * Decreases the objects reference count by one. If the count + * reaches 0, the object is destroyed. + * + * @return the new value of the reference count. + */ + STDMETHOD_(ULONG32,Release) (THIS) throw (); + + + // IHXAuthenticationManager methods + + /** + * Get a user name and password, or other authentication parameters. + * + * @param pResponse Ponter to an IHXAuthenticationManagerResponse + * interface that manages the response. + */ + STDMETHOD(HandleAuthenticationRequest) + (IHXAuthenticationManagerResponse* pResponse) + throw (); +}; + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + +} // namespace PlaylistExecutor +} // namespace LiveSupport + +#endif // AuthenticationManager_h + diff --git a/livesupport/modules/playlistExecutor/src/ClientContext.cxx b/livesupport/modules/playlistExecutor/src/ClientContext.cxx new file mode 100644 index 000000000..4e70d6de6 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/ClientContext.cxx @@ -0,0 +1,243 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/ClientContext.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include "HelixDefs.h" + +#include +#include +#include + +#include "ErrorSink.h" +#include "AuthenticationManager.h" +#include "ClientContext.h" + +using namespace LiveSupport::PlaylistExecutor; + + + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Construct the Client Context + *----------------------------------------------------------------------------*/ +ClientContext::ClientContext() throw () + : lRefCount(0) + , pClientSink(NULL) + , pErrorSink(NULL) + , pAuthMgr(NULL) + , pDefaultPrefs(NULL) +{ +} + + +/*------------------------------------------------------------------------------ + * Destruct the Client Context + *----------------------------------------------------------------------------*/ +ClientContext::~ClientContext() throw () +{ + Close(); +}; + + +/*------------------------------------------------------------------------------ + * Initialize the Client Context + *----------------------------------------------------------------------------*/ +void +ClientContext::Init(IUnknown * pUnknown, + IHXPreferences * pPreferences, + char * pszGUID) throw () +{ + char* pszCipher = NULL; + + pClientSink = new AdviseSink(pUnknown); + pErrorSink = new ErrorSink(pUnknown); + pAuthMgr = new AuthenticationManager(); + + if (pClientSink) { + pClientSink->AddRef(); + } + + if (pErrorSink) { + pErrorSink->AddRef(); + } + + if(pAuthMgr) { + pAuthMgr->AddRef(); + } + + if (pPreferences) { + pDefaultPrefs = pPreferences; + pDefaultPrefs->AddRef(); + } + + if (pszGUID && *pszGUID) { + // Encode GUID + pszCipher = Cipher(pszGUID); + SafeStrCpy(this->pszGUID, pszCipher, 256); + } else { + this->pszGUID[0] = '\0'; + } +} + + +/*------------------------------------------------------------------------------ + * De-Initialize the Client Context + *----------------------------------------------------------------------------*/ +void ClientContext::Close() throw () +{ + HX_RELEASE(pClientSink); + HX_RELEASE(pErrorSink); + HX_RELEASE(pAuthMgr); + HX_RELEASE(pDefaultPrefs); +} + + +// IUnknown methods + +/*------------------------------------------------------------------------------ + * Implement this to export the interfaces supported by your + * object. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +ClientContext::QueryInterface(REFIID riid, + void ** ppvObj) throw () +{ + if (IsEqualIID(riid, IID_IUnknown)) { + AddRef(); + *ppvObj = this; + return HXR_OK; + } else if (IsEqualIID(riid, IID_IHXPreferences)) { + AddRef(); + *ppvObj = (IHXPreferences*)this; + return HXR_OK; + } else if (pClientSink && + pClientSink->QueryInterface(riid, ppvObj) == HXR_OK) { + pClientSink->AddRef(); + *ppvObj = pClientSink; + return HXR_OK; + } else if (pErrorSink && + pErrorSink->QueryInterface(riid, ppvObj) == HXR_OK) { + pErrorSink->AddRef(); + *ppvObj = pErrorSink; + return HXR_OK; + } else if (pAuthMgr && + pAuthMgr->QueryInterface(riid, ppvObj) == HXR_OK) { + pErrorSink->AddRef(); + *ppvObj = pAuthMgr; + return HXR_OK; + } + + *ppvObj = NULL; + return HXR_NOINTERFACE; +} + + +/*------------------------------------------------------------------------------ + * Increase the refence count. + *----------------------------------------------------------------------------*/ +STDMETHODIMP_(ULONG32) +ClientContext::AddRef() throw () +{ + return InterlockedIncrement(&lRefCount); +} + + +/*------------------------------------------------------------------------------ + * Decreaese the refence count. + *----------------------------------------------------------------------------*/ +STDMETHODIMP_(ULONG32) +ClientContext::Release() throw () +{ + if (InterlockedDecrement(&lRefCount) > 0) { + return lRefCount; + } + + delete this; + return 0; +} + + +// IHXPreferences methods + +/*------------------------------------------------------------------------------ + * Read a Preference from the registry. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +ClientContext::ReadPref(const char * pPrekKey, + IHXBuffer *& pBuffer) throw () +{ + HX_RESULT hResult = HXR_OK; + + if ((stricmp(pPrekKey, CLIENT_GUID_REGNAME) == 0) && (*pszGUID)) { + // Create a Buffer + pBuffer = new CHXBuffer(); + pBuffer->AddRef(); + + // Copy the encoded GUID into the pBuffer + pBuffer->Set((UCHAR*)pszGUID, strlen(pszGUID) + 1); + } else if (pDefaultPrefs) { + hResult = pDefaultPrefs->ReadPref(pPrekKey, pBuffer); + } else { + hResult = HXR_NOTIMPL; + } + + return hResult; +} + + +/*------------------------------------------------------------------------------ + * Write a Preference to the registry. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +ClientContext::WritePref(const char * pPrekKey, + IHXBuffer * pBuffer) throw () +{ + if (pDefaultPrefs) { + return pDefaultPrefs->WritePref(pPrekKey, pBuffer); + } else { + return HXR_OK; + } +} + + diff --git a/livesupport/modules/playlistExecutor/src/ClientContext.h b/livesupport/modules/playlistExecutor/src/ClientContext.h new file mode 100644 index 000000000..5209483c3 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/ClientContext.h @@ -0,0 +1,214 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/ClientContext.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef ClientContext_h +#define ClientContext_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include +#include + +#include "AdviseSink.h" + +namespace LiveSupport { +namespace PlaylistExecutor { + +using namespace LiveSupport; + + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +class ExampleErrorMessages; + +/** + * A Helix client context. + * + * @author $Author: maroy $ + * @version $Revision: 1.1 $ + */ +class ClientContext : public IHXPreferences +{ + private: + /** + * The reference count of this object. + */ + LONG32 lRefCount; + + /** + * The advise sink recieving event notifications. + */ + AdviseSink * pClientSink; + + /** + * The error sink, receiving error notifications. + */ + ErrorSink * pErrorSink; + + /** + * The authentication manager. + */ + AuthenticationManager * pAuthMgr; + + /** + * The preferences. + */ + IHXPreferences* pDefaultPrefs; + + /** + * The GUID for this context. + */ + char pszGUID[256]; /* Flawfinder: ignore */ + + + public: + + /** + * Constructor. + */ + ClientContext() throw (); + + /** + * Destructor. + */ + virtual + ~ClientContext() throw (); + + /** + * Initialize the client context. + * Always close a context by calling Close(). + * + * @param pUnknown pointer to the object this will be a context for. + * @param pPreferences pointer to the helix preferences used. + * @param pszGUID the globally unique ID, if any, for the context. + * @see #Close + */ + void + Init(IUnknown * pUnknown, + IHXPreferences * pPreferences, + char * pszGUID) throw (); + + /** + * De-Initialize the client context. + * + * @see #Init + */ + void Close() throw (); + + /** + * Return the ErrorSink object for this client context. + * + * @return the ErrorSink object for this client context. + */ + ErrorSink * + getErrorSink(void) const throw () + { + return pErrorSink; + } + + // IUnknown methods + + /** + * Query the object to determine if it supports a specific interface. + * + * @param riid the reference identifier for the interface queried. + * @param ppvObj points to an interface pointer, that is filled + * if the requested interface is implemented. + */ + STDMETHOD(QueryInterface) (THIS_ + REFIID riid, + void** ppvObj) throw (); + + /** + * Increase the objects reference count by one. + * + * @return the new reference count. + */ + STDMETHOD_(ULONG32,AddRef) (THIS) throw (); + + /** + * Decreases the objects reference count by one. If the count + * reaches 0, the object is destroyed. + * + * @return the new value of the reference count. + */ + STDMETHOD_(ULONG32,Release) (THIS) throw (); + + // IHXPreferences methods + + /** + * Reaad a preference from the registry or configuration file. + * + * @param pPrekKey pointer to the name of the preference. + * @param pBuffer return a pointer to an IHXBuffer interface + * that manages the value of the preference. + */ + STDMETHOD(ReadPref) (THIS_ + const char * pPrekKey, + IHXBuffer *& pBuffer) throw (); + + /** + * Writes a preference to the registry of configuration file. + * + * @param pPrekKey pointer to the name of the preference. + * @param pBuffer return a pointer to an IHXBuffer interface + * that manages the value of the preference. + */ + STDMETHOD(WritePref) (THIS_ + const char * pPrekKey, + IHXBuffer * pBuffer) throw (); + +}; + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + +} // namespace PlaylistExecutor +} // namespace LiveSupport + +#endif // ClientContext_h + diff --git a/livesupport/modules/playlistExecutor/src/ErrorSink.cxx b/livesupport/modules/playlistExecutor/src/ErrorSink.cxx new file mode 100644 index 000000000..a9c852712 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/ErrorSink.cxx @@ -0,0 +1,150 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/ErrorSink.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include "HelixDefs.h" + +#include + +#include "ErrorSink.h" + +using namespace LiveSupport::PlaylistExecutor; + + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Construct the Error Sink + *----------------------------------------------------------------------------*/ +ErrorSink::ErrorSink(IUnknown* pUnknown) throw () + : lRefCount(0), + pPlayer(NULL), + lastHelixErrorCode(0) +{ + IHXClientEngine* pEngine = NULL; + pUnknown->QueryInterface(IID_IHXClientEngine, (void**)&pEngine ); + if( pEngine ) { + IUnknown* pTmp = NULL; + pEngine->GetPlayer(0, pTmp); + pPlayer = (IHXPlayer*)pTmp; + } + + HX_RELEASE( pEngine ); +// HX_ASSERT(pPlayer); +} + + +/*------------------------------------------------------------------------------ + * Destruct the Error Sink + *----------------------------------------------------------------------------*/ +ErrorSink::~ErrorSink() throw () +{ + HX_RELEASE(pPlayer); +} + +// IUnknown methods + +/*------------------------------------------------------------------------------ + * Implement this to export the interfaces supported by your + * object. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +ErrorSink::QueryInterface(REFIID riid, + void ** ppvObj) throw () +{ + if (IsEqualIID(riid, IID_IUnknown)) { + AddRef(); + *ppvObj = (IUnknown*)(IHXErrorSink*)this; + return HXR_OK; + } else if (IsEqualIID(riid, IID_IHXErrorSink)) { + AddRef(); + *ppvObj = (IHXErrorSink*) this; + return HXR_OK; + } + + *ppvObj = NULL; + return HXR_NOINTERFACE; +} + + +/*------------------------------------------------------------------------------ + * Increase the refence count. + *----------------------------------------------------------------------------*/ +STDMETHODIMP_(ULONG32) +ErrorSink::AddRef() throw () +{ + return InterlockedIncrement(&lRefCount); +} + + +/*------------------------------------------------------------------------------ + * Decreaese the refence count. + *----------------------------------------------------------------------------*/ +STDMETHODIMP_(ULONG32) +ErrorSink::Release() throw () +{ + if (InterlockedDecrement(&lRefCount) > 0) { + return lRefCount; + } + + delete this; + return 0; +} + +// IHXErrorSink methods + +/*------------------------------------------------------------------------------ + * Handle an error event. + *----------------------------------------------------------------------------*/ +STDMETHODIMP +ErrorSink::ErrorOccurred(const UINT8 unSeverity, + const ULONG32 ulHXCode, + const ULONG32 ulUserCode, + const char * pUserString, + const char * pMoreInfoURL) throw () +{ + lastHelixErrorCode = ulHXCode; + + return HXR_OK; +} + diff --git a/livesupport/modules/playlistExecutor/src/ErrorSink.h b/livesupport/modules/playlistExecutor/src/ErrorSink.h new file mode 100644 index 000000000..7db3d7442 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/ErrorSink.h @@ -0,0 +1,176 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/ErrorSink.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef ErrorSink_h +#define ErrorSink_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include +#include + + +namespace LiveSupport { +namespace PlaylistExecutor { + +using namespace LiveSupport; + + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * A Helix error sink + * + * @author $Author: maroy $ + * @version $Revision: 1.1 $ + */ +class ErrorSink : public IHXErrorSink +{ + protected: + /** + * The reference count of this object. + */ + LONG32 lRefCount; + + /** + * The player this sink gets errors from. + */ + IHXPlayer * pPlayer; + + /** + * The last Helix error code receieved. + */ + UINT32 lastHelixErrorCode; + + + public: + + /** + * Constructor. + * + * @param pUnkown pointer to the object this is an erro sink for. + */ + ErrorSink(IUnknown* pUnknown) throw (); + + /** + * Destructor. + */ + virtual + ~ErrorSink() throw (); + + // IUnknown methods + + /** + * Query the object to determine if it supports a specific interface. + * + * @param riid the reference identifier for the interface queried. + * @param ppvObj points to an interface pointer, that is filled + * if the requested interface is implemented. + */ + STDMETHOD(QueryInterface) (THIS_ + REFIID riid, + void** ppvObj) throw (); + + /** + * Increase the objects reference count by one. + * + * @return the new reference count. + */ + STDMETHOD_(ULONG32,AddRef) (THIS) throw (); + + /** + * Decreases the objects reference count by one. If the count + * reaches 0, the object is destroyed. + * + * @return the new value of the reference count. + */ + STDMETHOD_(ULONG32,Release) (THIS) throw (); + + + // IHXErrorSink methods + + /** + * After you have registered your error sink with an + * IHXErrorSinkControl + * (either in the server or player core) this method will be called to + * report an error, event, or status message. + * + * @param unSeverity the type of report. + * @param ulHXCode Helix Architecture error code. + * @param ulUserCode User-specific error code. + * @param pUserString User-specific error string. + * @param pMoreInfoURL pointer to a user-specific URL for more info. + */ + STDMETHOD(ErrorOccurred) (THIS_ + const UINT8 unSeverity, + const ULONG32 ulHXCode, + const ULONG32 ulUserCode, + const char * pUserString, + const char * pMoreInfoURL) + throw (); + + /** + * Get the Helix error code for the last error occured. + * + * @return the Helix error code for the last error occured. + */ + ULONG32 + getLastErrorCode(void) const throw () + { + return lastHelixErrorCode; + } + +}; + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + +} // namespace PlaylistExecutor +} // namespace LiveSupport + +#endif // ErrorSink_h + diff --git a/livesupport/modules/playlistExecutor/src/HelixDefs.h b/livesupport/modules/playlistExecutor/src/HelixDefs.h new file mode 100644 index 000000000..5c28b4af8 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/HelixDefs.h @@ -0,0 +1,524 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/HelixDefs.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef HelixDefs_h +#define HelixDefs_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + +/*------------------------------------------------------------------------------ + * This is a list of defines used by the Helix Library. + * Some of these are Linux-specific, watch out when porting to other + * platforms. + *----------------------------------------------------------------------------*/ +#ifndef HELIX_CONFIG_MS_PSDK +#define HELIX_CONFIG_MS_PSDK 1 +#endif +#ifndef HELIX_FEATURE_3GPP +#define HELIX_FEATURE_3GPP 1 +#endif +#ifndef HELIX_FEATURE_ADVANCEDGROUPMGR +#define HELIX_FEATURE_ADVANCEDGROUPMGR 1 +#endif +#ifndef HELIX_FEATURE_ALT_URL +#define HELIX_FEATURE_ALT_URL 1 +#endif +#ifndef HELIX_FEATURE_ASM +#define HELIX_FEATURE_ASM 1 +#endif +#ifndef HELIX_FEATURE_AUDIO +#define HELIX_FEATURE_AUDIO 1 +#endif +#ifndef HELIX_FEATURE_AUDIOHOOK +#define HELIX_FEATURE_AUDIOHOOK 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_AIFF +#define HELIX_FEATURE_AUDIO_AIFF 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_AU +#define HELIX_FEATURE_AUDIO_AU 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_28_8 +#define HELIX_FEATURE_AUDIO_CODEC_28_8 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_AMRNB +#define HELIX_FEATURE_AUDIO_CODEC_AMRNB 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_AMRWB +#define HELIX_FEATURE_AUDIO_CODEC_AMRWB 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_GECKO +#define HELIX_FEATURE_AUDIO_CODEC_GECKO 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_INTERLEAVE_ALL +#define HELIX_FEATURE_AUDIO_CODEC_INTERLEAVE_ALL 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_O5_6 +#define HELIX_FEATURE_AUDIO_CODEC_O5_6 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_QCELP +#define HELIX_FEATURE_AUDIO_CODEC_QCELP 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_RAAC +#define HELIX_FEATURE_AUDIO_CODEC_RAAC 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_SIPRO +#define HELIX_FEATURE_AUDIO_CODEC_SIPRO 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_CODEC_TOKYO +#define HELIX_FEATURE_AUDIO_CODEC_TOKYO 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_INACCURATESAMPLING +#define HELIX_FEATURE_AUDIO_INACCURATESAMPLING 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_INCOMPLETESAMPLE +#define HELIX_FEATURE_AUDIO_INCOMPLETESAMPLE 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_MPA_LAYER1 +#define HELIX_FEATURE_AUDIO_MPA_LAYER1 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_MPA_LAYER2 +#define HELIX_FEATURE_AUDIO_MPA_LAYER2 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_MPA_LAYER3 +#define HELIX_FEATURE_AUDIO_MPA_LAYER3 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_MPEG4 +#define HELIX_FEATURE_AUDIO_MPEG4 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_MULTIPLAYER_PAUSE +#define HELIX_FEATURE_AUDIO_MULTIPLAYER_PAUSE 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_POSTMIXHOOK +#define HELIX_FEATURE_AUDIO_POSTMIXHOOK 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_PREMIXHOOK +#define HELIX_FEATURE_AUDIO_PREMIXHOOK 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_RALF +#define HELIX_FEATURE_AUDIO_RALF 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_REAL +#define HELIX_FEATURE_AUDIO_REAL 1 +#endif +#ifndef HELIX_FEATURE_AUDIO_WAVE +#define HELIX_FEATURE_AUDIO_WAVE 1 +#endif +#ifndef HELIX_FEATURE_AUTHENTICATION +#define HELIX_FEATURE_AUTHENTICATION 1 +#endif +#ifndef HELIX_FEATURE_AUTOUPGRADE +#define HELIX_FEATURE_AUTOUPGRADE 1 +#endif +#ifndef HELIX_FEATURE_BASICGROUPMGR +#define HELIX_FEATURE_BASICGROUPMGR 1 +#endif +#ifndef HELIX_FEATURE_CHUNKRES +#define HELIX_FEATURE_CHUNKRES 1 +#endif +#ifndef HELIX_FEATURE_CLIENT +#define HELIX_FEATURE_CLIENT 1 +#endif +#ifndef HELIX_FEATURE_COOKIES +#define HELIX_FEATURE_COOKIES 1 +#endif +#ifndef HELIX_FEATURE_CORECOMM +#define HELIX_FEATURE_CORECOMM 1 +#endif +#ifndef HELIX_FEATURE_CROSSFADE +#define HELIX_FEATURE_CROSSFADE 1 +#endif +#ifndef HELIX_FEATURE_DBG_LOG +#define HELIX_FEATURE_DBG_LOG 1 +#endif +#ifndef HELIX_FEATURE_DIRECT_SOUND +#define HELIX_FEATURE_DIRECT_SOUND 1 +#endif +#ifndef HELIX_FEATURE_DRM +#define HELIX_FEATURE_DRM 1 +#endif +#ifndef HELIX_FEATURE_DTDR_AUDIO_DECODER +#define HELIX_FEATURE_DTDR_AUDIO_DECODER 1 +#endif +#ifndef HELIX_FEATURE_DTDR_DECRYPTER +#define HELIX_FEATURE_DTDR_DECRYPTER 1 +#endif +#ifndef HELIX_FEATURE_DTDR_ENCODER +#define HELIX_FEATURE_DTDR_ENCODER 1 +#endif +#ifndef HELIX_FEATURE_DTDR_MIXER +#define HELIX_FEATURE_DTDR_MIXER 1 +#endif +#ifndef HELIX_FEATURE_EVENTMANAGER +#define HELIX_FEATURE_EVENTMANAGER 1 +#endif +#ifndef HELIX_FEATURE_FIFOCACHE +#define HELIX_FEATURE_FIFOCACHE 1 +#endif +#ifndef HELIX_FEATURE_FILESYSTEMMGR +#define HELIX_FEATURE_FILESYSTEMMGR 1 +#endif +#ifndef HELIX_FEATURE_FRAGMENTBUFFER +#define HELIX_FEATURE_FRAGMENTBUFFER 1 +#endif +#ifndef HELIX_FEATURE_FULLGUID +#define HELIX_FEATURE_FULLGUID 1 +#endif +#ifndef HELIX_FEATURE_GAINTOOL +#define HELIX_FEATURE_GAINTOOL 1 +#endif +#ifndef HELIX_FEATURE_GIF_BROKENIMAGE +#define HELIX_FEATURE_GIF_BROKENIMAGE 1 +#endif +#ifndef HELIX_FEATURE_GROUPMGR +#define HELIX_FEATURE_GROUPMGR 1 +#endif +#ifndef HELIX_FEATURE_HTTPCLOAK +#define HELIX_FEATURE_HTTPCLOAK 1 +#endif +#ifndef HELIX_FEATURE_HTTP_GZIP +#define HELIX_FEATURE_HTTP_GZIP 1 +#endif +#ifndef HELIX_FEATURE_HYPER_NAVIGATE +#define HELIX_FEATURE_HYPER_NAVIGATE 1 +#endif +#ifndef HELIX_FEATURE_IGNORE_SIGPIPE +#define HELIX_FEATURE_IGNORE_SIGPIPE 1 +#endif +#ifndef HELIX_FEATURE_ISMA +#define HELIX_FEATURE_ISMA 1 +#endif +#ifndef HELIX_FEATURE_LIMITER +#define HELIX_FEATURE_LIMITER 1 +#endif +#ifndef HELIX_FEATURE_MASTERTAC +#define HELIX_FEATURE_MASTERTAC 1 +#endif +#ifndef HELIX_FEATURE_MEDIAMARKER +#define HELIX_FEATURE_MEDIAMARKER 1 +#endif +#ifndef HELIX_FEATURE_MEMMAP_IO +#define HELIX_FEATURE_MEMMAP_IO 1 +#endif +#ifndef HELIX_FEATURE_META +#define HELIX_FEATURE_META 1 +#endif +#ifndef HELIX_FEATURE_MIXER +#define HELIX_FEATURE_MIXER 1 +#endif +#ifndef HELIX_FEATURE_MP3FF_LENIENT +#define HELIX_FEATURE_MP3FF_LENIENT 1 +#endif +#ifndef HELIX_FEATURE_MP3FF_ONDEMANDMETAINFO +#define HELIX_FEATURE_MP3FF_ONDEMANDMETAINFO 1 +#endif +#ifndef HELIX_FEATURE_MP3FF_SHOUTCAST +#define HELIX_FEATURE_MP3FF_SHOUTCAST 1 +#endif +#ifndef HELIX_FEATURE_MP4_FILEFORMAT_ALTERNATES +#define HELIX_FEATURE_MP4_FILEFORMAT_ALTERNATES 1 +#endif +#ifndef HELIX_FEATURE_NESTEDMETA +#define HELIX_FEATURE_NESTEDMETA 1 +#endif +#ifndef HELIX_FEATURE_NETCHECK +#define HELIX_FEATURE_NETCHECK 1 +#endif +#ifndef HELIX_FEATURE_NETINTERFACES +#define HELIX_FEATURE_NETINTERFACES 1 +#endif +#ifndef HELIX_FEATURE_NETSERVICES_SHIM +#define HELIX_FEATURE_NETSERVICES_SHIM 1 +#endif +#ifndef HELIX_FEATURE_NEXTGROUPMGR +#define HELIX_FEATURE_NEXTGROUPMGR 1 +#endif +#ifndef HELIX_FEATURE_OPTIMIZED_SCHEDULER +#define HELIX_FEATURE_OPTIMIZED_SCHEDULER 1 +#endif +#ifndef HELIX_FEATURE_OVERLAYMGR +#define HELIX_FEATURE_OVERLAYMGR 1 +#endif +#ifndef HELIX_FEATURE_PAC +#define HELIX_FEATURE_PAC 1 +#endif +#ifndef HELIX_FEATURE_PACKETHOOKMGR +#define HELIX_FEATURE_PACKETHOOKMGR 1 +#endif +#ifndef HELIX_FEATURE_PLAYBACK_LOCAL +#define HELIX_FEATURE_PLAYBACK_LOCAL 1 +#endif +#ifndef HELIX_FEATURE_PLAYBACK_NET +#define HELIX_FEATURE_PLAYBACK_NET 1 +#endif +#ifndef HELIX_FEATURE_PLAYERNAVIGATOR +#define HELIX_FEATURE_PLAYERNAVIGATOR 1 +#endif +#ifndef HELIX_FEATURE_PLUGINHANDLER2 +#define HELIX_FEATURE_PLUGINHANDLER2 1 +#endif +#ifndef HELIX_FEATURE_PNA +#define HELIX_FEATURE_PNA 1 +#endif +#ifndef HELIX_FEATURE_PREFERENCES +#define HELIX_FEATURE_PREFERENCES 1 +#endif +#ifndef HELIX_FEATURE_PREFETCH +#define HELIX_FEATURE_PREFETCH 1 +#endif +#ifndef HELIX_FEATURE_PROGDOWN +#define HELIX_FEATURE_PROGDOWN 1 +#endif +#ifndef HELIX_FEATURE_PROXYMGR +#define HELIX_FEATURE_PROXYMGR 1 +#endif +#ifndef HELIX_FEATURE_RAREND_ADV_PACKET_FEEDER +#define HELIX_FEATURE_RAREND_ADV_PACKET_FEEDER 1 +#endif +#ifndef HELIX_FEATURE_RAREND_BANDWIDTH_LISTER +#define HELIX_FEATURE_RAREND_BANDWIDTH_LISTER 1 +#endif +#ifndef HELIX_FEATURE_RAREND_PREREDSTONE_SUPPORT +#define HELIX_FEATURE_RAREND_PREREDSTONE_SUPPORT 1 +#endif +#ifndef HELIX_FEATURE_RAREND_SURESTREAM +#define HELIX_FEATURE_RAREND_SURESTREAM 1 +#endif +#ifndef HELIX_FEATURE_RDT +#define HELIX_FEATURE_RDT 1 +#endif +#ifndef HELIX_FEATURE_RECORDCONTROL +#define HELIX_FEATURE_RECORDCONTROL 1 +#endif +#ifndef HELIX_FEATURE_REGISTRY +#define HELIX_FEATURE_REGISTRY 1 +#endif +#ifndef HELIX_FEATURE_RESAMPLER +#define HELIX_FEATURE_RESAMPLER 1 +#endif +#ifndef HELIX_FEATURE_RESOURCEMGR +#define HELIX_FEATURE_RESOURCEMGR 1 +#endif +#ifndef HELIX_FEATURE_REVERTER +#define HELIX_FEATURE_REVERTER 1 +#endif +#ifndef HELIX_FEATURE_RMFF_BANDWIDTH_NEGOTIATOR +#define HELIX_FEATURE_RMFF_BANDWIDTH_NEGOTIATOR 1 +#endif +#ifndef HELIX_FEATURE_RMFF_DYNAMICASM +#define HELIX_FEATURE_RMFF_DYNAMICASM 1 +#endif +#ifndef HELIX_FEATURE_RMFF_INDEXTABLE +#define HELIX_FEATURE_RMFF_INDEXTABLE 1 +#endif +#ifndef HELIX_FEATURE_RMFF_LEGACYAUDIO +#define HELIX_FEATURE_RMFF_LEGACYAUDIO 1 +#endif +#ifndef HELIX_FEATURE_RMFF_LICENSING +#define HELIX_FEATURE_RMFF_LICENSING 1 +#endif +#ifndef HELIX_FEATURE_RMFF_LIVEINFO +#define HELIX_FEATURE_RMFF_LIVEINFO 1 +#endif +#ifndef HELIX_FEATURE_RMFF_MULTIRATE +#define HELIX_FEATURE_RMFF_MULTIRATE 1 +#endif +#ifndef HELIX_FEATURE_RMFF_ONDEMANDMETAINFO +#define HELIX_FEATURE_RMFF_ONDEMANDMETAINFO 1 +#endif +#ifndef HELIX_FEATURE_RMFF_TIMEOFFSET_FIXUP +#define HELIX_FEATURE_RMFF_TIMEOFFSET_FIXUP 1 +#endif +#ifndef HELIX_FEATURE_RMFF_TIMEOFFSET_HANDLER +#define HELIX_FEATURE_RMFF_TIMEOFFSET_HANDLER 1 +#endif +#ifndef HELIX_FEATURE_RMFF_VIEWSOURCE +#define HELIX_FEATURE_RMFF_VIEWSOURCE 1 +#endif +#ifndef HELIX_FEATURE_RTP +#define HELIX_FEATURE_RTP 1 +#endif +#ifndef HELIX_FEATURE_SECURECONN +#define HELIX_FEATURE_SECURECONN 1 +#endif +#ifndef HELIX_FEATURE_SETSRCPROPS +#define HELIX_FEATURE_SETSRCPROPS 1 +#endif +#ifndef HELIX_FEATURE_SINKCONTROL +#define HELIX_FEATURE_SINKCONTROL 1 +#endif +#ifndef HELIX_FEATURE_SMARTERNETWORK +#define HELIX_FEATURE_SMARTERNETWORK 1 +#endif +#ifndef HELIX_FEATURE_SMIL1 +#define HELIX_FEATURE_SMIL1 1 +#endif +#ifndef HELIX_FEATURE_SMIL2 +#define HELIX_FEATURE_SMIL2 1 +#endif +#ifndef HELIX_FEATURE_SMIL2_ANIMATION +#define HELIX_FEATURE_SMIL2_ANIMATION 1 +#endif +#ifndef HELIX_FEATURE_SMIL2_BRUSH +#define HELIX_FEATURE_SMIL2_BRUSH 1 +#endif +#ifndef HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT +#define HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT 1 +#endif +#ifndef HELIX_FEATURE_SMIL2_TRANSITIONS +#define HELIX_FEATURE_SMIL2_TRANSITIONS 1 +#endif +#ifndef HELIX_FEATURE_SMIL2_VALIDATION +#define HELIX_FEATURE_SMIL2_VALIDATION 1 +#endif +#ifndef HELIX_FEATURE_SMIL_REPEAT +#define HELIX_FEATURE_SMIL_REPEAT 1 +#endif +#ifndef HELIX_FEATURE_SMIL_SITE +#define HELIX_FEATURE_SMIL_SITE 1 +#endif +#ifndef HELIX_FEATURE_SMIL_SOUNDLEVEL +#define HELIX_FEATURE_SMIL_SOUNDLEVEL 1 +#endif +#ifndef HELIX_FEATURE_STATS +#define HELIX_FEATURE_STATS 1 +#endif +#ifndef HELIX_FEATURE_SYSTEMREQUIRED +#define HELIX_FEATURE_SYSTEMREQUIRED 1 +#endif +#ifndef HELIX_FEATURE_THREADSAFE_MEMMAP_IO +#define HELIX_FEATURE_THREADSAFE_MEMMAP_IO 1 +#endif +#ifndef HELIX_FEATURE_TIMEDTEXT +#define HELIX_FEATURE_TIMEDTEXT 1 +#endif +#ifndef HELIX_FEATURE_TRANSPORT_MULTICAST +#define HELIX_FEATURE_TRANSPORT_MULTICAST 1 +#endif +#ifndef HELIX_FEATURE_TURBOPLAY +#define HELIX_FEATURE_TURBOPLAY 1 +#endif +#ifndef HELIX_FEATURE_VIDEO +#define HELIX_FEATURE_VIDEO 1 +#endif +#ifndef HELIX_FEATURE_VIDEO_CODEC_RV10 +#define HELIX_FEATURE_VIDEO_CODEC_RV10 1 +#endif +#ifndef HELIX_FEATURE_VIDEO_CODEC_RV20 +#define HELIX_FEATURE_VIDEO_CODEC_RV20 1 +#endif +#ifndef HELIX_FEATURE_VIDEO_CODEC_RV30 +#define HELIX_FEATURE_VIDEO_CODEC_RV30 1 +#endif +#ifndef HELIX_FEATURE_VIDEO_CODEC_RV40 +#define HELIX_FEATURE_VIDEO_CODEC_RV40 1 +#endif +#ifndef HELIX_FEATURE_VIDEO_H263 +#define HELIX_FEATURE_VIDEO_H263 1 +#endif +#ifndef HELIX_FEATURE_VIDEO_MPEG4 +#define HELIX_FEATURE_VIDEO_MPEG4 1 +#endif +#ifndef HELIX_FEATURE_VIDEO_REAL +#define HELIX_FEATURE_VIDEO_REAL 1 +#endif +#ifndef HELIX_FEATURE_VIDREND_OPTIMIZEDVIDEO +#define HELIX_FEATURE_VIDREND_OPTIMIZEDVIDEO 1 +#endif +#ifndef HELIX_FEATURE_VIDREND_SYNCSMOOTHING +#define HELIX_FEATURE_VIDREND_SYNCSMOOTHING 1 +#endif +#ifndef HELIX_FEATURE_VIEWPORT +#define HELIX_FEATURE_VIEWPORT 1 +#endif +#ifndef HELIX_FEATURE_VIEWSOURCE +#define HELIX_FEATURE_VIEWSOURCE 1 +#endif +#ifndef HELIX_FEATURE_VOLUME +#define HELIX_FEATURE_VOLUME 1 +#endif +#ifndef HELIX_FEATURE_XMLPARSER +#define HELIX_FEATURE_XMLPARSER 1 +#endif +#ifndef THREADS_SUPPORTED +#define THREADS_SUPPORTED 1 +#endif +#ifndef USE_XWINDOWS +#define USE_XWINDOWS 1 +#endif +#ifndef _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif +#ifndef _LINUX +#define _LINUX 1 +#endif +#ifndef _LITTLE_ENDIAN +#define _LITTLE_ENDIAN 1 +#endif +#ifndef _RED_HAT_5_X_ +#define _RED_HAT_5_X_ 1 +#endif +#ifndef _REENTRANT +#define _REENTRANT 1 +#endif +#ifndef _TIMEDWAITS_RECURSIVE_MUTEXES +#define _TIMEDWAITS_RECURSIVE_MUTEXES 1 +#endif +#ifndef _UNIX +#define _UNIX 1 +#endif +#ifndef _UNIX_THREADED_NETWORK_IO +#define _UNIX_THREADED_NETWORK_IO 1 +#endif +#ifndef _UNIX_THREADS_SUPPORTED +#define _UNIX_THREADS_SUPPORTED 1 +#endif + + +/* =============================================================== data types */ + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + +#endif // HelixDefs_h + diff --git a/livesupport/modules/playlistExecutor/src/HelixIIDs.cxx b/livesupport/modules/playlistExecutor/src/HelixIIDs.cxx new file mode 100644 index 000000000..d4d2b9085 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/HelixIIDs.cxx @@ -0,0 +1,57 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/HelixIIDs.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +// this is just a file that by including the ones below defines some IIDs +// needed by the Helix library. + +#include "HelixDefs.h" + + +#define INITGUID +#define NCIHACK +#include +#include +#include +#include + + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + + diff --git a/livesupport/modules/playlistExecutor/src/HelixPlayer.cxx b/livesupport/modules/playlistExecutor/src/HelixPlayer.cxx new file mode 100644 index 000000000..05c2c3513 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/HelixPlayer.cxx @@ -0,0 +1,308 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/HelixPlayer.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include "HelixDefs.h" + +#include "HelixPlayer.h" + + +using namespace LiveSupport::Core; +using namespace LiveSupport::PlaylistExecutor; + +/* =================================================== local data structures */ + +/** + * Function pointer type for the SetDLLAccessPath function. + */ +typedef HX_RESULT (HXEXPORT_PTR FPRMSETDLLACCESSPATH) (const char*); + + +/* ================================================ local constants & macros */ + +/** + * The shared object access path. + */ +static DLLAccessPath accessPath; + + +/*------------------------------------------------------------------------------ + * The name of the config element for this class + *----------------------------------------------------------------------------*/ +const std::string HelixPlayer::configElementNameStr = "helixPlayer"; + + +/** + * The name of the attribute to get shared object path. + */ +static const std::string dllPathName = "dllPath"; + +/** + * The name of the client core shared object, as found under dllPath + */ +static const std::string clntcoreName = "/clntcore.so"; + + +/* =============================================== local function prototypes */ + +/*------------------------------------------------------------------------------ + * The main thread function for handling Helix events. + *----------------------------------------------------------------------------*/ +void * +LiveSupport::PlaylistExecutor::eventHandlerThread(void * helixPlayer) + throw () +{ + HelixPlayer * hPlayer = (HelixPlayer *) helixPlayer; + + while (hPlayer->handleEvents) { + struct _HXxEvent * event = 0; + hPlayer->clientEngine->EventOccurred(event); + usleep(10000); + } + + pthread_exit(0); +} + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Configure the Helix Player. + *----------------------------------------------------------------------------*/ +void +HelixPlayer :: configure(const xmlpp::Element & element) + throw (std::invalid_argument, + std::logic_error) +{ + if (element.get_name() != configElementNameStr) { + std::string eMsg = "Bad configuration element "; + eMsg += element.get_name(); + throw std::invalid_argument(eMsg); + } + + const xmlpp::Attribute * attribute; + + if (!(attribute = element.get_attribute(dllPathName))) { + std::string eMsg = "Missing attribute "; + eMsg += dllPathName; + throw std::invalid_argument(eMsg); + } + dllPath = attribute->get_value(); +} + + +/*------------------------------------------------------------------------------ + * Initialize the Helix Player + *----------------------------------------------------------------------------*/ +void +HelixPlayer :: initialize(void) throw (std::exception) +{ + // open the Helix Client Core shared object + std::string staticLibPath(dllPath); + staticLibPath += clntcoreName; + if (DLLAccess::DLL_OK != dllAccess.open(staticLibPath.c_str())) { + throw std::exception(); + } + + // get the main entry function pointers + FPRMSETDLLACCESSPATH setDLLAccessPath; + + createEngine = (FPRMCREATEENGINE) dllAccess.getSymbol("CreateEngine"); + closeEngine = (FPRMCLOSEENGINE) dllAccess.getSymbol("CloseEngine"); + setDLLAccessPath = + (FPRMSETDLLACCESSPATH) dllAccess.getSymbol("SetDLLAccessPath"); + + if (!createEngine || !closeEngine || !setDLLAccessPath) { + throw std::exception(); + } + + // set the DLL access path + std::string str = ""; + str += "DT_Common="; + str += dllPath; + str += '\0'; + str += "DT_Plugins="; + str += dllPath; + str += '\0'; + str += "DT_Codecs="; + str += dllPath; + + setDLLAccessPath(str.c_str()); + + // create the client engine and the player + if (HXR_OK != createEngine(&clientEngine)) { + throw std::exception(); + } + + if (HXR_OK != clientEngine->CreatePlayer(player)) { + throw std::exception(); + } + + // create and attach the client context + clientContext = new ClientContext(); + clientContext->AddRef(); + + IHXPreferences * preferences = 0; + player->QueryInterface(IID_IHXPreferences, (void**) &preferences); + clientContext->Init(player, preferences, ""); + player->SetClientContext(clientContext); + HX_RELEASE(preferences); + + // create and attach the error sink + IHXErrorSinkControl * errorSinkControl; + player->QueryInterface(IID_IHXErrorSinkControl, + (void**) &errorSinkControl); + if (errorSinkControl) { + IHXErrorSink * errorSink; + clientContext->QueryInterface(IID_IHXErrorSink, (void**) &errorSink); + if (errorSink) { + errorSinkControl->AddErrorSink(errorSink, + HXLOG_EMERG, + HXLOG_DEBUG); + HX_RELEASE(errorSink); + } + HX_RELEASE(errorSinkControl); + } + + // start the event handling thread + handleEvents = true; + int ret; + if ((ret = pthread_create(&eventHandlingThread, + NULL, + eventHandlerThread, + (void *) this))) { + // TODO: signal return code + throw std::exception(); + } + + // set up other variables + playing = false; +} + + +/*------------------------------------------------------------------------------ + * De-initialize the Helix Player + *----------------------------------------------------------------------------*/ +void +HelixPlayer :: deInitialize(void) +{ + // signal stop to and wait for the event handling thread to stop + handleEvents = false; + pthread_join(eventHandlingThread, 0); + + // release Helix resources + clientContext->Release(); + + clientEngine->ClosePlayer(player); + player->Release(); + + closeEngine(clientEngine); + + dllAccess.close(); +} + + +/*------------------------------------------------------------------------------ + * Specify which file to play + *----------------------------------------------------------------------------*/ +void +HelixPlayer :: playThis(const std::string fileUrl) + throw (std::invalid_argument) +{ + // the only way to check if this is a valid URL is to see if the + // source count increases for the player. + UINT16 sourceCount = player->GetSourceCount(); + if (HXR_OK != player->OpenURL(fileUrl.c_str())) { + throw std::invalid_argument("can't open URL"); + } + if (sourceCount == player->GetSourceCount()) { + throw std::invalid_argument("can't open URL"); + } +} + + +/*------------------------------------------------------------------------------ + * Start playing + *----------------------------------------------------------------------------*/ +void +HelixPlayer :: start(void) throw (std::logic_error) +{ + if (player->GetSourceCount() == 0) { + throw std::logic_error("HelixPlayer::playThis() not called yet"); + } + player->Begin(); + playing = true; +} + + +/*------------------------------------------------------------------------------ + * Tell if we're playing + *----------------------------------------------------------------------------*/ +bool +HelixPlayer :: isPlaying(void) throw () +{ + if (playing) { + playing = !player->IsDone(); + } + + return playing; +} + + +/*------------------------------------------------------------------------------ + * Stop playing + *----------------------------------------------------------------------------*/ +void +HelixPlayer :: stop(void) throw (std::logic_error) +{ + if (!isPlaying()) { + throw std::logic_error("HelixPlayer is not yet playing, can't stop it"); + } + player->Stop(); + + playing = false; + // TODO: gather error info from the ErrorSink +} + + +/*------------------------------------------------------------------------------ + * A global function needed by the Helix library, this will return the + * access path to shared objects. + *----------------------------------------------------------------------------*/ +DLLAccessPath* GetDLLAccessPath(void) +{ + return &accessPath; +} + + diff --git a/livesupport/modules/playlistExecutor/src/HelixPlayer.h b/livesupport/modules/playlistExecutor/src/HelixPlayer.h new file mode 100644 index 000000000..df4330b32 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/HelixPlayer.h @@ -0,0 +1,278 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/HelixPlayer.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef HelixPlayer_h +#define HelixPlayer_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + + +#include + +#include +#include + +#include "LiveSupport/Core/Configurable.h" + +#include "AdviseSink.h" +#include "ErrorSink.h" +#include "AuthenticationManager.h" +#include "ClientContext.h" + + +namespace LiveSupport { +namespace PlaylistExecutor { + +using namespace LiveSupport; +using namespace LiveSupport::Core; + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * A class to play audio files and SMIL files through the Helix + * Community Library. + * + * @author $Author: maroy $ + * @version $Revision: 1.1 $ + */ +class HelixPlayer : + virtual public Configurable +{ + friend void * eventHandlerThread(void *) throw(); + + private: + /** + * The name of the configuration XML elmenent used by HelixPlayer + */ + static const std::string configElementNameStr; + + /** + * The full path to the Helix library shared objects. + */ + std::string dllPath; + + /** + * The shared object access point. + */ + DLLAccess dllAccess; + + /** + * Function pointer to create the Helix engine. + */ + FPRMCREATEENGINE createEngine; + + /** + * Function pointer to close the Helix engine. + */ + FPRMCLOSEENGINE closeEngine; + + /** + * The Helix Client engine. + */ + IHXClientEngine * clientEngine; + + /** + * The Helix player. + */ + IHXPlayer * player; + + /** + * The example client context. + */ + ClientContext * clientContext; + + /** + * The URL to play. + */ + std::string url; + + /** + * The event handling thread. + */ + pthread_t eventHandlingThread; + + /** + * Flag to mark if the event handling thread should be running + * and handling events. + * This is set by the HelixPlayer object, and read by the thread + * to determine when to stop. + */ + bool handleEvents; + + /** + * Flag to indicate if the player is currently playing. + * Make sure no to rely on this flag, as it's not aware of + * the case that the playing has ended naturally. Always + * call isPlaying() instead. + */ + bool playing; + + + public: + /** + * A virtual destructor, as this class has virtual functions. + */ + virtual + ~HelixPlayer(void) throw () + { + } + + /** + * Return the name of the XML element this object expects + * to be sent to a call to configure(). + * + * @return the name of the expected XML configuration element. + */ + static const std::string + getConfigElementName(void) throw () + { + return configElementNameStr; + } + + /** + * Configure the object based on the XML element supplied. + * + * @param element the XML element to configure the object from. + * @exception std::invalid_argument if the supplied XML element + * contains bad configuraiton information + * @exception std::logic_error if the scheduler daemon has already + * been configured, and can not be reconfigured. + */ + virtual void + configure(const xmlpp::Element & element) + throw (std::invalid_argument, + std::logic_error); + + /** + * Initialize the Helix Player object, so that it is ready to + * play audio files. + * + * @exception std::exception on initialization problems. + */ + virtual void + initialize(void) throw (std::exception); + + /** + * De-initialize the Helix Player object. + */ + virtual void + deInitialize(void); + + /** + * Specify which audio resource to play. + * The file may be a playlist, referencing other files, which + * will be accessed automatically. + * Note: this call will not start playing! You will + * have to call the start() function to begin playing. + * + * @param fileUrl a URL to a file + * @exception std::invalid_argument if the supplied fileUrl + * seems to be invalid. + * @see #start + */ + virtual void + playThis(const std::string fileUrl) throw (std::invalid_argument); + + /** + * Start playing. + * This call will start playing the active playlist, which was + * set by a previous call to playThis(). + * Playing can be stopped by calling stop(). + * + * @exception std::logic_error if there was no previous call to + * playThis(). + * @see #playThis + * @see #stop + */ + virtual void + start(void) throw (std::logic_error); + + /** + * Tell if we're currently playing. + * + * @return true of the player is currently playing, false + * otherwise. + */ + virtual bool + isPlaying(void) throw (); + + /** + * Stop playing. + * + * @exception std::logic_error if there was no previous call to + * start() + */ + virtual void + stop(void) throw (std::logic_error); +}; + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + +/** + * The main function of the thread that calls for handling of events + * in the createEngine all the time. + * + * @param helixPlayer a pointer to the HelixPlayer object that started + * this thread. + * @return always 0 + */ +void * +eventHandlerThread(void * helixPlayer) throw (); + + +} // namespace PlaylistExecutor +} // namespace LiveSupport + +/** + * A global function returning the shared object access path to + * the Helix library. + */ +DLLAccessPath* GetDLLAccessPath(void); + + +#endif // HelixPlayer_h + diff --git a/livesupport/modules/playlistExecutor/src/HelixPlayerTest.cxx b/livesupport/modules/playlistExecutor/src/HelixPlayerTest.cxx new file mode 100644 index 000000000..5eac7cb34 --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/HelixPlayerTest.cxx @@ -0,0 +1,188 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/HelixPlayerTest.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#if HAVE_UNISTD_H +#include +#else +#error "Need unistd.h" +#endif + + +#include +#include + +#include "HelixPlayer.h" +#include "HelixPlayerTest.h" + + +using namespace LiveSupport::PlaylistExecutor; + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + +CPPUNIT_TEST_SUITE_REGISTRATION(HelixPlayerTest); + +/** + * The name of the configuration file for the Helix player. + */ +static const std::string configFileName = "etc/helixPlayer.xml"; + + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Set up the test environment + *----------------------------------------------------------------------------*/ +void +HelixPlayerTest :: setUp(void) throw () +{ + try { + Ptr::Ref parser( + new xmlpp::DomParser(configFileName, true)); + const xmlpp::Document * document = parser->get_document(); + const xmlpp::Element * root = document->get_root_node(); + + helixPlayer.reset(new HelixPlayer()); + helixPlayer->configure(*root); + + } catch (std::invalid_argument &e) { + std::cerr << "semantic error in configuration file" << std::endl; + } catch (xmlpp::exception &e) { + std::cerr << e.what() << std::endl; + } +} + + +/*------------------------------------------------------------------------------ + * Clean up the test environment + *----------------------------------------------------------------------------*/ +void +HelixPlayerTest :: tearDown(void) throw () +{ + helixPlayer.reset(); +} + + +/*------------------------------------------------------------------------------ + * Test to see if the HelixPlayer engine can be started and stopped + *----------------------------------------------------------------------------*/ +void +HelixPlayerTest :: firstTest(void) + throw (CPPUNIT_NS::Exception) +{ + try { + helixPlayer->initialize(); + CPPUNIT_ASSERT(!helixPlayer->isPlaying()); + helixPlayer->deInitialize(); + } catch (std::exception &e) { + CPPUNIT_FAIL("failed to initialize or de-initialize HelixPlayer"); + } +} + + +/*------------------------------------------------------------------------------ + * Play something simple + *----------------------------------------------------------------------------*/ +void +HelixPlayerTest :: simplePlayTest(void) + throw (CPPUNIT_NS::Exception) +{ + helixPlayer->initialize(); + helixPlayer->playThis("file:var/test.mp3"); + CPPUNIT_ASSERT(!helixPlayer->isPlaying()); + helixPlayer->start(); + CPPUNIT_ASSERT(helixPlayer->isPlaying()); + while (helixPlayer->isPlaying()) { + usleep(10000); + } + CPPUNIT_ASSERT(!helixPlayer->isPlaying()); + helixPlayer->deInitialize(); +} + + +/*------------------------------------------------------------------------------ + * Check for error conditions + *----------------------------------------------------------------------------*/ +void +HelixPlayerTest :: checkErrorConditions(void) + throw (CPPUNIT_NS::Exception) +{ + helixPlayer->initialize(); + + bool gotException; + + CPPUNIT_ASSERT(!helixPlayer->isPlaying()); + + gotException = false; + try { + helixPlayer->start(); + } catch (std::logic_error &e) { + gotException = true; + } + CPPUNIT_ASSERT(gotException); + + gotException = false; + try { + helixPlayer->stop(); + } catch (std::logic_error &e) { + gotException = true; + } + CPPUNIT_ASSERT(gotException); + + gotException = false; + try { + helixPlayer->playThis("totally/bad/URL"); + } catch (std::invalid_argument &e) { + gotException = true; + } + CPPUNIT_ASSERT(gotException); + + gotException = false; + try { + helixPlayer->start(); + } catch (std::logic_error &e) { + gotException = true; + } + CPPUNIT_ASSERT(gotException); + + helixPlayer->deInitialize(); +} + + diff --git a/livesupport/modules/playlistExecutor/src/HelixPlayerTest.h b/livesupport/modules/playlistExecutor/src/HelixPlayerTest.h new file mode 100644 index 000000000..4671825ea --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/HelixPlayerTest.h @@ -0,0 +1,132 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/Attic/HelixPlayerTest.h,v $ + +------------------------------------------------------------------------------*/ +#ifndef HelixPlayerTest_h +#define HelixPlayerTest_h + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#include + + +namespace LiveSupport { +namespace PlaylistExecutor { + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * Unit test for the HelixPlayer class. + * + * @author $Author: maroy $ + * @version $Revision: 1.1 $ + * @see HelixPlayer + */ +class HelixPlayerTest : public CPPUNIT_NS::TestFixture +{ + CPPUNIT_TEST_SUITE(HelixPlayerTest); + CPPUNIT_TEST(firstTest); + CPPUNIT_TEST(simplePlayTest); + CPPUNIT_TEST(checkErrorConditions); + CPPUNIT_TEST_SUITE_END(); + + private: + + /** + * The helix player to use for the tests. + */ + Ptr::Ref helixPlayer; + + + protected: + + /** + * A simple test. + * + * @exception CPPUNIT_NS::Exception on test failures. + */ + void + firstTest(void) throw (CPPUNIT_NS::Exception); + + /** + * Play something simple. + * + * @exception CPPUNIT_NS::Exception on test failures. + */ + void + simplePlayTest(void) throw (CPPUNIT_NS::Exception); + + /** + * Check for error conditions. + * + * @exception CPPUNIT_NS::Exception on test failures. + */ + void + checkErrorConditions(void) throw (CPPUNIT_NS::Exception); + + public: + + /** + * Set up the environment for the test case. + */ + void + setUp(void) throw (); + + /** + * Clean up the environment after the test case. + */ + void + tearDown(void) throw (); +}; + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + +} // namespace PlaylistExecutor +} // namespace LiveSupport + +#endif // HelixPlayerTest_h + diff --git a/livesupport/modules/playlistExecutor/src/TestRunner.cxx b/livesupport/modules/playlistExecutor/src/TestRunner.cxx new file mode 100644 index 000000000..0ab739cdc --- /dev/null +++ b/livesupport/modules/playlistExecutor/src/TestRunner.cxx @@ -0,0 +1,281 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2004 Media Development Loan Fund + + This file is part of the LiveSupport project. + http://livesupport.campware.org/ + To report bugs, send an e-mail to bugs@campware.org + + LiveSupport 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. + + LiveSupport 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 LiveSupport; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Author : $Author: maroy $ + Version : $Revision: 1.1 $ + Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/playlistExecutor/src/TestRunner.cxx,v $ + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#if HAVE_UNISTD_H +#include +#else +#error "Need unistd.h" +#endif + +#if HAVE_GETOPT_H +#include +#else +#error "Need getopt.h" +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "LiveSupport/Core/Ptr.h" + + +using namespace LiveSupport::Core; + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + +/** + * Our copyright notice, should be at most 80 columns + */ +static const char copyrightNotice[] = + "Copyright (c) 2004 Media Development Loan Fund under the GNU GPL"; + +/** + * String describing the short options. + */ +static const char options[] = "ho:s:v"; + +/** + * Structure describing the long options + */ +static const struct option longOptions[] = { + { "help", no_argument, 0, 'h' }, + { "output", required_argument, 0, 'o' }, + { "stylesheet", required_argument, 0, 's' }, + { "version", no_argument, 0, 'v' }, + { 0, 0, 0, 0 } +}; + +/** + * The encoding to use for the output file. + */ +static const std::string encoding = "utf-8"; + +/** + * The output XML file name. + */ +static Ptr::Ref xmlOutFileName; + +/** + * The XSLT attached to the output file. + */ +static Ptr::Ref xsltFileName; + + +/* =============================================== local function prototypes */ + +/** + * Print program version. + * + * @param os the std::ostream to print to. + */ +static void +printVersion ( std::ostream & os ); + +/** + * Print program usage information. + * + * @param invocation the command line command used to invoke this program. + * @param os the std::ostream to print to. + */ +static void +printUsage ( const char invocation[], + std::ostream & os ); + +/** + * Process command line arguments. + * + * @param argc the number of arguments. + * @param argv the arguments themselves. + * @return true of all went well, false in case the program should exit + * after this call. + */ +static bool +processArguments(int argc, char *argv[]); + + +/* ============================================================= module code */ + +/*------------------------------------------------------------------------------ + * Run all tests + *----------------------------------------------------------------------------*/ +int +main( int argc, + char * argv[] ) throw () +{ + if (!processArguments(argc, argv)) { + return 0; + } + + // Create the event manager and test controller + CPPUNIT_NS::TestResult controller; + + // Add a listener that colllects test result + CPPUNIT_NS::TestResultCollector result; + controller.addListener( &result ); + + // Add a listener that print dots as test run. + CPPUNIT_NS::BriefTestProgressListener progress; + controller.addListener( &progress ); + + // Add the top suite to the test runner + CPPUNIT_NS::TestRunner runner; + runner.addTest( CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest() ); + runner.run( controller ); + + // Print test in a compiler compatible format. + CPPUNIT_NS::CompilerOutputter outputter( &result, std::cerr ); + outputter.setLocationFormat("%p:%l:"); + outputter.write(); + + // also generate an XML document as an output + std::ofstream xmlOutFile(xmlOutFileName->c_str()); + CPPUNIT_NS::XmlOutputter xmlOutputter(&result, xmlOutFile, encoding); + xmlOutputter.setStandalone(false); + if (xsltFileName) { + xmlOutputter.setStyleSheet(*xsltFileName); + } + xmlOutputter.write(); + xmlOutFile.flush(); + xmlOutFile.close(); + + return result.wasSuccessful() ? 0 : 1; +} + + +/*------------------------------------------------------------------------------ + * Process command line arguments. + *----------------------------------------------------------------------------*/ +static bool +processArguments(int argc, char *argv[]) +{ + int i; + + while ((i = getopt_long(argc, argv, options, longOptions, 0)) != -1) { + switch (i) { + case 'h': + printUsage(argv[0], std::cout); + return false; + + case 'o': + xmlOutFileName.reset(new std::string(optarg)); + break; + + case 's': + xsltFileName.reset(new std::string(optarg)); + break; + + case 'v': + printVersion(std::cout); + return false; + + default: + printUsage(argv[0], std::cout); + return false; + } + } + + if (optind < argc) { + std::cerr << "error processing command line arguments" << std::endl; + printUsage(argv[0], std::cout); + return false; + } + + if (!xmlOutFileName) { + std::cerr << "mandatory option output file name not specified" + << std::endl; + printUsage(argv[0], std::cout); + return false; + } + + std::cerr << "writing output to '" << *xmlOutFileName << '\'' << std::endl; + if (xsltFileName) { + std::cerr << "using XSLT file '" << *xsltFileName << '\'' << std::endl; + } + + return true; +} + + +/*------------------------------------------------------------------------------ + * Print program version. + *----------------------------------------------------------------------------*/ +static void +printVersion ( std::ostream & os ) +{ + os << PACKAGE_NAME << ' ' << PACKAGE_VERSION << std::endl + << "Unit test runner" << std::endl + << copyrightNotice << std::endl; +} + + +/*------------------------------------------------------------------------------ + * Print program usage. + *----------------------------------------------------------------------------*/ +static void +printUsage ( const char invocation[], + std::ostream & os ) +{ + os << PACKAGE_NAME << ' ' << PACKAGE_VERSION << std::endl + << "Unit test runner" << std::endl + << std::endl + << "Usage: " << invocation << " [OPTION]" + << std::endl + << " mandatory options:" << std::endl + << " -o, --output=file.name write test results into this XML file" + << std::endl + << " optional options:" << std::endl + << " -s, --stylesheet specify this XSLT for the output file" + << std::endl + << " this is either an absolute URI, or a" + << std::endl + << " relative path for the output document" + << std::endl + << " -h, --help display this help and exit" << std::endl + << " -v, --version display version information and exit" + << std::endl + << std::endl + << "Report bugs to " << PACKAGE_BUGREPORT << std::endl; +} + diff --git a/livesupport/modules/playlistExecutor/tmp/.keepme b/livesupport/modules/playlistExecutor/tmp/.keepme new file mode 100644 index 000000000..e0808fa16 --- /dev/null +++ b/livesupport/modules/playlistExecutor/tmp/.keepme @@ -0,0 +1 @@ +keep me diff --git a/livesupport/modules/playlistExecutor/var/test.mp3 b/livesupport/modules/playlistExecutor/var/test.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f774c2164836a4ab4069cc300c6a6232acec8b7c GIT binary patch literal 236563 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 z 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

O%mZaalm13fB+!t2(V8Z%B4@!ut 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 literal 0 HcmV?d00001