1 /*
2     Copyright (C) 2010  Collabora Multimedia.
3       @author Mauricio Piacentini <mauricio.piacentini@collabora.co.uk>
4 
5     This library is free software; you can redistribute it and/or modify
6     it under the terms of the GNU Lesser General Public License as published
7     by the Free Software Foundation; either version 2.1 of the License, or
8     (at your option) any later version.
9 
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU Lesser General Public License for more details.
14 
15     You should have received a copy of the GNU Lesser General Public License
16     along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18 #include "qgsttest.h"
19 #include <QGst/Event>
20 #include <QGst/Object>
21 #include <QGst/Message>
22 #include <QGst/TagList>
23 #include <QGst/Segment>
24 
25 class EventTest : public QGstTest
26 {
27     Q_OBJECT
28 private Q_SLOTS:
29     void baseTest();
30     void copyTest();
31     void flushStartTest();
32     void flushStopTest();
33     void eosTest();
34     void newSegmentTest();
35     void sinkMessageTest();
36     void qosTest();
37     void seekTest();
38     void navigationTest();
39     void latencyTest();
40     void stepTest();
41     void tagListTest();
42 };
43 
baseTest()44 void EventTest::baseTest()
45 {
46     QGst::Structure s("mystructure");
47     s.setValue("myfield", 365);
48 
49     QGst::EventPtr evt = QGst::NavigationEvent::create(s);
50 
51     QVERIFY(evt->type()==QGst::EventNavigation);
52     QCOMPARE(evt->typeName(), QString("navigation"));
53 
54     QGst::StructureConstPtr ss = evt->internalStructure();
55     QVERIFY(ss->isValid());
56     QCOMPARE(ss->value("myfield").get<int>(), 365);
57 
58     QVERIFY(evt->timestamp());
59 
60     evt->setSequenceNumber(123445);
61     QCOMPARE(evt->sequenceNumber(), static_cast<quint32>(123445));
62 }
63 
copyTest()64 void EventTest::copyTest()
65 {
66     QGst::Structure s("mystructure");
67     s.setValue("myfield", 365);
68     QGst::EventPtr evt = QGst::NavigationEvent::create(s);
69 
70     QGst::EventPtr evt2 = evt->copy();
71 
72     QCOMPARE(evt->type(), evt2->type());
73     QCOMPARE(evt->timestamp(), evt2->timestamp());
74 
75     QGst::StructureConstPtr ss = evt2->internalStructure();
76     QVERIFY(ss->isValid());
77     QCOMPARE(ss->value("myfield").get<int>(), 365);
78 }
79 
flushStartTest()80 void EventTest::flushStartTest()
81 {
82     QGst::EventPtr evt = QGst::FlushStartEvent::create();
83     QVERIFY(evt->type()==QGst::EventFlushStart);
84     QCOMPARE(evt->typeName(), QString("flush-start"));
85 };
86 
flushStopTest()87 void EventTest::flushStopTest()
88 {
89     QGst::EventPtr evt = QGst::FlushStopEvent::create();
90     QVERIFY(evt->type()==QGst::EventFlushStop);
91     QCOMPARE(evt->typeName(), QString("flush-stop"));
92 };
93 
eosTest()94 void EventTest::eosTest()
95 {
96     QGst::EventPtr evt = QGst::EosEvent::create();
97     QVERIFY(evt->type()==QGst::EventEos);
98     QCOMPARE(evt->typeName(), QString("eos"));
99 };
100 
newSegmentTest()101 void EventTest::newSegmentTest()
102 {
103     QGst::Segment segment(QGst::FormatTime);
104     QGst::SegmentEventPtr evt = QGst::SegmentEvent::create(segment);
105 
106     QVERIFY(evt->type()==QGst::EventSegment);
107     QCOMPARE(evt->typeName(), QString("segment"));
108 
109     QGst::Segment segment2 = evt->segment();
110     QCOMPARE(segment2.format(), QGst::FormatTime);
111 };
112 
113 //TODO GST_EVENT_TAG
114 
sinkMessageTest()115 void EventTest::sinkMessageTest()
116 {
117     QGst::MessagePtr msg = QGst::BufferingMessage::create(QGst::ObjectPtr(), 90);
118     QGst::SinkMessageEventPtr evt = QGst::SinkMessageEvent::create("sink-message", msg);
119     QVERIFY(evt->type()==QGst::EventSinkMessage);
120     QCOMPARE(evt->typeName(), QString("sink-message"));
121 
122     QGst::MessagePtr msg2 = evt->message();
123     QVERIFY(msg2->type() == msg->type());
124     QGst::BufferingMessagePtr msg3 = msg2.dynamicCast<QGst::BufferingMessage>();
125     QCOMPARE(msg3->percent(), 90);
126 };
127 
qosTest()128 void EventTest::qosTest()
129 {
130     QGst::QosEventPtr evt = QGst::QosEvent::create(QGst::QosTypeUnderflow, 123.4, 23455, 98765432);
131     QVERIFY(evt->type()==QGst::EventQos);
132     QCOMPARE(evt->typeName(), QString("qos"));
133 
134     QVERIFY(evt->qosType()==QGst::QosTypeUnderflow);
135     QCOMPARE(evt->proportion(), 123.4);
136     QCOMPARE(evt->diff(), QGst::ClockTimeDiff(23455));
137     QCOMPARE(evt->timestamp(), QGst::ClockTime(98765432));
138 };
139 
seekTest()140 void EventTest::seekTest()
141 {
142     QGst::SeekEventPtr evt = QGst::SeekEvent::create(1.0, QGst::FormatTime, QGst::SeekFlagFlush,
143                                                      QGst::SeekTypeSet, 1000000,
144                                                      QGst::SeekTypeNone, 500000000);
145     QVERIFY(evt->type()==QGst::EventSeek);
146     QCOMPARE(evt->typeName(), QString("seek"));
147 
148     QVERIFY(evt->format()==QGst::FormatTime);
149     QVERIFY(evt->flags()==QGst::SeekFlagFlush);
150     QVERIFY(evt->startType()==QGst::SeekTypeSet);
151     QCOMPARE(evt->start(), static_cast<qint64>(1000000));
152     QVERIFY(evt->stopType()==QGst::SeekTypeNone);
153     QCOMPARE(evt->stop(), static_cast<qint64>(500000000));
154 };
155 
navigationTest()156 void EventTest::navigationTest()
157 {
158     QGst::Structure s("mystructure");
159     s.setValue("myfield", 365);
160     QGst::NavigationEventPtr evt = QGst::NavigationEvent::create(s);
161 
162     QVERIFY(evt->type()==QGst::EventNavigation);
163     QCOMPARE(evt->typeName(), QString("navigation"));
164 
165     QGst::StructureConstPtr ss = evt->internalStructure();
166     QVERIFY(ss->isValid());
167     QCOMPARE(ss->value("myfield").get<int>(), 365);
168 }
169 
latencyTest()170 void EventTest::latencyTest()
171 {
172     QGst::LatencyEventPtr evt = QGst::LatencyEvent::create(43210);
173     QVERIFY(evt->type()==QGst::EventLatency);
174     QCOMPARE(evt->typeName(), QString("latency"));
175 
176     QCOMPARE(evt->latency(), QGst::ClockTime(43210));
177 };
178 
stepTest()179 void EventTest::stepTest()
180 {
181     QGst::StepEventPtr evt = QGst::StepEvent::create(QGst::FormatTime, 100000, 0.5, true, false);
182     QVERIFY(evt->type()==QGst::EventStep);
183     QCOMPARE(evt->typeName(), QString("step"));
184 
185     QVERIFY(evt->format()==QGst::FormatTime);
186     QCOMPARE(evt->amount(), static_cast<quint64>(100000));
187     QCOMPARE(evt->rate(), 0.5);
188     QVERIFY(evt->flush());
189     QVERIFY(!evt->intermediate());
190 };
191 
tagListTest()192 void EventTest::tagListTest()
193 {
194     QGst::TagList tl;
195     tl.setTitle("abc");
196     QGst::TagEventPtr evt = QGst::TagEvent::create(tl);
197 
198     QVERIFY(evt->type()==QGst::EventTag);
199     QCOMPARE(evt->typeName(), QString("tag"));
200 
201     QGst::TagList tl2 = evt->taglist();
202     QCOMPARE(tl.title(), tl2.title());
203 }
204 
205 QTEST_APPLESS_MAIN(EventTest)
206 
207 #include "moc_qgsttest.cpp"
208 #include "eventtest.moc"
209 
210 
211 
212