mirror of https://github.com/mpv-player/mpv
Implementation of tv:// driver autodetection.
If user did not specify driver directly, all available drivers will be probed (in order: v4l2,v4l1,bsdbt848,dummy). In most cases first probed driver will be successfully autodetected and used. Autodetection will be disabled if user specified driver directly (in command line or config). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24423 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
36a28b6f50
commit
dcc2e2e5ea
|
@ -1759,7 +1759,7 @@ In most cases automute=100 will be enough.
|
||||||
Default is 0 (automute disabled).
|
Default is 0 (automute disabled).
|
||||||
.IPs driver=<value>
|
.IPs driver=<value>
|
||||||
See \-tv driver=help for a list of compiled-in TV input drivers.
|
See \-tv driver=help for a list of compiled-in TV input drivers.
|
||||||
available: dummy, v4l, v4l2, bsdbt848
|
available: dummy, v4l, v4l2, bsdbt848 (default: autodetect)
|
||||||
.IPs device=<value>
|
.IPs device=<value>
|
||||||
Specify TV device (default: /dev/\:video0).
|
Specify TV device (default: /dev/\:video0).
|
||||||
.I NOTE:
|
.I NOTE:
|
||||||
|
|
|
@ -2081,6 +2081,7 @@ static char help_text[]=
|
||||||
#define MSGTR_TV_AvailableDrivers "Available drivers:\n"
|
#define MSGTR_TV_AvailableDrivers "Available drivers:\n"
|
||||||
#define MSGTR_TV_DriverInfo "Selected driver: %s\n name: %s\n author: %s\n comment: %s\n"
|
#define MSGTR_TV_DriverInfo "Selected driver: %s\n name: %s\n author: %s\n comment: %s\n"
|
||||||
#define MSGTR_TV_NoSuchDriver "No such driver: %s\n"
|
#define MSGTR_TV_NoSuchDriver "No such driver: %s\n"
|
||||||
|
#define MSGTR_TV_DriverAutoDetectionFailed "TV driver autodetection failed.\n"
|
||||||
#define MSGTR_TV_UnknownColorOption "Unknown color option (%d) specified!\n"
|
#define MSGTR_TV_UnknownColorOption "Unknown color option (%d) specified!\n"
|
||||||
#define MSGTR_TV_CurrentFrequency "Current frequency: %lu (%.3f)\n"
|
#define MSGTR_TV_CurrentFrequency "Current frequency: %lu (%.3f)\n"
|
||||||
#define MSGTR_TV_NoTeletext "No teletext"
|
#define MSGTR_TV_NoTeletext "No teletext"
|
||||||
|
|
|
@ -40,7 +40,7 @@ tv_param_t stream_tv_defaults = {
|
||||||
-1, //normid
|
-1, //normid
|
||||||
#endif
|
#endif
|
||||||
NULL, //device
|
NULL, //device
|
||||||
"dummy", //driver
|
NULL, //driver
|
||||||
-1, //width
|
-1, //width
|
||||||
-1, //height
|
-1, //height
|
||||||
0, //input, used in v4l and bttv
|
0, //input, used in v4l and bttv
|
||||||
|
|
24
stream/tv.c
24
stream/tv.c
|
@ -52,17 +52,18 @@ extern tvi_info_t tvi_info_v4l2;
|
||||||
extern tvi_info_t tvi_info_bsdbt848;
|
extern tvi_info_t tvi_info_bsdbt848;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** List of drivers in autodetection order */
|
||||||
static const tvi_info_t* tvi_driver_list[]={
|
static const tvi_info_t* tvi_driver_list[]={
|
||||||
&tvi_info_dummy,
|
|
||||||
#ifdef HAVE_TV_V4L1
|
|
||||||
&tvi_info_v4l,
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_TV_V4L2
|
#ifdef HAVE_TV_V4L2
|
||||||
&tvi_info_v4l2,
|
&tvi_info_v4l2,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_TV_V4L1
|
||||||
|
&tvi_info_v4l,
|
||||||
|
#endif
|
||||||
#ifdef HAVE_TV_BSDBT848
|
#ifdef HAVE_TV_BSDBT848
|
||||||
&tvi_info_bsdbt848,
|
&tvi_info_bsdbt848,
|
||||||
#endif
|
#endif
|
||||||
|
&tvi_info_dummy,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -560,7 +561,7 @@ static tvi_handle_t *tv_begin(tv_param_t* tv_param)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
tvi_handle_t* h;
|
tvi_handle_t* h;
|
||||||
if(!strcmp(tv_param->driver,"help")){
|
if(tv_param->driver && !strcmp(tv_param->driver,"help")){
|
||||||
mp_msg(MSGT_TV,MSGL_INFO,MSGTR_TV_AvailableDrivers);
|
mp_msg(MSGT_TV,MSGL_INFO,MSGTR_TV_AvailableDrivers);
|
||||||
for(i=0;tvi_driver_list[i];i++){
|
for(i=0;tvi_driver_list[i];i++){
|
||||||
mp_msg(MSGT_TV,MSGL_INFO," %s\t%s",tvi_driver_list[i]->short_name,tvi_driver_list[i]->name);
|
mp_msg(MSGT_TV,MSGL_INFO," %s\t%s",tvi_driver_list[i]->short_name,tvi_driver_list[i]->name);
|
||||||
|
@ -572,20 +573,29 @@ static tvi_handle_t *tv_begin(tv_param_t* tv_param)
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i=0;tvi_driver_list[i];i++){
|
for(i=0;tvi_driver_list[i];i++){
|
||||||
if (!strcmp(tvi_driver_list[i]->short_name, tv_param->driver)){
|
if (!tv_param->driver || !strcmp(tvi_driver_list[i]->short_name, tv_param->driver)){
|
||||||
h=tvi_driver_list[i]->tvi_init(tv_param);
|
h=tvi_driver_list[i]->tvi_init(tv_param);
|
||||||
if(!h) return NULL;
|
//Requested driver initialization failed
|
||||||
|
if (!h && tv_param->driver)
|
||||||
|
return NULL;
|
||||||
|
//Driver initialization failed during autodetection process.
|
||||||
|
if (!h)
|
||||||
|
continue;
|
||||||
|
|
||||||
h->tv_param=tv_param;
|
h->tv_param=tv_param;
|
||||||
mp_msg(MSGT_TV, MSGL_INFO, MSGTR_TV_DriverInfo, tvi_driver_list[i]->short_name,
|
mp_msg(MSGT_TV, MSGL_INFO, MSGTR_TV_DriverInfo, tvi_driver_list[i]->short_name,
|
||||||
tvi_driver_list[i]->name,
|
tvi_driver_list[i]->name,
|
||||||
tvi_driver_list[i]->author,
|
tvi_driver_list[i]->author,
|
||||||
tvi_driver_list[i]->comment?tvi_driver_list[i]->comment:"");
|
tvi_driver_list[i]->comment?tvi_driver_list[i]->comment:"");
|
||||||
|
tv_param->driver=strdup(tvi_driver_list[i]->short_name);
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(tv_param->driver)
|
||||||
mp_msg(MSGT_TV, MSGL_ERR, MSGTR_TV_NoSuchDriver, tv_param->driver);
|
mp_msg(MSGT_TV, MSGL_ERR, MSGTR_TV_NoSuchDriver, tv_param->driver);
|
||||||
|
else
|
||||||
|
mp_msg(MSGT_TV, MSGL_ERR, MSGTR_TV_DriverAutoDetectionFailed);
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue