fixed PartialPlayTest, added SwitcherTest

This commit is contained in:
maroy 2005-06-18 16:55:44 +00:00
parent 73a30b108b
commit cf47169022
10 changed files with 504 additions and 65 deletions

View file

@ -21,7 +21,7 @@
#
#
# Author : $Author: maroy $
# Version : $Revision: 1.1 $
# Version : $Revision: 1.2 $
# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/etc/Makefile.in,v $
#
# @configure_input@
@ -125,10 +125,12 @@ LDFLAGS = @LDFLAGS@ ${GSTREAMER_LIBS} \
ONESHOT_READER_LIB_OBJS = ${TMP_DIR}/oneshot-reader.o
MINIMAL_AUDIO_SMIL_LIB_OBJS = ${TMP_DIR}/seek.o \
${TMP_DIR}/seek-pack.o\
${TMP_DIR}/util.o \
${TMP_DIR}/seek-pack.o \
${TMP_DIR}/minimal-audio-smil.o
PARTIAL_PLAY_LIB_OBJS = ${TMP_DIR}/seek.o \
${TMP_DIR}/util.o \
${TMP_DIR}/seek-pack.o \
${TMP_DIR}/smil-util.o \
${TMP_DIR}/partial-play.o
@ -137,6 +139,7 @@ SWITCHER_LIB_OBJS = ${TMP_DIR}/smil-util.o \
${TMP_DIR}/switcher.o
TEST_RUNNER_OBJS = ${TMP_DIR}/TestRunner.o \
${TMP_DIR}/SwitcherTest.o \
${TMP_DIR}/PartialPlayTest.o \
${TMP_DIR}/OneshotReaderTest.o \
${TMP_DIR}/MinimalAudioSmilTest.o

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $
Version : $Revision: 1.1 $
Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/PartialPlayTest.cxx,v $
------------------------------------------------------------------------------*/
@ -55,6 +55,16 @@ static const char * testFile = "var/1minutecounter.mp3";
/* =============================================== local function prototypes */
/**
* Signal handler for the eos event of the switcher element.
*
* @param element the element emitting the eos signal
* @param userData pointer to the container bin of the switcher.
*/
static void
eos_signal_handler(GstElement * element,
gpointer userData);
/* ============================================================= module code */
@ -98,6 +108,7 @@ PartialPlayTest :: firstTest(void)
/* set filename property on the file source */
g_object_set(G_OBJECT(filter), "location", testFile, NULL);
g_object_set(G_OBJECT(filter), "config", "3s;10s-17s", NULL);
g_signal_connect(filter, "eos", G_CALLBACK(eos_signal_handler), pipeline);
gst_element_link(filter, sink);
@ -107,13 +118,27 @@ PartialPlayTest :: firstTest(void)
gst_element_set_state(sink, GST_STATE_READY);
gst_element_set_state(pipeline, GST_STATE_PLAYING);
// TODO: actually run the test
// unfortunately currently partialplay does get into EOS state
// when needed
//while (gst_bin_iterate(GST_BIN(pipeline)));
while (gst_bin_iterate(GST_BIN(pipeline)));
/* clean up nicely */
gst_element_set_state(pipeline, GST_STATE_NULL);
gst_object_unref(GST_OBJECT (pipeline));
}
/*------------------------------------------------------------------------------
* eos signal handler for the switcher element
*----------------------------------------------------------------------------*/
static void
eos_signal_handler(GstElement * element,
gpointer userData)
{
GstElement * container = GST_ELEMENT(userData);
g_return_if_fail(container != NULL);
g_return_if_fail(GST_IS_ELEMENT(container));
// set the container into eos state
gst_element_set_eos(container);
}

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/gstreamerElements/src/SwitcherTest.cxx,v $
------------------------------------------------------------------------------*/
/* ============================================================ include files */
#ifdef HAVE_CONFIG_H
#include "configure.h"
#endif
#include <string>
#include <iostream>
#include <gst/gst.h>
#include "SwitcherTest.h"
using namespace LiveSupport::GstreamerElements;
/* =================================================== local data structures */
/* ================================================ local constants & macros */
CPPUNIT_TEST_SUITE_REGISTRATION(SwitcherTest);
static const char * testFile = "var/1minutecounter.mp3";
/* =============================================== local function prototypes */
/**
* Signal handler for the eos event of the switcher element.
*
* @param element the element emitting the eos signal
* @param userData pointer to the container bin of the switcher.
*/
static void
eos_signal_handler(GstElement * element,
gpointer userData);
/* ============================================================= module code */
/*------------------------------------------------------------------------------
* Set up the test environment
*----------------------------------------------------------------------------*/
void
SwitcherTest :: setUp(void) throw ()
{
}
/*------------------------------------------------------------------------------
* Clean up the test environment
*----------------------------------------------------------------------------*/
void
SwitcherTest :: tearDown(void) throw ()
{
}
/*------------------------------------------------------------------------------
* A simple smoke test.
*----------------------------------------------------------------------------*/
void
SwitcherTest :: firstTest(void)
throw (CPPUNIT_NS::Exception)
{
GstElement * pipeline;
GstElement * source;
GstElement * decoder;
GstElement * sw;
GstElement * switcher;
GstElement * sink;
/* initialize GStreamer */
gst_init(0, 0);
/* create elements */
pipeline = gst_pipeline_new("audio-player");
source = gst_element_factory_make("filesrc", "source");
decoder = gst_element_factory_make("mad", "decoder");
sw = gst_element_factory_make("switch", "sw");
switcher = gst_element_factory_make("switcher", "switcher");
sink = gst_element_factory_make("alsasink", "alsa-output");
/* set filename property on the file source */
g_object_set(G_OBJECT(source), "location", testFile, NULL);
g_object_set(G_OBJECT(switcher), "source-config", "0[3s]", NULL);
/* listen for the eos event on switcher, so the pipeline can be stopped */
g_signal_connect(switcher, "eos", G_CALLBACK(eos_signal_handler), pipeline);
gst_element_link_many(source, decoder, sw, switcher, sink, NULL);
gst_bin_add_many(GST_BIN(pipeline),
source, decoder, sw, switcher, sink, NULL);
gst_element_set_state(sink, GST_STATE_READY);
gst_element_set_state(pipeline, GST_STATE_PLAYING);
while (gst_bin_iterate(GST_BIN(pipeline)));
/* clean up nicely */
gst_element_set_state(pipeline, GST_STATE_NULL);
gst_object_unref(GST_OBJECT (pipeline));
}
/*------------------------------------------------------------------------------
* eos signal handler for the switcher element
*----------------------------------------------------------------------------*/
static void
eos_signal_handler(GstElement * element,
gpointer userData)
{
GstElement * container = GST_ELEMENT(userData);
g_return_if_fail(container != NULL);
g_return_if_fail(GST_IS_ELEMENT(container));
// set the container into eos state
gst_element_set_eos(container);
}

