AlawEncoderSync.java revision 3629
0N/A/**
1879N/A * @test
0N/A * @bug 6938426
0N/A * @summary Tests that Alaw encoder works properly in multithreaded environment
0N/A * @author Alex Menkov
0N/A */
0N/A
0N/Aimport java.io.ByteArrayInputStream;
0N/Aimport java.io.ByteArrayOutputStream;
0N/Aimport java.io.InputStream;
0N/Aimport java.util.Arrays;
0N/Aimport javax.sound.sampled.AudioFormat;
0N/Aimport javax.sound.sampled.AudioInputStream;
0N/Aimport javax.sound.sampled.AudioSystem;
0N/A
0N/Apublic class AlawEncoderSync {
0N/A
0N/A static final int THREAD_COUNT = 20;
1472N/A
1472N/A static final AudioFormat pcmFormat = new AudioFormat(8000f, 16, 2, true, false);
1472N/A static final int STREAM_LENGTH = 10; // in seconds
0N/A static byte[] pcmBuffer;
0N/A static final AudioFormat alawFormat
1879N/A = new AudioFormat(AudioFormat.Encoding.ALAW, 8000f, 8, 2, 2, 8000f, false);
1879N/A
1879N/A static final ConversionThread[] threads = new ConversionThread[THREAD_COUNT];
1879N/A
1879N/A public static void main(String[] args) {
1879N/A preparePCMBuffer();
1879N/A log("pcmStream size: " + pcmBuffer.length);
1879N/A
0N/A for (int i=0; i<THREAD_COUNT; i++) {
0N/A threads[i] = new ConversionThread(i);
0N/A threads[i].start();
2292N/A }
0N/A
0N/A for (int i=1; i<THREAD_COUNT; i++) {
0N/A try {
0N/A threads[i].join();
0N/A } catch (InterruptedException ex) {
0N/A log("Main thread was interrupted, exiting.");
0N/A return;
0N/A }
0N/A }
0N/A
0N/A int failed = 0;
0N/A log("comparing result arrays...");
0N/A for (int i=1; i<THREAD_COUNT; i++) {
0N/A if (!Arrays.equals(threads[0].resultArray, threads[i].resultArray)) {
2667N/A failed++;
0N/A log("NOT equals: 0 and " + i);
0N/A }
2667N/A }
0N/A if (failed > 0) {
0N/A throw new RuntimeException("test FAILED");
0N/A }
0N/A log("test PASSED.");
0N/A }
0N/A
29N/A
0N/A static void preparePCMBuffer() {
0N/A pcmBuffer = new byte[STREAM_LENGTH * (int)pcmFormat.getSampleRate()
0N/A * (pcmFormat.getSampleSizeInBits() / 8) * pcmFormat.getChannels()];
0N/A for (int i=0; i<pcmBuffer.length; i++) {
0N/A pcmBuffer[i] = (byte)(Math.random() * 256.0 - 128.0);
0N/A }
0N/A }
0N/A
0N/A static AudioInputStream createPCMStream() {
0N/A InputStream byteStream = new ByteArrayInputStream(pcmBuffer);
0N/A return new AudioInputStream(byteStream, pcmFormat, AudioSystem.NOT_SPECIFIED);
0N/A }
0N/A
0N/A static class ConversionThread extends Thread {
0N/A public final int num;
0N/A public byte[] resultArray = null;
0N/A public ConversionThread(int num) {
0N/A this.num = num;
0N/A }
0N/A @Override
0N/A public void run() {
0N/A log("ConversionThread[" + num + "] started.");
0N/A try {
0N/A InputStream inStream = new ByteArrayInputStream(pcmBuffer);
0N/A
0N/A AudioInputStream pcmStream = new AudioInputStream(
0N/A inStream, pcmFormat, AudioSystem.NOT_SPECIFIED);
0N/A AudioInputStream alawStream = AudioSystem.getAudioInputStream(alawFormat, pcmStream);
0N/A
0N/A ByteArrayOutputStream outStream = new ByteArrayOutputStream();
0N/A int read = 0;
0N/A byte[] data = new byte[4096];
0N/A while((read = alawStream.read(data)) != -1) {
0N/A outStream.write(data, 0, read);
0N/A }
0N/A alawStream.close();
0N/A resultArray = outStream.toByteArray();
0N/A } catch (Exception ex) {
0N/A log("ConversionThread[" + num + "] exception:");
0N/A log(ex);
0N/A }
0N/A log("ConversionThread[" + num + "] completed.");
0N/A }
0N/A }
0N/A
0N/A static void log(String s) {
0N/A System.out.println(s);
0N/A }
0N/A
0N/A static void log(Exception ex) {
0N/A ex.printStackTrace(System.out);
0N/A }
0N/A}
0N/A