mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
avio: make url_read_complete() internal.
This commit is contained in:
parent
bc371aca46
commit
dce3756459
@ -184,6 +184,10 @@ int url_read(URLContext *h, unsigned char *buf, int size)
|
|||||||
{
|
{
|
||||||
return ffurl_read(h, buf, size);
|
return ffurl_read(h, buf, size);
|
||||||
}
|
}
|
||||||
|
int url_read_complete(URLContext *h, unsigned char *buf, int size)
|
||||||
|
{
|
||||||
|
return ffurl_read_complete(h, buf, size);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define URL_SCHEME_CHARS \
|
#define URL_SCHEME_CHARS \
|
||||||
@ -269,7 +273,7 @@ int ffurl_read(URLContext *h, unsigned char *buf, int size)
|
|||||||
return retry_transfer_wrapper(h, buf, size, 1, h->prot->url_read);
|
return retry_transfer_wrapper(h, buf, size, 1, h->prot->url_read);
|
||||||
}
|
}
|
||||||
|
|
||||||
int url_read_complete(URLContext *h, unsigned char *buf, int size)
|
int ffurl_read_complete(URLContext *h, unsigned char *buf, int size)
|
||||||
{
|
{
|
||||||
if (h->flags & URL_WRONLY)
|
if (h->flags & URL_WRONLY)
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
|
@ -106,17 +106,9 @@ attribute_deprecated int url_alloc(URLContext **h, const char *url, int flags);
|
|||||||
attribute_deprecated int url_connect(URLContext *h);
|
attribute_deprecated int url_connect(URLContext *h);
|
||||||
attribute_deprecated int url_open(URLContext **h, const char *url, int flags);
|
attribute_deprecated int url_open(URLContext **h, const char *url, int flags);
|
||||||
attribute_deprecated int url_read(URLContext *h, unsigned char *buf, int size);
|
attribute_deprecated int url_read(URLContext *h, unsigned char *buf, int size);
|
||||||
|
attribute_deprecated int url_read_complete(URLContext *h, unsigned char *buf, int size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* Read as many bytes as possible (up to size), calling the
|
|
||||||
* read function multiple times if necessary.
|
|
||||||
* This makes special short-read handling in applications
|
|
||||||
* unnecessary, if the return value is < size then it is
|
|
||||||
* certain there was either an error or the end of file was reached.
|
|
||||||
*/
|
|
||||||
int url_read_complete(URLContext *h, unsigned char *buf, int size);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write size bytes from buf to the resource accessed by h.
|
* Write size bytes from buf to the resource accessed by h.
|
||||||
*
|
*
|
||||||
|
@ -79,7 +79,7 @@ static ChunkType get_chunk_header(MMSHContext *mmsh, int *len)
|
|||||||
ChunkType chunk_type;
|
ChunkType chunk_type;
|
||||||
int chunk_len, res, ext_header_len;
|
int chunk_len, res, ext_header_len;
|
||||||
|
|
||||||
res = url_read_complete(mms->mms_hd, chunk_header, CHUNK_HEADER_LENGTH);
|
res = ffurl_read_complete(mms->mms_hd, chunk_header, CHUNK_HEADER_LENGTH);
|
||||||
if (res != CHUNK_HEADER_LENGTH) {
|
if (res != CHUNK_HEADER_LENGTH) {
|
||||||
av_log(NULL, AV_LOG_ERROR, "Read data packet header failed!\n");
|
av_log(NULL, AV_LOG_ERROR, "Read data packet header failed!\n");
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
@ -101,7 +101,7 @@ static ChunkType get_chunk_header(MMSHContext *mmsh, int *len)
|
|||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
res = url_read_complete(mms->mms_hd, ext_header, ext_header_len);
|
res = ffurl_read_complete(mms->mms_hd, ext_header, ext_header_len);
|
||||||
if (res != ext_header_len) {
|
if (res != ext_header_len) {
|
||||||
av_log(NULL, AV_LOG_ERROR, "Read ext header failed!\n");
|
av_log(NULL, AV_LOG_ERROR, "Read ext header failed!\n");
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
@ -122,7 +122,7 @@ static int read_data_packet(MMSHContext *mmsh, const int len)
|
|||||||
len, sizeof(mms->in_buffer));
|
len, sizeof(mms->in_buffer));
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
}
|
}
|
||||||
res = url_read_complete(mms->mms_hd, mms->in_buffer, len);
|
res = ffurl_read_complete(mms->mms_hd, mms->in_buffer, len);
|
||||||
av_dlog(NULL, "Data packet len = %d\n", len);
|
av_dlog(NULL, "Data packet len = %d\n", len);
|
||||||
if (res != len) {
|
if (res != len) {
|
||||||
av_log(NULL, AV_LOG_ERROR, "Read data packet failed!\n");
|
av_log(NULL, AV_LOG_ERROR, "Read data packet failed!\n");
|
||||||
@ -174,7 +174,7 @@ static int get_http_header_data(MMSHContext *mmsh)
|
|||||||
len, mms->asf_header_size);
|
len, mms->asf_header_size);
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
}
|
}
|
||||||
res = url_read_complete(mms->mms_hd, mms->asf_header, len);
|
res = ffurl_read_complete(mms->mms_hd, mms->asf_header, len);
|
||||||
if (res != len) {
|
if (res != len) {
|
||||||
av_log(NULL, AV_LOG_ERROR,
|
av_log(NULL, AV_LOG_ERROR,
|
||||||
"Recv asf header data len %d != expected len %d\n", res, len);
|
"Recv asf header data len %d != expected len %d\n", res, len);
|
||||||
@ -197,7 +197,7 @@ static int get_http_header_data(MMSHContext *mmsh)
|
|||||||
len, sizeof(mms->in_buffer));
|
len, sizeof(mms->in_buffer));
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
}
|
}
|
||||||
res = url_read_complete(mms->mms_hd, mms->in_buffer, len);
|
res = ffurl_read_complete(mms->mms_hd, mms->in_buffer, len);
|
||||||
if (res != len) {
|
if (res != len) {
|
||||||
av_log(NULL, AV_LOG_ERROR, "Read other chunk type data failed!\n");
|
av_log(NULL, AV_LOG_ERROR, "Read other chunk type data failed!\n");
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
|
@ -241,7 +241,7 @@ static MMSSCPacketType get_tcp_server_response(MMSTContext *mmst)
|
|||||||
MMSSCPacketType packet_type= -1;
|
MMSSCPacketType packet_type= -1;
|
||||||
MMSContext *mms = &mmst->mms;
|
MMSContext *mms = &mmst->mms;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
read_result = url_read_complete(mms->mms_hd, mms->in_buffer, 8);
|
read_result = ffurl_read_complete(mms->mms_hd, mms->in_buffer, 8);
|
||||||
if (read_result != 8) {
|
if (read_result != 8) {
|
||||||
if(read_result < 0) {
|
if(read_result < 0) {
|
||||||
av_log(NULL, AV_LOG_ERROR,
|
av_log(NULL, AV_LOG_ERROR,
|
||||||
@ -261,7 +261,7 @@ static MMSSCPacketType get_tcp_server_response(MMSTContext *mmst)
|
|||||||
int length_remaining, hr;
|
int length_remaining, hr;
|
||||||
|
|
||||||
mmst->incoming_flags= mms->in_buffer[3];
|
mmst->incoming_flags= mms->in_buffer[3];
|
||||||
read_result= url_read_complete(mms->mms_hd, mms->in_buffer+8, 4);
|
read_result= ffurl_read_complete(mms->mms_hd, mms->in_buffer+8, 4);
|
||||||
if(read_result != 4) {
|
if(read_result != 4) {
|
||||||
av_log(NULL, AV_LOG_ERROR,
|
av_log(NULL, AV_LOG_ERROR,
|
||||||
"Reading command packet length failed: %d (%s)\n",
|
"Reading command packet length failed: %d (%s)\n",
|
||||||
@ -281,7 +281,7 @@ static MMSSCPacketType get_tcp_server_response(MMSTContext *mmst)
|
|||||||
length_remaining, sizeof(mms->in_buffer) - 12);
|
length_remaining, sizeof(mms->in_buffer) - 12);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
read_result = url_read_complete(mms->mms_hd, mms->in_buffer + 12,
|
read_result = ffurl_read_complete(mms->mms_hd, mms->in_buffer + 12,
|
||||||
length_remaining) ;
|
length_remaining) ;
|
||||||
if (read_result != length_remaining) {
|
if (read_result != length_remaining) {
|
||||||
av_log(NULL, AV_LOG_ERROR,
|
av_log(NULL, AV_LOG_ERROR,
|
||||||
@ -319,7 +319,7 @@ static MMSSCPacketType get_tcp_server_response(MMSTContext *mmst)
|
|||||||
}
|
}
|
||||||
mms->remaining_in_len = length_remaining;
|
mms->remaining_in_len = length_remaining;
|
||||||
mms->read_in_ptr = mms->in_buffer;
|
mms->read_in_ptr = mms->in_buffer;
|
||||||
read_result= url_read_complete(mms->mms_hd, mms->in_buffer, length_remaining);
|
read_result= ffurl_read_complete(mms->mms_hd, mms->in_buffer, length_remaining);
|
||||||
if(read_result != length_remaining) {
|
if(read_result != length_remaining) {
|
||||||
av_log(NULL, AV_LOG_ERROR,
|
av_log(NULL, AV_LOG_ERROR,
|
||||||
"Failed to read packet data of size %d: %d (%s)\n",
|
"Failed to read packet data of size %d: %d (%s)\n",
|
||||||
|
@ -86,7 +86,7 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
|
|||||||
|
|
||||||
if (channel_id < 2) { //special case for channel number >= 64
|
if (channel_id < 2) { //special case for channel number >= 64
|
||||||
buf[1] = 0;
|
buf[1] = 0;
|
||||||
if (url_read_complete(h, buf, channel_id + 1) != channel_id + 1)
|
if (ffurl_read_complete(h, buf, channel_id + 1) != channel_id + 1)
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
size += channel_id + 1;
|
size += channel_id + 1;
|
||||||
channel_id = AV_RL16(buf) + 64;
|
channel_id = AV_RL16(buf) + 64;
|
||||||
@ -99,28 +99,28 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
|
|||||||
if (hdr == RTMP_PS_ONEBYTE) {
|
if (hdr == RTMP_PS_ONEBYTE) {
|
||||||
timestamp = prev_pkt[channel_id].ts_delta;
|
timestamp = prev_pkt[channel_id].ts_delta;
|
||||||
} else {
|
} else {
|
||||||
if (url_read_complete(h, buf, 3) != 3)
|
if (ffurl_read_complete(h, buf, 3) != 3)
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
size += 3;
|
size += 3;
|
||||||
timestamp = AV_RB24(buf);
|
timestamp = AV_RB24(buf);
|
||||||
if (hdr != RTMP_PS_FOURBYTES) {
|
if (hdr != RTMP_PS_FOURBYTES) {
|
||||||
if (url_read_complete(h, buf, 3) != 3)
|
if (ffurl_read_complete(h, buf, 3) != 3)
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
size += 3;
|
size += 3;
|
||||||
data_size = AV_RB24(buf);
|
data_size = AV_RB24(buf);
|
||||||
if (url_read_complete(h, buf, 1) != 1)
|
if (ffurl_read_complete(h, buf, 1) != 1)
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
size++;
|
size++;
|
||||||
type = buf[0];
|
type = buf[0];
|
||||||
if (hdr == RTMP_PS_TWELVEBYTES) {
|
if (hdr == RTMP_PS_TWELVEBYTES) {
|
||||||
if (url_read_complete(h, buf, 4) != 4)
|
if (ffurl_read_complete(h, buf, 4) != 4)
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
size += 4;
|
size += 4;
|
||||||
extra = AV_RL32(buf);
|
extra = AV_RL32(buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (timestamp == 0xFFFFFF) {
|
if (timestamp == 0xFFFFFF) {
|
||||||
if (url_read_complete(h, buf, 4) != 4)
|
if (ffurl_read_complete(h, buf, 4) != 4)
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
timestamp = AV_RB32(buf);
|
timestamp = AV_RB32(buf);
|
||||||
}
|
}
|
||||||
@ -140,7 +140,7 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
|
|||||||
prev_pkt[channel_id].extra = extra;
|
prev_pkt[channel_id].extra = extra;
|
||||||
while (data_size > 0) {
|
while (data_size > 0) {
|
||||||
int toread = FFMIN(data_size, chunk_size);
|
int toread = FFMIN(data_size, chunk_size);
|
||||||
if (url_read_complete(h, p->data + offset, toread) != toread) {
|
if (ffurl_read_complete(h, p->data + offset, toread) != toread) {
|
||||||
ff_rtmp_packet_destroy(p);
|
ff_rtmp_packet_destroy(p);
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
}
|
}
|
||||||
@ -148,7 +148,7 @@ int ff_rtmp_packet_read(URLContext *h, RTMPPacket *p,
|
|||||||
offset += chunk_size;
|
offset += chunk_size;
|
||||||
size += chunk_size;
|
size += chunk_size;
|
||||||
if (data_size > 0) {
|
if (data_size > 0) {
|
||||||
url_read_complete(h, &t, 1); //marker
|
ffurl_read_complete(h, &t, 1); //marker
|
||||||
size++;
|
size++;
|
||||||
if (t != (0xC0 + channel_id))
|
if (t != (0xC0 + channel_id))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -487,12 +487,12 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt)
|
|||||||
client_pos = rtmp_handshake_imprint_with_digest(tosend + 1);
|
client_pos = rtmp_handshake_imprint_with_digest(tosend + 1);
|
||||||
|
|
||||||
url_write(rt->stream, tosend, RTMP_HANDSHAKE_PACKET_SIZE + 1);
|
url_write(rt->stream, tosend, RTMP_HANDSHAKE_PACKET_SIZE + 1);
|
||||||
i = url_read_complete(rt->stream, serverdata, RTMP_HANDSHAKE_PACKET_SIZE + 1);
|
i = ffurl_read_complete(rt->stream, serverdata, RTMP_HANDSHAKE_PACKET_SIZE + 1);
|
||||||
if (i != RTMP_HANDSHAKE_PACKET_SIZE + 1) {
|
if (i != RTMP_HANDSHAKE_PACKET_SIZE + 1) {
|
||||||
av_log(LOG_CONTEXT, AV_LOG_ERROR, "Cannot read RTMP handshake response\n");
|
av_log(LOG_CONTEXT, AV_LOG_ERROR, "Cannot read RTMP handshake response\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
i = url_read_complete(rt->stream, clientdata, RTMP_HANDSHAKE_PACKET_SIZE);
|
i = ffurl_read_complete(rt->stream, clientdata, RTMP_HANDSHAKE_PACKET_SIZE);
|
||||||
if (i != RTMP_HANDSHAKE_PACKET_SIZE) {
|
if (i != RTMP_HANDSHAKE_PACKET_SIZE) {
|
||||||
av_log(LOG_CONTEXT, AV_LOG_ERROR, "Cannot read RTMP handshake response\n");
|
av_log(LOG_CONTEXT, AV_LOG_ERROR, "Cannot read RTMP handshake response\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -818,7 +818,7 @@ void ff_rtsp_skip_packet(AVFormatContext *s)
|
|||||||
int ret, len, len1;
|
int ret, len, len1;
|
||||||
uint8_t buf[1024];
|
uint8_t buf[1024];
|
||||||
|
|
||||||
ret = url_read_complete(rt->rtsp_hd, buf, 3);
|
ret = ffurl_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);
|
||||||
@ -830,7 +830,7 @@ void ff_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_read_complete(rt->rtsp_hd, buf, len1);
|
ret = ffurl_read_complete(rt->rtsp_hd, buf, len1);
|
||||||
if (ret != len1)
|
if (ret != len1)
|
||||||
return;
|
return;
|
||||||
len -= len1;
|
len -= len1;
|
||||||
@ -855,7 +855,7 @@ int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
q = buf;
|
q = buf;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
ret = url_read_complete(rt->rtsp_hd, &ch, 1);
|
ret = ffurl_read_complete(rt->rtsp_hd, &ch, 1);
|
||||||
#ifdef DEBUG_RTP_TCP
|
#ifdef DEBUG_RTP_TCP
|
||||||
av_dlog(s, "ret=%d c=%02x [%c]\n", ret, ch, ch);
|
av_dlog(s, "ret=%d c=%02x [%c]\n", ret, ch, ch);
|
||||||
#endif
|
#endif
|
||||||
@ -903,7 +903,7 @@ int ff_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_read_complete(rt->rtsp_hd, content, content_length);
|
ffurl_read_complete(rt->rtsp_hd, content, content_length);
|
||||||
content[content_length] = '\0';
|
content[content_length] = '\0';
|
||||||
}
|
}
|
||||||
if (content_ptr)
|
if (content_ptr)
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#include "os_support.h"
|
#include "os_support.h"
|
||||||
#include "rtsp.h"
|
#include "rtsp.h"
|
||||||
#include "rdt.h"
|
#include "rdt.h"
|
||||||
|
#include "url.h"
|
||||||
|
|
||||||
//#define DEBUG
|
//#define DEBUG
|
||||||
//#define DEBUG_RTP_TCP
|
//#define DEBUG_RTP_TCP
|
||||||
@ -200,7 +201,7 @@ redo:
|
|||||||
if (rt->state != RTSP_STATE_STREAMING)
|
if (rt->state != RTSP_STATE_STREAMING)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
ret = url_read_complete(rt->rtsp_hd, buf, 3);
|
ret = ffurl_read_complete(rt->rtsp_hd, buf, 3);
|
||||||
if (ret != 3)
|
if (ret != 3)
|
||||||
return -1;
|
return -1;
|
||||||
id = buf[0];
|
id = buf[0];
|
||||||
@ -211,7 +212,7 @@ redo:
|
|||||||
if (len > buf_size || len < 12)
|
if (len > buf_size || len < 12)
|
||||||
goto redo;
|
goto redo;
|
||||||
/* get the data */
|
/* get the data */
|
||||||
ret = url_read_complete(rt->rtsp_hd, buf, len);
|
ret = ffurl_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 &&
|
||||||
|
@ -69,4 +69,13 @@ int ffurl_open(URLContext **h, const char *url, int flags);
|
|||||||
*/
|
*/
|
||||||
int ffurl_read(URLContext *h, unsigned char *buf, int size);
|
int ffurl_read(URLContext *h, unsigned char *buf, int size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read as many bytes as possible (up to size), calling the
|
||||||
|
* read function multiple times if necessary.
|
||||||
|
* This makes special short-read handling in applications
|
||||||
|
* unnecessary, if the return value is < size then it is
|
||||||
|
* certain there was either an error or the end of file was reached.
|
||||||
|
*/
|
||||||
|
int ffurl_read_complete(URLContext *h, unsigned char *buf, int size);
|
||||||
|
|
||||||
#endif //AVFORMAT_URL_H
|
#endif //AVFORMAT_URL_H
|
||||||
|
Loading…
Reference in New Issue
Block a user