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