Public feed #378953

Unnamed

public text v1 · immutable
Raw Edit
·published 2007-03-02 22:03 UTC
rendered paste body
Index: /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmapay.c
===================================================================
--- /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmapay.c (revision 2857)
+++ /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmapay.c (revision 2944)
@@ -56,15 +56,7 @@
 static gboolean gst_rtp_pcma_pay_setcaps (GstBaseRTPPayload * payload,
     GstCaps * caps);
-static GstFlowReturn gst_rtp_pcma_pay_handle_buffer (GstBaseRTPPayload *
-    payload, GstBuffer * buffer);
-static void gst_rtp_pcma_pay_finalize (GObject * object);
 
-GST_BOILERPLATE (GstRtpPmcaPay, gst_rtp_pcma_pay, GstBaseRTPPayload,
-    GST_TYPE_BASE_RTP_PAYLOAD);
-
-/* The lower limit for number of octet to put in one packet
- * (clock-rate=8000, octet-per-sample=1). The default 80 is equal
- * to to 10msec (see RFC3551) */
-#define GST_RTP_PCMA_MIN_PTIME_OCTETS   80
+GST_BOILERPLATE (GstRtpPmcaPay, gst_rtp_pcma_pay, GstBaseRTPAudioPayload,
+    GST_TYPE_BASE_RTP_AUDIO_PAYLOAD);
 
 static void
@@ -92,8 +84,6 @@
 
   parent_class = g_type_class_peek_parent (klass);
-  gobject_class->finalize = gst_rtp_pcma_pay_finalize;
 
   gstbasertppayload_class->set_caps = gst_rtp_pcma_pay_setcaps;
-  gstbasertppayload_class->handle_buffer = gst_rtp_pcma_pay_handle_buffer;
 }
 
@@ -101,19 +91,14 @@
 gst_rtp_pcma_pay_init (GstRtpPmcaPay * rtppcmapay, GstRtpPmcaPayClass * klass)
 {
-  rtppcmapay->adapter = gst_adapter_new ();
+  GstBaseRTPAudioPayload *basertpaudiopayload;
+  basertpaudiopayload = GST_BASE_RTP_AUDIO_PAYLOAD (rtppcmapay);
+
   GST_BASE_RTP_PAYLOAD (rtppcmapay)->clock_rate = 8000;
-}
 
-static void
-gst_rtp_pcma_pay_finalize (GObject * object)
-{
-  GstRtpPmcaPay *rtppcmapay;
+  /* tell basertpaudiopayload that this is a sample based codec */
+  gst_basertpaudiopayload_set_sample_based (basertpaudiopayload);
 
-  rtppcmapay = GST_RTP_PCMA_PAY (object);
-
-  g_object_unref (rtppcmapay->adapter);
-  rtppcmapay->adapter = NULL;
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
+  /* octet-per-sample is 1 for PCM */
+  gst_basertpaudiopayload_set_sample_options (basertpaudiopayload, 1);
 }
 
@@ -129,112 +114,4 @@
 }
 
