mirror of
https://github.com/mpv-player/mpv
synced 2025-04-01 14:50:07 +00:00
stream: remove padding parameter from stream_read_complete()
Seems like a completely unnecessary complication. Instead, always add a 1 byte padding (could be extended if a caller needs it), and clear it. Also add some documentation. There was some, but it was outdated and incomplete.
This commit is contained in:
parent
d064c69e1c
commit
4f5e12136d
core
demux
stream
sub
video/out
@ -404,7 +404,7 @@ static void encode_2pass_prepare(struct encode_lavc_context *ctx,
|
||||
set_to_avdictionary(dictp, "flags", "-pass2");
|
||||
} else {
|
||||
struct bstr content = stream_read_complete(*bytebuf, NULL,
|
||||
1000000000, 1);
|
||||
1000000000);
|
||||
if (content.start == NULL) {
|
||||
mp_msg(MSGT_ENCODE, MSGL_WARN, "%s: could not read '%s', "
|
||||
"disabling 2-pass encoding at pass 1\n",
|
||||
|
@ -1737,7 +1737,7 @@ static int parse_config_file(struct input_ctx *ictx, char *file, bool warn)
|
||||
mp_msg(MSGT_INPUT, MSGL_ERR, "Can't open input config file %s.\n", file);
|
||||
return 0;
|
||||
}
|
||||
bstr res = stream_read_complete(s, NULL, 1000000, 0);
|
||||
bstr res = stream_read_complete(s, NULL, 1000000);
|
||||
free_stream(s);
|
||||
mp_msg(MSGT_INPUT, MSGL_V, "Parsing input config file %s\n", file);
|
||||
int n_binds = parse_config(ictx, false, res, file);
|
||||
|
@ -39,7 +39,7 @@ static int try_open_file(struct demuxer *demuxer)
|
||||
if (!mp_probe_cue((struct bstr) { buf, len }))
|
||||
return 0;
|
||||
stream_seek(s, 0);
|
||||
demuxer->file_contents = stream_read_complete(s, demuxer, 1000000, 0);
|
||||
demuxer->file_contents = stream_read_complete(s, demuxer, 1000000);
|
||||
if (demuxer->file_contents.start == NULL)
|
||||
return 0;
|
||||
if (!mp_probe_cue((struct bstr) { buf, len }))
|
||||
|
@ -34,7 +34,7 @@ static int try_open_file(struct demuxer *demuxer)
|
||||
if (strncmp(buf, header, len))
|
||||
return 0;
|
||||
stream_seek(s, 0);
|
||||
demuxer->file_contents = stream_read_complete(s, demuxer, 1000000, 0);
|
||||
demuxer->file_contents = stream_read_complete(s, demuxer, 1000000);
|
||||
if (demuxer->file_contents.start == NULL)
|
||||
return 0;
|
||||
return DEMUXER_TYPE_EDL;
|
||||
|
@ -78,7 +78,7 @@ static int demux_mf_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds){
|
||||
|
||||
if (stream) {
|
||||
stream_seek(stream, 0);
|
||||
bstr data = stream_read_complete(stream, NULL, MF_MAX_FILE_SIZE, 0);
|
||||
bstr data = stream_read_complete(stream, NULL, MF_MAX_FILE_SIZE);
|
||||
if (data.len) {
|
||||
demux_packet_t *dp = new_demux_packet(data.len);
|
||||
memcpy(dp->buffer, data.start, data.len);
|
||||
|
@ -898,20 +898,27 @@ unsigned char *stream_read_line(stream_t *s, unsigned char *mem, int max,
|
||||
return mem;
|
||||
}
|
||||
|
||||
// Read the rest of the stream into memory (current pos to EOF), and return it.
|
||||
// talloc_ctx: used as talloc parent for the returned allocation
|
||||
// max_size: must be set to >0. If the file is larger than that, it is treated
|
||||
// as error. This is a minor robustness measure.
|
||||
// returns: stream contents, or .start/.len set to NULL on error
|
||||
// If the file was empty, but no error happened, .start will be non-NULL and
|
||||
// .len will be 0.
|
||||
// For convenience, the returned buffer is padded with a 0 byte. The padding
|
||||
// is not included in the returned length.
|
||||
struct bstr stream_read_complete(struct stream *s, void *talloc_ctx,
|
||||
int max_size, int padding_bytes)
|
||||
int max_size)
|
||||
{
|
||||
if (max_size > 1000000000)
|
||||
abort();
|
||||
|
||||
int bufsize;
|
||||
int total_read = 0;
|
||||
int padding = FFMAX(padding_bytes, 1);
|
||||
int padding = 1;
|
||||
char *buf = NULL;
|
||||
if (s->end_pos > max_size)
|
||||
return (struct bstr){
|
||||
NULL, 0
|
||||
};
|
||||
return (struct bstr){NULL, 0};
|
||||
if (s->end_pos > 0)
|
||||
bufsize = s->end_pos + padding;
|
||||
else
|
||||
@ -924,16 +931,13 @@ struct bstr stream_read_complete(struct stream *s, void *talloc_ctx,
|
||||
break;
|
||||
if (bufsize > max_size) {
|
||||
talloc_free(buf);
|
||||
return (struct bstr){
|
||||
NULL, 0
|
||||
};
|
||||
return (struct bstr){NULL, 0};
|
||||
}
|
||||
bufsize = FFMIN(bufsize + (bufsize >> 1), max_size + padding);
|
||||
}
|
||||
buf = talloc_realloc_size(talloc_ctx, buf, total_read + padding);
|
||||
return (struct bstr){
|
||||
buf, total_read
|
||||
};
|
||||
memset(&buf[total_read], 0, padding);
|
||||
return (struct bstr){buf, total_read};
|
||||
}
|
||||
|
||||
bool stream_manages_timeline(struct stream *s)
|
||||
|
@ -299,14 +299,9 @@ int stream_read(stream_t *s, char *mem, int total);
|
||||
int stream_read_partial(stream_t *s, char *buf, int buf_size);
|
||||
|
||||
struct MPOpts;
|
||||
/*
|
||||
* Return allocated buffer for all data until EOF.
|
||||
* If amount of data would be more than max_size return NULL as data ptr.
|
||||
* Make the allocated buffer padding_bytes larger than the data read.
|
||||
* Write number of bytes read at *amount_read.
|
||||
*/
|
||||
|
||||
struct bstr stream_read_complete(struct stream *s, void *talloc_ctx,
|
||||
int max_size, int padding_bytes);
|
||||
int max_size);
|
||||
int stream_control(stream_t *s, int cmd, void *arg);
|
||||
void stream_update_size(stream_t *s);
|
||||
void free_stream(stream_t *s);
|
||||
|
@ -122,7 +122,7 @@ ASS_Track *mp_ass_read_stream(ASS_Library *library, const char *fname,
|
||||
if (!s)
|
||||
// Stream code should have printed an error already
|
||||
return NULL;
|
||||
struct bstr content = stream_read_complete(s, NULL, 100000000, 1);
|
||||
struct bstr content = stream_read_complete(s, NULL, 100000000);
|
||||
if (content.start == NULL)
|
||||
mp_tmsg(MSGT_ASS, MSGL_ERR, "Refusing to load subtitle file "
|
||||
"larger than 100 MB: %s\n", fname);
|
||||
|
@ -87,7 +87,7 @@ static struct bstr load_file(void *talloc_ctx, const char *filename)
|
||||
struct bstr res = {0};
|
||||
stream_t *s = open_stream(filename, NULL, NULL);
|
||||
if (s) {
|
||||
res = stream_read_complete(s, talloc_ctx, 1000000000, 0);
|
||||
res = stream_read_complete(s, talloc_ctx, 1000000000);
|
||||
free_stream(s);
|
||||
}
|
||||
return res;
|
||||
|
Loading…
Reference in New Issue
Block a user