Commit f976d6ae authored by Christophe Massiot's avatar Christophe Massiot

* ALL: converted the video output module "picture" to a stream output

   module "mosaic-bridge".
parent 0ae97f35
...@@ -986,7 +986,7 @@ if test "${SYS}" != "mingwce"; then ...@@ -986,7 +986,7 @@ if test "${SYS}" != "mingwce"; then
VLC_ADD_PLUGINS([externrun]) VLC_ADD_PLUGINS([externrun])
VLC_ADD_PLUGINS([access_fake access_filter_timeshift]) VLC_ADD_PLUGINS([access_fake access_filter_timeshift])
VLC_ADD_PLUGINS([gestures rc telnet hotkeys netsync showintf time marq sap shout]) VLC_ADD_PLUGINS([gestures rc telnet hotkeys netsync showintf time marq sap shout])
VLC_ADD_PLUGINS([picture mosaic wall motiondetect clone crop]) VLC_ADD_PLUGINS([mosaic wall motiondetect clone crop])
VLC_ADD_PLUGINS([i420_yuy2 i422_yuy2 i420_ymga]) VLC_ADD_PLUGINS([i420_yuy2 i422_yuy2 i420_ymga])
VLC_ADD_PLUGINS([aout_file linear_resampler bandlimited_resampler]) VLC_ADD_PLUGINS([aout_file linear_resampler bandlimited_resampler])
VLC_ADD_PLUGINS([float32_mixer spdif_mixer simple_channel_mixer]) VLC_ADD_PLUGINS([float32_mixer spdif_mixer simple_channel_mixer])
...@@ -1227,7 +1227,7 @@ then ...@@ -1227,7 +1227,7 @@ then
VLC_ADD_PLUGINS([packetizer_copy]) VLC_ADD_PLUGINS([packetizer_copy])
VLC_ADD_PLUGINS([stream_out_dummy stream_out_standard stream_out_es stream_out_rtp stream_out_description vod_rtsp]) VLC_ADD_PLUGINS([stream_out_dummy stream_out_standard stream_out_es stream_out_rtp stream_out_description vod_rtsp])
VLC_ADD_PLUGINS([stream_out_duplicate stream_out_gather stream_out_display stream_out_transcode stream_out_bridge]) VLC_ADD_PLUGINS([stream_out_duplicate stream_out_gather stream_out_display stream_out_transcode stream_out_bridge stream_out_mosaic_bridge])
# VLC_ADD_PLUGINS([stream_out_transrate]) # VLC_ADD_PLUGINS([stream_out_transrate])
AC_DEFINE(ENABLE_SOUT, 1, Define if you want the stream output support) AC_DEFINE(ENABLE_SOUT, 1, Define if you want the stream output support)
...@@ -2533,7 +2533,7 @@ AC_ARG_ENABLE(speex, ...@@ -2533,7 +2533,7 @@ AC_ARG_ENABLE(speex,
if test "${enable_speex}" != "no" if test "${enable_speex}" != "no"
then then
AC_CHECK_HEADERS(speex/speex.h, [ AC_CHECK_HEADERS(speex/speex.h, [
LDFLAGS="${LDFLAGS_save} ${LDFLAGS_toolame}" LDFLAGS="${LDFLAGS_save} ${LDFLAGS_speex}"
AC_CHECK_LIB(speex, speex_decode_int, [ AC_CHECK_LIB(speex, speex_decode_int, [
VLC_ADD_PLUGINS([speex]) VLC_ADD_PLUGINS([speex])
VLC_ADD_LDFLAGS([speex],[-lspeex]) ], VLC_ADD_LDFLAGS([speex],[-lspeex]) ],
......
...@@ -11,3 +11,4 @@ SOURCES_stream_out_gather = gather.c ...@@ -11,3 +11,4 @@ SOURCES_stream_out_gather = gather.c
SOURCES_stream_out_rtp = rtp.c SOURCES_stream_out_rtp = rtp.c
SOURCES_stream_out_switcher = switcher.c SOURCES_stream_out_switcher = switcher.c
SOURCES_stream_out_bridge = bridge.c SOURCES_stream_out_bridge = bridge.c
SOURCES_stream_out_mosaic_bridge = mosaic_bridge.c
...@@ -58,7 +58,7 @@ vlc_module_begin(); ...@@ -58,7 +58,7 @@ vlc_module_begin();
set_shortname( _("Bridge")); set_shortname( _("Bridge"));
set_description( _("Bridge stream output")); set_description( _("Bridge stream output"));
add_submodule(); add_submodule();
set_section( N_("Bridge out"),NULL); set_section( N_("Bridge out"), NULL );
set_capability( "sout stream", 50 ); set_capability( "sout stream", 50 );
add_shortcut( "bridge-out" ); add_shortcut( "bridge-out" );
/* Only usable with VLM. No category so not in gui preferences /* Only usable with VLM. No category so not in gui preferences
...@@ -69,12 +69,12 @@ vlc_module_begin(); ...@@ -69,12 +69,12 @@ vlc_module_begin();
set_callbacks( OpenOut, CloseOut ); set_callbacks( OpenOut, CloseOut );
add_submodule(); add_submodule();
set_section( N_("Bridge in"),NULL); set_section( N_("Bridge in"), NULL );
set_capability( "sout stream", 50 ); set_capability( "sout stream", 50 );
add_shortcut( "bridge-in" ); add_shortcut( "bridge-in" );
/*set_category( CAT_SOUT ); /*set_category( CAT_SOUT );
set_subcategory( SUBCAT_SOUT_STREAM );*/ set_subcategory( SUBCAT_SOUT_STREAM );*/
add_integer( SOUT_CFG_PREFIX_IN "delay", 100, NULL, DELAY_TEXT, add_integer( SOUT_CFG_PREFIX_IN "delay", 0, NULL, DELAY_TEXT,
DELAY_LONGTEXT, VLC_FALSE ); DELAY_LONGTEXT, VLC_FALSE );
add_integer( SOUT_CFG_PREFIX_IN "id-offset", 8192, NULL, ID_OFFSET_TEXT, add_integer( SOUT_CFG_PREFIX_IN "id-offset", 8192, NULL, ID_OFFSET_TEXT,
ID_OFFSET_LONGTEXT, VLC_FALSE ); ID_OFFSET_LONGTEXT, VLC_FALSE );
...@@ -109,7 +109,6 @@ typedef struct bridged_es_t ...@@ -109,7 +109,6 @@ typedef struct bridged_es_t
block_t *p_block; block_t *p_block;
block_t **pp_last; block_t **pp_last;
vlc_bool_t b_empty; vlc_bool_t b_empty;
int i_id;
/* bridge in part */ /* bridge in part */
sout_stream_id_t *id; sout_stream_id_t *id;
...@@ -150,9 +149,9 @@ static bridge_t *__GetBridge( vlc_object_t *p_object ) ...@@ -150,9 +149,9 @@ static bridge_t *__GetBridge( vlc_object_t *p_object )
typedef struct out_sout_stream_sys_t typedef struct out_sout_stream_sys_t
{ {
vlc_mutex_t *p_lock; vlc_mutex_t *p_lock;
bridged_es_t *p_es;
int i_id; int i_id;
vlc_bool_t b_inited; vlc_bool_t b_inited;
int i_position;
} out_sout_stream_sys_t; } out_sout_stream_sys_t;
/***************************************************************************** /*****************************************************************************
...@@ -160,7 +159,7 @@ typedef struct out_sout_stream_sys_t ...@@ -160,7 +159,7 @@ typedef struct out_sout_stream_sys_t
*****************************************************************************/ *****************************************************************************/
static int OpenOut( vlc_object_t *p_this ) static int OpenOut( vlc_object_t *p_this )
{ {
sout_stream_t *p_stream = (sout_stream_t*)p_this; sout_stream_t *p_stream = (sout_stream_t *)p_this;
out_sout_stream_sys_t *p_sys; out_sout_stream_sys_t *p_sys;
vlc_value_t val; vlc_value_t val;
...@@ -182,7 +181,6 @@ static int OpenOut( vlc_object_t *p_this ) ...@@ -182,7 +181,6 @@ static int OpenOut( vlc_object_t *p_this )
p_stream->p_sys = (sout_stream_sys_t *)p_sys; p_stream->p_sys = (sout_stream_sys_t *)p_sys;
/* update p_sout->i_out_pace_nocontrol */
p_stream->p_sout->i_out_pace_nocontrol++; p_stream->p_sout->i_out_pace_nocontrol++;
return VLC_SUCCESS; return VLC_SUCCESS;
...@@ -243,14 +241,12 @@ static sout_stream_id_t * AddOut( sout_stream_t *p_stream, es_format_t *p_fmt ) ...@@ -243,14 +241,12 @@ static sout_stream_id_t * AddOut( sout_stream_t *p_stream, es_format_t *p_fmt )
p_bridge->pp_es = realloc( p_bridge->pp_es, p_bridge->pp_es = realloc( p_bridge->pp_es,
(p_bridge->i_es_num + 1) (p_bridge->i_es_num + 1)
* sizeof(bridged_es_t *) ); * sizeof(bridged_es_t *) );
p_sys->i_position = p_bridge->i_es_num;
p_bridge->i_es_num++; p_bridge->i_es_num++;
p_bridge->pp_es[i] = malloc( sizeof(bridged_es_t) ); p_bridge->pp_es[i] = malloc( sizeof(bridged_es_t) );
} }
else
p_sys->i_position = i;
p_es = p_bridge->pp_es[ p_sys->i_position ]; p_sys->p_es = p_es = p_bridge->pp_es[i];
p_es->fmt = *p_fmt; p_es->fmt = *p_fmt;
p_es->fmt.i_id = p_sys->i_id; p_es->fmt.i_id = p_sys->i_id;
p_es->p_block = NULL; p_es->p_block = NULL;
...@@ -262,7 +258,7 @@ static sout_stream_id_t * AddOut( sout_stream_t *p_stream, es_format_t *p_fmt ) ...@@ -262,7 +258,7 @@ static sout_stream_id_t * AddOut( sout_stream_t *p_stream, es_format_t *p_fmt )
p_es->b_changed = VLC_TRUE; p_es->b_changed = VLC_TRUE;
msg_Dbg( p_stream, "bridging out input codec=%4.4s id=%d pos=%d", msg_Dbg( p_stream, "bridging out input codec=%4.4s id=%d pos=%d",
(char*)&p_es->fmt.i_codec, p_es->fmt.i_id, p_sys->i_position ); (char*)&p_es->fmt.i_codec, p_es->fmt.i_id, i );
vlc_mutex_unlock( p_sys->p_lock ); vlc_mutex_unlock( p_sys->p_lock );
...@@ -272,7 +268,6 @@ static sout_stream_id_t * AddOut( sout_stream_t *p_stream, es_format_t *p_fmt ) ...@@ -272,7 +268,6 @@ static sout_stream_id_t * AddOut( sout_stream_t *p_stream, es_format_t *p_fmt )
static int DelOut( sout_stream_t *p_stream, sout_stream_id_t *id ) static int DelOut( sout_stream_t *p_stream, sout_stream_id_t *id )
{ {
out_sout_stream_sys_t *p_sys = (out_sout_stream_sys_t *)p_stream->p_sys; out_sout_stream_sys_t *p_sys = (out_sout_stream_sys_t *)p_stream->p_sys;
bridge_t *p_bridge;
bridged_es_t *p_es; bridged_es_t *p_es;
if ( !p_sys->b_inited ) if ( !p_sys->b_inited )
...@@ -282,8 +277,7 @@ static int DelOut( sout_stream_t *p_stream, sout_stream_id_t *id ) ...@@ -282,8 +277,7 @@ static int DelOut( sout_stream_t *p_stream, sout_stream_id_t *id )
vlc_mutex_lock( p_sys->p_lock ); vlc_mutex_lock( p_sys->p_lock );
p_bridge = GetBridge( p_stream ); p_es = p_sys->p_es;
p_es = p_bridge->pp_es[ p_sys->i_position ];
p_es->b_empty = VLC_TRUE; p_es->b_empty = VLC_TRUE;
block_ChainRelease( p_es->p_block ); block_ChainRelease( p_es->p_block );
...@@ -299,7 +293,6 @@ static int SendOut( sout_stream_t *p_stream, sout_stream_id_t *id, ...@@ -299,7 +293,6 @@ static int SendOut( sout_stream_t *p_stream, sout_stream_id_t *id,
block_t *p_buffer ) block_t *p_buffer )
{ {
out_sout_stream_sys_t *p_sys = (out_sout_stream_sys_t *)p_stream->p_sys; out_sout_stream_sys_t *p_sys = (out_sout_stream_sys_t *)p_stream->p_sys;
bridge_t *p_bridge;
bridged_es_t *p_es; bridged_es_t *p_es;
if ( (out_sout_stream_sys_t *)id != p_sys ) if ( (out_sout_stream_sys_t *)id != p_sys )
...@@ -310,8 +303,7 @@ static int SendOut( sout_stream_t *p_stream, sout_stream_id_t *id, ...@@ -310,8 +303,7 @@ static int SendOut( sout_stream_t *p_stream, sout_stream_id_t *id,
vlc_mutex_lock( p_sys->p_lock ); vlc_mutex_lock( p_sys->p_lock );
p_bridge = GetBridge( p_stream ); p_es = p_sys->p_es;
p_es = p_bridge->pp_es[ p_sys->i_position ];
*p_es->pp_last = p_buffer; *p_es->pp_last = p_buffer;
while ( p_buffer != NULL ) while ( p_buffer != NULL )
{ {
......
SOURCES_mosaic = mosaic.c SOURCES_mosaic = mosaic.c mosaic.h
SOURCES_transform = transform.c SOURCES_transform = transform.c
SOURCES_invert = invert.c SOURCES_invert = invert.c
SOURCES_adjust = adjust.c SOURCES_adjust = adjust.c
......
This diff is collapsed.
/***************************************************************************** /*****************************************************************************
* picture.h: * mosaic.h:
***************************************************************************** *****************************************************************************
* Copyright (C) 2004-2005 VideoLAN * Copyright (C) 2004-2005 VideoLAN
* $Id$ * $Id$
* *
* Authors: Antoine Cellerier <dionoea@videolan.org> * Authors: Antoine Cellerier <dionoea@videolan.org>
* Christophe Massiot <massiot@via.ecp.fr>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
...@@ -21,24 +22,37 @@ ...@@ -21,24 +22,37 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/ *****************************************************************************/
#ifndef _PICTURE_VOUT_H typedef struct bridged_es_t
#define _PICTURE_VOUT_H 1
#define PICTURE_VOUT_E_AVAILABLE 0
#define PICTURE_VOUT_E_OCCUPIED 1
typedef struct picture_vout_e_t
{ {
es_format_t fmt;
picture_t *p_picture; picture_t *p_picture;
int i_status; picture_t **pp_last;
vlc_bool_t b_empty;
char *psz_id; char *psz_id;
} picture_vout_e_t; } bridged_es_t;
typedef struct bridge_t
{
bridged_es_t **pp_es;
int i_es_num;
} bridge_t;
typedef struct picture_vout_t #define GetBridge(a) __GetBridge( VLC_OBJECT(a) )
static bridge_t *__GetBridge( vlc_object_t *p_object )
{ {
int i_picture_num; libvlc_t *p_libvlc = p_object->p_libvlc;
picture_vout_e_t *p_pic; bridge_t *p_bridge;
} picture_vout_t; vlc_value_t val;
if( var_Get( p_libvlc, "mosaic-struct", &val ) != VLC_SUCCESS )
{
p_bridge = NULL;
}
else
{
p_bridge = val.p_address;
}
#undef IMAGE_2PASSES return p_bridge;
}
#endif
...@@ -12,5 +12,3 @@ SOURCES_hd1000v = hd1000v.cpp ...@@ -12,5 +12,3 @@ SOURCES_hd1000v = hd1000v.cpp
SOURCES_snapshot = snapshot.c SOURCES_snapshot = snapshot.c
SOURCES_opengl = opengl.c SOURCES_opengl = opengl.c
SOURCES_image = image.c SOURCES_image = image.c
SOURCES_picture = picture.h \
picture.c
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment