7dc3e85f542b21b164a06dfcb625a9523364c6ff
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

1) /* Blinker
2)    Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #include <set>
7) 
8) #include <BlinkenLib/BlinkenFrame.h>
9) 
10) #include "Stream.h"
11) #include "StreamRecv.h"
12) 
13) namespace Blinker {
14) 
15) /// constructor
Stefan Schuermans implemented stream printer...

Stefan Schuermans authored 13 years ago

16) Stream::Stream():
17)   m_pFrame(NULL)
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

18) {
19) }
20) 
21) /// virtual destructor
22) Stream::~Stream()
23) {
Stefan Schuermans implemented stream printer...

Stefan Schuermans authored 13 years ago

24)   // free current frame
25)   if (m_pFrame)
26)     BlinkenFrameFree(m_pFrame);
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

27) }
28) 
29) /**
30)  * @brief attach a stream receiver
31)  * @param[in] recv stream receiver to attach
32)  */
33) void Stream::attach(StreamRecv *recv)
34) {
35)   m_recvs.insert(recv);
Stefan Schuermans implemented stream printer...

Stefan Schuermans authored 13 years ago

36) 
37)   // send current frame to receiver
38)   if (m_pFrame)
Stefan Schuermans added stream name to stream...

Stefan Schuermans authored 12 years ago

39)     recv->setFrame(m_name, m_pFrame);
Stefan Schuermans implemented stream printer...

Stefan Schuermans authored 13 years ago

40)   else
Stefan Schuermans added stream name to stream...

Stefan Schuermans authored 12 years ago

41)     recv->setNoFrame(m_name);
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

42) }
43) 
44) /**
45)  * @brief detach a stream receiver
46)  * @param[in] recv stream receiver to detach
47)  */
48) void Stream::detach(StreamRecv *recv)
49) {
50)   m_recvs.erase(recv);
51) }
52) 
53) /**
54)  * @brief set current frame
55)  * @param[in] pFrame current frame
56)  */
57) void Stream::setFrame(stBlinkenFrame *pFrame)
58) {
Stefan Schuermans avoid passing on same frame...

Stefan Schuermans authored 12 years ago

59)   // leave if frame is already set to an identical one
60)   if (m_pFrame && !BlinkenFrameCompare(pFrame, m_pFrame))
61)     return;
62) 
Stefan Schuermans implemented stream printer...

Stefan Schuermans authored 13 years ago

63)   // update local copy of current frame
64)   if (m_pFrame)
65)     BlinkenFrameFree(m_pFrame);
66)   m_pFrame = BlinkenFrameClone(pFrame);
67)   if (!m_pFrame)
68)     return; // out of memory: do not pass NULL pointer to receivers
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

69) 
70)   // pass frame to all receivers
71)   Recvs::iterator it;
72)   for (it = m_recvs.begin(); it != m_recvs.end(); ++it)
Stefan Schuermans added stream name to stream...

Stefan Schuermans authored 12 years ago

73)     (*it)->setFrame(m_name, m_pFrame);
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

74) }
75) 
76) /// set current frame to none
77) void Stream::setNoFrame()
78) {
Stefan Schuermans avoid passing on same frame...

Stefan Schuermans authored 12 years ago

79)   // leave if frame is already set to none
80)   if (!m_pFrame)
81)     return;
82) 
Stefan Schuermans implemented stream printer...

Stefan Schuermans authored 13 years ago

83)   // set current frame to none
84)   if (m_pFrame) {
85)     BlinkenFrameFree(m_pFrame);
86)     m_pFrame = NULL;
87)   }
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

88) 
89)   // pass "no frame" to all receivers
90)   Recvs::iterator it;
91)   for (it = m_recvs.begin(); it != m_recvs.end(); ++it)
Stefan Schuermans added stream name to stream...

Stefan Schuermans authored 12 years ago

92)     (*it)->setNoFrame(m_name);
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

93) }
94) 
Stefan Schuermans add function to get current...

Stefan Schuermans authored 12 years ago

95) /**
96)  * @brief get current frame
97)  * @param[out] pFrame current frame
98)  * @return if a current frame exists
99)  */
100) bool Stream::getCurFrame(stBlinkenFrame *&pFrame)
101) {
102)   pFrame = m_pFrame;
103)   return m_pFrame;
104) }
105)