-static GstFlowReturn
-gst_rtp_pcma_pay_flush (GstRtpPmcaPay * rtppcmapay, guint32 clock_rate)
-{
-  guint avail;
-  GstBuffer *outbuf;
-  GstFlowReturn ret;
-  guint maxptime_octets = G_MAXUINT;
-  guint minptime_octets = GST_RTP_PCMA_MIN_PTIME_OCTETS;
-
-  if (GST_BASE_RTP_PAYLOAD (rtppcmapay)->max_ptime > 0) {
-    /* calculate octet count with:
-       maxptime-nsec * samples-per-sec / nsecs-per-sec * octets-per-sample */
-    maxptime_octets =
-        gst_util_uint64_scale_int (GST_BASE_RTP_PAYLOAD (rtppcmapay)->max_ptime,
-        clock_rate, GST_SECOND);
-  }
-
-  /* the data available in the adapter is either smaller
-   * than the MTU or bigger. In the case it is smaller, the complete
-   * adapter contents can be put in one packet.  */
-  avail = gst_adapter_available (rtppcmapay->adapter);
-
-  ret = GST_FLOW_OK;
-
-  while (avail >= minptime_octets) {
-    guint8 *payload;
-    guint8 *data;
-    guint payload_len;
-    guint packet_len;
-
-    /* fill one MTU or all available bytes */
-    payload_len =
-        MIN (MIN (GST_BASE_RTP_PAYLOAD_MTU (rtppcmapay), maxptime_octets),
-        avail);
-
-    /* this will be the total lenght of the packet */
-    packet_len = gst_rtp_buffer_calc_packet_len (payload_len, 0, 0);
-
-    /* create buffer to hold the payload */
-    outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
-
-    /* copy payload */
-    gst_rtp_buffer_set_payload_type (outbuf,
-        GST_BASE_RTP_PAYLOAD_PT (rtppcmapay));
-    payload = gst_rtp_buffer_get_payload (outbuf);
-    data = (guint8 *) gst_adapter_peek (rtppcmapay->adapter, payload_len);
-    memcpy (payload, data, payload_len);
-    gst_adapter_flush (rtppcmapay->adapter, payload_len);
-
-    avail -= payload_len;
-
-    GST_BUFFER_TIMESTAMP (outbuf) = rtppcmapay->first_ts;
-    ret = gst_basertppayload_push (GST_BASE_RTP_PAYLOAD (rtppcmapay), outbuf);
-
-    /* increase count (in ts) of data pushed to basertppayload */
-    rtppcmapay->first_ts +=
-        gst_util_uint64_scale_int (payload_len, GST_SECOND, clock_rate);
-
-    /* store amount of unpushed data (in ts) */
-    rtppcmapay->duration =
-        gst_util_uint64_scale_int (avail, GST_SECOND, clock_rate);
-  }
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_rtp_pcma_pay_handle_buffer (GstBaseRTPPayload * basepayload,
-    GstBuffer * buffer)
-{
-  GstRtpPmcaPay *rtppcmapay;
-  guint size, packet_len, avail;
-  GstFlowReturn ret;
-  GstClockTime duration;
-  guint32 clock_rate;
-
-  rtppcmapay = GST_RTP_PCMA_PAY (basepayload);
-
-  clock_rate = basepayload->clock_rate;
-
-  size = GST_BUFFER_SIZE (buffer);
-  duration = gst_util_uint64_scale_int (size, GST_SECOND, clock_rate);
-
-  avail = gst_adapter_available (rtppcmapay->adapter);
-  if (avail == 0) {
-    rtppcmapay->first_ts = GST_BUFFER_TIMESTAMP (buffer);
-    rtppcmapay->duration = 0;
-  }
-
-  /* get packet length of data and see if we exceeded MTU. */
-  packet_len = gst_rtp_buffer_calc_packet_len (avail + size, 0, 0);
-
-  /* if this buffer is going to overflow the packet, flush what we
-   * have. */
-  if (gst_basertppayload_is_filled (basepayload,
-          packet_len, rtppcmapay->duration + duration)) {
-    ret = gst_rtp_pcma_pay_flush (rtppcmapay, clock_rate);
-    /* note: first_ts and duration updated in ...pay_flush() */
-  } else {
-    ret = GST_FLOW_OK;
-  }
-
-  gst_adapter_push (rtppcmapay->adapter, buffer);
-  rtppcmapay->duration += duration;
-
-  return ret;
-}
-
 gboolean
 gst_rtp_pcma_pay_plugin_init (GstPlugin * plugin)
Index: /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmapay.h
===================================================================
--- /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmapay.h (revision 2857)
+++ /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmapay.h (revision 2944)
@@ -18,6 +18,5 @@
 
 #include <gst/gst.h>
-#include <gst/rtp/gstbasertppayload.h>
-#include <gst/base/gstadapter.h>
+#include <gst/rtp/gstbasertpaudiopayload.h>
 
 G_BEGIN_DECLS
@@ -39,14 +38,10 @@
 struct _GstRtpPmcaPay
 {
-  GstBaseRTPPayload payload;
-  GstAdapter *adapter;
-  
-  GstClockTime first_ts;
-  GstClockTime duration;  
+  GstBaseRTPAudioPayload audiopayload;
 };
 
 struct _GstRtpPmcaPayClass
 {
-  GstBaseRTPPayloadClass parent_class;
+  GstBaseRTPAudioPayloadClass parent_class;
 };
 
Index: /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmupay.c
===================================================================
--- /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmupay.c (revision 2857)
+++ /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmupay.c (revision 2944)
@@ -56,15 +56,7 @@
 static gboolean gst_rtp_pcmu_pay_setcaps (GstBaseRTPPayload * payload,
     GstCaps * caps);
-static GstFlowReturn gst_rtp_pcmu_pay_handle_buffer (GstBaseRTPPayload *
-    payload, GstBuffer * buffer);
-static void gst_rtp_pcmu_pay_finalize (GObject * object);
 
-GST_BOILERPLATE (GstRtpPcmuPay, gst_rtp_pcmu_pay, GstBaseRTPPayload,
-    GST_TYPE_BASE_RTP_PAYLOAD);
-
-/* The lower limit for number of octet to put in one packet
- * (clock-rate=8000, octet-per-sample=1). The default 80 is equal
- * to to 10msec (see RFC3551) */
-#define GST_RTP_PCMU_MIN_PTIME_OCTETS   80
+GST_BOILERPLATE (GstRtpPcmuPay, gst_rtp_pcmu_pay, GstBaseRTPAudioPayload,
+    GST_TYPE_BASE_RTP_AUDIO_PAYLOAD);
 
 static void
@@ -92,8 +84,6 @@
 
   parent_class = g_type_class_peek_parent (klass);
-  gobject_class->finalize = gst_rtp_pcmu_pay_finalize;
 
   gstbasertppayload_class->set_caps = gst_rtp_pcmu_pay_setcaps;
-  gstbasertppayload_class->handle_buffer = gst_rtp_pcmu_pay_handle_buffer;
 }
 
