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