Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
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-2-2
Commits
b110c387
Commit
b110c387
authored
May 16, 2009
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added a picture_Setup to replace vout_InitPicture.
parent
fb671394
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
262 additions
and
0 deletions
+262
-0
include/vlc_picture.h
include/vlc_picture.h
+13
-0
src/libvlccore.sym
src/libvlccore.sym
+1
-0
src/video_output/vout_pictures.c
src/video_output/vout_pictures.c
+248
-0
No files found.
include/vlc_picture.h
View file @
b110c387
...
...
@@ -221,6 +221,19 @@ static inline void picture_Copy( picture_t *p_dst, const picture_t *p_src )
*/
VLC_EXPORT
(
int
,
picture_Export
,
(
vlc_object_t
*
p_obj
,
block_t
**
pp_image
,
video_format_t
*
p_fmt
,
picture_t
*
p_picture
,
vlc_fourcc_t
i_format
,
int
i_override_width
,
int
i_override_height
)
);
/**
* This function will setup all fields of a picture_t without allocating any
* memory.
* XXX The memory must already be initialized.
* It does not need to be released.
*
* It will return VLC_EGENERIC if the core does not understand the requested
* format.
*
* It can be usefull to get the properties of planes.
*/
VLC_EXPORT
(
int
,
picture_Setup
,
(
picture_t
*
,
vlc_fourcc_t
i_chroma
,
int
i_width
,
int
i_height
,
int
i_aspect
)
);
/*****************************************************************************
* Flags used to describe the status of a picture
*****************************************************************************/
...
...
src/libvlccore.sym
View file @
b110c387
...
...
@@ -279,6 +279,7 @@ picture_CopyPixels
picture_Delete
picture_Export
picture_New
picture_Setup
plane_CopyPixels
playlist_Add
playlist_AddExt
...
...
src/video_output/vout_pictures.c
View file @
b110c387
...
...
@@ -1002,6 +1002,254 @@ static void PictureReleaseCallback( picture_t *p_picture )
return
;
picture_Delete
(
p_picture
);
}
/*****************************************************************************
*
*****************************************************************************/
int
picture_Setup
(
picture_t
*
p_picture
,
vlc_fourcc_t
i_chroma
,
int
i_width
,
int
i_height
,
int
i_aspect
)
{
int
i_index
,
i_width_aligned
,
i_height_aligned
;
/* Store default values */
for
(
i_index
=
0
;
i_index
<
VOUT_MAX_PLANES
;
i_index
++
)
{
p_picture
->
p
[
i_index
].
p_pixels
=
NULL
;
p_picture
->
p
[
i_index
].
i_pixel_pitch
=
1
;
}
p_picture
->
pf_release
=
NULL
;
p_picture
->
pf_lock
=
NULL
;
p_picture
->
pf_unlock
=
NULL
;
p_picture
->
i_refcount
=
0
;
p_picture
->
i_qtype
=
QTYPE_NONE
;
p_picture
->
i_qstride
=
0
;
p_picture
->
p_q
=
NULL
;
video_format_Setup
(
&
p_picture
->
format
,
i_chroma
,
i_width
,
i_height
,
i_aspect
);
/* Make sure the real dimensions are a multiple of 16 */
i_width_aligned
=
(
i_width
+
15
)
>>
4
<<
4
;
i_height_aligned
=
(
i_height
+
15
)
>>
4
<<
4
;
/* Calculate coordinates */
switch
(
vlc_fourcc_GetCodec
(
VIDEO_ES
,
i_chroma
)
)
{
case
VLC_CODEC_I411
:
p_picture
->
p
[
Y_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
Y_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
U_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
U_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
U_PLANE
].
i_pitch
=
i_width_aligned
/
4
;
p_picture
->
p
[
U_PLANE
].
i_visible_pitch
=
i_width
/
4
;
p_picture
->
p
[
V_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
V_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
V_PLANE
].
i_pitch
=
i_width_aligned
/
4
;
p_picture
->
p
[
V_PLANE
].
i_visible_pitch
=
i_width
/
4
;
p_picture
->
i_planes
=
3
;
break
;
case
VLC_CODEC_I410
:
p_picture
->
p
[
Y_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
Y_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
U_PLANE
].
i_lines
=
i_height_aligned
/
4
;
p_picture
->
p
[
U_PLANE
].
i_visible_lines
=
i_height
/
4
;
p_picture
->
p
[
U_PLANE
].
i_pitch
=
i_width_aligned
/
4
;
p_picture
->
p
[
U_PLANE
].
i_visible_pitch
=
i_width
/
4
;
p_picture
->
p
[
V_PLANE
].
i_lines
=
i_height_aligned
/
4
;
p_picture
->
p
[
V_PLANE
].
i_visible_lines
=
i_height
/
4
;
p_picture
->
p
[
V_PLANE
].
i_pitch
=
i_width_aligned
/
4
;
p_picture
->
p
[
V_PLANE
].
i_visible_pitch
=
i_width
/
4
;
p_picture
->
i_planes
=
3
;
break
;
case
VLC_CODEC_YV12
:
case
VLC_CODEC_I420
:
case
VLC_CODEC_J420
:
p_picture
->
p
[
Y_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
Y_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
U_PLANE
].
i_lines
=
i_height_aligned
/
2
;
p_picture
->
p
[
U_PLANE
].
i_visible_lines
=
i_height
/
2
;
p_picture
->
p
[
U_PLANE
].
i_pitch
=
i_width_aligned
/
2
;
p_picture
->
p
[
U_PLANE
].
i_visible_pitch
=
i_width
/
2
;
p_picture
->
p
[
V_PLANE
].
i_lines
=
i_height_aligned
/
2
;
p_picture
->
p
[
V_PLANE
].
i_visible_lines
=
i_height
/
2
;
p_picture
->
p
[
V_PLANE
].
i_pitch
=
i_width_aligned
/
2
;
p_picture
->
p
[
V_PLANE
].
i_visible_pitch
=
i_width
/
2
;
p_picture
->
i_planes
=
3
;
break
;
case
VLC_CODEC_I422
:
case
VLC_CODEC_J422
:
p_picture
->
p
[
Y_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
Y_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
U_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
U_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
U_PLANE
].
i_pitch
=
i_width_aligned
/
2
;
p_picture
->
p
[
U_PLANE
].
i_visible_pitch
=
i_width
/
2
;
p_picture
->
p
[
V_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
V_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
V_PLANE
].
i_pitch
=
i_width_aligned
/
2
;
p_picture
->
p
[
V_PLANE
].
i_visible_pitch
=
i_width
/
2
;
p_picture
->
i_planes
=
3
;
break
;
case
VLC_CODEC_I440
:
case
VLC_CODEC_J440
:
p_picture
->
p
[
Y_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
Y_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
U_PLANE
].
i_lines
=
i_height_aligned
/
2
;
p_picture
->
p
[
U_PLANE
].
i_visible_lines
=
i_height
/
2
;
p_picture
->
p
[
U_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
U_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
V_PLANE
].
i_lines
=
i_height_aligned
/
2
;
p_picture
->
p
[
V_PLANE
].
i_visible_lines
=
i_height
/
2
;
p_picture
->
p
[
V_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
V_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
i_planes
=
3
;
break
;
case
VLC_CODEC_I444
:
case
VLC_CODEC_J444
:
p_picture
->
p
[
Y_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
Y_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
U_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
U_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
U_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
U_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
V_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
V_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
V_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
V_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
i_planes
=
3
;
break
;
case
VLC_CODEC_YUVA
:
p_picture
->
p
[
Y_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
Y_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
Y_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
U_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
U_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
U_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
U_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
V_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
V_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
V_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
V_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
p
[
A_PLANE
].
i_lines
=
i_height_aligned
;
p_picture
->
p
[
A_PLANE
].
i_visible_lines
=
i_height
;
p_picture
->
p
[
A_PLANE
].
i_pitch
=
i_width_aligned
;
p_picture
->
p
[
A_PLANE
].
i_visible_pitch
=
i_width
;
p_picture
->
i_planes
=
4
;
break
;
case
VLC_CODEC_YUVP
:
p_picture
->
p
->
i_lines
=
i_height_aligned
;
p_picture
->
p
->
i_visible_lines
=
i_height
;
p_picture
->
p
->
i_pitch
=
i_width_aligned
;
p_picture
->
p
->
i_visible_pitch
=
i_width
;
p_picture
->
p
->
i_pixel_pitch
=
8
;
p_picture
->
i_planes
=
1
;
break
;
case
VLC_CODEC_Y211
:
p_picture
->
p
->
i_lines
=
i_height_aligned
;
p_picture
->
p
->
i_visible_lines
=
i_height
;
p_picture
->
p
->
i_pitch
=
i_width_aligned
;
p_picture
->
p
->
i_visible_pitch
=
i_width
;
p_picture
->
p
->
i_pixel_pitch
=
4
;
p_picture
->
i_planes
=
1
;
break
;
case
VLC_CODEC_UYVY
:
case
VLC_CODEC_VYUY
:
case
VLC_CODEC_YUYV
:
case
VLC_CODEC_YVYU
:
p_picture
->
p
->
i_lines
=
i_height_aligned
;
p_picture
->
p
->
i_visible_lines
=
i_height
;
p_picture
->
p
->
i_pitch
=
i_width_aligned
*
2
;
p_picture
->
p
->
i_visible_pitch
=
i_width
*
2
;
p_picture
->
p
->
i_pixel_pitch
=
4
;
p_picture
->
i_planes
=
1
;
break
;
case
VLC_CODEC_RGB8
:
p_picture
->
p
->
i_lines
=
i_height_aligned
;
p_picture
->
p
->
i_visible_lines
=
i_height
;
p_picture
->
p
->
i_pitch
=
i_width_aligned
;
p_picture
->
p
->
i_visible_pitch
=
i_width
;
p_picture
->
p
->
i_pixel_pitch
=
1
;
p_picture
->
i_planes
=
1
;
break
;
case
VLC_CODEC_RGB15
:
p_picture
->
p
->
i_lines
=
i_height_aligned
;
p_picture
->
p
->
i_visible_lines
=
i_height
;
p_picture
->
p
->
i_pitch
=
i_width_aligned
*
2
;
p_picture
->
p
->
i_visible_pitch
=
i_width
*
2
;
p_picture
->
p
->
i_pixel_pitch
=
2
;
p_picture
->
i_planes
=
1
;
break
;
case
VLC_CODEC_RGB16
:
p_picture
->
p
->
i_lines
=
i_height_aligned
;
p_picture
->
p
->
i_visible_lines
=
i_height
;
p_picture
->
p
->
i_pitch
=
i_width_aligned
*
2
;
p_picture
->
p
->
i_visible_pitch
=
i_width
*
2
;
p_picture
->
p
->
i_pixel_pitch
=
2
;
p_picture
->
i_planes
=
1
;
break
;
case
VLC_CODEC_RGB24
:
p_picture
->
p
->
i_lines
=
i_height_aligned
;
p_picture
->
p
->
i_visible_lines
=
i_height
;
p_picture
->
p
->
i_pitch
=
i_width_aligned
*
3
;
p_picture
->
p
->
i_visible_pitch
=
i_width
*
3
;
p_picture
->
p
->
i_pixel_pitch
=
3
;
p_picture
->
i_planes
=
1
;
break
;
case
VLC_CODEC_RGB32
:
case
VLC_CODEC_RGBA
:
p_picture
->
p
->
i_lines
=
i_height_aligned
;
p_picture
->
p
->
i_visible_lines
=
i_height
;
p_picture
->
p
->
i_pitch
=
i_width_aligned
*
4
;
p_picture
->
p
->
i_visible_pitch
=
i_width
*
4
;
p_picture
->
p
->
i_pixel_pitch
=
4
;
p_picture
->
i_planes
=
1
;
break
;
case
VLC_CODEC_GREY
:
case
VLC_CODEC_RGBP
:
p_picture
->
p
->
i_lines
=
i_height_aligned
;
p_picture
->
p
->
i_visible_lines
=
i_height
;
p_picture
->
p
->
i_pitch
=
i_width_aligned
;
p_picture
->
p
->
i_visible_pitch
=
i_width
;
p_picture
->
p
->
i_pixel_pitch
=
1
;
p_picture
->
i_planes
=
1
;
break
;
default:
p_picture
->
i_planes
=
0
;
return
VLC_EGENERIC
;
}
return
VLC_SUCCESS
;
}
/*****************************************************************************
*
*****************************************************************************/
...
...
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