xref: /haiku/src/bin/media_client/MediaTest.cpp (revision dda3a9c309b722e0ebb69f890677fd22a3880b9f)
1*dda3a9c3SDario Casalinuovo /*
2*dda3a9c3SDario Casalinuovo  * Copyright 2017, Dario Casalinuovo. All rights reserved.
3*dda3a9c3SDario Casalinuovo  * Distributed under the terms of the MIT License.
4*dda3a9c3SDario Casalinuovo  */
5*dda3a9c3SDario Casalinuovo 
6*dda3a9c3SDario Casalinuovo #include "MediaTest.h"
7*dda3a9c3SDario Casalinuovo 
8*dda3a9c3SDario Casalinuovo #include <SimpleMediaClient.h>
9*dda3a9c3SDario Casalinuovo #include <MediaConnection.h>
10*dda3a9c3SDario Casalinuovo #include <SupportDefs.h>
11*dda3a9c3SDario Casalinuovo 
12*dda3a9c3SDario Casalinuovo #include <assert.h>
13*dda3a9c3SDario Casalinuovo #include <stdio.h>
14*dda3a9c3SDario Casalinuovo 
15*dda3a9c3SDario Casalinuovo #include <debug.h>
16*dda3a9c3SDario Casalinuovo 
17*dda3a9c3SDario Casalinuovo #ifdef DEBUG
18*dda3a9c3SDario Casalinuovo #define DELAYED_MODE 1
19*dda3a9c3SDario Casalinuovo #define SNOOZE_FOR 10000000
20*dda3a9c3SDario Casalinuovo #endif
21*dda3a9c3SDario Casalinuovo 
22*dda3a9c3SDario Casalinuovo 
23*dda3a9c3SDario Casalinuovo static BSimpleMediaClient* sProducer = NULL;
24*dda3a9c3SDario Casalinuovo static BSimpleMediaClient* sConsumer = NULL;
25*dda3a9c3SDario Casalinuovo static BSimpleMediaClient* sFilter = NULL;
26*dda3a9c3SDario Casalinuovo 
27*dda3a9c3SDario Casalinuovo 
28*dda3a9c3SDario Casalinuovo void
29*dda3a9c3SDario Casalinuovo _InitClients(bool hasFilter)
30*dda3a9c3SDario Casalinuovo {
31*dda3a9c3SDario Casalinuovo 	sProducer = new BSimpleMediaClient("MediaClientProducer");
32*dda3a9c3SDario Casalinuovo 	sConsumer = new BSimpleMediaClient("MediaClientConsumer");
33*dda3a9c3SDario Casalinuovo 
34*dda3a9c3SDario Casalinuovo 	if (hasFilter)
35*dda3a9c3SDario Casalinuovo 		sFilter = new BSimpleMediaClient("MediaClientFilter");
36*dda3a9c3SDario Casalinuovo 	else
37*dda3a9c3SDario Casalinuovo 		sFilter = NULL;
38*dda3a9c3SDario Casalinuovo }
39*dda3a9c3SDario Casalinuovo 
40*dda3a9c3SDario Casalinuovo 
41*dda3a9c3SDario Casalinuovo void
42*dda3a9c3SDario Casalinuovo _DeleteClients()
43*dda3a9c3SDario Casalinuovo {
44*dda3a9c3SDario Casalinuovo 	delete sProducer;
45*dda3a9c3SDario Casalinuovo 	delete sConsumer;
46*dda3a9c3SDario Casalinuovo 	delete sFilter;
47*dda3a9c3SDario Casalinuovo }
48*dda3a9c3SDario Casalinuovo 
49*dda3a9c3SDario Casalinuovo 
50*dda3a9c3SDario Casalinuovo media_format
51*dda3a9c3SDario Casalinuovo _BuildRawAudioFormat()
52*dda3a9c3SDario Casalinuovo {
53*dda3a9c3SDario Casalinuovo 	media_format format;
54*dda3a9c3SDario Casalinuovo 	format.type = B_MEDIA_RAW_AUDIO;
55*dda3a9c3SDario Casalinuovo 	format.u.raw_audio = media_multi_audio_format::wildcard;
56*dda3a9c3SDario Casalinuovo 
57*dda3a9c3SDario Casalinuovo 	return format;
58*dda3a9c3SDario Casalinuovo }
59*dda3a9c3SDario Casalinuovo 
60*dda3a9c3SDario Casalinuovo 
61*dda3a9c3SDario Casalinuovo void
62*dda3a9c3SDario Casalinuovo _ConsumerProducerTest()
63*dda3a9c3SDario Casalinuovo {
64*dda3a9c3SDario Casalinuovo 	_InitClients(false);
65*dda3a9c3SDario Casalinuovo 
66*dda3a9c3SDario Casalinuovo 	BSimpleMediaOutput* output = sProducer->BeginOutput();
67*dda3a9c3SDario Casalinuovo 	BSimpleMediaInput* input = sConsumer->BeginInput();
68*dda3a9c3SDario Casalinuovo 
69*dda3a9c3SDario Casalinuovo 	output->SetAcceptedFormat(_BuildRawAudioFormat());
70*dda3a9c3SDario Casalinuovo 	input->SetAcceptedFormat(_BuildRawAudioFormat());
71*dda3a9c3SDario Casalinuovo 
72*dda3a9c3SDario Casalinuovo 	assert(sConsumer->Connect(input, output) == B_OK);
73*dda3a9c3SDario Casalinuovo 
74*dda3a9c3SDario Casalinuovo 	#ifdef DELAYED_MODE
75*dda3a9c3SDario Casalinuovo 	snooze(SNOOZE_FOR);
76*dda3a9c3SDario Casalinuovo 	#endif
77*dda3a9c3SDario Casalinuovo 
78*dda3a9c3SDario Casalinuovo 	assert(sConsumer->Disconnect() == B_OK);
79*dda3a9c3SDario Casalinuovo 
80*dda3a9c3SDario Casalinuovo 	_DeleteClients();
81*dda3a9c3SDario Casalinuovo }
82*dda3a9c3SDario Casalinuovo 
83*dda3a9c3SDario Casalinuovo 
84*dda3a9c3SDario Casalinuovo void
85*dda3a9c3SDario Casalinuovo _ProducerConsumerTest()
86*dda3a9c3SDario Casalinuovo {
87*dda3a9c3SDario Casalinuovo 	_InitClients(false);
88*dda3a9c3SDario Casalinuovo 
89*dda3a9c3SDario Casalinuovo 	BMediaOutput* output = sProducer->BeginOutput();
90*dda3a9c3SDario Casalinuovo 	BMediaInput* input = sConsumer->BeginInput();
91*dda3a9c3SDario Casalinuovo 
92*dda3a9c3SDario Casalinuovo 	assert(sProducer->Connect(output, input) == B_OK);
93*dda3a9c3SDario Casalinuovo 
94*dda3a9c3SDario Casalinuovo 	#ifdef DELAYED_MODE
95*dda3a9c3SDario Casalinuovo 	snooze(SNOOZE_FOR);
96*dda3a9c3SDario Casalinuovo 	#endif
97*dda3a9c3SDario Casalinuovo 
98*dda3a9c3SDario Casalinuovo 	assert(sProducer->Disconnect() == B_OK);
99*dda3a9c3SDario Casalinuovo 
100*dda3a9c3SDario Casalinuovo 	_DeleteClients();
101*dda3a9c3SDario Casalinuovo }
102*dda3a9c3SDario Casalinuovo 
103*dda3a9c3SDario Casalinuovo 
104*dda3a9c3SDario Casalinuovo void
105*dda3a9c3SDario Casalinuovo _ProducerFilterConsumerTest()
106*dda3a9c3SDario Casalinuovo {
107*dda3a9c3SDario Casalinuovo 	_InitClients(true);
108*dda3a9c3SDario Casalinuovo 
109*dda3a9c3SDario Casalinuovo 	BMediaOutput* output = sProducer->BeginOutput();
110*dda3a9c3SDario Casalinuovo 	BMediaInput* input = sConsumer->BeginInput();
111*dda3a9c3SDario Casalinuovo 
112*dda3a9c3SDario Casalinuovo 	BMediaInput* filterInput = sFilter->BeginInput();
113*dda3a9c3SDario Casalinuovo 	BMediaOutput* filterOutput = sFilter->BeginOutput();
114*dda3a9c3SDario Casalinuovo 
115*dda3a9c3SDario Casalinuovo 	assert(sFilter->Bind(filterInput, filterOutput) == B_OK);
116*dda3a9c3SDario Casalinuovo 
117*dda3a9c3SDario Casalinuovo 	assert(sProducer->Connect(output, filterInput) == B_OK);
118*dda3a9c3SDario Casalinuovo 	assert(sFilter->Connect(filterOutput, input) == B_OK);
119*dda3a9c3SDario Casalinuovo 	#ifdef DELAYED_MODE
120*dda3a9c3SDario Casalinuovo 	snooze(SNOOZE_FOR);
121*dda3a9c3SDario Casalinuovo 	#endif
122*dda3a9c3SDario Casalinuovo 
123*dda3a9c3SDario Casalinuovo 	assert(sFilter->Disconnect() == B_OK);
124*dda3a9c3SDario Casalinuovo 
125*dda3a9c3SDario Casalinuovo 	_DeleteClients();
126*dda3a9c3SDario Casalinuovo }
127*dda3a9c3SDario Casalinuovo 
128*dda3a9c3SDario Casalinuovo 
129*dda3a9c3SDario Casalinuovo void
130*dda3a9c3SDario Casalinuovo media_test()
131*dda3a9c3SDario Casalinuovo {
132*dda3a9c3SDario Casalinuovo 	printf("Testing Simple (1:1) Producer-Consumer configuration: ");
133*dda3a9c3SDario Casalinuovo 	_ConsumerProducerTest();
134*dda3a9c3SDario Casalinuovo 	_ProducerConsumerTest();
135*dda3a9c3SDario Casalinuovo 	printf("OK\n");
136*dda3a9c3SDario Casalinuovo 
137*dda3a9c3SDario Casalinuovo 	printf("Testing Simple (1:1:1) Producer-Filter-Consumer configuration: ");
138*dda3a9c3SDario Casalinuovo 	_ProducerFilterConsumerTest();
139*dda3a9c3SDario Casalinuovo 	printf("OK\n");
140*dda3a9c3SDario Casalinuovo }
141