diff --git a/src/include/display-facade.h b/src/include/display-facade.h new file mode 100644 index 000000000..d46afe2ca --- /dev/null +++ b/src/include/display-facade.h @@ -0,0 +1,125 @@ +/* + DISPLAY-FACADE.hpp - accessing a display for outputting frames + + Copyright (C) Lumiera.org + 2009, Hermann Vosseler + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + + +#ifndef GUI_INTERFACE_DISPLAY_H +#define GUI_INTERFACE_DISPLAY_H + + + +struct lumiera_displaySlot_struct + { + unsigned int index_; + }; + +typedef struct lumiera_displaySlot_struct LumieraDisplaySlot; ///< value semantics + + +struct lumiera_displayFrame_struct + { + void* const buff_; + }; +typedef struct lumiera_displayFrame_struct LumieraDisplayFrame; + + + + +#ifdef __cplusplus /* ============== C++ Interface ================= */ + +#include "include/interfaceproxy.hpp" + +#include +#include + + + +namespace lumiera { + + using std::tr1::function; + + +// class ProcessImpl; + + + /****************************************************************** + * Interface for outputting frames to an (already allocated) viewer + * or display. The viewer is addressed by an "slot" handle, which the + * client receives from some other public interface. This reflects + * the fact that is's not up to the client to create an display or + * viewer; rather they are provided by some internal facility and + * the client code is handed out an display handle in the course + * of a larger interaction, like starting a player. This way, + * when the client code actually is about to produce output, + * he can allocate the slot and obtain a Displayer (functor) + * for pushing the frames out. (Users of the C Language Interface + * have to carry out these steps manually and also have to care + * for cleaning up and deallocating the slot). + * + * @note This is a first draft version of a rather important + * interface. The current version as of 1/2009 just serves + * a mockup player implementation. You can expect this interface + * to change considerably if we get at devising the real player. + * @see dummy-player-facade.hpp + * @see gui::PlaybackController + * + */ + class Display + { + public: + + + /** + * Functor for pushing frames to the display + */ + typedef function Displayer; + + + /** allocate an already existing display/viewer for output + * @return a functor representing the frame sink */ + virtual Displayer getHandle(LumieraDisplaySlot) =0; + + + virtual ~DummyPlayer(); + }; + + + + +} // namespace lumiera + + + +extern "C" { +#endif /* =========================== CL Interface ===================== */ + + +#include "common/interface.h" + +LUMIERA_INTERFACE_DECLARE (lumieraorg_Display, 0 + , LUMIERA_INTERFACE_SLOT (void, put,(LumieraDisplaySlot, LumieraDisplayFrame, bool)) +); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/include/dummy-player-facade.h b/src/include/dummy-player-facade.h index c2750e1c8..8bea6568a 100644 --- a/src/include/dummy-player-facade.h +++ b/src/include/dummy-player-facade.h @@ -24,6 +24,7 @@ #ifndef PROC_INTERFACE_DUMMYPLAYER_H #define PROC_INTERFACE_DUMMYPLAYER_H +#include "include/display-facade.h" struct lumiera_playprocess_struct { };