Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
Steve Lhomme
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 displaydate */
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 volume
\n
"
\
"
m
mut
e
\n
"
\
"
f
fullscreen
\n
"
\
" +, -
, m
change volume
, mute
\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
lef
t corner
/*
* Print
picture information
in lower
righ
t 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
++
)