How to use rtpdtmfdepay from gstreamer
amar
asontakke at phonologies.com
Thu Oct 31 13:08:58 CET 2013
Hi Oliver,
I get the problem cause for this SIGFPE. I gave clock-rate=0 in udpsrc caps
to receive dtmf. Sorry for the post.
Thanks,
Amar.
On Thu, Oct 31, 2013 at 4:32 PM, amar <asontakke at phonologies.com> wrote:
> Hi Olivier,
>
> I have written a C code to catch rtp DTMF event. I am able to catch the
> GST_MESSAGE_ELEMENT from my bus. I am using rtpdtmfdepay for the above
> opration. But as pipeline get the DTMF RTP EVENT it throws a segmentation
> fault due to SIGFPE (floating point exception ). I tried to debug this with
> gdb but not getting any success for resolving the problem. I am giving my
> code and back-trace of the problem. Please look at once, what is going
> wrong ?
>
> I am using the followimg code to catch RTP DTMF Event :
>
> ***********************************************************************************
> #include <gst/gst.h>
>
> static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
> {
> GMainLoop *loop = (GMainLoop *) data;
> switch (GST_MESSAGE_TYPE (msg)) {
> case GST_MESSAGE_EOS:
> g_print ("End of stream\n");
> g_main_loop_quit (loop);
> break;
> case GST_MESSAGE_ERROR:{
> gchar *debug;
> GError *error;
> gst_message_parse_error (msg, &error, &debug);
> g_free (debug);
> g_printerr ("Error: %s\n", error->message);
> g_error_free (error);
> g_main_loop_quit (loop);
> break;
> }
> case GST_MESSAGE_ELEMENT:
> g_print("**************Getting
> GST_MESSAGE_ELEMENT*************\n");
> break;
> default:
> break;
> }
> }
>
> int main (int argc, char *argv[])
> {
> GMainLoop *loop;
> GstElement *pipeline, *asource, *acapsfilter, *pcmurtpdepay, *sink;
> GstBus *bus;
> guint bus_watch_id;
> GstCaps *caps;
>
> /* Initialisation */
> gst_init (&argc, &argv);
> loop = g_main_loop_new (NULL, FALSE);
>
> /* Create gstreamer elements */
> pipeline = gst_pipeline_new ("av-recorder");
> asource = gst_element_factory_make ("udpsrc", "aud-source");
> acapsfilter = gst_element_factory_make ("capsfilter", "audio-caps");
> pcmurtpdepay = gst_element_factory_make ("rtpdtmfdepay", "artpdepay");
> sink = gst_element_factory_make ("filesink", "file-output");
>
> if (!pipeline || !asource || !acapsfilter || !pcmurtpdepay || !sink) {
> g_printerr ("One element could not be created. Exiting.\n");
> return -1;
> }
>
> g_object_set (G_OBJECT (asource), "port", 3333, NULL);
> g_object_set (G_OBJECT (sink), "location", "event", NULL);
>
> caps =
> gst_caps_from_string("application/x-rtp,encoding-name=TELEPHONE-EVENT,payload=101,media=(string)audio,
> clock-rate=(int)0");
> g_object_set (G_OBJECT (acapsfilter), "caps", caps, NULL);
> gst_caps_unref (caps);
> bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
> bus_watch_id = gst_bus_add_watch (bus, bus_call, loop);
> gst_object_unref (bus);
>
> gst_bin_add_many (GST_BIN (pipeline),
> asource, acapsfilter, pcmurtpdepay,
> sink, NULL);
>
> gst_element_link_many (asource, acapsfilter, pcmurtpdepay, sink, NULL);
>
> gst_element_set_state (pipeline, GST_STATE_PLAYING);
>
> g_print ("Recording (or not!)...\n");
> g_main_loop_run (loop);
> g_print ("Returned, stopping recording\n");
> gst_element_set_state (pipeline, GST_STATE_NULL);
>
> g_print ("Deleting pipeline\n");
> gst_object_unref (GST_OBJECT (pipeline));
> g_source_remove (bus_watch_id);
> g_main_loop_unref (loop);
>
> return 0;
> }
>
> *********************************************************************************************
>
> Following is a back-trace from gdb :
>
> $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
> [amar at localhost gstreamer]$ gdb ./tele_event
> GNU gdb (GDB) Fedora (7.6-30.fc19)
> Copyright (C) 2013 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <
> http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law. Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "i686-redhat-linux-gnu".
> For bug reporting instructions, please see:
> <http://www.gnu.org/software/gdb/bugs/>...
> Reading symbols from /home/amar/gstreamer/tele_event...(no debugging
> symbols found)...done.
> (gdb) run event
> Starting program: /home/amar/gstreamer/tele_event event
> Traceback (most recent call last):
> File "/usr/share/gdb/auto-load/usr/lib/libgobject-2.0.so.0.3600.3-gdb.py",
> line 9, in <module>
> from gobject import register
> File "/usr/share/glib-2.0/gdb/gobject.py", line 3, in <module>
> import gdb.backtrace
> ImportError: No module named backtrace
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/libthread_db.so.1".
> [New Thread 0xb7d4db40 (LWP 5999)]
> Recording (or not!)...
> **************Getting GST_MESSAGE_ELEMENT*************
>
> Program received signal SIGFPE, Arithmetic exception.
> [Switching to Thread 0xb7d4db40 (LWP 5999)]
> 0xb7de0743 in __divdi3 () from /usr/lib/gstreamer-1.0/libgstdtmf.so
> (gdb) bt
> #0 0xb7de0743 in __divdi3 () from /usr/lib/gstreamer-1.0/libgstdtmf.so
> #1 0xb7ddee04 in gst_dtmf_src_generate_tone (payload=...,
> rtpdtmfdepay=0x816e0f8) at gstrtpdtmfdepay.c:356
> #2 gst_rtp_dtmf_depay_process (depayload=0x816e0f8, buf=0x81746f0) at
> gstrtpdtmfdepay.c:506
> #3 0xb7d5d11c in gst_rtp_base_depayload_chain (pad=0x81624e0,
> parent=0x816e0f8, in=0x81746f0)
> at gstrtpbasedepayload.c:353
> #4 0x449cf222 in gst_pad_chain_data_unchecked (data=0x81746f0,
> type=<optimized out>, pad=0x81624e0)
> at gstpad.c:3655
> #5 gst_pad_push_data (pad=0x81623a8, type=type at entry=4112,
> data=0x81746f0) at gstpad.c:3872
> #6 0x449d671f in gst_pad_push (pad=0x81746f0, buffer=0x81746f0) at
> gstpad.c:3975
> #7 0x43a8dd0d in gst_base_transform_chain (pad=0x8162270,
> parent=0x816c1b8, buffer=0x81746f0)
> at gstbasetransform.c:2212
> #8 0x449cf222 in gst_pad_chain_data_unchecked (data=0x81746f0,
> type=<optimized out>, pad=0x8162270)
> at gstpad.c:3655
> #9 gst_pad_push_data (pad=0x8162138, type=type at entry=4112,
> data=0x81746f0) at gstpad.c:3872
> #10 0x449d671f in gst_pad_push (pad=0x81746f0, pad at entry=0x8162138,
> buffer=0x81746f0) at gstpad.c:3975
> #11 0x43a843bf in gst_base_src_loop (pad=0x8162138) at gstbasesrc.c:2726
> #12 0x449fffc8 in gst_task_func (task=task at entry=0x8174010) at
> gsttask.c:316
> #13 0x44a00f70 in default_func (tdata=0x81661e0, pool=0x805cc10) at
> gsttaskpool.c:70
> #14 0x4f28b475 in g_thread_pool_thread_proxy (data=0x805c8d0) at
> gthreadpool.c:309
> #15 0x4f28a96b in g_thread_proxy (data=0x8055780) at gthread.c:798
> #16 0x4f1089da in start_thread (arg=0xb7d4db40) at pthread_create.c:308
> #17 0x4f038c0e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:131
> (gdb) f 0
> #0 0xb7de0743 in __divdi3 () from /usr/lib/gstreamer-1.0/libgstdtmf.so
> (gdb) info local
> No symbol table info available.
> (gdb) info locals
> No symbol table info available.
> (gdb) info args
> No symbol table info available.
> (gdb) info threads
> Id Target Id Frame
> * 2 Thread 0xb7d4db40 (LWP 5999) "aud-source:src" 0xb7de0743 in
> __divdi3 ()
> from /usr/lib/gstreamer-1.0/libgstdtmf.so
> 1 Thread 0xb7fe66c0 (LWP 5995) "tele_event" 0xb7fff424 in
> __kernel_vsyscall ()
>
> $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
>
> Thanks,
> Amar.
>
> On Wed, Oct 30, 2013 at 4:08 PM, Olivier Crête <
> olivier.crete at collabora.com> wrote:
>
>> Hi,
>>
>> On Wed, 2013-10-30 at 15:09 +0530, amar wrote:
>> > Thank you for giving response to my query.
>> > Please can you give me any example for grepping the DTMF event from
>> > rtpdtmfdepay.
>> >
>> > I am unable to catch the DTMF event from messege bus. How to catch the
>> > DTMF event from GstMessege ?
>>
>> You should receive a message of type GST_MESSAGE_ELEMENT. This only
>> works if you receive DTMF as RTP telephone-event messages, if you
>> receive the DTMF as sound, you need to use the dtmfdetect element from
>> the spandsp plugin. This element will also emit the same messages where
>> it gets DTMF sound.
>>
>> --
>> Olivier Crête
>> olivier.crete at collabora.com
>>
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20131031/62f106b8/attachment-0001.html>
More information about the gstreamer-devel
mailing list