Revision: 18977
Author:   oleg.kulikoff
Date:     Sun Jun 19 23:35:25 2011
Log:      Frame header transmission
http://code.google.com/p/mobicents/source/detail?r=18977

Modified:
/trunk/servers/media/codecs/g711/src/main/java/org/mobicents/media/server/impl/dsp/audio/g711/alaw/Decoder.java /trunk/servers/media/component/src/main/java/org/mobicents/media/server/component/audio/AudioMixer.java /trunk/servers/media/component/src/main/java/org/mobicents/media/server/impl/AbstractSink.java /trunk/servers/media/io/rtp/src/main/java/org/mobicents/media/server/impl/rtp/JitterBuffer.java /trunk/servers/media/io/rtp/src/main/java/org/mobicents/media/server/impl/rtp/RTPDataChannel.java /trunk/servers/media/io/rtp/src/main/java/org/mobicents/media/server/impl/rtp/rfc2833/DtmfConverter.java /trunk/servers/media/io/rtp/src/test/java/org/mobicents/media/server/impl/rtp/rfc2833/DtmfConverterTest.java /trunk/servers/media/resources/telephony/dtmf/src/main/java/org/mobicents/media/server/impl/resource/dtmf/DetectorImpl.java /trunk/servers/media/spi/src/main/java/org/mobicents/media/server/spi/memory/Partition.java

=======================================
--- /trunk/servers/media/codecs/g711/src/main/java/org/mobicents/media/server/impl/dsp/audio/g711/alaw/Decoder.java Tue May 3 01:28:55 2011 +++ /trunk/servers/media/codecs/g711/src/main/java/org/mobicents/media/server/impl/dsp/audio/g711/alaw/Decoder.java Sun Jun 19 23:35:25 2011
@@ -108,7 +108,7 @@
         res.setSequenceNumber(frame.getSequenceNumber());
         res.setEOM(frame.isEOM());
         res.setFormat(linear);
-
+        res.setHeader(frame.getHeader());
         return res;
     }

=======================================
--- /trunk/servers/media/component/src/main/java/org/mobicents/media/server/component/audio/AudioMixer.java Mon Jun 13 03:15:58 2011 +++ /trunk/servers/media/component/src/main/java/org/mobicents/media/server/component/audio/AudioMixer.java Sun Jun 19 23:35:25 2011
@@ -358,7 +358,13 @@
             }
             //recycle received frames
             for (int i = 0; i < frames.length; i++) {
-                if (frames[i] != null)  frames[i].recycle();
+                if (frames[i] != null)  {
+                    if (frames[i].getHeader() != null) {
+                        frame.setHeader(frames[i].getHeader());
+                    }
+                    frames[i].recycle();
+                }
+
             }

             //assign attributes to the new frame
=======================================
--- /trunk/servers/media/component/src/main/java/org/mobicents/media/server/impl/AbstractSink.java Sun Jun 12 20:19:03 2011 +++ /trunk/servers/media/component/src/main/java/org/mobicents/media/server/impl/AbstractSink.java Sun Jun 19 23:35:25 2011
@@ -387,7 +387,7 @@

             //Reading next frame
             Frame frame = pipe.read();
-
+
             if (frame == null) {
                 //los of synchronization
                 isSynchronized = false;
=======================================
--- /trunk/servers/media/io/rtp/src/main/java/org/mobicents/media/server/impl/rtp/JitterBuffer.java Wed Jun 15 06:14:45 2011 +++ /trunk/servers/media/io/rtp/src/main/java/org/mobicents/media/server/impl/rtp/JitterBuffer.java Sun Jun 19 23:35:25 2011
@@ -111,6 +111,7 @@
         this.rtpClock = clock;
         this.jitter = rtpClock.convertToRtpTime(jitter);
         this.dtmfConverter = new DtmfConverter();
+        this.dtmfConverter.setClock(clock);
     }

     public void setFormats(RTPFormats rtpFormats) {
@@ -164,16 +165,6 @@
             rtpClock.synchronize(packet.getTimestamp());
             isn = packet.getSeqNumber();
         }
-        //drop outstanding packets
-        //packet is outstanding if its timestamp of arrived packet is less
-        //then consumer media time
-        if (packet.getTimestamp() < this.arrivalDeadLine) {
-            System.out.println("drop packet: dead line=" + arrivalDeadLine
- + ", packet time=" + packet.getTimestamp() + ", seq=" + packet.getSeqNumber()
-                    + ", payload length=" + packet.getPayloadLength());
-            dropCount++;
-            return;
-        }

         //checking format
         if (this.format == null) {
@@ -209,9 +200,19 @@
             queue[writeCursor].setSequenceNumber(packet.getSeqNumber());
queue[writeCursor].setTimestamp(rtpClock.convertToAbsoluteTime(packet.getTimestamp()));
         } else {
+            //drop outstanding packets
+ //packet is outstanding if its timestamp of arrived packet is less
+            //then consumer media time
+            if (packet.getTimestamp() < this.arrivalDeadLine) {
+ System.out.println("drop packet: dead line=" + arrivalDeadLine + + ", packet time=" + packet.getTimestamp() + ", seq=" + packet.getSeqNumber()
+                        + ", payload length=" + packet.getPayloadLength());
+                dropCount++;
+                return;
+            }
             //put packet into buffer irrespective of its sequence number
queue[writeCursor] = Memory.allocate(packet.getPayloadLength());
-//            queue[writeCursor].setHeader(null);
+            queue[writeCursor].setHeader(null);
             queue[writeCursor].setSequenceNumber(packet.getSeqNumber());
             //here time is in milliseconds
queue[writeCursor].setTimestamp(rtpClock.convertToAbsoluteTime(packet.getTimestamp()));
@@ -222,7 +223,6 @@
             //set format
             queue[writeCursor].setFormat(this.format.getFormat());
         }
-
         //we are expecting that sequence number still grow, if not
         //move packet forward direction till its sequence number remains
         //less then sequence number of previous
@@ -234,8 +234,12 @@
             int p = dec(writeCursor);
             //duration measured by wall clock
long d = queue[writeCursor].getTimestamp() - queue[p].getTimestamp();
-            queue[p].setDuration(d);
-            duration += d;
+
+            //in case of RFC2833 event timestamp remains same
+            if (d > 0) {
+                queue[p].setDuration(d);
+            }
+            duration += queue[p].getDuration();
         }

         //compute interarrival jitter.
@@ -272,14 +276,13 @@
         //extract packet
         Frame frame = queue[readCursor];
         queue[readCursor] = null;
-
         this.updateReadPosition();

         //buffer empty now? - change ready flag.
         if (len < 0) {
             this.ready = false;
             arrivalDeadLine = 0;
-            frame.setDuration(-1);
+            frame.setDuration(0);
         } else {
             long d = this.arrivalDeadLine;
arrivalDeadLine = rtpClock.convertToRtpTime(frame.getTimestamp() + frame.getDuration());
@@ -291,6 +294,7 @@
         //convert duration to nanoseconds
         frame.setDuration(frame.getDuration() * 1000000L);
         frame.setTimestamp(frame.getTimestamp() * 1000000L);
+
         return frame;
     }

=======================================
--- /trunk/servers/media/io/rtp/src/main/java/org/mobicents/media/server/impl/rtp/RTPDataChannel.java Tue Jun 14 23:49:00 2011 +++ /trunk/servers/media/io/rtp/src/main/java/org/mobicents/media/server/impl/rtp/RTPDataChannel.java Sun Jun 19 23:35:25 2011
@@ -366,6 +366,7 @@
          * transmission to the consumer.
          */
         public void onFill() {
+            System.out.println("wake up");
             this.wakeup();
         }
     }
