From: <wt...@ke...> - 2008-09-26 14:45:19
|
CVS Root: /cvs/gstreamer Module: gst-plugins-good Changes by: wtay Date: Fri Sep 26 2008 14:45:03 UTC Log message: * gst/rtp/gstrtpamrdepay.c: (gst_rtp_amr_depay_class_init), (gst_rtp_amr_depay_process): Mark DISCONT on output buffers when the marker bit signals a new talk spurt. * gst/rtp/gstrtpamrpay.c: (gst_rtp_amr_pay_handle_buffer): Set the marker bit for buffers with a DISCONT flag to signal a talk spurt. Modified files: . : ChangeLog gst/rtp : gstrtpamrdepay.c gstrtpamrpay.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-good/ChangeLog.diff?r1=1.3744&r2=1.3745 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-good/gst/rtp/gstrtpamrdepay.c.diff?r1=1.29&r2=1.30 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-good/gst/rtp/gstrtpamrpay.c.diff?r1=1.23&r2=1.24 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-good/ChangeLog,v retrieving revision 1.3744 retrieving revision 1.3745 diff -u -d -r1.3744 -r1.3745 --- ChangeLog 26 Sep 2008 13:55:46 -0000 1.3744 +++ ChangeLog 26 Sep 2008 14:44:47 -0000 1.3745 @@ -1,5 +1,16 @@ 2008-09-26 Wim Taymans <wim...@co...> + * gst/rtp/gstrtpamrdepay.c: (gst_rtp_amr_depay_class_init), + (gst_rtp_amr_depay_process): + Mark DISCONT on output buffers when the marker bit signals a new talk + spurt. + + * gst/rtp/gstrtpamrpay.c: (gst_rtp_amr_pay_handle_buffer): + Set the marker bit for buffers with a DISCONT flag to signal a talk +2008-09-26 Wim Taymans <wim...@co...> * gst/rtp/Makefile.am: * gst/rtp/gstrtp.c: (plugin_init): * gst/rtp/gstrtpmp4apay.c: (gst_rtp_mp4a_pay_get_type), Index: gstrtpamrdepay.c RCS file: /cvs/gstreamer/gst-plugins-good/gst/rtp/gstrtpamrdepay.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- gstrtpamrdepay.c 21 Sep 2007 11:34:34 -0000 1.29 +++ gstrtpamrdepay.c 26 Sep 2008 14:44:49 -0000 1.30 @@ -27,6 +27,9 @@ #include <string.h> #include "gstrtpamrdepay.h" +GST_DEBUG_CATEGORY_STATIC (rtpamrdepay_debug); +#define GST_CAT_DEFAULT (rtpamrdepay_debug) /* references: * * RFC 3267 - Real-Time Transport Protocol (RTP) Payload Format and File @@ -146,6 +149,9 @@ gstbasertpdepayload_class->process = gst_rtp_amr_depay_process; gstbasertpdepayload_class->set_caps = gst_rtp_amr_depay_setcaps; + GST_DEBUG_CATEGORY_INIT (rtpamrdepay_debug, "rtpamrdepay", 0, + "AMR/AMR-WB RTP Depayloader"); } static void @@ -304,7 +310,9 @@ gint i, num_packets, num_nonempty_packets; gint amr_len; gint ILL, ILP; + gboolean marker; + marker = gst_rtp_buffer_get_marker (buf); payload_len = gst_rtp_buffer_get_payload_len (buf); /* need at least 2 bytes for the header */ @@ -412,10 +420,17 @@ /* we can set the duration because each packet is 20 milliseconds */ GST_BUFFER_DURATION (outbuf) = num_packets * 20 * GST_MSECOND; + if (marker) { + /* marker bit marks a discont buffer */ + GST_DEBUG_OBJECT (depayload, "marker bit was set"); + GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); + marker = FALSE; + } gst_buffer_set_caps (outbuf, GST_PAD_CAPS (GST_BASE_RTP_DEPAYLOAD_SRCPAD (depayload))); - GST_DEBUG ("gst_rtp_amr_depay_chain: pushing buffer of size %d", + GST_DEBUG_OBJECT (depayload, "pushing buffer of size %d", GST_BUFFER_SIZE (outbuf)); } return outbuf; Index: gstrtpamrpay.c RCS file: /cvs/gstreamer/gst-plugins-good/gst/rtp/gstrtpamrpay.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- gstrtpamrpay.c 9 Jan 2008 11:10:59 -0000 1.23 +++ gstrtpamrpay.c 26 Sep 2008 14:44:49 -0000 1.24 @@ -211,6 +211,7 @@ gint i, num_packets, num_nonempty_packets; gint amr_len; gint *frame_size; + gboolean discont; rtpamrpay = GST_RTP_AMR_PAY (basepayload); mtu = GST_BASE_RTP_PAYLOAD_MTU (rtpamrpay); @@ -219,6 +220,7 @@ data = GST_BUFFER_DATA (buffer); timestamp = GST_BUFFER_TIMESTAMP (buffer); duration = GST_BUFFER_DURATION (buffer); + discont = GST_BUFFER_IS_DISCONT (buffer); /* setup frame size pointer */ if (rtpamrpay->mode == GST_RTP_AMR_P_MODE_NB) @@ -267,23 +269,23 @@ /* now alloc output buffer */ outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0); - /* copy timestamp, or fabricate one */ - if (timestamp != GST_CLOCK_TIME_NONE) - GST_BUFFER_TIMESTAMP (outbuf) = timestamp; - else { - /* AMR (nb) and AMR-WB both have 20 ms per frame */ - /* FIXME: when we do more than one AMR frame per packet, fix this */ - gint count = basepayload->seqnum - basepayload->seqnum_base; - - GST_BUFFER_TIMESTAMP (outbuf) = count * 20 * GST_MSECOND; - } + /* copy timestamp */ + GST_BUFFER_TIMESTAMP (outbuf) = timestamp; + /* FIXME: when we do more than one AMR frame per packet, fix this */ if (duration != GST_CLOCK_TIME_NONE) GST_BUFFER_DURATION (outbuf) = duration; else { GST_BUFFER_DURATION (outbuf) = 20 * GST_MSECOND; + if (discont) { + GST_DEBUG_OBJECT (basepayload, "discont, setting marker bit"); + GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); + gst_rtp_buffer_set_marker (outbuf, TRUE); + discont = FALSE; + } /* get payload, this is now writable */ payload = gst_rtp_buffer_get_payload (outbuf); |