Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
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-gpu
Commits
d4f27035
Commit
d4f27035
authored
May 01, 2005
by
Rocky Bernstein
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Work on audio control access.
parent
b3ebb717
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
93 additions
and
38 deletions
+93
-38
modules/access/cdda/access.c
modules/access/cdda/access.c
+77
-25
modules/access/cdda/cdda.h
modules/access/cdda/cdda.h
+16
-13
No files found.
modules/access/cdda/access.c
View file @
d4f27035
...
...
@@ -169,7 +169,7 @@ uninit_log_handler (cdio_log_level_t level, const char message[])
/* Only used in audio control mode. Gets the current LSN from the
CD-ROM drive. */
static
int64_t
get_
current_pos
(
access_t
*
p_access
)
get_
audio_position
(
access_t
*
p_access
)
{
cdda_data_t
*
p_cdda
=
(
cdda_data_t
*
)
p_access
->
p_sys
;
lsn_t
i_offset
;
...
...
@@ -180,21 +180,21 @@ get_current_pos ( access_t *p_access )
cdio_subchannel_t
sub
;
CdIo_t
*
p_cdio
=
p_cdda
->
p_cdio
;
if
(
DRIVER_OP_SUCCESS
==
cdio_audio_read_subchannel
(
p_cdio
,
&
sub
))
{
if
(
sub
.
audio_status
==
CDIO_MMC_READ_SUB_ST_PAUSED
||
sub
.
audio_status
=
=
CDIO_MMC_READ_SUB_ST_PLAY
)
if
(
sub
.
audio_status
!=
CDIO_MMC_READ_SUB_ST_PAUSED
&&
sub
.
audio_status
!
=
CDIO_MMC_READ_SUB_ST_PLAY
)
return
CDIO_INVALID_LSN
;
if
(
!
p_cdda
->
b_nav_mode
)
{
char
*
psz
=
cdio_msf_to_str
(
&
sub
.
abs_addr
);
//
char *psz = cdio_msf_to_str(&sub.abs_addr);
// fprintf(stderr, "+++disk mode abs msf %s", psz);
free
(
psz
);
i_offset
=
cdio_msf_to_l
sn
((
&
sub
.
abs_addr
));
//
free(psz);
i_offset
=
cdio_msf_to_l
ba
((
&
sub
.
abs_addr
));
// fprintf(stderr, " frame offset %d\n", i_offset);
}
else
{
char
*
psz
=
cdio_msf_to_str
(
&
sub
.
rel_addr
);
//
char *psz = cdio_msf_to_str(&sub.rel_addr);
// fprintf(stderr, "+++track abs msf %s", psz);
free
(
psz
);
i_offset
=
cdio_msf_to_l
sn
((
&
sub
.
rel_addr
));
//
free(psz);
i_offset
=
cdio_msf_to_l
ba
((
&
sub
.
rel_addr
));
// fprintf(stderr, " frame offset %d\n", i_offset);
}
}
else
{
...
...
@@ -242,7 +242,14 @@ static block_t * CDDAReadBlocks( access_t * p_access )
while
(
p_cdda
->
i_lsn
>
cdio_get_track_last_lsn
(
p_cdda
->
p_cdio
,
p_cdda
->
i_track
)
)
{
if
(
p_cdda
->
i_track
>=
p_cdda
->
i_first_track
+
p_cdda
->
i_titles
-
1
)
bool
go_on
;
if
(
p_cdda
->
b_nav_mode
)
go_on
=
p_cdda
->
i_lsn
>
p_cdda
->
last_disc_frame
;
else
go_on
=
p_cdda
->
i_track
>=
p_cdda
->
i_first_track
+
p_cdda
->
i_titles
-
1
;
if
(
go_on
)
{
dbg_print
(
(
INPUT_DBG_LSN
),
"EOF"
);
p_access
->
info
.
b_eof
=
VLC_TRUE
;
...
...
@@ -356,8 +363,9 @@ CDDARead( access_t * p_access, uint8_t *p_buffer, int i_len )
if
(
p_access
->
info
.
b_eof
)
return
0
;
{
lsn_t
i_lsn
=
get_
current_pos
(
p_access
);
lsn_t
i_lsn
=
get_
audio_position
(
p_access
);
if
(
CDIO_INVALID_LSN
==
i_lsn
)
{
dbg_print
((
INPUT_DBG_LSN
),
"invalid lsn"
);
memset
(
p_buffer
,
0
,
i_len
);
return
i_len
;
}
...
...
@@ -453,16 +461,14 @@ CDDASeek( access_t * p_access, int64_t i_pos )
#if LIBCDIO_VERSION_NUM >= 73
if
(
p_cdda
->
b_audio_ctl
)
{
track_t
i_track
=
cdio_get_track
(
p_cdda
->
p_cdio
,
p_cdda
->
i_lsn
);
lsn_t
last_lsn
;
lsn_t
i_
last_lsn
;
if
(
p_cdda
->
b_nav_mode
)
last_lsn
=
p_cdda
->
i_lsn
+
cdio_get_track_sec_count
(
p_cdda
->
p_cdio
,
i_track
);
i_last_lsn
=
p_cdda
->
last_disc_frame
;
else
last_lsn
=
p_cdda
->
i_lsn
+
cdio_get_track_lsn
(
p_cdda
->
p_cdio
,
CDIO_CDROM_LEADOUT_TRACK
);
i_last_lsn
=
cdio_get_track_last_lsn
(
p_cdda
->
p_cdio
,
i_track
);
cdda_audio_play
(
p_cdda
->
p_cdio
,
p_cdda
->
i_lsn
,
last_lsn
);
cdda_audio_play
(
p_cdda
->
p_cdio
,
p_cdda
->
i_lsn
,
i_
last_lsn
);
}
#endif
...
...
@@ -493,6 +499,46 @@ CDDASeek( access_t * p_access, int64_t i_pos )
return
VLC_SUCCESS
;
}
/*
Set up internal state so that we play a given track.
*/
static
bool
cdda_play_track
(
access_t
*
p_access
,
track_t
i_track
)
{
cdda_data_t
*
p_cdda
=
(
cdda_data_t
*
)
p_access
->
p_sys
;
dbg_print
((
INPUT_DBG_CALL
),
"called track: %d
\n
"
,
i_track
);
if
(
i_track
>
p_cdda
->
i_tracks
)
{
msg_Err
(
p_access
,
"CD has %d tracks, and you requested track %d"
,
p_cdda
->
i_tracks
,
i_track
);
return
false
;
}
p_cdda
->
i_track
=
i_track
;
/* set up the frame boundaries for this particular track */
p_cdda
->
first_frame
=
p_cdda
->
i_lsn
=
cdio_get_track_lsn
(
p_cdda
->
p_cdio
,
i_track
);
p_cdda
->
last_frame
=
cdio_get_track_lsn
(
p_cdda
->
p_cdio
,
i_track
+
1
)
-
1
;
#if LIBCDIO_VERSION_NUM >= 73
if
(
p_cdda
->
b_audio_ctl
)
{
lsn_t
i_last_lsn
;
if
(
p_cdda
->
b_nav_mode
)
i_last_lsn
=
p_cdda
->
last_disc_frame
;
else
i_last_lsn
=
cdio_get_track_last_lsn
(
p_cdda
->
p_cdio
,
i_track
);
cdda_audio_play
(
p_cdda
->
p_cdio
,
p_cdda
->
i_lsn
,
i_last_lsn
);
}
#endif
return
true
;
}
/****************************************************************************
* Public functions
****************************************************************************/
...
...
@@ -610,9 +656,7 @@ CDDAOpen( vlc_object_t *p_this )
p_cdda
->
b_header
=
VLC_FALSE
;
p_cdda
->
p_cdio
=
p_cdio
;
p_cdda
->
i_tracks
=
0
;
p_cdda
->
i_lsn
=
0
;
p_cdda
->
i_titles
=
0
;
p_cdda
->
i_track
=
i_track
;
p_cdda
->
i_debug
=
config_GetInt
(
p_this
,
MODULE_STRING
"-debug"
);
p_cdda
->
b_nav_mode
=
config_GetInt
(
p_this
,
MODULE_STRING
...
...
@@ -620,6 +664,9 @@ CDDAOpen( vlc_object_t *p_this )
p_cdda
->
i_blocks_per_read
=
config_GetInt
(
p_this
,
MODULE_STRING
"-blocks-per-read"
);
p_cdda
->
last_disc_frame
=
cdio_get_track_lsn
(
p_cdio
,
CDIO_CDROM_LEADOUT_TRACK
);
p_cdda
->
p_input
=
vlc_object_find
(
p_access
,
VLC_OBJECT_INPUT
,
FIND_PARENT
);
...
...
@@ -658,7 +705,7 @@ CDDAOpen( vlc_object_t *p_this )
lsn_t
i_last_lsn
;
if
(
p_cdda
->
b_nav_mode
)
i_last_lsn
=
cdio_get_track_lsn
(
p_cdio
,
CDIO_CDROM_LEADOUT_TRACK
)
;
i_last_lsn
=
p_cdda
->
last_disc_frame
;
else
i_last_lsn
=
cdio_get_track_last_lsn
(
p_cdio
,
i_track
);
...
...
@@ -742,6 +789,8 @@ CDDAOpen( vlc_object_t *p_this )
p_cdda
->
waveheader
.
DataChunkID
=
VLC_FOURCC
(
'd'
,
'a'
,
't'
,
'a'
);
p_cdda
->
waveheader
.
DataLength
=
0
;
/* we just don't know */
cdda_play_track
(
p_access
,
i_track
);
/* PTS delay */
var_Create
(
p_access
,
MODULE_STRING
"-caching"
,
VLC_VAR_INTEGER
|
VLC_VAR_DOINHERIT
);
...
...
@@ -848,19 +897,19 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
case
ACCESS_CAN_CONTROL_PACE
:
{
vlc_bool_t
*
pb_bool
=
(
vlc_bool_t
*
)
va_arg
(
args
,
vlc_bool_t
*
);
dbg_print
(
INPUT_DBG_META
,
"can control pace"
);
*
pb_bool
=
p_cdda
->
b_audio_ctl
?
VLC_FALSE
:
VLC_TRUE
;
dbg_print
(
INPUT_DBG_META
,
"can control pace? %d"
,
*
pb_bool
);
return
VLC_SUCCESS
;
}
case
ACCESS_CAN_FASTSEEK
:
dbg_print
(
INPUT_DBG_META
,
"can fast seek"
);
dbg_print
(
INPUT_DBG_META
,
"can fast seek
?
"
);
goto
common
;
case
ACCESS_CAN_SEEK
:
dbg_print
(
INPUT_DBG_META
,
"can seek"
);
dbg_print
(
INPUT_DBG_META
,
"can seek
?
"
);
goto
common
;
case
ACCESS_CAN_PAUSE
:
dbg_print
(
INPUT_DBG_META
,
"can pause"
);
dbg_print
(
INPUT_DBG_META
,
"can pause
?
"
);
common:
{
vlc_bool_t
*
pb_bool
=
(
vlc_bool_t
*
)
va_arg
(
args
,
vlc_bool_t
*
);
...
...
@@ -975,8 +1024,11 @@ static int CDDAControl( access_t *p_access, int i_query, va_list args )
break
;
case
ACCESS_SET_SEEKPOINT
:
dbg_print
(
INPUT_DBG_META
,
"set seekpoint"
);
return
VLC_EGENERIC
;
case
ACCESS_SET_PRIVATE_ID_STATE
:
dbg_print
(
INPUT_DBG_META
,
"set
seekpoint/set
private id state"
);
dbg_print
(
INPUT_DBG_META
,
"set private id state"
);
return
VLC_EGENERIC
;
default:
...
...
modules/access/cdda/cdda.h
View file @
d4f27035
...
...
@@ -82,30 +82,33 @@ typedef enum {
*****************************************************************************/
typedef
struct
cdda_data_s
{
CdIo_t
*
p_cdio
;
/* libcdio CD device */
track_t
i_tracks
;
/* # of tracks */
track_t
i_first_track
;
/* # of first track */
track_t
i_titles
;
/* # of titles in playlist */
CdIo_t
*
p_cdio
;
/* libcdio CD device */
track_t
i_tracks
;
/* # of tracks */
track_t
i_first_track
;
/* # of first track */
track_t
i_titles
;
/* # of titles in playlist */
/* Current position */
track_t
i_track
;
/* Current track */
lsn_t
i_lsn
;
/* Current Logical Sector Number */
track_t
i_track
;
/* Current track */
lsn_t
i_lsn
;
/* Current Logical Sector Number */
int
i_blocks_per_read
;
/* # blocks to get in a read */
int
i_debug
;
/* Debugging mask */
lsn_t
first_frame
;
/* LSN of first frame of this track */
lsn_t
last_frame
;
/* LSN of last frame of this track */
lsn_t
last_disc_frame
;
/* LSN of last frame on CD */
int
i_blocks_per_read
;
/* # blocks to get in a read */
int
i_debug
;
/* Debugging mask */
/* Information about CD */
vlc_meta_t
*
p_meta
;
char
*
psz_mcn
;
/* Media Catalog Number */
char
*
psz_source
;
/* CD drive or CD image filename */
char
*
psz_mcn
;
/* Media Catalog Number */
char
*
psz_source
;
/* CD drive or CD image filename */
input_title_t
*
p_title
[
CDIO_CD_MAX_TRACKS
];
/* This *is* 0 origin, not
track number origin */
#if LIBCDIO_VERSION_NUM >= 72
/* Paranoia support */
paranoia_mode_t
e_paranoia
;
/* Use cd paranoia for reads? */
cdrom_drive_t
*
paranoia_cd
;
/* Place to store drive
handle given by paranoia. */
paranoia_mode_t
e_paranoia
;
/* Use cd paranoia for reads? */
cdrom_drive_t
*
paranoia_cd
;
/* Place to store drive
handle given by paranoia. */
cdrom_paranoia_t
*
paranoia
;
#endif
...
...
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