]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/rtpenc_xiph.c
rtpproto: Add an option for writing return packets to the address of the last receive...
[ffmpeg] / libavformat / rtpenc_xiph.c
index 4899abb13ed53a16fa65ca8f236abf2e03dc9ec5..07086b1a12a952cd2a138c08e253e7e8a59e85c0 100644 (file)
@@ -2,20 +2,20 @@
  * RTP packetization for Xiph audio and video
  * Copyright (c) 2010 Josh Allmann
  *
- * This file is part of FFmpeg.
+ * This file is part of Libav.
  *
- * FFmpeg is free software; you can redistribute it and/or
+ * Libav is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
  *
- * FFmpeg is distributed in the hope that it will be useful,
+ * Libav is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
+ * License along with Libav; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
@@ -52,13 +52,13 @@ void ff_rtp_send_xiph(AVFormatContext *s1, const uint8_t *buff, int size)
         break;
     }
 
-    // Set ident. Must match the one in sdp.c
+    // Set ident.
     // Probably need a non-fixed way of generating
     // this, but it has to be done in SDP and passed in from there.
     q = s->buf;
-    *q++ = 0xfe;
-    *q++ = 0xcd;
-    *q++ = 0xba;
+    *q++ = (RTP_XIPH_IDENT >> 16) & 0xff;
+    *q++ = (RTP_XIPH_IDENT >>  8) & 0xff;
+    *q++ = (RTP_XIPH_IDENT      ) & 0xff;
 
     // set fragment
     // 0 - whole frame (possibly multiple frames)
@@ -68,12 +68,13 @@ void ff_rtp_send_xiph(AVFormatContext *s1, const uint8_t *buff, int size)
     frag = size <= max_pkt_size ? 0 : 1;
 
     if (!frag && !xdt) { // do we have a whole frame of raw data?
-        unsigned end_ptr = (unsigned)s->buf + 6 + max_pkt_size; // what we're allowed to write
-        unsigned ptr     = (unsigned)s->buf_ptr + 2 + size; // what we're going to write
+        uint8_t *end_ptr = s->buf + 6 + max_pkt_size; // what we're allowed to write
+        uint8_t *ptr     = s->buf_ptr + 2 + size; // what we're going to write
         int remaining    = end_ptr - ptr;
 
+        assert(s->num_frames <= s->max_frames_per_packet);
         if ((s->num_frames > 0 && remaining < 0) ||
-            s->num_frames >= s->max_frames_per_packet) {
+            s->num_frames == s->max_frames_per_packet) {
             // send previous packets now; no room for new data
             ff_rtp_send_data(s1, s->buf, s->buf_ptr - s->buf, 0);
             s->num_frames = 0;