Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
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-2-2
Commits
4cbb172e
Commit
4cbb172e
authored
Aug 04, 2004
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/access/dvdnav.c: removed dvdnavsimple mode + a few small improvements.
parent
1919be92
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
50 additions
and
89 deletions
+50
-89
modules/access/dvdnav.c
modules/access/dvdnav.c
+50
-89
No files found.
modules/access/dvdnav.c
View file @
4cbb172e
...
@@ -29,6 +29,9 @@
...
@@ -29,6 +29,9 @@
#include <vlc/vlc.h>
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/input.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
# include <sys/types.h>
#endif
#endif
...
@@ -64,7 +67,6 @@ vlc_module_begin();
...
@@ -64,7 +67,6 @@ vlc_module_begin();
set_capability
(
"access_demux"
,
5
);
set_capability
(
"access_demux"
,
5
);
add_shortcut
(
"dvd"
);
add_shortcut
(
"dvd"
);
add_shortcut
(
"dvdnav"
);
add_shortcut
(
"dvdnav"
);
add_shortcut
(
"dvdnavsimple"
);
set_callbacks
(
Open
,
Close
);
set_callbacks
(
Open
,
Close
);
vlc_module_end
();
vlc_module_end
();
...
@@ -115,22 +117,19 @@ struct demux_sys_t
...
@@ -115,22 +117,19 @@ struct demux_sys_t
/* */
/* */
int
i_aspect
;
int
i_aspect
;
/* */
vlc_bool_t
b_es_out_ok
;
vlc_bool_t
b_simple
;
int
i_title
;
int
i_title
;
input_title_t
**
title
;
input_title_t
**
title
;
};
};
static
int
Control
(
demux_t
*
,
int
,
va_list
);
static
int
Control
(
demux_t
*
,
int
,
va_list
);
static
int
Demux
(
demux_t
*
);
static
int
Demux
(
demux_t
*
);
static
int
DemuxBlock
(
demux_t
*
,
uint8_t
*
pkt
,
int
i_pk
t
);
static
int
DemuxBlock
(
demux_t
*
,
uint8_t
*
,
in
t
);
static
void
DemuxTitles
(
demux_t
*
p_demux
);
static
void
DemuxTitles
(
demux_t
*
);
static
void
ESSubtitleUpdate
(
demux_t
*
);
static
void
ESSubtitleUpdate
(
demux_t
*
);
static
void
ButtonUpdate
(
demux_t
*
);
static
void
ButtonUpdate
(
demux_t
*
);
static
void
ESNew
(
demux_t
*
,
int
);
static
int
ProbeDVD
(
demux_t
*
,
char
*
);
static
int
ProbeDVD
(
demux_t
*
,
char
*
);
/*****************************************************************************
/*****************************************************************************
...
@@ -177,17 +176,8 @@ static int Open( vlc_object_t *p_this )
...
@@ -177,17 +176,8 @@ static int Open( vlc_object_t *p_this )
memset
(
p_sys
,
0
,
sizeof
(
demux_sys_t
)
);
memset
(
p_sys
,
0
,
sizeof
(
demux_sys_t
)
);
p_sys
->
dvdnav
=
p_dvdnav
;
p_sys
->
dvdnav
=
p_dvdnav
;
p_sys
->
b_simple
=
strcmp
(
p_demux
->
psz_access
,
"dvdnavsimple"
)
?
VLC_FALSE
:
VLC_TRUE
;
if
(
p_sys
->
b_simple
&&
i_title
<
1
)
{
/* Skip menu part */
i_title
=
1
;
}
ps_track_init
(
p_sys
->
tk
);
ps_track_init
(
p_sys
->
tk
);
p_sys
->
i_aspect
=
-
1
;
p_sys
->
i_aspect
=
-
1
;
p_sys
->
b_es_out_ok
=
VLC_FALSE
;
p_sys
->
i_mux_rate
=
0
;
p_sys
->
i_mux_rate
=
0
;
if
(
1
)
if
(
1
)
...
@@ -263,9 +253,6 @@ static int Open( vlc_object_t *p_this )
...
@@ -263,9 +253,6 @@ static int Open( vlc_object_t *p_this )
/* Update default_pts to a suitable value for dvdnav access */
/* Update default_pts to a suitable value for dvdnav access */
var_Create
(
p_demux
,
"dvdnav-caching"
,
VLC_VAR_INTEGER
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_demux
,
"dvdnav-caching"
,
VLC_VAR_INTEGER
|
VLC_VAR_DOINHERIT
);
/* For simple mode (no menus), we're done */
if
(
p_sys
->
b_simple
)
return
VLC_SUCCESS
;
/* FIXME hack hack hack hack FIXME */
/* FIXME hack hack hack hack FIXME */
/* Get p_input and create variable */
/* Get p_input and create variable */
p_sys
->
p_input
=
vlc_object_find
(
p_demux
,
VLC_OBJECT_INPUT
,
FIND_PARENT
);
p_sys
->
p_input
=
vlc_object_find
(
p_demux
,
VLC_OBJECT_INPUT
,
FIND_PARENT
);
...
@@ -296,24 +283,21 @@ static void Close( vlc_object_t *p_this )
...
@@ -296,24 +283,21 @@ static void Close( vlc_object_t *p_this )
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
int
i
;
int
i
;
if
(
!
p_sys
->
b_simple
)
/* stop the event handler */
{
p_sys
->
p_ev
->
b_die
=
VLC_TRUE
;
/* stop the event handler */
vlc_thread_join
(
p_sys
->
p_ev
);
p_sys
->
p_ev
->
b_die
=
VLC_TRUE
;
vlc_object_destroy
(
p_sys
->
p_ev
);
vlc_thread_join
(
p_sys
->
p_ev
);
vlc_object_destroy
(
p_sys
->
p_ev
);
var_Destroy
(
p_sys
->
p_input
,
"highlight-mutex"
);
var_Destroy
(
p_sys
->
p_input
,
"highlight"
);
var_Destroy
(
p_sys
->
p_input
,
"highlight-mutex"
);
var_Destroy
(
p_sys
->
p_input
,
"x-start"
);
var_Destroy
(
p_sys
->
p_input
,
"highlight"
);
var_Destroy
(
p_sys
->
p_input
,
"x-end"
);
var_Destroy
(
p_sys
->
p_input
,
"x-start"
);
var_Destroy
(
p_sys
->
p_input
,
"y-start"
);
var_Destroy
(
p_sys
->
p_input
,
"x-end"
);
var_Destroy
(
p_sys
->
p_input
,
"y-end"
);
var_Destroy
(
p_sys
->
p_input
,
"y-start"
);
var_Destroy
(
p_sys
->
p_input
,
"color"
);
var_Destroy
(
p_sys
->
p_input
,
"y-end"
);
var_Destroy
(
p_sys
->
p_input
,
"contrast"
);
var_Destroy
(
p_sys
->
p_input
,
"color"
);
var_Destroy
(
p_sys
->
p_input
,
"contrast"
);
vlc_object_release
(
p_sys
->
p_input
);
vlc_object_release
(
p_sys
->
p_input
);
}
for
(
i
=
0
;
i
<
PS_TK_COUNT
;
i
++
)
for
(
i
=
0
;
i
<
PS_TK_COUNT
;
i
++
)
{
{
...
@@ -506,20 +490,6 @@ static int Demux( demux_t *p_demux )
...
@@ -506,20 +490,6 @@ static int Demux( demux_t *p_demux )
int
i_event
;
int
i_event
;
int
i_len
;
int
i_len
;
if
(
!
p_sys
->
b_es_out_ok
)
{
if
(
!
p_sys
->
b_simple
)
{
/* We do ourself the selection/unselection
* Problem: bypass --audio-channel and --spu-channel
* Solution: call ourself dvdnav_??set_channel -> TODO
*/
es_out_Control
(
p_demux
->
out
,
ES_OUT_SET_MODE
,
ES_OUT_MODE_NONE
);
}
p_sys
->
b_es_out_ok
=
VLC_TRUE
;
}
#if DVD_READ_CACHE
#if DVD_READ_CACHE
if
(
dvdnav_get_next_cache_block
(
p_sys
->
dvdnav
,
&
packet
,
&
i_event
,
&
i_len
)
if
(
dvdnav_get_next_cache_block
(
p_sys
->
dvdnav
,
&
packet
,
&
i_event
,
&
i_len
)
==
DVDNAV_STATUS_ERR
)
==
DVDNAV_STATUS_ERR
)
...
@@ -546,31 +516,24 @@ static int Demux( demux_t *p_demux )
...
@@ -546,31 +516,24 @@ static int Demux( demux_t *p_demux )
case
DVDNAV_STILL_FRAME
:
case
DVDNAV_STILL_FRAME
:
{
{
dvdnav_still_event_t
*
event
=
(
dvdnav_still_event_t
*
)
packet
;
dvdnav_still_event_t
*
event
=
(
dvdnav_still_event_t
*
)
packet
;
if
(
!
p_sys
->
b_simple
)
vlc_mutex_lock
(
&
p_sys
->
p_ev
->
lock
);
if
(
!
p_sys
->
p_ev
->
b_still
)
{
{
vlc_mutex_lock
(
&
p_sys
->
p_ev
->
lock
);
msg_Dbg
(
p_demux
,
"DVDNAV_STILL_FRAME"
);
if
(
!
p_sys
->
p_ev
->
b_still
)
msg_Dbg
(
p_demux
,
" - length=0x%x"
,
event
->
length
);
p_sys
->
p_ev
->
b_still
=
VLC_TRUE
;
if
(
event
->
length
==
0xff
)
{
{
msg_Dbg
(
p_demux
,
"DVDNAV_STILL_FRAME"
);
p_sys
->
p_ev
->
i_still_end
=
0
;
msg_Dbg
(
p_demux
,
" - length=0x%x"
,
event
->
length
);
}
p_sys
->
p_ev
->
b_still
=
VLC_TRUE
;
else
if
(
event
->
length
==
0xff
)
{
{
p_sys
->
p_ev
->
i_still_end
=
(
int64_t
)
event
->
length
*
p_sys
->
p_ev
->
i_still_end
=
0
;
1000000
+
mdate
()
+
p_sys
->
p_input
->
i_pts_delay
;
}
else
{
p_sys
->
p_ev
->
i_still_end
=
(
int64_t
)
event
->
length
*
1000000
+
mdate
()
+
p_sys
->
p_input
->
i_pts_delay
;
}
}
}
vlc_mutex_unlock
(
&
p_sys
->
p_ev
->
lock
);
msleep
(
40000
);
}
else
{
dvdnav_still_skip
(
p_sys
->
dvdnav
);
}
}
vlc_mutex_unlock
(
&
p_sys
->
p_ev
->
lock
);
msleep
(
40000
);
break
;
break
;
}
}
case
DVDNAV_SPU_STREAM_CHANGE
:
case
DVDNAV_SPU_STREAM_CHANGE
:
...
@@ -585,10 +548,7 @@ static int Demux( demux_t *p_demux )
...
@@ -585,10 +548,7 @@ static int Demux( demux_t *p_demux )
msg_Dbg
(
p_demux
,
" - physical_pan_scan=%d"
,
msg_Dbg
(
p_demux
,
" - physical_pan_scan=%d"
,
event
->
physical_pan_scan
);
event
->
physical_pan_scan
);
if
(
!
p_sys
->
b_simple
)
ESSubtitleUpdate
(
p_demux
);
{
ESSubtitleUpdate
(
p_demux
);
}
break
;
break
;
}
}
case
DVDNAV_AUDIO_STREAM_CHANGE
:
case
DVDNAV_AUDIO_STREAM_CHANGE
:
...
@@ -632,12 +592,6 @@ static int Demux( demux_t *p_demux )
...
@@ -632,12 +592,6 @@ static int Demux( demux_t *p_demux )
if
(
dvdnav_current_title_info
(
p_sys
->
dvdnav
,
&
i_title
,
if
(
dvdnav_current_title_info
(
p_sys
->
dvdnav
,
&
i_title
,
&
i_part
)
==
DVDNAV_STATUS_OK
)
&
i_part
)
==
DVDNAV_STATUS_OK
)
{
{
if
(
p_sys
->
b_simple
&&
i_title
==
0
)
{
/* we have returned in menu, stop dvd */
/* FIXME is it the right way ? */
return
0
;
}
if
(
i_title
>=
0
&&
i_title
<
p_sys
->
i_title
&&
if
(
i_title
>=
0
&&
i_title
<
p_sys
->
i_title
&&
p_demux
->
info
.
i_title
!=
i_title
)
p_demux
->
info
.
i_title
!=
i_title
)
{
{
...
@@ -701,18 +655,27 @@ static int Demux( demux_t *p_demux )
...
@@ -701,18 +655,27 @@ static int Demux( demux_t *p_demux )
msg_Dbg
(
p_demux
,
"DVDNAV_HIGHLIGHT"
);
msg_Dbg
(
p_demux
,
"DVDNAV_HIGHLIGHT"
);
msg_Dbg
(
p_demux
,
" - display=%d"
,
event
->
display
);
msg_Dbg
(
p_demux
,
" - display=%d"
,
event
->
display
);
msg_Dbg
(
p_demux
,
" - buttonN=%d"
,
event
->
buttonN
);
msg_Dbg
(
p_demux
,
" - buttonN=%d"
,
event
->
buttonN
);
if
(
!
p_sys
->
b_simple
)
ButtonUpdate
(
p_demux
);
{
ButtonUpdate
(
p_demux
);
}
break
;
break
;
}
}
case
DVDNAV_SPU_CLUT_CHANGE
:
case
DVDNAV_SPU_CLUT_CHANGE
:
{
int
i
;
msg_Dbg
(
p_demux
,
"DVDNAV_SPU_CLUT_CHANGE"
);
msg_Dbg
(
p_demux
,
"DVDNAV_SPU_CLUT_CHANGE"
);
/* Update color lookup table (16 *uint32_t in packet) */
/* Update color lookup table (16 *uint32_t in packet) */
memcpy
(
p_sys
->
clut
,
packet
,
16
*
sizeof
(
uint32_t
)
);
memcpy
(
p_sys
->
clut
,
packet
,
16
*
sizeof
(
uint32_t
)
);
/* HACK to get the SPU tracks registered in the right order */
for
(
i
=
0
;
i
<
0x1f
;
i
++
)
{
if
(
dvdnav_spu_stream_to_lang
(
p_sys
->
dvdnav
,
i
)
!=
0xffff
)
ESNew
(
p_demux
,
0xbd20
+
i
);
}
/* END HACK */
break
;
break
;
}
case
DVDNAV_HOP_CHANNEL
:
case
DVDNAV_HOP_CHANNEL
:
msg_Dbg
(
p_demux
,
"DVDNAV_HOP_CHANNEL"
);
msg_Dbg
(
p_demux
,
"DVDNAV_HOP_CHANNEL"
);
...
@@ -934,8 +897,6 @@ static void ButtonUpdate( demux_t *p_demux )
...
@@ -934,8 +897,6 @@ static void ButtonUpdate( demux_t *p_demux )
}
}
}
}
static
void
ESNew
(
demux_t
*
p_demux
,
int
i_id
);
static
void
ESSubtitleUpdate
(
demux_t
*
p_demux
)
static
void
ESSubtitleUpdate
(
demux_t
*
p_demux
)
{
{
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
...
...
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