summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2009-10-18 07:01:06 +0000
committerKostya Shishkov <kostya.shishkov@gmail.com>2009-10-18 07:01:06 +0000
commit5d660598b0f1300182240074d4dbada41fe694d9 (patch)
treef22c9597f60d5fa6af13588962bde2b2737af44b /libavformat
parent8f648b74c348e866e3d24b038258919341b87a9e (diff)
Support more than 64 channels in RTMP input
Originally committed as revision 20270 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/rtmppkt.c6
-rw-r--r--libavformat/rtmppkt.h2
2 files changed, 7 insertions, 1 deletions
diff --git a/libavformat/rtmppkt.c b/libavformat/rtmppkt.c
index 4ca12a0041..f6e2a9024e 100644
--- a/libavformat/rtmppkt.c
+++ b/libavformat/rtmppkt.c
@@ -81,6 +81,12 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
return AVERROR(EIO);
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);
+ channel_id = AV_RL16(buf) + 64;
+ }
data_size = prev_pkt[channel_id].data_size;
type = prev_pkt[channel_id].type;
extra = prev_pkt[channel_id].extra;
diff --git a/libavformat/rtmppkt.h b/libavformat/rtmppkt.h
index b40f4fe061..f50996f6d1 100644
--- a/libavformat/rtmppkt.h
+++ b/libavformat/rtmppkt.h
@@ -25,7 +25,7 @@
#include "avformat.h"
/** maximum possible number of different RTMP channels */
-#define RTMP_CHANNELS 64
+#define RTMP_CHANNELS 65599
/**
* channels used to for RTMP packets with different purposes (i.e. data, network