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
27e0b63d
Commit
27e0b63d
authored
Jan 19, 2000
by
Vincent Seguin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Nettoyage.
parent
6dcda4bb
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
348 additions
and
111 deletions
+348
-111
include/config.h
include/config.h
+7
-2
include/interface.h
include/interface.h
+1
-0
include/video_output.h
include/video_output.h
+7
-9
include/video_sys.h
include/video_sys.h
+1
-5
src/interface/interface.c
src/interface/interface.c
+135
-0
src/interface/main.c
src/interface/main.c
+5
-5
src/video_output/video_output.c
src/video_output/video_output.c
+172
-76
src/video_output/video_x11.c
src/video_output/video_x11.c
+17
-6
src/video_output/video_yuv.c
src/video_output/video_yuv.c
+3
-8
No files found.
include/config.h
View file @
27e0b63d
...
...
@@ -119,10 +119,15 @@
/* Base delay in micro second for interface sleeps */
#define INTF_IDLE_SLEEP 100000
/*
Factor
for changing gamma, and minimum and maximum values */
#define INTF_GAMMA_
FACTOR
.1
/*
Step
for changing gamma, and minimum and maximum values */
#define INTF_GAMMA_
STEP
.1
#define INTF_GAMMA_MAX 3
/* Factor for changing aspect ratio, and minimum and maximum values */
#define INTF_RATIO_FACTOR 1.1
#define INTF_RATIO_MIN .1
#define INTF_RATIO_MAX 10
/*
* X11 settings
*/
...
...
include/interface.h
View file @
27e0b63d
...
...
@@ -47,4 +47,5 @@ void intf_Run ( intf_thread_t * p_intf );
void
intf_Destroy
(
intf_thread_t
*
p_intf
);
int
intf_SelectInput
(
intf_thread_t
*
p_intf
,
p_input_cfg_t
p_cfg
);
int
intf_ProcessKey
(
intf_thread_t
*
p_intf
,
int
i_key
);
include/video_output.h
View file @
27e0b63d
...
...
@@ -87,6 +87,7 @@ typedef struct vout_thread_s
vlc_thread_t
thread_id
;
/* id for pthread functions */
vlc_mutex_t
picture_lock
;
/* picture heap lock */
vlc_mutex_t
subtitle_lock
;
/* subtitle heap lock */
vlc_mutex_t
change_lock
;
/* thread change lock */
int
*
pi_status
;
/* temporary status flag */
p_vout_sys_t
p_sys
;
/* system output method */
...
...
@@ -105,15 +106,15 @@ typedef struct vout_thread_s
#ifdef STATS
/* Statistics - these numbers are not supposed to be accurate, but are a
* good indication of the thread status */
mtime_t
loop_time
;
/* last picture loop
time */
count_t
c_fps_samples
;
/* picture counts */
mtime_t
render_time
;
/* last picture render
time */
count_t
c_fps_samples
;
/* picture counts */
mtime_t
fps_sample
[
VOUT_FPS_SAMPLES
];
/* FPS samples dates */
#endif
/* Running properties */
u16
i_changes
;
/* changes made to the thread */
mtime_t
last_picture_date
;
/* last picture display date */
mtime_t
last_
idle_date
;
/* last idle screen display
date */
mtime_t
last_
display_date
;
/* last screen display
date */
/* Videos heap and translation tables */
picture_t
p_picture
[
VOUT_MAX_PICTURES
];
/* pictures */
...
...
@@ -133,16 +134,13 @@ typedef struct vout_thread_s
#define VOUT_DEPTH_CHANGE 0x0008
/* depth changed */
#define VOUT_RATIO_CHANGE 0x0010
/* display ratio changed */
#define VOUT_GAMMA_CHANGE 0x0020
/* gamma changed */
#define VOUT_NODISPLAY_CHANGE 0xffdc
/* changes which forbiden the display */
/*******************************************************************************
* Prototypes
*******************************************************************************/
vout_thread_t
*
vout_CreateThread
(
#ifdef VIDEO_X11
char
*
psz_display
,
Window
root_window
,
#endif
int
i_width
,
int
i_height
,
int
*
pi_status
);
vout_thread_t
*
vout_CreateThread
(
char
*
psz_display
,
int
i_root_window
,
int
i_width
,
int
i_height
,
int
*
pi_status
);
void
vout_DestroyThread
(
vout_thread_t
*
p_vout
,
int
*
pi_status
);
picture_t
*
vout_CreatePicture
(
vout_thread_t
*
p_vout
,
int
i_type
,
int
i_width
,
int
i_height
);
...
...
include/video_sys.h
View file @
27e0b63d
...
...
@@ -6,11 +6,7 @@
/*******************************************************************************
* Prototypes
*******************************************************************************/
int
vout_SysCreate
(
p_vout_thread_t
p_vout
#ifdef VIDEO_X11
,
char
*
psz_display
,
Window
root_window
#endif
);
int
vout_SysCreate
(
p_vout_thread_t
p_vout
,
char
*
psz_display
,
int
i_root_window
);
int
vout_SysInit
(
p_vout_thread_t
p_vout
);
void
vout_SysEnd
(
p_vout_thread_t
p_vout
);
void
vout_SysDestroy
(
p_vout_thread_t
p_vout
);
...
...
src/interface/interface.c
View file @
27e0b63d
...
...
@@ -26,6 +26,8 @@
#include "intf_cmd.h"
#include "intf_console.h"
#include "main.h"
#include "video.h"
#include "video_output.h"
#include "intf_sys.h"
...
...
@@ -96,6 +98,19 @@ void intf_Run( intf_thread_t *p_intf )
/* Manage specific interface */
intf_SysManage
(
p_intf
);
/* Check attached threads status */
if
(
(
p_intf
->
p_vout
!=
NULL
)
&&
p_intf
->
p_vout
->
b_error
)
{
//?? add aout error detection
p_intf
->
b_die
=
1
;
}
if
(
(
p_intf
->
p_input
!=
NULL
)
&&
p_intf
->
p_input
->
b_error
)
{
input_DestroyThread
(
p_intf
->
p_input
/*, NULL */
);
p_intf
->
p_input
=
NULL
;
intf_DbgMsg
(
"Input thread destroyed
\n
"
);
}
/* Sleep to avoid using all CPU - since some interfaces needs to access
* keyboard events, a 100ms delay is a good compromise */
msleep
(
INTF_IDLE_SLEEP
);
...
...
@@ -143,4 +158,124 @@ int intf_SelectInput( intf_thread_t * p_intf, input_cfg_t *p_cfg )
return
(
(
p_cfg
!=
NULL
)
&&
(
p_intf
->
p_input
==
NULL
)
);
}
/*******************************************************************************
* intf_ProcessKey: process standard keys
*******************************************************************************
* This function will process standard keys and return non 0 if the key was
* unknown.
*******************************************************************************/
int
intf_ProcessKey
(
intf_thread_t
*
p_intf
,
int
i_key
)
{
switch
(
i_key
)
{
case
'Q'
:
/* quit order */
case
'q'
:
case
27
:
p_intf
->
b_die
=
1
;
break
;
case
'0'
:
/* source change */
case
'1'
:
case
'2'
:
case
'3'
:
case
'4'
:
case
'5'
:
case
'6'
:
case
'7'
:
case
'8'
:
case
'9'
:
// ??
break
;
case
'+'
:
/* volume + */
// ??
break
;
case
'-'
:
/* volume - */
// ??
break
;
case
'M'
:
/* toggle mute */
case
'm'
:
// ??
break
;
case
'g'
:
/* gamma - */
if
(
(
p_intf
->
p_vout
!=
NULL
)
&&
(
p_intf
->
p_vout
->
f_gamma
>
-
INTF_GAMMA_MAX
)
)
{
vlc_mutex_lock
(
&
p_intf
->
p_vout
->
change_lock
);
p_intf
->
p_vout
->
f_gamma
-=
INTF_GAMMA_STEP
;
p_intf
->
p_vout
->
i_changes
|=
VOUT_GAMMA_CHANGE
;
vlc_mutex_unlock
(
&
p_intf
->
p_vout
->
change_lock
);
}
break
;
case
'G'
:
/* gamma + */
if
(
(
p_intf
->
p_vout
!=
NULL
)
&&
(
p_intf
->
p_vout
->
f_gamma
<
INTF_GAMMA_MAX
)
)
{
vlc_mutex_lock
(
&
p_intf
->
p_vout
->
change_lock
);
p_intf
->
p_vout
->
f_gamma
+=
INTF_GAMMA_STEP
;
p_intf
->
p_vout
->
i_changes
|=
VOUT_GAMMA_CHANGE
;
vlc_mutex_unlock
(
&
p_intf
->
p_vout
->
change_lock
);
}
break
;
case
'c'
:
/* toggle grayscale */
if
(
p_intf
->
p_vout
!=
NULL
)
{
vlc_mutex_lock
(
&
p_intf
->
p_vout
->
change_lock
);
p_intf
->
p_vout
->
b_grayscale
=
!
p_intf
->
p_vout
->
b_grayscale
;
p_intf
->
p_vout
->
i_changes
|=
VOUT_GRAYSCALE_CHANGE
;
vlc_mutex_unlock
(
&
p_intf
->
p_vout
->
change_lock
);
}
break
;
case
'x'
:
/* horizontal aspect ratio - */
if
(
(
p_intf
->
p_vout
!=
NULL
)
&&
(
p_intf
->
p_vout
->
f_x_ratio
>
INTF_RATIO_MIN
)
)
{
vlc_mutex_lock
(
&
p_intf
->
p_vout
->
change_lock
);
p_intf
->
p_vout
->
f_x_ratio
/=
INTF_RATIO_FACTOR
;
p_intf
->
p_vout
->
i_changes
|=
VOUT_RATIO_CHANGE
;
vlc_mutex_unlock
(
&
p_intf
->
p_vout
->
change_lock
);
}
break
;
case
'X'
:
/* horizontal aspect ratio + */
if
(
(
p_intf
->
p_vout
!=
NULL
)
&&
(
p_intf
->
p_vout
->
f_x_ratio
<
INTF_RATIO_MAX
)
)
{
vlc_mutex_lock
(
&
p_intf
->
p_vout
->
change_lock
);
p_intf
->
p_vout
->
f_x_ratio
*=
INTF_RATIO_FACTOR
;
p_intf
->
p_vout
->
i_changes
|=
VOUT_RATIO_CHANGE
;
vlc_mutex_unlock
(
&
p_intf
->
p_vout
->
change_lock
);
}
break
;
case
'y'
:
/* vertical aspect ratio - */
if
(
(
p_intf
->
p_vout
!=
NULL
)
&&
(
p_intf
->
p_vout
->
f_y_ratio
>
INTF_RATIO_MIN
)
)
{
vlc_mutex_lock
(
&
p_intf
->
p_vout
->
change_lock
);
p_intf
->
p_vout
->
f_y_ratio
/=
INTF_RATIO_FACTOR
;
p_intf
->
p_vout
->
i_changes
|=
VOUT_RATIO_CHANGE
;
vlc_mutex_unlock
(
&
p_intf
->
p_vout
->
change_lock
);
}
break
;
case
'Y'
:
/* horizontal aspect ratio + */
if
(
(
p_intf
->
p_vout
!=
NULL
)
&&
(
p_intf
->
p_vout
->
f_y_ratio
<
INTF_RATIO_MAX
)
)
{
vlc_mutex_lock
(
&
p_intf
->
p_vout
->
change_lock
);
p_intf
->
p_vout
->
f_y_ratio
*=
INTF_RATIO_FACTOR
;
p_intf
->
p_vout
->
i_changes
|=
VOUT_RATIO_CHANGE
;
vlc_mutex_unlock
(
&
p_intf
->
p_vout
->
change_lock
);
}
break
;
case
'f'
:
/* toggle fullscreen */
//??
break
;
case
' '
:
/* toggle info */
if
(
p_intf
->
p_vout
!=
NULL
)
{
vlc_mutex_lock
(
&
p_intf
->
p_vout
->
change_lock
);
p_intf
->
p_vout
->
b_info
=
!
p_intf
->
p_vout
->
b_info
;
p_intf
->
p_vout
->
i_changes
|=
VOUT_INFO_CHANGE
;
vlc_mutex_unlock
(
&
p_intf
->
p_vout
->
change_lock
);
}
break
;
default:
/* unknown key */
return
(
1
);
}
return
(
0
);
}
src/interface/main.c
View file @
27e0b63d
...
...
@@ -380,7 +380,8 @@ static int GetConfiguration( int i_argc, char *ppsz_argv[], char *ppsz_env[] )
*******************************************************************************/
static
void
Usage
(
void
)
{
intf_Msg
(
COPYRIGHT_MESSAGE
);
intf_Msg
(
COPYRIGHT_MESSAGE
"
\n
"
);
/* Usage */
intf_Msg
(
"usage: vlc [options...] [parameters]
\n
"
\
" parameters can be passed using environment variables
\n
"
\
...
...
@@ -425,12 +426,11 @@ static void Usage( void )
/* Interfaces keys */
intf_Msg
(
"Interface keys: most interface accept the following commands:
\n
"
\
" [esc], q quit
\n
"
\
" +, -
change volum
e
\n
"
\
"
m mut
e
\n
"
\
"
f fullscreen
\n
"
\
" +, -
, m change volume, mut
e
\n
"
\
"
g, G, c change gamma, toggle grayscal
e
\n
"
\
"
x, X, y, Y, f change aspect ratio, toggle fullscreen
\n
"
\
" 0 - 9 select channel
\n
"
\
" [space] toggle info printing
\n
"
\
" g, G change gamma
\n
"
\
);
}
...
...
src/video_output/video_output.c
View file @
27e0b63d
...
...
@@ -15,10 +15,6 @@
#include <stdio.h>
#include <string.h>
#ifdef VIDEO_X11
#include <X11/Xlib.h>
/* for video_sys.h in X11 mode */
#endif
#include "common.h"
#include "config.h"
#include "mtime.h"
...
...
@@ -37,10 +33,11 @@ static int InitThread ( vout_thread_t *p_vout );
static
void
RunThread
(
vout_thread_t
*
p_vout
);
static
void
ErrorThread
(
vout_thread_t
*
p_vout
);
static
void
EndThread
(
vout_thread_t
*
p_vout
);
static
void
RenderPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
);
static
void
RenderPictureInfo
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
);
static
int
RenderIdle
(
vout_thread_t
*
p_vout
);
static
int
RenderInfo
(
vout_thread_t
*
p_vout
);
static
void
RenderBlank
(
vout_thread_t
*
p_vout
);
static
int
RenderPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
,
boolean_t
b_blank
);
static
int
RenderPictureInfo
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
,
boolean_t
b_blank
);
static
int
RenderIdle
(
vout_thread_t
*
p_vout
,
boolean_t
b_blank
);
static
int
RenderInfo
(
vout_thread_t
*
p_vout
,
boolean_t
b_balnk
);
static
int
Manage
(
vout_thread_t
*
p_vout
);
/*******************************************************************************
...
...
@@ -51,12 +48,8 @@ static int Manage ( vout_thread_t *p_vout );
* If pi_status is NULL, then the function will block until the thread is ready.
* If not, it will be updated using one of the THREAD_* constants.
*******************************************************************************/
vout_thread_t
*
vout_CreateThread
(
#ifdef VIDEO_X11
char
*
psz_display
,
Window
root_window
,
#endif
int
i_width
,
int
i_height
,
int
*
pi_status
)
vout_thread_t
*
vout_CreateThread
(
char
*
psz_display
,
int
i_root_window
,
int
i_width
,
int
i_height
,
int
*
pi_status
)
{
vout_thread_t
*
p_vout
;
/* thread descriptor */
int
i_status
;
/* thread status */
...
...
@@ -100,11 +93,7 @@ vout_thread_t * vout_CreateThread (
/* Create and initialize system-dependant method - this function issues its
* own error messages */
if
(
vout_SysCreate
(
p_vout
#if defined(VIDEO_X11)
,
psz_display
,
root_window
#endif
)
)
if
(
vout_SysCreate
(
p_vout
,
psz_display
,
i_root_window
)
)
{
free
(
p_vout
);
return
(
NULL
);
...
...
@@ -116,15 +105,21 @@ vout_thread_t * vout_CreateThread (
#ifdef STATS
/* Initialize statistics fields */
p_vout
->
loop
_time
=
0
;
p_vout
->
render
_time
=
0
;
p_vout
->
c_fps_samples
=
0
;
#endif
/* Initialize running properties */
p_vout
->
i_changes
=
0
;
p_vout
->
last_picture_date
=
0
;
p_vout
->
last_display_date
=
0
;
/* Create thread and set locks */
vlc_mutex_init
(
&
p_vout
->
picture_lock
);
vlc_mutex_init
(
&
p_vout
->
subtitle_lock
);
if
(
vlc_thread_create
(
&
p_vout
->
thread_id
,
"video output"
,
(
void
*
)
RunThread
,
(
void
*
)
p_vout
)
)
vlc_mutex_init
(
&
p_vout
->
change_lock
);
vlc_mutex_lock
(
&
p_vout
->
change_lock
);
if
(
vlc_thread_create
(
&
p_vout
->
thread_id
,
"video output"
,
(
void
*
)
RunThread
,
(
void
*
)
p_vout
)
)
{
intf_ErrMsg
(
"error: %s
\n
"
,
strerror
(
ENOMEM
));
vout_SysDestroy
(
p_vout
);
...
...
@@ -615,7 +610,6 @@ static void RunThread( vout_thread_t *p_vout)
p_pic
=
NULL
;
}
}
/*
* Perform rendering, sleep and display rendered picture
...
...
@@ -625,13 +619,12 @@ static void RunThread( vout_thread_t *p_vout)
/* A picture is ready to be displayed : render it */
if
(
p_vout
->
b_active
)
{
RenderPicture
(
p_vout
,
p_pic
);
b_display
=
RenderPicture
(
p_vout
,
p_pic
,
1
);
if
(
p_vout
->
b_info
)
{
RenderPictureInfo
(
p_vout
,
p_pic
);
RenderInfo
(
p_vout
);
b_display
|=
RenderPictureInfo
(
p_vout
,
p_pic
,
b_display
);
b_display
|=
RenderInfo
(
p_vout
,
b_display
);
}
b_display
=
1
;
}
else
{
...
...
@@ -646,17 +639,26 @@ static void RunThread( vout_thread_t *p_vout)
else
{
/* No picture. However, an idle screen may be ready to display */
b_display
=
p_vout
->
b_active
&&
(
RenderIdle
(
p_vout
)
|
(
p_vout
->
b_info
&&
RenderInfo
(
p_vout
)
));
if
(
p_vout
->
b_active
)
{
b_display
=
RenderIdle
(
p_vout
,
1
);
if
(
p_vout
->
b_info
)
{
b_display
|=
RenderInfo
(
p_vout
,
b_display
);
}
}
else
{
b_display
=
0
;
}
}
/* Give back change lock */
vlc_mutex_unlock
(
&
p_vout
->
change_lock
);
/* Sleep a while or until a given date */
if
(
p_pic
)
{
#ifdef STATS
/* Computes loop time */
p_vout
->
loop_time
=
mdate
()
-
current_date
;
#endif
mwait
(
pic_date
);
}
else
...
...
@@ -664,8 +666,10 @@ static void RunThread( vout_thread_t *p_vout)
msleep
(
VOUT_IDLE_SLEEP
);
}
/* On awakening, send immediately picture to display */
if
(
b_display
&&
p_vout
->
b_active
)
/* On awakening, take back lock and send immediately picture to display */
vlc_mutex_lock
(
&
p_vout
->
change_lock
);
if
(
b_display
&&
p_vout
->
b_active
&&
!
(
p_vout
->
i_changes
&
VOUT_NODISPLAY_CHANGE
)
)
{
vout_SysDisplay
(
p_vout
);
}
...
...
@@ -748,6 +752,48 @@ static void EndThread( vout_thread_t *p_vout )
*
pi_status
=
THREAD_OVER
;
}
/*******************************************************************************
* RenderBlank: render a blank screen
*******************************************************************************
* This function is called by all other rendering functions when they arrive on
* a non blanked screen.
*******************************************************************************/
static
void
RenderBlank
(
vout_thread_t
*
p_vout
)
{
int
i_index
;
/* current 32 bits sample */
int
i_width
;
/* number of 32 bits samples */
u32
*
p_pic
;
/* pointer to 32 bits samples */
/* Initialize variables */
p_pic
=
vout_SysGetPicture
(
p_vout
);
i_width
=
p_vout
->
i_bytes_per_line
*
p_vout
->
i_height
/
128
;
/* Clear beginning of screen by 128 bytes blocks */
for
(
i_index
=
0
;
i_index
<
i_width
;
i_index
++
)
{
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
*
p_pic
++
=
0
;
}
/* Clear last pixels */
//??
}
/*******************************************************************************
* RenderPicture: render a picture
*******************************************************************************
...
...
@@ -756,8 +802,17 @@ static void EndThread( vout_thread_t *p_vout )
* rendered picture has been determined as existant, and will only be destroyed
* by the vout thread later.
*******************************************************************************/
static
void
RenderPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
static
int
RenderPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
,
boolean_t
b_blank
)
{
/* Mark last picture date */
p_vout
->
last_picture_date
=
p_pic
->
date
;
/* Blank screen if required */
if
(
b_blank
)
{
RenderBlank
(
p_vout
);
}
/*
* Prepare scaling
*/
...
...
@@ -769,7 +824,6 @@ static void RenderPicture( vout_thread_t *p_vout, picture_t *p_pic )
* XImages */
/* p_vout->i_new_width = p_pic->i_width;
p_vout->i_new_height = p_pic->i_height;*/
return
;
#else
/* Other drivers: the video output thread can't change its size, so
* we need to change the aspect ratio */
...
...
@@ -815,6 +869,8 @@ static void RenderPicture( vout_thread_t *p_vout, picture_t *p_pic )
* Terminate scaling
*/
//??
return
(
1
);
}
...
...
@@ -822,16 +878,12 @@ static void RenderPicture( vout_thread_t *p_vout, picture_t *p_pic )
/*******************************************************************************
* RenderPictureInfo: print additionnal informations on a picture
*******************************************************************************
* This function will add informations such as fps and buffer size on a picture
* This function will print informations such as fps and other picture
* dependant informations.
*******************************************************************************/
static
void
RenderPictureInfo
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
static
int
RenderPictureInfo
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
,
boolean_t
b_blank
)
{
char
psz_buffer
[
256
];
/* string buffer */
#ifdef DEBUG
int
i_ready_pic
=
0
;
/* ready pictures */
int
i_reserved_pic
=
0
;
/* reserved pictures */
int
i_picture
;
/* picture index */
#endif
#ifdef STATS
/*
...
...
@@ -846,37 +898,32 @@ static void RenderPictureInfo( vout_thread_t *p_vout, picture_t *p_pic )
}
/*
* Print
statistics
in upper left corner
* Print
frames count and loop time
in upper left corner
*/
sprintf
(
psz_buffer
,
"
gamma=%.2f %ld frame
s"
,
p_vout
->
f_gamma
,
p_vout
->
c_fps_samples
);
sprintf
(
psz_buffer
,
"
%ld frames render time: %lu u
s"
,
p_vout
->
c_fps_samples
,
(
long
unsigned
)
p_vout
->
render_time
);
vout_SysPrint
(
p_vout
,
0
,
0
,
-
1
,
-
1
,
psz_buffer
);
#endif
#ifdef DEBUG
/*
* Print
heap state in lower left corner
/*
* Print
picture information in lower right corner
*/
for
(
i_picture
=
0
;
i_picture
<
VOUT_MAX_PICTURES
;
i_picture
++
)
{
switch
(
p_vout
->
p_picture
[
i_picture
].
i_status
)
{
case
RESERVED_PICTURE
:
i_reserved_pic
++
;
break
;
case
READY_PICTURE
:
i_ready_pic
++
;
break
;
}
}
sprintf
(
psz_buffer
,
"video heap: %d/%d/%d"
,
i_reserved_pic
,
i_ready_pic
,
VOUT_MAX_PICTURES
);
vout_SysPrint
(
p_vout
,
0
,
p_vout
->
i_height
,
-
1
,
1
,
psz_buffer
);
#endif
#ifdef DEBUG_VIDEO
//??
sprintf
(
psz_buffer
,
"%s picture (mc=%d) %dx%d (%dx%d%+d%+d ar=%s)"
,
(
p_pic
->
i_type
==
YUV_420_PICTURE
)
?
"4:2:0"
:
((
p_pic
->
i_type
==
YUV_422_PICTURE
)
?
"4:2:2"
:
((
p_pic
->
i_type
==
YUV_444_PICTURE
)
?
"4:4:4"
:
"?"
)),
p_pic
->
i_matrix_coefficients
,
p_pic
->
i_width
,
p_pic
->
i_height
,
p_pic
->
i_display_width
,
p_pic
->
i_display_height
,
p_pic
->
i_display_horizontal_offset
,
p_pic
->
i_display_vertical_offset
,
(
p_pic
->
i_aspect_ratio
==
AR_SQUARE_PICTURE
)
?
"square"
:
((
p_pic
->
i_aspect_ratio
==
AR_3_4_PICTURE
)
?
"4:3"
:
((
p_pic
->
i_aspect_ratio
==
AR_16_9_PICTURE
)
?
"16:9"
:
((
p_pic
->
i_aspect_ratio
==
AR_221_1_PICTURE
)
?
"2.21:1"
:
"?"
))));
vout_SysPrint
(
p_vout
,
p_vout
->
i_width
,
p_vout
->
i_height
,
1
,
1
,
psz_buffer
);
#endif
return
(
0
);
}
/*******************************************************************************
...
...
@@ -884,31 +931,80 @@ static void RenderPictureInfo( vout_thread_t *p_vout, picture_t *p_pic )
*******************************************************************************
* This function will clear the display or print a logo.
*******************************************************************************/
static
int
RenderIdle
(
vout_thread_t
*
p_vout
)
static
int
RenderIdle
(
vout_thread_t
*
p_vout
,
boolean_t
b_blank
)
{
//??
/* Blank screen if required */
if
(
(
mdate
()
-
p_vout
->
last_picture_date
>
VOUT_IDLE_DELAY
)
&&
(
p_vout
->
last_picture_date
>
p_vout
->
last_display_date
)
&&
b_blank
)
{
RenderBlank
(
p_vout
);
p_vout
->
last_display_date
=
mdate
();
vout_SysPrint
(
p_vout
,
p_vout
->
i_width
/
2
,
p_vout
->
i_height
/
2
,
0
,
0
,
"no stream"
);
return
(
1
);
}
return
(
0
);
}
/*******************************************************************************
* RenderInfo: render additionnal informations
*******************************************************************************
* ??
* This function render informations which do not depend of the current picture
* rendered.
*******************************************************************************/
static
int
RenderInfo
(
vout_thread_t
*
p_vout
)
static
int
RenderInfo
(
vout_thread_t
*
p_vout
,
boolean_t
b_blank
)
{
//??
char
psz_buffer
[
256
];
/* string buffer */
#ifdef DEBUG
int
i_ready_pic
=
0
;
/* ready pictures */
int
i_reserved_pic
=
0
;
/* reserved pictures */
int
i_picture
;
/* picture index */
#endif
#ifdef DEBUG
/*
* Print thread state in lower left corner
*/
for
(
i_picture
=
0
;
i_picture
<
VOUT_MAX_PICTURES
;
i_picture
++
)
{
switch
(
p_vout
->
p_picture
[
i_picture
].
i_status
)
{
case
RESERVED_PICTURE
:
i_reserved_pic
++
;
break
;
case
READY_PICTURE
:
i_ready_pic
++
;
break
;
}
}
sprintf
(
psz_buffer
,
"%s %dx%d:%d %.2f:%.2f g%+.2f pic: %d/%d/%d"
,
p_vout
->
b_grayscale
?
"gray"
:
"rgb"
,
p_vout
->
i_width
,
p_vout
->
i_height
,
p_vout
->
i_screen_depth
,
p_vout
->
f_x_ratio
,
p_vout
->
f_y_ratio
,
p_vout
->
f_gamma
,
i_reserved_pic
,
i_ready_pic
,
VOUT_MAX_PICTURES
);
vout_SysPrint
(
p_vout
,
0
,
p_vout
->
i_height
,
-
1
,
1
,
psz_buffer
);
#endif
return
(
0
);
}
/*******************************************************************************
* Manage: manage thread
*******************************************************************************
*
??
*
This function will handle changes in thread configuration.
*******************************************************************************/
static
int
Manage
(
vout_thread_t
*
p_vout
)
{
//??
/* On gamma or grayscale change, rebuild tables */
if
(
p_vout
->
i_changes
&
(
VOUT_GAMMA_CHANGE
|
VOUT_GRAYSCALE_CHANGE
)
)
{
vout_ResetTables
(
p_vout
);
}
/* Clear changes flags which does not need management or have been handled */
p_vout
->
i_changes
&=
~
(
VOUT_INFO_CHANGE
|
VOUT_GAMMA_CHANGE
|
VOUT_GRAYSCALE_CHANGE
);
/* Detect unauthorized changes */
if
(
p_vout
->
i_changes
)
...
...
src/video_output/video_x11.c
View file @
27e0b63d
...
...
@@ -82,7 +82,7 @@ static void X11DestroyShmImage ( vout_thread_t *p_vout, XImage *p_ximage,
* vout properties to choose the window size, and change them according to the
* actual properties of the display.
*******************************************************************************/
int
vout_SysCreate
(
vout_thread_t
*
p_vout
,
char
*
psz_display
,
Window
root_window
)
int
vout_SysCreate
(
vout_thread_t
*
p_vout
,
char
*
psz_display
,
int
i_
root_window
)
{
/* Allocate structure */
p_vout
->
p_sys
=
malloc
(
sizeof
(
vout_sys_t
)
);
...
...
@@ -96,7 +96,7 @@ int vout_SysCreate( vout_thread_t *p_vout, char *psz_display, Window root_window
* Since XLib is usually not thread-safe, we can't use the same display
* pointer than the interface or another thread. However, the root window
* id is still valid. */
if
(
X11OpenDisplay
(
p_vout
,
psz_display
,
root_window
)
)
if
(
X11OpenDisplay
(
p_vout
,
psz_display
,
i_
root_window
)
)
{
intf_ErrMsg
(
"error: can't initialize X11 display
\n
"
);
free
(
p_vout
->
p_sys
);
...
...
@@ -259,7 +259,7 @@ void vout_SysDisplay( vout_thread_t *p_vout )
p_vout
->
p_sys
->
p_ximage
[
p_vout
->
p_sys
->
i_buffer_index
]
->
height
);
/* Send the order to the X server */
XFlush
(
p_vout
->
p_sys
->
p_display
);
/* ?? not needed ? */
XFlush
(
p_vout
->
p_sys
->
p_display
);
}
/* Swap buffers */
...
...
@@ -291,17 +291,19 @@ void vout_SysPrint( vout_thread_t *p_vout, int i_x, int i_y, int i_halign,
int
i_byte
;
/* byte offset in character line */
int
i_height
;
/* character height */
int
i_char_bytes_per_line
;
/* total bytes per line */
int
i_text_width
;
/* total text width */
byte_t
*
pi_pic
;
/* picture data */
byte_t
*
pi_char
;
/* character data */
/* Update upper left coordinates according to alignment */
i_text_width
=
p_vout
->
p_sys
->
i_char_interspacing
*
strlen
(
psz_text
);
switch
(
i_halign
)
{
case
0
:
/* centered */
i_x
-=
p_vout
->
p_sys
->
i_char_interspacing
*
strlen
(
psz_text
)
/
2
;
i_x
-=
i_text_width
/
2
;
break
;
case
1
:
/* right aligned */
i_x
-=
p_vout
->
p_sys
->
i_char_interspacing
*
strlen
(
psz_text
)
;
i_x
-=
i_text_width
;
break
;
}
switch
(
i_valign
)
...
...
@@ -318,11 +320,20 @@ void vout_SysPrint( vout_thread_t *p_vout, int i_x, int i_y, int i_halign,
i_height
=
p_vout
->
p_sys
->
i_char_height
;
i_char_bytes_per_line
=
p_vout
->
p_sys
->
i_char_bytes_per_line
;
/* Check that the text is in the screen vertically and horizontally */
if
(
(
i_y
<
0
)
||
(
i_y
+
i_height
>
p_vout
->
i_height
)
||
(
i_x
<
0
)
||
(
i_x
+
i_text_width
>
p_vout
->
i_width
)
)
{
intf_DbgMsg
(
"text '%s' would print outside the screen
\n
"
,
psz_text
);
return
;
}
/* Print text */
for
(
;
*
psz_text
!=
'\0'
;
psz_text
++
)
{
/* Check that the character is valid and in the screen horizontally */
if
(
(
*
psz_text
>=
VOUT_MIN_CHAR
)
&&
(
*
psz_text
<
VOUT_MAX_CHAR
)
)
{
{
/* Select character */
pi_char
=
p_vout
->
p_sys
->
pi_font
+
(
*
psz_text
-
VOUT_MIN_CHAR
)
*
i_height
*
i_char_bytes_per_line
;
...
...
src/video_output/video_yuv.c
View file @
27e0b63d
...
...
@@ -15,10 +15,6 @@
#include <string.h>
#include <stdlib.h>
#ifdef VIDEO_X11
#include <X11/Xlib.h>
/* for video_sys.h in X11 mode */
#endif
#include "common.h"
#include "config.h"
#include "mtime.h"
...
...
@@ -319,9 +315,8 @@ int vout_InitTables( vout_thread_t *p_vout )
*******************************************************************************/
int
vout_ResetTables
(
vout_thread_t
*
p_vout
)
{
// ?? realloc if b_grayscale or i_screen_depth changed
SetTables
(
p_vout
);
return
(
0
);
vout_EndTables
(
p_vout
);
return
(
vout_InitTables
(
p_vout
)
);
}
/*******************************************************************************
...
...
@@ -413,7 +408,7 @@ static void SetTables( vout_thread_t *p_vout )
*/
for
(
i_index
=
0
;
i_index
<
256
;
i_index
++
)
{
i_gamma
[
i_index
]
=
255
.
*
exp
(
(
double
)
i_index
*
p_vout
->
f_gamma
/
255
.
);
i_gamma
[
i_index
]
=
255
.
*
pow
(
(
double
)
i_index
/
255
.,
exp
(
p_vout
->
f_gamma
)
);
}
/*
...
...
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