/* * Copyright 2017, Dario Casalinuovo. All rights reserved. * Distributed under the terms of the MIT License. */ #include "MediaTest.h" #include #include #include #include #include #include "MediaDebug.h" #ifdef DEBUG #define DELAYED_MODE 1 #define SNOOZE_FOR 10000000 #endif #define MAX_MULTI_CLIENTS 3 static BSimpleMediaClient* sProducer = NULL; static BSimpleMediaClient* sConsumer = NULL; static BSimpleMediaClient* sFilter = NULL; static BSimpleMediaClient* sProducers[MAX_MULTI_CLIENTS]; static BSimpleMediaClient* sConsumers[MAX_MULTI_CLIENTS]; void _InitClients(bool hasFilter) { sProducer = new BSimpleMediaClient("MediaClientProducer"); sConsumer = new BSimpleMediaClient("MediaClientConsumer"); if (hasFilter) sFilter = new BSimpleMediaClient("MediaClientFilter"); else sFilter = NULL; } void _InitClientsMulti(bool isMixer) { if (!isMixer) { for (int i = 0; i < MAX_MULTI_CLIENTS; i++) { sConsumers[i] = new BSimpleMediaClient("Test Consumer"); } sProducer = new BSimpleMediaClient("MediaClientProducer"); } else { for (int i = 0; i < MAX_MULTI_CLIENTS; i++) { sProducers[i] = new BSimpleMediaClient("Test Producer"); } sConsumer = new BSimpleMediaClient("MediaClientConsumer"); } sFilter = new BSimpleMediaClient("MediaClientFilter"); } void _DeleteClients() { delete sProducer; delete sConsumer; delete sFilter; } void _DeleteClientsMulti(bool isMixer) { if (!isMixer) { for (int i = 0; i < MAX_MULTI_CLIENTS; i++) { delete sConsumers[i]; } delete sProducer; } else { for (int i = 0; i < MAX_MULTI_CLIENTS; i++) { delete sProducers[i]; } delete sConsumer; } delete sFilter; } media_format _BuildRawAudioFormat() { media_format format; format.type = B_MEDIA_RAW_AUDIO; format.u.raw_audio = media_multi_audio_format::wildcard; return format; } void _ConsumerProducerTest() { _InitClients(false); BSimpleMediaOutput* output = sProducer->BeginOutput(); BSimpleMediaInput* input = sConsumer->BeginInput(); output->SetAcceptedFormat(_BuildRawAudioFormat()); input->SetAcceptedFormat(_BuildRawAudioFormat()); assert(sConsumer->Connect(input, output) == B_OK); #ifdef DELAYED_MODE snooze(SNOOZE_FOR); #endif assert(input->Disconnect() == B_OK); _DeleteClients(); } void _ProducerConsumerTest() { _InitClients(false); BMediaOutput* output = sProducer->BeginOutput(); BMediaInput* input = sConsumer->BeginInput(); assert(sProducer->Connect(output, input) == B_OK); #ifdef DELAYED_MODE snooze(SNOOZE_FOR); #endif assert(sProducer->Disconnect() == B_OK); _DeleteClients(); } void _ProducerFilterConsumerTest() { _InitClients(true); BMediaOutput* output = sProducer->BeginOutput(); BMediaInput* input = sConsumer->BeginInput(); BMediaInput* filterInput = sFilter->BeginInput(); BMediaOutput* filterOutput = sFilter->BeginOutput(); assert(sFilter->Bind(filterInput, filterOutput) == B_OK); assert(sProducer->Connect(output, filterInput) == B_OK); assert(sFilter->Connect(filterOutput, input) == B_OK); #ifdef DELAYED_MODE snooze(SNOOZE_FOR); #endif assert(sFilter->Disconnect() == B_OK); _DeleteClients(); } void _SplitterConfigurationTest() { _InitClientsMulti(false); for (int i = 0; i < MAX_MULTI_CLIENTS; i++) { BMediaOutput* output = sFilter->BeginOutput(); assert(sFilter->Connect(output, sConsumers[i]->BeginInput()) == B_OK); } assert(sProducer->Connect(sProducer->BeginOutput(), sFilter->BeginInput()) == B_OK); #ifdef DELAYED_MODE snooze(SNOOZE_FOR); #endif _DeleteClientsMulti(false); } void _MixerConfigurationTest() { _InitClientsMulti(true); for (int i = 0; i < MAX_MULTI_CLIENTS; i++) { BMediaInput* input = sFilter->BeginInput(); assert(sFilter->Connect(input, sConsumers[i]->BeginInput()) == B_OK); } assert(sConsumer->Connect(sConsumer->BeginInput(), sFilter->BeginOutput()) == B_OK); #ifdef DELAYED_MODE snooze(SNOOZE_FOR); #endif _DeleteClientsMulti(true); } void media_test() { printf("Testing Simple (1:1) Producer-Consumer configuration: "); _ConsumerProducerTest(); _ProducerConsumerTest(); printf("OK\n"); printf("Testing Simple (1:1:1) Producer-Filter-Consumer configuration: "); _ProducerFilterConsumerTest(); printf("OK\n"); printf("Testing Splitter Configuration (N:1:1): "); _SplitterConfigurationTest(); printf("OK\n"); printf("Testing Mixer Configuration (N:1:1): "); _SplitterConfigurationTest(); printf("OK\n"); }