/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.mobicents.media.server.impl.dsp; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; import org.mobicents.media.Format; import org.mobicents.media.format.AudioFormat; import org.mobicents.media.server.impl.clock.TimerImpl; import org.mobicents.media.server.impl.resource.Proxy; import org.mobicents.media.server.impl.resource.test.TransmissionTester2; import org.mobicents.media.server.impl.rtp.sdp.AVProfile; import org.mobicents.media.server.spi.Timer; import org.mobicents.media.server.spi.dsp.CodecFactory; /** * Test for transcoding with different codecs. * Tester's generator is a sine wave signal, which is compressed and then * decompressed back. Spectral analyzer checks the returned signal. * * @author Oleg Kulikov */ public class ProcessorTest { private final static AudioFormat PCMA = new AudioFormat(AudioFormat.ALAW, 8000, 8, 1); private final static AudioFormat PCMU = new AudioFormat(AudioFormat.ULAW, 8000, 8, 1); private final static AudioFormat G729 = new AudioFormat(AudioFormat.G729, 8000, 8, 1); private final static AudioFormat LINEAR_AUDIO = new AudioFormat( AudioFormat.LINEAR, 8000, 16, 1, AudioFormat.LITTLE_ENDIAN, AudioFormat.SIGNED); private final static AudioFormat GSM = new AudioFormat(AudioFormat.GSM, 8000, 8, 1); private Processor dsp1; private Processor dsp2; private CodecFactory pcmaEncoderFactory = new org.mobicents.media.server.impl.dsp.audio.g711.alaw.EncoderFactory(); private CodecFactory pcmaDecoderFactory = new org.mobicents.media.server.impl.dsp.audio.g711.alaw.DecoderFactory(); private CodecFactory pcmuEncoderFactory = new org.mobicents.media.server.impl.dsp.audio.g711.ulaw.EncoderFactory(); private CodecFactory pcmuDecoderFactory = new org.mobicents.media.server.impl.dsp.audio.g711.ulaw.DecoderFactory(); private CodecFactory gsmEncoderFactory = new org.mobicents.media.server.impl.dsp.audio.gsm.EncoderFactory(); private CodecFactory gsmDecoderFactory = new org.mobicents.media.server.impl.dsp.audio.gsm.DecoderFactory(); private CodecFactory speexEncoderFactory = new org.mobicents.media.server.impl.dsp.audio.speex.EncoderFactory(); private CodecFactory speexDecoderFactory = new org.mobicents.media.server.impl.dsp.audio.speex.DecoderFactory(); private CodecFactory g729EncoderFactory = new org.mobicents.media.server.impl.dsp.audio.g729.EncoderFactory(); private CodecFactory g729DecoderFactory = new org.mobicents.media.server.impl.dsp.audio.g729.DecoderFactory(); private DspFactory dspFactory = new DspFactory(); private Timer timer; private TransmissionTester2 tester; private Proxy proxy; public ProcessorTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { timer = new TimerImpl(); timer.start(); tester = new TransmissionTester2(timer); proxy = new Proxy("test"); ArrayList<CodecFactory> codecFactories = new ArrayList(); codecFactories.add(pcmaEncoderFactory); codecFactories.add(pcmaDecoderFactory); codecFactories.add(pcmuEncoderFactory); codecFactories.add(pcmuDecoderFactory); codecFactories.add(gsmEncoderFactory); codecFactories.add(gsmDecoderFactory); codecFactories.add(speexEncoderFactory); codecFactories.add(speexDecoderFactory); codecFactories.add(g729EncoderFactory); codecFactories.add(g729DecoderFactory); dspFactory.setName("test"); dspFactory.setCodecFactories(codecFactories); dsp1 = (Processor) dspFactory.newInstance(null); dsp2 = (Processor) dspFactory.newInstance(null); tester.connect(dsp1.getInput()); dsp1.getOutput().connect(proxy.getInput()); dsp2.getInput().connect(proxy.getOutput()); tester.connect(dsp2.getOutput()); dsp1.getInput().addListener(tester); dsp1.getOutput().addListener(tester); dsp2.getInput().addListener(tester); dsp2.getOutput().addListener(tester); proxy.getInput().addListener(tester); proxy.getOutput().addListener(tester); } @After public void tearDown() { timer.stop(); } @Test public void testInputFormats() { } @Test public void testOutputFormats() { } private void testTranscoding(Format fmt) { proxy.setFormat(new Format[] {fmt}); proxy.start(); dsp1.start(); dsp2.start(); tester.start(); proxy.stop(); dsp1.stop(); dsp2.stop(); // printStat(); assertTrue(tester.getMessage(), tester.isPassed()); } @Test public void testLinear() throws Exception { testTranscoding(LINEAR_AUDIO); } @Test public void testPCMA() throws Exception { testTranscoding(PCMA); } @Test public void testPCMU() throws Exception { testTranscoding(PCMU); } @Test public void testGSM() throws Exception { testTranscoding(GSM); } @Test public void testSpeex() throws Exception { testTranscoding(AVProfile.SPEEX); } @Test public void testG729() throws Exception { testTranscoding(G729); } private void printStat() { System.out.println("Generator :" + tester.getGenerator().getPacketsTransmitted()); System.out.println("Dsp1 input :" + dsp1.getInput().getPacketsReceived()); System.out.println("Dsp1 output :" + dsp1.getOutput().getPacketsTransmitted()); System.out.println("Proxy input :" + proxy.getInput().getPacketsReceived()); System.out.println("Proxy output :" + proxy.getOutput().getPacketsTransmitted()); System.out.println("Dsp2 input :" + dsp2.getInput().getPacketsReceived()); System.out.println("Dsp2 output :" + dsp2.getOutput().getPacketsTransmitted()); System.out.println("Detector :" + tester.getDetector().getPacketsReceived()); } }