* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#include "libvlc_internal.h"
-
#include <vlc/libvlc.h>
+#include <vlc/libvlc_media.h>
+#include <vlc/libvlc_media_player.h>
+
+#include <vlc_common.h>
#include <vlc_input.h>
#include <vlc_vout.h>
+#include "media_player_internal.h"
+#include <vlc_osd.h>
+
/*
* Remember to release the returned vout_thread_t.
*/
char *libvlc_video_get_aspect_ratio( libvlc_media_player_t *p_mi,
libvlc_exception_t *p_e )
{
- char *psz_aspect = 0;
+ char *psz_aspect = NULL;
vout_thread_t *p_vout = GetVout( p_mi, p_e );
- if( !p_vout ) return 0;
+ if( !p_vout ) return NULL;
psz_aspect = var_GetNonEmptyString( p_vout, "aspect-ratio" );
vlc_object_release( p_vout );
}
void libvlc_video_set_aspect_ratio( libvlc_media_player_t *p_mi,
- char *psz_aspect, libvlc_exception_t *p_e )
+ const char *psz_aspect, libvlc_exception_t *p_e )
{
vout_thread_t *p_vout = GetVout( p_mi, p_e );
int i_ret = -1;
}
int libvlc_video_set_subtitle_file( libvlc_media_player_t *p_mi,
- char *psz_subtitle,
+ const char *psz_subtitle,
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
}
void libvlc_video_set_crop_geometry( libvlc_media_player_t *p_mi,
- char *psz_geometry, libvlc_exception_t *p_e )
+ const char *psz_geometry, libvlc_exception_t *p_e )
{
vout_thread_t *p_vout = GetVout( p_mi, p_e );
int i_ret = -1;
vlc_value_t val = val_list.p_list->p_values[i];
if( i_track == val.i_int )
{
- i_ret = var_Set( p_input_thread, "audio-es", val );
+ i_ret = var_Set( p_input_thread, "video-es", val );
if( i_ret < 0 )
libvlc_exception_raise( p_e, "Setting video track failed" );
goto end;
var_FreeList( &val_list, NULL );
vlc_object_release( p_input_thread );
}
+
+/******************************************************************************
+ * libvlc_video_set_deinterlace : enable deinterlace
+ *****************************************************************************/
+void libvlc_video_set_deinterlace( libvlc_media_player_t *p_mi, int b_enable,
+ const char *psz_mode,
+ libvlc_exception_t *p_e )
+{
+ vout_thread_t *p_vout = GetVout( p_mi, p_e );
+
+ if( !p_vout )
+ {
+ libvlc_exception_raise( p_e, "Unable to get video output" );
+ return;
+ }
+
+ if( b_enable )
+ {
+ /* be sure that the filter name given is supported */
+ if( !strcmp(psz_mode, "blend") || !strcmp(psz_mode, "bob")
+ || !strcmp(psz_mode, "discard") || !strcmp(psz_mode, "linear")
+ || !strcmp(psz_mode, "mean") || !strcmp(psz_mode, "x") )
+ {
+ /* set deinterlace filter chosen */
+ var_SetString( p_vout, "deinterlace", psz_mode );
+ }
+ else
+ {
+ libvlc_exception_raise( p_e, "Unsuported or bad deinterlace filter name" );
+ }
+ }
+ else
+ {
+ /* disable deinterlace filter */
+ var_SetString( p_vout, "deinterlace", "" );
+ }
+
+ vlc_object_release( p_vout );
+}
+
+/*****************************************************************************
+ * Marquee: FIXME: That implementation has no persistent state and requires
+ * a vout
+ *****************************************************************************/
+
+static const char *get_marquee_int_option_identifier(unsigned option)
+{
+ static const char tab[][16] =
+ {
+ "marq",
+ "marq-color",
+ "marq-opacity",
+ "marq-position",
+ "marq-refresh",
+ "marq-size",
+ "marq-timeout",
+ "marq-x",
+ "marq-y",
+ };
+ if( option >= sizeof( tab ) / sizeof( tab[0] ) )
+ return NULL;
+ return tab[option];
+}
+
+static const char *get_marquee_string_option_identifier(unsigned option)
+{
+ static const char tab[][16] =
+ {
+ "marq-marquee",
+ };
+ if( option >= sizeof( tab ) / sizeof( tab[0] ) )
+ return NULL;
+ return tab[option];
+}
+
+
+static vlc_object_t *get_marquee_object( libvlc_media_player_t * p_mi )
+{
+ libvlc_exception_t e;
+ libvlc_exception_init(&e);
+ vout_thread_t * vout = GetVout( p_mi, &e );
+ libvlc_exception_clear(&e);
+ if( !vout )
+ return NULL;
+ vlc_object_t * object = vlc_object_find_name( vout, "marq", FIND_CHILD );
+ vlc_object_release(vout);
+ return object;
+}
+
+/*****************************************************************************
+ * libvlc_video_get_marquee_option_as_int : get a marq option value
+ *****************************************************************************/
+int libvlc_video_get_marquee_option_as_int( libvlc_media_player_t *p_mi,
+ libvlc_video_marquee_int_option_t option,
+ libvlc_exception_t *p_e )
+{
+ const char * identifier = get_marquee_int_option_identifier(option);
+ if(!identifier)
+ {
+ libvlc_exception_raise( p_e, "This option is not available" );
+ return 0;
+ }
+ vlc_object_t * marquee = get_marquee_object(p_mi);
+
+ /* Handle the libvlc_marquee_Enabled separately */
+ if(option == libvlc_marquee_Enabled)
+ {
+ bool isEnabled = marquee != NULL;
+ vlc_object_release(marquee);
+ return isEnabled;
+ }
+
+ /* Generic case */
+ if(!identifier)
+ {
+ libvlc_exception_raise( p_e, "Marquee is not enabled" );
+ return 0;
+ }
+ int ret = var_GetInteger(marquee, identifier);
+ vlc_object_release(marquee);
+ return ret;
+}
+
+/*****************************************************************************
+ * libvlc_video_get_marquee_option_as_string : get a marq option value
+ *****************************************************************************/
+char * libvlc_video_get_marquee_option_as_string( libvlc_media_player_t *p_mi,
+ libvlc_video_marquee_string_option_t option,
+ libvlc_exception_t *p_e )
+{
+ const char * identifier = get_marquee_string_option_identifier(option);
+ if(!identifier)
+ {
+ libvlc_exception_raise( p_e, "This option is not available" );
+ return 0;
+ }
+
+ vlc_object_t * marquee = get_marquee_object(p_mi);
+ if(!marquee)
+ {
+ libvlc_exception_raise( p_e, "Marquee is not enabled" );
+ return 0;
+ }
+ char *ret = var_GetString(marquee, identifier);
+ vlc_object_release(marquee);
+ return ret;
+}
+
+/*****************************************************************************
+ * libvlc_video_set_marquee_option_as_int: enable, disable or set an int option
+ *****************************************************************************/
+void libvlc_video_set_marquee_option_as_int( libvlc_media_player_t *p_mi,
+ libvlc_video_marquee_int_option_t option,
+ int value, libvlc_exception_t *p_e )
+{
+ const char * identifier = get_marquee_int_option_identifier(option);
+ if(!identifier)
+ {
+ libvlc_exception_raise( p_e, "This option is not available" );
+ return;
+ }
+
+ /* Handle the libvlc_marquee_Enabled separately */
+ if(option == libvlc_marquee_Enabled)
+ {
+ libvlc_exception_t e;
+ libvlc_exception_init(&e);
+ vout_thread_t * vout = GetVout( p_mi, &e );
+ libvlc_exception_clear(&e);
+ if (vout)
+ {
+ vout_EnableFilter(vout, identifier, value, false);
+ vlc_object_release(vout);
+ }
+ else
+ {
+ libvlc_exception_raise( p_e, "No Vout" );
+ }
+ return;
+ }
+
+ vlc_object_t * marquee = get_marquee_object(p_mi);
+ if(!marquee)
+ {
+ libvlc_exception_raise( p_e, "Marquee is not enabled" );
+ return;
+ }
+ var_SetInteger(marquee, identifier, value);
+ vlc_object_release(marquee);
+}
+
+/*****************************************************************************
+ * libvlc_video_set_marquee_option_as_string: set a string option
+ *****************************************************************************/
+void libvlc_video_set_marquee_option_as_string( libvlc_media_player_t *p_mi,
+ libvlc_video_marquee_string_option_t option,
+ const char * value,
+ libvlc_exception_t *p_e )
+{
+ const char * identifier = get_marquee_string_option_identifier(option);
+ if(!identifier)
+ {
+ libvlc_exception_raise( p_e, "This option is not available" );
+ return;
+ }
+ vlc_object_t * marquee = get_marquee_object(p_mi);
+ if(!marquee)
+ {
+ libvlc_exception_raise( p_e, "Marquee is not enabled" );
+ return;
+ }
+ var_SetString(marquee, identifier, value);
+ vlc_object_release(marquee);
+}