Re: [MPlayer-dev-eng] [PATCH] add optional device with dvd://
- Date: Thu, 03 Jul 2008 12:47:49 +0200
- From: Mathieu SCHROETER <mathieu.schroeter@xxxxxxxxxxxx>
- Subject: Re: [MPlayer-dev-eng] [PATCH] add optional device with dvd://
Mathieu SCHROETER a écrit :
>+ if(!p->device)
>+ dvd_device_current = strdup(dvd_device ? dvd_device :
DEFAULT_DVD_DEVICE);
Sorry previous patch is wrong because a leak exists on
dvd_device_current. Now strdup() is only used on dvd_device
(if necessary)...
Regards,
Mathieu SCHROETER
Index: stream/stream_dvd.c
===================================================================
--- stream/stream_dvd.c (révision 27185)
+++ stream/stream_dvd.c (copie de travail)
@@ -42,6 +42,7 @@
#include "libavutil/intreadwrite.h"
extern char* dvd_device;
+static char* dvd_device_current;
int dvd_angle=1;
int dvd_speed=0; /* 0 => don't touch speed */
@@ -138,14 +139,17 @@
static struct stream_priv_s {
int title;
+ char* device;
} stream_priv_dflts = {
- 1
+ 1,
+ NULL
};
#define ST_OFF(f) M_ST_OFF(struct stream_priv_s,f)
/// URL definition
static const m_option_t stream_opts_fields[] = {
{ "hostname", ST_OFF(title), CONF_TYPE_INT, M_OPT_MIN, 1, 0, NULL },
+ { "filename", ST_OFF(device), CONF_TYPE_STRING, 0, 0 ,0, NULL},
{ NULL, NULL, 0, 0, 0, 0, NULL }
};
static const struct m_struct_st stream_opts = {
@@ -484,7 +488,7 @@
DVDClose(d->dvd);
dvd_chapter = 1;
dvd_last_chapter = 0;
- dvd_set_speed(dvd_device, -1); /* -1 => restore default */
+ dvd_set_speed(dvd_device_current, -1); /* -1 => restore default */
}
static int fill_buffer(stream_t *s, char *but, int len)
@@ -768,6 +772,14 @@
mp_msg(MSGT_OPEN,MSGL_V,"URL: %s\n", stream->url);
dvd_title = p->title;
+
+ if(!p->device) {
+ if(!dvd_device)
+ dvd_device = strdup(DEFAULT_DVD_DEVICE);
+ dvd_device_current = dvd_device;
+ } else
+ dvd_device_current = p->device;
+
if(1){
//int ret,ret2;
dvd_priv_t *d;
@@ -781,13 +793,12 @@
/**
* Open the disc.
*/
- if(!dvd_device) dvd_device=strdup(DEFAULT_DVD_DEVICE);
- dvd_set_speed(dvd_device, dvd_speed);
+ dvd_set_speed(dvd_device_current, dvd_speed);
#if defined(__APPLE__) || defined(__DARWIN__)
/* Dynamic DVD drive selection on Darwin */
- if(!strcmp(dvd_device, "/dev/rdiskN")) {
+ if(!strcmp(dvd_device_current, "/dev/rdiskN")) {
int i;
- size_t len = strlen(dvd_device)+1;
+ size_t len = strlen(dvd_device_current)+1;
char *temp_device = malloc(len);
for (i = 1; i < 10; i++) {
@@ -817,9 +828,9 @@
} else
#endif /* defined(__APPLE__) || defined(__DARWIN__) */
{
- dvd = DVDOpen(dvd_device);
+ dvd = DVDOpen(dvd_device_current);
if(!dvd) {
- mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,dvd_device, strerror(errno));
+ mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_CantOpenDVD,dvd_device_current, strerror(errno));
m_struct_free(&stream_opts,opts);
return STREAM_UNSUPPORTED;
}
@@ -1082,12 +1093,11 @@
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));
+ dvd_priv->device = strdup(dirname(stream->url));
if(!strncasecmp(filename,"vts_",4))
{
if(sscanf(filename+3, "_%02d_", &dvd_priv->title)!=1)
Index: DOCS/man/en/mplayer.1
===================================================================
--- DOCS/man/en/mplayer.1 (révision 27185)
+++ DOCS/man/en/mplayer.1 (copie de travail)
@@ -61,7 +61,7 @@
.
.br
.B mplayer
-[dvd|dvdnav]://[title|[start_title]\-end_title]
+[dvd|dvdnav]://[title|[start_title]\-end_title][/device]
[options]
.
.br
Index: DOCS/man/fr/mplayer.1
===================================================================
--- DOCS/man/fr/mplayer.1 (révision 27185)
+++ DOCS/man/fr/mplayer.1 (copie de travail)
@@ -63,7 +63,7 @@
.
.br
.B mplayer
-[dvd|dvdnav]://[titre|[titre_de_début]\-titre_de_fin ]
+[dvd|dvdnav]://[titre|[titre_de_début]\-titre_de_fin ][/périphérique]
[options]
.
.br
_______________________________________________
MPlayer-dev-eng mailing list
MPlayer-dev-eng@xxxxxxxxxxxx
https://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng