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
b0123347
Commit
b0123347
authored
Sep 28, 2008
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Privatized part of vout fields.
parent
c6021166
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
164 additions
and
153 deletions
+164
-153
include/vlc_vout.h
include/vlc_vout.h
+7
-47
modules/gui/beos/VideoOutput.cpp
modules/gui/beos/VideoOutput.cpp
+0
-2
modules/gui/qnx/vout.c
modules/gui/qnx/vout.c
+0
-6
src/video_output/video_output.c
src/video_output/video_output.c
+85
-77
src/video_output/vout_internal.h
src/video_output/vout_internal.h
+49
-0
src/video_output/vout_intf.c
src/video_output/vout_intf.c
+17
-16
src/video_output/vout_pictures.c
src/video_output/vout_pictures.c
+6
-5
No files found.
include/vlc_vout.h
View file @
b0123347
...
@@ -469,6 +469,11 @@ VLC_EXPORT( int, __vout_AllocatePicture,( vlc_object_t *p_this, picture_t *p_pic
...
@@ -469,6 +469,11 @@ VLC_EXPORT( int, __vout_AllocatePicture,( vlc_object_t *p_this, picture_t *p_pic
* @{
* @{
*/
*/
/**
* Video ouput thread private structure
*/
typedef
struct
vout_thread_sys_t
vout_thread_sys_t
;
/**
/**
* Video output thread descriptor
* Video output thread descriptor
*
*
...
@@ -484,7 +489,6 @@ struct vout_thread_t
...
@@ -484,7 +489,6 @@ struct vout_thread_t
/**@{*/
/**@{*/
vlc_mutex_t
picture_lock
;
/**< picture heap lock */
vlc_mutex_t
picture_lock
;
/**< picture heap lock */
vlc_mutex_t
change_lock
;
/**< thread change lock */
vlc_mutex_t
change_lock
;
/**< thread change lock */
vlc_mutex_t
vfilter_lock
;
/**< video filter2 change lock */
vout_sys_t
*
p_sys
;
/**< system output method */
vout_sys_t
*
p_sys
;
/**< system output method */
/**@}*/
/**@}*/
...
@@ -492,18 +496,11 @@ struct vout_thread_t
...
@@ -492,18 +496,11 @@ struct vout_thread_t
/**@{*/
/**@{*/
uint16_t
i_changes
;
/**< changes made to the thread.
uint16_t
i_changes
;
/**< changes made to the thread.
\see \ref vout_changes */
\see \ref vout_changes */
float
f_gamma
;
/**< gamma */
bool
b_grayscale
;
/**< color or grayscale display */
bool
b_info
;
/**< print additional information */
bool
b_interface
;
/**< render interface */
bool
b_scale
;
/**< allow picture scaling */
bool
b_scale
;
/**< allow picture scaling */
bool
b_fullscreen
;
/**< toogle fullscreen display */
bool
b_fullscreen
;
/**< toogle fullscreen display */
uint32_t
render_time
;
/**< last picture render time */
unsigned
int
i_window_width
;
/**< video window width */
unsigned
int
i_window_width
;
/**< video window width */
unsigned
int
i_window_height
;
/**< video window height */
unsigned
int
i_window_height
;
/**< video window height */
unsigned
int
i_alignment
;
/**< video alignment in window */
unsigned
int
i_alignment
;
/**< video alignment in window */
unsigned
int
i_par_num
;
/**< monitor pixel aspect-ratio */
unsigned
int
i_par_den
;
/**< monitor pixel aspect-ratio */
struct
vout_window_t
*
p_window
;
/**< window for embedded vout (if any) */
struct
vout_window_t
*
p_window
;
/**< window for embedded vout (if any) */
/**@}*/
/**@}*/
...
@@ -522,21 +519,11 @@ struct vout_thread_t
...
@@ -522,21 +519,11 @@ struct vout_thread_t
int
(
*
pf_control
)
(
vout_thread_t
*
,
int
,
va_list
);
int
(
*
pf_control
)
(
vout_thread_t
*
,
int
,
va_list
);
/**@}*/
/**@}*/
/** \name Statistics
* These numbers are not supposed to be accurate, but are a
* good indication of the thread status */
/**@{*/
count_t
c_fps_samples
;
/**< picture counts */
mtime_t
p_fps_sample
[
VOUT_FPS_SAMPLES
];
/**< FPS samples dates */
/**@}*/
/** \name Video heap and translation tables */
/** \name Video heap and translation tables */
/**@{*/
/**@{*/
int
i_heap_size
;
/**< heap size */
int
i_heap_size
;
/**< heap size */
picture_heap_t
render
;
/**< rendered pictures */
picture_heap_t
render
;
/**< rendered pictures */
picture_heap_t
output
;
/**< direct buffers */
picture_heap_t
output
;
/**< direct buffers */
bool
b_direct
;
/**< rendered are like direct ? */
filter_t
*
p_chroma
;
/**< translation tables */
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 */
...
@@ -549,34 +536,11 @@ struct vout_thread_t
...
@@ -549,34 +536,11 @@ struct vout_thread_t
/* Subpicture unit */
/* Subpicture unit */
spu_t
*
p_spu
;
spu_t
*
p_spu
;
/* Statistics */
count_t
c_loops
;
count_t
c_pictures
,
c_late_pictures
;
mtime_t
display_jitter
;
/**< average deviation from the PTS */
count_t
c_jitter_samples
;
/**< number of samples used
for the calculation of the
jitter */
/** delay created by internal caching */
int
i_pts_delay
;
/* Filter chain */
char
*
psz_filter_chain
;
bool
b_filter_change
;
/* Video filter2 chain */
filter_chain_t
*
p_vf2_chain
;
char
*
psz_vf2
;
/* Misc */
bool
b_snapshot
;
/**< take one snapshot on the next loop */
/* Video output configuration */
/* Video output configuration */
config_chain_t
*
p_cfg
;
config_chain_t
*
p_cfg
;
/* Show media title on videoutput */
/* Private vout_thread data */
bool
b_title_show
;
vout_thread_sys_t
*
p
;
mtime_t
i_title_timeout
;
int
i_title_position
;
};
};
#define I_OUTPUTPICTURES p_vout->output.i_pictures
#define I_OUTPUTPICTURES p_vout->output.i_pictures
...
@@ -591,14 +555,10 @@ struct vout_thread_t
...
@@ -591,14 +555,10 @@ struct vout_thread_t
*/
*/
/** b_info changed */
/** b_info changed */
#define VOUT_INFO_CHANGE 0x0001
#define VOUT_INFO_CHANGE 0x0001
/** b_grayscale changed */
#define VOUT_GRAYSCALE_CHANGE 0x0002
/** b_interface changed */
/** b_interface changed */
#define VOUT_INTF_CHANGE 0x0004
#define VOUT_INTF_CHANGE 0x0004
/** b_scale changed */
/** b_scale changed */
#define VOUT_SCALE_CHANGE 0x0008
#define VOUT_SCALE_CHANGE 0x0008
/** gamma changed */
#define VOUT_GAMMA_CHANGE 0x0010
/** b_cursor changed */
/** b_cursor changed */
#define VOUT_CURSOR_CHANGE 0x0020
#define VOUT_CURSOR_CHANGE 0x0020
/** b_fullscreen changed */
/** b_fullscreen changed */
...
...
modules/gui/beos/VideoOutput.cpp
View file @
b0123347
...
@@ -1271,8 +1271,6 @@ int Init( vout_thread_t *p_vout )
...
@@ -1271,8 +1271,6 @@ int Init( vout_thread_t *p_vout )
p_vout
->
output
.
i_chroma
=
colspace
[
p_vout
->
p_sys
->
p_window
->
colspace_index
].
chroma
;
p_vout
->
output
.
i_chroma
=
colspace
[
p_vout
->
p_sys
->
p_window
->
colspace_index
].
chroma
;
p_vout
->
p_sys
->
i_index
=
0
;
p_vout
->
p_sys
->
i_index
=
0
;
p_vout
->
b_direct
=
1
;
p_vout
->
output
.
i_rmask
=
0x00ff0000
;
p_vout
->
output
.
i_rmask
=
0x00ff0000
;
p_vout
->
output
.
i_gmask
=
0x0000ff00
;
p_vout
->
output
.
i_gmask
=
0x0000ff00
;
p_vout
->
output
.
i_bmask
=
0x000000ff
;
p_vout
->
output
.
i_bmask
=
0x000000ff
;
...
...
modules/gui/qnx/vout.c
View file @
b0123347
...
@@ -378,12 +378,6 @@ static int QNXManage( vout_thread_t *p_vout )
...
@@ -378,12 +378,6 @@ static int QNXManage( vout_thread_t *p_vout )
p_vout
->
i_changes
|=
VOUT_FULLSCREEN_CHANGE
;
p_vout
->
i_changes
|=
VOUT_FULLSCREEN_CHANGE
;
break
;
break
;
case
Pk_c
:
case
Pk_C
:
p_vout
->
b_grayscale
=
!
p_vout
->
b_grayscale
;
p_vout
->
i_changes
|=
VOUT_GRAYSCALE_CHANGE
;
break
;
default:
default:
break
;
break
;
}
}
...
...
src/video_output/video_output.c
View file @
b0123347
...
@@ -160,7 +160,7 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
...
@@ -160,7 +160,7 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
/* We don't directly check for the "vout-filter" variable for obvious
/* We don't directly check for the "vout-filter" variable for obvious
* performance reasons. */
* performance reasons. */
if
(
p_vout
->
b_filter_change
)
if
(
p_vout
->
p
->
b_filter_change
)
{
{
var_Get
(
p_vout
,
"vout-filter"
,
&
val
);
var_Get
(
p_vout
,
"vout-filter"
,
&
val
);
psz_filter_chain
=
val
.
psz_string
;
psz_filter_chain
=
val
.
psz_string
;
...
@@ -170,15 +170,15 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
...
@@ -170,15 +170,15 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
free
(
psz_filter_chain
);
free
(
psz_filter_chain
);
psz_filter_chain
=
NULL
;
psz_filter_chain
=
NULL
;
}
}
if
(
p_vout
->
p
sz_filter_chain
&&
!*
p_vout
->
psz_filter_chain
)
if
(
p_vout
->
p
->
psz_filter_chain
&&
!*
p_vout
->
p
->
psz_filter_chain
)
{
{
free
(
p_vout
->
psz_filter_chain
);
free
(
p_vout
->
p
->
p
sz_filter_chain
);
p_vout
->
psz_filter_chain
=
NULL
;
p_vout
->
p
->
p
sz_filter_chain
=
NULL
;
}
}
if
(
!
psz_filter_chain
&&
!
p_vout
->
psz_filter_chain
)
if
(
!
psz_filter_chain
&&
!
p_vout
->
p
->
p
sz_filter_chain
)
{
{
p_vout
->
b_filter_change
=
false
;
p_vout
->
p
->
b_filter_change
=
false
;
}
}
free
(
psz_filter_chain
);
free
(
psz_filter_chain
);
...
@@ -187,7 +187,7 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
...
@@ -187,7 +187,7 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
if
(
p_vout
->
fmt_render
.
i_chroma
!=
p_fmt
->
i_chroma
||
if
(
p_vout
->
fmt_render
.
i_chroma
!=
p_fmt
->
i_chroma
||
p_vout
->
fmt_render
.
i_width
!=
p_fmt
->
i_width
||
p_vout
->
fmt_render
.
i_width
!=
p_fmt
->
i_width
||
p_vout
->
fmt_render
.
i_height
!=
p_fmt
->
i_height
||
p_vout
->
fmt_render
.
i_height
!=
p_fmt
->
i_height
||
p_vout
->
b_filter_change
)
p_vout
->
p
->
b_filter_change
)
{
{
vlc_mutex_unlock
(
&
p_vout
->
change_lock
);
vlc_mutex_unlock
(
&
p_vout
->
change_lock
);
...
@@ -254,7 +254,7 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
...
@@ -254,7 +254,7 @@ vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
/* Display title if we are not using the vout given to vout_Request.
/* Display title if we are not using the vout given to vout_Request.
* XXX for now b_vout_provided is always true at this stage */
* XXX for now b_vout_provided is always true at this stage */
if
(
p_vout
->
b_title_show
&&
!
b_vout_provided
)
if
(
p_vout
->
p
->
b_title_show
&&
!
b_vout_provided
)
DisplayTitleOnOSD
(
p_vout
);
DisplayTitleOnOSD
(
p_vout
);
}
}
}
}
...
@@ -306,6 +306,14 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
...
@@ -306,6 +306,14 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
if
(
p_vout
==
NULL
)
if
(
p_vout
==
NULL
)
return
NULL
;
return
NULL
;
/* */
p_vout
->
p
=
calloc
(
1
,
sizeof
(
p_vout
->
p
)
);
if
(
!
p_vout
->
p
)
{
vlc_object_release
(
p_vout
);
return
NULL
;
}
/* Initialize pictures - translation tables and functions
/* Initialize pictures - translation tables and functions
* will be initialized later in InitThread */
* will be initialized later in InitThread */
for
(
i_index
=
0
;
i_index
<
2
*
VOUT_MAX_PICTURES
+
1
;
i_index
++
)
for
(
i_index
=
0
;
i_index
<
2
*
VOUT_MAX_PICTURES
+
1
;
i_index
++
)
...
@@ -351,24 +359,21 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
...
@@ -351,24 +359,21 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
/* Initialize misc stuff */
/* Initialize misc stuff */
p_vout
->
i_changes
=
0
;
p_vout
->
i_changes
=
0
;
p_vout
->
f_gamma
=
0
;
p_vout
->
b_grayscale
=
0
;
p_vout
->
b_info
=
0
;
p_vout
->
b_interface
=
0
;
p_vout
->
b_scale
=
1
;
p_vout
->
b_scale
=
1
;
p_vout
->
b_fullscreen
=
0
;
p_vout
->
b_fullscreen
=
0
;
p_vout
->
i_alignment
=
0
;
p_vout
->
i_alignment
=
0
;
p_vout
->
render_time
=
10
;
p_vout
->
p
->
render_time
=
10
;
p_vout
->
c_fps_samples
=
0
;
p_vout
->
p
->
c_fps_samples
=
0
;
p_vout
->
b_filter_change
=
0
;
p_vout
->
p
->
b_filter_change
=
0
;
p_vout
->
pf_control
=
NULL
;
p_vout
->
pf_control
=
NULL
;
p_vout
->
p_window
=
NULL
;
p_vout
->
p_window
=
NULL
;
p_vout
->
i_par_num
=
p_vout
->
i_par_den
=
1
;
p_vout
->
p
->
i_par_num
=
p_vout
->
p
->
i_par_den
=
1
;
/* Initialize locks */
/* Initialize locks */
vlc_mutex_init
(
&
p_vout
->
picture_lock
);
vlc_mutex_init
(
&
p_vout
->
picture_lock
);
vlc_mutex_init
(
&
p_vout
->
change_lock
);
vlc_mutex_init
(
&
p_vout
->
change_lock
);
vlc_mutex_init
(
&
p_vout
->
vfilter_lock
);
vlc_mutex_init
(
&
p_vout
->
p
->
vfilter_lock
);
/* Mouse coordinates */
/* Mouse coordinates */
var_Create
(
p_vout
,
"mouse-x"
,
VLC_VAR_INTEGER
);
var_Create
(
p_vout
,
"mouse-x"
,
VLC_VAR_INTEGER
);
...
@@ -394,11 +399,11 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
...
@@ -394,11 +399,11 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
if
(
p_parent
->
i_object_type
!=
VLC_OBJECT_VOUT
)
if
(
p_parent
->
i_object_type
!=
VLC_OBJECT_VOUT
)
{
{
/* Look for the default filter configuration */
/* Look for the default filter configuration */
p_vout
->
psz_filter_chain
=
p_vout
->
p
->
p
sz_filter_chain
=
var_CreateGetStringCommand
(
p_vout
,
"vout-filter"
);
var_CreateGetStringCommand
(
p_vout
,
"vout-filter"
);
/* Apply video filter2 objects on the first vout */
/* Apply video filter2 objects on the first vout */
p_vout
->
psz_vf2
=
p_vout
->
p
->
p
sz_vf2
=
var_CreateGetStringCommand
(
p_vout
,
"video-filter"
);
var_CreateGetStringCommand
(
p_vout
,
"video-filter"
);
}
}
else
else
...
@@ -407,25 +412,25 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
...
@@ -407,25 +412,25 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
char
*
psz_tmp
;
char
*
psz_tmp
;
/* Ugly hack to jump to our configuration chain */
/* Ugly hack to jump to our configuration chain */
p_vout
->
psz_filter_chain
p_vout
->
p
->
p
sz_filter_chain
=
((
vout_thread_t
*
)
p_parent
)
->
psz_filter_chain
;
=
((
vout_thread_t
*
)
p_parent
)
->
p
->
p
sz_filter_chain
;
p_vout
->
psz_filter_chain
p_vout
->
p
->
p
sz_filter_chain
=
config_ChainCreate
(
&
psz_tmp
,
&
p_cfg
,
p_vout
->
psz_filter_chain
);
=
config_ChainCreate
(
&
psz_tmp
,
&
p_cfg
,
p_vout
->
p
->
p
sz_filter_chain
);
config_ChainDestroy
(
p_cfg
);
config_ChainDestroy
(
p_cfg
);
free
(
psz_tmp
);
free
(
psz_tmp
);
/* Create a video filter2 var ... but don't inherit values */
/* Create a video filter2 var ... but don't inherit values */
var_Create
(
p_vout
,
"video-filter"
,
var_Create
(
p_vout
,
"video-filter"
,
VLC_VAR_STRING
|
VLC_VAR_ISCOMMAND
);
VLC_VAR_STRING
|
VLC_VAR_ISCOMMAND
);
p_vout
->
psz_vf2
=
var_GetString
(
p_vout
,
"video-filter"
);
p_vout
->
p
->
p
sz_vf2
=
var_GetString
(
p_vout
,
"video-filter"
);
}
}
var_AddCallback
(
p_vout
,
"video-filter"
,
VideoFilter2Callback
,
NULL
);
var_AddCallback
(
p_vout
,
"video-filter"
,
VideoFilter2Callback
,
NULL
);
p_vout
->
p_vf2_chain
=
filter_chain_New
(
p_vout
,
"video filter2"
,
p_vout
->
p
->
p
_vf2_chain
=
filter_chain_New
(
p_vout
,
"video filter2"
,
false
,
video_filter_buffer_allocation_init
,
NULL
,
p_vout
);
false
,
video_filter_buffer_allocation_init
,
NULL
,
p_vout
);
/* Choose the video output module */
/* Choose the video output module */
if
(
!
p_vout
->
p
sz_filter_chain
||
!*
p_vout
->
psz_filter_chain
)
if
(
!
p_vout
->
p
->
psz_filter_chain
||
!*
p_vout
->
p
->
psz_filter_chain
)
{
{
var_Create
(
p_vout
,
"vout"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Create
(
p_vout
,
"vout"
,
VLC_VAR_STRING
|
VLC_VAR_DOINHERIT
);
var_Get
(
p_vout
,
"vout"
,
&
val
);
var_Get
(
p_vout
,
"vout"
,
&
val
);
...
@@ -433,8 +438,8 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
...
@@ -433,8 +438,8 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
}
}
else
else
{
{
psz_parser
=
strdup
(
p_vout
->
psz_filter_chain
);
psz_parser
=
strdup
(
p_vout
->
p
->
p
sz_filter_chain
);
p_vout
->
b_title_show
=
false
;
p_vout
->
p
->
b_title_show
=
false
;
}
}
/* Create the vout thread */
/* Create the vout thread */
...
@@ -443,8 +448,8 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
...
@@ -443,8 +448,8 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
free
(
psz_tmp
);
free
(
psz_tmp
);
p_vout
->
p_cfg
=
p_cfg
;
p_vout
->
p_cfg
=
p_cfg
;
p_vout
->
p_module
=
module_need
(
p_vout
,
p_vout
->
p_module
=
module_need
(
p_vout
,
(
p_vout
->
p
sz_filter_chain
&&
*
p_vout
->
psz_filter_chain
)
?
(
p_vout
->
p
->
psz_filter_chain
&&
*
p_vout
->
p
->
psz_filter_chain
)
?
"video filter"
:
"video output"
,
psz_name
,
p_vout
->
p
sz_filter_chain
&&
*
p_vout
->
psz_filter_chain
);
"video filter"
:
"video output"
,
psz_name
,
p_vout
->
p
->
psz_filter_chain
&&
*
p_vout
->
p
->
psz_filter_chain
);
free
(
psz_name
);
free
(
psz_name
);
if
(
p_vout
->
p_module
==
NULL
)
if
(
p_vout
->
p_module
==
NULL
)
...
@@ -493,12 +498,12 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
...
@@ -493,12 +498,12 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
VLC_OBJECT_INPUT
,
FIND_ANYWHERE
);
VLC_OBJECT_INPUT
,
FIND_ANYWHERE
);
if
(
p_input_thread
)
if
(
p_input_thread
)
{
{
p_vout
->
i_pts_delay
=
p_input_thread
->
i_pts_delay
;
p_vout
->
p
->
i_pts_delay
=
p_input_thread
->
i_pts_delay
;
vlc_object_release
(
p_input_thread
);
vlc_object_release
(
p_input_thread
);
}
}
else
else
{
{
p_vout
->
i_pts_delay
=
DEFAULT_PTS_DELAY
;
p_vout
->
p
->
i_pts_delay
=
DEFAULT_PTS_DELAY
;
}
}
if
(
vlc_thread_create
(
p_vout
,
"video output"
,
RunThread
,
if
(
vlc_thread_create
(
p_vout
,
"video output"
,
RunThread
,
...
@@ -550,12 +555,14 @@ static void vout_Destructor( vlc_object_t * p_this )
...
@@ -550,12 +555,14 @@ static void vout_Destructor( vlc_object_t * p_this )
/* Destroy the locks */
/* Destroy the locks */
vlc_mutex_destroy
(
&
p_vout
->
picture_lock
);
vlc_mutex_destroy
(
&
p_vout
->
picture_lock
);
vlc_mutex_destroy
(
&
p_vout
->
change_lock
);
vlc_mutex_destroy
(
&
p_vout
->
change_lock
);
vlc_mutex_destroy
(
&
p_vout
->
vfilter_lock
);
vlc_mutex_destroy
(
&
p_vout
->
p
->
vfilter_lock
);
free
(
p_vout
->
psz_filter_chain
);
free
(
p_vout
->
p
->
p
sz_filter_chain
);
config_ChainDestroy
(
p_vout
->
p_cfg
);
config_ChainDestroy
(
p_vout
->
p_cfg
);
free
(
p_vout
->
p
);
#ifndef __APPLE__
#ifndef __APPLE__
vout_thread_t
*
p_another_vout
;
vout_thread_t
*
p_another_vout
;
...
@@ -706,7 +713,7 @@ static int InitThread( vout_thread_t *p_vout )
...
@@ -706,7 +713,7 @@ static int InitThread( vout_thread_t *p_vout )
* directly decode into them ! Map the first render buffers to
* directly decode into them ! Map the first render buffers to
* the first direct buffers, but keep the first direct buffer
* the first direct buffers, but keep the first direct buffer
* for memcpy operations */
* for memcpy operations */
p_vout
->
b_direct
=
1
;
p_vout
->
p
->
b_direct
=
true
;
for
(
i
=
1
;
i
<
VOUT_MAX_PICTURES
;
i
++
)
for
(
i
=
1
;
i
<
VOUT_MAX_PICTURES
;
i
++
)
{
{
...
@@ -731,7 +738,7 @@ static int InitThread( vout_thread_t *p_vout )
...
@@ -731,7 +738,7 @@ static int InitThread( vout_thread_t *p_vout )
/* Rats... Something is wrong here, we could not find an output
/* Rats... Something is wrong here, we could not find an output
* plugin able to directly render what we decode. See if we can
* plugin able to directly render what we decode. See if we can
* find a chroma plugin to do the conversion */
* find a chroma plugin to do the conversion */
p_vout
->
b_direct
=
0
;
p_vout
->
p
->
b_direct
=
false
;
if
(
ChromaCreate
(
p_vout
)
)
if
(
ChromaCreate
(
p_vout
)
)
{
{
...
@@ -812,7 +819,7 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -812,7 +819,7 @@ static void* RunThread( vlc_object_t *p_this )
vlc_object_lock
(
p_vout
);
vlc_object_lock
(
p_vout
);
if
(
p_vout
->
b_title_show
)
if
(
p_vout
->
p
->
b_title_show
)
DisplayTitleOnOSD
(
p_vout
);
DisplayTitleOnOSD
(
p_vout
);
/*
/*
...
@@ -898,12 +905,12 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -898,12 +905,12 @@ static void* RunThread( vlc_object_t *p_this )
}
}
/* Compute FPS rate */
/* Compute FPS rate */
p_vout
->
p
_fps_sample
[
p_vout
->
c_fps_samples
++
%
VOUT_FPS_SAMPLES
]
p_vout
->
p
->
p_fps_sample
[
p_vout
->
p
->
c_fps_samples
++
%
VOUT_FPS_SAMPLES
]
=
display_date
;
=
display_date
;
if
(
!
p_picture
->
b_force
&&
if
(
!
p_picture
->
b_force
&&
p_picture
!=
p_last_picture
&&
p_picture
!=
p_last_picture
&&
display_date
<
current_date
+
p_vout
->
render_time
&&
display_date
<
current_date
+
p_vout
->
p
->
render_time
&&
b_drop_late
)
b_drop_late
)
{
{
/* Picture is late: it will be destroyed and the thread
/* Picture is late: it will be destroyed and the thread
...
@@ -916,14 +923,14 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -916,14 +923,14 @@ static void* RunThread( vlc_object_t *p_this )
}
}
if
(
display_date
>
if
(
display_date
>
current_date
+
p_vout
->
i_pts_delay
+
VOUT_BOGUS_DELAY
)
current_date
+
p_vout
->
p
->
i_pts_delay
+
VOUT_BOGUS_DELAY
)
{
{
/* Picture is waaay too early: it will be destroyed */
/* Picture is waaay too early: it will be destroyed */
DropPicture
(
p_vout
,
p_picture
);
DropPicture
(
p_vout
,
p_picture
);
i_lost
++
;
i_lost
++
;
msg_Warn
(
p_vout
,
"vout warning: early picture skipped "
msg_Warn
(
p_vout
,
"vout warning: early picture skipped "
"(%"
PRId64
")"
,
display_date
-
current_date
"(%"
PRId64
")"
,
display_date
-
current_date
-
p_vout
->
i_pts_delay
);
-
p_vout
->
p
->
i_pts_delay
);
continue
;
continue
;
}
}
...
@@ -949,7 +956,7 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -949,7 +956,7 @@ static void* RunThread( vlc_object_t *p_this )
{
{
/* We set the display date to something high, otherwise
/* We set the display date to something high, otherwise
* we'll have lots of problems with late pictures */
* we'll have lots of problems with late pictures */
display_date
=
current_date
+
p_vout
->
render_time
;
display_date
=
current_date
+
p_vout
->
p
->
render_time
;
}
}
}
}
}
}
...
@@ -959,14 +966,14 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -959,14 +966,14 @@ static void* RunThread( vlc_object_t *p_this )
p_filtered_picture
=
NULL
;
p_filtered_picture
=
NULL
;
if
(
p_picture
)
if
(
p_picture
)
p_filtered_picture
=
filter_chain_VideoFilter
(
p_vout
->
p_vf2_chain
,
p_filtered_picture
=
filter_chain_VideoFilter
(
p_vout
->
p
->
p
_vf2_chain
,
p_picture
);
p_picture
);
/* FIXME it is a bit ugly that b_snapshot is not locked but I do not
/* FIXME it is a bit ugly that b_snapshot is not locked but I do not
* know which lock to use (here and in the snapshot callback) */
* know which lock to use (here and in the snapshot callback) */
const
bool
b_snapshot
=
p_vout
->
b_snapshot
;
const
bool
b_snapshot
=
p_vout
->
p
->
b_snapshot
;
if
(
b_snapshot
)
if
(
b_snapshot
)
p_vout
->
b_snapshot
=
false
;
p_vout
->
p
->
b_snapshot
=
false
;
/*
/*
* Check for subpictures to display
* Check for subpictures to display
...
@@ -1010,14 +1017,14 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -1010,14 +1017,14 @@ static void* RunThread( vlc_object_t *p_this )
{
{
mtime_t
current_render_time
=
mdate
()
-
current_date
;
mtime_t
current_render_time
=
mdate
()
-
current_date
;
/* if render time is very large we don't include it in the mean */
/* if render time is very large we don't include it in the mean */
if
(
current_render_time
<
p_vout
->
render_time
+
if
(
current_render_time
<
p_vout
->
p
->
render_time
+
VOUT_DISPLAY_DELAY
)
VOUT_DISPLAY_DELAY
)
{
{
/* Store render time using a sliding mean weighting to
/* Store render time using a sliding mean weighting to
* current value in a 3 to 1 ratio*/
* current value in a 3 to 1 ratio*/
p_vout
->
render_time
*=
3
;
p_vout
->
p
->
render_time
*=
3
;
p_vout
->
render_time
+=
current_render_time
;
p_vout
->
p
->
render_time
+=
current_render_time
;
p_vout
->
render_time
>>=
2
;
p_vout
->
p
->
render_time
>>=
2
;
}
}
}
}
...
@@ -1031,7 +1038,7 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -1031,7 +1038,7 @@ static void* RunThread( vlc_object_t *p_this )
{
{
/* If there are filters in the chain, better give them the picture
/* If there are filters in the chain, better give them the picture
* in advance */
* in advance */
if
(
!
p_vout
->
p
sz_filter_chain
||
!*
p_vout
->
psz_filter_chain
)
if
(
!
p_vout
->
p
->
psz_filter_chain
||
!*
p_vout
->
p
->
psz_filter_chain
)
{
{
mwait
(
display_date
-
VOUT_MWAIT_TOLERANCE
);
mwait
(
display_date
-
VOUT_MWAIT_TOLERANCE
);
}
}
...
@@ -1096,7 +1103,7 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -1096,7 +1103,7 @@ static void* RunThread( vlc_object_t *p_this )
p_vout
->
i_changes
&=
~
VOUT_SIZE_CHANGE
;
p_vout
->
i_changes
&=
~
VOUT_SIZE_CHANGE
;
assert
(
!
p_vout
->
b_direct
);
assert
(
!
p_vout
->
p
->
b_direct
);
ChromaDestroy
(
p_vout
);
ChromaDestroy
(
p_vout
);
...
@@ -1140,7 +1147,7 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -1140,7 +1147,7 @@ static void* RunThread( vlc_object_t *p_this )
* buffer!! */
* buffer!! */
p_vout
->
i_changes
&=
~
VOUT_PICTURE_BUFFERS_CHANGE
;
p_vout
->
i_changes
&=
~
VOUT_PICTURE_BUFFERS_CHANGE
;
if
(
!
p_vout
->
b_direct
)
if
(
!
p_vout
->
p
->
b_direct
)
ChromaDestroy
(
p_vout
);
ChromaDestroy
(
p_vout
);
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
...
@@ -1160,23 +1167,23 @@ static void* RunThread( vlc_object_t *p_this )
...
@@ -1160,23 +1167,23 @@ static void* RunThread( vlc_object_t *p_this )
}
}
/* Check for "video filter2" changes */
/* Check for "video filter2" changes */
vlc_mutex_lock
(
&
p_vout
->
vfilter_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
vfilter_lock
);
if
(
p_vout
->
psz_vf2
)
if
(
p_vout
->
p
->
p
sz_vf2
)
{
{
es_format_t
fmt
;
es_format_t
fmt
;
es_format_Init
(
&
fmt
,
VIDEO_ES
,
p_vout
->
fmt_render
.
i_chroma
);
es_format_Init
(
&
fmt
,
VIDEO_ES
,
p_vout
->
fmt_render
.
i_chroma
);
fmt
.
video
=
p_vout
->
fmt_render
;
fmt
.
video
=
p_vout
->
fmt_render
;
filter_chain_Reset
(
p_vout
->
p_vf2_chain
,
&
fmt
,
&
fmt
);
filter_chain_Reset
(
p_vout
->
p
->
p
_vf2_chain
,
&
fmt
,
&
fmt
);
if
(
filter_chain_AppendFromString
(
p_vout
->
p_vf2_chain
,
if
(
filter_chain_AppendFromString
(
p_vout
->
p
->
p
_vf2_chain
,
p_vout
->
psz_vf2
)
<
0
)
p_vout
->
p
->
p
sz_vf2
)
<
0
)
msg_Err
(
p_vout
,
"Video filter chain creation failed"
);
msg_Err
(
p_vout
,
"Video filter chain creation failed"
);
free
(
p_vout
->
psz_vf2
);
free
(
p_vout
->
p
->
p
sz_vf2
);
p_vout
->
psz_vf2
=
NULL
;
p_vout
->
p
->
p
sz_vf2
=
NULL
;
}
}
vlc_mutex_unlock
(
&
p_vout
->
vfilter_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
vfilter_lock
);
}
}
/*
/*
...
@@ -1220,7 +1227,7 @@ static void CleanThread( vout_thread_t *p_vout )
...
@@ -1220,7 +1227,7 @@ static void CleanThread( vout_thread_t *p_vout )
{
{
int
i_index
;
/* index in heap */
int
i_index
;
/* index in heap */
if
(
!
p_vout
->
b_direct
)
if
(
!
p_vout
->
p
->
b_direct
)
ChromaDestroy
(
p_vout
);
ChromaDestroy
(
p_vout
);
/* Destroy all remaining pictures */
/* Destroy all remaining pictures */
...
@@ -1263,7 +1270,7 @@ static void EndThread( vout_thread_t *p_vout )
...
@@ -1263,7 +1270,7 @@ static void EndThread( vout_thread_t *p_vout )
spu_Destroy
(
p_vout
->
p_spu
);
spu_Destroy
(
p_vout
->
p_spu
);
/* Destroy the video filters2 */
/* Destroy the video filters2 */
filter_chain_Delete
(
p_vout
->
p_vf2_chain
);
filter_chain_Delete
(
p_vout
->
p
->
p
_vf2_chain
);
}
}
/* Thread helpers */
/* Thread helpers */
...
@@ -1280,7 +1287,7 @@ static int ChromaCreate( vout_thread_t *p_vout )
...
@@ -1280,7 +1287,7 @@ static int ChromaCreate( vout_thread_t *p_vout )
filter_t
*
p_chroma
;
filter_t
*
p_chroma
;
/* Choose the best module */
/* Choose the best module */
p_chroma
=
p_vout
->
p_chroma
=
p_chroma
=
p_vout
->
p
->
p
_chroma
=
vlc_custom_create
(
p_vout
,
sizeof
(
filter_t
),
VLC_OBJECT_GENERIC
,
vlc_custom_create
(
p_vout
,
sizeof
(
filter_t
),
VLC_OBJECT_GENERIC
,
typename
);
typename
);
...
@@ -1303,8 +1310,9 @@ static int ChromaCreate( vout_thread_t *p_vout )
...
@@ -1303,8 +1310,9 @@ static int ChromaCreate( vout_thread_t *p_vout )
p_chroma
->
fmt_out
.
video
.
i_width
,
p_chroma
->
fmt_out
.
video
.
i_height
p_chroma
->
fmt_out
.
video
.
i_width
,
p_chroma
->
fmt_out
.
video
.
i_height
);
);
vlc_object_release
(
p_vout
->
p_chroma
);
vlc_object_release
(
p_vout
->
p
->
p_chroma
);
p_vout
->
p_chroma
=
NULL
;
p_vout
->
p
->
p_chroma
=
NULL
;
return
VLC_EGENERIC
;
return
VLC_EGENERIC
;
}
}
p_chroma
->
pf_vout_buffer_new
=
ChromaGetPicture
;
p_chroma
->
pf_vout_buffer_new
=
ChromaGetPicture
;
...
@@ -1313,14 +1321,14 @@ static int ChromaCreate( vout_thread_t *p_vout )
...
@@ -1313,14 +1321,14 @@ static int ChromaCreate( vout_thread_t *p_vout )
static
void
ChromaDestroy
(
vout_thread_t
*
p_vout
)
static
void
ChromaDestroy
(
vout_thread_t
*
p_vout
)
{
{
assert
(
!
p_vout
->
b_direct
);
assert
(
!
p_vout
->
p
->
b_direct
);
if
(
!
p_vout
->
p_chroma
)
if
(
!
p_vout
->
p
->
p
_chroma
)
return
;
return
;
module_unneed
(
p_vout
->
p
_chroma
,
p_vout
->
p_chroma
->
p_module
);
module_unneed
(
p_vout
->
p
->
p_chroma
,
p_vout
->
p
->
p_chroma
->
p_module
);
vlc_object_release
(
p_vout
->
p_chroma
);
vlc_object_release
(
p_vout
->
p
->
p
_chroma
);
p_vout
->
p_chroma
=
NULL
;
p_vout
->
p
->
p
_chroma
=
NULL
;
}
}
static
void
DropPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_picture
)
static
void
DropPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_picture
)
...
@@ -1539,9 +1547,9 @@ static int VideoFilter2Callback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -1539,9 +1547,9 @@ static int VideoFilter2Callback( 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
)
psz_cmd
;
(
void
)
oldval
;
(
void
)
p_data
;
(
void
)
psz_cmd
;
(
void
)
oldval
;
(
void
)
p_data
;
vlc_mutex_lock
(
&
p_vout
->
vfilter_lock
);
vlc_mutex_lock
(
&
p_vout
->
p
->
vfilter_lock
);
p_vout
->
psz_vf2
=
strdup
(
newval
.
psz_string
);
p_vout
->
p
->
p
sz_vf2
=
strdup
(
newval
.
psz_string
);
vlc_mutex_unlock
(
&
p_vout
->
vfilter_lock
);
vlc_mutex_unlock
(
&
p_vout
->
p
->
vfilter_lock
);
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
...
@@ -1558,7 +1566,7 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
...
@@ -1558,7 +1566,7 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
if
(
p_input
)
if
(
p_input
)
{
{
i_now
=
mdate
();
i_now
=
mdate
();
i_stop
=
i_now
+
(
mtime_t
)(
p_vout
->
i_title_timeout
*
1000
);
i_stop
=
i_now
+
(
mtime_t
)(
p_vout
->
p
->
i_title_timeout
*
1000
);
char
*
psz_nowplaying
=
char
*
psz_nowplaying
=
input_item_GetNowPlaying
(
input_GetItem
(
p_input
)
);
input_item_GetNowPlaying
(
input_GetItem
(
p_input
)
);
char
*
psz_artist
=
input_item_GetArtist
(
input_GetItem
(
p_input
)
);
char
*
psz_artist
=
input_item_GetArtist
(
input_GetItem
(
p_input
)
);
...
@@ -1572,7 +1580,7 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
...
@@ -1572,7 +1580,7 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
{
{
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
psz_nowplaying
,
NULL
,
psz_nowplaying
,
NULL
,
p_vout
->
i_title_position
,
p_vout
->
p
->
i_title_position
,
30
+
p_vout
->
fmt_in
.
i_width
30
+
p_vout
->
fmt_in
.
i_width
-
p_vout
->
fmt_in
.
i_visible_width
-
p_vout
->
fmt_in
.
i_visible_width
-
p_vout
->
fmt_in
.
i_x_offset
,
-
p_vout
->
fmt_in
.
i_x_offset
,
...
@@ -1586,7 +1594,7 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
...
@@ -1586,7 +1594,7 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
{
{
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
psz_string
,
NULL
,
psz_string
,
NULL
,
p_vout
->
i_title_position
,
p_vout
->
p
->
i_title_position
,
30
+
p_vout
->
fmt_in
.
i_width
30
+
p_vout
->
fmt_in
.
i_width
-
p_vout
->
fmt_in
.
i_visible_width
-
p_vout
->
fmt_in
.
i_visible_width
-
p_vout
->
fmt_in
.
i_x_offset
,
-
p_vout
->
fmt_in
.
i_x_offset
,
...
@@ -1599,7 +1607,7 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
...
@@ -1599,7 +1607,7 @@ static void DisplayTitleOnOSD( vout_thread_t *p_vout )
{
{
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
vout_ShowTextAbsolute
(
p_vout
,
DEFAULT_CHAN
,
psz_name
,
NULL
,
psz_name
,
NULL
,
p_vout
->
i_title_position
,
p_vout
->
p
->
i_title_position
,
30
+
p_vout
->
fmt_in
.
i_width
30
+
p_vout
->
fmt_in
.
i_width
-
p_vout
->
fmt_in
.
i_visible_width
-
p_vout
->
fmt_in
.
i_visible_width
-
p_vout
->
fmt_in
.
i_x_offset
,
-
p_vout
->
fmt_in
.
i_x_offset
,
...
...
src/video_output/vout_internal.h
View file @
b0123347
...
@@ -30,6 +30,55 @@
...
@@ -30,6 +30,55 @@
#ifndef _VOUT_INTERNAL_H
#ifndef _VOUT_INTERNAL_H
#define _VOUT_INTERNAL_H 1
#define _VOUT_INTERNAL_H 1
struct
vout_thread_sys_t
{
/* */
vlc_mutex_t
vfilter_lock
;
/**< video filter2 change lock */
/* */
uint32_t
render_time
;
/**< last picture render time */
unsigned
int
i_par_num
;
/**< monitor pixel aspect-ratio */
unsigned
int
i_par_den
;
/**< monitor pixel aspect-ratio */
/* */
bool
b_direct
;
/**< rendered are like direct ? */
filter_t
*
p_chroma
;
/**
* These numbers are not supposed to be accurate, but are a
* good indication of the thread status */
count_t
c_fps_samples
;
/**< picture counts */
mtime_t
p_fps_sample
[
VOUT_FPS_SAMPLES
];
/**< FPS samples dates */
#if 0
/* Statistics */
count_t c_loops;
count_t c_pictures, c_late_pictures;
mtime_t display_jitter; /**< average deviation from the PTS */
count_t c_jitter_samples; /**< number of samples used
for the calculation of the jitter */
#endif
/** delay created by internal caching */
int
i_pts_delay
;
/* Filter chain */
char
*
psz_filter_chain
;
bool
b_filter_change
;
/* Video filter2 chain */
filter_chain_t
*
p_vf2_chain
;
char
*
psz_vf2
;
/* Misc */
bool
b_snapshot
;
/**< take one snapshot on the next loop */
/* Show media title on videoutput */
bool
b_title_show
;
mtime_t
i_title_timeout
;
int
i_title_position
;
};
/* DO NOT use vout_RenderPicture unless you are in src/video_ouput */
/* DO NOT use vout_RenderPicture unless you are in src/video_ouput */
picture_t
*
vout_RenderPicture
(
vout_thread_t
*
,
picture_t
*
,
picture_t
*
vout_RenderPicture
(
vout_thread_t
*
,
picture_t
*
,
subpicture_t
*
,
bool
b_paused
);
subpicture_t
*
,
bool
b_paused
);
...
...
src/video_output/vout_intf.c
View file @
b0123347
...
@@ -50,6 +50,7 @@
...
@@ -50,6 +50,7 @@
#include <vlc_strings.h>
#include <vlc_strings.h>
#include <vlc_charset.h>
#include <vlc_charset.h>
#include "../libvlc.h"
#include "../libvlc.h"
#include "vout_internal.h"
/*****************************************************************************
/*****************************************************************************
* Local prototypes
* Local prototypes
...
@@ -257,10 +258,10 @@ void vout_IntfInit( vout_thread_t *p_vout )
...
@@ -257,10 +258,10 @@ void vout_IntfInit( vout_thread_t *p_vout )
var_Create
(
p_vout
,
"mouse-hide-timeout"
,
var_Create
(
p_vout
,
"mouse-hide-timeout"
,
VLC_VAR_INTEGER
|
VLC_VAR_DOINHERIT
);
VLC_VAR_INTEGER
|
VLC_VAR_DOINHERIT
);
p_vout
->
b_title_show
=
var_CreateGetBool
(
p_vout
,
"video-title-show"
);
p_vout
->
p
->
b_title_show
=
var_CreateGetBool
(
p_vout
,
"video-title-show"
);
p_vout
->
i_title_timeout
=
p_vout
->
p
->
i_title_timeout
=
(
mtime_t
)
var_CreateGetInteger
(
p_vout
,
"video-title-timeout"
);
(
mtime_t
)
var_CreateGetInteger
(
p_vout
,
"video-title-timeout"
);
p_vout
->
i_title_position
=
p_vout
->
p
->
i_title_position
=
var_CreateGetInteger
(
p_vout
,
"video-title-position"
);
var_CreateGetInteger
(
p_vout
,
"video-title-position"
);
var_AddCallback
(
p_vout
,
"video-title-show"
,
TitleShowCallback
,
NULL
);
var_AddCallback
(
p_vout
,
"video-title-show"
,
TitleShowCallback
,
NULL
);
...
@@ -352,14 +353,14 @@ void vout_IntfInit( vout_thread_t *p_vout )
...
@@ -352,14 +353,14 @@ void vout_IntfInit( vout_thread_t *p_vout )
}
}
if
(
!
i_aspect_num
||
!
i_aspect_den
)
i_aspect_num
=
i_aspect_den
=
1
;
if
(
!
i_aspect_num
||
!
i_aspect_den
)
i_aspect_num
=
i_aspect_den
=
1
;
p_vout
->
i_par_num
=
i_aspect_num
;
p_vout
->
p
->
i_par_num
=
i_aspect_num
;
p_vout
->
i_par_den
=
i_aspect_den
;
p_vout
->
p
->
i_par_den
=
i_aspect_den
;
vlc_ureduce
(
&
p_vout
->
i_par_num
,
&
p_vout
->
i_par_den
,
vlc_ureduce
(
&
p_vout
->
p
->
i_par_num
,
&
p_vout
->
p
->
i_par_den
,
p_vout
->
i_par_num
,
p_vout
->
i_par_den
,
0
);
p_vout
->
p
->
i_par_num
,
p_vout
->
p
->
i_par_den
,
0
);
msg_Dbg
(
p_vout
,
"overriding monitor pixel aspect-ratio: %i:%i"
,
msg_Dbg
(
p_vout
,
"overriding monitor pixel aspect-ratio: %i:%i"
,
p_vout
->
i_par_num
,
p_vout
->
i_par_den
);
p_vout
->
p
->
i_par_num
,
p_vout
->
p
->
i_par_den
);
b_force_par
=
true
;
b_force_par
=
true
;
}
}
free
(
val
.
psz_string
);
free
(
val
.
psz_string
);
...
@@ -877,7 +878,7 @@ int vout_vaControlDefault( vout_thread_t *p_vout, int i_query, va_list args )
...
@@ -877,7 +878,7 @@ int vout_vaControlDefault( vout_thread_t *p_vout, int i_query, va_list args )
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
case
VOUT_SNAPSHOT
:
case
VOUT_SNAPSHOT
:
p_vout
->
b_snapshot
=
true
;
p_vout
->
p
->
b_snapshot
=
true
;
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
default:
default:
...
@@ -1158,12 +1159,12 @@ static int AspectCallback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -1158,12 +1159,12 @@ static int AspectCallback( vlc_object_t *p_this, char const *psz_cmd,
p_vout
->
render
.
i_aspect
=
p_vout
->
fmt_in
.
i_aspect
;
p_vout
->
render
.
i_aspect
=
p_vout
->
fmt_in
.
i_aspect
;
aspect_end:
aspect_end:
if
(
p_vout
->
i_par_num
&&
p_vout
->
i_par_den
)
if
(
p_vout
->
p
->
i_par_num
&&
p_vout
->
p
->
i_par_den
)
{
{
p_vout
->
fmt_in
.
i_sar_num
*=
p_vout
->
i_par_den
;
p_vout
->
fmt_in
.
i_sar_num
*=
p_vout
->
p
->
i_par_den
;
p_vout
->
fmt_in
.
i_sar_den
*=
p_vout
->
i_par_num
;
p_vout
->
fmt_in
.
i_sar_den
*=
p_vout
->
p
->
i_par_num
;
p_vout
->
fmt_in
.
i_aspect
=
p_vout
->
fmt_in
.
i_aspect
*
p_vout
->
fmt_in
.
i_aspect
=
p_vout
->
fmt_in
.
i_aspect
*
p_vout
->
i_par_den
/
p_vout
->
i_par_num
;
p_vout
->
p
->
i_par_den
/
p_vout
->
p
->
i_par_num
;
p_vout
->
render
.
i_aspect
=
p_vout
->
fmt_in
.
i_aspect
;
p_vout
->
render
.
i_aspect
=
p_vout
->
fmt_in
.
i_aspect
;
}
}
...
@@ -1231,7 +1232,7 @@ static int TitleShowCallback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -1231,7 +1232,7 @@ static int TitleShowCallback( vlc_object_t *p_this, char const *psz_cmd,
VLC_UNUSED
(
psz_cmd
);
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
psz_cmd
);
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
p_data
);
VLC_UNUSED
(
p_data
);
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
p_vout
->
b_title_show
=
newval
.
b_bool
;
p_vout
->
p
->
b_title_show
=
newval
.
b_bool
;
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
...
@@ -1240,7 +1241,7 @@ static int TitleTimeoutCallback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -1240,7 +1241,7 @@ static int TitleTimeoutCallback( vlc_object_t *p_this, char const *psz_cmd,
{
{
VLC_UNUSED
(
psz_cmd
);
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
p_data
);
VLC_UNUSED
(
psz_cmd
);
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
p_data
);
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
p_vout
->
i_title_timeout
=
(
mtime_t
)
newval
.
i_int
;
p_vout
->
p
->
i_title_timeout
=
(
mtime_t
)
newval
.
i_int
;
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
...
@@ -1250,6 +1251,6 @@ static int TitlePositionCallback( vlc_object_t *p_this, char const *psz_cmd,
...
@@ -1250,6 +1251,6 @@ static int TitlePositionCallback( vlc_object_t *p_this, char const *psz_cmd,
VLC_UNUSED
(
psz_cmd
);
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
psz_cmd
);
VLC_UNUSED
(
oldval
);
VLC_UNUSED
(
p_data
);
VLC_UNUSED
(
p_data
);
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
p_vout
->
i_title_position
=
newval
.
i_int
;
p_vout
->
p
->
i_title_position
=
newval
.
i_int
;
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
src/video_output/vout_pictures.c
View file @
b0123347
...
@@ -35,6 +35,7 @@
...
@@ -35,6 +35,7 @@
#include <vlc_osd.h>
#include <vlc_osd.h>
#include <vlc_filter.h>
#include <vlc_filter.h>
#include "vout_pictures.h"
#include "vout_pictures.h"
#include "vout_internal.h"
#include <assert.h>
#include <assert.h>
...
@@ -357,7 +358,7 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
...
@@ -357,7 +358,7 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
/* Not a direct buffer. We either need to copy it to a direct buffer,
/* Not a direct buffer. We either need to copy it to a direct buffer,
* or render it if the chroma isn't the same. */
* or render it if the chroma isn't the same. */
if
(
p_vout
->
b_direct
)
if
(
p_vout
->
p
->
b_direct
)
{
{
/* Picture is not in a direct buffer, but is exactly the
/* Picture is not in a direct buffer, but is exactly the
* same size as the direct buffers. A memcpy() is enough,
* same size as the direct buffers. A memcpy() is enough,
...
@@ -401,8 +402,8 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
...
@@ -401,8 +402,8 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
}
}
/* Convert image to the first direct buffer */
/* Convert image to the first direct buffer */
p_vout
->
p_chroma
->
p_owner
=
(
filter_owner_sys_t
*
)
p_tmp_pic
;
p_vout
->
p
->
p
_chroma
->
p_owner
=
(
filter_owner_sys_t
*
)
p_tmp_pic
;
p_vout
->
p
_chroma
->
pf_video_filter
(
p_vout
->
p_chroma
,
p_pic
);
p_vout
->
p
->
p_chroma
->
pf_video_filter
(
p_vout
->
p
->
p_chroma
,
p_pic
);
/* Render subpictures on the first direct buffer */
/* Render subpictures on the first direct buffer */
spu_RenderSubpictures
(
p_vout
->
p_spu
,
spu_RenderSubpictures
(
p_vout
->
p_spu
,
...
@@ -420,8 +421,8 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
...
@@ -420,8 +421,8 @@ picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
return
NULL
;
return
NULL
;
/* Convert image to the first direct buffer */
/* Convert image to the first direct buffer */
p_vout
->
p_chroma
->
p_owner
=
(
filter_owner_sys_t
*
)
&
p_vout
->
p_picture
[
0
];
p_vout
->
p
->
p
_chroma
->
p_owner
=
(
filter_owner_sys_t
*
)
&
p_vout
->
p_picture
[
0
];
p_vout
->
p
_chroma
->
pf_video_filter
(
p_vout
->
p_chroma
,
p_pic
);
p_vout
->
p
->
p_chroma
->
pf_video_filter
(
p_vout
->
p
->
p_chroma
,
p_pic
);
/* Render subpictures on the first direct buffer */
/* Render subpictures on the first direct buffer */
spu_RenderSubpictures
(
p_vout
->
p_spu
,
spu_RenderSubpictures
(
p_vout
->
p_spu
,
...
...
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