added PlaylistExecutor, with a minimal implementation using Helix libraries

This commit is contained in:
maroy 2004-10-31 10:24:54 +00:00
parent cc16ebe3e5
commit 45edb6399e
26 changed files with 5036 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -0,0 +1 @@
keep me

View File

@ -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 $@ $<

View File

@ -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()

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE helixPlayer [
<!ELEMENT helixPlayer EMPTY >
<!ATTLIST helixPlayer dllPath CDATA #REQUIRED >
]>
<helixPlayer dllPath = "../../usr/lib/helix"
/>

View File

@ -0,0 +1,63 @@
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>LiveSupport unit test results</title>
</head>
<body>
<h1>Preface</h1>
This document is part of the
<a href="http://livesupport.campware.org/">LiveSupport</a>
project, Copyright &#169; 2004 <a href="http://www.mdlf.org/">Media
Development Loan Fund</a>, under the GNU
<a href="http://www.gnu.org/licenses/gpl.html">GPL</a>.
<br/>
This is an automatically generated document.
<h1>Scope</h1>
This document contains the generated unit test results for the
<a href="http://livesupport.campware.org/">LiveSupport</a> project.
<h1>Summary</h1>
<xsl:for-each select="//Statistics">
<table>
<tr>
<td><b>Total number of tests:</b></td>
<td><xsl:value-of select="Tests"/></td>
</tr>
<tr>
<td><b>Tests passed:</b></td>
<td><xsl:value-of select="count(/*/SuccessfulTests/Test)"/></td>
</tr>
<tr>
<td><b>Tests failed:</b></td>
<td><xsl:value-of select="Failures"/></td>
</tr>
<tr>
<td><b>Test errors:</b></td>
<td><xsl:value-of select="Errors"/></td>
</tr>
</table>
</xsl:for-each>
<h1>Tests</h1>
<table>
<tr>
<th>test name</th>
<th>test status</th>
</tr>
<xsl:for-each select="//Test | //FailedTest">
<xsl:sort select="Name"/>
<tr>
<td><xsl:value-of select="Name"/></td>
<xsl:if test="ancestor::FailedTests"><td bgcolor="red">failed</td></xsl:if>
<xsl:if test="ancestor::SuccessfulTests"><td bgcolor="lightblue">passed</td></xsl:if>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1 @@
keep me

View File

@ -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 <hxcom.h>
#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;
}

View File

@ -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 <hxtypes.h>
#include <hxcore.h>
#include <hxmon.h>
#include <hxengin.h>
#include <hxclsnk.h>
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

View File

@ -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 <hxcom.h>
#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;
}

View File

@ -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 <hxauth.h>
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

View File

@ -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 <hxbuffer.h>
#include <hxmangle.h>
#include <hxstrutl.h>
#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;
}
}

View File

@ -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 <hxprefs.h>
#include <ihxpckts.h>
#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

View File

@ -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 <hxcom.h>
#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;
}

View File

@ -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 <hxcore.h>
#include <hxerror.h>
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

View File

@ -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

View File

@ -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 <hxtypes.h>
#include <hxcom.h>
#include <hxiids.h>
#include <hxpiids.h>
/* =================================================== local data structures */
/* ================================================ local constants & macros */
/* =============================================== local function prototypes */
/* ============================================================= module code */

View File

@ -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;
}

View File

@ -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 <pthread.h>
#include <dllacces.h>
#include <dllpath.h>
#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 <b>not</b> 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

View File

@ -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 <unistd.h>
#else
#error "Need unistd.h"
#endif
#include <string>
#include <iostream>
#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<xmlpp::DomParser>::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();
}

View File

@ -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 <cppunit/extensions/HelperMacros.h>
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<HelixPlayer>::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

View File

@ -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 <unistd.h>
#else
#error "Need unistd.h"
#endif
#if HAVE_GETOPT_H
#include <getopt.h>
#else
#error "Need getopt.h"
#endif
#include <fstream>
#include <cppunit/BriefTestProgressListener.h>
#include <cppunit/CompilerOutputter.h>
#include <cppunit/XmlOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TestRunner.h>
#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<std::string>::Ref xmlOutFileName;
/**
* The XSLT attached to the output file.
*/
static Ptr<std::string>::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;
}

View File

@ -0,0 +1 @@
keep me

Binary file not shown.