[vlc-devel] commit: Updated maemo vout_window provider to the new API. (Laurent Aimar )
git version control
git at videolan.org
Sat Aug 1 12:08:12 CEST 2009
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Fri Jul 31 21:24:33 2009 +0200| [fcab73f63945216f09cb704b74df98852b74fe0a] | committer: Laurent Aimar
Updated maemo vout_window provider to the new API.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fcab73f63945216f09cb704b74df98852b74fe0a
---
modules/gui/maemo/maemo.c | 74 +++++++++++++++++++++++++++-----------------
1 files changed, 45 insertions(+), 29 deletions(-)
diff --git a/modules/gui/maemo/maemo.c b/modules/gui/maemo/maemo.c
index 08bebcc..9500c56 100644
--- a/modules/gui/maemo/maemo.c
+++ b/modules/gui/maemo/maemo.c
@@ -30,7 +30,7 @@
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_interface.h>
-#include <vlc_window.h>
+#include <vlc_vout_window.h>
#include <hildon/hildon-program.h>
#include <hildon/hildon-banner.h>
@@ -53,7 +53,7 @@ static gboolean should_die ( gpointer );
static int OpenWindow ( vlc_object_t * );
static void CloseWindow ( vlc_object_t * );
static int ControlWindow ( vout_window_t *, int, va_list );
-static void* request_video ( intf_thread_t *, vout_thread_t * );
+static uint32_t request_video ( intf_thread_t *, vout_thread_t * );
static void release_video ( intf_thread_t * );
static gboolean video_widget_ready ( gpointer data );
@@ -70,7 +70,7 @@ vlc_module_begin();
add_shortcut( "maemo" );
add_submodule();
- set_capability( "xwindow", 50 );
+ set_capability( "vout window", 50 );
set_callbacks( OpenWindow, CloseWindow );
vlc_module_end();
@@ -265,60 +265,74 @@ static int OpenWindow (vlc_object_t *obj)
{
vout_window_t *wnd = (vout_window_t *)obj;
- /* TODO: should probably be in the libvlc core instead: */
- if (!config_GetInt (obj, "embedded-video"))
+ if (wnd->cfg->type != VOUT_WINDOW_TYPE_XWINDOW ||
+ wnd->cfg->is_standalone)
return VLC_EGENERIC;
- intf_thread_t *intf = (intf_thread_t *)
- vlc_object_find_name (obj, "maemo", FIND_ANYWHERE);
+ intf_thread_t *intf = (intf_thread_t*)vlc_object_find_name (obj, "maemo", FIND_ANYWHERE);
if (intf == NULL)
{
msg_Err( obj, "Maemo interface not found" );
return VLC_EGENERIC; /* Maemo not in use */
}
- wnd->handle.xid = request_video( intf, wnd->vout );
- msg_Dbg( intf, "Using handle %"PRIu32, wnd->handle.xid );
+ /* FIXME it should NOT be needed */
+ vout_thread_t *vout = vlc_object_find (obj, VLC_OBJECT_VOUT, FIND_PARENT);
- wnd->control = ControlWindow;
- wnd->p_private = intf;
+ wnd->handle.xid = request_video( intf, vout );
+ if (!wnd->handle.xid)
+ {
+ vlc_object_release( vout );
+ return VLC_EGENERIC;
+ }
+ vlc_object_release( vout );
- // Signaling that the window is not at the requested sizeof
- int i_width, i_height, i_x_top, i_y_top, i_x, i_y;
- gdk_drawable_get_size( GDK_DRAWABLE( intf->p_sys->p_video_window->window ),
- &i_width, &i_height );
- gdk_window_get_position( GTK_WIDGET(intf->p_sys->p_main_window)->window,
- &i_x_top, &i_y_top );
- gdk_window_get_position( intf->p_sys->p_video_window->window, &i_x, &i_y );
+ msg_Dbg( intf, "Using handle %"PRIu32, wnd->handle.xid );
- wnd->width = i_width;
- wnd->height = i_height;
- wnd->pos_x = i_x_top + i_x;
- wnd->pos_y = i_y_top + i_y;
+ wnd->control = ControlWindow;
+ wnd->sys = (vout_window_sys_t*)intf;
return VLC_SUCCESS;
}
static int ControlWindow (vout_window_t *wnd, int query, va_list args)
{
- (void)wnd; (void)query; (void)args;
- return VLC_EGENERIC;
+ intf_thread_t *intf = (intf_thread_t *)wnd->sys;
+
+ switch( query )
+ {
+ case VOUT_WINDOW_SET_SIZE:
+ {
+ int i_width = (int)va_arg( args, int );
+ int i_height = (int)va_arg( args, int );
+
+ int i_current_w, i_current_h;
+ gdk_drawable_get_size( GDK_DRAWABLE( intf->p_sys->p_video_window->window ),
+ &i_current_w, &i_current_h );
+ if( i_width != i_current_w || i_height != i_current_h )
+ return VLC_EGENERIC;
+ return VLC_SUCCESS;
+ }
+ default:
+ return VLC_EGENERIC;
+ }
}
static void CloseWindow (vlc_object_t *obj)
{
- intf_thread_t *intf = (intf_thread_t *)obj->p_private;
+ vout_window_t *wnd = (vout_window_t *)obj;
+ intf_thread_t *intf = (intf_thread_t *)wnd->sys;
release_video( intf );
vlc_object_release (intf);
}
-static void *request_video( intf_thread_t *p_intf, vout_thread_t *p_nvout )
+static uint32_t request_video( intf_thread_t *p_intf, vout_thread_t *p_nvout )
{
if( p_intf->p_sys->p_vout )
{
msg_Dbg( p_intf, "Embedded video already in use" );
- return NULL;
+ return 0;
}
vlc_mutex_lock( &p_intf->p_sys->p_video_mutex );
@@ -331,13 +345,15 @@ static void *request_video( intf_thread_t *p_intf, vout_thread_t *p_nvout )
vlc_cleanup_run();
- p_intf->p_sys->p_vout = p_nvout;
- return ( void * )GDK_WINDOW_XID( p_intf->p_sys->p_video_window->window );
+ p_intf->p_sys->p_vout = vlc_object_hold( p_nvout );
+ return GDK_WINDOW_XID( p_intf->p_sys->p_video_window->window );
}
static void release_video( intf_thread_t *p_intf )
{
msg_Dbg( p_intf, "Releasing embedded video" );
+
+ vlc_object_release( p_intf->p_sys->p_vout );
p_intf->p_sys->p_vout = NULL;
}
More information about the vlc-devel
mailing list