* #36737: switch back to svn repo, remove assert in sip_transaction.c
diff --git a/jni/pjproject-android/.svn/pristine/d4/d4350be0772570ea85ccdae9872685f9ec00baa2.svn-base b/jni/pjproject-android/.svn/pristine/d4/d4350be0772570ea85ccdae9872685f9ec00baa2.svn-base
new file mode 100644
index 0000000..f82e937
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d4350be0772570ea85ccdae9872685f9ec00baa2.svn-base
@@ -0,0 +1,77 @@
+#!/bin/sh
+#
+# usage: rtpw_test <rtpw_commands>
+#
+# tests the rtpw sender and receiver functions
+
+RTPW=rtpw
+DEST_PORT=9999
+DURATION=3
+
+key=2b2edc5034f61a72345ca5986d7bfd0189aa6dc2ecab32fd9af74df6dfc6
+
+ARGS="-k $key -ae"
+
+# First, we run "killall" to get rid of all existing rtpw processes.
+# This step also enables this script to clean up after itself; if this
+# script is interrupted after the rtpw processes are started but before
+# they are killed, those processes will linger. Re-running the script
+# will get rid of them.
+
+killall rtpw 2&>/dev/null
+
+if test -x $RTPW; then
+
+echo $0 ": starting rtpw receiver process... "
+
+$RTPW $* $ARGS -r 0.0.0.0 $DEST_PORT &
+
+receiver_pid=$!
+
+echo $0 ": receiver PID = $receiver_pid"
+
+sleep 1
+
+# verify that the background job is running
+ps | grep -q $receiver_pid
+retval=$?
+echo $retval
+if [ $retval != 0 ]; then
+ echo $0 ": error"
+ exit 254
+fi
+
+echo $0 ": starting rtpw sender process..."
+
+$RTPW $* $ARGS -s 127.0.0.1 $DEST_PORT &
+
+sender_pid=$!
+
+echo $0 ": sender PID = $sender_pid"
+
+# verify that the background job is running
+ps | grep -q $sender_pid
+retval=$?
+echo $retval
+if [ $retval != 0 ]; then
+ echo $0 ": error"
+ exit 255
+fi
+
+sleep $DURATION
+
+kill $receiver_pid
+kill $sender_pid
+
+echo $0 ": done (test passed)"
+
+else
+
+echo "error: can't find executable" $RTPW
+exit 1
+
+fi
+
+# EOF
+
+
diff --git a/jni/pjproject-android/.svn/pristine/d4/d43eb2666caba296584d9b8979cc4e2d446844f2.svn-base b/jni/pjproject-android/.svn/pristine/d4/d43eb2666caba296584d9b8979cc4e2d446844f2.svn-base
new file mode 100644
index 0000000..f559116
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d43eb2666caba296584d9b8979cc4e2d446844f2.svn-base
@@ -0,0 +1,43 @@
+
+include $(KERNEL_DIR)/.config
+
+#
+# Basic kernel compilation flags.
+#
+export OS_CFLAGS := $(CC_DEF)PJ_LINUX_KERNEL=1 -D__KERNEL__ \
+ -I$(KERNEL_DIR)/include -iwithprefix include \
+ -nostdinc -msoft-float
+
+#
+# Additional kernel compilation flags are taken from the kernel Makefile
+# itself.
+#
+
+KERNEL_CFLAGS := \
+ $(shell cd $(KERNEL_DIR) ; \
+ make script SCRIPT='@echo $$(CFLAGS) $$(CFLAGS_MODULE)' $(KERNEL_ARCH))
+
+export OS_CFLAGS += $(KERNEL_CFLAGS)
+
+# -DMODULE -I$(KERNEL_DIR)/include -nostdinc \
+# -Wstrict-prototypes \
+# -Wno-trigraphs -fno-strict-aliasing -fno-common \
+# -msoft-float -m32 -fno-builtin-sprintf -fno-builtin-log2\
+# -fno-builtin-puts -mpreferred-stack-boundary=2 \
+# -fno-unit-at-a-time -march=i686 -mregparm=3 \
+# -iwithprefix include
+
+#export OS_CFLAGS += -U__i386__ -Ui386 -D__arch_um__ -DSUBARCH=\"i386\" \
+# -D_LARGEFILE64_SOURCE -I$(KERNEL_DIR)/arch/um/include \
+# -Derrno=kernel_errno \
+# -I$(KERNEL_DIR)/arch/um/kernel/tt/include \
+# -I$(KERNEL_DIR)/arch/um/kernel/skas/include \
+
+
+export OS_CXXFLAGS :=
+
+export OS_LDFLAGS :=
+
+export OS_SOURCES :=
+
+
diff --git a/jni/pjproject-android/.svn/pristine/d4/d44178dff01f0d7adde0c006367007baa659fada.svn-base b/jni/pjproject-android/.svn/pristine/d4/d44178dff01f0d7adde0c006367007baa659fada.svn-base
new file mode 100644
index 0000000..e2e1f9b
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d44178dff01f0d7adde0c006367007baa659fada.svn-base
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- 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 -->
+<!-- -->
+<!-- See https://trac.pjsip.org/repos/ticket/1146 -->
+<!-- -->
+
+<scenario name="SUBSCRIBE tests">
+ <!-- Establish subscription -->
+ <recv request="SUBSCRIBE" crlf="true">
+ <action>
+ <ereg regexp=".*" search_in="hdr" header="From" assign_to="3"/>
+ <ereg regexp="sip:(.*)>" search_in="hdr" header="Contact" assign_to="4,5"/>
+ <assign assign_to="4" variable="5" />
+ </action>
+ </recv>
+
+ <send>
+ <![CDATA[
+
+ SIP/2.0 200 OK
+ [last_Via:]
+ [last_From:]
+ [last_To:];tag=[call_number]
+ [last_Call-ID:]
+ [last_CSeq:]
+ Contact: <sip:sipp@[local_ip]:[local_port]>
+ Content-Length: 0
+ Expires: 60
+ ]]>
+ </send>
+
+ <send retrans="500">
+ <![CDATA[
+ NOTIFY sip:[$5] SIP/2.0
+ Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=z9hG4bKPj01
+ From: sipp <sip:sipp@[local_ip]>;tag=[call_number]
+ To[$3]
+ Call-ID: [call_id]
+ Cseq: 1 NOTIFY
+ Contact: sip:sipp@[local_ip]:[local_port]
+ Max-Forwards: 70
+ Event: presence
+ Subscription-State: active;expires=10
+ Content-Type: multipart/mixed;boundary=abcd
+
+ --abcd
+ Content-Type: text/plain
+
+ Hi there, please don't read this part.
+ --abcd
+ Content-Type: application/pidf+xml
+
+ <?xml version="1.0" encoding="UTF-8"?>
+ <presence xmlns="urn:ietf:params:xml:ns:pidf" xmlns:op="urn:oma:xml:prs:pidf:oma-pres" entity="sip:test@pjsip.org">
+ <tuple id="17415d5738f332a64a2f1d8cfb4ab0a5">
+ <status>
+ <basic>open</basic>
+ </status>
+ </tuple>
+ </presence>
+ --abcd--
+ ]]>
+ </send>
+
+ <recv response="200">
+ </recv>
+
+ <!-- Subscription has been established at this point -->
+
+
+ <!-- *******
+
+ Wait for subscription refresh, reply with 481
+
+ -->
+
+ <recv request="SUBSCRIBE" crlf="true">
+ </recv>
+
+ <send>
+ <![CDATA[
+
+ SIP/2.0 481 You should resubscribe mow
+ [last_Via:]
+ [last_From:]
+ [last_To:];tag=[call_number]
+ [last_Call-ID:]
+ [last_CSeq:]
+ Contact: <sip:sipp@[local_ip]:[local_port]>
+ Content-Length: 0
+ ]]>
+ </send>
+
+
+
+
+ <!-- definition of the response time repartition table (unit is ms) -->
+ <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+ <!-- definition of the call length repartition table (unit is ms) -->
+ <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/jni/pjproject-android/.svn/pristine/d4/d44438d4f5c3c0db0b63c0e30851427f0ba196ad.svn-base b/jni/pjproject-android/.svn/pristine/d4/d44438d4f5c3c0db0b63c0e30851427f0ba196ad.svn-base
new file mode 100644
index 0000000..c6bfcb3
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d44438d4f5c3c0db0b63c0e30851427f0ba196ad.svn-base
@@ -0,0 +1,12 @@
+# $Id$
+#
+from inc_cfg import *
+
+# Simple call
+test_param = TestParam(
+ "Basic call",
+ [
+ InstanceParam("callee", "--null-audio --max-calls=1"),
+ InstanceParam("caller", "--null-audio --max-calls=1")
+ ]
+ )
diff --git a/jni/pjproject-android/.svn/pristine/d4/d4477bedba4016f9f7b108fc68dbec7ff53e2c20.svn-base b/jni/pjproject-android/.svn/pristine/d4/d4477bedba4016f9f7b108fc68dbec7ff53e2c20.svn-base
new file mode 100644
index 0000000..bd70165
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d4477bedba4016f9f7b108fc68dbec7ff53e2c20.svn-base
@@ -0,0 +1,214 @@
+/* $Id$ */
+/*
+ * Copyright (C) 2008-2011 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
+ */
+#include <pjlib.h>
+#include "test.h"
+
+static pj_ioqueue_key_t *key;
+static pj_atomic_t *total_bytes;
+static pj_bool_t thread_quit_flag;
+
+struct op_key
+{
+ pj_ioqueue_op_key_t op_key_;
+ struct op_key *peer;
+ char *buffer;
+ pj_size_t size;
+ int is_pending;
+ pj_status_t last_err;
+ pj_sockaddr_in addr;
+ int addrlen;
+};
+
+static void on_read_complete(pj_ioqueue_key_t *key,
+ pj_ioqueue_op_key_t *op_key,
+ pj_ssize_t bytes_received)
+{
+ pj_status_t rc;
+ struct op_key *recv_rec = (struct op_key *)op_key;
+
+ for (;;) {
+ struct op_key *send_rec = recv_rec->peer;
+ recv_rec->is_pending = 0;
+
+ if (bytes_received < 0) {
+ if (-bytes_received != recv_rec->last_err) {
+ recv_rec->last_err = (pj_status_t)-bytes_received;
+ app_perror("...error receiving data", recv_rec->last_err);
+ }
+ } else if (bytes_received == 0) {
+ /* note: previous error, or write callback */
+ } else {
+ pj_atomic_add(total_bytes, (pj_atomic_value_t)bytes_received);
+
+ if (!send_rec->is_pending) {
+ pj_ssize_t sent = bytes_received;
+ pj_memcpy(send_rec->buffer, recv_rec->buffer, bytes_received);
+ pj_memcpy(&send_rec->addr, &recv_rec->addr, recv_rec->addrlen);
+ send_rec->addrlen = recv_rec->addrlen;
+ rc = pj_ioqueue_sendto(key, &send_rec->op_key_,
+ send_rec->buffer, &sent, 0,
+ &send_rec->addr, send_rec->addrlen);
+ send_rec->is_pending = (rc==PJ_EPENDING);
+
+ if (rc!=PJ_SUCCESS && rc!=PJ_EPENDING) {
+ app_perror("...send error(1)", rc);
+ }
+ }
+ }
+
+ if (!send_rec->is_pending) {
+ bytes_received = recv_rec->size;
+ rc = pj_ioqueue_recvfrom(key, &recv_rec->op_key_,
+ recv_rec->buffer, &bytes_received, 0,
+ &recv_rec->addr, &recv_rec->addrlen);
+ recv_rec->is_pending = (rc==PJ_EPENDING);
+ if (rc == PJ_SUCCESS) {
+ /* fall through next loop. */
+ } else if (rc == PJ_EPENDING) {
+ /* quit callback. */
+ break;
+ } else {
+ /* error */
+ app_perror("...recv error", rc);
+ recv_rec->last_err = rc;
+
+ bytes_received = 0;
+ /* fall through next loop. */
+ }
+ } else {
+ /* recv will be done when write completion callback is called. */
+ break;
+ }
+ }
+}
+
+static void on_write_complete(pj_ioqueue_key_t *key,
+ pj_ioqueue_op_key_t *op_key,
+ pj_ssize_t bytes_sent)
+{
+ struct op_key *send_rec = (struct op_key*)op_key;
+
+ if (bytes_sent <= 0) {
+ pj_status_t rc = (pj_status_t)-bytes_sent;
+ if (rc != send_rec->last_err) {
+ send_rec->last_err = rc;
+ app_perror("...send error(2)", rc);
+ }
+ }
+
+ send_rec->is_pending = 0;
+ on_read_complete(key, &send_rec->peer->op_key_, 0);
+}
+
+static int worker_thread(void *arg)
+{
+ pj_ioqueue_t *ioqueue = (pj_ioqueue_t*) arg;
+ struct op_key read_op, write_op;
+ char recv_buf[512], send_buf[512];
+ pj_ssize_t length;
+ pj_status_t rc;
+
+ read_op.peer = &write_op;
+ read_op.is_pending = 0;
+ read_op.last_err = 0;
+ read_op.buffer = recv_buf;
+ read_op.size = sizeof(recv_buf);
+ read_op.addrlen = sizeof(read_op.addr);
+
+ write_op.peer = &read_op;
+ write_op.is_pending = 0;
+ write_op.last_err = 0;
+ write_op.buffer = send_buf;
+ write_op.size = sizeof(send_buf);
+
+ length = sizeof(recv_buf);
+ rc = pj_ioqueue_recvfrom(key, &read_op.op_key_, recv_buf, &length, 0,
+ &read_op.addr, &read_op.addrlen);
+ if (rc == PJ_SUCCESS) {
+ read_op.is_pending = 1;
+ on_read_complete(key, &read_op.op_key_, length);
+ }
+
+ while (!thread_quit_flag) {
+ pj_time_val timeout;
+ timeout.sec = 0; timeout.msec = 10;
+ rc = pj_ioqueue_poll(ioqueue, &timeout);
+ }
+ return 0;
+}
+
+int udp_echo_srv_ioqueue(void)
+{
+ pj_pool_t *pool;
+ pj_sock_t sock;
+ pj_ioqueue_t *ioqueue;
+ pj_ioqueue_callback callback;
+ int i;
+ pj_thread_t *thread[ECHO_SERVER_MAX_THREADS];
+ pj_status_t rc;
+
+ pj_bzero(&callback, sizeof(callback));
+ callback.on_read_complete = &on_read_complete;
+ callback.on_write_complete = &on_write_complete;
+
+ pool = pj_pool_create(mem, NULL, 4000, 4000, NULL);
+ if (!pool)
+ return -10;
+
+ rc = pj_ioqueue_create(pool, 2, &ioqueue);
+ if (rc != PJ_SUCCESS) {
+ app_perror("...pj_ioqueue_create error", rc);
+ return -20;
+ }
+
+ rc = app_socket(pj_AF_INET(), pj_SOCK_DGRAM(), 0,
+ ECHO_SERVER_START_PORT, &sock);
+ if (rc != PJ_SUCCESS) {
+ app_perror("...app_socket error", rc);
+ return -30;
+ }
+
+ rc = pj_ioqueue_register_sock(pool, ioqueue, sock, NULL,
+ &callback, &key);
+ if (rc != PJ_SUCCESS) {
+ app_perror("...error registering socket", rc);
+ return -40;
+ }
+
+ rc = pj_atomic_create(pool, 0, &total_bytes);
+ if (rc != PJ_SUCCESS) {
+ app_perror("...error creating atomic variable", rc);
+ return -45;
+ }
+
+ for (i=0; i<ECHO_SERVER_MAX_THREADS; ++i) {
+ rc = pj_thread_create(pool, NULL, &worker_thread, ioqueue,
+ PJ_THREAD_DEFAULT_STACK_SIZE, 0,
+ &thread[i]);
+ if (rc != PJ_SUCCESS) {
+ app_perror("...create thread error", rc);
+ return -50;
+ }
+ }
+
+ echo_srv_common_loop(total_bytes);
+
+ return 0;
+}
diff --git a/jni/pjproject-android/.svn/pristine/d4/d44f582363fd3c52121aa48f5baee46e127a54e5.svn-base b/jni/pjproject-android/.svn/pristine/d4/d44f582363fd3c52121aa48f5baee46e127a54e5.svn-base
new file mode 100644
index 0000000..8acdd78
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d44f582363fd3c52121aa48f5baee46e127a54e5.svn-base
@@ -0,0 +1,170 @@
+/* $Id$ */
+/*
+ * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
+ *
+ * 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 __PJMEDIA_AVI_STREAM_H__
+#define __PJMEDIA_AVI_STREAM_H__
+
+/**
+ * @file avi_stream.h
+ * @brief AVI file player.
+ */
+#include <pjmedia/port.h>
+
+
+
+PJ_BEGIN_DECL
+
+
+/**
+ * @defgroup PJMEDIA_FILE_PLAY AVI File Player
+ * @ingroup PJMEDIA_PORT
+ * @brief Video and audio playback from AVI file
+ * @{
+ */
+
+/**
+ * AVI file player options.
+ */
+enum pjmedia_avi_file_player_option
+{
+ /**
+ * Tell the file player to return NULL frame when the whole
+ * file has been played.
+ */
+ PJMEDIA_AVI_FILE_NO_LOOP = 1
+};
+
+/**
+ * AVI stream data type.
+ */
+typedef pjmedia_port pjmedia_avi_stream;
+
+/**
+ * Opaque data type for AVI streams. AVI streams is a collection of
+ * zero or more AVI stream.
+ */
+typedef struct pjmedia_avi_streams pjmedia_avi_streams;
+
+/**
+ * Create avi streams to play an AVI file. AVI player supports
+ * reading AVI file with uncompressed video format and
+ * 16 bit PCM or compressed G.711 A-law/U-law audio format.
+ *
+ * @param pool Pool to create the streams.
+ * @param filename File name to open.
+ * @param flags Avi streams creation flags.
+ * @param p_streams Pointer to receive the avi streams instance.
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t)
+pjmedia_avi_player_create_streams(pj_pool_t *pool,
+ const char *filename,
+ unsigned flags,
+ pjmedia_avi_streams **p_streams);
+
+/**
+ * Get the number of AVI stream.
+ *
+ * @param streams The AVI streams.
+ *
+ * @return The number of AVI stream.
+ */
+PJ_DECL(unsigned)
+pjmedia_avi_streams_get_num_streams(pjmedia_avi_streams *streams);
+
+/**
+ * Return the idx-th stream of the AVI streams.
+ *
+ * @param streams The AVI streams.
+ * @param idx The stream index.
+ *
+ * @return The AVI stream or NULL if it does not exist.
+ */
+PJ_DECL(pjmedia_avi_stream *)
+pjmedia_avi_streams_get_stream(pjmedia_avi_streams *streams,
+ unsigned idx);
+
+/**
+ * Return an AVI stream with a certain media type from the AVI streams.
+ *
+ * @param streams The AVI streams.
+ * @param start_idx The starting index.
+ * @param media_type The media type of the stream.
+ *
+ * @return The AVI stream or NULL if it does not exist.
+ */
+PJ_DECL(pjmedia_avi_stream *)
+pjmedia_avi_streams_get_stream_by_media(pjmedia_avi_streams *streams,
+ unsigned start_idx,
+ pjmedia_type media_type);
+
+/**
+ * Return the media port of an AVI stream.
+ *
+ * @param stream The AVI stream.
+ *
+ * @return The media port.
+ */
+PJ_INLINE(pjmedia_port *)
+pjmedia_avi_stream_get_port(pjmedia_avi_stream *stream)
+{
+ return (pjmedia_port *)stream;
+}
+
+/**
+ * Get the data length, in bytes.
+ *
+ * @param stream The AVI stream.
+ *
+ * @return The length of the data, in bytes. Upon error it will
+ * return negative value.
+ */
+PJ_DECL(pj_ssize_t) pjmedia_avi_stream_get_len(pjmedia_avi_stream *stream);
+
+
+/**
+ * Register a callback to be called when the file reading has reached the
+ * end of file. If the file is set to play repeatedly, then the callback
+ * will be called multiple times. Note that only one callback can be
+ * registered for each AVI stream.
+ *
+ * @param stream The AVI stream.
+ * @param user_data User data to be specified in the callback
+ * @param cb Callback to be called. If the callback returns non-
+ * PJ_SUCCESS, the playback will stop. Note that if
+ * application destroys the file port in the callback,
+ * it must return non-PJ_SUCCESS here.
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t)
+pjmedia_avi_stream_set_eof_cb(pjmedia_avi_stream *stream,
+ void *user_data,
+ pj_status_t (*cb)(pjmedia_avi_stream *stream,
+ void *usr_data));
+
+/**
+ * @}
+ */
+
+
+PJ_END_DECL
+
+
+#endif /* __PJMEDIA_AVI_STREAM_H__ */
diff --git a/jni/pjproject-android/.svn/pristine/d4/d4570017b0a4f72c5e8422d549bb9b12a48feb73.svn-base b/jni/pjproject-android/.svn/pristine/d4/d4570017b0a4f72c5e8422d549bb9b12a48feb73.svn-base
new file mode 100644
index 0000000..fa841a0
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d4570017b0a4f72c5e8422d549bb9b12a48feb73.svn-base
@@ -0,0 +1,379 @@
+/* Copyright (C) 2005 Jean-Marc Valin */
+/**
+ @file pseudofloat.h
+ @brief Pseudo-floating point
+ * This header file provides a lightweight floating point type for
+ * use on fixed-point platforms when a large dynamic range is
+ * required. The new type is not compatible with the 32-bit IEEE format,
+ * it is not even remotely as accurate as 32-bit floats, and is not
+ * even guaranteed to produce even remotely correct results for code
+ * other than Speex. It makes all kinds of shortcuts that are acceptable
+ * for Speex, but may not be acceptable for your application. You're
+ * quite welcome to reuse this code and improve it, but don't assume
+ * it works out of the box. Most likely, it doesn't.
+ */
+/*
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ - Neither the name of the Xiph.org Foundation nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef PSEUDOFLOAT_H
+#define PSEUDOFLOAT_H
+
+#include "arch.h"
+#include "os_support.h"
+#include "math_approx.h"
+#include <math.h>
+
+#ifdef FIXED_POINT
+
+typedef struct {
+ spx_int16_t m;
+ spx_int16_t e;
+} spx_float_t;
+
+static const spx_float_t FLOAT_ZERO = {0,0};
+static const spx_float_t FLOAT_ONE = {16384,-14};
+static const spx_float_t FLOAT_HALF = {16384,-15};
+
+#define MIN(a,b) ((a)<(b)?(a):(b))
+static inline spx_float_t PSEUDOFLOAT(spx_int32_t x)
+{
+ int e=0;
+ int sign=0;
+ if (x<0)
+ {
+ sign = 1;
+ x = -x;
+ }
+ if (x==0)
+ {
+ spx_float_t r = {0,0};
+ return r;
+ }
+ e = spx_ilog2(ABS32(x))-14;
+ x = VSHR32(x, e);
+ if (sign)
+ {
+ spx_float_t r;
+ r.m = -x;
+ r.e = e;
+ return r;
+ }
+ else
+ {
+ spx_float_t r;
+ r.m = x;
+ r.e = e;
+ return r;
+ }
+}
+
+
+static inline spx_float_t FLOAT_ADD(spx_float_t a, spx_float_t b)
+{
+ spx_float_t r;
+ if (a.m==0)
+ return b;
+ else if (b.m==0)
+ return a;
+ if ((a).e > (b).e)
+ {
+ r.m = ((a).m>>1) + ((b).m>>MIN(15,(a).e-(b).e+1));
+ r.e = (a).e+1;
+ }
+ else
+ {
+ r.m = ((b).m>>1) + ((a).m>>MIN(15,(b).e-(a).e+1));
+ r.e = (b).e+1;
+ }
+ if (r.m>0)
+ {
+ if (r.m<16384)
+ {
+ r.m<<=1;
+ r.e-=1;
+ }
+ } else {
+ if (r.m>-16384)
+ {
+ r.m<<=1;
+ r.e-=1;
+ }
+ }
+ /*printf ("%f + %f = %f\n", REALFLOAT(a), REALFLOAT(b), REALFLOAT(r));*/
+ return r;
+}
+
+static inline spx_float_t FLOAT_SUB(spx_float_t a, spx_float_t b)
+{
+ spx_float_t r;
+ if (a.m==0)
+ return b;
+ else if (b.m==0)
+ return a;
+ if ((a).e > (b).e)
+ {
+ r.m = ((a).m>>1) - ((b).m>>MIN(15,(a).e-(b).e+1));
+ r.e = (a).e+1;
+ }
+ else
+ {
+ r.m = ((a).m>>MIN(15,(b).e-(a).e+1)) - ((b).m>>1);
+ r.e = (b).e+1;
+ }
+ if (r.m>0)
+ {
+ if (r.m<16384)
+ {
+ r.m<<=1;
+ r.e-=1;
+ }
+ } else {
+ if (r.m>-16384)
+ {
+ r.m<<=1;
+ r.e-=1;
+ }
+ }
+ /*printf ("%f + %f = %f\n", REALFLOAT(a), REALFLOAT(b), REALFLOAT(r));*/
+ return r;
+}
+
+static inline int FLOAT_LT(spx_float_t a, spx_float_t b)
+{
+ if (a.m==0)
+ return b.m>0;
+ else if (b.m==0)
+ return a.m<0;
+ if ((a).e > (b).e)
+ return ((a).m>>1) < ((b).m>>MIN(15,(a).e-(b).e+1));
+ else
+ return ((b).m>>1) > ((a).m>>MIN(15,(b).e-(a).e+1));
+
+}
+
+static inline int FLOAT_GT(spx_float_t a, spx_float_t b)
+{
+ return FLOAT_LT(b,a);
+}
+
+static inline spx_float_t FLOAT_MULT(spx_float_t a, spx_float_t b)
+{
+ spx_float_t r;
+ r.m = (spx_int16_t)((spx_int32_t)(a).m*(b).m>>15);
+ r.e = (a).e+(b).e+15;
+ if (r.m>0)
+ {
+ if (r.m<16384)
+ {
+ r.m<<=1;
+ r.e-=1;
+ }
+ } else {
+ if (r.m>-16384)
+ {
+ r.m<<=1;
+ r.e-=1;
+ }
+ }
+ /*printf ("%f * %f = %f\n", REALFLOAT(a), REALFLOAT(b), REALFLOAT(r));*/
+ return r;
+}
+
+static inline spx_float_t FLOAT_AMULT(spx_float_t a, spx_float_t b)
+{
+ spx_float_t r;
+ r.m = (spx_int16_t)((spx_int32_t)(a).m*(b).m>>15);
+ r.e = (a).e+(b).e+15;
+ return r;
+}
+
+
+static inline spx_float_t FLOAT_SHL(spx_float_t a, int b)
+{
+ spx_float_t r;
+ r.m = a.m;
+ r.e = a.e+b;
+ return r;
+}
+
+static inline spx_int16_t FLOAT_EXTRACT16(spx_float_t a)
+{
+ if (a.e<0)
+ return EXTRACT16((EXTEND32(a.m)+(EXTEND32(1)<<(-a.e-1)))>>-a.e);
+ else
+ return a.m<<a.e;
+}
+
+static inline spx_int32_t FLOAT_EXTRACT32(spx_float_t a)
+{
+ if (a.e<0)
+ return (EXTEND32(a.m)+(EXTEND32(1)<<(-a.e-1)))>>-a.e;
+ else
+ return EXTEND32(a.m)<<a.e;
+}
+
+static inline spx_int32_t FLOAT_MUL32(spx_float_t a, spx_word32_t b)
+{
+ return VSHR32(MULT16_32_Q15(a.m, b),-a.e-15);
+}
+
+static inline spx_float_t FLOAT_MUL32U(spx_word32_t a, spx_word32_t b)
+{
+ int e1, e2;
+ spx_float_t r;
+ if (a==0 || b==0)
+ {
+ return FLOAT_ZERO;
+ }
+ e1 = spx_ilog2(ABS32(a));
+ a = VSHR32(a, e1-14);
+ e2 = spx_ilog2(ABS32(b));
+ b = VSHR32(b, e2-14);
+ r.m = MULT16_16_Q15(a,b);
+ r.e = e1+e2-13;
+ return r;
+}
+
+/* Do NOT attempt to divide by a negative number */
+static inline spx_float_t FLOAT_DIV32_FLOAT(spx_word32_t a, spx_float_t b)
+{
+ int e=0;
+ spx_float_t r;
+ if (a==0)
+ {
+ return FLOAT_ZERO;
+ }
+ e = spx_ilog2(ABS32(a))-spx_ilog2(b.m-1)-15;
+ a = VSHR32(a, e);
+ if (ABS32(a)>=SHL32(EXTEND32(b.m-1),15))
+ {
+ a >>= 1;
+ e++;
+ }
+ r.m = DIV32_16(a,b.m);
+ r.e = e-b.e;
+ return r;
+}
+
+
+/* Do NOT attempt to divide by a negative number */
+static inline spx_float_t FLOAT_DIV32(spx_word32_t a, spx_word32_t b)
+{
+ int e0=0,e=0;
+ spx_float_t r;
+ if (a==0)
+ {
+ return FLOAT_ZERO;
+ }
+ if (b>32767)
+ {
+ e0 = spx_ilog2(b)-14;
+ b = VSHR32(b, e0);
+ e0 = -e0;
+ }
+ e = spx_ilog2(ABS32(a))-spx_ilog2(b-1)-15;
+ a = VSHR32(a, e);
+ if (ABS32(a)>=SHL32(EXTEND32(b-1),15))
+ {
+ a >>= 1;
+ e++;
+ }
+ e += e0;
+ r.m = DIV32_16(a,b);
+ r.e = e;
+ return r;
+}
+
+/* Do NOT attempt to divide by a negative number */
+static inline spx_float_t FLOAT_DIVU(spx_float_t a, spx_float_t b)
+{
+ int e=0;
+ spx_int32_t num;
+ spx_float_t r;
+ if (b.m<=0)
+ {
+ speex_warning_int("Attempted to divide by", b.m);
+ return FLOAT_ONE;
+ }
+ num = a.m;
+ a.m = ABS16(a.m);
+ while (a.m >= b.m)
+ {
+ e++;
+ a.m >>= 1;
+ }
+ num = num << (15-e);
+ r.m = DIV32_16(num,b.m);
+ r.e = a.e-b.e-15+e;
+ return r;
+}
+
+static inline spx_float_t FLOAT_SQRT(spx_float_t a)
+{
+ spx_float_t r;
+ spx_int32_t m;
+ m = SHL32(EXTEND32(a.m), 14);
+ r.e = a.e - 14;
+ if (r.e & 1)
+ {
+ r.e -= 1;
+ m <<= 1;
+ }
+ r.e >>= 1;
+ r.m = spx_sqrt(m);
+ return r;
+}
+
+#else
+
+#define spx_float_t float
+#define FLOAT_ZERO 0.f
+#define FLOAT_ONE 1.f
+#define FLOAT_HALF 0.5f
+#define PSEUDOFLOAT(x) (x)
+#define FLOAT_MULT(a,b) ((a)*(b))
+#define FLOAT_AMULT(a,b) ((a)*(b))
+#define FLOAT_MUL32(a,b) ((a)*(b))
+#define FLOAT_DIV32(a,b) ((a)/(b))
+#define FLOAT_EXTRACT16(a) (a)
+#define FLOAT_EXTRACT32(a) (a)
+#define FLOAT_ADD(a,b) ((a)+(b))
+#define FLOAT_SUB(a,b) ((a)-(b))
+#define REALFLOAT(x) (x)
+#define FLOAT_DIV32_FLOAT(a,b) ((a)/(b))
+#define FLOAT_MUL32U(a,b) ((a)*(b))
+#define FLOAT_SHL(a,b) (a)
+#define FLOAT_LT(a,b) ((a)<(b))
+#define FLOAT_GT(a,b) ((a)>(b))
+#define FLOAT_DIVU(a,b) ((a)/(b))
+#define FLOAT_SQRT(a) (spx_sqrt(a))
+
+#endif
+
+#endif
diff --git a/jni/pjproject-android/.svn/pristine/d4/d463b6ddd1c612d3280917c8450810ba2679495b.svn-base b/jni/pjproject-android/.svn/pristine/d4/d463b6ddd1c612d3280917c8450810ba2679495b.svn-base
new file mode 100644
index 0000000..28ea02e
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d463b6ddd1c612d3280917c8450810ba2679495b.svn-base
@@ -0,0 +1,310 @@
+/*
+ * lfsr.c
+ *
+ */
+
+
+#include <stdio.h>
+#include "datatypes.h"
+
+uint32_t
+parity(uint32_t x) {
+
+ x ^= (x >> 16);
+ x ^= (x >> 8);
+ x ^= (x >> 4);
+ x ^= (x >> 2);
+ x ^= (x >> 1);
+
+ return x & 1;
+}
+
+
+/* typedef struct { */
+/* uint32_t register[8]; */
+/* } lfsr_t; */
+
+void
+compute_period(uint32_t feedback_polynomial) {
+ int i;
+ v32_t lfsr;
+ v32_t mask;
+
+ mask.value = feedback_polynomial;
+ lfsr.value = 1;
+
+ printf("polynomial: %s\t", v32_bit_string(mask));
+
+ for (i=0; i < 256; i++) {
+/* printf("%s\n", v32_bit_string(lfsr)); */
+ if (parity(mask.value & lfsr.value))
+ lfsr.value = ((lfsr.value << 1) | 1) & 0xff;
+ else
+ lfsr.value = (lfsr.value << 1) & 0xff;
+
+ /* now halt if we're back at the initial state */
+ if (lfsr.value == 1) {
+ printf("period: %d\n", i);
+ break;
+ }
+ }
+}
+
+uint32_t poly0 = 223;
+
+
+uint32_t polynomials[39] = {
+31,
+47,
+55,
+59,
+61,
+79,
+87,
+91,
+103,
+107,
+109,
+115,
+117,
+121,
+143,
+151,
+157,
+167,
+171,
+173,
+179,
+181,
+185,
+199,
+203,
+205,
+211,
+213,
+227,
+229,
+233,
+241,
+127,
+191,
+223,
+239,
+247,
+251,
+253
+};
+
+char binary_string[32];
+
+char *
+u32_bit_string(uint32_t x, unsigned int length) {
+ unsigned int mask;
+ int index;
+
+ mask = 1 << length;
+ index = 0;
+ for (; mask > 0; mask >>= 1)
+ if ((x & mask) == 0)
+ binary_string[index++] = '0';
+ else
+ binary_string[index++] = '1';
+
+ binary_string[index++] = 0; /* NULL terminate string */
+ return binary_string;
+}
+
+extern int octet_weight[256];
+
+unsigned int
+weight(uint32_t poly) {
+ int wt = 0;
+
+ /* note: endian-ness makes no difference */
+ wt += octet_weight[poly & 0xff];
+ wt += octet_weight[(poly >> 8) & 0xff];
+ wt += octet_weight[(poly >> 16) & 0xff];
+ wt += octet_weight[(poly >> 24)];
+
+ return wt;
+}
+
+#define MAX_PERIOD 65535
+
+#define debug_print 0
+
+int
+period(uint32_t poly) {
+ int i;
+ uint32_t x;
+
+
+ /* set lfsr to 1 */
+ x = 1;
+#if debug_print
+ printf("%d:\t%s\n", 0, u32_bit_string(x,8));
+#endif
+ for (i=1; i < MAX_PERIOD; i++) {
+ if (x & 1)
+ x = (x >> 1) ^ poly;
+ else
+ x = (x >> 1);
+
+#if debug_print
+ /* print for a sanity check */
+ printf("%d:\t%s\n", i, u32_bit_string(x,8));
+#endif
+
+ /* check for return to original value */
+ if (x == 1)
+ return i;
+ }
+ return i;
+}
+
+/*
+ * weight distribution computes the weight distribution of the
+ * code generated by the polynomial poly
+ */
+
+#define MAX_LEN 8
+#define MAX_WEIGHT (1 << MAX_LEN)
+
+int A[MAX_WEIGHT+1];
+
+void
+weight_distribution2(uint32_t poly, int *A) {
+ int i;
+ uint32_t x;
+
+ /* zeroize array */
+ for (i=0; i < MAX_WEIGHT+1; i++)
+ A[i] = 0;
+
+ /* loop over all input sequences */
+
+
+ /* set lfsr to 1 */
+ x = 1;
+#if debug_print
+ printf("%d:\t%s\n", 0, u32_bit_string(x,8));
+#endif
+ for (i=1; i < MAX_PERIOD; i++) {
+ if (x & 1)
+ x = (x >> 1) ^ poly;
+ else
+ x = (x >> 1);
+
+#if debug_print
+ /* print for a sanity check */
+ printf("%d:\t%s\n", i, u32_bit_string(x,8));
+#endif
+
+ /* increment weight */
+ wt += (x & 1);
+
+ /* check for return to original value */
+ if (x == 1)
+ break;
+ }
+
+ /* set zero */
+ A[0] = 0;
+}
+
+
+void
+weight_distribution(uint32_t poly, int *A) {
+ int i;
+ uint32_t x;
+
+ /* zeroize array */
+ for (i=0; i < MAX_WEIGHT+1; i++)
+ A[i] = 0;
+
+ /* set lfsr to 1 */
+ x = 1;
+#if debug_print
+ printf("%d:\t%s\n", 0, u32_bit_string(x,8));
+#endif
+ for (i=1; i < MAX_PERIOD; i++) {
+ if (x & 1)
+ x = (x >> 1) ^ poly;
+ else
+ x = (x >> 1);
+
+#if debug_print
+ /* print for a sanity check */
+ printf("%d:\t%s\n", i, u32_bit_string(x,8));
+#endif
+
+ /* compute weight, increment proper element */
+ A[weight(x)]++;
+
+ /* check for return to original value */
+ if (x == 1)
+ break;
+ }
+
+ /* set zero */
+ A[0] = 0;
+}
+
+
+
+
+int
+main () {
+
+ int i,j;
+ v32_t x;
+ v32_t p;
+
+ /* originally 0xaf */
+ p.value = 0x9;
+
+ printf("polynomial: %s\tperiod: %d\n",
+ u32_bit_string(p.value,8), period(p.value));
+
+ /* compute weight distribution */
+ weight_distribution(p.value, A);
+
+ /* print weight distribution */
+ for (i=0; i <= 8; i++) {
+ printf("A[%d]: %d\n", i, A[i]);
+ }
+
+#if 0
+ for (i=0; i < 39; i++) {
+ printf("polynomial: %s\tperiod: %d\n",
+ u32_bit_string(polynomials[i],8), period(polynomials[i]));
+
+ /* compute weight distribution */
+ weight_distribution(p.value, A);
+
+ /* print weight distribution */
+ for (j=0; j <= 8; j++) {
+ printf("A[%d]: %d\n", j, A[j]);
+ }
+ }
+#endif
+
+ {
+ int bits = 8;
+ uint32_t y;
+ for (y=0; y < (1 << bits); y++) {
+ printf("polynomial: %s\tweight: %d\tperiod: %d\n",
+ u32_bit_string(y,bits), weight(y), period(y));
+
+ /* compute weight distribution */
+ weight_distribution(y, A);
+
+ /* print weight distribution */
+ for (j=0; j <= 8; j++) {
+ printf("A[%d]: %d\n", j, A[j]);
+ }
+ }
+ }
+
+ return 0;
+}
diff --git a/jni/pjproject-android/.svn/pristine/d4/d468e793b97fa7d27a38c197ba964069720ff740.svn-base b/jni/pjproject-android/.svn/pristine/d4/d468e793b97fa7d27a38c197ba964069720ff740.svn-base
new file mode 100644
index 0000000..64e917a
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d468e793b97fa7d27a38c197ba964069720ff740.svn-base
@@ -0,0 +1,83 @@
+/* $Id$ */
+/*
+ * Copyright (C) 2008-2011 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
+ */
+#include <pj/types.h>
+#include <pj/compat/string.h>
+#include <pj/ctype.h>
+#include <pj/assert.h>
+
+
+#if defined(PJ_HAS_STRING_H) && PJ_HAS_STRING_H != 0
+/* Nothing to do */
+#else
+PJ_DEF(int) strcasecmp(const char *s1, const char *s2)
+{
+ while ((*s1==*s2) || (pj_tolower(*s1)==pj_tolower(*s2))) {
+ if (!*s1++)
+ return 0;
+ ++s2;
+ }
+ return (pj_tolower(*s1) < pj_tolower(*s2)) ? -1 : 1;
+}
+
+PJ_DEF(int) strncasecmp(const char *s1, const char *s2, int len)
+{
+ if (!len) return 0;
+
+ while ((*s1==*s2) || (pj_tolower(*s1)==pj_tolower(*s2))) {
+ if (!*s1++ || --len <= 0)
+ return 0;
+ ++s2;
+ }
+ return (pj_tolower(*s1) < pj_tolower(*s2)) ? -1 : 1;
+}
+#endif
+
+#if defined(PJ_HAS_NO_SNPRINTF) && PJ_HAS_NO_SNPRINTF != 0
+
+PJ_DEF(int) snprintf(char *s1, pj_size_t len, const char *s2, ...)
+{
+ int ret;
+ va_list arg;
+
+ PJ_UNUSED_ARG(len);
+
+ va_start(arg, s2);
+ ret = vsprintf(s1, s2, arg);
+ va_end(arg);
+
+ return ret;
+}
+
+PJ_DEF(int) vsnprintf(char *s1, pj_size_t len, const char *s2, va_list arg)
+{
+#define MARK_CHAR ((char)255)
+ int rc;
+
+ s1[len-1] = MARK_CHAR;
+
+ rc = vsprintf(s1,s2,arg);
+
+ pj_assert(s1[len-1] == MARK_CHAR || s1[len-1] == '\0');
+
+ return rc;
+}
+
+#endif
+
diff --git a/jni/pjproject-android/.svn/pristine/d4/d4904b058799c5c263ec4ce6a0e043210cc8728f.svn-base b/jni/pjproject-android/.svn/pristine/d4/d4904b058799c5c263ec4ce6a0e043210cc8728f.svn-base
new file mode 100644
index 0000000..c2147bb
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d4904b058799c5c263ec4ce6a0e043210cc8728f.svn-base
@@ -0,0 +1,26 @@
+/* $Id$ */
+/*
+ * Copyright (C) 2008-2011 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
+ */
+#include <pj/addr_resolv.h>
+
+PJ_DEF(pj_status_t) pj_gethostbyname(const pj_str_t *hostname, pj_hostent *phe)
+{
+ return -1;
+}
+
diff --git a/jni/pjproject-android/.svn/pristine/d4/d4fe9ed93f9a35db29ad08970551b0ea80604b30.svn-base b/jni/pjproject-android/.svn/pristine/d4/d4fe9ed93f9a35db29ad08970551b0ea80604b30.svn-base
new file mode 100644
index 0000000..19c0fcd
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/d4/d4fe9ed93f9a35db29ad08970551b0ea80604b30.svn-base
@@ -0,0 +1,101 @@
+//------------------------------------------------------------------------------
+// File: FourCC.h
+//
+// Desc: DirectShow base classes.
+//
+// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
+//------------------------------------------------------------------------------
+
+
+// FOURCCMap
+//
+// provides a mapping between old-style multimedia format DWORDs
+// and new-style GUIDs.
+//
+// A range of 4 billion GUIDs has been allocated to ensure that this
+// mapping can be done straightforwardly one-to-one in both directions.
+//
+// January 95
+
+
+#ifndef __FOURCC__
+#define __FOURCC__
+
+
+// Multimedia format types are marked with DWORDs built from four 8-bit
+// chars and known as FOURCCs. New multimedia AM_MEDIA_TYPE definitions include
+// a subtype GUID. In order to simplify the mapping, GUIDs in the range:
+// XXXXXXXX-0000-0010-8000-00AA00389B71
+// are reserved for FOURCCs.
+
+class FOURCCMap : public GUID
+{
+
+public:
+ FOURCCMap();
+ FOURCCMap(DWORD Fourcc);
+ FOURCCMap(const GUID *);
+
+
+ DWORD GetFOURCC(void);
+ void SetFOURCC(DWORD fourcc);
+ void SetFOURCC(const GUID *);
+
+private:
+ void InitGUID();
+};
+
+#define GUID_Data2 0
+#define GUID_Data3 0x10
+#define GUID_Data4_1 0xaa000080
+#define GUID_Data4_2 0x719b3800
+
+inline void
+FOURCCMap::InitGUID() {
+ Data2 = GUID_Data2;
+ Data3 = GUID_Data3;
+ ((DWORD *)Data4)[0] = GUID_Data4_1;
+ ((DWORD *)Data4)[1] = GUID_Data4_2;
+}
+
+inline
+FOURCCMap::FOURCCMap() {
+ InitGUID();
+ SetFOURCC( DWORD(0));
+}
+
+inline
+FOURCCMap::FOURCCMap(DWORD fourcc)
+{
+ InitGUID();
+ SetFOURCC(fourcc);
+}
+
+inline
+FOURCCMap::FOURCCMap(const GUID * pGuid)
+{
+ InitGUID();
+ SetFOURCC(pGuid);
+}
+
+inline void
+FOURCCMap::SetFOURCC(const GUID * pGuid)
+{
+ FOURCCMap * p = (FOURCCMap*) pGuid;
+ SetFOURCC(p->GetFOURCC());
+}
+
+inline void
+FOURCCMap::SetFOURCC(DWORD fourcc)
+{
+ Data1 = fourcc;
+}
+
+inline DWORD
+FOURCCMap::GetFOURCC(void)
+{
+ return Data1;
+}
+
+#endif /* __FOURCC__ */
+