X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcontrol%2Fmediacontrol_audio_video.c;h=047f05fe4898b04c25d4713d53ca00d870fa4099;hb=848489c3863b1b7ddbe542aa3e746063722b9280;hp=cfc129639e9940a60d2c6c09fc597ad1940dc104;hpb=671f0b24a057135af63c2a5fd8a966345f134b51;p=vlc diff --git a/src/control/mediacontrol_audio_video.c b/src/control/mediacontrol_audio_video.c index cfc129639e..047f05fe48 100644 --- a/src/control/mediacontrol_audio_video.c +++ b/src/control/mediacontrol_audio_video.c @@ -21,19 +21,18 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif +#include "mediacontrol_internal.h" +#include "libvlc_internal.h" #include +#include -#include -#include -#include -#include - +#include #include -#include - #include /* malloc(), free() */ #include @@ -51,9 +50,6 @@ # include #endif -#define RAISE( c, m ) exception->code = c; \ - exception->message = strdup(m); - mediacontrol_RGBPicture * mediacontrol_snapshot( mediacontrol_Instance *self, const mediacontrol_Position * a_position, @@ -61,68 +57,69 @@ mediacontrol_snapshot( mediacontrol_Instance *self, { vlc_object_t* p_cache; vout_thread_t* p_vout; + input_thread_t *p_input; mediacontrol_RGBPicture *p_pic = NULL; char path[256]; snapshot_t *p_snapshot; + libvlc_exception_t ex; - exception=mediacontrol_exception_init( exception ); + libvlc_exception_init( &ex ); + mediacontrol_exception_init( exception ); - p_vout = vlc_object_find( self->p_playlist, VLC_OBJECT_VOUT, FIND_CHILD ); + p_input = libvlc_get_input_thread( self->p_media_player, &ex ); + if( ! p_input ) + { + RAISE_NULL( mediacontrol_InternalException, "No input" ); + } + p_vout = vlc_object_find( p_input, VLC_OBJECT_VOUT, FIND_CHILD ); if( ! p_vout ) { - RAISE( mediacontrol_InternalException, "No video output" ); - return NULL; + RAISE_NULL( mediacontrol_InternalException, "No video output" ); } - p_cache = vlc_object_create( self->p_playlist, VLC_OBJECT_GENERIC ); + p_cache = vlc_object_create( p_input, sizeof( vlc_object_t ) ); if( p_cache == NULL ) { vlc_object_release( p_vout ); - msg_Err( self->p_playlist, "out of memory" ); - RAISE( mediacontrol_InternalException, "Out of memory" ); - return NULL; + vlc_object_release( p_input ); + RAISE_NULL( mediacontrol_InternalException, "Out of memory" ); } snprintf( path, 255, "object:%d", p_cache->i_object_id ); var_SetString( p_vout, "snapshot-path", path ); var_SetString( p_vout, "snapshot-format", "png" ); - vlc_mutex_lock( &p_cache->object_lock ); + vlc_object_lock( p_cache ); vout_Control( p_vout, VOUT_SNAPSHOT ); - vlc_cond_wait( &p_cache->object_wait, &p_cache->object_lock ); + vlc_object_wait( p_cache ); vlc_object_release( p_vout ); p_snapshot = ( snapshot_t* ) p_cache->p_private; - vlc_object_destroy( p_cache ); + vlc_object_unlock( p_cache ); + vlc_object_release( p_cache ); + vlc_object_release( p_input ); if( p_snapshot ) { - p_pic = _mediacontrol_createRGBPicture( p_snapshot->i_width, - p_snapshot->i_height, - VLC_FOURCC( 'p','n','g',' ' ), - p_snapshot->date, - p_snapshot->p_data, - p_snapshot->i_datasize ); + p_pic = private_mediacontrol_createRGBPicture( p_snapshot->i_width, + p_snapshot->i_height, + VLC_FOURCC( 'p','n','g',' ' ), + p_snapshot->date, + p_snapshot->p_data, + p_snapshot->i_datasize ); if( !p_pic ) - RAISE( mediacontrol_InternalException, "out of memory" ); - free( p_snapshot->p_data ); - free( p_snapshot ); + { + free( p_snapshot->p_data ); + free( p_snapshot ); + RAISE_NULL( mediacontrol_InternalException, "Out of memory" ); + } } else { - RAISE( mediacontrol_InternalException, "Snapshot exception" ); + RAISE_NULL( mediacontrol_InternalException, "Snapshot exception" ); } return p_pic; } -mediacontrol_RGBPicture ** -mediacontrol_all_snapshots( mediacontrol_Instance *self, - mediacontrol_Exception *exception ) -{ - exception=mediacontrol_exception_init( exception ); - - RAISE( mediacontrol_InternalException, "unsupported method" ); - return NULL; -} - +static int mediacontrol_showtext( vout_thread_t *p_vout, int i_channel, char *psz_string, text_style_t *p_style, int i_flags, int i_hmargin, int i_vmargin, @@ -151,14 +148,16 @@ int mediacontrol_showtext( vout_thread_t *p_vout, int i_channel, } p_spu->p_region->psz_text = strdup( psz_string ); + p_spu->p_region->i_align = i_flags & SUBPICTURE_ALIGN_MASK; + p_spu->p_region->p_style = p_style; p_spu->i_start = i_start; p_spu->i_stop = i_stop; - p_spu->b_ephemer = VLC_FALSE; - p_spu->b_absolute = VLC_FALSE; + p_spu->b_ephemer = false; + p_spu->b_absolute = false; p_spu->i_x = i_hmargin; p_spu->i_y = i_vmargin; - p_spu->i_flags = i_flags; + p_spu->i_flags = i_flags & ~SUBPICTURE_ALIGN_MASK; p_spu->i_channel = i_channel; spu_DisplaySubpicture( p_vout->p_spu, p_spu ); @@ -174,22 +173,29 @@ mediacontrol_display_text( mediacontrol_Instance *self, const mediacontrol_Position * end, mediacontrol_Exception *exception ) { - input_thread_t *p_input = NULL; vout_thread_t *p_vout = NULL; char* psz_message; + input_thread_t *p_input; + libvlc_exception_t ex; - psz_message = strdup( message ); - if( !psz_message ) + libvlc_exception_init( &ex ); + mediacontrol_exception_init( exception ); + + p_input = libvlc_get_input_thread( self->p_media_player, &ex ); + if( ! p_input ) { - RAISE( mediacontrol_InternalException, "no more memory" ); - return; + RAISE_VOID( mediacontrol_InternalException, "No input" ); } - - p_vout = vlc_object_find( self->p_playlist, VLC_OBJECT_VOUT, FIND_CHILD ); + p_vout = vlc_object_find( p_input, VLC_OBJECT_VOUT, FIND_CHILD ); if( ! p_vout ) { - RAISE( mediacontrol_InternalException, "no video output" ); - return; + RAISE_VOID( mediacontrol_InternalException, "No video output" ); + } + + psz_message = strdup( message ); + if( !psz_message ) + { + RAISE_VOID( mediacontrol_InternalException, "no more memory" ); } if( begin->origin == mediacontrol_RelativePosition && @@ -199,11 +205,11 @@ mediacontrol_display_text( mediacontrol_Instance *self, mtime_t i_duration = 0; mtime_t i_now = mdate(); - i_duration = 1000 * mediacontrol_unit_convert( - self->p_playlist->p_input, - end->key, - mediacontrol_MediaTime, - end->value ); + i_duration = 1000 * private_mediacontrol_unit_convert( + self->p_media_player, + end->key, + mediacontrol_MediaTime, + end->value ); mediacontrol_showtext( p_vout, DEFAULT_CHAN, psz_message, NULL, OSD_ALIGN_BOTTOM | OSD_ALIGN_LEFT, 0, 0, @@ -213,23 +219,15 @@ mediacontrol_display_text( mediacontrol_Instance *self, { mtime_t i_debut, i_fin, i_now; - p_input = self->p_playlist->p_input; - if( ! p_input ) - { - RAISE( mediacontrol_InternalException, "No input" ); - vlc_object_release( p_vout ); - return; - } - /* FIXME */ /* i_now = input_ClockGetTS( p_input, NULL, 0 ); */ i_now = mdate(); - i_debut = mediacontrol_position2microsecond( p_input, + i_debut = private_mediacontrol_position2microsecond( self->p_media_player, ( mediacontrol_Position* ) begin ); i_debut += i_now; - i_fin = mediacontrol_position2microsecond( p_input, + i_fin = private_mediacontrol_position2microsecond( self->p_media_player, ( mediacontrol_Position * ) end ); i_fin += i_now; @@ -245,17 +243,16 @@ unsigned short mediacontrol_sound_get_volume( mediacontrol_Instance *self, mediacontrol_Exception *exception ) { - short retval; - audio_volume_t i_volume; + libvlc_exception_t ex; + int i_ret = 0; - if( !self->p_intf ) - { - RAISE( mediacontrol_InternalException, "No interface module" ); - return 0; - } - aout_VolumeGet( self->p_intf, &i_volume ); - retval = i_volume; - return retval; + mediacontrol_exception_init( exception ); + libvlc_exception_init( &ex ); + + i_ret = libvlc_audio_get_volume( self->p_instance, &ex ); + HANDLE_LIBVLC_EXCEPTION_ZERO( &ex ); + /* FIXME: Normalize in [0..100] */ + return (unsigned short)i_ret; } void @@ -263,117 +260,86 @@ mediacontrol_sound_set_volume( mediacontrol_Instance *self, const unsigned short volume, mediacontrol_Exception *exception ) { - if( !self->p_intf ) - { - RAISE( mediacontrol_InternalException, "No interface module" ); - } - else aout_VolumeSet( self->p_intf,( audio_volume_t )volume ); + /* FIXME: Normalize in [0..100] */ + libvlc_exception_t ex; + + mediacontrol_exception_init( exception ); + libvlc_exception_init( &ex ); + + libvlc_audio_set_volume( self->p_instance, volume, &ex ); + HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); } -vlc_bool_t mediacontrol_set_visual( mediacontrol_Instance *self, +int mediacontrol_set_visual( mediacontrol_Instance *self, WINDOWHANDLE visual_id, mediacontrol_Exception *exception ) { - vlc_value_t value; - int ret; + libvlc_exception_t ex; - if( !self->p_vlc ) - { - RAISE( mediacontrol_InternalException, "No vlc reference" ); - return VLC_FALSE; - } - value.i_int=visual_id; - ret = var_Set(self->p_vlc, "drawable", value); + mediacontrol_exception_init( exception ); + libvlc_exception_init( &ex ); - return (ret == VLC_SUCCESS); + libvlc_media_player_set_drawable( self->p_media_player, (libvlc_drawable_t)visual_id, &ex ); + HANDLE_LIBVLC_EXCEPTION_ZERO( &ex ); + return true; } int mediacontrol_get_rate( mediacontrol_Instance *self, - mediacontrol_Exception *exception ) + mediacontrol_Exception *exception ) { - int retval; - input_thread_t *p_input = NULL; + libvlc_exception_t ex; + int i_ret; - p_input = self->p_playlist->p_input; - if( ! p_input ) - { - RAISE( mediacontrol_InternalException, "No input" ); - return 0; - } - retval = var_GetInteger(p_input, "rate") / 10; - return retval; + mediacontrol_exception_init( exception ); + libvlc_exception_init( &ex ); + + i_ret = libvlc_media_player_get_rate( self->p_media_player, &ex ); + HANDLE_LIBVLC_EXCEPTION_ZERO( &ex ); + + return i_ret / 10; } void mediacontrol_set_rate( mediacontrol_Instance *self, - const int rate, - mediacontrol_Exception *exception ) + const int rate, + mediacontrol_Exception *exception ) { - input_thread_t *p_input = NULL; + libvlc_exception_t ex; - p_input = self->p_playlist->p_input; - if( ! p_input ) - { - RAISE( mediacontrol_InternalException, "No input" ); - return; - } - var_SetInteger(p_input, "rate", rate * 10); - return; + mediacontrol_exception_init( exception ); + libvlc_exception_init( &ex ); + + libvlc_media_player_set_rate( self->p_media_player, rate * 10, &ex ); + HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); } int mediacontrol_get_fullscreen( mediacontrol_Instance *self, - mediacontrol_Exception *exception ) + mediacontrol_Exception *exception ) { - vout_thread_t *p_vout = NULL; - vlc_value_t val; + libvlc_exception_t ex; int i_ret; - - p_vout = vlc_object_find( self->p_playlist, VLC_OBJECT_VOUT, FIND_CHILD ); - if( ! p_vout ) - { - RAISE( mediacontrol_InternalException, "no video output" ); - return 0; - } - - i_ret = var_Get( p_vout, "fullscreen", &val ); - vlc_object_release( p_vout ); - if( i_ret ) - { - RAISE( mediacontrol_InternalException, "Unexpected error while looking up fullscreen value" ); - return 0; - } - return val.b_bool == VLC_TRUE ? 1 : 0; + mediacontrol_exception_init( exception ); + libvlc_exception_init( &ex ); + + i_ret = libvlc_get_fullscreen( self->p_media_player, &ex ); + HANDLE_LIBVLC_EXCEPTION_ZERO( &ex ); + + return i_ret; } void mediacontrol_set_fullscreen( mediacontrol_Instance *self, - const int b_fullscreen, - mediacontrol_Exception *exception ) + const int b_fullscreen, + mediacontrol_Exception *exception ) { - vout_thread_t *p_vout = NULL; - vlc_value_t val; - int i_ret; - - p_vout = vlc_object_find( self->p_playlist, VLC_OBJECT_VOUT, FIND_CHILD ); - if( ! p_vout ) - { - RAISE( mediacontrol_InternalException, "no video output" ); - return; - } - - if( b_fullscreen ) val.b_bool = VLC_TRUE; - else val.b_bool = VLC_FALSE; + libvlc_exception_t ex; - i_ret = var_Set( p_vout, "fullscreen", val ); - vlc_object_release( p_vout ); + mediacontrol_exception_init( exception ); + libvlc_exception_init( &ex ); - if( i_ret ) - { - RAISE( mediacontrol_InternalException, "Unexpected error while setting fullscreen value" ); - return; - } - return; + libvlc_set_fullscreen( self->p_media_player, b_fullscreen, &ex ); + HANDLE_LIBVLC_EXCEPTION_VOID( &ex ); }