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
c5c31276
Commit
c5c31276
authored
May 06, 2005
by
Steve Lhomme
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mkv.cpp: support highlighting a button when clicked (but the alpha channel doesn't seem to work)
parent
e895b2b2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
174 additions
and
77 deletions
+174
-77
modules/demux/mkv.cpp
modules/demux/mkv.cpp
+174
-77
No files found.
modules/demux/mkv.cpp
View file @
c5c31276
...
...
@@ -99,6 +99,11 @@ extern "C" {
#define MKVD_TIMECODESCALE 1000000
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef VSLHC1
#define DVDNAV_COMPILE
#include <dvdnav.h>
#else
/* VSLHC */
#undef ATTRIBUTE_PACKED
#undef PRAGMA_PACK_BEGIN
#undef PRAGMA_PACK_END
...
...
@@ -138,65 +143,65 @@ typedef struct {
*/
typedef
struct
{
#ifdef WORDS_BIGENDIAN
unsigned
int
zero
:
7
;
/* 25-31 */
unsigned
int
video_pres_mode_change
:
1
;
/* 24 */
unsigned
char
zero
:
7
;
/* 25-31 */
unsigned
char
video_pres_mode_change
:
1
;
/* 24 */
unsigned
int
karaoke_audio_pres_mode_change
:
1
;
/* 23 */
unsigned
int
angle_change
:
1
;
unsigned
int
subpic_stream_change
:
1
;
unsigned
int
audio_stream_change
:
1
;
unsigned
int
pause_on
:
1
;
unsigned
int
still_off
:
1
;
unsigned
int
button_select_or_activate
:
1
;
unsigned
int
resume
:
1
;
/* 16 */
unsigned
char
karaoke_audio_pres_mode_change
:
1
;
/* 23 */
unsigned
char
angle_change
:
1
;
unsigned
char
subpic_stream_change
:
1
;
unsigned
char
audio_stream_change
:
1
;
unsigned
char
pause_on
:
1
;
unsigned
char
still_off
:
1
;
unsigned
char
button_select_or_activate
:
1
;
unsigned
char
resume
:
1
;
/* 16 */
unsigned
int
chapter_menu_call
:
1
;
/* 15 */
unsigned
int
angle_menu_call
:
1
;
unsigned
int
audio_menu_call
:
1
;
unsigned
int
subpic_menu_call
:
1
;
unsigned
int
root_menu_call
:
1
;
unsigned
int
title_menu_call
:
1
;
unsigned
int
backward_scan
:
1
;
unsigned
int
forward_scan
:
1
;
/* 8 */
unsigned
char
chapter_menu_call
:
1
;
/* 15 */
unsigned
char
angle_menu_call
:
1
;
unsigned
char
audio_menu_call
:
1
;
unsigned
char
subpic_menu_call
:
1
;
unsigned
char
root_menu_call
:
1
;
unsigned
char
title_menu_call
:
1
;
unsigned
char
backward_scan
:
1
;
unsigned
char
forward_scan
:
1
;
/* 8 */
unsigned
int
next_pg_search
:
1
;
/* 7 */
unsigned
int
prev_or_top_pg_search
:
1
;
unsigned
int
time_or_chapter_search
:
1
;
unsigned
int
go_up
:
1
;
unsigned
int
stop
:
1
;
unsigned
int
title_play
:
1
;
unsigned
int
chapter_search_or_play
:
1
;
unsigned
int
title_or_time_play
:
1
;
/* 0 */
unsigned
char
next_pg_search
:
1
;
/* 7 */
unsigned
char
prev_or_top_pg_search
:
1
;
unsigned
char
time_or_chapter_search
:
1
;
unsigned
char
go_up
:
1
;
unsigned
char
stop
:
1
;
unsigned
char
title_play
:
1
;
unsigned
char
chapter_search_or_play
:
1
;
unsigned
char
title_or_time_play
:
1
;
/* 0 */
#else
unsigned
int
video_pres_mode_change
:
1
;
/* 24 */
unsigned
int
zero
:
7
;
/* 25-31 */
unsigned
char
video_pres_mode_change
:
1
;
/* 24 */
unsigned
char
zero
:
7
;
/* 25-31 */
unsigned
int
resume
:
1
;
/* 16 */
unsigned
int
button_select_or_activate
:
1
;
unsigned
int
still_off
:
1
;
unsigned
int
pause_on
:
1
;
unsigned
int
audio_stream_change
:
1
;
unsigned
int
subpic_stream_change
:
1
;
unsigned
int
angle_change
:
1
;
unsigned
int
karaoke_audio_pres_mode_change
:
1
;
/* 23 */
unsigned
char
resume
:
1
;
/* 16 */
unsigned
char
button_select_or_activate
:
1
;
unsigned
char
still_off
:
1
;
unsigned
char
pause_on
:
1
;
unsigned
char
audio_stream_change
:
1
;
unsigned
char
subpic_stream_change
:
1
;
unsigned
char
angle_change
:
1
;
unsigned
char
karaoke_audio_pres_mode_change
:
1
;
/* 23 */
unsigned
int
forward_scan
:
1
;
/* 8 */
unsigned
int
backward_scan
:
1
;
unsigned
int
title_menu_call
:
1
;
unsigned
int
root_menu_call
:
1
;
unsigned
int
subpic_menu_call
:
1
;
unsigned
int
audio_menu_call
:
1
;
unsigned
int
angle_menu_call
:
1
;
unsigned
int
chapter_menu_call
:
1
;
/* 15 */
unsigned
char
forward_scan
:
1
;
/* 8 */
unsigned
char
backward_scan
:
1
;
unsigned
char
title_menu_call
:
1
;
unsigned
char
root_menu_call
:
1
;
unsigned
char
subpic_menu_call
:
1
;
unsigned
char
audio_menu_call
:
1
;
unsigned
char
angle_menu_call
:
1
;
unsigned
char
chapter_menu_call
:
1
;
/* 15 */
unsigned
int
title_or_time_play
:
1
;
/* 0 */
unsigned
int
chapter_search_or_play
:
1
;
unsigned
int
title_play
:
1
;
unsigned
int
stop
:
1
;
unsigned
int
go_up
:
1
;
unsigned
int
time_or_chapter_search
:
1
;
unsigned
int
prev_or_top_pg_search
:
1
;
unsigned
int
next_pg_search
:
1
;
/* 7 */
unsigned
char
title_or_time_play
:
1
;
/* 0 */
unsigned
char
chapter_search_or_play
:
1
;
unsigned
char
title_play
:
1
;
unsigned
char
stop
:
1
;
unsigned
char
go_up
:
1
;
unsigned
char
time_or_chapter_search
:
1
;
unsigned
char
prev_or_top_pg_search
:
1
;
unsigned
char
next_pg_search
:
1
;
/* 7 */
#endif
}
ATTRIBUTE_PACKED
user_ops_t
;
...
...
@@ -293,41 +298,41 @@ typedef struct {
*/
typedef
struct
{
#ifdef WORDS_BIGENDIAN
u
nsigned
int
btn_coln
:
2
;
/**< button color number */
u
nsigned
int
x_start
:
10
;
/**< x start offset within the overlay */
u
nsigned
int
zero1
:
2
;
/**< reserved */
u
nsigned
int
x_end
:
10
;
/**< x end offset within the overlay */
u
int32
btn_coln
:
2
;
/**< button color number */
u
int32
x_start
:
10
;
/**< x start offset within the overlay */
u
int32
zero1
:
2
;
/**< reserved */
u
int32
x_end
:
10
;
/**< x end offset within the overlay */
u
nsigned
int
zero3
:
2
;
/**< reserved */
u
nsigned
int
up
:
6
;
/**< button index when pressing up */
u
int32
zero3
:
2
;
/**< reserved */
u
int32
up
:
6
;
/**< button index when pressing up */
u
nsigned
int
auto_action_mode
:
2
;
/**< 0: no, 1: activated if selected */
u
nsigned
int
y_start
:
10
;
/**< y start offset within the overlay */
u
nsigned
int
zero2
:
2
;
/**< reserved */
u
nsigned
int
y_end
:
10
;
/**< y end offset within the overlay */
u
int32
auto_action_mode
:
2
;
/**< 0: no, 1: activated if selected */
u
int32
y_start
:
10
;
/**< y start offset within the overlay */
u
int32
zero2
:
2
;
/**< reserved */
u
int32
y_end
:
10
;
/**< y end offset within the overlay */
u
nsigned
int
zero4
:
2
;
/**< reserved */
u
nsigned
int
down
:
6
;
/**< button index when pressing down */
u
int32
zero4
:
2
;
/**< reserved */
u
int32
down
:
6
;
/**< button index when pressing down */
unsigned
char
zero5
:
2
;
/**< reserved */
unsigned
char
left
:
6
;
/**< button index when pressing left */
unsigned
char
zero6
:
2
;
/**< reserved */
unsigned
char
right
:
6
;
/**< button index when pressing right */
#else
u
nsigned
int
x_end
:
10
;
u
nsigned
int
zero1
:
2
;
u
nsigned
int
x_start
:
10
;
u
nsigned
int
btn_coln
:
2
;
u
int32
x_end
:
10
;
u
int32
zero1
:
2
;
u
int32
x_start
:
10
;
u
int32
btn_coln
:
2
;
u
nsigned
int
up
:
6
;
u
nsigned
int
zero3
:
2
;
u
int32
up
:
6
;
u
int32
zero3
:
2
;
u
nsigned
int
y_end
:
10
;
u
nsigned
int
zero2
:
2
;
u
nsigned
int
y_start
:
10
;
u
nsigned
int
auto_action_mode
:
2
;
u
int32
y_end
:
10
;
u
int32
zero2
:
2
;
u
int32
y_start
:
10
;
u
int32
auto_action_mode
:
2
;
u
nsigned
int
down
:
6
;
u
nsigned
int
zero4
:
2
;
u
int32
down
:
6
;
u
int32
zero4
:
2
;
unsigned
char
left
:
6
;
unsigned
char
zero5
:
2
;
unsigned
char
right
:
6
;
...
...
@@ -360,6 +365,7 @@ typedef struct {
#pragma pack()
#endif
#endif
/* VSLHC */
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
...
...
@@ -1220,6 +1226,7 @@ public:
,
b_ui_hooked
(
false
)
,
p_input
(
NULL
)
,
p_pci_packet
(
NULL
)
,
i_curr_button
(
0
)
,
p_ev
(
NULL
)
{}
...
...
@@ -1271,10 +1278,13 @@ public:
void
StartUiThread
();
void
StopUiThread
();
bool
b_ui_hooked
;
inline
void
SwapButtons
();
/* for spu variables */
input_thread_t
*
p_input
;
block_t
*
p_pci_packet
;
int16
i_curr_button
;
uint8_t
alpha
[
4
];
/* event */
event_thread_t
*
p_ev
;
...
...
@@ -1798,6 +1808,7 @@ static void BlockDecode( demux_t *p_demux, KaxBlock *block, mtime_t i_pts,
if
(
p_sys
->
p_pci_packet
!=
NULL
)
block_Release
(
p_sys
->
p_pci_packet
);
p_sys
->
p_pci_packet
=
p_block
;
p_sys
->
SwapButtons
();
vlc_mutex_unlock
(
&
p_sys
->
p_ev
->
lock
);
}
return
;
...
...
@@ -2383,14 +2394,75 @@ int demux_sys_t::EventThread( vlc_object_t *p_this )
}
if
(
p_ev
->
b_clicked
)
{
int32_t
button
;
int32_t
best
,
dist
,
d
;
int32_t
mx
,
my
,
dx
,
dy
;
b_activated
=
VLC_TRUE
;
// dvdnav_mouse_activate( NULL, pci, valx.i_int, valy.i_int );
// get current button
dist
=
0x08000000
;
/* >> than (720*720)+(567*567); */
for
(
button
=
1
;
button
<=
pci
->
hli
.
hl_gi
.
btn_ns
;
button
++
)
{
btni_t
*
button_ptr
=
&
(
pci
->
hli
.
btnit
[
button
-
1
]);
if
((
valx
.
i_int
>=
button_ptr
->
x_start
)
&&
(
valx
.
i_int
<=
button_ptr
->
x_end
)
&&
(
valy
.
i_int
>=
button_ptr
->
y_start
)
&&
(
valy
.
i_int
<=
button_ptr
->
y_end
))
{
mx
=
(
button_ptr
->
x_start
+
button_ptr
->
x_end
)
/
2
;
my
=
(
button_ptr
->
y_start
+
button_ptr
->
y_end
)
/
2
;
dx
=
mx
-
valx
.
i_int
;
dy
=
my
-
valy
.
i_int
;
d
=
(
dx
*
dx
)
+
(
dy
*
dy
);
/* If the mouse is within the button and the mouse is closer
* to the center of this button then it is the best choice. */
if
(
d
<
dist
)
{
dist
=
d
;
best
=
button
;
}
}
}
// select new button
if
(
best
!=
0
&&
best
!=
p_sys
->
i_curr_button
)
{
vlc_value_t
val
;
if
(
var_Get
(
p_sys
->
p_input
,
"highlight-mutex"
,
&
val
)
==
VLC_SUCCESS
)
{
vlc_mutex_t
*
p_mutex
=
(
vlc_mutex_t
*
)
val
.
p_address
;
btni_t
*
button_ptr
=
&
(
pci
->
hli
.
btnit
[
best
-
1
]);
uint32_t
i_palette
;
if
(
button_ptr
->
btn_coln
!=
0
)
{
i_palette
=
pci
->
hli
.
btn_colit
.
btn_coli
[
button_ptr
->
btn_coln
-
1
][
1
];
}
else
{
i_palette
=
0
;
}
p_sys
->
alpha
[
0
]
=
i_palette
&
0x0f
;
p_sys
->
alpha
[
1
]
=
(
i_palette
>>
4
)
&
0x0f
;
p_sys
->
alpha
[
2
]
=
(
i_palette
>>
8
)
&
0x0f
;
p_sys
->
alpha
[
3
]
=
(
i_palette
>>
12
)
&
0x0f
;
vlc_mutex_lock
(
p_mutex
);
val
.
i_int
=
button_ptr
->
x_start
;
var_Set
(
p_sys
->
p_input
,
"x-start"
,
val
);
val
.
i_int
=
button_ptr
->
x_end
;
var_Set
(
p_sys
->
p_input
,
"x-end"
,
val
);
val
.
i_int
=
button_ptr
->
y_start
;
var_Set
(
p_sys
->
p_input
,
"y-start"
,
val
);
val
.
i_int
=
button_ptr
->
y_end
;
var_Set
(
p_sys
->
p_input
,
"y-end"
,
val
);
val
.
p_address
=
(
void
*
)
p_sys
->
alpha
;
var_Set
(
p_sys
->
p_input
,
"menu-contrast"
,
val
);
val
.
b_bool
=
VLC_TRUE
;
var_Set
(
p_sys
->
p_input
,
"highlight"
,
val
);
vlc_mutex_unlock
(
p_mutex
);
p_sys
->
i_curr_button
=
best
;
msg_Dbg
(
&
p_sys
->
demuxer
,
"Selected button %d"
,
best
);
}
}
}
p_ev
->
b_moved
=
VLC_FALSE
;
p_ev
->
b_clicked
=
VLC_FALSE
;
vlc_mutex_unlock
(
&
p_ev
->
lock
);
}
if
(
p_vout
&&
p_vout
->
b_die
)
{
var_DelCallback
(
p_vout
,
"mouse-moved"
,
EventMouse
,
p_ev
);
...
...
@@ -2398,6 +2470,7 @@ int demux_sys_t::EventThread( vlc_object_t *p_this )
vlc_object_release
(
p_vout
);
p_vout
=
NULL
;
}
if
(
p_vout
==
NULL
)
{
p_vout
=
(
vlc_object_t
*
)
vlc_object_find
(
p_sys
->
p_input
,
VLC_OBJECT_VOUT
,
...
...
@@ -4562,6 +4635,8 @@ void demux_sys_t::PreloadLinked( matroska_segment_c *p_segment )
titles
.
push_back
(
*
p_title
);
}
}
// TODO decide which segment should be first used (VMG for DVD)
}
bool
demux_sys_t
::
IsUsedSegment
(
matroska_segment_c
&
segment
)
const
...
...
@@ -5478,3 +5553,25 @@ bool matroska_script_interpretor_c::Interpret( const binary * p_command, size_t
return
b_result
;
}
void
demux_sys_t
::
SwapButtons
()
{
#ifndef WORDS_BIGENDIAN
pci_t
*
pci
=
(
pci_t
*
)
&
p_pci_packet
->
p_buffer
[
1
];
uint8_t
button
;
for
(
button
=
1
;
button
<=
pci
->
hli
.
hl_gi
.
btn_ns
;
button
++
)
{
binary
*
p_data
=
(
binary
*
)
&
(
pci
->
hli
.
btnit
[
button
-
1
]);
btni_t
*
button_ptr
=
&
(
pci
->
hli
.
btnit
[
button
-
1
]);
uint16
i_x_start
=
((
p_data
[
0
]
&
0x3F
)
<<
4
)
+
(
p_data
[
1
]
>>
4
);
uint16
i_x_end
=
((
p_data
[
1
]
&
0x03
)
<<
8
)
+
p_data
[
2
];
uint16
i_y_start
=
((
p_data
[
3
]
&
0x3F
)
<<
4
)
+
(
p_data
[
4
]
>>
4
);
uint16
i_y_end
=
((
p_data
[
4
]
&
0x03
)
<<
8
)
+
p_data
[
5
];
button_ptr
->
x_start
=
i_x_start
;
button_ptr
->
x_end
=
i_x_end
;
button_ptr
->
y_start
=
i_y_start
;
button_ptr
->
y_end
=
i_y_end
;
}
#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