Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
3a45b93f
Commit
3a45b93f
authored
Feb 01, 2000
by
Vincent Seguin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Scaling horizontal >=1
parent
01fcd5af
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
186 additions
and
120 deletions
+186
-120
include/config.h
include/config.h
+5
-2
include/video_output.h
include/video_output.h
+1
-0
src/video_output/video_output.c
src/video_output/video_output.c
+39
-21
src/video_output/video_yuv.c
src/video_output/video_yuv.c
+141
-97
No files found.
include/config.h
View file @
3a45b93f
...
@@ -293,8 +293,11 @@
...
@@ -293,8 +293,11 @@
#define VPAR_IDLE_SLEEP 100000
#define VPAR_IDLE_SLEEP 100000
/* Time to sleep when waiting for a buffer (from vout or the video fifo). */
/* Time to sleep when waiting for a buffer (from vout or the video fifo).
#define VPAR_OUTMEM_SLEEP 100000
* It should be approximately the time needed to perform a complete picture
* loop. Since it only happens when the video heap is full, it does not need
* to be too low, even if it blocks the decoder. */
#define VPAR_OUTMEM_SLEEP 50000
/* Optimization level, from 0 to 2 - 1 is generally a good compromise. Remember
/* Optimization level, from 0 to 2 - 1 is generally a good compromise. Remember
* that raising this level dramatically lengthens the compilation time. */
* that raising this level dramatically lengthens the compilation time. */
...
...
include/video_output.h
View file @
3a45b93f
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
* i_pic_width, i_pic_height picture extension
* i_pic_width, i_pic_height picture extension
* i_pic_line_width picture total line width
* i_pic_line_width picture total line width
* i_matrix_coefficients matrix coefficients
* i_matrix_coefficients matrix coefficients
* Picture width and source dimensions must be multiples of 16.
*******************************************************************************/
*******************************************************************************/
typedef
void
(
vout_yuv_convert_t
)(
p_vout_thread_t
p_vout
,
void
*
p_pic
,
typedef
void
(
vout_yuv_convert_t
)(
p_vout_thread_t
p_vout
,
void
*
p_pic
,
yuv_data_t
*
p_y
,
yuv_data_t
*
p_u
,
yuv_data_t
*
p_v
,
yuv_data_t
*
p_y
,
yuv_data_t
*
p_u
,
yuv_data_t
*
p_v
,
...
...
src/video_output/video_output.c
View file @
3a45b93f
...
@@ -396,13 +396,13 @@ void vout_DestroySubPicture( vout_thread_t *p_vout, subpicture_t *p_subpic )
...
@@ -396,13 +396,13 @@ void vout_DestroySubPicture( vout_thread_t *p_vout, subpicture_t *p_subpic )
#endif
#endif
}
}
/******************************************************************************
/******************************************************************************
*
* vout_DisplayPicture: display a picture
* vout_DisplayPicture: display a picture
******************************************************************************
******************************************************************************
*
* Remove the reservation flag of a picture, which will cause it to be ready for
* Remove the reservation flag of a picture, which will cause it to be ready for
* display. The picture won't be displayed until vout_DatePicture has been
* display. The picture won't be displayed until vout_DatePicture has been
* called.
* called.
******************************************************************************/
******************************************************************************
*
/
void
vout_DisplayPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
void
vout_DisplayPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
{
{
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
...
@@ -422,21 +422,24 @@ void vout_DisplayPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -422,21 +422,24 @@ void vout_DisplayPicture( vout_thread_t *p_vout, picture_t *p_pic )
}
}
#ifdef DEBUG_VIDEO
#ifdef DEBUG_VIDEO
intf_DbgMsg
(
"picture %p
\n
"
,
p_pic
);
intf_DbgMsg
(
"picture %p
\n
"
,
p_pic
);
#endif
#endif
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
}
}
/******************************************************************************
/******************************************************************************
*
* vout_DatePicture: date a picture
* vout_DatePicture: date a picture
******************************************************************************
******************************************************************************
*
* Remove the reservation flag of a picture, which will cause it to be ready for
* Remove the reservation flag of a picture, which will cause it to be ready for
* display. The picture won't be displayed until vout_DisplayPicture has been
* display. The picture won't be displayed until vout_DisplayPicture has been
* called.
* called.
******************************************************************************/
******************************************************************************
*
/
void
vout_DatePicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
,
mtime_t
date
)
void
vout_DatePicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
,
mtime_t
date
)
{
{
#ifdef DEBUG_VIDEO
char
psz_date
[
MSTRTIME_MAX_SIZE
];
/* date */
#endif
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
vlc_mutex_lock
(
&
p_vout
->
picture_lock
);
p_pic
->
date
=
date
;
p_pic
->
date
=
date
;
switch
(
p_pic
->
i_status
)
switch
(
p_pic
->
i_status
)
...
@@ -455,9 +458,8 @@ void vout_DatePicture( vout_thread_t *p_vout, picture_t *p_pic, mtime_t date )
...
@@ -455,9 +458,8 @@ void vout_DatePicture( vout_thread_t *p_vout, picture_t *p_pic, mtime_t date )
}
}
#ifdef DEBUG_VIDEO
#ifdef DEBUG_VIDEO
intf_DbgMsg
(
"picture %p
\n
"
,
p_pic
);
intf_DbgMsg
(
"picture %p
, display date: %s
\n
"
,
p_pic
,
mstrtime
(
psz_date
,
p_pic
->
date
)
);
#endif
#endif
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
}
}
...
@@ -1265,10 +1267,9 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -1265,10 +1267,9 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
*/
*/
if
(
p_pic
!=
NULL
)
if
(
p_pic
!=
NULL
)
{
{
/* Try horizontal scaling first */
/* Try horizontal scaling first - width must be a mutiple of 16 */
i_pic_width
=
(
p_vout
->
b_scale
||
(
p_pic
->
i_width
>
i_vout_width
))
?
i_pic_width
=
((
p_vout
->
b_scale
||
(
p_pic
->
i_width
>
i_vout_width
))
?
i_vout_width
:
p_pic
->
i_width
;
i_vout_width
:
p_pic
->
i_width
)
&
~
0xf
;
i_pic_width
=
i_pic_width
;
switch
(
p_pic
->
i_aspect_ratio
)
switch
(
p_pic
->
i_aspect_ratio
)
{
{
case
AR_3_4_PICTURE
:
case
AR_3_4_PICTURE
:
...
@@ -1287,7 +1288,8 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -1287,7 +1288,8 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
}
}
/* If picture dimensions using horizontal scaling are too large, use
/* If picture dimensions using horizontal scaling are too large, use
* vertical scaling */
* vertical scaling. Since width must be a multiple of 16, height is
* adjusted again after. */
if
(
i_pic_height
>
i_vout_height
)
if
(
i_pic_height
>
i_vout_height
)
{
{
i_pic_height
=
(
p_vout
->
b_scale
||
(
p_pic
->
i_height
>
i_vout_height
))
?
i_pic_height
=
(
p_vout
->
b_scale
||
(
p_pic
->
i_height
>
i_vout_height
))
?
...
@@ -1295,20 +1297,23 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -1295,20 +1297,23 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
switch
(
p_pic
->
i_aspect_ratio
)
switch
(
p_pic
->
i_aspect_ratio
)
{
{
case
AR_3_4_PICTURE
:
case
AR_3_4_PICTURE
:
i_pic_width
=
i_pic_height
*
4
/
3
;
i_pic_width
=
(
i_pic_height
*
4
/
3
)
&
~
0xf
;
i_pic_height
=
i_pic_width
*
3
/
4
;
break
;
break
;
case
AR_16_9_PICTURE
:
case
AR_16_9_PICTURE
:
i_pic_width
=
i_pic_height
*
16
/
9
;
i_pic_width
=
(
i_pic_height
*
16
/
9
)
&
~
0xf
;
i_pic_height
=
i_pic_width
*
9
/
16
;
break
;
break
;
case
AR_221_1_PICTURE
:
case
AR_221_1_PICTURE
:
i_pic_width
=
i_pic_height
*
221
/
100
;
i_pic_width
=
(
i_pic_height
*
221
/
100
)
&
~
0xf
;
i_pic_height
=
i_pic_width
*
100
/
221
;
break
;
break
;
case
AR_SQUARE_PICTURE
:
case
AR_SQUARE_PICTURE
:
default:
default:
i_pic_width
=
p_pic
->
i_width
*
i_pic_height
/
p_pic
->
i_height
;
i_pic_width
=
(
p_pic
->
i_width
*
i_pic_height
/
p_pic
->
i_height
)
&
~
0xf
;
i_pic_height
=
p_pic
->
i_height
*
i_pic_width
/
p_pic
->
i_width
;
break
;
break
;
}
}
i_pic_width
=
i_pic_width
;
}
}
/* Set picture position */
/* Set picture position */
...
@@ -1386,7 +1391,7 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -1386,7 +1391,7 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
#ifdef DEBUG_VIDEO
#ifdef DEBUG_VIDEO
/*
/*
* In DEBUG_VIDEO
_MODE
, draw white pixels at the beginning and the end of
* In DEBUG_VIDEO
mode
, draw white pixels at the beginning and the end of
* the picture area. These pixels should not be erased by rendering functions,
* the picture area. These pixels should not be erased by rendering functions,
* otherwise segmentation fault is menacing !
* otherwise segmentation fault is menacing !
*/
*/
...
@@ -1423,6 +1428,10 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -1423,6 +1428,10 @@ static void SetBufferPicture( vout_thread_t *p_vout, picture_t *p_pic )
******************************************************************************/
******************************************************************************/
static
void
RenderPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
static
void
RenderPicture
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
{
{
#ifdef DEBUG_VIDEO
char
psz_date
[
MSTRTIME_MAX_SIZE
];
/* picture date */
mtime_t
render_time
;
/* picture rendering time */
#endif
vout_buffer_t
*
p_buffer
;
/* rendering buffer */
vout_buffer_t
*
p_buffer
;
/* rendering buffer */
byte_t
*
p_pic_data
;
/* convertion destination */
byte_t
*
p_pic_data
;
/* convertion destination */
...
@@ -1431,6 +1440,9 @@ static void RenderPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -1431,6 +1440,9 @@ static void RenderPicture( vout_thread_t *p_vout, picture_t *p_pic )
p_pic_data
=
p_buffer
->
p_data
+
p_pic_data
=
p_buffer
->
p_data
+
p_buffer
->
i_pic_x
*
p_vout
->
i_bytes_per_pixel
+
p_buffer
->
i_pic_x
*
p_vout
->
i_bytes_per_pixel
+
p_buffer
->
i_pic_y
*
p_vout
->
i_bytes_per_line
;
p_buffer
->
i_pic_y
*
p_vout
->
i_bytes_per_line
;
#ifdef DEBUG_VIDEO
render_time
=
mdate
();
#endif
/*
/*
* Choose appropriate rendering function and render picture
* Choose appropriate rendering function and render picture
...
@@ -1467,6 +1479,12 @@ static void RenderPicture( vout_thread_t *p_vout, picture_t *p_pic )
...
@@ -1467,6 +1479,12 @@ static void RenderPicture( vout_thread_t *p_vout, picture_t *p_pic )
break
;
break
;
#endif
#endif
}
}
#ifdef DEBUG_VIDEO
/* Print picture date and rendering time */
intf_DbgMsg
(
"picture %p rendered (%ld us), display date: %s
\n
"
,
p_pic
,
(
long
)
(
mdate
()
-
render_time
),
mstrtime
(
psz_date
,
p_pic
->
date
));
#endif
}
}
/******************************************************************************
/******************************************************************************
...
...
src/video_output/video_yuv.c
View file @
3a45b93f
This diff is collapsed.
Click to expand it.
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