View file

@ -0,0 +1,106 @@
/*------------------------------------------------------------------------------
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/gstreamerElements/src/SwitcherTest.h,v $
------------------------------------------------------------------------------*/
#ifndef SwitcherTest_h
#define SwitcherTest_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 GstreamerElements {
/* ================================================================ constants */
/* =================================================================== macros */
/* =============================================================== data types */
/**
* Unit test for the partialplay gstreamer element.
*
* @author $Author: maroy $
* @version $Revision: 1.1 $
*/
class SwitcherTest : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(SwitcherTest);
CPPUNIT_TEST(firstTest);
CPPUNIT_TEST_SUITE_END();
protected:
/**
* A simple smoke test.
*
* @exception CPPUNIT_NS::Exception on test failures.
*/
void
firstTest(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 GstreamerElements
} // namespace LiveSupport
#endif // SwitcherTest_h

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $
Version : $Revision: 1.1 $
Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/partial-play.c,v $
------------------------------------------------------------------------------*/
@ -86,7 +86,7 @@ GST_PLUGIN_DEFINE (
"partialplay",
"Partial play",
plugin_init,
"$Revision: 1.1 $",
"$Revision: 1.2 $",
"GPL",
"LiveSupport",
"http://livesupport.campware.org/"
@ -113,6 +113,17 @@ livesupport_partial_play_class_init(LivesupportPartialPlayClass * klass);
static void
livesupport_partial_play_base_init(LivesupportPartialPlayClass * klass);
/**
* Signal handler for the eos event of the SeekPack->bin element.
*
* @param element the element emitting the eos signal
* @param userData pointer to the container bin of the switcher,
* which is this PartialPlay element
*/
static void
seek_pack_eos_signal_handler(GstElement * element,
gpointer userData);
/**
* PartialPlay instance initializer.
*
@ -329,6 +340,25 @@ livesupport_partial_play_class_init(LivesupportPartialPlayClass * klass)
}
/*------------------------------------------------------------------------------
* eos signal handler for the seekPack->bin element
*----------------------------------------------------------------------------*/
static void
seek_pack_eos_signal_handler(GstElement * element,
gpointer userData)
{
GstElement * container = GST_ELEMENT(userData);
g_return_if_fail(container != NULL);
g_return_if_fail(GST_IS_ELEMENT(container));
/* set the container into eos state */
GST_DEBUG("SeekPack.bin setting PartialPlay to eos");
gst_element_set_eos(container);
}
/*------------------------------------------------------------------------------
* Initialize a new PartialPlay element.
*----------------------------------------------------------------------------*/
@ -343,6 +373,11 @@ livesupport_partial_play_init(LivesupportPartialPlay * pplay)
gst_element_get_pad(pplay->seekPack->bin, "src"),
"src");
g_signal_connect(pplay->seekPack->bin,
"eos",
G_CALLBACK(seek_pack_eos_signal_handler),
pplay);
/* TODO: free these strings when disposing of the object */
pplay->location = g_strdup("");
pplay->config = g_strdup("");

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $
Version : $Revision: 1.1 $
Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/seek-pack.c,v $
------------------------------------------------------------------------------*/
@ -42,6 +42,7 @@
#include <gst/gst.h>
#include "util.h"
#include "seek.h"
#include "seek-pack.h"
@ -61,6 +62,16 @@
/* =============================================== local function prototypes */
/**
* Signal handler for the eos event of the switcher element.
*
* @param element the element emitting the eos signal
* @param userData pointer to the container bin of the switcher.
*/
static void
switcher_eos_signal_handler(GstElement * element,
gpointer userData);
/**
* Perform the seeks on the SeekPack, set by the initialization function.
*
@ -73,6 +84,25 @@ livesupport_seek_pack_seek(LivesupportSeekPack * seekPack);
/* ============================================================= module code */
/*------------------------------------------------------------------------------
* eos signal handler for the switcher element
*----------------------------------------------------------------------------*/
static void
switcher_eos_signal_handler(GstElement * element,
gpointer userData)
{
GstElement * container = GST_ELEMENT(userData);
g_return_if_fail(container != NULL);
g_return_if_fail(GST_IS_ELEMENT(container));
/* set the container into eos state */
GST_DEBUG("SeekPack.switcher setting SeekPack.bin to eos");
gst_element_set_eos(container);
}
/*------------------------------------------------------------------------------
* Create a new SeekPack.
*----------------------------------------------------------------------------*/
@ -102,6 +132,11 @@ livesupport_seek_pack_new(const gchar * uniqueName)
seekPack->bin = gst_bin_new(str);
g_free(str);
g_signal_connect(seekPack->switcher,
"eos",
G_CALLBACK(switcher_eos_signal_handler),
seekPack->bin);
seekPack->silenceDuration = 0LL;
seekPack->startTime = 0LL;
seekPack->endTime = 0LL;

