diff --git a/openbsc/contrib/testconv/testconv_main.c b/openbsc/contrib/testconv/testconv_main.c
new file mode 100644
index 0000000..c2785f2
--- /dev/null
+++ b/openbsc/contrib/testconv/testconv_main.c
@@ -0,0 +1,91 @@
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <err.h>
+
+#include <osmocom/core/talloc.h>
+#include <osmocom/core/application.h>
+
+#include <openbsc/debug.h>
+#include <openbsc/gsm_data.h>
+#include <openbsc/mgcp.h>
+#include <openbsc/mgcp_internal.h>
+
+#include "bscconfig.h"
+#ifndef BUILD_MGCP_TRANSCODING
+#error "Requires MGCP transcoding enabled (see --enable-mgcp-transcoding)"
+#endif
+
+#include "src/osmo-bsc_mgcp/mgcp_transcode.h"
+
+static int audio_name_to_type(const char *name)
+{
+	if (!strcasecmp(name, "gsm"))
+		return 3;
+#ifdef HAVE_BCG729
+	else if (!strcasecmp(name, "g729"))
+		return 18;
+#endif
+	else if (!strcasecmp(name, "pcma"))
+		return 8;
+	else if (!strcasecmp(name, "l16"))
+		return 11;
+	return -1;
+}
+
+int mgcp_get_trans_frame_size(void *state_, int nsamples, int dst);
+
+int main(int argc, char **argv)
+{
+	char buf[4096] = {0};
+	int cc, rc;
+	struct mgcp_rtp_end dst_end = {0};
+	struct mgcp_rtp_end src_end = {0};
+	struct mgcp_trunk_config tcfg = {{0}};
+	struct mgcp_endpoint endp = {0};
+	struct mgcp_process_rtp_state *state;
+	int in_size;
+
+	osmo_init_logging(&log_info);
+
+	tcfg.endpoints = &endp;
+	tcfg.number_endpoints = 1;
+	endp.tcfg = &tcfg;
+
+	if (argc <= 2)
+		errx(1, "Usage: {gsm|g729|pcma|l16} {gsm|g729|pcma|l16}");
+
+	if ((src_end.payload_type = audio_name_to_type(argv[1])) == -1)
+		errx(1, "invalid input format '%s'", argv[1]);
+	if ((dst_end.payload_type = audio_name_to_type(argv[2])) == -1)
+		errx(1, "invalid output format '%s'", argv[2]);
+
+	rc = mgcp_transcoding_setup(&endp, &dst_end, &src_end);
+	if (rc < 0)
+		errx(1, "setup failed: %s", strerror(-rc));
+
+	state = dst_end.rtp_process_data;
+	OSMO_ASSERT(state != NULL);
+
+	in_size = mgcp_transcoding_get_frame_size(state, 160, 0);
+	OSMO_ASSERT(sizeof(buf) >= in_size + 12);
+
+	while ((cc = read(0, buf + 12, in_size))) {
+		if (cc != in_size)
+			err(1, "read");
+
+		cc += 12; /* include RTP header */
+
+		rc = mgcp_transcoding_process_rtp(&endp, &dst_end,
+						  buf, &cc, sizeof(buf));
+		if (rc < 0)
+			errx(1, "processing failed: %s", strerror(-rc));
+
+		cc -= 12; /* ignore RTP header */
+		if (write(1, buf + 12, cc) != cc)
+			err(1, "write");
+	}
+	return 0;
+}
+
