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
15006f7b
Commit
15006f7b
authored
Jun 05, 2005
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/access/dvdnav.c, src/video_output/vout_subpictures.c: backport of #11304.
parent
55821eac
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
49 deletions
+40
-49
include/vlc_spu.h
include/vlc_spu.h
+2
-2
modules/access/dvdnav.c
modules/access/dvdnav.c
+28
-19
src/video_output/vout_subpictures.c
src/video_output/vout_subpictures.c
+10
-28
No files found.
include/vlc_spu.h
View file @
15006f7b
...
@@ -48,8 +48,8 @@ struct spu_t
...
@@ -48,8 +48,8 @@ struct spu_t
int
i_crop_x
,
i_crop_y
,
i_crop_width
,
i_crop_height
;
/**< cropping */
int
i_crop_x
,
i_crop_y
,
i_crop_width
,
i_crop_height
;
/**< cropping */
int
i_margin
;
/**< force position of a subpicture */
int
i_margin
;
/**< force position of a subpicture */
vlc_bool_t
b_force_
alpha
;
/**< force alpha
palette of subpicture */
vlc_bool_t
b_force_
palette
;
/**< force
palette of subpicture */
uint8_t
p
i_alpha
[
4
];
/**< forced alpha
palette */
uint8_t
p
alette
[
4
][
4
];
/**< forced
palette */
int
(
*
pf_control
)
(
spu_t
*
,
int
,
va_list
);
int
(
*
pf_control
)
(
spu_t
*
,
int
,
va_list
);
...
...
modules/access/dvdnav.c
View file @
15006f7b
...
@@ -129,9 +129,9 @@ struct demux_sys_t
...
@@ -129,9 +129,9 @@ struct demux_sys_t
/* event */
/* event */
event_thread_t
*
p_ev
;
event_thread_t
*
p_ev
;
/* FIXME */
/* palette for menus */
uint8_t
alpha
[
4
];
uint32_t
clut
[
16
];
uint32_t
clut
[
16
];
uint8_t
palette
[
4
][
4
];
/* */
/* */
int
i_aspect
;
int
i_aspect
;
...
@@ -149,7 +149,7 @@ static int DemuxBlock( demux_t *, uint8_t *, int );
...
@@ -149,7 +149,7 @@ static int DemuxBlock( demux_t *, uint8_t *, int );
static
void
DemuxTitles
(
demux_t
*
);
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
*
,
vlc_bool_t
);
static
void
ESNew
(
demux_t
*
,
int
);
static
void
ESNew
(
demux_t
*
,
int
);
static
int
ProbeDVD
(
demux_t
*
,
char
*
);
static
int
ProbeDVD
(
demux_t
*
,
char
*
);
...
@@ -320,7 +320,7 @@ static int Open( vlc_object_t *p_this )
...
@@ -320,7 +320,7 @@ static int Open( vlc_object_t *p_this )
var_Create
(
p_sys
->
p_input
,
"x-end"
,
VLC_VAR_INTEGER
);
var_Create
(
p_sys
->
p_input
,
"x-end"
,
VLC_VAR_INTEGER
);
var_Create
(
p_sys
->
p_input
,
"y-end"
,
VLC_VAR_INTEGER
);
var_Create
(
p_sys
->
p_input
,
"y-end"
,
VLC_VAR_INTEGER
);
var_Create
(
p_sys
->
p_input
,
"color"
,
VLC_VAR_ADDRESS
);
var_Create
(
p_sys
->
p_input
,
"color"
,
VLC_VAR_ADDRESS
);
var_Create
(
p_sys
->
p_input
,
"menu-
contrast
"
,
VLC_VAR_ADDRESS
);
var_Create
(
p_sys
->
p_input
,
"menu-
palette
"
,
VLC_VAR_ADDRESS
);
var_Create
(
p_sys
->
p_input
,
"highlight"
,
VLC_VAR_BOOL
);
var_Create
(
p_sys
->
p_input
,
"highlight"
,
VLC_VAR_BOOL
);
var_Create
(
p_sys
->
p_input
,
"highlight-mutex"
,
VLC_VAR_MUTEX
);
var_Create
(
p_sys
->
p_input
,
"highlight-mutex"
,
VLC_VAR_MUTEX
);
...
@@ -354,7 +354,7 @@ static void Close( vlc_object_t *p_this )
...
@@ -354,7 +354,7 @@ static void Close( vlc_object_t *p_this )
var_Destroy
(
p_sys
->
p_input
,
"y-start"
);
var_Destroy
(
p_sys
->
p_input
,
"y-start"
);
var_Destroy
(
p_sys
->
p_input
,
"y-end"
);
var_Destroy
(
p_sys
->
p_input
,
"y-end"
);
var_Destroy
(
p_sys
->
p_input
,
"color"
);
var_Destroy
(
p_sys
->
p_input
,
"color"
);
var_Destroy
(
p_sys
->
p_input
,
"menu-
contrast
"
);
var_Destroy
(
p_sys
->
p_input
,
"menu-
palette
"
);
vlc_object_release
(
p_sys
->
p_input
);
vlc_object_release
(
p_sys
->
p_input
);
...
@@ -420,7 +420,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
...
@@ -420,7 +420,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
pi64
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
pi64
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
if
(
p_sys
->
i_pgc_length
>
0
)
if
(
p_sys
->
i_pgc_length
>
0
)
{
{
*
pi64
=
(
int64_t
)
(
(
double
)
p_sys
->
i_pgc_length
/
(
double
)
len
)
*
(
double
)
pos
;
*
pi64
=
p_sys
->
i_pgc_length
*
pos
/
len
;
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
}
}
...
@@ -754,7 +754,7 @@ static int Demux( demux_t *p_demux )
...
@@ -754,7 +754,7 @@ 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
);
ButtonUpdate
(
p_demux
);
ButtonUpdate
(
p_demux
,
0
);
break
;
break
;
}
}
...
@@ -879,7 +879,7 @@ static void DemuxTitles( demux_t *p_demux )
...
@@ -879,7 +879,7 @@ static void DemuxTitles( demux_t *p_demux )
/*****************************************************************************
/*****************************************************************************
* Update functions:
* Update functions:
*****************************************************************************/
*****************************************************************************/
static
void
ButtonUpdate
(
demux_t
*
p_demux
)
static
void
ButtonUpdate
(
demux_t
*
p_demux
,
vlc_bool_t
b_mode
)
{
{
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
demux_sys_t
*
p_sys
=
p_demux
->
p_sys
;
vlc_value_t
val
;
vlc_value_t
val
;
...
@@ -902,15 +902,22 @@ static void ButtonUpdate( demux_t *p_demux )
...
@@ -902,15 +902,22 @@ static void ButtonUpdate( demux_t *p_demux )
if
(
i_button
>
0
&&
i_title
==
0
)
if
(
i_button
>
0
&&
i_title
==
0
)
{
{
int
i
;
pci_t
*
pci
=
dvdnav_get_current_nav_pci
(
p_sys
->
dvdnav
);
pci_t
*
pci
=
dvdnav_get_current_nav_pci
(
p_sys
->
dvdnav
);
dvdnav_get_highlight_area
(
pci
,
i_button
,
1
,
&
hl
);
dvdnav_get_highlight_area
(
pci
,
i_button
,
b_mode
,
&
hl
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
uint32_t
i_yuv
=
p_sys
->
clut
[(
hl
.
palette
>>
(
16
+
i
*
4
))
&
0x0f
];
uint8_t
i_alpha
=
(
hl
.
palette
>>
(
i
*
4
))
&
0x0f
;
i_alpha
=
i_alpha
==
0xf
?
0xff
:
i_alpha
<<
4
;
/* I fear it is plain wrong */
p_sys
->
palette
[
i
][
0
]
=
(
i_yuv
>>
16
)
&
0xff
;
p_sys
->
alpha
[
0
]
=
hl
.
palette
&
0x0
f
;
p_sys
->
palette
[
i
][
1
]
=
(
i_yuv
>>
0
)
&
0xf
f
;
p_sys
->
alpha
[
1
]
=
(
hl
.
palette
>>
4
)
&
0x0
f
;
p_sys
->
palette
[
i
][
2
]
=
(
i_yuv
>>
8
)
&
0xf
f
;
p_sys
->
alpha
[
2
]
=
(
hl
.
palette
>>
8
)
&
0x0f
;
p_sys
->
palette
[
i
][
3
]
=
i_alpha
;
p_sys
->
alpha
[
3
]
=
(
hl
.
palette
>>
12
)
&
0x0f
;
}
vlc_mutex_lock
(
p_mutex
);
vlc_mutex_lock
(
p_mutex
);
val
.
i_int
=
hl
.
sx
;
var_Set
(
p_sys
->
p_input
,
"x-start"
,
val
);
val
.
i_int
=
hl
.
sx
;
var_Set
(
p_sys
->
p_input
,
"x-start"
,
val
);
...
@@ -918,8 +925,8 @@ static void ButtonUpdate( demux_t *p_demux )
...
@@ -918,8 +925,8 @@ static void ButtonUpdate( demux_t *p_demux )
val
.
i_int
=
hl
.
sy
;
var_Set
(
p_sys
->
p_input
,
"y-start"
,
val
);
val
.
i_int
=
hl
.
sy
;
var_Set
(
p_sys
->
p_input
,
"y-start"
,
val
);
val
.
i_int
=
hl
.
ey
;
var_Set
(
p_sys
->
p_input
,
"y-end"
,
val
);
val
.
i_int
=
hl
.
ey
;
var_Set
(
p_sys
->
p_input
,
"y-end"
,
val
);
val
.
p_address
=
(
void
*
)
p_sys
->
alpha
;
val
.
p_address
=
(
void
*
)
p_sys
->
palette
;
var_Set
(
p_sys
->
p_input
,
"menu-
contrast
"
,
val
);
var_Set
(
p_sys
->
p_input
,
"menu-
palette
"
,
val
);
val
.
b_bool
=
VLC_TRUE
;
var_Set
(
p_sys
->
p_input
,
"highlight"
,
val
);
val
.
b_bool
=
VLC_TRUE
;
var_Set
(
p_sys
->
p_input
,
"highlight"
,
val
);
vlc_mutex_unlock
(
p_mutex
);
vlc_mutex_unlock
(
p_mutex
);
...
@@ -946,7 +953,7 @@ static void ESSubtitleUpdate( demux_t *p_demux )
...
@@ -946,7 +953,7 @@ static void ESSubtitleUpdate( demux_t *p_demux )
int
i_spu
=
dvdnav_get_active_spu_stream
(
p_sys
->
dvdnav
);
int
i_spu
=
dvdnav_get_active_spu_stream
(
p_sys
->
dvdnav
);
int32_t
i_title
,
i_part
;
int32_t
i_title
,
i_part
;
ButtonUpdate
(
p_demux
);
ButtonUpdate
(
p_demux
,
0
);
dvdnav_current_title_info
(
p_sys
->
dvdnav
,
&
i_title
,
&
i_part
);
dvdnav_current_title_info
(
p_sys
->
dvdnav
,
&
i_title
,
&
i_part
);
if
(
i_title
>
0
)
return
;
if
(
i_title
>
0
)
return
;
...
@@ -1160,7 +1167,7 @@ static void ESNew( demux_t *p_demux, int i_id )
...
@@ -1160,7 +1167,7 @@ static void ESNew( demux_t *p_demux, int i_id )
}
}
tk
->
b_seen
=
VLC_TRUE
;
tk
->
b_seen
=
VLC_TRUE
;
if
(
tk
->
fmt
.
i_cat
==
VIDEO_ES
)
ButtonUpdate
(
p_demux
);
if
(
tk
->
fmt
.
i_cat
==
VIDEO_ES
)
ButtonUpdate
(
p_demux
,
0
);
}
}
/*****************************************************************************
/*****************************************************************************
...
@@ -1227,6 +1234,7 @@ static int EventThread( vlc_object_t *p_this )
...
@@ -1227,6 +1234,7 @@ static int EventThread( vlc_object_t *p_this )
case
ACTIONID_NAV_ACTIVATE
:
case
ACTIONID_NAV_ACTIVATE
:
b_activated
=
VLC_TRUE
;
b_activated
=
VLC_TRUE
;
dvdnav_button_activate
(
p_sys
->
dvdnav
,
pci
);
dvdnav_button_activate
(
p_sys
->
dvdnav
,
pci
);
ButtonUpdate
(
p_ev
->
p_demux
,
VLC_TRUE
);
break
;
break
;
default:
default:
break
;
break
;
...
@@ -1255,6 +1263,7 @@ static int EventThread( vlc_object_t *p_this )
...
@@ -1255,6 +1263,7 @@ static int EventThread( vlc_object_t *p_this )
b_activated
=
VLC_TRUE
;
b_activated
=
VLC_TRUE
;
dvdnav_mouse_activate
(
p_sys
->
dvdnav
,
pci
,
valx
.
i_int
,
dvdnav_mouse_activate
(
p_sys
->
dvdnav
,
pci
,
valx
.
i_int
,
valy
.
i_int
);
valy
.
i_int
);
ButtonUpdate
(
p_ev
->
p_demux
,
VLC_TRUE
);
}
}
p_ev
->
b_moved
=
VLC_FALSE
;
p_ev
->
b_moved
=
VLC_FALSE
;
...
...
src/video_output/vout_subpictures.c
View file @
15006f7b
...
@@ -599,13 +599,11 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt,
...
@@ -599,13 +599,11 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt,
}
}
/* Force palette if requested */
/* Force palette if requested */
if
(
p_spu
->
b_force_
alpha
&&
VLC_FOURCC
(
'Y'
,
'U'
,
'V'
,
'P'
)
==
if
(
p_spu
->
b_force_
palette
&&
VLC_FOURCC
(
'Y'
,
'U'
,
'V'
,
'P'
)
==
p_region
->
fmt
.
i_chroma
)
p_region
->
fmt
.
i_chroma
)
{
{
p_region
->
fmt
.
p_palette
->
palette
[
0
][
3
]
=
p_spu
->
pi_alpha
[
0
];
memcpy
(
p_region
->
fmt
.
p_palette
->
palette
,
p_region
->
fmt
.
p_palette
->
palette
[
1
][
3
]
=
p_spu
->
pi_alpha
[
1
];
p_spu
->
palette
,
16
);
p_region
->
fmt
.
p_palette
->
palette
[
2
][
3
]
=
p_spu
->
pi_alpha
[
2
];
p_region
->
fmt
.
p_palette
->
palette
[
3
][
3
]
=
p_spu
->
pi_alpha
[
3
];
}
}
/* Scale SPU if necessary */
/* Scale SPU if necessary */
...
@@ -964,7 +962,7 @@ static void UpdateSPU( spu_t *p_spu, vlc_object_t *p_object )
...
@@ -964,7 +962,7 @@ static void UpdateSPU( spu_t *p_spu, vlc_object_t *p_object )
{
{
vlc_value_t
val
;
vlc_value_t
val
;
p_spu
->
b_force_
alpha
=
VLC_FALSE
;
p_spu
->
b_force_
palette
=
VLC_FALSE
;
p_spu
->
b_force_crop
=
VLC_FALSE
;
p_spu
->
b_force_crop
=
VLC_FALSE
;
if
(
var_Get
(
p_object
,
"highlight"
,
&
val
)
||
!
val
.
b_bool
)
return
;
if
(
var_Get
(
p_object
,
"highlight"
,
&
val
)
||
!
val
.
b_bool
)
return
;
...
@@ -979,32 +977,16 @@ static void UpdateSPU( spu_t *p_spu, vlc_object_t *p_object )
...
@@ -979,32 +977,16 @@ static void UpdateSPU( spu_t *p_spu, vlc_object_t *p_object )
var_Get
(
p_object
,
"y-end"
,
&
val
);
var_Get
(
p_object
,
"y-end"
,
&
val
);
p_spu
->
i_crop_height
=
val
.
i_int
-
p_spu
->
i_crop_y
;
p_spu
->
i_crop_height
=
val
.
i_int
-
p_spu
->
i_crop_y
;
#if 0
if
(
var_Get
(
p_object
,
"menu-palette"
,
&
val
)
==
VLC_SUCCESS
)
if( var_Get( p_object, "color", &val ) == VLC_SUCCESS )
{
{
int i;
memcpy
(
p_spu
->
palette
,
val
.
p_address
,
16
);
for( i = 0; i < 4; i++ )
p_spu
->
b_force_palette
=
VLC_TRUE
;
{
p_spu->pi_color[i] = ((uint8_t *)val.p_address)[i];
}
}
#endif
if
(
var_Get
(
p_object
,
"menu-contrast"
,
&
val
)
==
VLC_SUCCESS
)
{
int
i
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
p_spu
->
pi_alpha
[
i
]
=
((
uint8_t
*
)
val
.
p_address
)[
i
];
p_spu
->
pi_alpha
[
i
]
=
p_spu
->
pi_alpha
[
i
]
==
0xf
?
0xff
:
p_spu
->
pi_alpha
[
i
]
<<
4
;
}
p_spu
->
b_force_alpha
=
VLC_TRUE
;
}
}
msg_Dbg
(
p_object
,
"crop: %i,%i,%i,%i,
alpha
: %i"
,
msg_Dbg
(
p_object
,
"crop: %i,%i,%i,%i,
palette forced
: %i"
,
p_spu
->
i_crop_x
,
p_spu
->
i_crop_y
,
p_spu
->
i_crop_x
,
p_spu
->
i_crop_y
,
p_spu
->
i_crop_width
,
p_spu
->
i_crop_height
,
p_spu
->
b_force_alpha
);
p_spu
->
i_crop_width
,
p_spu
->
i_crop_height
,
p_spu
->
b_force_palette
);
}
}
/*****************************************************************************
/*****************************************************************************
...
...
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