View file

@ -22,13 +22,14 @@
Author : $Author: maroy $
Version : $Revision: 1.1 $
Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/seek.c,v $
------------------------------------------------------------------------------*/
/* ============================================================ include files */
#include "util.h"
#include "seek.h"
@ -69,17 +70,6 @@ seek_element(GstElement * element,
gint64 seekTime);
#endif
#ifndef SEEK_ELEMENT
/**
* Return the first src pad for an element.
*
* @param element the element to return the pad from.
* @return the first src pad for element, or NULL.
*/
static GstPad *
get_src_pad(GstElement * element);
#endif
#ifndef SEEK_ELEMENT
/**
* Seek on the first src pad of an element.
@ -112,30 +102,6 @@ seek_element(GstElement * element,
#endif
#ifndef SEEK_ELEMENT
/*------------------------------------------------------------------------------
* Return the first src pad for an element.
*----------------------------------------------------------------------------*/
static GstPad *
get_src_pad(GstElement * element)
{
const GList * pads;
for (pads = gst_element_get_pad_list(element);
pads;
pads = g_list_next(pads)) {
GstPad * pad = pads->data;
if (GST_PAD_IS_SRC(pad)) {
return pad;
}
}
return 0;
}
#endif
#ifndef SEEK_ELEMENT
/*------------------------------------------------------------------------------
* Seek on the first src pad of an element.

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $
Version : $Revision: 1.1 $
Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/switcher.c,v $
------------------------------------------------------------------------------*/
@ -64,7 +64,7 @@ GST_PLUGIN_DEFINE (
"switcher",
"A filter that connects to a swtich, and changes its source",
plugin_init,
"$Revision: 1.1 $",
"$Revision: 1.2 $",
"GPL",
"LiveSupport",
"http://livesupport.campware.org/"
@ -385,7 +385,6 @@ livesupport_switcher_chain(GstPad * pad,
g_return_if_fail(LIVESUPPORT_IS_SWITCHER(switcher));
if (switcher->eos) {
GstElement * parent;
GstEvent * event;
GST_DEBUG("switcher_chain: eos");
@ -394,22 +393,6 @@ livesupport_switcher_chain(GstPad * pad,
gst_pad_send_event(switcher->srcpad, event);
gst_element_set_eos(GST_ELEMENT(switcher));
parent = GST_ELEMENT(gst_element_get_parent(GST_ELEMENT(switcher)));
if (parent) {
gst_element_set_eos(parent);
}
/* TODO: fix this mess here... */
/*
for (parent =
GST_ELEMENT(gst_element_get_parent(GST_ELEMENT(switcher)));
parent;
parent = GST_ELEMENT(gst_element_get_parent(parent))) {
GST_DEBUG("switcher_chain: eos #1.1");
gst_element_set_eos(parent);
}
*/
return;
}

View file

@ -0,0 +1,68 @@
/*------------------------------------------------------------------------------
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/gstreamerElements/src/util.c,v $
------------------------------------------------------------------------------*/
/* ============================================================ include files */
#include "util.h"
/* =================================================== local data structures */
/* ================================================ local constants & macros */
/* =============================================== local function prototypes */
/* ============================================================= module code */
/*------------------------------------------------------------------------------
* Return the first src pad for an element.
*----------------------------------------------------------------------------*/
GstPad *
get_src_pad(GstElement * element)
{
const GList * pads;
g_return_val_if_fail(element != NULL, NULL);
for (pads = gst_element_get_pad_list(element);
pads;
pads = g_list_next(pads)) {
GstPad * pad = pads->data;
if (GST_PAD_IS_SRC(pad)) {
return pad;
}
}
return 0;
}

View file

@ -0,0 +1,68 @@
/*------------------------------------------------------------------------------
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/gstreamerElements/src/util.h,v $
------------------------------------------------------------------------------*/
#ifndef Util_h
#define Util_h
/**
* @file
* Utility functions helping to work with SMIL-related data structures.
*
* @author $Author: maroy $
* @version $Revision: 1.1 $
*/
/* ============================================================ include files */
#include <gst/gst.h>
/* ================================================================ constants */
/* =================================================================== macros */
/* =============================================================== data types */
/* ====================================================== function prototypes */
/**
* Return the first src pad for an element.
*
* @param element the element to return the pad from.
* @return the first src pad for element, or NULL.
*/
GstPad *
get_src_pad(GstElement * element);
#endif /* Util_h */