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
38ac8544
Commit
38ac8544
authored
Apr 18, 2010
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved most of private vout_thread_t fields out of vlc_vout.h
parent
b67a5864
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
172 additions
and
181 deletions
+172
-181
include/vlc_vout.h
include/vlc_vout.h
+0
-50
src/video_output/video_output.c
src/video_output/video_output.c
+67
-67
src/video_output/vout_internal.h
src/video_output/vout_internal.h
+41
-0
src/video_output/vout_intf.c
src/video_output/vout_intf.c
+12
-12
src/video_output/vout_pictures.c
src/video_output/vout_pictures.c
+25
-25
src/video_output/vout_wrapper.c
src/video_output/vout_wrapper.c
+27
-27
No files found.
include/vlc_vout.h
View file @
38ac8544
...
@@ -76,64 +76,14 @@ struct vout_thread_t
...
@@ -76,64 +76,14 @@ struct vout_thread_t
{
{
VLC_COMMON_MEMBERS
VLC_COMMON_MEMBERS
/** \name Thread properties and locks */
/**@{*/
vlc_mutex_t
picture_lock
;
/**< picture heap lock */
vlc_mutex_t
change_lock
;
/**< thread change lock */
/**@}*/
/** \name Current display properties */
/**@{*/
uint16_t
i_changes
;
/**< changes made to the thread.
\see \ref vout_changes */
unsigned
b_fullscreen
:
1
;
/**< toogle fullscreen display */
unsigned
b_on_top
:
1
;
/**< stay always on top of other windows */
/**@}*/
/** \name Video heap and translation tables */
/**@{*/
picture_heap_t
render
;
/**< rendered pictures */
picture_heap_t
output
;
/**< direct buffers */
video_format_t
fmt_render
;
/* render format (from the decoder) */
video_format_t
fmt_render
;
/* render format (from the decoder) */
video_format_t
fmt_in
;
/* input (modified render) format */
video_format_t
fmt_in
;
/* input (modified render) format */
video_format_t
fmt_out
;
/* output format (for the video output) */
video_format_t
fmt_out
;
/* output format (for the video output) */
/**@}*/
/* Picture heap */
picture_t
p_picture
[
2
*
VOUT_MAX_PICTURES
+
1
];
/**< pictures */
/* Private vout_thread data */
/* Private vout_thread data */
vout_thread_sys_t
*
p
;
vout_thread_sys_t
*
p
;
};
};
#define I_OUTPUTPICTURES p_vout->output.i_pictures
#define PP_OUTPUTPICTURE p_vout->output.pp_picture
#define I_RENDERPICTURES p_vout->render.i_pictures
#define PP_RENDERPICTURE p_vout->render.pp_picture
/** \defgroup vout_changes Flags for changes
* These flags are set in the vout_thread_t::i_changes field when another
* thread changed a variable
* @{
*/
/** b_autoscale changed */
#define VOUT_SCALE_CHANGE 0x0008
/** b_on_top changed */
#define VOUT_ON_TOP_CHANGE 0x0010
/** b_fullscreen changed */
#define VOUT_FULLSCREEN_CHANGE 0x0040
/** i_zoom changed */
#define VOUT_ZOOM_CHANGE 0x0080
/** cropping parameters changed */
#define VOUT_CROP_CHANGE 0x1000
/** aspect ratio changed */
#define VOUT_ASPECT_CHANGE 0x2000
/** change/recreate picture buffers */
#define VOUT_PICTURE_BUFFERS_CHANGE 0x4000
/**@}*/
/* Alignment flags */
/* Alignment flags */
#define VOUT_ALIGN_LEFT 0x0001
#define VOUT_ALIGN_LEFT 0x0001
#define VOUT_ALIGN_RIGHT 0x0002
#define VOUT_ALIGN_RIGHT 0x0002
...
...
src/video_output/video_output.c
View file @
38ac8544
This diff is collapsed.
Click to expand it.
src/video_output/vout_internal.h
View file @
38ac8544
...
@@ -113,8 +113,49 @@ struct vout_thread_sys_t
...
@@ -113,8 +113,49 @@ struct vout_thread_sys_t
/* */
/* */
vlc_mouse_t
mouse
;
vlc_mouse_t
mouse
;
/* */
vlc_mutex_t
picture_lock
;
/**< picture heap lock */
vlc_mutex_t
change_lock
;
/**< thread change lock */
uint16_t
i_changes
;
/**< changes made to the thread.
\see \ref vout_changes */
unsigned
b_fullscreen
:
1
;
/**< toogle fullscreen display */
unsigned
b_on_top
:
1
;
/**< stay always on top of other windows */
picture_heap_t
render
;
/**< rendered pictures */
picture_heap_t
output
;
/**< direct buffers */
picture_t
p_picture
[
2
*
VOUT_MAX_PICTURES
+
1
];
/**< pictures */
};
};
#define I_OUTPUTPICTURES p_vout->p->output.i_pictures
#define PP_OUTPUTPICTURE p_vout->p->output.pp_picture
#define I_RENDERPICTURES p_vout->p->render.i_pictures
#define PP_RENDERPICTURE p_vout->p->render.pp_picture
/** \defgroup vout_changes Flags for changes
* These flags are set in the vout_thread_t::i_changes field when another
* thread changed a variable
* @{
*/
/** b_autoscale changed */
#define VOUT_SCALE_CHANGE 0x0008
/** b_on_top changed */
#define VOUT_ON_TOP_CHANGE 0x0010
/** b_fullscreen changed */
#define VOUT_FULLSCREEN_CHANGE 0x0040
/** i_zoom changed */
#define VOUT_ZOOM_CHANGE 0x0080
/** cropping parameters changed */
#define VOUT_CROP_CHANGE 0x1000
/** aspect ratio changed */
#define VOUT_ASPECT_CHANGE 0x2000
/** change/recreate picture buffers */
#define VOUT_PICTURE_BUFFERS_CHANGE 0x4000
/**@}*/
/* */
/* */
int
vout_AllocatePicture
(
vlc_object_t
*
,
picture_t
*
,
uint32_t
i_chroma
,
int
i_width
,
int
i_height
,
int
i_sar_num
,
int
i_sar_den
);
int
vout_AllocatePicture
(
vlc_object_t
*
,
picture_t
*
,
uint32_t
i_chroma
,
int
i_width
,
int
i_height
,
int
i_sar_num
,
int
i_sar_den
);
#define vout_AllocatePicture(a,b,c,d,e,f,g) \
#define vout_AllocatePicture(a,b,c,d,e,f,g) \
...
...
src/video_output/vout_intf.c
View file @
38ac8544
...
@@ -344,7 +344,7 @@ void vout_IntfInit( vout_thread_t *p_vout )
...
@@ -344,7 +344,7 @@ void vout_IntfInit( vout_thread_t *p_vout )
if
(
var_CreateGetBoolCommand
(
p_vout
,
"fullscreen"
)
)
if
(
var_CreateGetBoolCommand
(
p_vout
,
"fullscreen"
)
)
{
{
/* user requested fullscreen */
/* user requested fullscreen */
p_vout
->
i_changes
|=
VOUT_FULLSCREEN_CHANGE
;
p_vout
->
p
->
i_changes
|=
VOUT_FULLSCREEN_CHANGE
;
}
}
text
.
psz_string
=
_
(
"Fullscreen"
);
text
.
psz_string
=
_
(
"Fullscreen"
);
var_Change
(
p_vout
,
"fullscreen"
,
VLC_VAR_SETTEXT
,
&
text
,
NULL
);
var_Change
(
p_vout
,
"fullscreen"
,
VLC_VAR_SETTEXT
,
&
text
,
NULL
);
...
@@ -791,7 +791,7 @@ static int CropCallback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -791,7 +791,7 @@ static int CropCallback( vlc_object_t *p_this, char const *psz_cmd,
}
}
crop_end:
crop_end:
p_vout
->
i_changes
|=
VOUT_CROP_CHANGE
;
p_vout
->
p
->
i_changes
|=
VOUT_CROP_CHANGE
;
msg_Dbg
(
p_vout
,
"cropping picture %ix%i to %i,%i,%ix%i"
,
msg_Dbg
(
p_vout
,
"cropping picture %ix%i to %i,%i,%ix%i"
,
p_vout
->
fmt_in
.
i_width
,
p_vout
->
fmt_in
.
i_height
,
p_vout
->
fmt_in
.
i_width
,
p_vout
->
fmt_in
.
i_height
,
...
@@ -839,7 +839,7 @@ static int AspectCallback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -839,7 +839,7 @@ static int AspectCallback( vlc_object_t *p_this, char const *psz_cmd,
p_vout
->
fmt_in
.
i_sar_den
*=
p_vout
->
p
->
i_par_num
;
p_vout
->
fmt_in
.
i_sar_den
*=
p_vout
->
p
->
i_par_num
;
}
}
p_vout
->
i_changes
|=
VOUT_ASPECT_CHANGE
;
p_vout
->
p
->
i_changes
|=
VOUT_ASPECT_CHANGE
;
msg_Dbg
(
p_vout
,
"new aspect-ratio %i:%i, sample aspect-ratio %i:%i"
,
msg_Dbg
(
p_vout
,
"new aspect-ratio %i:%i, sample aspect-ratio %i:%i"
,
p_vout
->
fmt_in
.
i_sar_num
*
p_vout
->
fmt_in
.
i_width
,
p_vout
->
fmt_in
.
i_sar_num
*
p_vout
->
fmt_in
.
i_width
,
...
@@ -860,18 +860,18 @@ static int ScalingCallback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -860,18 +860,18 @@ static int ScalingCallback( vlc_object_t *p_this, char const *psz_cmd,
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
(
void
)
oldval
;
(
void
)
newval
;
(
void
)
p_data
;
(
void
)
oldval
;
(
void
)
newval
;
(
void
)
p_data
;
vlc_mutex_lock
(
&
p_vout
->
change_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
change_lock
);
if
(
!
strcmp
(
psz_cmd
,
"autoscale"
)
)
if
(
!
strcmp
(
psz_cmd
,
"autoscale"
)
)
{
{
p_vout
->
i_changes
|=
VOUT_SCALE_CHANGE
;
p_vout
->
p
->
i_changes
|=
VOUT_SCALE_CHANGE
;
}
}
else
if
(
!
strcmp
(
psz_cmd
,
"scale"
)
)
else
if
(
!
strcmp
(
psz_cmd
,
"scale"
)
)
{
{
p_vout
->
i_changes
|=
VOUT_ZOOM_CHANGE
;
p_vout
->
p
->
i_changes
|=
VOUT_ZOOM_CHANGE
;
}
}
vlc_mutex_unlock
(
&
p_vout
->
change_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
change_lock
);
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
...
@@ -881,10 +881,10 @@ static int OnTopCallback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -881,10 +881,10 @@ static int OnTopCallback( vlc_object_t *p_this, char const *psz_cmd,
{
{
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
vlc_mutex_lock
(
&
p_vout
->
change_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
change_lock
);
p_vout
->
i_changes
|=
VOUT_ON_TOP_CHANGE
;
p_vout
->
p
->
i_changes
|=
VOUT_ON_TOP_CHANGE
;
p_vout
->
b_on_top
=
newval
.
b_bool
;
p_vout
->
p
->
b_on_top
=
newval
.
b_bool
;
vlc_mutex_unlock
(
&
p_vout
->
change_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
change_lock
);
(
void
)
psz_cmd
;
(
void
)
oldval
;
(
void
)
p_data
;
(
void
)
psz_cmd
;
(
void
)
oldval
;
(
void
)
p_data
;
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
...
@@ -899,7 +899,7 @@ static int FullscreenCallback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -899,7 +899,7 @@ static int FullscreenCallback( vlc_object_t *p_this, char const *psz_cmd,
if
(
oldval
.
b_bool
==
newval
.
b_bool
)
if
(
oldval
.
b_bool
==
newval
.
b_bool
)
return
VLC_SUCCESS
;
/* no-op */
return
VLC_SUCCESS
;
/* no-op */
p_vout
->
i_changes
|=
VOUT_FULLSCREEN_CHANGE
;
p_vout
->
p
->
i_changes
|=
VOUT_FULLSCREEN_CHANGE
;
val
.
b_bool
=
true
;
val
.
b_bool
=
true
;
var_Set
(
p_vout
,
"intf-change"
,
val
);
var_Set
(
p_vout
,
"intf-change"
,
val
);
...
...
src/video_output/vout_pictures.c
View file @
38ac8544
...
@@ -52,7 +52,7 @@
...
@@ -52,7 +52,7 @@
*/
*/
void
vout_DisplayPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
void
vout_DisplayPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
{
{
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
p
icture_lock
);
if
(
p_pic
->
i_status
==
RESERVED_PICTURE
)
if
(
p_pic
->
i_status
==
RESERVED_PICTURE
)
{
{
...
@@ -67,7 +67,7 @@ void vout_DisplayPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -67,7 +67,7 @@ void vout_DisplayPicture( vout_thread_t *p_vout, picture_t *p_pic )
p_vout
->
p
->
i_picture_qtype
=
p_pic
->
i_qtype
;
p_vout
->
p
->
i_picture_qtype
=
p_pic
->
i_qtype
;
p_vout
->
p
->
b_picture_interlaced
=
!
p_pic
->
b_progressive
;
p_vout
->
p
->
b_picture_interlaced
=
!
p_pic
->
b_progressive
;
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
p
icture_lock
);
}
}
/**
/**
...
@@ -84,10 +84,10 @@ int vout_CountPictureAvailable( vout_thread_t *p_vout )
...
@@ -84,10 +84,10 @@ int vout_CountPictureAvailable( vout_thread_t *p_vout )
int
i_free
=
0
;
int
i_free
=
0
;
int
i_pic
;
int
i_pic
;
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
p
icture_lock
);
for
(
i_pic
=
0
;
i_pic
<
I_RENDERPICTURES
;
i_pic
++
)
for
(
i_pic
=
0
;
i_pic
<
I_RENDERPICTURES
;
i_pic
++
)
{
{
picture_t
*
p_pic
=
PP_RENDERPICTURE
[(
p_vout
->
render
.
i_last_used_pic
+
i_pic
+
1
)
%
I_RENDERPICTURES
];
picture_t
*
p_pic
=
PP_RENDERPICTURE
[(
p_vout
->
p
->
render
.
i_last_used_pic
+
i_pic
+
1
)
%
I_RENDERPICTURES
];
switch
(
p_pic
->
i_status
)
switch
(
p_pic
->
i_status
)
{
{
...
@@ -103,7 +103,7 @@ int vout_CountPictureAvailable( vout_thread_t *p_vout )
...
@@ -103,7 +103,7 @@ int vout_CountPictureAvailable( vout_thread_t *p_vout )
break
;
break
;
}
}
}
}
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
p
icture_lock
);
return
i_free
;
return
i_free
;
}
}
...
@@ -118,14 +118,14 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout,
...
@@ -118,14 +118,14 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout,
picture_t
*
p_freepic
=
NULL
;
/* first free picture */
picture_t
*
p_freepic
=
NULL
;
/* first free picture */
/* Get lock */
/* Get lock */
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
p
icture_lock
);
/*
/*
* Look for an empty place in the picture heap.
* Look for an empty place in the picture heap.
*/
*/
for
(
i_pic
=
0
;
i_pic
<
I_RENDERPICTURES
;
i_pic
++
)
for
(
i_pic
=
0
;
i_pic
<
I_RENDERPICTURES
;
i_pic
++
)
{
{
p_pic
=
PP_RENDERPICTURE
[(
p_vout
->
render
.
i_last_used_pic
+
i_pic
+
1
)
p_pic
=
PP_RENDERPICTURE
[(
p_vout
->
p
->
render
.
i_last_used_pic
+
i_pic
+
1
)
%
I_RENDERPICTURES
];
%
I_RENDERPICTURES
];
switch
(
p_pic
->
i_status
)
switch
(
p_pic
->
i_status
)
...
@@ -142,16 +142,16 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout,
...
@@ -142,16 +142,16 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout,
p_pic
->
i_nb_fields
=
i_nb_fields
;
p_pic
->
i_nb_fields
=
i_nb_fields
;
p_pic
->
b_top_field_first
=
b_top_field_first
;
p_pic
->
b_top_field_first
=
b_top_field_first
;
p_vout
->
render
.
i_last_used_pic
=
p_vout
->
p
->
render
.
i_last_used_pic
=
(
p_vout
->
render
.
i_last_used_pic
+
i_pic
+
1
)
(
p_vout
->
p
->
render
.
i_last_used_pic
+
i_pic
+
1
)
%
I_RENDERPICTURES
;
%
I_RENDERPICTURES
;
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
p
icture_lock
);
return
(
p_pic
);
return
(
p_pic
);
case
FREE_PICTURE
:
case
FREE_PICTURE
:
/* Picture is empty and ready for allocation */
/* Picture is empty and ready for allocation */
p_vout
->
render
.
i_last_used_pic
=
p_vout
->
p
->
render
.
i_last_used_pic
=
(
p_vout
->
render
.
i_last_used_pic
+
i_pic
+
1
)
(
p_vout
->
p
->
render
.
i_last_used_pic
+
i_pic
+
1
)
%
I_RENDERPICTURES
;
%
I_RENDERPICTURES
;
p_freepic
=
p_pic
;
p_freepic
=
p_pic
;
break
;
break
;
...
@@ -195,14 +195,14 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout,
...
@@ -195,14 +195,14 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout,
msg_Err
(
p_vout
,
"picture allocation failed"
);
msg_Err
(
p_vout
,
"picture allocation failed"
);
}
}
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
p
icture_lock
);
return
(
p_freepic
);
return
(
p_freepic
);
}
}
/* No free or destroyed picture could be found, but the decoder
/* No free or destroyed picture could be found, but the decoder
* will try again in a while. */
* will try again in a while. */
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
p
icture_lock
);
return
(
NULL
);
return
(
NULL
);
}
}
...
@@ -210,7 +210,7 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout,
...
@@ -210,7 +210,7 @@ picture_t *vout_CreatePicture( vout_thread_t *p_vout,
/* */
/* */
static
void
DestroyPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_picture
)
static
void
DestroyPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_picture
)
{
{
vlc_assert_locked
(
&
p_vout
->
picture_lock
);
vlc_assert_locked
(
&
p_vout
->
p
->
p
icture_lock
);
p_picture
->
i_status
=
DESTROYED_PICTURE
;
p_picture
->
i_status
=
DESTROYED_PICTURE
;
picture_CleanupQuant
(
p_picture
);
picture_CleanupQuant
(
p_picture
);
...
@@ -231,13 +231,13 @@ void vout_DestroyPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -231,13 +231,13 @@ void vout_DestroyPicture( vout_thread_t *p_vout, picture_t *p_pic )
{
{
#ifndef NDEBUG
#ifndef NDEBUG
/* Check if picture status is valid */
/* Check if picture status is valid */
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
p
icture_lock
);
if
(
p_pic
->
i_status
!=
RESERVED_PICTURE
)
if
(
p_pic
->
i_status
!=
RESERVED_PICTURE
)
{
{
msg_Err
(
p_vout
,
"picture to destroy %p has invalid status %d"
,
msg_Err
(
p_vout
,
"picture to destroy %p has invalid status %d"
,
p_pic
,
p_pic
->
i_status
);
p_pic
,
p_pic
->
i_status
);
}
}
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
p
icture_lock
);
#endif
#endif
vout_DropPicture
(
p_vout
,
p_pic
);
vout_DropPicture
(
p_vout
,
p_pic
);
...
@@ -246,7 +246,7 @@ void vout_DestroyPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -246,7 +246,7 @@ void vout_DestroyPicture( vout_thread_t *p_vout, picture_t *p_pic )
/* */
/* */
void
vout_UsePictureLocked
(
vout_thread_t
*
p_vout
,
picture_t
*
p_picture
)
void
vout_UsePictureLocked
(
vout_thread_t
*
p_vout
,
picture_t
*
p_picture
)
{
{
vlc_assert_locked
(
&
p_vout
->
picture_lock
);
vlc_assert_locked
(
&
p_vout
->
p
->
p
icture_lock
);
if
(
p_picture
->
i_refcount
>
0
)
if
(
p_picture
->
i_refcount
>
0
)
{
{
/* Pretend we displayed the picture, but don't destroy
/* Pretend we displayed the picture, but don't destroy
...
@@ -263,7 +263,7 @@ void vout_UsePictureLocked( vout_thread_t *p_vout, picture_t *p_picture )
...
@@ -263,7 +263,7 @@ void vout_UsePictureLocked( vout_thread_t *p_vout, picture_t *p_picture )
/* */
/* */
void
vout_DropPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
void
vout_DropPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
{
{
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
p
icture_lock
);
if
(
p_pic
->
i_status
==
READY_PICTURE
)
if
(
p_pic
->
i_status
==
READY_PICTURE
)
{
{
...
@@ -276,7 +276,7 @@ void vout_DropPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -276,7 +276,7 @@ void vout_DropPicture( vout_thread_t *p_vout, picture_t *p_pic )
vout_UsePictureLocked
(
p_vout
,
p_pic
);
vout_UsePictureLocked
(
p_vout
,
p_pic
);
}
}
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
p
icture_lock
);
}
}
/**
/**
...
@@ -287,9 +287,9 @@ void vout_DropPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -287,9 +287,9 @@ void vout_DropPicture( vout_thread_t *p_vout, picture_t *p_pic )
*/
*/
void
vout_LinkPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
void
vout_LinkPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
{
{
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
p
icture_lock
);
p_pic
->
i_refcount
++
;
p_pic
->
i_refcount
++
;
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
p
icture_lock
);
}
}
/**
/**
...
@@ -299,7 +299,7 @@ void vout_LinkPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -299,7 +299,7 @@ void vout_LinkPicture( vout_thread_t *p_vout, picture_t *p_pic )
*/
*/
void
vout_UnlinkPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
void
vout_UnlinkPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
{
{
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
p
icture_lock
);
if
(
p_pic
->
i_refcount
>
0
)
if
(
p_pic
->
i_refcount
>
0
)
p_pic
->
i_refcount
--
;
p_pic
->
i_refcount
--
;
...
@@ -311,7 +311,7 @@ void vout_UnlinkPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -311,7 +311,7 @@ void vout_UnlinkPicture( vout_thread_t *p_vout, picture_t *p_pic )
(
p_pic
->
i_status
==
DISPLAYED_PICTURE
||
p_pic
->
i_status
==
RESERVED_PICTURE
)
)
(
p_pic
->
i_status
==
DISPLAYED_PICTURE
||
p_pic
->
i_status
==
RESERVED_PICTURE
)
)
DestroyPicture
(
p_vout
,
p_pic
);
DestroyPicture
(
p_vout
,
p_pic
);
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
p
icture_lock
);
}
}
/**
/**
...
@@ -346,7 +346,7 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
...
@@ -346,7 +346,7 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
/* The picture buffer is in slow memory. We'll use
/* The picture buffer is in slow memory. We'll use
* the "2 * VOUT_MAX_PICTURES + 1" picture as a temporary
* the "2 * VOUT_MAX_PICTURES + 1" picture as a temporary
* one for subpictures rendering. */
* one for subpictures rendering. */
p_render
=
&
p_vout
->
p_picture
[
2
*
VOUT_MAX_PICTURES
];
p_render
=
&
p_vout
->
p
->
p
_picture
[
2
*
VOUT_MAX_PICTURES
];
if
(
p_render
->
i_status
==
FREE_PICTURE
)
if
(
p_render
->
i_status
==
FREE_PICTURE
)
{
{
vout_AllocatePicture
(
VLC_OBJECT
(
p_vout
),
vout_AllocatePicture
(
VLC_OBJECT
(
p_vout
),
...
...
src/video_output/vout_wrapper.c
View file @
38ac8544
...
@@ -163,9 +163,9 @@ int vout_InitWrapper(vout_thread_t *vout)
...
@@ -163,9 +163,9 @@ int vout_InitWrapper(vout_thread_t *vout)
vout
->
fmt_in
.
i_visible_height
!=
source
.
i_visible_height
||
vout
->
fmt_in
.
i_visible_height
!=
source
.
i_visible_height
||
vout
->
fmt_in
.
i_x_offset
!=
source
.
i_x_offset
||
vout
->
fmt_in
.
i_x_offset
!=
source
.
i_x_offset
||
vout
->
fmt_in
.
i_y_offset
!=
source
.
i_y_offset
)
vout
->
fmt_in
.
i_y_offset
!=
source
.
i_y_offset
)
vout
->
i_changes
|=
VOUT_CROP_CHANGE
;
vout
->
p
->
i_changes
|=
VOUT_CROP_CHANGE
;
if
(
vout
->
b_on_top
)
if
(
vout
->
p
->
b_on_top
)
vout_SetWindowState
(
vd
,
VOUT_WINDOW_STATE_ABOVE
);
vout_SetWindowState
(
vd
,
VOUT_WINDOW_STATE_ABOVE
);
/* XXX For non dr case, the current vout implementation force us to
/* XXX For non dr case, the current vout implementation force us to
...
@@ -175,14 +175,14 @@ int vout_InitWrapper(vout_thread_t *vout)
...
@@ -175,14 +175,14 @@ int vout_InitWrapper(vout_thread_t *vout)
sys
->
use_dr
=
!
vout_IsDisplayFiltered
(
vd
);
sys
->
use_dr
=
!
vout_IsDisplayFiltered
(
vd
);
const
bool
allow_dr
=
!
vd
->
info
.
has_pictures_invalid
&&
sys
->
use_dr
;
const
bool
allow_dr
=
!
vd
->
info
.
has_pictures_invalid
&&
sys
->
use_dr
;
const
int
picture_max
=
allow_dr
?
VOUT_MAX_PICTURES
:
1
;
const
int
picture_max
=
allow_dr
?
VOUT_MAX_PICTURES
:
1
;
for
(
vout
->
output
.
i_pictures
=
0
;
for
(
vout
->
p
->
output
.
i_pictures
=
0
;
vout
->
output
.
i_pictures
<
picture_max
;
vout
->
p
->
output
.
i_pictures
<
picture_max
;
vout
->
output
.
i_pictures
++
)
{
vout
->
p
->
output
.
i_pictures
++
)
{
/* Find an empty picture slot */
/* Find an empty picture slot */
picture_t
*
picture
=
NULL
;
picture_t
*
picture
=
NULL
;
for
(
int
index
=
0
;
index
<
VOUT_MAX_PICTURES
;
index
++
)
{
for
(
int
index
=
0
;
index
<
VOUT_MAX_PICTURES
;
index
++
)
{
if
(
vout
->
p_picture
[
index
].
i_status
==
FREE_PICTURE
)
{
if
(
vout
->
p
->
p
_picture
[
index
].
i_status
==
FREE_PICTURE
)
{
picture
=
&
vout
->
p_picture
[
index
];
picture
=
&
vout
->
p
->
p
_picture
[
index
];
break
;
break
;
}
}
}
}
...
@@ -218,7 +218,7 @@ int vout_InitWrapper(vout_thread_t *vout)
...
@@ -218,7 +218,7 @@ int vout_InitWrapper(vout_thread_t *vout)
picture
->
i_status
=
DESTROYED_PICTURE
;
picture
->
i_status
=
DESTROYED_PICTURE
;
picture
->
i_type
=
DIRECT_PICTURE
;
picture
->
i_type
=
DIRECT_PICTURE
;
vout
->
output
.
pp_picture
[
vout
->
output
.
i_pictures
]
=
picture
;
vout
->
p
->
output
.
pp_picture
[
vout
->
p
->
output
.
i_pictures
]
=
picture
;
}
}
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
...
@@ -231,7 +231,7 @@ void vout_EndWrapper(vout_thread_t *vout)
...
@@ -231,7 +231,7 @@ void vout_EndWrapper(vout_thread_t *vout)
vout_sys_t
*
sys
=
vout
->
p
->
p_sys
;
vout_sys_t
*
sys
=
vout
->
p
->
p_sys
;
for
(
int
i
=
0
;
i
<
VOUT_MAX_PICTURES
;
i
++
)
{
for
(
int
i
=
0
;
i
<
VOUT_MAX_PICTURES
;
i
++
)
{
picture_t
*
picture
=
&
vout
->
p_picture
[
i
];
picture_t
*
picture
=
&
vout
->
p
->
p
_picture
[
i
];
if
(
picture
->
i_type
!=
DIRECT_PICTURE
)
if
(
picture
->
i_type
!=
DIRECT_PICTURE
)
continue
;
continue
;
...
@@ -256,29 +256,29 @@ int vout_ManageWrapper(vout_thread_t *vout)
...
@@ -256,29 +256,29 @@ int vout_ManageWrapper(vout_thread_t *vout)
vout_sys_t
*
sys
=
vout
->
p
->
p_sys
;
vout_sys_t
*
sys
=
vout
->
p
->
p_sys
;
vout_display_t
*
vd
=
sys
->
vd
;
vout_display_t
*
vd
=
sys
->
vd
;
while
(
vout
->
i_changes
&
(
VOUT_FULLSCREEN_CHANGE
|
while
(
vout
->
p
->
i_changes
&
(
VOUT_FULLSCREEN_CHANGE
|
VOUT_ASPECT_CHANGE
|
VOUT_ASPECT_CHANGE
|
VOUT_ZOOM_CHANGE
|
VOUT_ZOOM_CHANGE
|
VOUT_SCALE_CHANGE
|
VOUT_SCALE_CHANGE
|
VOUT_ON_TOP_CHANGE
|
VOUT_ON_TOP_CHANGE
|
VOUT_CROP_CHANGE
))
{
VOUT_CROP_CHANGE
))
{
/* */
/* */
if
(
vout
->
i_changes
&
VOUT_FULLSCREEN_CHANGE
)
{
if
(
vout
->
p
->
i_changes
&
VOUT_FULLSCREEN_CHANGE
)
{
vout
->
b_fullscreen
=
!
vout
->
b_fullscreen
;
vout
->
p
->
b_fullscreen
=
!
vout
->
p
->
b_fullscreen
;
var_SetBool
(
vout
,
"fullscreen"
,
vout
->
b_fullscreen
);
var_SetBool
(
vout
,
"fullscreen"
,
vout
->
p
->
b_fullscreen
);
vout_SetDisplayFullscreen
(
vd
,
vout
->
b_fullscreen
);
vout_SetDisplayFullscreen
(
vd
,
vout
->
p
->
b_fullscreen
);
vout
->
i_changes
&=
~
VOUT_FULLSCREEN_CHANGE
;
vout
->
p
->
i_changes
&=
~
VOUT_FULLSCREEN_CHANGE
;
}
}
if
(
vout
->
i_changes
&
VOUT_ASPECT_CHANGE
)
{
if
(
vout
->
p
->
i_changes
&
VOUT_ASPECT_CHANGE
)
{
vout
->
fmt_out
.
i_sar_num
=
vout
->
fmt_in
.
i_sar_num
;
vout
->
fmt_out
.
i_sar_num
=
vout
->
fmt_in
.
i_sar_num
;
vout
->
fmt_out
.
i_sar_den
=
vout
->
fmt_in
.
i_sar_den
;
vout
->
fmt_out
.
i_sar_den
=
vout
->
fmt_in
.
i_sar_den
;
vout_SetDisplayAspect
(
vd
,
vout
->
fmt_in
.
i_sar_num
,
vout
->
fmt_in
.
i_sar_den
);
vout_SetDisplayAspect
(
vd
,
vout
->
fmt_in
.
i_sar_num
,
vout
->
fmt_in
.
i_sar_den
);
vout
->
i_changes
&=
~
VOUT_ASPECT_CHANGE
;
vout
->
p
->
i_changes
&=
~
VOUT_ASPECT_CHANGE
;
}
}
if
(
vout
->
i_changes
&
VOUT_ZOOM_CHANGE
)
{
if
(
vout
->
p
->
i_changes
&
VOUT_ZOOM_CHANGE
)
{
const
float
zoom
=
var_GetFloat
(
vout
,
"scale"
);
const
float
zoom
=
var_GetFloat
(
vout
,
"scale"
);
unsigned
den
=
ZOOM_FP_FACTOR
;
unsigned
den
=
ZOOM_FP_FACTOR
;
...
@@ -290,23 +290,23 @@ int vout_ManageWrapper(vout_thread_t *vout)
...
@@ -290,23 +290,23 @@ int vout_ManageWrapper(vout_thread_t *vout)
vout_SetDisplayZoom
(
vd
,
num
,
den
);
vout_SetDisplayZoom
(
vd
,
num
,
den
);
vout
->
i_changes
&=
~
VOUT_ZOOM_CHANGE
;
vout
->
p
->
i_changes
&=
~
VOUT_ZOOM_CHANGE
;
}
}
if
(
vout
->
i_changes
&
VOUT_SCALE_CHANGE
)
{
if
(
vout
->
p
->
i_changes
&
VOUT_SCALE_CHANGE
)
{
const
bool
is_display_filled
=
var_GetBool
(
vout
,
"autoscale"
);
const
bool
is_display_filled
=
var_GetBool
(
vout
,
"autoscale"
);
vout_SetDisplayFilled
(
vd
,
is_display_filled
);
vout_SetDisplayFilled
(
vd
,
is_display_filled
);
vout
->
i_changes
&=
~
VOUT_SCALE_CHANGE
;
vout
->
p
->
i_changes
&=
~
VOUT_SCALE_CHANGE
;
}
}
if
(
vout
->
i_changes
&
VOUT_ON_TOP_CHANGE
)
{
if
(
vout
->
p
->
i_changes
&
VOUT_ON_TOP_CHANGE
)
{
vout_SetWindowState
(
vd
,
vout
->
b_on_top
vout_SetWindowState
(
vd
,
vout
->
p
->
b_on_top
?
VOUT_WINDOW_STATE_ABOVE
?
VOUT_WINDOW_STATE_ABOVE
:
VOUT_WINDOW_STATE_NORMAL
);
:
VOUT_WINDOW_STATE_NORMAL
);
vout
->
i_changes
&=
~
VOUT_ON_TOP_CHANGE
;
vout
->
p
->
i_changes
&=
~
VOUT_ON_TOP_CHANGE
;
}
}
if
(
vout
->
i_changes
&
VOUT_CROP_CHANGE
)
{
if
(
vout
->
p
->
i_changes
&
VOUT_CROP_CHANGE
)
{
const
video_format_t
crop
=
vout
->
fmt_in
;
const
video_format_t
crop
=
vout
->
fmt_in
;
const
video_format_t
org
=
vout
->
fmt_render
;
const
video_format_t
org
=
vout
->
fmt_render
;
/* FIXME because of rounding errors, the reconstructed ratio is wrong */
/* FIXME because of rounding errors, the reconstructed ratio is wrong */
...
@@ -328,13 +328,13 @@ int vout_ManageWrapper(vout_thread_t *vout)
...
@@ -328,13 +328,13 @@ int vout_ManageWrapper(vout_thread_t *vout)
vout_SetDisplayCrop
(
vd
,
num
,
den
,
vout_SetDisplayCrop
(
vd
,
num
,
den
,
crop
.
i_x_offset
,
crop
.
i_y_offset
,
crop
.
i_x_offset
,
crop
.
i_y_offset
,
crop
.
i_visible_width
,
crop
.
i_visible_height
);
crop
.
i_visible_width
,
crop
.
i_visible_height
);
vout
->
i_changes
&=
~
VOUT_CROP_CHANGE
;
vout
->
p
->
i_changes
&=
~
VOUT_CROP_CHANGE
;
}
}
}
}
if
(
sys
->
use_dr
&&
vout_AreDisplayPicturesInvalid
(
vd
))
{
if
(
sys
->
use_dr
&&
vout_AreDisplayPicturesInvalid
(
vd
))
{
vout
->
i_changes
|=
VOUT_PICTURE_BUFFERS_CHANGE
;
vout
->
p
->
i_changes
|=
VOUT_PICTURE_BUFFERS_CHANGE
;
}
}
vout_ManageDisplay
(
vd
,
!
sys
->
use_dr
);
vout_ManageDisplay
(
vd
,
!
sys
->
use_dr
);
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
...
...
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