npapi-vlc | branch: master | Cheng Sun <[email protected]> | Thu Dec 13 15:11:37 2012 +0100| [fe079cd311b6bb7ac6ee03a2f528b6d964bc7a59] | committer: Jean-Baptiste Kempf
Implement a first try for the WindowLess on Linux This is too slow, so far > http://git.videolan.org/gitweb.cgi/npapi-vlc.git/?a=commit;h=fe079cd311b6bb7ac6ee03a2f528b6d964bc7a59 --- npapi/Makefile.am | 4 +++ npapi/vlcplugin.h | 3 ++ npapi/vlcwindowless_linux.cpp | 63 +++++++++++++++++++++++++++++++++++++++++ npapi/vlcwindowless_linux.h | 38 +++++++++++++++++++++++++ 4 files changed, 108 insertions(+) diff --git a/npapi/Makefile.am b/npapi/Makefile.am index cf78967..0efbef0 100644 --- a/npapi/Makefile.am +++ b/npapi/Makefile.am @@ -67,6 +67,10 @@ SOURCES_support = \ vlcplugin_xcb.h endif # !USE_GTK +SOURCES_support += \ + vlcwindowless_linux.cpp \ + vlcwindowless_linux.h + else # Win32 # Under Win32|Mac, Mozilla plugins need to be named NP******.DLL, but under Unix diff --git a/npapi/vlcplugin.h b/npapi/vlcplugin.h index d18b782..351a444 100644 --- a/npapi/vlcplugin.h +++ b/npapi/vlcplugin.h @@ -12,6 +12,9 @@ # include "vlcplugin_xcb.h" typedef VlcPluginXcb VlcPlugin; # endif +# define WINDOWLESS +# include "vlcwindowless_linux.h" + typedef VlcWindowlessLinux VlcWindowless; #elif defined(XP_WIN) # include "vlcplugin_win.h" typedef VlcPluginWin VlcPlugin; diff --git a/npapi/vlcwindowless_linux.cpp b/npapi/vlcwindowless_linux.cpp new file mode 100644 index 0000000..1bea76c --- /dev/null +++ b/npapi/vlcwindowless_linux.cpp @@ -0,0 +1,63 @@ +/***************************************************************************** + * vlcwindowless_linux.cpp: a VLC plugin for Mozilla (Linux windowless) + ***************************************************************************** + * Copyright © 2012 VideoLAN + * $Id$ + * + * Authors: Cheng Sun <[email protected]> + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#include "vlcwindowless_linux.h" + +#include <cstring> +#include <cstdlib> + +VlcWindowlessLinux::VlcWindowlessLinux(NPP instance, NPuint16_t mode) : + VlcWindowlessBase(instance, mode) +{ +} + +bool VlcWindowlessLinux::handle_event(void *event) +{ +#warning FIXME: this is waaayyy too slow! + XEvent *xevent = static_cast<XEvent *>(event); + switch (xevent->type) { + case GraphicsExpose: + XGraphicsExposeEvent *xgeevent = reinterpret_cast<XGraphicsExposeEvent *>(xevent); + Display *display = xgeevent->display; + + int screen = XDefaultScreen(display); + XVisualInfo visual; + XMatchVisualInfo(display, screen, 24, TrueColor, &visual); + XImage *image = XCreateImage(display, visual.visual, 24, ZPixmap, + 0, &m_frame_buf[0], + m_media_width, m_media_height, + DEF_PIXEL_BYTES*8, + m_media_width * DEF_PIXEL_BYTES); + + const NPRect &clip = npwindow.clipRect; + XPutImage(display, xgeevent->drawable, + XDefaultGCOfScreen(XScreenOfDisplay(display, screen)), image, + clip.left - npwindow.x, clip.top - npwindow.y, + clip.left, clip.top, + clip.right - clip.left, clip.bottom - clip.top); + XFree(image); + + return true; + } + return VlcWindowlessBase::handle_event(event); +} diff --git a/npapi/vlcwindowless_linux.h b/npapi/vlcwindowless_linux.h new file mode 100644 index 0000000..0607bba --- /dev/null +++ b/npapi/vlcwindowless_linux.h @@ -0,0 +1,38 @@ +/***************************************************************************** + * vlcwindowless_linux.h: a VLC plugin for Mozilla (Linux windowless) + ***************************************************************************** + * Copyright © 2012 VideoLAN + * $Id$ + * + * Authors: Cheng Sun <[email protected]> + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifndef __VLCWINDOWLESS_LINUX_H__ +#define __VLCWINDOWLESS_LINUX_H__ + +#include "vlcplugin_base.h" + +class VlcWindowlessLinux : public VlcWindowlessBase +{ +public: + VlcWindowlessLinux(NPP instance, NPuint16_t mode); + + bool handle_event(void *event); +}; + + +#endif /* __VLCWINDOWLESS_LINUX_H__ */ _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
