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
c3fab723
Commit
c3fab723
authored
May 16, 2009
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Split vlc_vout.h into vlc_picture.h and vlc_subpicture.h
parent
d0b46b67
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
467 additions
and
389 deletions
+467
-389
include/vlc_picture.h
include/vlc_picture.h
+282
-0
include/vlc_subpicture.h
include/vlc_subpicture.h
+181
-0
include/vlc_vout.h
include/vlc_vout.h
+2
-389
src/Makefile.am
src/Makefile.am
+2
-0
No files found.
include/vlc_picture.h
0 → 100644
View file @
c3fab723
/*****************************************************************************
* vlc_picture.h: picture definitions
*****************************************************************************
* Copyright (C) 1999 - 2009 the VideoLAN team
* $Id$
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
* Olivier Aubert <oaubert 47 videolan d07 org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef VLC_PICTURE_H
#define VLC_PICTURE_H 1
/**
* \file
* This file defines picture structures and functions in vlc
*/
#include <vlc_es.h>
/** Description of a planar graphic field */
typedef
struct
plane_t
{
uint8_t
*
p_pixels
;
/**< Start of the plane's data */
/* Variables used for fast memcpy operations */
int
i_lines
;
/**< Number of lines, including margins */
int
i_pitch
;
/**< Number of bytes in a line, including margins */
/** Size of a macropixel, defaults to 1 */
int
i_pixel_pitch
;
/* Variables used for pictures with margins */
int
i_visible_lines
;
/**< How many visible lines are there ? */
int
i_visible_pitch
;
/**< How many visible pixels are there ? */
}
plane_t
;
/**
* Video picture
*
* Any picture destined to be displayed by a video output thread should be
* stored in this structure from it's creation to it's effective display.
* Picture type and flags should only be modified by the output thread. Note
* that an empty picture MUST have its flags set to 0.
*/
struct
picture_t
{
/**
* The properties of the picture
*/
video_frame_format_t
format
;
/** Picture data - data can always be freely modified, but p_data may
* NEVER be modified. A direct buffer can be handled as the plugin
* wishes, it can even swap p_pixels buffers. */
uint8_t
*
p_data
;
void
*
p_data_orig
;
/**< pointer before memalign */
plane_t
p
[
VOUT_MAX_PLANES
];
/**< description of the planes */
int
i_planes
;
/**< number of allocated planes */
/** \name Type and flags
* Should NOT be modified except by the vout thread
* @{*/
int
i_status
;
/**< picture flags */
int
i_type
;
/**< is picture a direct buffer ? */
bool
b_slow
;
/**< is picture in slow memory ? */
/**@}*/
/** \name Picture management properties
* These properties can be modified using the video output thread API,
* but should never be written directly */
/**@{*/
unsigned
i_refcount
;
/**< link reference counter */
mtime_t
date
;
/**< display date */
bool
b_force
;
/**@}*/
/** \name Picture dynamic properties
* Those properties can be changed by the decoder
* @{
*/
bool
b_progressive
;
/**< is it a progressive frame ? */
unsigned
int
i_nb_fields
;
/**< # of displayed fields */
bool
b_top_field_first
;
/**< which field is first */
uint8_t
*
p_q
;
/**< quantification table */
int
i_qstride
;
/**< quantification stride */
int
i_qtype
;
/**< quantification style */
/**@}*/
/** The picture heap we are attached to */
picture_heap_t
*
p_heap
;
/* Some vouts require the picture to be locked before it can be modified */
int
(
*
pf_lock
)
(
vout_thread_t
*
,
picture_t
*
);
int
(
*
pf_unlock
)
(
vout_thread_t
*
,
picture_t
*
);
/** Private data - the video output plugin might want to put stuff here to
* keep track of the picture */
picture_sys_t
*
p_sys
;
/** This way the picture_Release can be overloaded */
void
(
*
pf_release
)(
picture_t
*
);
/** Next picture in a FIFO a pictures */
struct
picture_t
*
p_next
;
};
/**
* This function will create a new picture.
* The picture created will implement a default release management compatible
* with picture_Hold and picture_Release. This default management will release
* picture_sys_t *p_sys field if non NULL.
*/
VLC_EXPORT
(
picture_t
*
,
picture_New
,
(
vlc_fourcc_t
i_chroma
,
int
i_width
,
int
i_height
,
int
i_aspect
)
);
/**
* This function will force the destruction a picture.
* The value of the picture reference count should be 0 before entering this
* function.
* Unless used for reimplementing pf_release, you should not use this
* function but picture_Release.
*/
VLC_EXPORT
(
void
,
picture_Delete
,
(
picture_t
*
)
);
/**
* This function will increase the picture reference count.
* It will not have any effect on picture obtained from vout
*/
static
inline
void
picture_Hold
(
picture_t
*
p_picture
)
{
if
(
p_picture
->
pf_release
)
p_picture
->
i_refcount
++
;
}
/**
* This function will release a picture.
* It will not have any effect on picture obtained from vout
*/
static
inline
void
picture_Release
(
picture_t
*
p_picture
)
{
/* FIXME why do we let pf_release handle the i_refcount ? */
if
(
p_picture
->
pf_release
)
p_picture
->
pf_release
(
p_picture
);
}
/**
* Cleanup quantization matrix data and set to 0
*/
static
inline
void
picture_CleanupQuant
(
picture_t
*
p_pic
)
{
free
(
p_pic
->
p_q
);
p_pic
->
p_q
=
NULL
;
p_pic
->
i_qstride
=
0
;
p_pic
->
i_qtype
=
0
;
}
/**
* This function will copy all picture dynamic properties.
*/
static
inline
void
picture_CopyProperties
(
picture_t
*
p_dst
,
const
picture_t
*
p_src
)
{
p_dst
->
date
=
p_src
->
date
;
p_dst
->
b_force
=
p_src
->
b_force
;
p_dst
->
b_progressive
=
p_src
->
b_progressive
;
p_dst
->
i_nb_fields
=
p_src
->
i_nb_fields
;
p_dst
->
b_top_field_first
=
p_src
->
b_top_field_first
;
/* FIXME: copy ->p_q and ->p_qstride */
}
/**
* This function will copy the picture pixels.
* You can safely copy between pictures that do not have the same size,
* only the compatible(smaller) part will be copied.
*/
VLC_EXPORT
(
void
,
picture_CopyPixels
,
(
picture_t
*
p_dst
,
const
picture_t
*
p_src
)
);
VLC_EXPORT
(
void
,
plane_CopyPixels
,
(
plane_t
*
p_dst
,
const
plane_t
*
p_src
)
);
/**
* This function will copy both picture dynamic properties and pixels.
* You have to notice that sometime a simple picture_Hold may do what
* you want without the copy overhead.
* Provided for convenience.
*
* \param p_dst pointer to the destination picture.
* \param p_src pointer to the source picture.
*/
static
inline
void
picture_Copy
(
picture_t
*
p_dst
,
const
picture_t
*
p_src
)
{
picture_CopyPixels
(
p_dst
,
p_src
);
picture_CopyProperties
(
p_dst
,
p_src
);
}
/**
* This function will export a picture to an encoded bitstream.
*
* pp_image will contain the encoded bitstream in psz_format format.
*
* p_fmt can be NULL otherwise it will be set with the format used for the
* picture before encoding.
*
* i_override_width/height allow to override the width and/or the height of the
* picture to be encoded. If at most one of them is > 0 then the picture aspect
* ratio will be kept.
*/
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
)
);
/*****************************************************************************
* Flags used to describe the status of a picture
*****************************************************************************/
/* Picture type
* FIXME are the values meaningfull ? */
enum
{
EMPTY_PICTURE
=
0
,
/* empty buffer */
MEMORY_PICTURE
=
100
,
/* heap-allocated buffer */
DIRECT_PICTURE
=
200
,
/* direct buffer */
};
/* Picture status */
enum
{
FREE_PICTURE
,
/* free and not allocated */
RESERVED_PICTURE
,
/* allocated and reserved */
READY_PICTURE
,
/* ready for display */
DISPLAYED_PICTURE
,
/* been displayed but is linked */
DESTROYED_PICTURE
,
/* allocated but no more used */
};
/* Quantification type */
enum
{
QTYPE_NONE
,
QTYPE_MPEG1
,
QTYPE_MPEG2
,
QTYPE_H264
,
};
/*****************************************************************************
* Shortcuts to access image components
*****************************************************************************/
/* Plane indices */
enum
{
Y_PLANE
=
0
,
U_PLANE
=
1
,
V_PLANE
=
2
,
A_PLANE
=
3
,
};
/* Shortcuts */
#define Y_PIXELS p[Y_PLANE].p_pixels
#define Y_PITCH p[Y_PLANE].i_pitch
#define U_PIXELS p[U_PLANE].p_pixels
#define U_PITCH p[U_PLANE].i_pitch
#define V_PIXELS p[V_PLANE].p_pixels
#define V_PITCH p[V_PLANE].i_pitch
#define A_PIXELS p[A_PLANE].p_pixels
#define A_PITCH p[A_PLANE].i_pitch
/**@}*/
#endif
/* VLC_PICTURE_H */
include/vlc_subpicture.h
0 → 100644
View file @
c3fab723
/*****************************************************************************
* vlc_subpicture.h: subpicture definitions
*****************************************************************************
* Copyright (C) 1999 - 2009 the VideoLAN team
* $Id$
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
* Olivier Aubert <oaubert 47 videolan d07 org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef VLC_SUBPICTURE_H
#define VLC_SUBPICTURE_H 1
/**
* \file
* This file defines subpicture structures and functions in vlc
*/
#include <vlc_picture.h>
/**
* \defgroup subpicture Video Subpictures
* Subpictures are pictures that should be displayed on top of the video, like
* subtitles and OSD
* \ingroup video_output
* @{
*/
/**
* Video subtitle region spu core private
*/
typedef
struct
subpicture_region_private_t
subpicture_region_private_t
;
/**
* Video subtitle region
*
* A subtitle region is defined by a picture (graphic) and its rendering
* coordinates.
* Subtitles contain a list of regions.
*/
struct
subpicture_region_t
{
video_format_t
fmt
;
/**< format of the picture */
picture_t
*
p_picture
;
/**< picture comprising this region */
int
i_x
;
/**< position of region */
int
i_y
;
/**< position of region */
int
i_align
;
/**< alignment within a region */
int
i_alpha
;
/**< transparency */
char
*
psz_text
;
/**< text string comprising this region */
char
*
psz_html
;
/**< HTML version of subtitle (NULL = use psz_text) */
text_style_t
*
p_style
;
/**< a description of the text style formatting */
subpicture_region_t
*
p_next
;
/**< next region in the list */
subpicture_region_private_t
*
p_private
;
/**< Private data for spu_t *only* */
};
/* Subpicture region position flags */
#define SUBPICTURE_ALIGN_LEFT 0x1
#define SUBPICTURE_ALIGN_RIGHT 0x2
#define SUBPICTURE_ALIGN_TOP 0x4
#define SUBPICTURE_ALIGN_BOTTOM 0x8
#define SUBPICTURE_ALIGN_MASK ( SUBPICTURE_ALIGN_LEFT|SUBPICTURE_ALIGN_RIGHT| \
SUBPICTURE_ALIGN_TOP |SUBPICTURE_ALIGN_BOTTOM )
/**
* This function will create a new subpicture region.
*
* You must use subpicture_region_Delete to destroy it.
*/
VLC_EXPORT
(
subpicture_region_t
*
,
subpicture_region_New
,
(
const
video_format_t
*
p_fmt
)
);
/**
* This function will destroy a subpicture region allocated by
* subpicture_region_New.
*
* You may give it NULL.
*/
VLC_EXPORT
(
void
,
subpicture_region_Delete
,
(
subpicture_region_t
*
p_region
)
);
/**
* This function will destroy a list of subpicture regions allocated by
* subpicture_region_New.
*
* Provided for convenience.
*/
VLC_EXPORT
(
void
,
subpicture_region_ChainDelete
,
(
subpicture_region_t
*
p_head
)
);
/**
* Video subtitle
*
* Any subtitle destined to be displayed by a video output thread should
* be stored in this structure from it's creation to it's effective display.
* Subtitle type and flags should only be modified by the output thread. Note
* that an empty subtitle MUST have its flags set to 0.
*/
struct
subpicture_t
{
/** \name Channel ID */
/**@{*/
int
i_channel
;
/**< subpicture channel ID */
/**@}*/
/** \name Type and flags
Should NOT be modified except by the vout thread */
/**@{*/
int64_t
i_order
;
/** an increasing unique number */
subpicture_t
*
p_next
;
/**< next subtitle to be displayed */
/**@}*/
/** \name Date properties */
/**@{*/
mtime_t
i_start
;
/**< beginning of display date */
mtime_t
i_stop
;
/**< end of display date */
bool
b_ephemer
;
/**< If this flag is set to true the subtitle
will be displayed untill the next one appear */
bool
b_fade
;
/**< enable fading */
/**@}*/
subpicture_region_t
*
p_region
;
/**< region list composing this subtitle */
/** \name Display properties
* These properties are only indicative and may be
* changed by the video output thread, or simply ignored depending of the
* subtitle type. */
/**@{*/
int
i_original_picture_width
;
/**< original width of the movie */
int
i_original_picture_height
;
/**< original height of the movie */
bool
b_subtitle
;
/**< the picture is a movie subtitle */
bool
b_absolute
;
/**< position is absolute */
int
i_alpha
;
/**< transparency */
/**@}*/
/** Pointer to function that renders this subtitle in a picture */
void
(
*
pf_render
)
(
vout_thread_t
*
,
picture_t
*
,
const
subpicture_t
*
);
/** Pointer to function that cleans up the private data of this subtitle */
void
(
*
pf_destroy
)
(
subpicture_t
*
);
/** Pointer to functions for region management */
void
(
*
pf_pre_render
)
(
spu_t
*
,
subpicture_t
*
,
const
video_format_t
*
);
void
(
*
pf_update_regions
)(
spu_t
*
,
subpicture_t
*
,
const
video_format_t
*
,
mtime_t
);
/** Private data - the subtitle plugin might want to put stuff here to
* keep track of the subpicture */
subpicture_sys_t
*
p_sys
;
/* subpicture data */
};
/**
* This function create a new empty subpicture.
*
* You must use subpicture_Delete to destroy it.
*/
VLC_EXPORT
(
subpicture_t
*
,
subpicture_New
,
(
void
)
);
/**
* This function delete a subpicture created by subpicture_New.
* You may give it NULL.
*/
VLC_EXPORT
(
void
,
subpicture_Delete
,
(
subpicture_t
*
p_subpic
)
);
/**@}*/
#endif
/* _VLC_VIDEO_H */
include/vlc_vout.h
View file @
c3fab723
This diff is collapsed.
Click to expand it.
src/Makefile.am
View file @
c3fab723
...
...
@@ -71,6 +71,7 @@ pluginsinclude_HEADERS = \
../include/vlc_modules.h
\
../include/vlc_mtime.h
\
../include/vlc_objects.h
\
../include/vlc_picture.h
\
../include/vlc_playlist.h
\
../include/vlc_plugin.h
\
../include/vlc_rand.h
\
...
...
@@ -78,6 +79,7 @@ pluginsinclude_HEADERS = \
../include/vlc_sout.h
\
../include/vlc_stream.h
\
../include/vlc_strings.h
\
../include/vlc_subpicture.h
\
../include/vlc_threads.h
\
../include/vlc_url.h
\
../include/vlc_variables.h
\
...
...
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