Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
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
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