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
e04ea111
Commit
e04ea111
authored
Mar 09, 2004
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/video_output/directx/*: take care of hardware overlay alignment constraints.
parent
b6769673
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
24 deletions
+85
-24
modules/video_output/directx/directx.c
modules/video_output/directx/directx.c
+42
-16
modules/video_output/directx/events.c
modules/video_output/directx/events.c
+36
-7
modules/video_output/directx/vout.h
modules/video_output/directx/vout.h
+7
-1
No files found.
modules/video_output/directx/directx.c
View file @
e04ea111
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* vout.c: Windows DirectX video output display method
* vout.c: Windows DirectX video output display method
*****************************************************************************
*****************************************************************************
* Copyright (C) 2001-2004 VideoLAN
* Copyright (C) 2001-2004 VideoLAN
* $Id
: directx.c,v 1.36 2004/02/26 13:58:23 gbazin Exp
$
* $Id$
*
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
*
...
@@ -172,6 +172,7 @@ static int OpenVideo( vlc_object_t *p_this )
...
@@ -172,6 +172,7 @@ static int OpenVideo( vlc_object_t *p_this )
msg_Err
(
p_vout
,
"out of memory"
);
msg_Err
(
p_vout
,
"out of memory"
);
return
VLC_ENOMEM
;
return
VLC_ENOMEM
;
}
}
memset
(
p_vout
->
p_sys
,
0
,
sizeof
(
vout_sys_t
)
);
/* Initialisations */
/* Initialisations */
p_vout
->
pf_init
=
Init
;
p_vout
->
pf_init
=
Init
;
...
@@ -1597,34 +1598,59 @@ static void DirectXGetDDrawCaps( vout_thread_t *p_vout )
...
@@ -1597,34 +1598,59 @@ static void DirectXGetDDrawCaps( vout_thread_t *p_vout )
}
}
else
else
{
{
BOOL
bHasOverlay
,
bHasOverlayFourCC
,
bCanDeinterlace
,
vlc_bool_t
bHasOverlay
,
bHasOverlayFourCC
,
bCanDeinterlace
,
bHasColorKey
,
bCanStretch
,
bCanBltFourcc
;
bHasColorKey
,
bCanStretch
,
bCanBltFourcc
,
bAlignBoundarySrc
,
bAlignBoundaryDest
,
bAlignSizeSrc
,
bAlignSizeDest
;
/* Determine if the hardware supports overlay surfaces */
/* Determine if the hardware supports overlay surfaces */
bHasOverlay
=
((
ddcaps
.
dwCaps
&
DDCAPS_OVERLAY
)
==
bHasOverlay
=
(
ddcaps
.
dwCaps
&
DDCAPS_OVERLAY
)
?
1
:
0
;
DDCAPS_OVERLAY
)
?
TRUE
:
FALSE
;
/* Determine if the hardware supports overlay surfaces */
/* Determine if the hardware supports overlay surfaces */
bHasOverlayFourCC
=
((
ddcaps
.
dwCaps
&
DDCAPS_OVERLAYFOURCC
)
==
bHasOverlayFourCC
=
(
ddcaps
.
dwCaps
&
DDCAPS_OVERLAYFOURCC
)
?
1
:
0
;
DDCAPS_OVERLAYFOURCC
)
?
TRUE
:
FALSE
;
/* Determine if the hardware supports overlay deinterlacing */
/* Determine if the hardware supports overlay deinterlacing */
bCanDeinterlace
=
((
ddcaps
.
dwCaps
&
DDCAPS2_CANFLIPODDEVEN
)
==
bCanDeinterlace
=
(
ddcaps
.
dwCaps
&
DDCAPS2_CANFLIPODDEVEN
)
?
1
:
0
;
0
)
?
TRUE
:
FALSE
;
/* Determine if the hardware supports colorkeying */
/* Determine if the hardware supports colorkeying */
bHasColorKey
=
((
ddcaps
.
dwCaps
&
DDCAPS_COLORKEY
)
==
bHasColorKey
=
(
ddcaps
.
dwCaps
&
DDCAPS_COLORKEY
)
?
1
:
0
;
DDCAPS_COLORKEY
)
?
TRUE
:
FALSE
;
/* Determine if the hardware supports scaling of the overlay surface */
/* Determine if the hardware supports scaling of the overlay surface */
bCanStretch
=
((
ddcaps
.
dwCaps
&
DDCAPS_OVERLAYSTRETCH
)
==
bCanStretch
=
(
ddcaps
.
dwCaps
&
DDCAPS_OVERLAYSTRETCH
)
?
1
:
0
;
DDCAPS_OVERLAYSTRETCH
)
?
TRUE
:
FALSE
;
/* Determine if the hardware supports color conversion during a blit */
/* Determine if the hardware supports color conversion during a blit */
bCanBltFourcc
=
((
ddcaps
.
dwCaps
&
DDCAPS_BLTFOURCC
)
==
bCanBltFourcc
=
(
ddcaps
.
dwCaps
&
DDCAPS_BLTFOURCC
)
?
1
:
0
;
DDCAPS_BLTFOURCC
)
?
TRUE
:
FALSE
;
/* Determine overlay source boundary alignment */
bAlignBoundarySrc
=
(
ddcaps
.
dwCaps
&
DDCAPS_ALIGNBOUNDARYSRC
)
?
1
:
0
;
/* Determine overlay destination boundary alignment */
bAlignBoundaryDest
=
(
ddcaps
.
dwCaps
&
DDCAPS_ALIGNBOUNDARYDEST
)
?
1
:
0
;
/* Determine overlay destination size alignment */
bAlignSizeSrc
=
(
ddcaps
.
dwCaps
&
DDCAPS_ALIGNSIZESRC
)
?
1
:
0
;
/* Determine overlay destination size alignment */
bAlignSizeDest
=
(
ddcaps
.
dwCaps
&
DDCAPS_ALIGNSIZEDEST
)
?
1
:
0
;
msg_Dbg
(
p_vout
,
"DirectDraw Capabilities: overlay=%i yuvoverlay=%i "
msg_Dbg
(
p_vout
,
"DirectDraw Capabilities: overlay=%i yuvoverlay=%i "
"can_deinterlace_overlay=%i colorkey=%i stretch=%i "
"can_deinterlace_overlay=%i colorkey=%i stretch=%i "
"bltfourcc=%i"
,
"bltfourcc=%i"
,
bHasOverlay
,
bHasOverlayFourCC
,
bCanDeinterlace
,
bHasOverlay
,
bHasOverlayFourCC
,
bCanDeinterlace
,
bHasColorKey
,
bCanStretch
,
bCanBltFourcc
);
bHasColorKey
,
bCanStretch
,
bCanBltFourcc
);
if
(
bAlignBoundarySrc
||
bAlignBoundaryDest
||
bAlignSizeSrc
||
bAlignSizeDest
)
{
if
(
bAlignBoundarySrc
)
p_vout
->
p_sys
->
i_align_src_boundary
=
ddcaps
.
dwAlignBoundarySrc
;
if
(
bAlignBoundaryDest
)
p_vout
->
p_sys
->
i_align_dest_boundary
=
ddcaps
.
dwAlignBoundaryDest
;
if
(
bAlignSizeDest
)
p_vout
->
p_sys
->
i_align_src_size
=
ddcaps
.
dwAlignSizeSrc
;
if
(
bAlignSizeDest
)
p_vout
->
p_sys
->
i_align_dest_size
=
ddcaps
.
dwAlignSizeDest
;
msg_Dbg
(
p_vout
,
"align_boundary_src=%i,%i "
"align_boundary_dest=%i,%i "
"align_size_src=%i,%i align_size_dest=%i,%i"
,
bAlignBoundarySrc
,
p_vout
->
p_sys
->
i_align_src_boundary
,
bAlignBoundaryDest
,
p_vout
->
p_sys
->
i_align_dest_boundary
,
bAlignSizeSrc
,
p_vout
->
p_sys
->
i_align_src_size
,
bAlignSizeDest
,
p_vout
->
p_sys
->
i_align_dest_size
);
}
/* Don't ask for troubles */
/* Don't ask for troubles */
if
(
!
bCanBltFourcc
)
p_vout
->
p_sys
->
b_hw_yuv
=
FALSE
;
if
(
!
bCanBltFourcc
)
p_vout
->
p_sys
->
b_hw_yuv
=
FALSE
;
}
}
...
...
modules/video_output/directx/events.c
View file @
e04ea111
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* events.c: Windows DirectX video output events handler
* events.c: Windows DirectX video output events handler
*****************************************************************************
*****************************************************************************
* Copyright (C) 2001-2004 VideoLAN
* Copyright (C) 2001-2004 VideoLAN
* $Id
: events.c,v 1.38 2004/02/26 13:58:23 gbazin Exp
$
* $Id$
*
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
*
...
@@ -508,6 +508,20 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force )
...
@@ -508,6 +508,20 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force )
rect_dest
.
top
=
point
.
y
+
i_y
;
rect_dest
.
top
=
point
.
y
+
i_y
;
rect_dest
.
bottom
=
rect_dest
.
top
+
i_height
;
rect_dest
.
bottom
=
rect_dest
.
top
+
i_height
;
/* Apply overlay hardware constraints */
if
(
p_vout
->
p_sys
->
b_using_overlay
)
{
if
(
p_vout
->
p_sys
->
i_align_dest_boundary
)
rect_dest
.
left
=
(
rect_dest
.
left
+
p_vout
->
p_sys
->
i_align_dest_boundary
/
2
)
&
~
p_vout
->
p_sys
->
i_align_dest_boundary
;
if
(
p_vout
->
p_sys
->
i_align_dest_size
)
rect_dest
.
right
=
((
rect_dest
.
right
-
rect_dest
.
left
+
p_vout
->
p_sys
->
i_align_dest_size
/
2
)
&
~
p_vout
->
p_sys
->
i_align_dest_size
)
+
rect_dest
.
left
;
}
/* UpdateOverlay directdraw function doesn't automatically clip to the
/* UpdateOverlay directdraw function doesn't automatically clip to the
* display size so we need to do it otherwise it will fail */
* display size so we need to do it otherwise it will fail */
...
@@ -552,12 +566,20 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force )
...
@@ -552,12 +566,20 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force )
(
rect_dest
.
bottom
-
rect_dest_clipped
.
bottom
)
*
p_vout
->
render
.
i_height
/
(
rect_dest
.
bottom
-
rect_dest_clipped
.
bottom
)
*
p_vout
->
render
.
i_height
/
(
rect_dest
.
bottom
-
rect_dest
.
top
);
(
rect_dest
.
bottom
-
rect_dest
.
top
);
/* The destination coordinates need to be relative to the current
/* Apply overlay hardware constraints */
* directdraw primary surface (display) */
if
(
p_vout
->
p_sys
->
b_using_overlay
)
rect_dest_clipped
.
left
-=
p_vout
->
p_sys
->
rect_display
.
left
;
{
rect_dest_clipped
.
right
-=
p_vout
->
p_sys
->
rect_display
.
left
;
if
(
p_vout
->
p_sys
->
i_align_src_boundary
)
rect_dest_clipped
.
top
-=
p_vout
->
p_sys
->
rect_display
.
top
;
rect_src_clipped
.
left
=
(
rect_src_clipped
.
left
+
rect_dest_clipped
.
bottom
-=
p_vout
->
p_sys
->
rect_display
.
top
;
p_vout
->
p_sys
->
i_align_src_boundary
/
2
)
&
~
p_vout
->
p_sys
->
i_align_src_boundary
;
if
(
p_vout
->
p_sys
->
i_align_src_size
)
rect_src_clipped
.
right
=
((
rect_src_clipped
.
right
-
rect_src_clipped
.
left
+
p_vout
->
p_sys
->
i_align_src_size
/
2
)
&
~
p_vout
->
p_sys
->
i_align_src_size
)
+
rect_src_clipped
.
left
;
}
#if 0
#if 0
msg_Dbg( p_vout, "DirectXUpdateRects image_src_clipped"
msg_Dbg( p_vout, "DirectXUpdateRects image_src_clipped"
...
@@ -566,6 +588,13 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force )
...
@@ -566,6 +588,13 @@ void DirectXUpdateRects( vout_thread_t *p_vout, vlc_bool_t b_force )
rect_src_clipped.right, rect_src_clipped.bottom );
rect_src_clipped.right, rect_src_clipped.bottom );
#endif
#endif
/* The destination coordinates need to be relative to the current
* directdraw primary surface (display) */
rect_dest_clipped
.
left
-=
p_vout
->
p_sys
->
rect_display
.
left
;
rect_dest_clipped
.
right
-=
p_vout
->
p_sys
->
rect_display
.
left
;
rect_dest_clipped
.
top
-=
p_vout
->
p_sys
->
rect_display
.
top
;
rect_dest_clipped
.
bottom
-=
p_vout
->
p_sys
->
rect_display
.
top
;
/* Signal the change in size/position */
/* Signal the change in size/position */
p_vout
->
p_sys
->
i_changes
|=
DX_POSITION_CHANGE
;
p_vout
->
p_sys
->
i_changes
|=
DX_POSITION_CHANGE
;
...
...
modules/video_output/directx/vout.h
View file @
e04ea111
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* vout.h: Windows DirectX video output header file
* vout.h: Windows DirectX video output header file
*****************************************************************************
*****************************************************************************
* Copyright (C) 2001-2004 VideoLAN
* Copyright (C) 2001-2004 VideoLAN
* $Id
: vout.h,v 1.12 2004/01/02 22:17:57 gbazin Exp
$
* $Id$
*
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
*
...
@@ -78,6 +78,12 @@ struct vout_sys_t
...
@@ -78,6 +78,12 @@ struct vout_sys_t
RECT
rect_dest
;
RECT
rect_dest
;
RECT
rect_dest_clipped
;
RECT
rect_dest_clipped
;
/* Overlay alignment restrictions */
int
i_align_src_boundary
;
int
i_align_src_size
;
int
i_align_dest_boundary
;
int
i_align_dest_size
;
/* DDraw capabilities */
/* DDraw capabilities */
int
b_caps_overlay_clipping
;
int
b_caps_overlay_clipping
;
...
...
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