|
|
@@ -524,6 +524,24 @@ void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType typ |
|
|
|
s->last_time = time; |
|
|
|
} |
|
|
|
|
|
|
|
static int read_packet_wrapper(AVIOContext *s, uint8_t *buf, int size) |
|
|
|
{ |
|
|
|
int ret; |
|
|
|
|
|
|
|
if (!s->read_packet) |
|
|
|
return AVERROR_EOF; |
|
|
|
ret = s->read_packet(s->opaque, buf, size); |
|
|
|
#if FF_API_OLD_AVIO_EOF_0 |
|
|
|
if (!ret && !s->max_packet_size) { |
|
|
|
av_log(NULL, AV_LOG_WARNING, "Invalid return value 0 for stream protocol\n"); |
|
|
|
ret = AVERROR_EOF; |
|
|
|
} |
|
|
|
#else |
|
|
|
av_assert2(ret || s->max_packet_size); |
|
|
|
#endif |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
/* Input stream */ |
|
|
|
|
|
|
|
static void fill_buffer(AVIOContext *s) |
|
|
@@ -562,10 +580,7 @@ static void fill_buffer(AVIOContext *s) |
|
|
|
len = s->orig_buffer_size; |
|
|
|
} |
|
|
|
|
|
|
|
if (s->read_packet) |
|
|
|
len = s->read_packet(s->opaque, dst, len); |
|
|
|
else |
|
|
|
len = AVERROR_EOF; |
|
|
|
len = read_packet_wrapper(s, dst, len); |
|
|
|
if (len == AVERROR_EOF) { |
|
|
|
/* do not modify buffer if EOF reached so that a seek back can |
|
|
|
be done without rereading data */ |
|
|
@@ -638,10 +653,7 @@ int avio_read(AVIOContext *s, unsigned char *buf, int size) |
|
|
|
if (len == 0 || s->write_flag) { |
|
|
|
if((s->direct || size > s->buffer_size) && !s->update_checksum) { |
|
|
|
// bypass the buffer and read data directly into buf |
|
|
|
if(s->read_packet) |
|
|
|
len = s->read_packet(s->opaque, buf, size); |
|
|
|
else |
|
|
|
len = AVERROR_EOF; |
|
|
|
len = read_packet_wrapper(s, buf, size); |
|
|
|
if (len == AVERROR_EOF) { |
|
|
|
/* do not modify buffer if EOF reached so that a seek back can |
|
|
|
be done without rereading data */ |
|
|
@@ -708,7 +720,7 @@ int avio_read_partial(AVIOContext *s, unsigned char *buf, int size) |
|
|
|
return -1; |
|
|
|
|
|
|
|
if (s->read_packet && s->write_flag) { |
|
|
|
len = s->read_packet(s->opaque, buf, size); |
|
|
|
len = read_packet_wrapper(s, buf, size); |
|
|
|
if (len > 0) |
|
|
|
s->pos += len; |
|
|
|
return len; |
|
|
|