dvdnav, tv: force-disable caching

On dvdnav, caching kind of works but not really. (Not our fault, at
least not fully. It's due to libdvdnav being slightly misdesigned; see
previous commit for some explanations.)

The TV code is implemented in the demuxer, and the stream implementation
is just a wrapper, so caching makes no sense here.
This commit is contained in:
wm4 2013-12-14 01:21:06 +01:00
parent 8510ddba4c
commit 653980ac3a
4 changed files with 5 additions and 4 deletions

View File

@ -290,6 +290,7 @@ static int open_internal(const stream_info_t *sinfo, struct stream *underlying,
s->url = talloc_strdup(s, url);
s->path = talloc_strdup(s, path);
s->source = underlying;
s->allow_caching = true;
// Parse options
if (sinfo->priv_size) {
@ -805,7 +806,7 @@ static int stream_enable_cache(stream_t **stream, int64_t size, int64_t min,
{
stream_t *orig = *stream;
if (orig->mode != STREAM_READ)
if (orig->mode != STREAM_READ || !orig->allow_caching)
return 1;
stream_t *cache = new_stream();

View File

@ -164,6 +164,7 @@ typedef struct stream {
char *demuxer; // request demuxer to be used
char *lavf_type; // name of expected demuxer type for lavf
bool safe_origin; // used for playlists that can be opened safely
bool allow_caching; // stream cache makes sense
struct MPOpts *opts;
FILE *capture_file;

View File

@ -696,14 +696,12 @@ static int open_s(stream_t *stream, int mode)
stream->type = STREAMTYPE_DVD;
stream->demuxer = "lavf";
stream->lavf_type = "mpeg";
stream->allow_caching = false;
if (!stream->pos && p->track > 0)
mp_msg(MSGT_OPEN, MSGL_ERR, "INIT ERROR: couldn't get init pos %s\r\n",
dvdnav_err_to_string(priv->dvdnav));
mp_msg(MSGT_OPEN, MSGL_INFO, "Remember to disable mpv's cache when "
"playing dvdnav:// streams (adding -no-cache to your command line)\n");
return STREAM_OK;
}

View File

@ -92,6 +92,7 @@ tv_stream_open (stream_t *stream, int mode)
stream->type = STREAMTYPE_TV;
stream->close=tv_stream_close;
stream->demuxer = "tv";
stream->allow_caching = false;
return STREAM_OK;
}