=======================================
--- /trunk/servers/media/io/rtp/src/main/java/org/mobicents/media/server/impl/rtp/rfc2833/DtmfConverter.java Wed Jun 15 06:14:45 2011 +++ /trunk/servers/media/io/rtp/src/main/java/org/mobicents/media/server/impl/rtp/rfc2833/DtmfConverter.java Sun Jun 19 23:35:25 2011
@@ -114,7 +114,6 @@
     }

     public Frame process(RtpPacket event) {
-        System.out.println("==== DTMF===");
         //check is this begining of the tone
         long now = System.nanoTime();
         start = event.getMarker() || (now - timestamp) > 1000000000L;
@@ -134,25 +133,20 @@

         //get the total duration of the tone in milliseconds
long duration = clock.convertToAbsoluteTime(((data[2] & 0xff) << 8) | (data[3] & 0xff));
-
         //get position in buffer and length
         int offset = (int)(time * 16);
         int len = (int)((duration - time) * 16);

         //copy data
         System.arraycopy(buffer[data[0]], offset, frame.getData(), 0, len);
-
+        long dd = (long)((duration - time));
         //update time
         time = duration;
-
         frame.setOffset(0);
         frame.setLength(320);
         frame.setFormat(LINEAR_AUDIO);
-//        System.out.println("tone=" + data[0]);
-//        frame.setHeader(TONE[data[0]]);
-//        frame.setDuration(d);
-//        time += ((double) d) / 1000.0;
-
+        frame.setHeader(TONE[data[0]]);
+        frame.setDuration(20);
         return frame;
     }

=======================================
--- /trunk/servers/media/io/rtp/src/test/java/org/mobicents/media/server/impl/rtp/rfc2833/DtmfConverterTest.java Fri Jun 3 07:03:28 2011 +++ /trunk/servers/media/io/rtp/src/test/java/org/mobicents/media/server/impl/rtp/rfc2833/DtmfConverterTest.java Sun Jun 19 23:35:25 2011
@@ -89,6 +89,14 @@
         Frame frame2 = dtmfConverter.process(packets[2]);
         long finish = System.nanoTime();

+        assertTrue(frame0.getHeader() != null);
+        assertTrue(frame1.getHeader() != null);
+        assertTrue(frame2.getHeader() != null);
+
+        assertEquals(20L, frame0.getDuration());
+        assertEquals(20L, frame1.getDuration());
+        assertEquals(20L, frame2.getDuration());
+
         for (int i = 0; i < 320; i++) {
             assertEquals("Pos " + i, tone[i], frame0.getData()[i]);
         }
=======================================
--- /trunk/servers/media/resources/telephony/dtmf/src/main/java/org/mobicents/media/server/impl/resource/dtmf/DetectorImpl.java Wed Jun 15 06:14:45 2011 +++ /trunk/servers/media/resources/telephony/dtmf/src/main/java/org/mobicents/media/server/impl/resource/dtmf/DetectorImpl.java Sun Jun 19 23:35:25 2011
@@ -101,7 +101,7 @@
     private Listeners<DtmfDetectorListener> listeners = new Listeners();

     private boolean isLazy = true;
-
+    private int count;
     /**
      * Creates new instance of Detector.
      */
@@ -144,6 +144,7 @@
      */
     public void onMediaTransfer(Frame buffer) throws IOException {
        if (buffer.getHeader() != null) {
+           System.out.println("Push=" + buffer.getHeader());
             dtmfBuffer.push(buffer.getHeader());
             return;
         }
=======================================
--- /trunk/servers/media/spi/src/main/java/org/mobicents/media/server/spi/memory/Partition.java Tue May 3 01:28:55 2011 +++ /trunk/servers/media/spi/src/main/java/org/mobicents/media/server/spi/memory/Partition.java Sun Jun 19 23:35:25 2011
@@ -23,8 +23,6 @@
 package org.mobicents.media.server.spi.memory;

 import java.util.ArrayList;
-import java.util.concurrent.DelayQueue;
-import java.util.concurrent.TimeUnit;

 /**
  *
@@ -33,7 +31,6 @@
 public class Partition {

     protected int size;
-    private static DelayQueue<Frame> queue = new DelayQueue();
     private ArrayList<Frame> heap = new ArrayList();

     protected Partition(int size) {
@@ -41,7 +38,7 @@
     }

     protected synchronized Frame allocate() {
-       // if (true) return new Frame(this, new byte[size]);
+//        if (true) return new Frame(this, new byte[size]);
         if (heap.isEmpty()) {
             return new Frame(this, new byte[size]);
         }
@@ -49,6 +46,8 @@
     }

     protected synchronized void recycle(Frame frame) {
+        frame.setHeader(null);
+        frame.setDuration(Long.MAX_VALUE);
         heap.add(frame);
//queue.offer(frame, frame.getDelay(TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS);
     }

Reply via email to