2000-02-13 05:31:35 +01:00
|
|
|
/*****************************************************************************
|
2003-06-26 14:19:59 +02:00
|
|
|
* vlc_video.h: common video definitions
|
2000-02-13 05:31:35 +01:00
|
|
|
*****************************************************************************
|
2008-05-26 21:44:06 +02:00
|
|
|
* Copyright (C) 1999 - 2008 the VideoLAN team
|
2004-06-03 00:53:26 +02:00
|
|
|
* $Id$
|
2000-03-03 08:03:34 +01:00
|
|
|
*
|
2000-08-24 00:15:28 +02:00
|
|
|
* Authors: Vincent Seguin <seguin@via.ecp.fr>
|
2006-11-26 15:20:34 +01:00
|
|
|
* Samuel Hocevar <sam@via.ecp.fr>
|
|
|
|
* Olivier Aubert <oaubert 47 videolan d07 org>
|
2000-03-03 08:03:34 +01:00
|
|
|
*
|
|
|
|
* 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.
|
2004-01-25 19:17:08 +01:00
|
|
|
*
|
2000-03-03 08:03:34 +01:00
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2000-05-25 00:39:44 +02:00
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
2000-03-03 08:03:34 +01:00
|
|
|
*
|
2000-05-25 00:39:44 +02:00
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program; if not, write to the Free Software
|
2006-01-13 00:10:04 +01:00
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
2000-03-03 08:03:34 +01:00
|
|
|
*****************************************************************************/
|
2006-12-03 14:48:21 +01:00
|
|
|
|
2006-11-26 15:20:34 +01:00
|
|
|
#ifndef _VLC_VOUT_H_
|
|
|
|
#define _VLC_VOUT_H_ 1
|
2003-10-08 23:01:07 +02:00
|
|
|
|
2006-11-26 15:20:34 +01:00
|
|
|
#include <vlc_es.h>
|
2008-06-04 00:28:03 +02:00
|
|
|
#include <vlc_filter.h>
|
2000-03-03 08:03:34 +01:00
|
|
|
|
2006-11-26 15:20:34 +01:00
|
|
|
/** Description of a planar graphic field */
|
2002-07-20 20:01:43 +02:00
|
|
|
typedef struct plane_t
|
2001-12-09 18:01:37 +01:00
|
|
|
{
|
2003-10-04 17:51:22 +02:00
|
|
|
uint8_t *p_pixels; /**< Start of the plane's data */
|
2001-12-31 05:53:33 +01:00
|
|
|
|
|
|
|
/* Variables used for fast memcpy operations */
|
2004-08-28 18:46:22 +02:00
|
|
|
int i_lines; /**< Number of lines, including margins */
|
2003-10-04 17:51:22 +02:00
|
|
|
int i_pitch; /**< Number of bytes in a line, including margins */
|
* ./BUGS: added a list of known bugs. Please add your findings!
* ./MODULES: added a short description of each module. Maybe we should
add more details to make this file really useful.
* ./doc/bugreport-howto.txt: wishful thinking...
* ./Makefile: added a workaround for the fact that .c files don't depend
on <videolan/vlc.h>.
* ./plugins/memcpy/memcpy.c: all memcpy modules are now built from the same
single file.
* ./src/interface/main.c: added the --nommx, --no3dnow, --nommxext, --nosse
and --noaltivec options to vlc.
* ./configure.in: removed the --disable-mmx option, now useless because
of the vlc --no* options.
* ./src/interface/main.c: fixed a crash caused by the memcpy module
being released too early.
* ./include/video.h: more vout4 changes, including margin support, more
FOURCC formats recognized, transparent support of identical or almost
identical FOURCC formats.
* ./include/video_output.h: added a vout_Render function to video output
modules which is to be executed before vout_Display.
* ./include/common.h: this header is back.
* ./plugins/chroma/i420_rgb.c: planar YUV 4:2:0 to packed RGB conversion
functions, mostly taken from vout3's yuv functions, but heavily modified
to use FAST_MEMCPY and to handle image dimensions which are not multiples
of 16. Not all functions have been written yet, though.
* ./plugins/chroma/i420_yuy2.c: planar YUV 4:2:0 to packed YUV conversion
functions, various targets such as 4:2:2 YUYV, YVYU, UYVY, or 2:1:1 YUYV,
with accelerated MMX versions.
* ./plugins/chroma/i422_yuy2.c: same as i420_yuy2.c but takes planar YUV
4:2:2 pictures in input. With accelerated MMX versions as well. This plugin
makes it possible to display 4:2:2 files on most video cards without the
quality loss of 4:2:0 downsampling.
* ./plugins/filter/*: thanks to the vout_Render function, all filters now
output their data perfectly in sync.
* ./plugins/dvdread/Makefile: fix to prevent unnecessary target rebuilds.
* ./plugins/sdl/vout_sdl.c: support for YV12, UYVY, YUY2 and YVYU overlays.
* ./plugins/x11/xcommon.c: support for I420, YV12, YUY2 and Y211 overlays.
2002-01-04 15:01:35 +01:00
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/** Size of a macropixel, defaults to 1 */
|
2002-07-23 02:39:17 +02:00
|
|
|
int i_pixel_pitch;
|
* ./BUGS: added a list of known bugs. Please add your findings!
* ./MODULES: added a short description of each module. Maybe we should
add more details to make this file really useful.
* ./doc/bugreport-howto.txt: wishful thinking...
* ./Makefile: added a workaround for the fact that .c files don't depend
on <videolan/vlc.h>.
* ./plugins/memcpy/memcpy.c: all memcpy modules are now built from the same
single file.
* ./src/interface/main.c: added the --nommx, --no3dnow, --nommxext, --nosse
and --noaltivec options to vlc.
* ./configure.in: removed the --disable-mmx option, now useless because
of the vlc --no* options.
* ./src/interface/main.c: fixed a crash caused by the memcpy module
being released too early.
* ./include/video.h: more vout4 changes, including margin support, more
FOURCC formats recognized, transparent support of identical or almost
identical FOURCC formats.
* ./include/video_output.h: added a vout_Render function to video output
modules which is to be executed before vout_Display.
* ./include/common.h: this header is back.
* ./plugins/chroma/i420_rgb.c: planar YUV 4:2:0 to packed RGB conversion
functions, mostly taken from vout3's yuv functions, but heavily modified
to use FAST_MEMCPY and to handle image dimensions which are not multiples
of 16. Not all functions have been written yet, though.
* ./plugins/chroma/i420_yuy2.c: planar YUV 4:2:0 to packed YUV conversion
functions, various targets such as 4:2:2 YUYV, YVYU, UYVY, or 2:1:1 YUYV,
with accelerated MMX versions.
* ./plugins/chroma/i422_yuy2.c: same as i420_yuy2.c but takes planar YUV
4:2:2 pictures in input. With accelerated MMX versions as well. This plugin
makes it possible to display 4:2:2 files on most video cards without the
quality loss of 4:2:0 downsampling.
* ./plugins/filter/*: thanks to the vout_Render function, all filters now
output their data perfectly in sync.
* ./plugins/dvdread/Makefile: fix to prevent unnecessary target rebuilds.
* ./plugins/sdl/vout_sdl.c: support for YV12, UYVY, YUY2 and YVYU overlays.
* ./plugins/x11/xcommon.c: support for I420, YV12, YUY2 and Y211 overlays.
2002-01-04 15:01:35 +01:00
|
|
|
|
|
|
|
/* Variables used for pictures with margins */
|
2004-08-28 18:46:22 +02:00
|
|
|
int i_visible_lines; /**< How many visible lines are there ? */
|
2003-10-04 17:51:22 +02:00
|
|
|
int i_visible_pitch; /**< How many visible pixels are there ? */
|
2001-12-31 05:53:33 +01:00
|
|
|
|
2001-12-09 18:01:37 +01:00
|
|
|
} plane_t;
|
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/**
|
|
|
|
* Video picture
|
|
|
|
*
|
2000-02-13 05:31:35 +01:00
|
|
|
* Any picture destined to be displayed by a video output thread should be
|
1999-08-08 14:42:54 +02:00
|
|
|
* stored in this structure from it's creation to it's effective display.
|
2000-01-11 00:36:06 +01:00
|
|
|
* Picture type and flags should only be modified by the output thread. Note
|
|
|
|
* that an empty picture MUST have its flags set to 0.
|
2003-10-04 17:51:22 +02:00
|
|
|
*/
|
2002-07-20 20:01:43 +02:00
|
|
|
struct picture_t
|
1999-08-08 14:42:54 +02:00
|
|
|
{
|
2005-12-15 12:37:45 +01:00
|
|
|
/**
|
2004-06-17 13:27:49 +02:00
|
|
|
* The properties of the picture
|
|
|
|
*/
|
2003-10-24 23:27:07 +02:00
|
|
|
video_frame_format_t format;
|
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/** Picture data - data can always be freely modified, but p_data may
|
* ./BUGS: added a list of known bugs. Please add your findings!
* ./MODULES: added a short description of each module. Maybe we should
add more details to make this file really useful.
* ./doc/bugreport-howto.txt: wishful thinking...
* ./Makefile: added a workaround for the fact that .c files don't depend
on <videolan/vlc.h>.
* ./plugins/memcpy/memcpy.c: all memcpy modules are now built from the same
single file.
* ./src/interface/main.c: added the --nommx, --no3dnow, --nommxext, --nosse
and --noaltivec options to vlc.
* ./configure.in: removed the --disable-mmx option, now useless because
of the vlc --no* options.
* ./src/interface/main.c: fixed a crash caused by the memcpy module
being released too early.
* ./include/video.h: more vout4 changes, including margin support, more
FOURCC formats recognized, transparent support of identical or almost
identical FOURCC formats.
* ./include/video_output.h: added a vout_Render function to video output
modules which is to be executed before vout_Display.
* ./include/common.h: this header is back.
* ./plugins/chroma/i420_rgb.c: planar YUV 4:2:0 to packed RGB conversion
functions, mostly taken from vout3's yuv functions, but heavily modified
to use FAST_MEMCPY and to handle image dimensions which are not multiples
of 16. Not all functions have been written yet, though.
* ./plugins/chroma/i420_yuy2.c: planar YUV 4:2:0 to packed YUV conversion
functions, various targets such as 4:2:2 YUYV, YVYU, UYVY, or 2:1:1 YUYV,
with accelerated MMX versions.
* ./plugins/chroma/i422_yuy2.c: same as i420_yuy2.c but takes planar YUV
4:2:2 pictures in input. With accelerated MMX versions as well. This plugin
makes it possible to display 4:2:2 files on most video cards without the
quality loss of 4:2:0 downsampling.
* ./plugins/filter/*: thanks to the vout_Render function, all filters now
output their data perfectly in sync.
* ./plugins/dvdread/Makefile: fix to prevent unnecessary target rebuilds.
* ./plugins/sdl/vout_sdl.c: support for YV12, UYVY, YUY2 and YVYU overlays.
* ./plugins/x11/xcommon.c: support for I420, YV12, YUY2 and Y211 overlays.
2002-01-04 15:01:35 +01:00
|
|
|
* NEVER be modified. A direct buffer can be handled as the plugin
|
|
|
|
* wishes, it can even swap p_pixels buffers. */
|
2002-11-11 15:39:12 +01:00
|
|
|
uint8_t *p_data;
|
2003-10-04 17:51:22 +02:00
|
|
|
void *p_data_orig; /**< pointer before memalign */
|
|
|
|
plane_t p[ VOUT_MAX_PLANES ]; /**< description of the planes */
|
|
|
|
int i_planes; /**< number of allocated planes */
|
2000-02-13 05:31:35 +01:00
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/** \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 ? */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_slow; /**< is picture in slow memory ? */
|
2003-10-04 17:51:22 +02:00
|
|
|
int i_matrix_coefficients; /**< in YUV type, encoding type */
|
|
|
|
/**@}*/
|
2001-12-09 18:01:37 +01:00
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/** \name Picture management properties
|
|
|
|
* These properties can be modified using the video output thread API,
|
|
|
|
* but should never be written directly */
|
|
|
|
/**@{*/
|
2007-09-30 15:59:28 +02:00
|
|
|
unsigned i_refcount; /**< link reference counter */
|
2003-10-04 17:51:22 +02:00
|
|
|
mtime_t date; /**< display date */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_force;
|
2003-10-04 17:51:22 +02:00
|
|
|
/**@}*/
|
|
|
|
|
|
|
|
/** \name Picture dynamic properties
|
|
|
|
* Those properties can be changed by the decoder
|
|
|
|
* @{
|
|
|
|
*/
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_progressive; /**< is it a progressive frame ? */
|
2003-10-04 17:51:22 +02:00
|
|
|
unsigned int i_nb_fields; /**< # of displayed fields */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_top_field_first; /**< which field is first */
|
2003-10-04 17:51:22 +02:00
|
|
|
/**@}*/
|
2004-01-25 19:17:08 +01:00
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/** The picture heap we are attached to */
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
picture_heap_t* p_heap;
|
2002-03-17 00:03:19 +01:00
|
|
|
|
2003-03-28 18:02:25 +01:00
|
|
|
/* 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 * );
|
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/** Private data - the video output plugin might want to put stuff here to
|
2001-12-09 18:01:37 +01:00
|
|
|
* keep track of the picture */
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
picture_sys_t * p_sys;
|
2004-08-26 23:27:06 +02:00
|
|
|
|
|
|
|
/** This way the picture_Release can be overloaded */
|
|
|
|
void (*pf_release)( picture_t * );
|
2005-04-15 21:51:23 +02:00
|
|
|
|
|
|
|
/** Next picture in a FIFO a pictures */
|
|
|
|
struct picture_t *p_next;
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
};
|
1999-08-08 14:42:54 +02:00
|
|
|
|
2008-07-20 12:45:20 +02:00
|
|
|
/**
|
|
|
|
* This function will create a new picture.
|
|
|
|
* The picture created will implement a default release management compatible
|
|
|
|
* with picture_Yield 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 * ) );
|
|
|
|
|
2008-07-18 20:47:20 +02:00
|
|
|
/**
|
|
|
|
* This function will increase the picture reference count.
|
|
|
|
* It will not have any effect on picture obtained from vout
|
|
|
|
*/
|
|
|
|
static inline void picture_Yield( 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 );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
}
|
|
|
|
|
2008-07-20 12:45:20 +02:00
|
|
|
/**
|
|
|
|
* This function will copy the picture pixels.
|
2008-07-27 22:32:37 +02:00
|
|
|
* You can safely copy between pictures that do not have the same size,
|
|
|
|
* only the compatible(smaller) part will be copied.
|
2008-07-20 12:45:20 +02:00
|
|
|
*/
|
|
|
|
VLC_EXPORT( void, picture_CopyPixels, ( picture_t *p_dst, const picture_t *p_src ) );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This function will copy both picture dynamic properties and pixels.
|
|
|
|
* You have to notice that sometime a simple picture_Yield may do what
|
|
|
|
* you want without the copy overhead.
|
|
|
|
* Provided for convenience.
|
|
|
|
*/
|
|
|
|
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 );
|
|
|
|
}
|
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/**
|
|
|
|
* Video picture heap, either render (to store pictures used
|
Some heavy changes today:
* Removed duplicate function checks from configure.in.
* Added extra magic to Makefile.modules so that the module Makefiles
are now ridiculously simple. And I mean *simple*. Check it! This will
make a possible switch to full autoconf/automake a lot easier.
* Added the vlc version name to the plugin symbols, to be sure we only load
plugins with the same version number. A nasty consequence is that you
need to rebuild your tree after midnight if you are using a CVS tree :-)
* Got rid of modules_export.h by #defining exported functions in the same
header as their prototype.
* Added modules_inner.h and other commonly used .h files to common.h so
there are less and less files to include, and renamed common.h to
<videolan/vlc.h>.
* First modifications to the module handling system towards my ultimate
goal to get rid of the *_Probe functions. Got rid of TestMethod and
TestCPU, as well as src/misc/tests.c.
* Wrote the chroma plugin handling functions. No YUV functions have been
ported yet because it'ls a lot of work, but the core system works, I
tried it with a naive yv12->rgb16 plugin (which will disappear when the
real functions are ready).
* Made a lot of functions in dvd_summary.c one-liners to avoid wasting
too many output lines.
* Fixed a segfault in input_dvd.c:DVDInit.
* Added a fixfiles.sh script in plugins/gtk to be run after Glade has
generated its C files.
* Did some work on the KDE interface to make it suck a bit less. It still
segfaults, but at least it runs and it looks less ugly.
* RGB SDL rendering works again, though in 16bpp only.
* Made plugins/vcd/linux_cdrom_tools.c independent of any vlc structure
so that it'll be easily put in a library. Maybe libdvdcss?
* Fixed VCD date display.
* Merged vout_xvideo.c, vout_x11.c and vout_common.c into xcommon.c.
* Wrote non-Shm XVideo output.
* Made X11 output work again. Still pretty unstable, only works for 16bpp.
* Additional french translation in po/fr.po. Any taker for the rest?
* Fixed a segfault in video_output.c when the allocated pictures were
not direct buffers.
* If $DISPLAY isn't set, don't try to run the Gtk+ interface.
* Replaced 48x48 .xpm images with 32x32 ones to conform to Debian policy
(Closes Debian bug #126939).
* Removed the automatic ./configure launch when running `make all' for
the first time.
Stuff currently more broken than it ought to be:
* The wall filter. Being fixed.
* x11 and sdl plugins for depth != 16bpp.
* Software YUV.
* gvlc, gnome-vlc, kvlc shortcuts. Use --intf instead for the moment.
2001-12-30 08:09:56 +01:00
|
|
|
* by the decoder) or output (to store pictures displayed by the vout plugin)
|
2003-10-04 17:51:22 +02:00
|
|
|
*/
|
2002-07-20 20:01:43 +02:00
|
|
|
struct picture_heap_t
|
2001-12-13 13:47:17 +01:00
|
|
|
{
|
2003-10-04 17:51:22 +02:00
|
|
|
int i_pictures; /**< current heap size */
|
|
|
|
|
|
|
|
/* \name Picture static properties
|
|
|
|
* Those properties are fixed at initialization and should NOT be modified
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
unsigned int i_width; /**< picture width */
|
|
|
|
unsigned int i_height; /**< picture height */
|
|
|
|
vlc_fourcc_t i_chroma; /**< picture chroma */
|
|
|
|
unsigned int i_aspect; /**< aspect ratio */
|
|
|
|
/**@}*/
|
2002-03-17 00:03:19 +01:00
|
|
|
|
2002-03-17 18:00:38 +01:00
|
|
|
/* Real pictures */
|
2003-10-04 17:51:22 +02:00
|
|
|
picture_t* pp_picture[VOUT_MAX_PICTURES]; /**< pictures */
|
|
|
|
int i_last_used_pic; /**< last used pic in heap */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_allow_modify_pics;
|
2002-03-17 18:00:38 +01:00
|
|
|
|
|
|
|
/* Stuff used for truecolor RGB planes */
|
2006-04-23 15:15:12 +02:00
|
|
|
uint32_t i_rmask; int i_rrshift, i_lrshift;
|
|
|
|
uint32_t i_gmask; int i_rgshift, i_lgshift;
|
|
|
|
uint32_t i_bmask; int i_rbshift, i_lbshift;
|
2001-12-13 13:47:17 +01:00
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/** Stuff used for palettized RGB planes */
|
2002-11-11 15:39:12 +01:00
|
|
|
void (* pf_setpalette) ( vout_thread_t *, uint16_t *, uint16_t *, uint16_t * );
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
};
|
2001-12-13 13:47:17 +01:00
|
|
|
|
2002-01-02 15:37:42 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* Flags used to describe the status of a picture
|
|
|
|
*****************************************************************************/
|
|
|
|
|
2001-12-13 13:47:17 +01:00
|
|
|
/* Picture type */
|
|
|
|
#define EMPTY_PICTURE 0 /* empty buffer */
|
|
|
|
#define MEMORY_PICTURE 100 /* heap-allocated buffer */
|
|
|
|
#define DIRECT_PICTURE 200 /* direct buffer */
|
|
|
|
|
|
|
|
/* Picture status */
|
2000-07-31 01:42:12 +02:00
|
|
|
#define FREE_PICTURE 0 /* free and not allocated */
|
|
|
|
#define RESERVED_PICTURE 1 /* allocated and reserved */
|
|
|
|
#define RESERVED_DATED_PICTURE 2 /* waiting for DisplayPicture */
|
|
|
|
#define RESERVED_DISP_PICTURE 3 /* waiting for a DatePicture */
|
|
|
|
#define READY_PICTURE 4 /* ready for display */
|
|
|
|
#define DISPLAYED_PICTURE 5 /* been displayed but is linked */
|
|
|
|
#define DESTROYED_PICTURE 6 /* allocated but no more used */
|
1999-08-08 14:42:54 +02:00
|
|
|
|
2002-04-25 23:52:42 +02:00
|
|
|
/*****************************************************************************
|
|
|
|
* Shortcuts to access image components
|
|
|
|
*****************************************************************************/
|
2000-02-13 05:31:35 +01:00
|
|
|
|
2001-12-09 18:01:37 +01:00
|
|
|
/* Plane indices */
|
* ./BUGS: added a list of known bugs. Please add your findings!
* ./MODULES: added a short description of each module. Maybe we should
add more details to make this file really useful.
* ./doc/bugreport-howto.txt: wishful thinking...
* ./Makefile: added a workaround for the fact that .c files don't depend
on <videolan/vlc.h>.
* ./plugins/memcpy/memcpy.c: all memcpy modules are now built from the same
single file.
* ./src/interface/main.c: added the --nommx, --no3dnow, --nommxext, --nosse
and --noaltivec options to vlc.
* ./configure.in: removed the --disable-mmx option, now useless because
of the vlc --no* options.
* ./src/interface/main.c: fixed a crash caused by the memcpy module
being released too early.
* ./include/video.h: more vout4 changes, including margin support, more
FOURCC formats recognized, transparent support of identical or almost
identical FOURCC formats.
* ./include/video_output.h: added a vout_Render function to video output
modules which is to be executed before vout_Display.
* ./include/common.h: this header is back.
* ./plugins/chroma/i420_rgb.c: planar YUV 4:2:0 to packed RGB conversion
functions, mostly taken from vout3's yuv functions, but heavily modified
to use FAST_MEMCPY and to handle image dimensions which are not multiples
of 16. Not all functions have been written yet, though.
* ./plugins/chroma/i420_yuy2.c: planar YUV 4:2:0 to packed YUV conversion
functions, various targets such as 4:2:2 YUYV, YVYU, UYVY, or 2:1:1 YUYV,
with accelerated MMX versions.
* ./plugins/chroma/i422_yuy2.c: same as i420_yuy2.c but takes planar YUV
4:2:2 pictures in input. With accelerated MMX versions as well. This plugin
makes it possible to display 4:2:2 files on most video cards without the
quality loss of 4:2:0 downsampling.
* ./plugins/filter/*: thanks to the vout_Render function, all filters now
output their data perfectly in sync.
* ./plugins/dvdread/Makefile: fix to prevent unnecessary target rebuilds.
* ./plugins/sdl/vout_sdl.c: support for YV12, UYVY, YUY2 and YVYU overlays.
* ./plugins/x11/xcommon.c: support for I420, YV12, YUY2 and Y211 overlays.
2002-01-04 15:01:35 +01:00
|
|
|
#define Y_PLANE 0
|
|
|
|
#define U_PLANE 1
|
|
|
|
#define V_PLANE 2
|
2004-07-01 14:54:19 +02:00
|
|
|
#define A_PLANE 3
|
2001-12-09 18:01:37 +01:00
|
|
|
|
|
|
|
/* Shortcuts */
|
* ./BUGS: added a list of known bugs. Please add your findings!
* ./MODULES: added a short description of each module. Maybe we should
add more details to make this file really useful.
* ./doc/bugreport-howto.txt: wishful thinking...
* ./Makefile: added a workaround for the fact that .c files don't depend
on <videolan/vlc.h>.
* ./plugins/memcpy/memcpy.c: all memcpy modules are now built from the same
single file.
* ./src/interface/main.c: added the --nommx, --no3dnow, --nommxext, --nosse
and --noaltivec options to vlc.
* ./configure.in: removed the --disable-mmx option, now useless because
of the vlc --no* options.
* ./src/interface/main.c: fixed a crash caused by the memcpy module
being released too early.
* ./include/video.h: more vout4 changes, including margin support, more
FOURCC formats recognized, transparent support of identical or almost
identical FOURCC formats.
* ./include/video_output.h: added a vout_Render function to video output
modules which is to be executed before vout_Display.
* ./include/common.h: this header is back.
* ./plugins/chroma/i420_rgb.c: planar YUV 4:2:0 to packed RGB conversion
functions, mostly taken from vout3's yuv functions, but heavily modified
to use FAST_MEMCPY and to handle image dimensions which are not multiples
of 16. Not all functions have been written yet, though.
* ./plugins/chroma/i420_yuy2.c: planar YUV 4:2:0 to packed YUV conversion
functions, various targets such as 4:2:2 YUYV, YVYU, UYVY, or 2:1:1 YUYV,
with accelerated MMX versions.
* ./plugins/chroma/i422_yuy2.c: same as i420_yuy2.c but takes planar YUV
4:2:2 pictures in input. With accelerated MMX versions as well. This plugin
makes it possible to display 4:2:2 files on most video cards without the
quality loss of 4:2:0 downsampling.
* ./plugins/filter/*: thanks to the vout_Render function, all filters now
output their data perfectly in sync.
* ./plugins/dvdread/Makefile: fix to prevent unnecessary target rebuilds.
* ./plugins/sdl/vout_sdl.c: support for YV12, UYVY, YUY2 and YVYU overlays.
* ./plugins/x11/xcommon.c: support for I420, YV12, YUY2 and Y211 overlays.
2002-01-04 15:01:35 +01:00
|
|
|
#define Y_PIXELS p[Y_PLANE].p_pixels
|
2002-04-16 01:04:08 +02:00
|
|
|
#define Y_PITCH p[Y_PLANE].i_pitch
|
* ./BUGS: added a list of known bugs. Please add your findings!
* ./MODULES: added a short description of each module. Maybe we should
add more details to make this file really useful.
* ./doc/bugreport-howto.txt: wishful thinking...
* ./Makefile: added a workaround for the fact that .c files don't depend
on <videolan/vlc.h>.
* ./plugins/memcpy/memcpy.c: all memcpy modules are now built from the same
single file.
* ./src/interface/main.c: added the --nommx, --no3dnow, --nommxext, --nosse
and --noaltivec options to vlc.
* ./configure.in: removed the --disable-mmx option, now useless because
of the vlc --no* options.
* ./src/interface/main.c: fixed a crash caused by the memcpy module
being released too early.
* ./include/video.h: more vout4 changes, including margin support, more
FOURCC formats recognized, transparent support of identical or almost
identical FOURCC formats.
* ./include/video_output.h: added a vout_Render function to video output
modules which is to be executed before vout_Display.
* ./include/common.h: this header is back.
* ./plugins/chroma/i420_rgb.c: planar YUV 4:2:0 to packed RGB conversion
functions, mostly taken from vout3's yuv functions, but heavily modified
to use FAST_MEMCPY and to handle image dimensions which are not multiples
of 16. Not all functions have been written yet, though.
* ./plugins/chroma/i420_yuy2.c: planar YUV 4:2:0 to packed YUV conversion
functions, various targets such as 4:2:2 YUYV, YVYU, UYVY, or 2:1:1 YUYV,
with accelerated MMX versions.
* ./plugins/chroma/i422_yuy2.c: same as i420_yuy2.c but takes planar YUV
4:2:2 pictures in input. With accelerated MMX versions as well. This plugin
makes it possible to display 4:2:2 files on most video cards without the
quality loss of 4:2:0 downsampling.
* ./plugins/filter/*: thanks to the vout_Render function, all filters now
output their data perfectly in sync.
* ./plugins/dvdread/Makefile: fix to prevent unnecessary target rebuilds.
* ./plugins/sdl/vout_sdl.c: support for YV12, UYVY, YUY2 and YVYU overlays.
* ./plugins/x11/xcommon.c: support for I420, YV12, YUY2 and Y211 overlays.
2002-01-04 15:01:35 +01:00
|
|
|
#define U_PIXELS p[U_PLANE].p_pixels
|
2002-04-16 01:04:08 +02:00
|
|
|
#define U_PITCH p[U_PLANE].i_pitch
|
* ./BUGS: added a list of known bugs. Please add your findings!
* ./MODULES: added a short description of each module. Maybe we should
add more details to make this file really useful.
* ./doc/bugreport-howto.txt: wishful thinking...
* ./Makefile: added a workaround for the fact that .c files don't depend
on <videolan/vlc.h>.
* ./plugins/memcpy/memcpy.c: all memcpy modules are now built from the same
single file.
* ./src/interface/main.c: added the --nommx, --no3dnow, --nommxext, --nosse
and --noaltivec options to vlc.
* ./configure.in: removed the --disable-mmx option, now useless because
of the vlc --no* options.
* ./src/interface/main.c: fixed a crash caused by the memcpy module
being released too early.
* ./include/video.h: more vout4 changes, including margin support, more
FOURCC formats recognized, transparent support of identical or almost
identical FOURCC formats.
* ./include/video_output.h: added a vout_Render function to video output
modules which is to be executed before vout_Display.
* ./include/common.h: this header is back.
* ./plugins/chroma/i420_rgb.c: planar YUV 4:2:0 to packed RGB conversion
functions, mostly taken from vout3's yuv functions, but heavily modified
to use FAST_MEMCPY and to handle image dimensions which are not multiples
of 16. Not all functions have been written yet, though.
* ./plugins/chroma/i420_yuy2.c: planar YUV 4:2:0 to packed YUV conversion
functions, various targets such as 4:2:2 YUYV, YVYU, UYVY, or 2:1:1 YUYV,
with accelerated MMX versions.
* ./plugins/chroma/i422_yuy2.c: same as i420_yuy2.c but takes planar YUV
4:2:2 pictures in input. With accelerated MMX versions as well. This plugin
makes it possible to display 4:2:2 files on most video cards without the
quality loss of 4:2:0 downsampling.
* ./plugins/filter/*: thanks to the vout_Render function, all filters now
output their data perfectly in sync.
* ./plugins/dvdread/Makefile: fix to prevent unnecessary target rebuilds.
* ./plugins/sdl/vout_sdl.c: support for YV12, UYVY, YUY2 and YVYU overlays.
* ./plugins/x11/xcommon.c: support for I420, YV12, YUY2 and Y211 overlays.
2002-01-04 15:01:35 +01:00
|
|
|
#define V_PIXELS p[V_PLANE].p_pixels
|
2002-04-16 01:04:08 +02:00
|
|
|
#define V_PITCH p[V_PLANE].i_pitch
|
2004-08-03 02:11:32 +02:00
|
|
|
#define A_PIXELS p[A_PLANE].p_pixels
|
|
|
|
#define A_PITCH p[A_PLANE].i_pitch
|
* ./BUGS: added a list of known bugs. Please add your findings!
* ./MODULES: added a short description of each module. Maybe we should
add more details to make this file really useful.
* ./doc/bugreport-howto.txt: wishful thinking...
* ./Makefile: added a workaround for the fact that .c files don't depend
on <videolan/vlc.h>.
* ./plugins/memcpy/memcpy.c: all memcpy modules are now built from the same
single file.
* ./src/interface/main.c: added the --nommx, --no3dnow, --nommxext, --nosse
and --noaltivec options to vlc.
* ./configure.in: removed the --disable-mmx option, now useless because
of the vlc --no* options.
* ./src/interface/main.c: fixed a crash caused by the memcpy module
being released too early.
* ./include/video.h: more vout4 changes, including margin support, more
FOURCC formats recognized, transparent support of identical or almost
identical FOURCC formats.
* ./include/video_output.h: added a vout_Render function to video output
modules which is to be executed before vout_Display.
* ./include/common.h: this header is back.
* ./plugins/chroma/i420_rgb.c: planar YUV 4:2:0 to packed RGB conversion
functions, mostly taken from vout3's yuv functions, but heavily modified
to use FAST_MEMCPY and to handle image dimensions which are not multiples
of 16. Not all functions have been written yet, though.
* ./plugins/chroma/i420_yuy2.c: planar YUV 4:2:0 to packed YUV conversion
functions, various targets such as 4:2:2 YUYV, YVYU, UYVY, or 2:1:1 YUYV,
with accelerated MMX versions.
* ./plugins/chroma/i422_yuy2.c: same as i420_yuy2.c but takes planar YUV
4:2:2 pictures in input. With accelerated MMX versions as well. This plugin
makes it possible to display 4:2:2 files on most video cards without the
quality loss of 4:2:0 downsampling.
* ./plugins/filter/*: thanks to the vout_Render function, all filters now
output their data perfectly in sync.
* ./plugins/dvdread/Makefile: fix to prevent unnecessary target rebuilds.
* ./plugins/sdl/vout_sdl.c: support for YV12, UYVY, YUY2 and YVYU overlays.
* ./plugins/x11/xcommon.c: support for I420, YV12, YUY2 and Y211 overlays.
2002-01-04 15:01:35 +01:00
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/**
|
|
|
|
* \defgroup subpicture Video Subpictures
|
|
|
|
* Subpictures are pictures that should be displayed on top of the video, like
|
|
|
|
* subtitles and OSD
|
|
|
|
* \ingroup video_output
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
2004-08-03 02:11:32 +02:00
|
|
|
/**
|
|
|
|
* 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 picture; /**< picture comprising this region */
|
|
|
|
|
|
|
|
int i_x; /**< position of region */
|
|
|
|
int i_y; /**< position of region */
|
2006-04-13 16:12:20 +02:00
|
|
|
int i_align; /**< alignment within a region */
|
2008-02-28 11:31:45 +01:00
|
|
|
int i_alpha; /**< transparency */
|
2005-03-08 02:23:54 +01:00
|
|
|
|
|
|
|
char *psz_text; /**< text string comprising this region */
|
2007-03-13 22:28:34 +01:00
|
|
|
char *psz_html; /**< HTML version of subtitle (NULL = use psz_text) */
|
2008-04-09 12:41:06 +02:00
|
|
|
text_style_t *p_style; /**< a description of the text style formatting */
|
2005-03-08 02:23:54 +01:00
|
|
|
|
2004-08-03 02:11:32 +02:00
|
|
|
subpicture_region_t *p_next; /**< next region in the list */
|
2004-09-15 17:50:54 +02:00
|
|
|
subpicture_region_t *p_cache; /**< modified version of this region */
|
2004-08-03 02:11:32 +02:00
|
|
|
};
|
|
|
|
|
2003-07-15 20:12:05 +02:00
|
|
|
/**
|
|
|
|
* Video subtitle
|
|
|
|
*
|
2000-07-31 01:42:12 +02:00
|
|
|
* Any subtitle destined to be displayed by a video output thread should
|
2000-01-31 01:35:13 +01:00
|
|
|
* be stored in this structure from it's creation to it's effective display.
|
2000-01-19 03:15:30 +01:00
|
|
|
* Subtitle type and flags should only be modified by the output thread. Note
|
|
|
|
* that an empty subtitle MUST have its flags set to 0.
|
2003-07-15 20:12:05 +02:00
|
|
|
*/
|
2002-07-20 20:01:43 +02:00
|
|
|
struct subpicture_t
|
2000-01-19 03:15:30 +01:00
|
|
|
{
|
2004-06-17 05:37:03 +02:00
|
|
|
/** \name Channel ID */
|
2004-06-03 00:53:26 +02:00
|
|
|
/**@{*/
|
2004-06-17 05:37:03 +02:00
|
|
|
int i_channel; /**< subpicture channel ID */
|
2004-06-03 00:53:26 +02:00
|
|
|
/**@}*/
|
|
|
|
|
2003-07-15 20:12:05 +02:00
|
|
|
/** \name Type and flags
|
|
|
|
Should NOT be modified except by the vout thread */
|
|
|
|
/**@{*/
|
|
|
|
int i_type; /**< type */
|
|
|
|
int i_status; /**< flags */
|
|
|
|
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 */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_ephemer; /**< If this flag is set to true the subtitle
|
2004-12-16 21:27:12 +01:00
|
|
|
will be displayed untill the next one appear */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_fade; /**< enable fading */
|
|
|
|
bool b_pausable; /**< subpicture will be paused if
|
2006-09-02 19:03:36 +02:00
|
|
|
stream is paused */
|
2003-07-15 20:12:05 +02:00
|
|
|
/**@}*/
|
|
|
|
|
2004-08-03 02:11:32 +02:00
|
|
|
subpicture_region_t *p_region; /**< region list composing this subtitle */
|
|
|
|
|
2003-07-15 20:12:05 +02:00
|
|
|
/** \name Display properties
|
|
|
|
* These properties are only indicative and may be
|
2000-02-01 01:50:29 +01:00
|
|
|
* changed by the video output thread, or simply ignored depending of the
|
2000-07-31 01:42:12 +02:00
|
|
|
* subtitle type. */
|
2003-07-15 20:12:05 +02:00
|
|
|
/**@{*/
|
2004-09-21 21:26:10 +02:00
|
|
|
int i_x; /**< offset from alignment position */
|
|
|
|
int i_y; /**< offset from alignment position */
|
|
|
|
int i_width; /**< picture width */
|
|
|
|
int i_height; /**< picture height */
|
2004-12-16 21:27:12 +01:00
|
|
|
int i_alpha; /**< transparency */
|
2004-09-21 21:26:10 +02:00
|
|
|
int i_original_picture_width; /**< original width of the movie */
|
|
|
|
int i_original_picture_height;/**< original height of the movie */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_absolute; /**< position is absolute */
|
2004-09-21 21:26:10 +02:00
|
|
|
int i_flags; /**< position flags */
|
2004-08-03 02:11:32 +02:00
|
|
|
/**@}*/
|
2002-03-15 05:41:54 +01:00
|
|
|
|
2003-07-15 20:12:05 +02:00
|
|
|
/** Pointer to function that renders this subtitle in a picture */
|
2002-11-06 19:07:57 +01:00
|
|
|
void ( *pf_render ) ( vout_thread_t *, picture_t *, const subpicture_t * );
|
2003-07-15 20:12:05 +02:00
|
|
|
/** Pointer to function that cleans up the private data of this subtitle */
|
2002-11-06 19:07:57 +01:00
|
|
|
void ( *pf_destroy ) ( subpicture_t * );
|
2002-03-15 05:41:54 +01:00
|
|
|
|
2004-08-03 02:11:32 +02:00
|
|
|
/** Pointer to functions for region management */
|
|
|
|
subpicture_region_t * ( *pf_create_region ) ( vlc_object_t *,
|
|
|
|
video_format_t * );
|
2005-03-07 20:28:52 +01:00
|
|
|
subpicture_region_t * ( *pf_make_region ) ( vlc_object_t *,
|
|
|
|
video_format_t *, picture_t * );
|
2004-08-03 02:11:32 +02:00
|
|
|
void ( *pf_destroy_region ) ( vlc_object_t *, subpicture_region_t * );
|
|
|
|
|
2008-07-29 23:20:00 +02:00
|
|
|
void ( *pf_pre_render ) ( video_format_t *, spu_t *, subpicture_t * );
|
|
|
|
void ( *pf_update_regions ) ( video_format_t *, spu_t *,
|
|
|
|
subpicture_t *, mtime_t );
|
2008-01-25 22:23:56 +01:00
|
|
|
|
2003-07-15 20:12:05 +02:00
|
|
|
/** Private data - the subtitle plugin might want to put stuff here to
|
2002-03-15 05:41:54 +01:00
|
|
|
* keep track of the subpicture */
|
* ALL: the first libvlc commit.
As for video output 4, this breaks almost everything, but I'll slowly
do what remains to be fixed during the weekend.
Changes in vlc:
===============
* vlc is now a very small program (20 lines) which uses the libvlc API;
it is quite simple for the moment but can be extended in the future.
* interfaces, decoders, video outputs, etc. are now almost the same
objects (yes, I know, this is C++ redone in C) and are structured in
a tree. More about this later, but basically it allows the following
nice features:
- several interfaces
- several playlists with several outputs
- input plugins spawning helper interfaces (will be used for DVD menus)
- anything spawning anything; I swear there are useful uses for this!
* libvlc can be used in other programs; I'm currently writing a Mozilla
plugin for my employer.
Things currently broken:
========================
* most interfaces, most ports
* the playlist handling (almost finished rewriting this though). This means
no file can be played from the GUI, you need to use the commandline. This
also means it segfaults at EOF, when exiting the program, and it sometimes
refuses to open a file when asked to.
2002-06-01 14:32:02 +02:00
|
|
|
subpicture_sys_t *p_sys; /* subpicture data */
|
|
|
|
};
|
2000-01-19 03:15:30 +01:00
|
|
|
|
2000-01-31 14:32:33 +01:00
|
|
|
/* Subpicture type */
|
2000-07-31 01:42:12 +02:00
|
|
|
#define EMPTY_SUBPICTURE 0 /* subtitle slot is empty and available */
|
2002-03-15 05:41:54 +01:00
|
|
|
#define MEMORY_SUBPICTURE 100 /* subpicture stored in memory */
|
2000-01-19 03:15:30 +01:00
|
|
|
|
2004-06-17 05:37:03 +02:00
|
|
|
/* Default subpicture channel ID */
|
|
|
|
#define DEFAULT_CHAN 1
|
|
|
|
|
2000-01-31 01:35:13 +01:00
|
|
|
/* Subpicture status */
|
2000-07-31 01:42:12 +02:00
|
|
|
#define FREE_SUBPICTURE 0 /* free and not allocated */
|
|
|
|
#define RESERVED_SUBPICTURE 1 /* allocated and reserved */
|
|
|
|
#define READY_SUBPICTURE 2 /* ready for display */
|
2000-01-31 14:32:33 +01:00
|
|
|
|
2004-09-27 11:02:26 +02:00
|
|
|
/* Subpicture position flags */
|
|
|
|
#define SUBPICTURE_ALIGN_LEFT 0x1
|
|
|
|
#define SUBPICTURE_ALIGN_RIGHT 0x2
|
|
|
|
#define SUBPICTURE_ALIGN_TOP 0x4
|
|
|
|
#define SUBPICTURE_ALIGN_BOTTOM 0x8
|
2007-06-18 23:08:03 +02:00
|
|
|
#define SUBPICTURE_ALIGN_MASK ( SUBPICTURE_ALIGN_LEFT|SUBPICTURE_ALIGN_RIGHT| \
|
|
|
|
SUBPICTURE_ALIGN_TOP |SUBPICTURE_ALIGN_BOTTOM )
|
2004-09-27 11:02:26 +02:00
|
|
|
|
2007-08-24 03:00:19 +02:00
|
|
|
/* Subpicture rendered flag - should only be used by vout_subpictures */
|
|
|
|
#define SUBPICTURE_RENDERED 0x10
|
|
|
|
|
2004-01-10 14:59:25 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* Prototypes
|
|
|
|
*****************************************************************************/
|
2006-11-26 15:20:34 +01:00
|
|
|
|
2004-09-10 19:22:03 +02:00
|
|
|
/**
|
|
|
|
* Copy the source picture onto the destination picture.
|
|
|
|
* \param p_this a vlc object
|
|
|
|
* \param p_dst pointer to the destination picture.
|
|
|
|
* \param p_src pointer to the source picture.
|
|
|
|
*/
|
|
|
|
#define vout_CopyPicture(a,b,c) __vout_CopyPicture(VLC_OBJECT(a),b,c)
|
|
|
|
VLC_EXPORT( void, __vout_CopyPicture, ( vlc_object_t *p_this, picture_t *p_dst, picture_t *p_src ) );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initialise different fields of a picture_t (but does not allocate memory).
|
|
|
|
* \param p_this a vlc object
|
|
|
|
* \param p_pic pointer to the picture structure.
|
|
|
|
* \param i_chroma the wanted chroma for the picture.
|
|
|
|
* \param i_width the wanted width for the picture.
|
|
|
|
* \param i_height the wanted height for the picture.
|
|
|
|
* \param i_aspect the wanted aspect ratio for the picture.
|
|
|
|
*/
|
|
|
|
#define vout_InitPicture(a,b,c,d,e,f) \
|
|
|
|
__vout_InitPicture(VLC_OBJECT(a),b,c,d,e,f)
|
|
|
|
VLC_EXPORT( int, __vout_InitPicture, ( vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_aspect ) );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Initialise different fields of a picture_t and allocates the picture buffer.
|
|
|
|
* \param p_this a vlc object
|
|
|
|
* \param p_pic pointer to the picture structure.
|
|
|
|
* \param i_chroma the wanted chroma for the picture.
|
|
|
|
* \param i_width the wanted width for the picture.
|
|
|
|
* \param i_height the wanted height for the picture.
|
|
|
|
* \param i_aspect the wanted aspect ratio for the picture.
|
|
|
|
*/
|
|
|
|
#define vout_AllocatePicture(a,b,c,d,e,f) \
|
|
|
|
__vout_AllocatePicture(VLC_OBJECT(a),b,c,d,e,f)
|
|
|
|
VLC_EXPORT( int, __vout_AllocatePicture,( vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_aspect ) );
|
2004-01-10 14:59:25 +01:00
|
|
|
|
2006-11-26 15:20:34 +01:00
|
|
|
|
2005-08-27 18:40:23 +02:00
|
|
|
/**
|
2006-11-26 15:20:34 +01:00
|
|
|
* \defgroup video_output Video Output
|
|
|
|
* This module describes the programming interface for video output threads.
|
|
|
|
* It includes functions allowing to open a new thread, send pictures to a
|
|
|
|
* thread, and destroy a previously opened video output thread.
|
|
|
|
* @{
|
2005-08-27 18:40:23 +02:00
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
2006-11-26 15:20:34 +01:00
|
|
|
* Video output thread descriptor
|
2005-08-27 18:40:23 +02:00
|
|
|
*
|
2008-05-29 18:34:36 +02:00
|
|
|
* Any independent video output device, such as an X11 window or a GGI device,
|
2006-11-26 15:20:34 +01:00
|
|
|
* is represented by a video output thread, and described using the following
|
|
|
|
* structure.
|
2005-08-27 18:40:23 +02:00
|
|
|
*/
|
2006-11-26 15:20:34 +01:00
|
|
|
struct vout_thread_t
|
|
|
|
{
|
|
|
|
VLC_COMMON_MEMBERS
|
2005-08-27 18:40:23 +02:00
|
|
|
|
2006-11-26 15:20:34 +01:00
|
|
|
/** \name Thread properties and locks */
|
|
|
|
/**@{*/
|
|
|
|
vlc_mutex_t picture_lock; /**< picture heap lock */
|
|
|
|
vlc_mutex_t subpicture_lock; /**< subpicture heap lock */
|
|
|
|
vlc_mutex_t change_lock; /**< thread change lock */
|
2006-12-25 23:28:45 +01:00
|
|
|
vlc_mutex_t vfilter_lock; /**< video filter2 change lock */
|
2006-11-26 15:20:34 +01:00
|
|
|
vout_sys_t * p_sys; /**< system output method */
|
|
|
|
/**@}*/
|
|
|
|
|
|
|
|
/** \name Current display properties */
|
|
|
|
/**@{*/
|
|
|
|
uint16_t i_changes; /**< changes made to the thread.
|
|
|
|
\see \ref vout_changes */
|
|
|
|
float f_gamma; /**< gamma */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_grayscale; /**< color or grayscale display */
|
|
|
|
bool b_info; /**< print additional information */
|
|
|
|
bool b_interface; /**< render interface */
|
|
|
|
bool b_scale; /**< allow picture scaling */
|
|
|
|
bool b_fullscreen; /**< toogle fullscreen display */
|
2006-11-26 15:20:34 +01:00
|
|
|
uint32_t render_time; /**< last picture render time */
|
|
|
|
unsigned int i_window_width; /**< video window width */
|
|
|
|
unsigned int i_window_height; /**< video window height */
|
|
|
|
unsigned int i_alignment; /**< video alignment in window */
|
|
|
|
unsigned int i_par_num; /**< monitor pixel aspect-ratio */
|
|
|
|
unsigned int i_par_den; /**< monitor pixel aspect-ratio */
|
|
|
|
|
2008-06-20 15:40:27 +02:00
|
|
|
struct vout_window_t *p_window; /**< window for embedded vout (if any) */
|
2006-11-26 15:20:34 +01:00
|
|
|
/**@}*/
|
|
|
|
|
|
|
|
/** \name Plugin used and shortcuts to access its capabilities */
|
|
|
|
/**@{*/
|
|
|
|
module_t * p_module;
|
|
|
|
int ( *pf_init ) ( vout_thread_t * );
|
|
|
|
void ( *pf_end ) ( vout_thread_t * );
|
|
|
|
int ( *pf_manage ) ( vout_thread_t * );
|
|
|
|
void ( *pf_render ) ( vout_thread_t *, picture_t * );
|
|
|
|
void ( *pf_display ) ( vout_thread_t *, picture_t * );
|
|
|
|
void ( *pf_swap ) ( vout_thread_t * ); /* OpenGL only */
|
|
|
|
int ( *pf_lock ) ( vout_thread_t * ); /* OpenGL only */
|
|
|
|
void ( *pf_unlock ) ( vout_thread_t * ); /* OpenGL only */
|
|
|
|
int ( *pf_control ) ( vout_thread_t *, int, va_list );
|
|
|
|
/**@}*/
|
|
|
|
|
|
|
|
/** \name Statistics
|
|
|
|
* These numbers are not supposed to be accurate, but are a
|
|
|
|
* good indication of the thread status */
|
|
|
|
/**@{*/
|
|
|
|
count_t c_fps_samples; /**< picture counts */
|
|
|
|
mtime_t p_fps_sample[VOUT_FPS_SAMPLES]; /**< FPS samples dates */
|
|
|
|
/**@}*/
|
|
|
|
|
|
|
|
/** \name Video heap and translation tables */
|
|
|
|
/**@{*/
|
|
|
|
int i_heap_size; /**< heap size */
|
|
|
|
picture_heap_t render; /**< rendered pictures */
|
|
|
|
picture_heap_t output; /**< direct buffers */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_direct; /**< rendered are like direct ? */
|
|
|
|
filter_t *p_chroma; /**< translation tables */
|
2006-11-26 15:20:34 +01:00
|
|
|
|
|
|
|
video_format_t fmt_render; /* render format (from the decoder) */
|
|
|
|
video_format_t fmt_in; /* input (modified render) format */
|
|
|
|
video_format_t fmt_out; /* output format (for the video output) */
|
|
|
|
/**@}*/
|
|
|
|
|
|
|
|
/* Picture heap */
|
|
|
|
picture_t p_picture[2*VOUT_MAX_PICTURES+1]; /**< pictures */
|
|
|
|
|
|
|
|
/* Subpicture unit */
|
2008-06-04 00:28:03 +02:00
|
|
|
spu_t *p_spu;
|
2006-11-26 15:20:34 +01:00
|
|
|
|
|
|
|
/* Statistics */
|
2008-06-04 00:28:03 +02:00
|
|
|
count_t c_loops;
|
|
|
|
count_t c_pictures, c_late_pictures;
|
|
|
|
mtime_t display_jitter; /**< average deviation from the PTS */
|
|
|
|
count_t c_jitter_samples; /**< number of samples used
|
2006-11-26 15:20:34 +01:00
|
|
|
for the calculation of the
|
|
|
|
jitter */
|
|
|
|
/** delay created by internal caching */
|
2008-06-04 00:28:03 +02:00
|
|
|
int i_pts_delay;
|
2006-11-26 15:20:34 +01:00
|
|
|
|
|
|
|
/* Filter chain */
|
2008-06-04 00:28:03 +02:00
|
|
|
char *psz_filter_chain;
|
|
|
|
bool b_filter_change;
|
2006-11-26 15:20:34 +01:00
|
|
|
|
2008-06-04 00:28:03 +02:00
|
|
|
/* Video filter2 chain */
|
|
|
|
filter_chain_t *p_vf2_chain;
|
|
|
|
char *psz_vf2;
|
2006-11-26 15:20:34 +01:00
|
|
|
|
|
|
|
/* Misc */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_snapshot; /**< take one snapshot on the next loop */
|
2007-03-25 16:48:09 +02:00
|
|
|
|
|
|
|
/* Video output configuration */
|
|
|
|
config_chain_t *p_cfg;
|
2007-06-12 13:28:54 +02:00
|
|
|
|
|
|
|
/* Show media title on videoutput */
|
2008-06-04 00:28:03 +02:00
|
|
|
bool b_title_show;
|
2007-06-12 13:28:54 +02:00
|
|
|
mtime_t i_title_timeout;
|
|
|
|
int i_title_position;
|
2006-11-26 15:20:34 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
#define I_OUTPUTPICTURES p_vout->output.i_pictures
|
|
|
|
#define PP_OUTPUTPICTURE p_vout->output.pp_picture
|
|
|
|
#define I_RENDERPICTURES p_vout->render.i_pictures
|
|
|
|
#define PP_RENDERPICTURE p_vout->render.pp_picture
|
|
|
|
|
|
|
|
/** \defgroup vout_changes Flags for changes
|
|
|
|
* These flags are set in the vout_thread_t::i_changes field when another
|
|
|
|
* thread changed a variable
|
|
|
|
* @{
|
2005-08-27 18:40:23 +02:00
|
|
|
*/
|
2006-11-26 15:20:34 +01:00
|
|
|
/** b_info changed */
|
|
|
|
#define VOUT_INFO_CHANGE 0x0001
|
|
|
|
/** b_grayscale changed */
|
|
|
|
#define VOUT_GRAYSCALE_CHANGE 0x0002
|
|
|
|
/** b_interface changed */
|
|
|
|
#define VOUT_INTF_CHANGE 0x0004
|
|
|
|
/** b_scale changed */
|
|
|
|
#define VOUT_SCALE_CHANGE 0x0008
|
|
|
|
/** gamma changed */
|
|
|
|
#define VOUT_GAMMA_CHANGE 0x0010
|
|
|
|
/** b_cursor changed */
|
|
|
|
#define VOUT_CURSOR_CHANGE 0x0020
|
|
|
|
/** b_fullscreen changed */
|
|
|
|
#define VOUT_FULLSCREEN_CHANGE 0x0040
|
|
|
|
/** size changed */
|
|
|
|
#define VOUT_SIZE_CHANGE 0x0200
|
|
|
|
/** depth changed */
|
|
|
|
#define VOUT_DEPTH_CHANGE 0x0400
|
|
|
|
/** change chroma tables */
|
|
|
|
#define VOUT_CHROMA_CHANGE 0x0800
|
|
|
|
/** cropping parameters changed */
|
|
|
|
#define VOUT_CROP_CHANGE 0x1000
|
|
|
|
/** aspect ratio changed */
|
|
|
|
#define VOUT_ASPECT_CHANGE 0x2000
|
|
|
|
/** change/recreate picture buffers */
|
|
|
|
#define VOUT_PICTURE_BUFFERS_CHANGE 0x4000
|
|
|
|
/**@}*/
|
|
|
|
|
|
|
|
/* Alignment flags */
|
|
|
|
#define VOUT_ALIGN_LEFT 0x0001
|
|
|
|
#define VOUT_ALIGN_RIGHT 0x0002
|
|
|
|
#define VOUT_ALIGN_HMASK 0x0003
|
|
|
|
#define VOUT_ALIGN_TOP 0x0004
|
|
|
|
#define VOUT_ALIGN_BOTTOM 0x0008
|
|
|
|
#define VOUT_ALIGN_VMASK 0x000C
|
|
|
|
|
|
|
|
#define MAX_JITTER_SAMPLES 20
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
* Prototypes
|
|
|
|
*****************************************************************************/
|
2008-07-17 19:53:47 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* This function will
|
|
|
|
* - returns a suitable vout (if requested by a non NULL p_fmt)
|
|
|
|
* - recycles an old vout (if given) by either destroying it or by saving it
|
|
|
|
* for latter usage.
|
|
|
|
*
|
|
|
|
* The purpose of this function is to avoid unnecessary creation/destruction of
|
|
|
|
* vout (and to allow optional vout reusing).
|
|
|
|
*
|
|
|
|
* You can call vout_Request on a vout created by vout_Create or by a previous
|
|
|
|
* call to vout_Request.
|
2008-07-17 23:03:08 +02:00
|
|
|
* You can release the returned value either by vout_Request or vout_Close()
|
|
|
|
* followed by a vlc_object_release() or shorter vout_CloseAndRelease()
|
2008-07-17 19:53:47 +02:00
|
|
|
*
|
|
|
|
* \param p_this a vlc object
|
|
|
|
* \param p_vout a vout candidate
|
|
|
|
* \param p_fmt the video format requested or NULL
|
|
|
|
* \return a vout if p_fmt is non NULL and the request is successfull, NULL
|
|
|
|
* otherwise
|
|
|
|
*/
|
2006-11-26 15:20:34 +01:00
|
|
|
#define vout_Request(a,b,c) __vout_Request(VLC_OBJECT(a),b,c)
|
2008-07-17 19:53:47 +02:00
|
|
|
VLC_EXPORT( vout_thread_t *, __vout_Request, ( vlc_object_t *p_this, vout_thread_t *p_vout, video_format_t *p_fmt ) );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This function will create a suitable vout for a given p_fmt. It will never
|
|
|
|
* reuse an already existing unused vout.
|
|
|
|
*
|
2008-07-19 13:16:37 +02:00
|
|
|
* You have to call either vout_Close or vout_Request on the returned value
|
2008-07-17 19:53:47 +02:00
|
|
|
* \param p_this a vlc object to which the returned vout will be attached
|
|
|
|
* \param p_fmt the video format requested
|
|
|
|
* \return a vout if the request is successfull, NULL otherwise
|
|
|
|
*/
|
2006-11-26 15:20:34 +01:00
|
|
|
#define vout_Create(a,b) __vout_Create(VLC_OBJECT(a),b)
|
2008-07-17 19:53:47 +02:00
|
|
|
VLC_EXPORT( vout_thread_t *, __vout_Create, ( vlc_object_t *p_this, video_format_t *p_fmt ) );
|
|
|
|
|
|
|
|
/**
|
2008-07-17 23:03:08 +02:00
|
|
|
* This function will close a vout created by vout_Create or vout_Request.
|
|
|
|
* The associated vout module is closed.
|
|
|
|
* Note: It is not released yet, you'll have to call vlc_object_release()
|
|
|
|
* or use the convenient vout_CloseAndRelease().
|
2008-07-17 19:53:47 +02:00
|
|
|
*
|
2008-07-17 23:03:08 +02:00
|
|
|
* \param p_vout the vout to close
|
2008-07-17 19:53:47 +02:00
|
|
|
*/
|
2008-07-17 23:03:08 +02:00
|
|
|
VLC_EXPORT( void, vout_Close, ( vout_thread_t *p_vout ) );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This function will close a vout created by vout_Create
|
|
|
|
* and then release it.
|
|
|
|
*
|
|
|
|
* \param p_vout the vout to close and release
|
|
|
|
*/
|
|
|
|
static inline void vout_CloseAndRelease( vout_thread_t *p_vout )
|
|
|
|
{
|
|
|
|
vout_Close( p_vout );
|
|
|
|
vlc_object_release( p_vout );
|
|
|
|
}
|
2006-11-26 15:20:34 +01:00
|
|
|
|
2008-07-17 19:53:47 +02:00
|
|
|
/* */
|
2006-11-26 15:20:34 +01:00
|
|
|
VLC_EXPORT( int, vout_ChromaCmp, ( uint32_t, uint32_t ) );
|
|
|
|
|
2008-04-14 00:08:29 +02:00
|
|
|
VLC_EXPORT( picture_t *, vout_CreatePicture, ( vout_thread_t *, bool, bool, unsigned int ) );
|
2006-11-26 15:20:34 +01:00
|
|
|
VLC_EXPORT( void, vout_InitFormat, ( video_frame_format_t *, uint32_t, int, int, int ) );
|
|
|
|
VLC_EXPORT( void, vout_DestroyPicture, ( vout_thread_t *, picture_t * ) );
|
|
|
|
VLC_EXPORT( void, vout_DisplayPicture, ( vout_thread_t *, picture_t * ) );
|
|
|
|
VLC_EXPORT( void, vout_DatePicture, ( vout_thread_t *, picture_t *, mtime_t ) );
|
|
|
|
VLC_EXPORT( void, vout_LinkPicture, ( vout_thread_t *, picture_t * ) );
|
|
|
|
VLC_EXPORT( void, vout_UnlinkPicture, ( vout_thread_t *, picture_t * ) );
|
|
|
|
VLC_EXPORT( void, vout_PlacePicture, ( vout_thread_t *, unsigned int, unsigned int, unsigned int *, unsigned int *, unsigned int *, unsigned int * ) );
|
2008-07-24 19:58:05 +02:00
|
|
|
|
|
|
|
/* DO NOT use vout_RenderPicture unless you are in src/video_ouput */
|
2006-11-26 15:20:34 +01:00
|
|
|
picture_t * vout_RenderPicture ( vout_thread_t *, picture_t *,
|
|
|
|
subpicture_t * );
|
|
|
|
|
2008-07-24 19:58:05 +02:00
|
|
|
/* DO NOT use vout_CountPictureAvailable unless your are in src/input/dec.c (no exception) */
|
|
|
|
int vout_CountPictureAvailable( vout_thread_t * );
|
|
|
|
|
2006-11-26 15:20:34 +01:00
|
|
|
VLC_EXPORT( int, vout_vaControlDefault, ( vout_thread_t *, int, va_list ) );
|
|
|
|
VLC_EXPORT( void *, vout_RequestWindow, ( vout_thread_t *, int *, int *, unsigned int *, unsigned int * ) );
|
|
|
|
VLC_EXPORT( void, vout_ReleaseWindow, ( vout_thread_t *, void * ) );
|
|
|
|
VLC_EXPORT( int, vout_ControlWindow, ( vout_thread_t *, void *, int, va_list ) );
|
|
|
|
void vout_IntfInit( vout_thread_t * );
|
|
|
|
VLC_EXPORT( int, vout_Snapshot, ( vout_thread_t *p_vout, picture_t *p_pic ) );
|
2008-04-14 00:08:29 +02:00
|
|
|
VLC_EXPORT( void, vout_EnableFilter, ( vout_thread_t *, char *,bool , bool ) );
|
2006-11-26 15:20:34 +01:00
|
|
|
|
|
|
|
|
|
|
|
static inline int vout_vaControl( vout_thread_t *p_vout, int i_query,
|
|
|
|
va_list args )
|
|
|
|
{
|
|
|
|
if( p_vout->pf_control )
|
|
|
|
return p_vout->pf_control( p_vout, i_query, args );
|
|
|
|
else
|
|
|
|
return VLC_EGENERIC;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline int vout_Control( vout_thread_t *p_vout, int i_query, ... )
|
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
int i_result;
|
|
|
|
|
|
|
|
va_start( args, i_query );
|
|
|
|
i_result = vout_vaControl( p_vout, i_query, args );
|
|
|
|
va_end( args );
|
|
|
|
return i_result;
|
|
|
|
}
|
|
|
|
|
|
|
|
enum output_query_e
|
|
|
|
{
|
|
|
|
VOUT_GET_SIZE, /* arg1= unsigned int*, arg2= unsigned int*, res= */
|
|
|
|
VOUT_SET_SIZE, /* arg1= unsigned int, arg2= unsigned int, res= */
|
2008-04-14 00:08:29 +02:00
|
|
|
VOUT_SET_STAY_ON_TOP, /* arg1= bool res= */
|
2006-11-26 15:20:34 +01:00
|
|
|
VOUT_REPARENT,
|
|
|
|
VOUT_SNAPSHOT,
|
|
|
|
VOUT_CLOSE,
|
2008-04-14 00:08:29 +02:00
|
|
|
VOUT_SET_FOCUS, /* arg1= bool res= */
|
2007-03-28 23:57:39 +02:00
|
|
|
VOUT_SET_VIEWPORT, /* arg1= view rect, arg2=clip rect, res= */
|
|
|
|
VOUT_REDRAW_RECT, /* arg1= area rect, res= */
|
2006-11-26 15:20:34 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct snapshot_t {
|
|
|
|
char *p_data; /* Data area */
|
|
|
|
|
|
|
|
int i_width; /* In pixels */
|
|
|
|
int i_height; /* In pixels */
|
|
|
|
int i_datasize; /* In bytes */
|
|
|
|
mtime_t date; /* Presentation time */
|
|
|
|
} snapshot_t;
|
2005-08-27 18:40:23 +02:00
|
|
|
|
2003-10-04 17:51:22 +02:00
|
|
|
/**@}*/
|
2003-10-08 23:01:07 +02:00
|
|
|
|
|
|
|
#endif /* _VLC_VIDEO_H */
|