Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
2ddfebf9
Commit
2ddfebf9
authored
Sep 06, 2005
by
Antoine Cellerier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CD/DVD detection patch by Brian Robb
parent
93e6a6a6
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
91 additions
and
63 deletions
+91
-63
THANKS
THANKS
+1
-0
modules/gui/wxwidgets/open.cpp
modules/gui/wxwidgets/open.cpp
+90
-63
No files found.
THANKS
View file @
2ddfebf9
...
...
@@ -21,6 +21,7 @@ Benjamin Mironer <bmironer at noos.fr> - Mac OS X fixes
Benoit Steiner <benny at via.ecp.fr> - MPEG system input, network input
Bill Eldridge <bill at rfa.org> - documentation
Bob Maguire <maguirer at rjmaguire dot com> - addition of some controls to the OSX interface
Brian Robb <vascy at hotmail dot com> - win32 CD/DVD drive detection in wx
Brieuc Jeunhomme <bbp at via.ecp.fr> - bug fixes
Bruno Vella <allevb at tin.it> - Italian localization
Carlo Calabr <murray at via.ecp.fr> - Italian localization
...
...
modules/gui/wxwidgets/open.cpp
View file @
2ddfebf9
...
...
@@ -24,6 +24,7 @@
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <stdlib.h>
/* malloc(), free() */
#include <errno.h>
/* ENOMEM */
#include <string.h>
/* strerror() */
...
...
@@ -174,7 +175,7 @@ END_EVENT_TABLE()
"Stream-and-Media info" when no input thread hasn't been initialized.
*/
extern void MediaInsertCDDA( intf_thread_t *_p_intf, CdIo_t *p_cdio,
track_t i_last_track );
track_t i_last_track );
#endif
/*****************************************************************************
...
...
@@ -687,9 +688,9 @@ wxPanel *OpenDialog::DiscPanel( wxWindow* parent )
WXSIZEOF
(
disc_type_array
),
wxRA_SPECIFY_COLS
);
#ifdef HAVE_LIBCDIO
disc_probe
=
new
wxCheckBox
(
panel
,
DiscProbe_Event
,
disc_probe
=
new
wxCheckBox
(
panel
,
DiscProbe_Event
,
wxU
(
_
(
"Probe Disc(s)"
))
);
disc_probe
->
SetToolTip
(
wxU
(
_
(
"Probe for a DVD, VCD or audio CD. "
disc_probe
->
SetToolTip
(
wxU
(
_
(
"Probe for a DVD, VCD or audio CD. "
"First try the Device name entered for the selected Disc type "
"(DVD, DVD Menu, VCD, audio CD). If that doesn't find media, try any device "
"for the Disc type. If that doesn't work, then try looking for CD-ROMs or "
...
...
@@ -707,6 +708,32 @@ wxPanel *OpenDialog::DiscPanel( wxWindow* parent )
wxDefaultPosition
,
wxDefaultSize
,
wxTE_PROCESS_ENTER
);
#ifdef WIN32
char
psz_default_device
[
3
]
=
{
0
};
/* find the drive_name for the first cdrom drive,
* which is probably "D:" and put the drive_name into
* psz_default_device... */
for
(
char
drive_letter
=
'A'
;
drive_letter
<=
'Z'
;
++
drive_letter
)
{
char
drive_name
[
3
]
=
{
drive_letter
,
':'
,
0
};
UINT
type
=
GetDriveType
(
drive_name
);
if
(
type
==
DRIVE_CDROM
)
{
psz_default_device
[
0
]
=
drive_letter
;
psz_default_device
[
1
]
=
':'
;
break
;
}
}
if
(
strlen
(
psz_default_device
)
>
0
)
{
if
(
disc_device
)
disc_device
->
SetValue
(
wxL2U
(
psz_default_device
)
);
}
#endif
sizer
->
Add
(
label
,
0
,
wxALIGN_LEFT
|
wxALIGN_CENTER_VERTICAL
);
sizer
->
Add
(
disc_device
,
1
,
wxALIGN_LEFT
|
wxALIGN_CENTER_VERTICAL
);
...
...
@@ -939,11 +966,11 @@ void OpenDialog::UpdateMRL( int i_access_method )
disc_device
->
SetToolTip
(
wxU
(
_
(
"Name of CD-ROM device "
"to read audio CD from. If this field is left empty, we will scan "
"for a CD-ROM with an audio CD in it."
))
);
mrltemp
=
wxT
(
"cddax://"
)
mrltemp
=
wxT
(
"cddax://"
)
#else
disc_device
->
SetToolTip
(
wxU
(
_
(
"Name of CD-ROM device "
"to read audio CD from."
))
);
mrltemp
=
wxT
(
"cdda://"
)
mrltemp
=
wxT
(
"cdda://"
)
#endif
+
disc_device
->
GetValue
();
if
(
i_disc_title
>
0
)
...
...
@@ -1289,7 +1316,7 @@ void OpenDialog::OnDiscDeviceChange( wxCommandEvent& event )
static
bool
IsDVD
(
const
char
*
psz_drive
)
{
CdIo_t
*
p_cdio
=
cdio_open
(
psz_drive
,
DRIVER_UNKNOWN
);
if
(
p_cdio
)
if
(
p_cdio
)
{
discmode_t
discmode
=
cdio_get_discmode
(
p_cdio
);
cdio_destroy
(
p_cdio
);
...
...
@@ -1312,18 +1339,18 @@ static char * ProbeDVD(const wxChar *device)
{
return
strdup
(
psz_device
);
}
ppsz_cd_drives
=
cdio_get_devices
(
DRIVER_DEVICE
);
if
(
ppsz_cd_drives
)
{
char
**
c
;
for
(
c
=
ppsz_cd_drives
;
*
c
!=
NULL
;
c
++
)
for
(
c
=
ppsz_cd_drives
;
*
c
!=
NULL
;
c
++
)
{
if
(
IsDVD
(
*
c
)
)
{
char
*
psz_drive
=
strdup
(
*
c
);
cdio_free_device_list
(
ppsz_cd_drives
);
return
strdup
(
psz_drive
);
if
(
IsDVD
(
*
c
)
)
{
char
*
psz_drive
=
strdup
(
*
c
);
cdio_free_device_list
(
ppsz_cd_drives
);
return
strdup
(
psz_drive
);
}
}
cdio_free_device_list
(
ppsz_cd_drives
);
...
...
@@ -1333,18 +1360,18 @@ static char * ProbeDVD(const wxChar *device)
static
char
*
ProbeDevice
(
char
**
ppsz_search_devices
,
cdio_fs_anal_t
mask
,
bool
b_any
)
bool
b_any
)
{
char
**
ppsz_devices
;
if
(
ppsz_search_devices
&&
!
ppsz_search_devices
[
0
]
)
if
(
ppsz_search_devices
&&
!
ppsz_search_devices
[
0
]
)
ppsz_search_devices
=
NULL
;
/* Start out trying the device that has been entered so far. */
ppsz_devices
=
cdio_get_devices_with_cap
(
ppsz_search_devices
,
mask
,
b_any
);
if
(
ppsz_devices
&&
*
ppsz_devices
)
ppsz_devices
=
cdio_get_devices_with_cap
(
ppsz_search_devices
,
mask
,
b_any
);
if
(
ppsz_devices
&&
*
ppsz_devices
)
{
char
*
psz_device
=
strdup
(
*
ppsz_devices
);
cdio_free_device_list
(
ppsz_devices
);
...
...
@@ -1357,8 +1384,8 @@ static char * ProbeDevice(char **ppsz_search_devices, cdio_fs_anal_t mask,
if
(
!
ppsz_search_devices
)
return
NULL
;
ppsz_devices
=
cdio_get_devices_with_cap
(
NULL
,
mask
,
true
);
if
(
ppsz_devices
&&
*
ppsz_devices
)
if
(
ppsz_devices
&&
*
ppsz_devices
)
{
char
*
psz_device
=
strdup
(
*
ppsz_devices
);
cdio_free_device_list
(
ppsz_devices
);
...
...
@@ -1392,13 +1419,13 @@ static char * ProbeVCD(const wxChar *device)
char
*
psz_device
=
(
char
*
)
tmp_buf
;
ppsz_device
[
0
]
=
(
device
&&
*
device
)
?
psz_device
:
NULL
;
ppsz_device
[
1
]
=
NULL
;
return
ProbeDevice
(
ppsz_device
,
return
ProbeDevice
(
ppsz_device
,
(
CDIO_FS_ANAL_SVCD
|
CDIO_FS_ANAL_CVD
|
CDIO_FS_ANAL_VIDEOCD
|
CDIO_FS_UNKNOWN
),
true
);
}
/*
/*
Probe (find anywhere) a CD-DA, VCD, or a DVD.
First try the device name that may have been entered for the "disc type"
selected. If that doesn't work we try any device for the disc type.
...
...
@@ -1421,7 +1448,7 @@ void OpenDialog::OnDiscProbe( wxCommandEvent& WXUNUSED(event) )
{
case
SELECTION_DISC_TYPE_DVD_MENUS
:
case
SELECTION_DISC_TYPE_DVD
:
case
SELECTION_DISC_TYPE_DVD
:
/* If not a DVD then try for a VCD. If VCD fails it will
try for a CD-DA. */
if
(
!
psz_device
)
psz_device
=
ProbeDVD
(
disc_device
->
GetValue
());
...
...
@@ -1437,30 +1464,30 @@ void OpenDialog::OnDiscProbe( wxCommandEvent& WXUNUSED(event) )
case
SELECTION_DISC_TYPE_VCD
:
/* VCD probe of some sort */
if
(
!
psz_device
)
psz_device
=
ProbeVCD
(
disc_device
->
GetValue
());
if
(
psz_device
)
if
(
psz_device
)
{
#ifdef HAVE_VCDX
#if LIBVCD_VERSION_NUM > 23
vcdinfo_obj_t
*
p_vcdinfo
;
vcdinfo_obj_t
*
p_vcdinfo
;
/* Set LID or entry range accurately if possible. */
if
(
vcdinfo_open
(
&
p_vcdinfo
,
&
psz_device
,
DRIVER_DEVICE
,
NULL
)
==
VCDINFO_OPEN_VCD
)
{
if
(
config_GetInt
(
p_intf
,
"vcdx-PBC"
))
{
/* Set largest LID. */
;
disc_title
->
SetRange
(
0
,
vcdinfo_get_num_LIDs
(
p_vcdinfo
)
);
}
else
{
/* Set largest Entry */
disc_title
->
SetRange
(
0
,
vcdinfo_get_num_entries
(
p_vcdinfo
)
-
1
);
}
vcdinfo_close
(
p_vcdinfo
);
}
if
(
vcdinfo_open
(
&
p_vcdinfo
,
&
psz_device
,
DRIVER_DEVICE
,
NULL
)
==
VCDINFO_OPEN_VCD
)
{
if
(
config_GetInt
(
p_intf
,
"vcdx-PBC"
))
{
/* Set largest LID. */
;
disc_title
->
SetRange
(
0
,
vcdinfo_get_num_LIDs
(
p_vcdinfo
)
);
}
else
{
/* Set largest Entry */
disc_title
->
SetRange
(
0
,
vcdinfo_get_num_entries
(
p_vcdinfo
)
-
1
);
}
vcdinfo_close
(
p_vcdinfo
);
}
#endif
/* LIBVCD_VERSION_NUM > 23 */
disc_device
->
SetValue
(
wxL2U
(
psz_device
)
);
#else
...
...
@@ -1468,10 +1495,10 @@ void OpenDialog::OnDiscProbe( wxCommandEvent& WXUNUSED(event) )
disc_device
->
SetValue
(
wxL2U
(
psz_device
)
);
/* Set track range accurately if possible. */
if
(
p_cdio
)
if
(
p_cdio
)
{
track_t
i_last_track
=
cdio_get_last_track_num
(
p_cdio
);
disc_title
->
SetRange
(
0
,
i_last_track
-
1
);
disc_title
->
SetRange
(
0
,
i_last_track
-
1
);
}
cdio_destroy
(
p_cdio
);
#endif
...
...
@@ -1481,17 +1508,17 @@ void OpenDialog::OnDiscProbe( wxCommandEvent& WXUNUSED(event) )
b_probed_VCD
=
true
;
/* Not a VCD. Try for a DVD unless we've been there before. */
if
(
!
b_probed_DVD
&&
(
psz_device
=
ProbeDVD
(
disc_device
->
GetValue
()))
)
if
(
!
b_probed_DVD
&&
(
psz_device
=
ProbeDVD
(
disc_device
->
GetValue
()))
)
{
disc_type
->
SetSelection
(
SELECTION_DISC_TYPE_DVD_MENUS
);
OnDiscTypeChange
(
dummy_event
);
goto
retry
;
}
b_probed_DVD
=
true
;
/* Couldn't find a VCD or DVD. See if we can find a CD-DA. */
psz_device
=
ProbeCDDA
(
disc_device
->
GetValue
());
if
(
psz_device
)
if
(
psz_device
)
{
disc_type
->
SetSelection
(
SELECTION_DISC_TYPE_CDDA
);
OnDiscTypeChange
(
dummy_event
);
...
...
@@ -1499,7 +1526,7 @@ void OpenDialog::OnDiscProbe( wxCommandEvent& WXUNUSED(event) )
}
/* Couldn't find a VCD, DVD or CD-DA. Null out the Device name and
set to original selection.
set to original selection.
*/
disc_device
->
SetValue
(
wxL2U
(
""
)
);
disc_type
->
SetSelection
(
i_selection
);
...
...
@@ -1508,16 +1535,16 @@ void OpenDialog::OnDiscProbe( wxCommandEvent& WXUNUSED(event) )
case
SELECTION_DISC_TYPE_CDDA
:
if
(
!
psz_device
)
psz_device
=
ProbeCDDA
(
disc_device
->
GetValue
());
if
(
psz_device
)
if
(
psz_device
)
{
CdIo_t
*
p_cdio
=
cdio_open
(
psz_device
,
DRIVER_UNKNOWN
);
disc_device
->
SetValue
(
wxL2U
(
psz_device
)
);
if
(
p_cdio
)
if
(
p_cdio
)
{
track_t
i_last_track
=
cdio_get_last_track_num
(
p_cdio
);
disc_title
->
SetRange
(
0
,
i_last_track
);
disc_title
->
SetRange
(
0
,
i_last_track
);
#if 0
MediaInsertCDDA( p_intf, p_cdio, i_last_track );
MediaInsertCDDA( p_intf, p_cdio, i_last_track );
#endif
}
cdio_destroy
(
p_cdio
);
...
...
@@ -1525,17 +1552,17 @@ void OpenDialog::OnDiscProbe( wxCommandEvent& WXUNUSED(event) )
}
/* Not a CD-DA. Try for a DVD unless we've been there before. */
if
(
!
b_probed_DVD
&&
(
psz_device
=
ProbeDVD
(
disc_device
->
GetValue
()))
)
if
(
!
b_probed_DVD
&&
(
psz_device
=
ProbeDVD
(
disc_device
->
GetValue
()))
)
{
disc_type
->
SetSelection
(
SELECTION_DISC_TYPE_DVD_MENUS
);
OnDiscTypeChange
(
dummy_event
);
goto
retry
;
}
/* Couldn't find a CD-DA or DVD. See if we can find a VCD, unless
we've tried that before. */
if
(
!
b_probed_VCD
)
psz_device
=
ProbeVCD
(
disc_device
->
GetValue
());
if
(
psz_device
)
if
(
psz_device
)
{
disc_type
->
SetSelection
(
SELECTION_DISC_TYPE_VCD
);
OnDiscTypeChange
(
dummy_event
);
...
...
@@ -1552,7 +1579,7 @@ void OpenDialog::OnDiscProbe( wxCommandEvent& WXUNUSED(event) )
free
(
psz_device
);
disc_probe
->
SetValue
(
FALSE
);
UpdateMRL
(
DISC_ACCESS
);
}
#endif
/* HAVE_LIBCDIO */
...
...
@@ -1565,7 +1592,7 @@ void OpenDialog::OnDiscTypeChange( wxCommandEvent& WXUNUSED(event) )
{
case
SELECTION_DISC_TYPE_DVD_MENUS
:
case
SELECTION_DISC_TYPE_DVD
:
case
SELECTION_DISC_TYPE_DVD
:
disc_sub
->
Enable
();
disc_sub_label
->
Enable
();
disc_audio
->
Enable
();
disc_audio_label
->
Enable
();
disc_chapter
->
Enable
();
disc_chapter_label
->
Enable
();
...
...
@@ -1602,19 +1629,19 @@ void OpenDialog::OnDiscTypeChange( wxCommandEvent& WXUNUSED(event) )
}
#ifdef HAVE_VCDX
if
(
config_GetInt
(
p_intf
,
"vcdx-PBC"
))
if
(
config_GetInt
(
p_intf
,
"vcdx-PBC"
))
{
disc_title_label
->
SetLabel
(
wxT
(
"Playback LID"
)
);
disc_title
->
SetToolTip
(
wxU
(
_
(
"Playback control (PBC) usually starts with number 1."
))
);
}
else
}
else
{
disc_title_label
->
SetLabel
(
wxT
(
"Entry"
)
);
disc_title
->
SetToolTip
(
wxU
(
_
(
"The first entry (the beginning of the first MPEG track) is 0."
))
);
}
#else
disc_title_label
->
SetLabel
(
wxU
(
_
(
"Track"
))
);
disc_title
->
SetToolTip
(
wxU
(
_
(
"Track number."
))
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment