Index: stream/stream_dvd.c =================================================================== --- stream/stream_dvd.c (revision 25223) +++ stream/stream_dvd.c (working copy) @@ -24,6 +24,7 @@ #include #endif +#include #include #define FIRST_AC3_AID 128 @@ -1077,7 +1078,38 @@ return STREAM_UNSUPPORTED; } +static int +ifo_stream_open (stream_t *stream, int mode, void *opts, int *file_format) +{ + char *ext; + char* filename; + struct stream_priv_s *dvd_priv; + ext = strrchr (stream->url, '.'); + if (!ext || strcasecmp (ext + 1, "ifo")) + return STREAM_UNSUPPORTED; + + mp_msg(MSGT_DVD, MSGL_INFO, ".IFO detected. Redirecting to dvd://\n"); + if (!dvd_device) + dvd_device = strdup(dirname (stream->url)); + + filename = strdup(basename(stream->url)); + + dvd_priv=calloc(1, sizeof(struct stream_priv_s)); + if(!strncasecmp(filename,"vts_",4)) + { + if(sscanf(filename+3, "_%02d_", &dvd_priv->title)!=1) + dvd_priv->title=1; + }else + dvd_priv->title=1; + + free(filename); + free(stream->url); + stream->url=strdup("dvd://"); + + return open_s(stream, mode, dvd_priv, file_format); +} + stream_info_t stream_info_dvd = { "DVD stream", "null", @@ -1088,3 +1120,14 @@ &stream_opts, 1 // Urls are an option string }; + +stream_info_t stream_info_ifo = { + "DVD IFO input", + "ifo", + "Benjamin Zores", + "Mostly used to play DVDs on disk through OSD Menu", + ifo_stream_open, + { "file", "", NULL }, + NULL, + 0 +}; Index: stream/stream.c =================================================================== --- stream/stream.c (revision 25223) +++ stream/stream.c (working copy) @@ -85,6 +85,7 @@ extern stream_info_t stream_info_mf; extern stream_info_t stream_info_file; #ifdef USE_DVDREAD +extern stream_info_t stream_info_ifo; extern stream_info_t stream_info_dvd; #endif @@ -132,6 +133,7 @@ #endif &stream_info_cue, #ifdef USE_DVDREAD + &stream_info_ifo, &stream_info_dvd, #endif #ifdef USE_DVDNAV