[SCM] libav/experimental: Make RTMP send/receive packet functions report number of bytes read or sent.

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:58:58 UTC 2013


The following commit has been merged in the experimental branch:
commit 0b6b10d9dae44d3f48dd75f466264c780f7cff00
Author: Kostya Shishkov <kostya.shishkov at gmail.com>
Date:   Sat Jan 30 09:24:52 2010 +0000

    Make RTMP send/receive packet functions report number of bytes read or sent.
    
    Originally committed as revision 21533 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/rtmppkt.c b/libavformat/rtmppkt.c
index 62193a0..d4ffe8b 100644
--- a/libavformat/rtmppkt.c
+++ b/libavformat/rtmppkt.c
@@ -76,15 +76,18 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
     int channel_id, timestamp, data_size, offset = 0;
     uint32_t extra = 0;
     enum RTMPPacketType type;
+    int size = 0;
 
     if (url_read(h, &hdr, 1) != 1)
         return AVERROR(EIO);
+    size++;
     channel_id = hdr & 0x3F;
 
     if (channel_id < 2) { //special case for channel number >= 64
         buf[1] = 0;
         if (url_read_complete(h, buf, channel_id + 1) != channel_id + 1)
             return AVERROR(EIO);
+        size += channel_id + 1;
         channel_id = AV_RL16(buf) + 64;
     }
     data_size = prev_pkt[channel_id].data_size;
@@ -97,17 +100,21 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
     } else {
         if (url_read_complete(h, buf, 3) != 3)
             return AVERROR(EIO);
+        size += 3;
         timestamp = AV_RB24(buf);
         if (hdr != RTMP_PS_FOURBYTES) {
             if (url_read_complete(h, buf, 3) != 3)
                 return AVERROR(EIO);
+            size += 3;
             data_size = AV_RB24(buf);
             if (url_read_complete(h, buf, 1) != 1)
                 return AVERROR(EIO);
+            size++;
             type = buf[0];
             if (hdr == RTMP_PS_TWELVEBYTES) {
                 if (url_read_complete(h, buf, 4) != 4)
                     return AVERROR(EIO);
+                size += 4;
                 extra = AV_RL32(buf);
             }
         }
@@ -138,13 +145,15 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
         }
         data_size -= chunk_size;
         offset    += chunk_size;
+        size      += chunk_size;
         if (data_size > 0) {
             url_read_complete(h, &t, 1); //marker
+            size++;
             if (t != (0xC0 + channel_id))
                 return -1;
         }
     }
-    return 0;
+    return size;
 }
 
 int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt,
@@ -153,6 +162,7 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt,
     uint8_t pkt_hdr[16], *p = pkt_hdr;
     int mode = RTMP_PS_TWELVEBYTES;
     int off = 0;
+    int size = 0;
 
     pkt->ts_delta = pkt->timestamp - prev_pkt[pkt->channel_id].timestamp;
 
@@ -205,6 +215,7 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt,
     prev_pkt[pkt->channel_id].extra      = pkt->extra;
 
     url_write(h, pkt_hdr, p-pkt_hdr);
+    size = p - pkt_hdr + pkt->data_size;
     while (off < pkt->data_size) {
         int towrite = FFMIN(chunk_size, pkt->data_size - off);
         url_write(h, pkt->data + off, towrite);
@@ -212,9 +223,10 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt,
         if (off < pkt->data_size) {
             uint8_t marker = 0xC0 | pkt->channel_id;
             url_write(h, &marker, 1);
+            size++;
         }
     }
-    return 0;
+    return size;
 }
 
 int ff_rtmp_packet_create(RTMPPacket *pkt, int channel_id, RTMPPacketType type,
diff --git a/libavformat/rtmppkt.h b/libavformat/rtmppkt.h
index 560165b..23d4ebc 100644
--- a/libavformat/rtmppkt.h
+++ b/libavformat/rtmppkt.h
@@ -110,7 +110,7 @@ void ff_rtmp_packet_destroy(RTMPPacket *pkt);
  * @param chunk_size current chunk size
  * @param prev_pkt   previously read packet headers for all channels
  *                   (may be needed for restoring incomplete packet header)
- * @return zero on success, negative value otherwise
+ * @return number of bytes read on success, negative value otherwise
  */
 int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
                         int chunk_size, RTMPPacket *prev_pkt);
@@ -123,7 +123,7 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
  * @param chunk_size current chunk size
  * @param prev_pkt   previously sent packet headers for all channels
  *                   (may be used for packet header compressing)
- * @return zero on success, negative value otherwise
+ * @return number of bytes written on success, negative value otherwise
  */
 int ff_rtmp_packet_write(URLContext *h, RTMPPacket *p,
                          int chunk_size, RTMPPacket *prev_pkt);

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list