draft play process structure; clarify handling of multiple channels

This commit is contained in:
Fischlurch 2011-06-22 02:42:50 +02:00
parent a19562942c
commit dea1fa57a2
13 changed files with 607 additions and 70 deletions

BIN
doc/devel/uml/fig143877.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
doc/devel/uml/fig144005.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -52,6 +52,9 @@ namespace engine {
/** /**
* Handle for a buffer for processing data, abstracting away the actual implementation. * Handle for a buffer for processing data, abstracting away the actual implementation.
* The real buffer pointer can be retrieved by dereferencing this smart-handle class. * The real buffer pointer can be retrieved by dereferencing this smart-handle class.
*
* @todo as of 6/2011 it isn't clear how buffer handles are actually created
* and how the lifecycle (and memory) management works
*/ */
struct BuffHandle struct BuffHandle
: lib::BoolCheckable<BuffHandle> : lib::BoolCheckable<BuffHandle>
@ -78,15 +81,24 @@ namespace engine {
} }
//////////////////////TODO: the whole logic how to create a BuffHandle needs to be solved in a more clever way. --> Ticket 249 //////////////////////TODO: the whole logic how to create a BuffHandle needs to be solved in a more clever way. --> TICKET #249
BuffHandle() BuffHandle()
: pBuffer_(0), : pBuffer_(0),
sourceID_(0) sourceID_(0)
{ } { }
/**
* @deprecated placeholder implementation
* @todo rework the Lifecycle handling of buffers //////////TICKET #249
*/
BuffHandle(PBuff existingBuffer)
: pBuffer_(existingBuffer)
, sourceID_(0)
{ }
private: private:
PBuff pBuffer_; PBuff pBuffer_;
long sourceID_; long sourceID_; ////TICKET #249 this is a placeholder for a "type-like information", to be used for lifecycle management and sanity checks....
}; };

View file