@@ -101,19 +91,14 @@
 gst_rtp_pcmu_pay_init (GstRtpPcmuPay * rtppcmupay, GstRtpPcmuPayClass * klass)
 {
-  rtppcmupay->adapter = gst_adapter_new ();
+  GstBaseRTPAudioPayload *basertpaudiopayload;
+  basertpaudiopayload = GST_BASE_RTP_AUDIO_PAYLOAD (rtppcmupay);
+
   GST_BASE_RTP_PAYLOAD (rtppcmupay)->clock_rate = 8000;
-}
 
-static void
-gst_rtp_pcmu_pay_finalize (GObject * object)
-{
-  GstRtpPcmuPay *rtppcmupay;
+  /* tell basertpaudiopayload that this is a sample based codec */
+  gst_basertpaudiopayload_set_sample_based (basertpaudiopayload);
 
-  rtppcmupay = GST_RTP_PCMU_PAY (object);
-
-  g_object_unref (rtppcmupay->adapter);
-  rtppcmupay->adapter = NULL;
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
+  /* octet-per-sample is 1 for PCM */
+  gst_basertpaudiopayload_set_sample_options (basertpaudiopayload, 1);
 }
 
@@ -129,112 +114,4 @@
 }
 
-static GstFlowReturn
-gst_rtp_pcmu_pay_flush (GstRtpPcmuPay * rtppcmupay, guint32 clock_rate)
-{
-  guint avail;
-  GstBuffer *outbuf;
-  GstFlowReturn ret;
-  guint maxptime_octets = G_MAXUINT;
-  guint minptime_octets = GST_RTP_PCMU_MIN_PTIME_OCTETS;
-
-  if (GST_BASE_RTP_PAYLOAD (rtppcmupay)->max_ptime > 0) {
-    /* calculate octet count with:
-       maxptime-nsec * samples-per-sec / nsecs-per-sec * octets-per-sample */
-    maxptime_octets =
-        gst_util_uint64_scale_int (GST_BASE_RTP_PAYLOAD (rtppcmupay)->max_ptime,
-        clock_rate, GST_SECOND);
-  }
-
-  /* the data available in the adapter is either smaller
-   * than the MTU or bigger. In the case it is smaller, the complete
-   * adapter contents can be put in one packet.  */
-  avail = gst_adapter_available (rtppcmupay->adapter);
-
-  ret = GST_FLOW_OK;
-
-  while (avail >= minptime_octets) {
-    guint8 *payload;
-    guint8 *data;
-    guint payload_len;
-    guint packet_len;
-
-    /* fill one MTU or all available bytes */
-    payload_len =
-        MIN (MIN (GST_BASE_RTP_PAYLOAD_MTU (rtppcmupay), maxptime_octets),
-        avail);
-
-    /* this will be the total lenght of the packet */
-    packet_len = gst_rtp_buffer_calc_packet_len (payload_len, 0, 0);
-
-    /* create buffer to hold the payload */
-    outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
-
-    /* copy payload */
-    gst_rtp_buffer_set_payload_type (outbuf,
-        GST_BASE_RTP_PAYLOAD_PT (rtppcmupay));
-    payload = gst_rtp_buffer_get_payload (outbuf);
-    data = (guint8 *) gst_adapter_peek (rtppcmupay->adapter, payload_len);
-    memcpy (payload, data, payload_len);
-    gst_adapter_flush (rtppcmupay->adapter, payload_len);
-
-    avail -= payload_len;
-
-    GST_BUFFER_TIMESTAMP (outbuf) = rtppcmupay->first_ts;
-    ret = gst_basertppayload_push (GST_BASE_RTP_PAYLOAD (rtppcmupay), outbuf);
-
-    /* increase count (in ts) of data pushed to basertppayload */
-    rtppcmupay->first_ts +=
-        gst_util_uint64_scale_int (payload_len, GST_SECOND, clock_rate);
-
-    /* store amount of unpushed data (in ts) */
-    rtppcmupay->duration =
-        gst_util_uint64_scale_int (avail, GST_SECOND, clock_rate);
-  }
-
-  return ret;
-}
-
-static GstFlowReturn
-gst_rtp_pcmu_pay_handle_buffer (GstBaseRTPPayload * basepayload,
-    GstBuffer * buffer)
-{
-  GstRtpPcmuPay *rtppcmupay;
-  guint size, packet_len, avail;
-  GstFlowReturn ret;
-  GstClockTime duration;
-  guint32 clock_rate;
-
-  rtppcmupay = GST_RTP_PCMU_PAY (basepayload);
-
-  clock_rate = basepayload->clock_rate;
-
-  size = GST_BUFFER_SIZE (buffer);
-  duration = gst_util_uint64_scale_int (size, GST_SECOND, clock_rate);
-
-  avail = gst_adapter_available (rtppcmupay->adapter);
-  if (avail == 0) {
-    rtppcmupay->first_ts = GST_BUFFER_TIMESTAMP (buffer);
-    rtppcmupay->duration = 0;
-  }
-
-  /* get packet length of data and see if we exceeded MTU. */
-  packet_len = gst_rtp_buffer_calc_packet_len (avail + size, 0, 0);
-
-  /* if this buffer is going to overflow the packet, flush what we
-   * have. */
-  if (gst_basertppayload_is_filled (basepayload,
-          packet_len, rtppcmupay->duration + duration)) {
-    /* note: first_ts and duration updated in ...pay_flush() */
-    ret = gst_rtp_pcmu_pay_flush (rtppcmupay, clock_rate);
-  } else {
-    ret = GST_FLOW_OK;
-  }
-
-  gst_adapter_push (rtppcmupay->adapter, buffer);
-  rtppcmupay->duration += duration;
-
-  return ret;
-}
-
 gboolean
 gst_rtp_pcmu_pay_plugin_init (GstPlugin * plugin)
Index: /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmupay.h
===================================================================
--- /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmupay.h (revision 2857)
+++ /gagarin/trunk/gst-libraries/gst-plugins-good/gst/rtp/gstrtppcmupay.h (revision 2944)
@@ -18,6 +18,5 @@
 
 #include <gst/gst.h>
-#include <gst/rtp/gstbasertppayload.h>
-#include <gst/base/gstadapter.h>
+#include <gst/rtp/gstbasertpaudiopayload.h>
 
 G_BEGIN_DECLS
@@ -39,14 +38,10 @@
 struct _GstRtpPcmuPay
 {
-  GstBaseRTPPayload payload;
-  GstAdapter *adapter;
-  
-  GstClockTime first_ts;
-  GstClockTime duration;  
+  GstBaseRTPAudioPayload audiopayload;
 };
 
 struct _GstRtpPcmuPayClass
 {
-  GstBaseRTPPayloadClass parent_class;
+  GstBaseRTPAudioPayloadClass parent_class;
 };