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
b82f5755
Commit
b82f5755
authored
Aug 12, 2013
by
Rafaël Carré
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bluray: cosmetics
parent
1cf7e446
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
214 additions
and
216 deletions
+214
-216
modules/access/bluray.c
modules/access/bluray.c
+214
-216
No files found.
modules/access/bluray.c
View file @
b82f5755
...
...
@@ -235,9 +235,9 @@ static int blurayOpen( vlc_object_t *object )
/* */
p_demux
->
p_sys
=
p_sys
=
calloc
(
1
,
sizeof
(
*
p_sys
));
if
(
unlikely
(
!
p_sys
))
{
if
(
unlikely
(
!
p_sys
))
return
VLC_ENOMEM
;
}
p_sys
->
current_overlay
=
-
1
;
p_sys
->
i_audio_stream
=
-
1
;
p_sys
->
i_video_stream
=
-
1
;
...
...
@@ -363,9 +363,8 @@ static int blurayOpen( vlc_object_t *object )
vlc_array_init
(
&
p_sys
->
es
);
p_sys
->
p_out
=
esOutNew
(
p_demux
);
if
(
unlikely
(
p_sys
->
p_out
==
NULL
))
{
if
(
unlikely
(
p_sys
->
p_out
==
NULL
))
goto
error
;
}
blurayResetParser
(
p_demux
);
if
(
!
p_sys
->
p_parser
)
{
...
...
@@ -404,8 +403,8 @@ static void blurayClose( vlc_object_t *object )
bd_close
(
p_sys
->
bluray
);
if
(
p_sys
->
p_vout
!=
NULL
)
{
var_DelCallback
(
p_sys
->
p_vout
,
"mouse-moved"
,
&
onMouseEvent
,
p_demux
);
var_DelCallback
(
p_sys
->
p_vout
,
"mouse-clicked"
,
&
onMouseEvent
,
p_demux
);
var_DelCallback
(
p_sys
->
p_vout
,
"mouse-moved"
,
onMouseEvent
,
p_demux
);
var_DelCallback
(
p_sys
->
p_vout
,
"mouse-clicked"
,
onMouseEvent
,
p_demux
);
vlc_object_release
(
p_sys
->
p_vout
);
}
if
(
p_sys
->
p_input
!=
NULL
)
...
...
@@ -532,11 +531,11 @@ static es_out_t *esOutNew( demux_t *p_demux )
if
(
unlikely
(
p_out
==
NULL
)
)
return
NULL
;
p_out
->
pf_add
=
&
esOutAdd
;
p_out
->
pf_control
=
&
esOutControl
;
p_out
->
pf_del
=
&
esOutDel
;
p_out
->
pf_destroy
=
&
esOutDestroy
;
p_out
->
pf_send
=
&
esOutSend
;
p_out
->
pf_add
=
esOutAdd
;
p_out
->
pf_control
=
esOutControl
;
p_out
->
pf_del
=
esOutDel
;
p_out
->
pf_destroy
=
esOutDestroy
;
p_out
->
pf_send
=
esOutSend
;
p_out
->
p_sys
=
malloc
(
sizeof
(
*
p_out
->
p_sys
)
);
if
(
unlikely
(
p_out
->
p_sys
==
NULL
)
)
{
...
...
@@ -624,12 +623,12 @@ static void subpictureUpdaterUpdate(subpicture_t *p_subpic,
return
;
}
subpicture_region_t
**
p_dst
=
&
(
p_subpic
->
p_region
)
;
subpicture_region_t
**
p_dst
=
&
p_subpic
->
p_region
;
while
(
p_src
!=
NULL
)
{
*
p_dst
=
subpicture_region_Clone
(
p_src
);
if
(
*
p_dst
==
NULL
)
break
;
p_dst
=
&
(
(
*
p_dst
)
->
p_next
)
;
p_dst
=
&
(
*
p_dst
)
->
p_next
;
p_src
=
p_src
->
p_next
;
}
if
(
*
p_dst
!=
NULL
)
...
...
@@ -847,7 +846,7 @@ static void blurayDrawOverlay(demux_t *p_demux, const BD_OVERLAY* const ov)
/* Now we can update the region, regardless it's an update or an insert */
const
BD_PG_RLE_ELEM
*
img
=
ov
->
img
;
for
(
int
y
=
0
;
y
<
ov
->
h
;
y
++
)
{
for
(
int
y
=
0
;
y
<
ov
->
h
;
y
++
)
for
(
int
x
=
0
;
x
<
ov
->
w
;)
{
memset
(
p_reg
->
p_picture
->
p
[
0
].
p_pixels
+
y
*
p_reg
->
p_picture
->
p
[
0
].
i_pitch
+
x
,
...
...
@@ -855,7 +854,7 @@ static void blurayDrawOverlay(demux_t *p_demux, const BD_OVERLAY* const ov)
x
+=
img
->
len
;
img
++
;
}
}
if
(
ov
->
palette
)
{
p_reg
->
fmt
.
p_palette
->
i_entries
=
256
;
for
(
int
i
=
0
;
i
<
256
;
++
i
)
{
...
...
@@ -865,6 +864,7 @@ static void blurayDrawOverlay(demux_t *p_demux, const BD_OVERLAY* const ov)
p_reg
->
fmt
.
p_palette
->
palette
[
i
][
3
]
=
ov
->
palette
[
i
].
T
;
}
}
vlc_mutex_unlock
(
&
p_sys
->
p_overlays
[
ov
->
plane
]
->
lock
);
/*
* /!\ The region is now stored in our internal list, but not in the subpicture /!\
...
...
@@ -880,23 +880,24 @@ static void blurayOverlayProc(void *ptr, const BD_OVERLAY *const overlay)
blurayCloseAllOverlays
(
p_demux
);
return
;
}
switch
(
overlay
->
cmd
)
{
case
BD_OVERLAY_INIT
:
msg_Info
(
p_demux
,
"Initializing overlay"
);
blurayInitOverlay
(
p_demux
,
overlay
->
plane
,
overlay
->
w
,
overlay
->
h
);
break
;
case
BD_OVERLAY_CLEAR
:
blurayClearOverlay
(
p_demux
,
overlay
->
plane
);
break
;
case
BD_OVERLAY_FLUSH
:
blurayActivateOverlay
(
p_demux
,
overlay
->
plane
);
break
;
case
BD_OVERLAY_DRAW
:
blurayDrawOverlay
(
p_demux
,
overlay
);
break
;
default:
msg_Warn
(
p_demux
,
"Unknown BD overlay command: %u"
,
overlay
->
cmd
);
break
;
case
BD_OVERLAY_INIT
:
msg_Info
(
p_demux
,
"Initializing overlay"
);
blurayInitOverlay
(
p_demux
,
overlay
->
plane
,
overlay
->
w
,
overlay
->
h
);
break
;
case
BD_OVERLAY_CLEAR
:
blurayClearOverlay
(
p_demux
,
overlay
->
plane
);
break
;
case
BD_OVERLAY_FLUSH
:
blurayActivateOverlay
(
p_demux
,
overlay
->
plane
);
break
;
case
BD_OVERLAY_DRAW
:
blurayDrawOverlay
(
p_demux
,
overlay
);
break
;
default:
msg_Warn
(
p_demux
,
"Unknown BD overlay command: %u"
,
overlay
->
cmd
);
break
;
}
}
...
...
@@ -968,22 +969,22 @@ static void blurayArgbOverlayProc(void *ptr, const BD_ARGB_OVERLAY *const overla
demux_t
*
p_demux
=
(
demux_t
*
)
ptr
;
switch
(
overlay
->
cmd
)
{
case
BD_ARGB_OVERLAY_INIT
:
blurayInitArgbOverlay
(
p_demux
,
overlay
->
plane
,
overlay
->
w
,
overlay
->
h
);
break
;
case
BD_ARGB_OVERLAY_CLOSE
:
blurayClearOverlay
(
p_demux
,
overlay
->
plane
);
// TODO: blurayCloseOverlay(p_demux, overlay->plane);
break
;
case
BD_ARGB_OVERLAY_FLUSH
:
blurayActivateOverlay
(
p_demux
,
overlay
->
plane
);
break
;
case
BD_ARGB_OVERLAY_DRAW
:
blurayDrawArgbOverlay
(
p_demux
,
overlay
);
break
;
default:
msg_Warn
(
p_demux
,
"Unknown BD ARGB overlay command: %u"
,
overlay
->
cmd
);
break
;
case
BD_ARGB_OVERLAY_INIT
:
blurayInitArgbOverlay
(
p_demux
,
overlay
->
plane
,
overlay
->
w
,
overlay
->
h
);
break
;
case
BD_ARGB_OVERLAY_CLOSE
:
blurayClearOverlay
(
p_demux
,
overlay
->
plane
);
// TODO: blurayCloseOverlay(p_demux, overlay->plane);
break
;
case
BD_ARGB_OVERLAY_FLUSH
:
blurayActivateOverlay
(
p_demux
,
overlay
->
plane
);
break
;
case
BD_ARGB_OVERLAY_DRAW
:
blurayDrawArgbOverlay
(
p_demux
,
overlay
);
break
;
default:
msg_Warn
(
p_demux
,
"Unknown BD ARGB overlay command: %u"
,
overlay
->
cmd
);
break
;
}
}
...
...
@@ -1059,10 +1060,11 @@ static void blurayResetParser( demux_t *p_demux )
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
if
(
p_sys
->
p_parser
)
stream_Delete
(
p_sys
->
p_parser
);
p_sys
->
p_parser
=
stream_DemuxNew
(
p_demux
,
"ts"
,
p_sys
->
p_out
);
if
(
!
p_sys
->
p_parser
)
{
if
(
!
p_sys
->
p_parser
)
msg_Err
(
p_demux
,
"Failed to create TS demuxer"
);
}
}
static
void
blurayUpdateTitle
(
demux_t
*
p_demux
,
unsigned
i_title
)
...
...
@@ -1092,7 +1094,6 @@ static int bluraySetTitle(demux_t *p_demux, int i_title)
msg_Dbg
(
p_demux
,
"Selecting Title %i"
,
i_title
);
/* Select Blu-Ray title */
if
(
bd_select_title
(
p_demux
->
p_sys
->
bluray
,
i_title
)
==
0
)
{
msg_Err
(
p_demux
,
"cannot select bd title '%d'"
,
p_demux
->
info
.
i_title
);
return
VLC_EGENERIC
;
...
...
@@ -1102,7 +1103,6 @@ static int bluraySetTitle(demux_t *p_demux, int i_title)
return
VLC_SUCCESS
;
}
/*****************************************************************************
* blurayControl: handle the controls
*****************************************************************************/
...
...
@@ -1113,158 +1113,157 @@ static int blurayControl(demux_t *p_demux, int query, va_list args)
int64_t
*
pi_64
;
switch
(
query
)
{
case
DEMUX_CAN_SEEK
:
case
DEMUX_CAN_PAUSE
:
case
DEMUX_CAN_CONTROL_PACE
:
pb_bool
=
(
bool
*
)
va_arg
(
args
,
bool
*
);
*
pb_bool
=
true
;
break
;
case
DEMUX_GET_PTS_DELAY
:
pi_64
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi_64
=
INT64_C
(
1000
)
*
var_InheritInteger
(
p_demux
,
"disc-caching"
);
break
;
case
DEMUX_SET_PAUSE_STATE
:
/* Nothing to do */
break
;
case
DEMUX_SET_TITLE
:
{
int
i_title
=
(
int
)
va_arg
(
args
,
int
);
if
(
bluraySetTitle
(
p_demux
,
i_title
)
!=
VLC_SUCCESS
)
return
VLC_EGENERIC
;
break
;
}
case
DEMUX_SET_SEEKPOINT
:
{
int
i_chapter
=
(
int
)
va_arg
(
args
,
int
);
bd_seek_chapter
(
p_sys
->
bluray
,
i_chapter
);
p_demux
->
info
.
i_update
=
INPUT_UPDATE_SEEKPOINT
;
break
;
}
case
DEMUX_CAN_SEEK
:
case
DEMUX_CAN_PAUSE
:
case
DEMUX_CAN_CONTROL_PACE
:
pb_bool
=
(
bool
*
)
va_arg
(
args
,
bool
*
);
*
pb_bool
=
true
;
break
;
case
DEMUX_GET_PTS_DELAY
:
pi_64
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi_64
=
INT64_C
(
1000
)
*
var_InheritInteger
(
p_demux
,
"disc-caching"
);
break
;
case
DEMUX_SET_PAUSE_STATE
:
/* Nothing to do */
break
;
case
DEMUX_SET_TITLE
:
{
int
i_title
=
(
int
)
va_arg
(
args
,
int
);
if
(
bluraySetTitle
(
p_demux
,
i_title
)
!=
VLC_SUCCESS
)
return
VLC_EGENERIC
;
break
;
}
case
DEMUX_SET_SEEKPOINT
:
{
int
i_chapter
=
(
int
)
va_arg
(
args
,
int
);
bd_seek_chapter
(
p_sys
->
bluray
,
i_chapter
);
p_demux
->
info
.
i_update
=
INPUT_UPDATE_SEEKPOINT
;
break
;
}
case
DEMUX_GET_TITLE_INFO
:
{
input_title_t
***
ppp_title
=
(
input_title_t
***
)
va_arg
(
args
,
input_title_t
***
);
int
*
pi_int
=
(
int
*
)
va_arg
(
args
,
int
*
);
int
*
pi_title_offset
=
(
int
*
)
va_arg
(
args
,
int
*
);
int
*
pi_chapter_offset
=
(
int
*
)
va_arg
(
args
,
int
*
);
/* */
*
pi_title_offset
=
0
;
*
pi_chapter_offset
=
0
;
/* Duplicate local title infos */
*
pi_int
=
p_sys
->
i_title
;
*
ppp_title
=
calloc
(
p_sys
->
i_title
,
sizeof
(
input_title_t
**
)
);
for
(
unsigned
int
i
=
0
;
i
<
p_sys
->
i_title
;
i
++
)
(
*
ppp_title
)[
i
]
=
vlc_input_title_Duplicate
(
p_sys
->
pp_title
[
i
]);
return
VLC_SUCCESS
;
}
case
DEMUX_GET_TITLE_INFO
:
{
input_title_t
***
ppp_title
=
(
input_title_t
***
)
va_arg
(
args
,
input_title_t
***
);
int
*
pi_int
=
(
int
*
)
va_arg
(
args
,
int
*
);
int
*
pi_title_offset
=
(
int
*
)
va_arg
(
args
,
int
*
);
int
*
pi_chapter_offset
=
(
int
*
)
va_arg
(
args
,
int
*
);
/* */
*
pi_title_offset
=
0
;
*
pi_chapter_offset
=
0
;
/* Duplicate local title infos */
*
pi_int
=
p_sys
->
i_title
;
*
ppp_title
=
malloc
(
p_sys
->
i_title
*
sizeof
(
input_title_t
**
)
);
for
(
unsigned
int
i
=
0
;
i
<
p_sys
->
i_title
;
i
++
)
(
*
ppp_title
)[
i
]
=
vlc_input_title_Duplicate
(
p_sys
->
pp_title
[
i
]);
return
VLC_SUCCESS
;
}
case
DEMUX_GET_LENGTH
:
{
int64_t
*
pi_length
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi_length
=
p_demux
->
info
.
i_title
<
(
int
)
p_sys
->
i_title
?
CUR_LENGTH
:
0
;
return
VLC_SUCCESS
;
}
case
DEMUX_SET_TIME
:
{
int64_t
i_time
=
(
int64_t
)
va_arg
(
args
,
int64_t
);
bd_seek_time
(
p_sys
->
bluray
,
TO_TICKS
(
i_time
));
return
VLC_SUCCESS
;
}
case
DEMUX_GET_TIME
:
{
int64_t
*
pi_time
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi_time
=
(
int64_t
)
FROM_TICKS
(
bd_tell_time
(
p_sys
->
bluray
));
return
VLC_SUCCESS
;
}
case
DEMUX_GET_LENGTH
:
{
int64_t
*
pi_length
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi_length
=
p_demux
->
info
.
i_title
<
(
int
)
p_sys
->
i_title
?
CUR_LENGTH
:
0
;
return
VLC_SUCCESS
;
}
case
DEMUX_SET_TIME
:
{
int64_t
i_time
=
(
int64_t
)
va_arg
(
args
,
int64_t
);
bd_seek_time
(
p_sys
->
bluray
,
TO_TICKS
(
i_time
));
return
VLC_SUCCESS
;
}
case
DEMUX_GET_TIME
:
{
int64_t
*
pi_time
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi_time
=
(
int64_t
)
FROM_TICKS
(
bd_tell_time
(
p_sys
->
bluray
));
return
VLC_SUCCESS
;
}
case
DEMUX_GET_POSITION
:
{
double
*
pf_position
=
(
double
*
)
va_arg
(
args
,
double
*
);
*
pf_position
=
p_demux
->
info
.
i_title
<
(
int
)
p_sys
->
i_title
?
(
double
)
FROM_TICKS
(
bd_tell_time
(
p_sys
->
bluray
))
/
CUR_LENGTH
:
0
.
0
;
return
VLC_SUCCESS
;
}
case
DEMUX_SET_POSITION
:
{
double
f_position
=
(
double
)
va_arg
(
args
,
double
);
bd_seek_time
(
p_sys
->
bluray
,
TO_TICKS
(
f_position
*
CUR_LENGTH
));
return
VLC_SUCCESS
;
}
case
DEMUX_GET_POSITION
:
{
double
*
pf_position
=
(
double
*
)
va_arg
(
args
,
double
*
);
*
pf_position
=
p_demux
->
info
.
i_title
<
(
int
)
p_sys
->
i_title
?
(
double
)
FROM_TICKS
(
bd_tell_time
(
p_sys
->
bluray
))
/
CUR_LENGTH
:
0
.
0
;
return
VLC_SUCCESS
;
}
case
DEMUX_SET_POSITION
:
{
double
f_position
=
(
double
)
va_arg
(
args
,
double
);
bd_seek_time
(
p_sys
->
bluray
,
TO_TICKS
(
f_position
*
CUR_LENGTH
));
return
VLC_SUCCESS
;
}
case
DEMUX_GET_META
:
{
vlc_meta_t
*
p_meta
=
(
vlc_meta_t
*
)
va_arg
(
args
,
vlc_meta_t
*
);
const
META_DL
*
meta
=
p_sys
->
p_meta
;
if
(
meta
==
NULL
)
return
VLC_EGENERIC
;
case
DEMUX_GET_META
:
{
vlc_meta_t
*
p_meta
=
(
vlc_meta_t
*
)
va_arg
(
args
,
vlc_meta_t
*
);
const
META_DL
*
meta
=
p_sys
->
p_meta
;
if
(
meta
==
NULL
)
return
VLC_EGENERIC
;
if
(
!
EMPTY_STR
(
meta
->
di_name
))
vlc_meta_SetTitle
(
p_meta
,
meta
->
di_name
);
if
(
!
EMPTY_STR
(
meta
->
di_name
))
vlc_meta_SetTitle
(
p_meta
,
meta
->
di_name
);
if
(
!
EMPTY_STR
(
meta
->
language_code
))
vlc_meta_AddExtra
(
p_meta
,
"Language"
,
meta
->
language_code
);
if
(
!
EMPTY_STR
(
meta
->
filename
))
vlc_meta_AddExtra
(
p_meta
,
"Filename"
,
meta
->
filename
);
if
(
!
EMPTY_STR
(
meta
->
di_alternative
))
vlc_meta_AddExtra
(
p_meta
,
"Alternative"
,
meta
->
di_alternative
);
if
(
!
EMPTY_STR
(
meta
->
language_code
))
vlc_meta_AddExtra
(
p_meta
,
"Language"
,
meta
->
language_code
);
if
(
!
EMPTY_STR
(
meta
->
filename
))
vlc_meta_AddExtra
(
p_meta
,
"Filename"
,
meta
->
filename
);
if
(
!
EMPTY_STR
(
meta
->
di_alternative
))
vlc_meta_AddExtra
(
p_meta
,
"Alternative"
,
meta
->
di_alternative
);
// if (meta->di_set_number > 0) vlc_meta_SetTrackNum(p_meta, meta->di_set_number);
// if (meta->di_num_sets > 0) vlc_meta_AddExtra(p_meta, "Discs numbers in Set", meta->di_num_sets);
// if (meta->di_set_number > 0) vlc_meta_SetTrackNum(p_meta, meta->di_set_number);
// if (meta->di_num_sets > 0) vlc_meta_AddExtra(p_meta, "Discs numbers in Set", meta->di_num_sets);
if
(
meta
->
thumb_count
>
0
&&
meta
->
thumbnails
)
if
(
meta
->
thumb_count
>
0
&&
meta
->
thumbnails
)
{
char
*
psz_thumbpath
;
if
(
asprintf
(
&
psz_thumbpath
,
"%s"
DIR_SEP
"BDMV"
DIR_SEP
"META"
DIR_SEP
"DL"
DIR_SEP
"%s"
,
p_sys
->
psz_bd_path
,
meta
->
thumbnails
[
0
].
path
)
>
0
)
{
char
*
psz_thumbpath
;
if
(
asprintf
(
&
psz_thumbpath
,
"%s"
DIR_SEP
"BDMV"
DIR_SEP
"META"
DIR_SEP
"DL"
DIR_SEP
"%s"
,
p_sys
->
psz_bd_path
,
meta
->
thumbnails
[
0
].
path
)
>
0
)
{
char
*
psz_thumburl
=
vlc_path2uri
(
psz_thumbpath
,
"file"
);
if
(
unlikely
(
psz_thumburl
==
NULL
)
)
return
VLC_ENOMEM
;
vlc_meta_SetArtURL
(
p_meta
,
psz_thumburl
);
free
(
psz_thumburl
);
}
free
(
psz_thumbpath
);
}
char
*
psz_thumburl
=
vlc_path2uri
(
psz_thumbpath
,
"file"
);
if
(
unlikely
(
psz_thumburl
==
NULL
)
)
return
VLC_ENOMEM
;
return
VLC_SUCCESS
;
vlc_meta_SetArtURL
(
p_meta
,
psz_thumburl
);
free
(
psz_thumburl
);
}
free
(
psz_thumbpath
);
}
case
DEMUX_NAV_ACTIVATE
:
return
sendKeyEvent
(
p_sys
,
BD_VK_ENTER
);
case
DEMUX_NAV_UP
:
return
sendKeyEvent
(
p_sys
,
BD_VK_UP
);
case
DEMUX_NAV_DOWN
:
return
sendKeyEvent
(
p_sys
,
BD_VK_DOWN
);
case
DEMUX_NAV_LEFT
:
return
sendKeyEvent
(
p_sys
,
BD_VK_LEFT
);
case
DEMUX_NAV_RIGHT
:
return
sendKeyEvent
(
p_sys
,
BD_VK_RIGHT
);
case
DEMUX_CAN_RECORD
:
case
DEMUX_GET_FPS
:
case
DEMUX_SET_GROUP
:
case
DEMUX_HAS_UNSUPPORTED_META
:
case
DEMUX_GET_ATTACHMENTS
:
return
VLC_EGENERIC
;
default:
msg_Warn
(
p_demux
,
"unimplemented query (%d) in control"
,
query
);
return
VLC_EGENERIC
;
return
VLC_SUCCESS
;
}
case
DEMUX_NAV_ACTIVATE
:
return
sendKeyEvent
(
p_sys
,
BD_VK_ENTER
);
case
DEMUX_NAV_UP
:
return
sendKeyEvent
(
p_sys
,
BD_VK_UP
);
case
DEMUX_NAV_DOWN
:
return
sendKeyEvent
(
p_sys
,
BD_VK_DOWN
);
case
DEMUX_NAV_LEFT
:
return
sendKeyEvent
(
p_sys
,
BD_VK_LEFT
);
case
DEMUX_NAV_RIGHT
:
return
sendKeyEvent
(
p_sys
,
BD_VK_RIGHT
);
case
DEMUX_CAN_RECORD
:
case
DEMUX_GET_FPS
:
case
DEMUX_SET_GROUP
:
case
DEMUX_HAS_UNSUPPORTED_META
:
case
DEMUX_GET_ATTACHMENTS
:
return
VLC_EGENERIC
;
default:
msg_Warn
(
p_demux
,
"unimplemented query (%d) in control"
,
query
);
return
VLC_EGENERIC
;
}
return
VLC_SUCCESS
;
}
static
void
blurayUpdateCurrentClip
(
demux_t
*
p_demux
,
uint32_t
clip
)
static
void
blurayUpdateCurrentClip
(
demux_t
*
p_demux
,
uint32_t
clip
)
{
if
(
clip
==
0xFF
)
return
;
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
p_sys
->
i_current_clip
=
clip
;
BLURAY_TITLE_INFO
*
info
=
bd_get_title_info
(
p_sys
->
bluray
,
BLURAY_TITLE_INFO
*
info
=
bd_get_title_info
(
p_sys
->
bluray
,
bd_get_current_title
(
p_sys
->
bluray
),
0
);
if
(
info
==
NULL
)
return
;
...
...
@@ -1278,44 +1277,42 @@ static void blurayUpdateCurrentClip( demux_t *p_demux, uint32_t clip )
static
void
blurayHandleEvent
(
demux_t
*
p_demux
,
const
BD_EVENT
*
e
)
{
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
switch
(
e
->
event
)
{
case
BD_EVENT_TITLE
:
blurayUpdateTitle
(
p_demux
,
e
->
param
);
break
;
case
BD_EVENT_PLAYITEM
:
blurayUpdateCurrentClip
(
p_demux
,
e
->
param
);
break
;
case
BD_EVENT_AUDIO_STREAM
:
{
if
(
e
->
param
==
0xFF
)
break
;
BLURAY_TITLE_INFO
*
info
=
bd_get_title_info
(
p_sys
->
bluray
,
bd_get_current_title
(
p_sys
->
bluray
),
0
);
if
(
info
==
NULL
)
break
;
/* The param we get is the real stream id, not an index, ie. it starts from 1 */
int
pid
=
info
->
clips
[
p_sys
->
i_current_clip
].
audio_streams
[
e
->
param
-
1
].
pid
;
int
idx
=
findEsPairIndex
(
p_sys
,
pid
);
if
(
idx
>=
0
)
{
es_out_id_t
*
p_es
=
vlc_array_item_at_index
(
&
p_sys
->
es
,
idx
);
es_out_Control
(
p_demux
->
out
,
ES_OUT_SET_ES
,
p_es
);
}
bd_free_title_info
(
info
);
p_sys
->
i_audio_stream
=
pid
;
case
BD_EVENT_TITLE
:
blurayUpdateTitle
(
p_demux
,
e
->
param
);
break
;
case
BD_EVENT_PLAYITEM
:
blurayUpdateCurrentClip
(
p_demux
,
e
->
param
);
break
;
case
BD_EVENT_AUDIO_STREAM
:
if
(
e
->
param
==
0xFF
)
break
;
BLURAY_TITLE_INFO
*
info
=
bd_get_title_info
(
p_sys
->
bluray
,
bd_get_current_title
(
p_sys
->
bluray
),
0
);
if
(
info
==
NULL
)
break
;
/* The param we get is the real stream id, not an index, ie. it starts from 1 */
int
pid
=
info
->
clips
[
p_sys
->
i_current_clip
].
audio_streams
[
e
->
param
-
1
].
pid
;
int
idx
=
findEsPairIndex
(
p_sys
,
pid
);
if
(
idx
>=
0
)
{
es_out_id_t
*
p_es
=
vlc_array_item_at_index
(
&
p_sys
->
es
,
idx
);
es_out_Control
(
p_demux
->
out
,
ES_OUT_SET_ES
,
p_es
);
}
case
BD_EVENT_CHAPTER
:
p_demux
->
info
.
i_update
|=
INPUT_UPDATE_SEEKPOINT
;
p_demux
->
info
.
i_seekpoint
=
e
->
param
;
break
;
case
BD_EVENT_ANGLE
:
case
BD_EVENT_IG_STREAM
:
default:
msg_Warn
(
p_demux
,
"event: %d param: %d"
,
e
->
event
,
e
->
param
);
break
;
bd_free_title_info
(
info
);
p_sys
->
i_audio_stream
=
pid
;
break
;
case
BD_EVENT_CHAPTER
:
p_demux
->
info
.
i_update
|=
INPUT_UPDATE_SEEKPOINT
;
p_demux
->
info
.
i_seekpoint
=
e
->
param
;
break
;
case
BD_EVENT_ANGLE
:
case
BD_EVENT_IG_STREAM
:
default:
msg_Warn
(
p_demux
,
"event: %d param: %d"
,
e
->
event
,
e
->
param
);
break
;
}
}
...
...
@@ -1367,6 +1364,7 @@ static int blurayDemux(demux_t *p_demux)
block_Release
(
p_block
);
return
1
;
}
if
(
p_sys
->
current_overlay
!=
-
1
)
{
vlc_mutex_lock
(
&
p_sys
->
p_overlays
[
p_sys
->
current_overlay
]
->
lock
);
if
(
p_sys
->
p_overlays
[
p_sys
->
current_overlay
]
->
status
==
ToDisplay
)
{
...
...
@@ -1374,8 +1372,8 @@ static int blurayDemux(demux_t *p_demux)
if
(
p_sys
->
p_vout
==
NULL
)
p_sys
->
p_vout
=
input_GetVout
(
p_sys
->
p_input
);
if
(
p_sys
->
p_vout
!=
NULL
)
{
var_AddCallback
(
p_sys
->
p_vout
,
"mouse-moved"
,
&
onMouseEvent
,
p_demux
);
var_AddCallback
(
p_sys
->
p_vout
,
"mouse-clicked"
,
&
onMouseEvent
,
p_demux
);
var_AddCallback
(
p_sys
->
p_vout
,
"mouse-moved"
,
onMouseEvent
,
p_demux
);
var_AddCallback
(
p_sys
->
p_vout
,
"mouse-clicked"
,
onMouseEvent
,
p_demux
);
bluraySendOverlayToVout
(
p_demux
);
}
}
else
...
...
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