Added audiotest and initial work on audio demo sample

git-svn-id: https://svn.pjsip.org/repos/pjproject/branches/projects/aps-direct@2463 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjmedia/include/pjmedia-audiodev/audiodev.h b/pjmedia/include/pjmedia-audiodev/audiodev.h
index e596b8d..3c71058 100644
--- a/pjmedia/include/pjmedia-audiodev/audiodev.h
+++ b/pjmedia/include/pjmedia-audiodev/audiodev.h
@@ -225,7 +225,7 @@
     /** 
      * The underlying driver name 
      */
-    char driver[64];
+    char driver[128];
 
     /** 
      * Device capabilities, as bitmask combination of #pjmedia_aud_dev_cap.
@@ -411,6 +411,14 @@
 
 
 /**
+ * Get the pool factory registered to the audio subsystem.
+ *
+ * @return		The pool factory.
+ */
+PJ_DECL(pj_pool_factory*) pjmedia_aud_subsys_get_pool_factory(void);
+
+
+/**
  * Shutdown the audio subsystem. This will destroy all audio device factories
  * registered in the audio subsystem. Note that currently opened audio streams
  * may or may not be closed, depending on the implementation of the audio
diff --git a/pjmedia/include/pjmedia-audiodev/audiotest.h b/pjmedia/include/pjmedia-audiodev/audiotest.h
new file mode 100644
index 0000000..e247078
--- /dev/null
+++ b/pjmedia/include/pjmedia-audiodev/audiotest.h
@@ -0,0 +1,106 @@
+/* $Id$ */
+/* 
+ * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
+ * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ */
+#ifndef __AUDIOTEST_H__
+#define __AUDIOTEST_H__
+
+/**
+ * @file audiotest.h
+ * @brief Audio test utility.
+ */
+#include <pjmedia-audiodev/audiodev.h>
+
+
+PJ_BEGIN_DECL
+
+/**
+ * @defgroup PJMED_AUD_TEST Audio tests utility.
+ * @ingroup PJMED_AUD_PORT
+ * @brief Audio test utility.
+ * @{
+ */
+
+/**
+ * Statistic for each direction.
+ */
+typedef struct pjmedia_aud_test_stat
+{
+    /**
+     * Number of frames processed during the test.
+     */
+    unsigned frame_cnt;
+
+    /** 
+     * Minimum inter-frame arrival time, in milliseconds 
+     */
+    unsigned min_interval;
+
+    /** 
+     * Maximum inter-frame arrival time, in milliseconds 
+     */
+    unsigned max_interval;
+
+    /** 
+     * Maximum number of frame burst 
+     */
+    unsigned max_burst;
+
+} pjmedia_aud_test_stat;
+
+
+/**
+ * Test results.
+ */
+typedef struct pjmedia_aud_test_results
+{
+    /**
+     * Recording statistic.
+     */
+    pjmedia_aud_test_stat rec;
+
+    /**
+     * Playback statistic.
+     */
+    pjmedia_aud_test_stat play;
+
+    /** 
+     * Clock drifts per second, in samples. Positive number indicates rec
+     * device is running faster than playback device.
+     */
+    pj_int32_t rec_drift_per_sec;
+
+} pjmedia_aud_test_results;
+
+
+/**
+ * Perform audio device testing.
+ */
+PJ_DECL(pj_status_t) pjmedia_aud_test(const pjmedia_aud_dev_param *param,
+				      pjmedia_aud_test_results *result);
+
+/**
+ * @)
+ */
+
+PJ_END_DECL
+
+
+#endif	/* __AUDIOTEST_H__ */
+
+