forked from FFmpeg/FFmpeg
Move function for reading whole specified amount of data from RTSP
demuxer into more common place. Originally committed as revision 19087 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
989b7181ac
commit
0e848977ce
3 changed files with 21 additions and 20 deletions
|
@ -149,6 +149,20 @@ int url_read(URLContext *h, unsigned char *buf, int size)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int url_read_complete(URLContext *h, unsigned char *buf, int size)
|
||||||
|
{
|
||||||
|
int ret, len;
|
||||||
|
|
||||||
|
len = 0;
|
||||||
|
while (len < size) {
|
||||||
|
ret = url_read(h, buf+len, size-len);
|
||||||
|
if (ret < 1)
|
||||||
|
return ret;
|
||||||
|
len += ret;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
int url_write(URLContext *h, unsigned char *buf, int size)
|
int url_write(URLContext *h, unsigned char *buf, int size)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
|
@ -69,6 +69,7 @@ int url_open_protocol (URLContext **puc, struct URLProtocol *up,
|
||||||
const char *filename, int flags);
|
const char *filename, int flags);
|
||||||
int url_open(URLContext **h, const char *filename, int flags);
|
int url_open(URLContext **h, const char *filename, int flags);
|
||||||
int url_read(URLContext *h, unsigned char *buf, int size);
|
int url_read(URLContext *h, unsigned char *buf, int size);
|
||||||
|
int url_read_complete(URLContext *h, unsigned char *buf, int size);
|
||||||
int url_write(URLContext *h, unsigned char *buf, int size);
|
int url_write(URLContext *h, unsigned char *buf, int size);
|
||||||
int64_t url_seek(URLContext *h, int64_t pos, int whence);
|
int64_t url_seek(URLContext *h, int64_t pos, int whence);
|
||||||
int url_close(URLContext *h);
|
int url_close(URLContext *h);
|
||||||
|
|
|
@ -703,20 +703,6 @@ void rtsp_parse_line(RTSPMessageHeader *reply, const char *buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int url_readbuf(URLContext *h, unsigned char *buf, int size)
|
|
||||||
{
|
|
||||||
int ret, len;
|
|
||||||
|
|
||||||
len = 0;
|
|
||||||
while (len < size) {
|
|
||||||
ret = url_read(h, buf+len, size-len);
|
|
||||||
if (ret < 1)
|
|
||||||
return ret;
|
|
||||||
len += ret;
|
|
||||||
}
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* skip a RTP/TCP interleaved packet */
|
/* skip a RTP/TCP interleaved packet */
|
||||||
static void rtsp_skip_packet(AVFormatContext *s)
|
static void rtsp_skip_packet(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
|
@ -724,7 +710,7 @@ static void rtsp_skip_packet(AVFormatContext *s)
|
||||||
int ret, len, len1;
|
int ret, len, len1;
|
||||||
uint8_t buf[1024];
|
uint8_t buf[1024];
|
||||||
|
|
||||||
ret = url_readbuf(rt->rtsp_hd, buf, 3);
|
ret = url_read_complete(rt->rtsp_hd, buf, 3);
|
||||||
if (ret != 3)
|
if (ret != 3)
|
||||||
return;
|
return;
|
||||||
len = AV_RB16(buf + 1);
|
len = AV_RB16(buf + 1);
|
||||||
|
@ -736,7 +722,7 @@ static void rtsp_skip_packet(AVFormatContext *s)
|
||||||
len1 = len;
|
len1 = len;
|
||||||
if (len1 > sizeof(buf))
|
if (len1 > sizeof(buf))
|
||||||
len1 = sizeof(buf);
|
len1 = sizeof(buf);
|
||||||
ret = url_readbuf(rt->rtsp_hd, buf, len1);
|
ret = url_read_complete(rt->rtsp_hd, buf, len1);
|
||||||
if (ret != len1)
|
if (ret != len1)
|
||||||
return;
|
return;
|
||||||
len -= len1;
|
len -= len1;
|
||||||
|
@ -782,7 +768,7 @@ rtsp_read_reply (AVFormatContext *s, RTSPMessageHeader *reply,
|
||||||
for(;;) {
|
for(;;) {
|
||||||
q = buf;
|
q = buf;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
ret = url_readbuf(rt->rtsp_hd, &ch, 1);
|
ret = url_read_complete(rt->rtsp_hd, &ch, 1);
|
||||||
#ifdef DEBUG_RTP_TCP
|
#ifdef DEBUG_RTP_TCP
|
||||||
dprintf(s, "ret=%d c=%02x [%c]\n", ret, ch, ch);
|
dprintf(s, "ret=%d c=%02x [%c]\n", ret, ch, ch);
|
||||||
#endif
|
#endif
|
||||||
|
@ -829,7 +815,7 @@ rtsp_read_reply (AVFormatContext *s, RTSPMessageHeader *reply,
|
||||||
if (content_length > 0) {
|
if (content_length > 0) {
|
||||||
/* leave some room for a trailing '\0' (useful for simple parsing) */
|
/* leave some room for a trailing '\0' (useful for simple parsing) */
|
||||||
content = av_malloc(content_length + 1);
|
content = av_malloc(content_length + 1);
|
||||||
(void)url_readbuf(rt->rtsp_hd, content, content_length);
|
(void)url_read_complete(rt->rtsp_hd, content, content_length);
|
||||||
content[content_length] = '\0';
|
content[content_length] = '\0';
|
||||||
}
|
}
|
||||||
if (content_ptr)
|
if (content_ptr)
|
||||||
|
@ -1329,7 +1315,7 @@ static int tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st,
|
||||||
break;
|
break;
|
||||||
/* XXX: parse message */
|
/* XXX: parse message */
|
||||||
}
|
}
|
||||||
ret = url_readbuf(rt->rtsp_hd, buf, 3);
|
ret = url_read_complete(rt->rtsp_hd, buf, 3);
|
||||||
if (ret != 3)
|
if (ret != 3)
|
||||||
return -1;
|
return -1;
|
||||||
id = buf[0];
|
id = buf[0];
|
||||||
|
@ -1340,7 +1326,7 @@ static int tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st,
|
||||||
if (len > buf_size || len < 12)
|
if (len > buf_size || len < 12)
|
||||||
goto redo;
|
goto redo;
|
||||||
/* get the data */
|
/* get the data */
|
||||||
ret = url_readbuf(rt->rtsp_hd, buf, len);
|
ret = url_read_complete(rt->rtsp_hd, buf, len);
|
||||||
if (ret != len)
|
if (ret != len)
|
||||||
return -1;
|
return -1;
|
||||||
if (rt->transport == RTSP_TRANSPORT_RDT &&
|
if (rt->transport == RTSP_TRANSPORT_RDT &&
|
||||||
|
|
Loading…
Add table
Reference in a new issue