@ -172,6 +172,7 @@ namespace engine {
}; };
////////////TICKET #249 this strategy should better be hidden within the BuffHanle ctor (and type-erased after creation)
struct AllocBufferFromParent ///< using the parent StateAdapter for buffer allocations struct AllocBufferFromParent ///< using the parent StateAdapter for buffer allocations
: Invocation : Invocation
{ {

View file

@ -245,7 +245,7 @@ namespace config {
template<class NEXT> template<class NEXT>
struct ReleaseBuffers : NEXT /////////////////TODO: couldn't this be done automatically by BuffTab's dtor?? struct ReleaseBuffers : NEXT /////////////////TODO: couldn't this be done automatically by BuffTab's dtor??
{ ///////////////// this would require BuffHandle to be a smart ref.... { ///////////////// this would require BuffHandle to be a smart ref.... --> ///TICKET #249
BuffHandle BuffHandle
step (Invocation& ivo) step (Invocation& ivo)
{ {

View file

@ -40,6 +40,7 @@
#include "lib/handle.hpp" #include "lib/handle.hpp"
#include "lib/time/timevalue.hpp" #include "lib/time/timevalue.hpp"
#include "proc/engine/buffhandle.hpp" #include "proc/engine/buffhandle.hpp"
#include "lib/iter-source.hpp"
//#include "lib/sync.hpp" //#include "lib/sync.hpp"
#include <boost/noncopyable.hpp> #include <boost/noncopyable.hpp>
@ -53,6 +54,7 @@ namespace proc {
namespace play { namespace play {
using ::engine::BuffHandle; using ::engine::BuffHandle;
using lib::time::Time;
//using std::string; //using std::string;
//using std::vector; //using std::vector;
@ -94,6 +96,27 @@ namespace play {
public: public:
virtual ~OutputSlot(); virtual ~OutputSlot();
typedef lib::IterSource<BufferHandoverSink>::iterator Opened_BufferHandoverSinks;
typedef lib::IterSource<SharedBufferSink>::iterator Opened_SharedBufferSinks;
template<class SINK>
struct Allocation
{
typedef typename lib::IterSource<SINK>::iterator OpenedSinks;
OpenedSinks getOpenedSinks();
bool isActive();
/////TODO add here the getters for timing constraints
};
bool isFree() const;
Allocation<BufferHandoverSink>
allocate();
private: private:
}; };

View file

@ -1,6 +1,6 @@
format 58 format 58
"ProcessingLayer" // ProcessingLayer "ProcessingLayer" // ProcessingLayer
revision 26 revision 27
modified_by 5 "hiv" modified_by 5 "hiv"
// class settings // class settings
//class diagram settings //class diagram settings
@ -30,6 +30,8 @@ format 58
package_ref 129029 // Control package_ref 129029 // Control
package_ref 133637 // Play
package_ref 128261 // MObject package_ref 128261 // MObject
package_ref 128389 // RenderEngine package_ref 128389 // RenderEngine
@ -330,8 +332,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 131333 // ouput
end end
end end
@ -350,8 +350,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 131589 //
end end
end end
@ -360,8 +358,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 131717 // vid_a
end end
end end
@ -370,8 +366,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 131461 // input
end end
end end
@ -430,8 +424,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 133893 // HUE
end end
end end
@ -440,8 +432,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 134021 // vid_a
end end
end end
@ -464,8 +454,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 133253 // HUE
end end
end end
@ -474,8 +462,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 132869 // input
end end
end end
@ -506,8 +492,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 133125 // ouput
end end
end end
@ -516,8 +500,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 132613 // devnull
end end
end end
@ -534,8 +516,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 134021 // vid_a
end end
end end
@ -558,8 +538,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 134149 // input
end end
end end
@ -568,8 +546,6 @@ format 58
attributes attributes
end end
relations relations
relation_ref 135429 // <unidirectional association>
classinstance_ref 134405 // ouput
end end
end end

348
uml/lumiera/133637 Normal file
View file

@ -0,0 +1,348 @@
format 58
"Play" // ProcessingLayer::Play
revision 1
modified_by 5 "hiv"
// class settings
//class diagram settings
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
//use case diagram settings
package_name_in_tab default show_context default auto_label_position default draw_all_relations default class_drawing_mode default shadow default show_stereotype_properties default
//sequence diagram settings
show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default
//collaboration diagram settings
show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default show_stereotype_properties default
//object diagram settings
write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
//component diagram settings
package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
//deployment diagram settings
package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
draw_component_as_icon default show_component_req_prov default show_component_rea default show_stereotype_properties default
//state diagram settings
package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
show_activities default region_horizontally default drawing_language default show_stereotype_properties default
//activity diagram settings
package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
show_infonote default drawing_language default show_stereotype_properties default
classview 136837 "PlayOut"
//class diagram settings
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
//collaboration diagram settings
show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default show_stereotype_properties default
//object diagram settings
write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
//sequence diagram settings
show_full_operations_definition default write_horizontally default class_drawing_mode default drawing_language default draw_all_relations default shadow default show_stereotype_properties default
//state diagram settings
package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
show_activities default region_horizontally default drawing_language default show_stereotype_properties default
//class settings
//activity diagram settings
package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
show_infonote default drawing_language default show_stereotype_properties default
classdiagram 143877 "Player Entities"
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
size A4
end
objectdiagram 144005 "Play Process Structure"
write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default show_stereotype_properties default
size A4
end
class 176133 "OutputSlot"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
end
class 176261 "Controller"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
end
class 176389 "PlayProcess"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 216837 // <directional composition>
relation 205701 *-->
a role_name "" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
"
classrelation_ref 216837 // <directional composition>
b parent class_ref 177285 // Feed
end
end
class 176517 "OutputManager"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 216709 // <directional aggregation>
relation 205573 o-->
a role_name "" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value};
"
classrelation_ref 216709 // <directional aggregation>
b parent class_ref 176133 // OutputSlot
end
end
class 176645 "OutputDirector"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 216581 // <realization>
relation 205445 -_-|>
a public
cpp default "${type}"
classrelation_ref 216581 // <realization>
b parent class_ref 176517 // OutputManager
end
end
class 176773 "ModelPort"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
end
class 176901 "CalcStream"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 217093 // <unidirectional association>
relation 205957 --->
a role_name "" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${type}* ${name}${value};
"
classrelation_ref 217093 // <unidirectional association>
b parent class_ref 177029 // Dispatcher
end
end
class 177029 "Dispatcher"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
end
class 177157 "PlayService"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
end
classinstance 145669 ""
type class_ref 176261 // Controller
attributes
end
relations
end
end
classinstance 145797 ""
type class_ref 176389 // PlayProcess
attributes
end
relations
end
end
class 177285 "Feed"
visibility package
cpp_decl "${comment}${template}class ${name}${inherit}
{
${members} };
${inlines}
"
java_decl ""
php_decl ""
python_2_2 python_decl ""
idl_decl ""
explicit_switch_type ""
classrelation 216965 // <directional composition>
relation 205829 *-->
a role_name "" protected
cpp default " ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
"
classrelation_ref 216965 // <directional composition>
b parent class_ref 176901 // CalcStream
end
end
classinstance 145925 ""
type class_ref 177285 // Feed
attributes
end
relations
end
end
classinstance 146053 ""
type class_ref 177285 // Feed
attributes
end
relations
end
end
classinstance 146181 "video"
type class_ref 176901 // CalcStream
attributes
end
relations
end
end
classinstance 146309 "video"
type class_ref 176901 // CalcStream
attributes
end
relations
end
end
classinstance 146437 "sound-W"
type class_ref 176901 // CalcStream
attributes
end
relations
end
end
classinstance 146565 "sound-X"
type class_ref 176901 // CalcStream
attributes
end
relations
end
end
classinstance 146693 "sound-Z"
type class_ref 176901 // CalcStream
attributes
end
relations
end
end
classinstance 146821 ""
type class_ref 176773 // ModelPort
attributes
end
relations
end
end
classinstance 146949 ""
type class_ref 176773 // ModelPort
attributes
end
relations
end
end
classinstance 147077 ""
type class_ref 176133 // OutputSlot
attributes
end
relations
end
end
classinstance 147205 ""
type class_ref 176133 // OutputSlot
attributes
end
relations
end
end
end
end

View file

@ -0,0 +1,88 @@
format 58
classcanvas 128005 class_ref 176133 // OutputSlot
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 349 106 2000
end
classcanvas 128133 class_ref 176261 // Controller
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 71 172 2000
end
classcanvas 128261 class_ref 176389 // PlayProcess
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 143 222 2000
end
classcanvas 128389 class_ref 176517 // OutputManager
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 472 47 2000
end
classcanvas 128517 class_ref 176645 // OutputDirector
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 474 165 2000
end
classcanvas 129541 class_ref 176773 // ModelPort
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 355 266 2000
end
classcanvas 129669 class_ref 176901 // CalcStream
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 207 380 2000
end
classcanvas 129797 class_ref 177029 // Dispatcher
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 355 381 2000
end
fragment 130053 "output management"
xyzwh 299 17 2000 324 218
end
fragment 130181 "Model / Fixture"
xyzwh 299 239 1995 323 91
end
fragment 130309 "Player"
xyzwh 16 87 1990 274 243
end
classcanvas 130437 class_ref 177157 // PlayService
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 40 118 2005
end
fragment 130565 "Engine"
xyzwh 16 346 1995 606 208
end
classcanvas 130693 class_ref 177285 // Feed
draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_members_multiplicity default show_members_initialization default member_max_width 0 show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default show_stereotype_properties default
xyz 218 273 2000
end
relationcanvas 128645 relation_ref 205445 // <realization>
from ref 128517 z 1999 to ref 128389
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 128773 relation_ref 205573 // <directional aggregation>
geometry HVH
from ref 128389 z 1999 to point 439 64
line 129285 z 1999 to point 439 123
line 129413 z 1999 to ref 128005
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 130821 relation_ref 205701 // <directional composition>
geometry VH
from ref 128261 z 1999 to point 178 290
line 130949 z 1999 to ref 130693
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 131077 relation_ref 205829 // <directional composition>
from ref 130693 z 1999 to ref 129669
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
relationcanvas 131205 relation_ref 205957 // <unidirectional association>
from ref 129669 z 1999 to ref 129797
no_role_a no_role_b
no_multiplicity_a no_multiplicity_b
end
line 131333 -_-_ geometry VH
from ref 128133 z 1999 to point 99 239
line 131461 z 1999 to ref 128261
end

View file

@ -0,0 +1,94 @@
format 58
classinstancecanvas 128005 classinstance_ref 145669 //
xyz 41 85 2000
end
classinstancecanvas 128133 classinstance_ref 145797 //
xyz 105 142 2000
end
classinstancecanvas 128261 classinstance_ref 145925 //
xyz 171 173 2000
end
classinstancecanvas 128389 classinstance_ref 146053 //
xyz 171 240 2000
end
classinstancecanvas 128517 classinstance_ref 146181 // video
xyz 233 194 2000 color lightgreen
end
classinstancecanvas 128645 classinstance_ref 146309 // video
xyz 233 216 2000 color lightgreen
end
classinstancecanvas 128773 classinstance_ref 146437 // sound-W
xyz 233 269 2000 color lightgreen
end
classinstancecanvas 128901 classinstance_ref 146565 // sound-X
xyz 233 291 2000 color lightgreen
end
classinstancecanvas 129029 classinstance_ref 146693 // sound-Z
xyz 233 313 2000 color lightgreen
end
classinstancecanvas 129157 classinstance_ref 146693 // sound-Z
xyz 233 335 2000 color lightgreen
end
classinstancecanvas 132101 classinstance_ref 146821 //
xyz 420 269 2000 color lightblue
end
classinstancecanvas 132229 classinstance_ref 146949 //
xyz 420 194 2000 color lightblue
end
note 132357 "stateless (functional)"
xyzwh 348 140 2000 124 35
note 132485 "stateful"
color verylightorange xyzwh 131 85 2000 72 36
classinstancecanvas 132613 classinstance_ref 147077 //
xyz 233 23 2000
end
classinstancecanvas 132741 classinstance_ref 147205 //
xyz 233 46 2000
end
objectlinkcanvas 129285 norel
geometry VH
from ref 128133 z 1999 to point 139 181
line 129413 z 1999 to ref 128261
no_role_a no_role_b
objectlinkcanvas 129541 norel
geometry VH
from ref 128133 z 1999 to point 139 248
line 129797 z 1999 to ref 128389
no_role_a no_role_b
objectlinkcanvas 129925 norel
geometry VH
from ref 128261 z 1999 to point 194 202
line 130053 z 1999 to ref 128517
no_role_a no_role_b
objectlinkcanvas 130181 norel
geometry VH
from ref 128261 z 1999 to point 194 224
line 130309 z 1999 to ref 128645
no_role_a no_role_b
objectlinkcanvas 130437 norel
geometry VH
from ref 128389 z 1999 to point 194 277
line 130565 z 1999 to ref 128773
no_role_a no_role_b
objectlinkcanvas 130693 norel
geometry VH
from ref 128389 z 1999 to point 194 299
line 130821 z 1999 to ref 128901
no_role_a no_role_b
objectlinkcanvas 130949 norel
geometry VH
from ref 128389 z 1999 to point 194 321
line 131077 z 1999 to ref 129029
no_role_a no_role_b
objectlinkcanvas 131205 norel
geometry VH
from ref 128389 z 1999 to point 194 343
line 131333 z 1999 to ref 129157
no_role_a no_role_b
objectlinkcanvas 131845 norel
geometry VH
from ref 128005 z 1999 to point 68 150
line 131973 z 1999 to ref 128133
no_role_a no_role_b
end

View file

@ -4,12 +4,10 @@ diagrams
631 352 100 4 0 0 631 352 100 4 0 0
objectdiagram_ref 138885 // ModelAssetRelations objectdiagram_ref 138885 // ModelAssetRelations
730 488 100 4 0 0 730 488 100 4 0 0
classdiagram_ref 142725 // Time flavours classdiagram_ref 143877 // Player Entities
595 646 100 4 0 0 663 648 100 4 0 0
classdiagram_ref 131205 // Struct-Asset Relations active objectdiagram_ref 144005 // Play Process Structure
530 608 100 4 0 0 562 424 100 4 0 0
active classdiagram_ref 130309 // Asset Kinds
855 805 100 4 0 0
end end
show_stereotypes show_stereotypes
selected selected
@ -17,36 +15,13 @@ selected
open open
package_ref 128005 // design package_ref 128005 // design
class_ref 160389 // VirtualMedia
class_ref 136837 // Proc
class_ref 152197 // Sequence
class_ref 160901 // Timeline
class_ref 174981 // Viewer
class_ref 139269 // DoRecurse
class_ref 162821 // TypedID::Link
classview_ref 128389 // Controller Workings classview_ref 128389 // Controller Workings
class_ref 139653 // Session classview_ref 136837 // PlayOut
class_ref 145541 // Timeline
class_ref 128133 // Seq
class_ref 160517 // Root
class_ref 128389 // Track
class_ref 152325 // Binding
class_ref 129797 // ExplicitPlacement
class_ref 129029 // Effect
class_ref 139909 // LocatingPin
class_ref 152453 // PlacementRef
classrelation_ref 178437 // <realization>
class_ref 153733 // QueryFocusStack class_ref 153733 // QueryFocusStack
usecaseview_ref 128261 // config examples usecaseview_ref 128261 // config examples
package_ref 128389 // RenderEngine package_ref 128389 // RenderEngine
classdiagram_ref 142725 // Time flavours
class_ref 134917 // Time package_ref 129157 // BackendLayer
class_ref 168837 // Duration
class_ref 169221 // TimeGrid
class_ref 170373 // TimeVar
class_ref 170501 // QuTimeSpan
classview_ref 128645 // Service Components
classview_ref 128266 // SmartPointers
end end
end end

View file

@ -1,6 +1,6 @@
format 58 format 58
"lumiera" "lumiera"
revision 69 revision 70
modified_by 5 "hiv" modified_by 5 "hiv"
cpp_root_dir "../../src/" cpp_root_dir "../../src/"

View file

@ -3037,7 +3037,7 @@ __Note__: nothing within the PlacementIndex requires the root object to be of a
</pre> </pre>
</div> </div>
<div title="MultichannelMedia" modifier="Ichthyostega" modified="201003140238" created="200709200255" tags="design img" changecount="12"> <div title="MultichannelMedia" modifier="Ichthyostega" modified="201106212255" created="200709200255" tags="design img" changecount="14">
<pre>Based on practical experiences, Ichthyo tends to consider Multichannel Media as the base case, while counting media files providing just one single media stream as exotic corner cases. This may seem counter intuitive at first sight; you should think of it as an attempt to avoid right from start some of the common shortcomings found in many video editors, especially <pre>Based on practical experiences, Ichthyo tends to consider Multichannel Media as the base case, while counting media files providing just one single media stream as exotic corner cases. This may seem counter intuitive at first sight; you should think of it as an attempt to avoid right from start some of the common shortcomings found in many video editors, especially
* having to deal with keeping a &quot;link&quot; between audio and video clips * having to deal with keeping a &quot;link&quot; between audio and video clips
* silly limitations on the supported audio setups (e.g. &quot;sound is mono, stereo or Dolby-5.1&quot;) * silly limitations on the supported audio setups (e.g. &quot;sound is mono, stereo or Dolby-5.1&quot;)
@ -3070,6 +3070,12 @@ While the general approach and reasoning remains valid, a lot of the details loo
* while the asset related parts remain as specified, we get a distinct ChannelConfig asset instead of the clip asset (which seems to be redundant) * while the asset related parts remain as specified, we get a distinct ChannelConfig asset instead of the clip asset (which seems to be redundant)
* either the ~ClipMO referres this ChannelConfig asset &amp;mdash; or in case of the VirtualClip a BindingMO takes this role. Clip Asset and MO could be joined into a single entity * either the ~ClipMO referres this ChannelConfig asset &amp;mdash; or in case of the VirtualClip a BindingMO takes this role. Clip Asset and MO could be joined into a single entity
* as the BindingMO is also used to implement the top-level timelines, the treatment of global and local pipes is united * as the BindingMO is also used to implement the top-level timelines, the treatment of global and local pipes is united
* every pipe (bus) should be able to carry multiple channels, //but with the limitation to only a single media StreamType//
* this &quot;multichannel-of-same-kind&quot; capability carries over to the ModelPort entries and even the OutputSlot elements
* only when allocating / &quot;opening&quot; an OutputSlot, we get multiple handles for plain single channels.
* this can be considered the breaking point, where we enter the realm of the render engine. Here, indeed, only single channels are processed
</pre> </pre>
</div> </div>
<div title="NodeConfiguration" modifier="Ichthyostega" modified="200909041807" created="200909041806" tags="spec Builder Rendering" changecount="2"> <div title="NodeConfiguration" modifier="Ichthyostega" modified="200909041807" created="200909041806" tags="spec Builder Rendering" changecount="2">
@ -3258,7 +3264,7 @@ For a viewer widget in the GUI this yields exactly the expeted behaviour, but in
{{red{Question: is it possible to retrieve a slot from another peripheral node?}}} {{red{Question: is it possible to retrieve a slot from another peripheral node?}}}
</pre> </pre>
</div> </div>
<div title="OutputManager" modifier="Ichthyostega" modified="201106210222" created="201106122359" tags="Player Model def" changecount="6"> <div title="OutputManager" modifier="Ichthyostega" modified="201106212317" created="201106122359" tags="Player Model def" changecount="7">
<pre>The term &amp;raquo;''Output Manager''&amp;laquo; might denote two things: first, there is an {{{proc::play::OutputManager}}} interface, which can be exposed by several components within the application, most notably the [[viewer elements|ViewerAsset]]. And then, there is &quot;the&quot; global output manager, the OutputDirector, which finally tracks all registered OutputSlot elements and thus is the gatekeeper for any output leaving the application. <pre>The term &amp;raquo;''Output Manager''&amp;laquo; might denote two things: first, there is an {{{proc::play::OutputManager}}} interface, which can be exposed by several components within the application, most notably the [[viewer elements|ViewerAsset]]. And then, there is &quot;the&quot; global output manager, the OutputDirector, which finally tracks all registered OutputSlot elements and thus is the gatekeeper for any output leaving the application.
&amp;rarr; see [[output management overview|OutputManagement]] &amp;rarr; see [[output management overview|OutputManagement]]
@ -3267,8 +3273,12 @@ For a viewer widget in the GUI this yields exactly the expeted behaviour, but in
!Role of an output manager !Role of an output manager
The output manager interface describes an entity handling two distinct concerns, tied together within a local //scope.// The output manager interface describes an entity handling two distinct concerns, tied together within a local //scope.//
* a ''mapping'' to resolve a ModelPort (given as ~Pipe-ID) into an OutputSlot (or several in case of multichannel media) * a ''mapping'' to resolve a ModelPort (given as ~Pipe-ID) into an OutputSlot
* the ''registration'' and management of possible output slots, thereby creating a preferred local mapping for future connections * the ''registration'' and management of possible output slots, thereby creating a preferred local mapping for future connections
Note that an OutputSlot acts as a unit for registration and also for allocating / &quot;opening&quot; an output, while generally there might still be multiple physical outputs grouped into a single slot. This is relevant especially for sound output. A single slot is just the ability to allocate output ports up to a given limit (e.g. 2 for a stereo device, or 6 for a 5.1 device). These multiple channels are allways connected following a natural channel ordering. Thus the mapping is a simple 1:1 association from pipe to slot, assuming that the media types are compatible (and this has been checked already on a higher level).
The //registration//&amp;nbsp; of an output slot installs a functor or association rule, which later on allows to claim and connect up to a preconfigured number of channels. This allocation or usage of a slot is exclusive (i.e. only a single client at a time can allocate a slot, even if not using all the possible channels). Each output manager instance may or may not be configured with a //fall-back rule:// when no association or mapping can be established locally, the connection request might be passed down to the global OutputDirector. Again, we can expect this to be the standard behaviour for sound, while video likely will rather be handled locally, e.g. within a GUI widget (but we're not bound to configure it exactly this way)
</pre> </pre>
</div> </div>
<div title="OutputMapping" modifier="Ichthyostega" modified="201106180044" created="201011080238" tags="Model spec draft" changecount="29"> <div title="OutputMapping" modifier="Ichthyostega" modified="201106180044" created="201011080238" tags="Model spec draft" changecount="29">
@ -3303,12 +3313,12 @@ Thus the mapping is a copyable value object, based on a associative array. It ma
First and foremost, mapping can be seen as a //functional abstraction.// As it's used at implementation level, encapsulation of detail types in't the primary concern, so it's a candidate for generic programming: For each of those use cases outlined above, a distinct mapping type is created by instantiating the {{{OutputMapping&lt;DEF&gt;}}} template with a specifically tailored definition context ({{{DEF}}}), which takes on the role of a strategy. Individual instances of this concrete mapping type may be default created and copied freely. This instantiation process includes picking up the concrete result type and building a functor object for resolving on the fly. Thus, in the way typical for generic programming, the more involved special details are moved out of sight, while being still in scope for the purpose of inlining. But there //is// a concern better to be encapsulated and concealed at the usage site, namely accessing the rules system. Thus mapping leads itself to the frequently used implementation pattern where there is a generic frontend as header, calling into opaque functions embedded within a separate compilation unit. First and foremost, mapping can be seen as a //functional abstraction.// As it's used at implementation level, encapsulation of detail types in't the primary concern, so it's a candidate for generic programming: For each of those use cases outlined above, a distinct mapping type is created by instantiating the {{{OutputMapping&lt;DEF&gt;}}} template with a specifically tailored definition context ({{{DEF}}}), which takes on the role of a strategy. Individual instances of this concrete mapping type may be default created and copied freely. This instantiation process includes picking up the concrete result type and building a functor object for resolving on the fly. Thus, in the way typical for generic programming, the more involved special details are moved out of sight, while being still in scope for the purpose of inlining. But there //is// a concern better to be encapsulated and concealed at the usage site, namely accessing the rules system. Thus mapping leads itself to the frequently used implementation pattern where there is a generic frontend as header, calling into opaque functions embedded within a separate compilation unit.
</pre> </pre>
</div> </div>
<div title="OutputSlot" modifier="Ichthyostega" modified="201106180039" created="201106162339" tags="def Concepts Player spec" changecount="7"> <div title="OutputSlot" modifier="Ichthyostega" modified="201106212331" created="201106162339" tags="def Concepts Player spec" changecount="8">
<pre>Within the Lumiera player and output subsystem, actually sending data to an external output requires to allocate an ''output slot'' <pre>Within the Lumiera player and output subsystem, actually sending data to an external output requires to allocate an ''output slot''
This is the central metaphor for the organisation of actual (system level) outputs; using this concept allows to separate and abstract the data calculation and the organisation of playback and rendering from the specifics of the actual output sink. Actual output possibilities can be added and removed dynamically from various components (backend, GUI), all using the same resolution and mapping mechanisms (&amp;rarr; OutputManagement) This is the central metaphor for the organisation of actual (system level) outputs; using this concept allows to separate and abstract the data calculation and the organisation of playback and rendering from the specifics of the actual output sink. Actual output possibilities can be added and removed dynamically from various components (backend, GUI), all using the same resolution and mapping mechanisms (&amp;rarr; OutputManagement)
!Properties of an output slot !Properties of an output slot
Each OutputSlot is an unique and distinguishable entity. It corresponds explicitly to an external output, output file or similar capability accepting media content. First off, an output slot needs to be provided, configured and registered, using an implementation for the kind of media data to be output (sound, video) and the special circumstances of the output capability (render a file, display video in a GUI widget, send video to a full screen display, establish a Jack port, just use some kind of &quot;sound out&quot;). In some cases, this explicit registration may be extened to a //factory for additional output slots// -- to be used on demand. An output slot is always limited to a single kind of media, and to a single connection unit, but this connection may still be comprised of multiple channels (stereoscopic video, multichannel sound). Each OutputSlot is an unique and distinguishable entity. It corresponds explicitly to an external output, or a group of such outputs (e.g. left and right soundcard output channels), or an output file or similar capability accepting media content. First off, an output slot needs to be provided, configured and registered, using an implementation for the kind of media data to be output (sound, video) and the special circumstances of the output capability (render a file, display video in a GUI widget, send video to a full screen display, establish a Jack port, just use some kind of &quot;sound out&quot;). An output slot is always limited to a single kind of media, and to a single connection unit, but this connection may still be comprised of multiple channels (stereoscopic video, multichannel sound).
In order to be usable as //output sink,// an output slot needs to be //allocated,// i.e. tied to and locked for a specific client. At any time, there may be only a single client using a given output slot this way. To stress this point: output slots don't provide any kind of inherent mixing capability; any adaptation, mixing, overlaying and sharing needs to be done within the nodes network producing the output data fed to the slot. (yet some special kinds of external output capabilities -- e.g. the Jack audio connection system -- may still provide additional mixing capabilities, but that's beyond the scope of the Lumiera application) In order to be usable as //output sink,// an output slot needs to be //allocated,// i.e. tied to and locked for a specific client. At any time, there may be only a single client using a given output slot this way. To stress this point: output slots don't provide any kind of inherent mixing capability; any adaptation, mixing, overlaying and sharing needs to be done within the nodes network producing the output data fed to the slot. (yet some special kinds of external output capabilities -- e.g. the Jack audio connection system -- may still provide additional mixing capabilities, but that's beyond the scope of the Lumiera application)
@ -3328,6 +3338,9 @@ The assumption is for the client to have elaborate timing capabilities at his di
{{red{TODO 6/11}}}in this spec, both data exchange models exhibit a weakness regarding the releasing of buffers. At which time is it safe to release a buffer, when the handover didn't happen? Do we need an explicit callback, and how could this callback be triggered? This is similar to the problem of closing a network connection, i.e. the problem is generally unsolvable, but can be handled pragmatically within certain limits. {{red{TODO 6/11}}}in this spec, both data exchange models exhibit a weakness regarding the releasing of buffers. At which time is it safe to release a buffer, when the handover didn't happen? Do we need an explicit callback, and how could this callback be triggered? This is similar to the problem of closing a network connection, i.e. the problem is generally unsolvable, but can be handled pragmatically within certain limits.
!!!Lifecycle and storage
The concrete OutputSlot implementation is owned and managed by the facility actually providing this output possibility. For example, the GUI provides viewer widgets, while some sound output backend provides sound ports. This implementation object is required to stay alive as long as it's registered with some OutputManager. It needs to be deregistered explicitly prior to destruction -- and this deregistration may block until all clients using this slot are terminated. Beyond that, an output slot implementation is expected to handle all kinds of failures gracefully -- preferrably just emitting a signal (callback functor).
</pre> </pre>
</div> </div>
<div title="Overview" modifier="Ichthyostega" modified="200906071810" created="200706190300" tags="overview img" changecount="13"> <div title="Overview" modifier="Ichthyostega" modified="200906071810" created="200706190300" tags="overview img" changecount="13">
@ -4188,14 +4201,21 @@ We need a way of addressing existing [[pipes|Pipe]]. Besides, as the Pipes and T
&lt;&lt;tasksum end&gt;&gt; &lt;&lt;tasksum end&gt;&gt;
</pre> </pre>
</div> </div>
<div title="PlayProcess" modifier="Ichthyostega" modified="201105222321" created="201012181714" tags="def spec Player" changecount="5"> <div title="PlayProcess" modifier="Ichthyostega" modified="201106220026" created="201012181714" tags="def spec Player img" changecount="10">
<pre>With //play process//&amp;nbsp; we denote an ongoing effort to calculate a stream of frames for playback or rendering. <pre>With //play process//&amp;nbsp; we denote an ongoing effort to calculate a stream of frames for playback or rendering.
The play process is an conceptual entity linking together several activities in the [[Backend]] and the RenderEngine. Creating a play process is the central service provided by the [[player subsystem|Player]]: it maintains a registration entry for the process to keep track of associated entities, resources allocated and calls [[dispatched|FrameDispatcher]] as a consequence, and it wires and exposes a PlayController to serve as an interface and information hub. The play process is an conceptual entity linking together several activities in the [[Backend]] and the RenderEngine. Creating a play process is the central service provided by the [[player subsystem|Player]]: it maintains a registration entry for the process to keep track of associated entities, resources allocated and calls [[dispatched|FrameDispatcher]] as a consequence, and it wires and exposes a PlayController to serve as an interface and information hub.
''Note'': the player is in no way engaged in any of the actual calculation and management tasks necessary to make this [[stream of calculations|CalculationStream]] happen. The play process code contained within the player subsystem is largely comprised of organisational concerns and not especially performance critical. ''Note'': the player is in no way engaged in any of the actual calculation and management tasks necessary to make this [[stream of calculations|CalculationStream]] happen. The play process code contained within the player subsystem is largely comprised of organisational concerns and not especially performance critical.
* the [[Backend]] is responsible for scheduling and [[dispatching|Dispatcher]] the CalculationStream * the [[Backend]] is responsible for scheduling and [[dispatching|Dispatcher]] the CalculationStream
* the RenderEngine has the ability to cary out individual frame calculations * the RenderEngine has the ability to cary out individual frame calculations
* the OutputSlot exposed by the [[output manager|OutputManagement]] is responsible for accepting timed frame delivery</pre> * the OutputSlot exposed by the [[output manager|OutputManagement]] is responsible for accepting timed frame delivery
[&gt;img[Anatomy of a Play Process|uml/fig144005.png]]
!Anatomy of a Play Process
The Controller is exposed to the client and acts as frontend handle, while the play process body groups and manages all the various parts cooperating to generate output. For each of the participating global pipes we get a feed to drive that pipeline to deliver media of a specific kind.
Right within the play process, there is a separation into two realms, relying on different programming paradigms. Obviously the play controller is a state machine, and similarily the body object (play process) has a distinct operation state. Moreover, the individual objects hooked up at any given instance is a stateful variable. To the contrary, when we enter the realm of actual processing, operations are carried out in parallel, relying on stateless descriptor objects, hooked up into individual calculation jobs, to be scheduled as non-blocking units of operation. For each series of consecutive frames to be calculated, there is a descriptor object, the CalculationStream, which also links to a specificaly tailored dispatcher table, allowing to schedule the individual frame jobs. Whenever the controller determines a change in the playback plan (speed change, skip, scrubbing, looping, ...), a new CalculationStream is created, while the existing one is just used to mark any not-yet processed job as superseded.
</pre>
</div> </div>
<div title="PlayService" modifier="Ichthyostega" modified="201105221918" created="201105221900" tags="Player spec draft" changecount="9"> <div title="PlayService" modifier="Ichthyostega" modified="201105221918" created="201105221900" tags="Player spec draft" changecount="9">
<pre>The [[Player]] is an independent [[Subsystem]] within Lumiera, located at Proc-Layer level. A more precise term would be &quot;rendering and playback coordination subsystem&quot;. It provides the capability to generate media data, based on a high-level model object, and send this generated data to an OutputDesignation, creating an continuous and timing controlled output stream. Clients may utilise these functionality through the ''play service'' interface. <pre>The [[Player]] is an independent [[Subsystem]] within Lumiera, located at Proc-Layer level. A more precise term would be &quot;rendering and playback coordination subsystem&quot;. It provides the capability to generate media data, based on a high-level model object, and send this generated data to an OutputDesignation, creating an continuous and timing controlled output stream. Clients may utilise these functionality through the ''play service'' interface.