Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-gpu
Commits
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
Show 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,7 +106,7 @@ 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 */
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
...
...
@@ -113,7 +114,7 @@ typedef struct vout_thread_s
/* 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
);
...
...
@@ -616,7 +611,6 @@ static void RunThread( vout_thread_t *p_vout)
}
}
/*
* 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
);
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
#ifdef DEBUG_VIDEO
//??
#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,9 +320,18 @@ 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 */
...
...
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