added support for clipStart and clipEnd
This commit is contained in:
parent
60518f7074
commit
f6c9fef31a
14 changed files with 251 additions and 16 deletions
|
@ -748,6 +748,24 @@ class Playlist : public Configurable,
|
||||||
Ptr<FadeInfo>::Ref fadeInfo)
|
Ptr<FadeInfo>::Ref fadeInfo)
|
||||||
throw (std::invalid_argument);
|
throw (std::invalid_argument);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set clipStart for a playlist element.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
setClipStart(Ptr<UniqueId>::Ref playlistElementId,
|
||||||
|
Ptr<time_duration>::Ref newStart)
|
||||||
|
throw (std::invalid_argument);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set clipEnd for a playlist element.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
setClipEnd(Ptr<UniqueId>::Ref playlistElementId,
|
||||||
|
Ptr<time_duration>::Ref newEnd)
|
||||||
|
throw (std::invalid_argument);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a playlist element from the playlist.
|
* Remove a playlist element from the playlist.
|
||||||
*
|
*
|
||||||
|
|
|
@ -130,6 +130,8 @@ class PlaylistElement : public Configurable
|
||||||
* The starting time of the event.
|
* The starting time of the event.
|
||||||
*/
|
*/
|
||||||
Ptr<time_duration>::Ref relativeOffset;
|
Ptr<time_duration>::Ref relativeOffset;
|
||||||
|
Ptr<time_duration>::Ref clipStart;
|
||||||
|
Ptr<time_duration>::Ref clipEnd;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The type of the entry (audio clip or sub-playlist).
|
* The type of the entry (audio clip or sub-playlist).
|
||||||
|
@ -204,6 +206,9 @@ class PlaylistElement : public Configurable
|
||||||
this->playable = audioClip;
|
this->playable = audioClip;
|
||||||
this->fadeInfo = fadeInfo;
|
this->fadeInfo = fadeInfo;
|
||||||
this->type = AudioClipType;
|
this->type = AudioClipType;
|
||||||
|
|
||||||
|
setClipStart(Ptr<time_duration>::Ref(new time_duration(0,0,0,0)));
|
||||||
|
setClipEnd(Ptr<time_duration>::Ref(new time_duration(0,0,0,0)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -228,7 +233,10 @@ class PlaylistElement : public Configurable
|
||||||
this->playable = audioClip;
|
this->playable = audioClip;
|
||||||
this->fadeInfo = fadeInfo;
|
this->fadeInfo = fadeInfo;
|
||||||
this->type = AudioClipType;
|
this->type = AudioClipType;
|
||||||
}
|
|
||||||
|
setClipStart(Ptr<time_duration>::Ref(new time_duration(0,0,0,0)));
|
||||||
|
setClipEnd(Ptr<time_duration>::Ref(new time_duration(0,0,0,0)));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new sub-playlist playlist element, with a new UniqueId,
|
* Create a new sub-playlist playlist element, with a new UniqueId,
|
||||||
|
@ -252,7 +260,10 @@ class PlaylistElement : public Configurable
|
||||||
this->playable = playlist;
|
this->playable = playlist;
|
||||||
this->fadeInfo = fadeInfo;
|
this->fadeInfo = fadeInfo;
|
||||||
this->type = PlaylistType;
|
this->type = PlaylistType;
|
||||||
}
|
|
||||||
|
setClipStart(Ptr<time_duration>::Ref(new time_duration(0,0,0,0)));
|
||||||
|
setClipEnd(Ptr<time_duration>::Ref(new time_duration(0,0,0,0)));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A virtual destructor, as this class has virtual functions.
|
* A virtual destructor, as this class has virtual functions.
|
||||||
|
@ -324,6 +335,40 @@ class PlaylistElement : public Configurable
|
||||||
return relativeOffset;
|
return relativeOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
setClipStart(Ptr<time_duration>::Ref newStart)
|
||||||
|
throw ()
|
||||||
|
{
|
||||||
|
clipStart = newStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
Ptr<time_duration>::Ref
|
||||||
|
getClipStart(void) const throw ()
|
||||||
|
{
|
||||||
|
return clipStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
setClipEnd(Ptr<time_duration>::Ref newEnd)
|
||||||
|
throw ()
|
||||||
|
{
|
||||||
|
clipEnd = newEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
Ptr<time_duration>::Ref
|
||||||
|
getClipEnd(void) const throw ()
|
||||||
|
{
|
||||||
|
return clipEnd;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the type of this playlist element. If the return
|
* Return the type of this playlist element. If the return
|
||||||
* value is PlaylistElement::AudioClipType (resp. PlaylistType),
|
* value is PlaylistElement::AudioClipType (resp. PlaylistType),
|
||||||
|
|
|
@ -180,6 +180,30 @@ class XmlRpcTools
|
||||||
extractRelativeOffset(XmlRpc::XmlRpcValue & xmlRpcValue)
|
extractRelativeOffset(XmlRpc::XmlRpcValue & xmlRpcValue)
|
||||||
throw (std::invalid_argument);
|
throw (std::invalid_argument);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract the relative offset from the XML-RPC parameters.
|
||||||
|
*
|
||||||
|
* @param xmlRpcValue the XML-RPC parameter to extract from.
|
||||||
|
* @return a time_duration that was found in the XML-RPC parameter.
|
||||||
|
* @exception std::invalid_argument if there was no relativeOffset
|
||||||
|
* member in xmlRpcValue
|
||||||
|
*/
|
||||||
|
static Ptr<time_duration>::Ref
|
||||||
|
extractClipStart(XmlRpc::XmlRpcValue & xmlRpcValue)
|
||||||
|
throw (std::invalid_argument);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract the relative offset from the XML-RPC parameters.
|
||||||
|
*
|
||||||
|
* @param xmlRpcValue the XML-RPC parameter to extract from.
|
||||||
|
* @return a time_duration that was found in the XML-RPC parameter.
|
||||||
|
* @exception std::invalid_argument if there was no relativeOffset
|
||||||
|
* member in xmlRpcValue
|
||||||
|
*/
|
||||||
|
static Ptr<time_duration>::Ref
|
||||||
|
extractClipEnd(XmlRpc::XmlRpcValue & xmlRpcValue)
|
||||||
|
throw (std::invalid_argument);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a Playlist to an XmlRpcValue
|
* Convert a Playlist to an XmlRpcValue
|
||||||
*
|
*
|
||||||
|
|
|
@ -545,6 +545,50 @@ Playlist::setFadeInfo(Ptr<UniqueId>::Ref playlistElementId,
|
||||||
it->second->setFadeInfo(fadeInfo);
|
it->second->setFadeInfo(fadeInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Change clipStart of a playlist element.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
Playlist::setClipStart(Ptr<UniqueId>::Ref playlistElementId,
|
||||||
|
Ptr<time_duration>::Ref newStart)
|
||||||
|
throw (std::invalid_argument)
|
||||||
|
{
|
||||||
|
Playlist::iterator it = this->find(playlistElementId);
|
||||||
|
|
||||||
|
if (it == this->end()) {
|
||||||
|
throw std::invalid_argument("no playlist element with this ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
Ptr<time_duration>::Ref endOffset(new time_duration(
|
||||||
|
*it->second->getRelativeOffset()
|
||||||
|
+ *it->second->getPlayable()->getPlaylength() - *newStart));
|
||||||
|
setPlaylength(endOffset);
|
||||||
|
|
||||||
|
it->second->setClipStart(newStart);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Change clipEnd of a playlist element.
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
Playlist::setClipEnd(Ptr<UniqueId>::Ref playlistElementId,
|
||||||
|
Ptr<time_duration>::Ref newEnd)
|
||||||
|
throw (std::invalid_argument)
|
||||||
|
{
|
||||||
|
Playlist::iterator it = this->find(playlistElementId);
|
||||||
|
|
||||||
|
if (it == this->end()) {
|
||||||
|
throw std::invalid_argument("no playlist element with this ID");
|
||||||
|
}
|
||||||
|
|
||||||
|
Ptr<time_duration>::Ref endOffset(new time_duration(
|
||||||
|
*it->second->getRelativeOffset()
|
||||||
|
+ *newEnd - *it->second->getClipStart()));
|
||||||
|
setPlaylength(endOffset);
|
||||||
|
|
||||||
|
it->second->setClipEnd(newEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
/*------------------------------------------------------------------------------
|
||||||
* Remove a playlist element from the playlist.
|
* Remove a playlist element from the playlist.
|
||||||
|
|
|
@ -63,6 +63,14 @@ static const std::string idAttrName = "id";
|
||||||
*/
|
*/
|
||||||
static const std::string relativeOffsetAttrName = "relativeOffset";
|
static const std::string relativeOffsetAttrName = "relativeOffset";
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
static const std::string clipStartAttrName = "clipStart";
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
static const std::string clipEndAttrName = "clipEnd";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The name of the audio clip child element of the playlist element.
|
* The name of the audio clip child element of the playlist element.
|
||||||
*/
|
*/
|
||||||
|
@ -117,6 +125,24 @@ PlaylistElement :: configure(const xmlpp::Element & element)
|
||||||
attribute->get_value() ));
|
attribute->get_value() ));
|
||||||
relativeOffset = TimeConversion::parseTimeDuration(relativeOffsetString);
|
relativeOffset = TimeConversion::parseTimeDuration(relativeOffsetString);
|
||||||
|
|
||||||
|
// set clip start
|
||||||
|
if (attribute = element.get_attribute(clipStartAttrName)) {
|
||||||
|
Ptr<std::string>::Ref clipStartString(new std::string(
|
||||||
|
attribute->get_value() ));
|
||||||
|
clipStart = TimeConversion::parseTimeDuration(clipStartString);
|
||||||
|
} else {
|
||||||
|
setClipStart(Ptr<time_duration>::Ref(new time_duration(0,0,0,0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// set clip end
|
||||||
|
if (attribute = element.get_attribute(clipEndAttrName)) {
|
||||||
|
Ptr<std::string>::Ref clipEndString(new std::string(
|
||||||
|
attribute->get_value() ));
|
||||||
|
clipEnd = TimeConversion::parseTimeDuration(clipEndString);
|
||||||
|
} else {
|
||||||
|
setClipEnd(Ptr<time_duration>::Ref(new time_duration(0,0,0,0)));
|
||||||
|
}
|
||||||
|
|
||||||
// set audio clip
|
// set audio clip
|
||||||
xmlpp::Node::NodeList childNodes
|
xmlpp::Node::NodeList childNodes
|
||||||
= element.get_children(audioClipElementName);
|
= element.get_children(audioClipElementName);
|
||||||
|
@ -202,6 +228,12 @@ PlaylistElement :: getXmlElementString(void) throw ()
|
||||||
+ "\" ");
|
+ "\" ");
|
||||||
xmlString->append(relativeOffsetAttrName + "=\""
|
xmlString->append(relativeOffsetAttrName + "=\""
|
||||||
+ toFixedString(relativeOffset)
|
+ toFixedString(relativeOffset)
|
||||||
|
+ "\" ");
|
||||||
|
xmlString->append(clipStartAttrName + "=\""
|
||||||
|
+ toFixedString(clipStart)
|
||||||
|
+ "\" ");
|
||||||
|
xmlString->append(clipEndAttrName + "=\""
|
||||||
|
+ toFixedString(clipEnd)
|
||||||
+ "\">\n");
|
+ "\">\n");
|
||||||
|
|
||||||
xmlString->append(*getPlayable()->getXmlElementString() + "\n");
|
xmlString->append(*getPlayable()->getXmlElementString() + "\n");
|
||||||
|
|
|
@ -81,6 +81,16 @@ const std::string playlistElementIdName = "playlistElementId";
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
const std::string relativeOffsetName = "relativeOffset";
|
const std::string relativeOffsetName = "relativeOffset";
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* The name of the relative offset member in the XML-RPC parameter structure
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
const std::string clipStartName = "clipStart";
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* The name of the relative offset member in the XML-RPC parameter structure
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
const std::string clipEndName = "clipEnd";
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
/*------------------------------------------------------------------------------
|
||||||
* The name of the from member in the XML-RPC parameter structure.
|
* The name of the from member in the XML-RPC parameter structure.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
|
@ -272,6 +282,42 @@ XmlRpcTools :: extractAudioClipId(XmlRpc::XmlRpcValue & xmlRpcValue)
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Extract the relative offset from an XML-RPC function call parameter
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
Ptr<time_duration>::Ref
|
||||||
|
XmlRpcTools :: extractClipStart(XmlRpc::XmlRpcValue & xmlRpcValue)
|
||||||
|
throw (std::invalid_argument)
|
||||||
|
{
|
||||||
|
if (!xmlRpcValue.hasMember(clipStartName)
|
||||||
|
|| xmlRpcValue[clipStartName].getType()
|
||||||
|
!= XmlRpc::XmlRpcValue::TypeInt) {
|
||||||
|
throw std::invalid_argument("missing clip start argument");
|
||||||
|
}
|
||||||
|
|
||||||
|
Ptr<time_duration>::Ref clipStart(new time_duration(0,0,
|
||||||
|
int(xmlRpcValue[clipStartName]), 0));
|
||||||
|
return clipStart;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------------
|
||||||
|
* Extract the relative offset from an XML-RPC function call parameter
|
||||||
|
*----------------------------------------------------------------------------*/
|
||||||
|
Ptr<time_duration>::Ref
|
||||||
|
XmlRpcTools :: extractClipEnd(XmlRpc::XmlRpcValue & xmlRpcValue)
|
||||||
|
throw (std::invalid_argument)
|
||||||
|
{
|
||||||
|
if (!xmlRpcValue.hasMember(clipEndName)
|
||||||
|
|| xmlRpcValue[clipEndName].getType()
|
||||||
|
!= XmlRpc::XmlRpcValue::TypeInt) {
|
||||||
|
throw std::invalid_argument("missing clip end argument");
|
||||||
|
}
|
||||||
|
|
||||||
|
Ptr<time_duration>::Ref clipEnd(new time_duration(0,0,
|
||||||
|
int(xmlRpcValue[clipEndName]), 0));
|
||||||
|
return clipEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
/*------------------------------------------------------------------------------
|
||||||
* Extract the relative offset from an XML-RPC function call parameter
|
* Extract the relative offset from an XML-RPC function call parameter
|
||||||
|
|
|
@ -134,7 +134,19 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void playContext(){
|
void playContext(){
|
||||||
gst_element_set_state (m_pipeline, GST_STATE_PLAYING);
|
GstStateChangeReturn st = gst_element_set_state (m_pipeline, GST_STATE_PLAYING);
|
||||||
|
if(NULL != m_audioDescription)
|
||||||
|
{
|
||||||
|
//enforce PLAYING state in case this was an asynch state change
|
||||||
|
//this is essential for seek to succeed
|
||||||
|
if(GST_STATE_CHANGE_ASYNC == st)
|
||||||
|
{
|
||||||
|
GstState state, pending;
|
||||||
|
gst_element_get_state (m_pipeline, &state, &pending, 2000000000);//just in case, do not wait for more than 2 sec
|
||||||
|
}
|
||||||
|
gst_element_seek(m_pipeline, 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET,
|
||||||
|
m_audioDescription->m_clipBegin*GST_NSECOND, GST_SEEK_TYPE_SET, m_audioDescription->m_clipEnd*GST_NSECOND);
|
||||||
|
}
|
||||||
g_object_set(G_OBJECT(m_volume), "volume", 1.0, NULL);
|
g_object_set(G_OBJECT(m_volume), "volume", 1.0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,7 +371,7 @@ private:
|
||||||
* Prepare animations bin.
|
* Prepare animations bin.
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
bool prepareAnimations(){
|
bool prepareAnimations(){
|
||||||
if(m_audioDescription && m_audioDescription->m_animations.size() > 0){
|
if(m_audioDescription && m_audioDescription->m_animations.size() > 0){
|
||||||
m_ctrl = gst_controller_new (G_OBJECT (m_volume), "volume", NULL);
|
m_ctrl = gst_controller_new (G_OBJECT (m_volume), "volume", NULL);
|
||||||
if (m_ctrl == NULL) {
|
if (m_ctrl == NULL) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -166,6 +166,8 @@ class M3uPlaylist {
|
||||||
$gunid2 = StoredFile::CreateGunid();
|
$gunid2 = StoredFile::CreateGunid();
|
||||||
$length = Playlist::secondsToPlaylistTime($length);
|
$length = Playlist::secondsToPlaylistTime($length);
|
||||||
$offset = '???';
|
$offset = '???';
|
||||||
|
$clipStart = '???';
|
||||||
|
$clipEnd = '???';
|
||||||
$uri_h = preg_replace("|--|", "d;d;", htmlspecialchars("$uri"));
|
$uri_h = preg_replace("|--|", "d;d;", htmlspecialchars("$uri"));
|
||||||
if (preg_match("|\.([a-zA-Z0-9]+)$|", $uri, $va)) {
|
if (preg_match("|\.([a-zA-Z0-9]+)$|", $uri, $va)) {
|
||||||
switch (strtolower($ext = $va[1])) {
|
switch (strtolower($ext = $va[1])) {
|
||||||
|
@ -184,7 +186,7 @@ class M3uPlaylist {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$res .= "$ind2<playlistElement id=\"$gunid\" relativeOffset=\"$offset\">\n".
|
$res .= "$ind2<playlistElement id=\"$gunid\" relativeOffset=\"$offset\" clipStart=\"$clipStart\" clipEnd=\"$clipEnd\">\n".
|
||||||
$acOrPl.
|
$acOrPl.
|
||||||
"$ind2</playlistElement>\n";
|
"$ind2</playlistElement>\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -414,6 +414,16 @@ class Playlist extends StoredFile {
|
||||||
if (PEAR::isError($offArr)) {
|
if (PEAR::isError($offArr)) {
|
||||||
return $offArr;
|
return $offArr;
|
||||||
}
|
}
|
||||||
|
// get clipStart:
|
||||||
|
$startArr = $this->md->getMetadataElement('clipStart', $elId);
|
||||||
|
if (PEAR::isError($startArr)) {
|
||||||
|
return $startArr;
|
||||||
|
}
|
||||||
|
// get clipEnd:
|
||||||
|
$endArr = $this->md->getMetadataElement('clipEnd', $elId);
|
||||||
|
if (PEAR::isError($endArr)) {
|
||||||
|
return $endArr;
|
||||||
|
}
|
||||||
$offsetId = $offArr[0]['mid'];
|
$offsetId = $offArr[0]['mid'];
|
||||||
$offset = $offArr[0]['value'];
|
$offset = $offArr[0]['value'];
|
||||||
// get audioClip:
|
// get audioClip:
|
||||||
|
@ -460,10 +470,6 @@ class Playlist extends StoredFile {
|
||||||
"Playlist::recalculateTimes: fadeIn too big");
|
"Playlist::recalculateTimes: fadeIn too big");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// $peArr[] = array('id'=>$elId, 'gunid'=>$plElGunid, 'len'=>$acLen,
|
|
||||||
// 'offset'=>$offset, 'offsetId'=>$offsetId,
|
|
||||||
// 'fadeIn'=>$fadeIn, 'fadeOut'=>$fadeOut);
|
|
||||||
// set relativeOffset:
|
|
||||||
if ($len > 0) {
|
if ($len > 0) {
|
||||||
$len = $len - $fadeInS;
|
$len = $len - $fadeInS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -276,7 +276,9 @@ class SmilPlaylistAudioElement {
|
||||||
|
|
||||||
$title = basename($tree->attrs['src']->val);
|
$title = basename($tree->attrs['src']->val);
|
||||||
$offset = Playlist::secondsToPlaylistTime($tree->attrs['begin']->val);
|
$offset = Playlist::secondsToPlaylistTime($tree->attrs['begin']->val);
|
||||||
$res = "$ind<playlistElement id=\"$plElGunid\" relativeOffset=\"$offset\">\n".
|
$clipStart = Playlist::secondsToPlaylistTime($tree->attrs['clipStart']->val);
|
||||||
|
$clipEnd = Playlist::secondsToPlaylistTime($tree->attrs['clipEnd']->val);
|
||||||
|
$res = "$ind<playlistElement id=\"$plElGunid\" relativeOffset=\"$offset\" clipStart=\"$clipStart\" clipEnd=\"$clipEnd\">\n".
|
||||||
"$ind2<$type id=\"$acGunid\" playlength=\"$playlength\" title=\"$title\"/>\n".
|
"$ind2<$type id=\"$acGunid\" playlength=\"$playlength\" title=\"$title\"/>\n".
|
||||||
$fInfo.
|
$fInfo.
|
||||||
"$ind</playlistElement>\n";
|
"$ind</playlistElement>\n";
|
||||||
|
|
|
@ -29,7 +29,7 @@ $playlistFormat = array(
|
||||||
'optional'=>array('fadeInfo'),
|
'optional'=>array('fadeInfo'),
|
||||||
),
|
),
|
||||||
'attrs'=>array(
|
'attrs'=>array(
|
||||||
'required'=>array('id', 'relativeOffset'),
|
'required'=>array('id', 'relativeOffset', 'clipStart', 'clipEnd'),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'audioClip'=>array(
|
'audioClip'=>array(
|
||||||
|
|
|
@ -26,8 +26,8 @@ $mdefs = array(
|
||||||
"listMethods" => array('m'=>"system.listMethods", 'p'=>NULL, 't'=>NULL),
|
"listMethods" => array('m'=>"system.listMethods", 'p'=>NULL, 't'=>NULL),
|
||||||
"AddAudioClipToPlaylistMethod" => array(
|
"AddAudioClipToPlaylistMethod" => array(
|
||||||
'm'=>'addAudioClipToPlaylist',
|
'm'=>'addAudioClipToPlaylist',
|
||||||
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/, 'audioClipId'/*string*/, 'relativeOffset'/*int*/),
|
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/, 'audioClipId'/*string*/, 'relativeOffset'/*int*/, 'clipStart'/*int*/, 'clipEnd'/*int*/),
|
||||||
't'=>array('string', 'string', 'string', 'int'),
|
't'=>array('string', 'string', 'string', 'int', 'int', 'int'),
|
||||||
'r'=>array('playlistElementId'/*string*/),
|
'r'=>array('playlistElementId'/*string*/),
|
||||||
'e'=>array(
|
'e'=>array(
|
||||||
'301'=>'invalid argument format',
|
'301'=>'invalid argument format',
|
||||||
|
|
|
@ -1175,7 +1175,7 @@ GLiveSupport :: cancelEditedPlaylist(void)
|
||||||
*----------------------------------------------------------------------------*/
|
*----------------------------------------------------------------------------*/
|
||||||
void
|
void
|
||||||
LiveSupport :: GLiveSupport ::
|
LiveSupport :: GLiveSupport ::
|
||||||
GLiveSupport :: addToPlaylist(Ptr<const UniqueId>::Ref id)
|
GLiveSupport :: addToPlaylist(Ptr<UniqueId>::Ref id)
|
||||||
throw (XmlRpcException)
|
throw (XmlRpcException)
|
||||||
{
|
{
|
||||||
if (!editedPlaylist.get()) {
|
if (!editedPlaylist.get()) {
|
||||||
|
@ -1188,7 +1188,11 @@ GLiveSupport :: addToPlaylist(Ptr<const UniqueId>::Ref id)
|
||||||
editedPlaylist->addPlaylist(playlist, editedPlaylist->getPlaylength());
|
editedPlaylist->addPlaylist(playlist, editedPlaylist->getPlaylength());
|
||||||
} else if (existsAudioClip(id)) {
|
} else if (existsAudioClip(id)) {
|
||||||
Ptr<AudioClip>::Ref clip = getAudioClip(id);
|
Ptr<AudioClip>::Ref clip = getAudioClip(id);
|
||||||
editedPlaylist->addAudioClip(clip, editedPlaylist->getPlaylength());
|
Ptr<UniqueId>::Ref elid = editedPlaylist->addAudioClip(clip, editedPlaylist->getPlaylength());
|
||||||
|
|
||||||
|
//TODO: for testing only!!!!!!!!!
|
||||||
|
// editedPlaylist->setClipStart(elid, Ptr<time_duration>::Ref(new time_duration(seconds(5))));
|
||||||
|
// editedPlaylist->setClipEnd(elid, Ptr<time_duration>::Ref(new time_duration(seconds(10))));
|
||||||
}
|
}
|
||||||
|
|
||||||
masterPanel->updatePlaylistWindow();
|
masterPanel->updatePlaylistWindow();
|
||||||
|
|
|
@ -906,7 +906,7 @@ class GLiveSupport : public LocalizedConfigurable,
|
||||||
* @see #releaseEditedPlaylist
|
* @see #releaseEditedPlaylist
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
addToPlaylist(Ptr<const UniqueId>::Ref id)
|
addToPlaylist(Ptr<UniqueId>::Ref id)
|
||||||
throw (XmlRpcException);
|
throw (XmlRpcException);
|
||||||
/**
|
/**
|
||||||
* Save the currently edited playlist in storage.
|
* Save the currently edited playlist in storage.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue