|
Valkka
0.17.0
OpenSource Video Management
|
This class does a lot of things: More...
#include <openglthread.h>


Public Member Functions | |
| OpenGLThread (const char *name, OpenGLFrameFifoContext fifo_ctx=OpenGLFrameFifoContext(), unsigned msbuftime=DEFAULT_OPENGLTHREAD_BUFFERING_TIME, const char *x_connection="") | |
| Default constructor. More... | |
| virtual | ~OpenGLThread () |
| Virtual destructor // <pyapi> | |
| unsigned | getSwapInterval (GLXDrawable drawable=0) |
| void | setSwapInterval (unsigned i, GLXDrawable drawable=0) |
| bool | hasRenderGroup (Window window_id) |
| Check if we have render groups. | |
| RenderGroup & | getRenderGroup (Window window_id) |
| Returns a reference to RenderGroup in OpenGLThread::render_groups .. returns null if not found. | |
| bool | newRenderGroup (Window window_id) |
| Creates a RenderGroup and inserts it into OpenGLThread::render_groups. | |
| bool | delRenderGroup (Window window_id) |
| Remove RenderGroup from OpenGLThread::render_groups. | |
| void | newRenderContext (SlotNumber slot, Window window_id, int id, unsigned int z) |
| Creates a new render context. | |
| bool | delRenderContext (int id) |
| Runs through OpenGLThread::render_groups and removes indicated RenderContext. | |
| bool | contextAddRectangle (int id, float left, float right, float top, float bottom) |
| bool | contextClearObjects (int id) |
| void | loadYUVFrame (SlotNumber n_slot, YUVFrame *yuvframe) |
| Load PBO to texture in OpenGLThread::slots_[n_slot]. | |
| void | render (SlotNumber n_slot) |
| Render all RenderGroup(s) depending on slot n_slot. | |
| void | checkSlots (long int mstime) |
| Display * | getDisplayId () |
| const GLXContext & | getGlc () |
| const Window & | getRootId () |
| bool | slotUsed (SlotNumber i) |
| void | activateSlot (SlotNumber i, YUVFrame *yuvframe) |
| void | activateSlotIf (SlotNumber i, YUVFrame *yuvframe) |
| bool | manageSlotTimer (SlotNumber i, long int mstime) |
| void | debugOn () |
| void | debugOff () |
| void | run () |
| Main execution loop is defined here. | |
| void | preRun () |
| Called before entering the main execution loop, but after creating the thread. Calls OpenGLThread::createShaders and OpenGLThread::reserveFrames. | |
| void | postRun () |
| Called after the main execution loop exits, but before joining the thread. | |
| void | handleSignal (OpenGLSignalContext &signal_ctx) |
| void | handleSignals () |
| From signals to methods. | |
| void | sendSignal (OpenGLSignalContext signal_ctx) |
| Send a signal to the thread. | |
| void | sendSignalAndWait (OpenGLSignalContext signal_ctx) |
| Send a signal to the thread and wait all signals to be executed. | |
| void | initGLX () |
| Connect to X11 server, init GLX direct rendering. | |
| void | closeGLX () |
| Close connection to X11. | |
| void | loadExtensions () |
| Load OpenGL extensions using GLEW. More... | |
| void | VSyncOff () |
| Turn off vsync for swapbuffers. | |
| int | hasCompositor (int screen) |
| Detect if a compositor is running. | |
| void | makeShaders () |
| Compile shaders. | |
| void | delShaders () |
| Delete shader. | |
| void | reserveFrames () |
| Attaches YUVPBO instances with direct GPU memory access to Frame::yuvpbo. | |
| void | releaseFrames () |
| Deletes YUVPBO by calling Frame::reset. | |
| void | reportSlots () |
| void | reportRenderGroups () |
| void | reportRenderList () |
| void | dumpYUVStacks () |
| State of the YUV Frame stack. | |
| void | YUVdiagnosis () |
| Brief resumen of the state of the YUV Frame stack. | |
| void | dumpInFifo () |
| Incoming fifo: here we have all kinds of frames, including YUVFrame(s) | |
| void | recycle (Frame *f) |
| Recycle a frame back to OpenGLFrameFifo. | |
| Window | createWindow (bool map=true, bool show=false) |
| Creates a new X window (for debugging/testing only) // <pyapi> | |
| void | makeCurrent (const Window window_id) |
| Set current X windox // <pyapi> | |
| unsigned | getVsyncAtStartup () |
| What vsync was at startup time? // <pyapi> | |
| void | reConfigWindow (Window window_id) |
| Window | getChildWindow (Window parent_id) |
| FifoFrameFilter & | getFrameFilter () |
| API method: get filter for passing frames to this thread // <pyapi> | |
| void | setStaticTexFile (const char *fname) |
| API method: set a file where the static texture (yuv image that's shown when no stream is received) is read from // <pyapi> | |
| void | requestStopCall () |
| API call: Like Thread::stopCall() but does not block. | |
| void | infoCall () |
| API call: reports render groups and lists. | |
| bool | newRenderGroupCall (Window window_id) |
| API call: create a rendering group. More... | |
| bool | delRenderGroupCall (Window window_id) |
| API call: delete a rendering group. More... | |
| int | newRenderContextCall (SlotNumber slot, Window window_id, unsigned int z) |
| API call: create a new rendering context, i.e. More... | |
| bool | delRenderContextCall (int id) |
| API call: delete a rendering context. More... | |
| void | addRectangleCall (int id, float left, float right, float top, float bottom) |
| API call: add a rectangle that is drawn on the texture. More... | |
| void | clearObjectsCall (int id) |
| API call: clear all objects drawn on the texture. More... | |
Public Member Functions inherited from Thread | |
| Thread (const char *name) | |
| Default constructor. More... | |
| ~Thread () | |
| Destructor:not virtual. More... | |
| virtual void | preJoin () |
| Called before the thread is joined. | |
| virtual void | postJoin () |
| Called after the thread has been joined. | |
| virtual void | sendSignal (SignalContext signal_ctx) |
| Send a signal to the thread. | |
| virtual void | sendSignalAndWait (SignalContext signal_ctx) |
| Send a signal to the thread and wait for all signals to be executed. | |
| void | setAffinity (int i) |
| API method for setting the thread affinity. More... | |
| void | startCall () |
| API method: starts the thread. | |
| virtual void | stopCall () |
| API method: stops the thread. More... | |
| virtual void | waitStopCall () |
| API method: waits until the thread is joined. More... | |
Public Attributes | |
| unsigned | swap_flavor |
| unsigned | swap_interval_at_startup |
| The value of swap interval when this thread was started. | |
| std::deque< OpenGLSignalContext > | signal_fifo |
| Redefinition of signal fifo. Signal fifo of Thread::SignalContext(s) is now hidden. | |
Protected Member Functions | |
| void | dumpPresFifo () |
| Dump the presentation queue. | |
| void | diagnosis () |
| Dump presentation queue size and diagnosis output for infifo (YUVdiagnosis) | |
| void | resetCallTime () |
| void | reportCallTime (unsigned i) |
| How much time since handleFifo exited. | |
| long unsigned | insertFifo (Frame *f) |
| Sorted insert: insert a timestamped frame into the fifo. More... | |
| void | readStaticTex () |
| Reads a static texture that's shown on a window when no stream is received. Uses OpenGLThread::static_texture_file. | |
| long unsigned | handleFifo () |
| Runs through the fifo, presents / scraps frames, returns timeout until next frame presentation. More... | |
| void | delRenderContexes () |
Protected Member Functions inherited from Thread | |
| void | mainRun () |
| Does the preRun, run, postRun sequence. | |
| void | closeThread () |
| Sends exit signal to the thread, calls join. This method blocks until thread has exited. Set Thread::has_thread to false. | |
Protected Attributes | |
| OpenGLFrameFifo * | infifo |
| This thread reads from this communication fifo. | |
| FifoFrameFilter | infilter |
| A FrameFilter for writing incoming frames. | |
| std::string | x_connection |
| X-server connection string (i.e. ":0.0", ":0.1", etc. | |
| YUVShader * | yuv_shader |
| Initialized by OpenGLThread::makeShaders. | |
| RGBShader * | rgb_shader |
| Initialized by OpenGLThread::makeShaders. | |
| YUVTEX * | statictex |
| Texture to be shown when there is no stream. | |
| std::string | static_texture_file |
| Name of the file where statictex is. | |
| Display * | display_id |
| bool | doublebuffer_flag |
| GLXContext | glc |
| int * | att |
| Window | root_id |
| XVisualInfo * | vi |
| GLXFBConfig * | fbConfigs |
| Colormap | cmap |
| YUVFrame * | dummyframe |
| A PBO membuf which we reserve from the GPU as the first membuf, but is never used. | |
| std::vector< SlotContext * > | slots_ |
| index => SlotContext mapping (based on vector indices) // WARNING: not they're pointers .. no copy_ctor ambiguity with std::vector | |
| std::map< Window, RenderGroup > | render_groups |
| window_id => RenderGroup mapping. RenderGroup objects are warehoused here. | |
| std::vector< std::list< RenderGroup * > > | render_lists |
| Each vector element corresponds to a slot. Each list inside a vector element has pointers to RenderGroups to be rendered. | |
| std::map< int, RenderContext * > | render_contexes |
| Shortcut to render contexes. | |
| unsigned | msbuftime |
| Buffering time in milliseconds. | |
| unsigned | future_ms_tolerance |
| If frame is this much in the future, it will be discarded. See OpenGLThread::OpenGLThread for its value (some multiple of OpenGLThread::msbuftime) | |
| std::list< Frame * > | presfifo |
| Double-linked list of buffered frames about to be presented. | |
| long int | calltime |
| long int | callswaptime |
| Debugging: when handleFifo was last called? | |
| bool | debug |
Protected Attributes inherited from Thread | |
| std::string | name |
| Name of the thread. | |
| bool | has_thread |
| true if thread has been started | |
| bool | stop_requested |
| bool | thread_joined |
| std::mutex | start_mutex |
| Mutex protecting start_condition. | |
| std::condition_variable | start_condition |
| Notified when the thread has been started. | |
| std::mutex | mutex |
| Mutex protecting the condition variable and signal queue. | |
| std::condition_variable | condition |
| Condition variable for the signal queue (triggered when all signals processed). Not necessarily used by all subclasses. | |
| std::mutex | loop_mutex |
| Protects thread's main execution loop (if necessary) | |
| std::deque< SignalContext > | signal_fifo |
| Signal queue (fifo). Redefine in child classes. | |
| bool | loop |
| Use this boolean to control if the main loop in Thread:run should exit. | |
| int | core_id |
| pthread_attr_t | thread_attr |
| Thread attributes, pthread_* way. | |
| cpu_set_t | cpuset |
| pthread_t | internal_thread |
Private Attributes | |
| PFNGLXSWAPINTERVALEXTPROC | pglXSwapIntervalEXT |
| PFNGLXGETSWAPINTERVALMESAPROC | pglXGetSwapIntervalMESA |
| PFNGLXSWAPINTERVALMESAPROC | pglXSwapIntervalMESA |
Additional Inherited Members | |
Static Protected Member Functions inherited from Thread | |
| static void * | mainRun_ (void *p) |
This class does a lot of things:
See also: Code walkthrough: rendering
| OpenGLThread::OpenGLThread | ( | const char * | name, |
| OpenGLFrameFifoContext | fifo_ctx = OpenGLFrameFifoContext(), |
||
| unsigned | msbuftime = DEFAULT_OPENGLTHREAD_BUFFERING_TIME, |
||
| const char * | x_connection = "" |
||
| ) |
Default constructor.
| name | A name indentifying this thread |
| fifo_ctx | Parameters for the internal OpenGLFrameFifo |
| msbuftime | Jitter buffer size in milliseconds (default=100 ms) |
| void OpenGLThread::addRectangleCall | ( | int | id, |
| float | left, | ||
| float | right, | ||
| float | top, | ||
| float | bottom | ||
| ) |
API call: add a rectangle that is drawn on the texture.
| id | Rendering context id |
| left | left, right, top, bottom define the rectangle in relative (0..1) coordinates |

| void OpenGLThread::clearObjectsCall | ( | int | id | ) |
API call: clear all objects drawn on the texture.
| id | Rendering context id |

| bool OpenGLThread::delRenderContextCall | ( | int | id | ) |
API call: delete a rendering context.
| id | Rendering context id |

| bool OpenGLThread::delRenderGroupCall | ( | Window | window_id | ) |
API call: delete a rendering group.
| window_id | X window id |

|
protected |
Runs through the fifo, presents / scraps frames, returns timeout until next frame presentation.
See also Presention timing and playing

|
protected |
Sorted insert: insert a timestamped frame into the fifo.

| void OpenGLThread::loadExtensions | ( | ) |
Load OpenGL extensions using GLEW.

| int OpenGLThread::newRenderContextCall | ( | SlotNumber | slot, |
| Window | window_id, | ||
| unsigned int | z | ||
| ) |
API call: create a new rendering context, i.e.
a new stream-to-render mapping
| slot | Slot number identifying the stream |
| window_id | X window id (corresponding to a created rendering group) |
| z | Stacking order of the rendered bitmap |
returns a unique integer id presenting the rendering context. return 0 if the call failed.

| bool OpenGLThread::newRenderGroupCall | ( | Window | window_id | ) |
API call: create a rendering group.
| window_id | X window id |
1.8.13