xine-lib 1.2.13-20230125hg15249
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
video_out_opengl.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <errno.h>
#include <ctype.h>
#include <pthread.h>
#include <GL/gl.h>
#include "myglext.h"
#include <GL/glx.h>
#include <dlfcn.h>
#include "xine.h"
#include <xine/video_out.h>
#include <xine/xine_internal.h>
#include "yuv2rgb.h"
#include <xine/xineutils.h>
#include "x11osd.h"
#include "color_matrix.c"

Data Structures

struct  opengl_frame_t
 
struct  opengl_driver_t
 
struct  opengl_class_t
 
struct  opengl_render_t
 

Macros

#define LOG_MODULE   "video_out_opengl"
 
#define BYTES_PER_PIXEL   4
 
#define NUM_FRAMES_BACKLOG   4 /* Allow thread some time to render frames */
 
#define SECONDS_PER_CYCLE   60 /* Animation parameters */
 
#define CYCLE_FACTOR1   3
 
#define CYCLE_FACTOR2   5
 
#define GLchar   MYGLChar
 
#define GLintptr   MYGLintptr
 
#define GLsizeiptr   MYGLsizeiptr
 
#define GLintptrARB   MYGLintptrARB
 
#define GLsizeiptrARB   MYGLsizeiptrARB
 
#define GLcharARB   MYGLcharARB
 
#define GLhandleARB   MYGLhandleARB
 
#define GLhalfARB   MYGLhalfARB
 
#define GLhalfNV   MYGLhalfNV
 
#define CHECKERR(a)   ((void)0)
 
#define RGB_TEXTURE_FORMAT   GL_BGRA
 
#define YUV_FORMAT   MODE_32_RGB
 
#define YUV_SWAP_MODE   0
 
#define MY_2PI   (M_PI * 2)
 
#define CM_LUT
 
#define CM_DRIVER_T   opengl_driver_t
 
#define CYL_TESSELATION   128
 
#define CYL_WIDTH   2.5
 
#define CYL_HEIGHT   3.0
 
#define DIST_FACTOR   16.568542 /* 2 * (sqrt(2)-1) * 20 */
 
#define gluPerspective   myGluPerspective
 
#define TOR_TESSELATION_B   128
 
#define TOR_TESSELATION_S   64
 
#define TOR_RADIUS_B   2.5
 
#define TOR_RADIUS_S   1.0
 

Typedefs

typedef void *(* thread_run_t) (void *)
 

Enumerations

enum  render_e {
  RENDER_NONE =0 , RENDER_DRAW , RENDER_CLEAN , RENDER_SETUP ,
  RENDER_CREATE , RENDER_VISUAL , RENDER_RELEASE , RENDER_EXIT
}
 

Functions

static void render_tex2d (opengl_driver_t *this, opengl_frame_t *frame)
 
static void render_tex2dtiled (opengl_driver_t *this, opengl_frame_t *frame)
 
static void render_draw (opengl_driver_t *this, opengl_frame_t *frame)
 
static void render_cyl (opengl_driver_t *this, opengl_frame_t *frame)
 
static void render_env_tor (opengl_driver_t *this, opengl_frame_t *frame)
 
static int render_help_image_tex (opengl_driver_t *this, int new_w, int new_h, GLint glformat, GLint texformat)
 
static int render_help_image_tiledtex (opengl_driver_t *this, int new_w, int new_h, GLint glformat, GLint texformat)
 
static int render_image_nop (opengl_driver_t *this, opengl_frame_t *frame)
 
static int render_image_tex (opengl_driver_t *this, opengl_frame_t *frame)
 
static int render_image_tiledtex (opengl_driver_t *this, opengl_frame_t *frame)
 
static int render_image_fp_yuv (opengl_driver_t *this, opengl_frame_t *frame)
 
static int render_image_envtex (opengl_driver_t *this, opengl_frame_t *frame)
 
static int render_help_verify_ext (opengl_driver_t *this, const char *ext)
 
static void * getdladdr (const GLubyte *_funcName)
 
static void * getaddr (const char *funcName)
 
static void render_help_check_exts (opengl_driver_t *this)
 
static int render_help_setup_tex (opengl_driver_t *this)
 
static void myGluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
 
static int render_setup_2d (opengl_driver_t *this)
 
static int render_setup_tex2d (opengl_driver_t *this)
 
static int render_setup_3d (opengl_driver_t *this)
 
static int render_setup_cyl (opengl_driver_t *this)
 
static int render_setup_torus (opengl_driver_t *this)
 
static int render_setup_fp_yuv (opengl_driver_t *this)
 
static void render_gfx_vinfo (opengl_driver_t *this)
 
static void * render_run (opengl_driver_t *this)
 
static uint32_t opengl_get_capabilities (vo_driver_t *this_gen)
 
static void opengl_frame_proc_slice (vo_frame_t *vo_img, uint8_t **src)
 
static void opengl_frame_field (vo_frame_t *vo_img, int which_field)
 
static void opengl_frame_dispose (vo_frame_t *vo_img)
 
static vo_frame_topengl_alloc_frame (vo_driver_t *this_gen)
 
static void opengl_compute_ideal_size (opengl_driver_t *this)
 
static void opengl_compute_rgb_size (opengl_driver_t *this)
 
static void opengl_update_frame_format (vo_driver_t *this_gen, vo_frame_t *frame_gen, uint32_t width, uint32_t height, double ratio, int format, int flags)
 
static void opengl_overlay_clut_yuv2rgb (opengl_driver_t *this, vo_overlay_t *overlay, opengl_frame_t *frame)
 
static void opengl_overlay_begin (vo_driver_t *this_gen, vo_frame_t *frame_gen, int changed)
 
static void opengl_overlay_end (vo_driver_t *this_gen, vo_frame_t *vo_img)
 
static void opengl_overlay_blend (vo_driver_t *this_gen, vo_frame_t *frame_gen, vo_overlay_t *overlay)
 
static int opengl_redraw_needed (vo_driver_t *this_gen)
 
static void opengl_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen)
 
static int opengl_get_property (vo_driver_t *this_gen, int property)
 
static int opengl_set_property (vo_driver_t *this_gen, int property, int value)
 
static void opengl_get_property_min_max (vo_driver_t *this_gen, int property, int *min, int *max)
 
static int opengl_gui_data_exchange (vo_driver_t *this_gen, int data_type, void *data)
 
static void opengl_dispose_internal (opengl_driver_t *this, int thread_running)
 
static void opengl_dispose (vo_driver_t *this_gen)
 
static void opengl_cb_render_fun (void *this_gen, xine_cfg_entry_t *entry)
 
static void opengl_cb_default (void *val_gen, xine_cfg_entry_t *entry)
 
static vo_driver_topengl_open_plugin (video_driver_class_t *class_gen, const void *visual_gen)
 
static int opengl_verify_direct (x11_visual_t *vis)
 
static void * opengl_init_class (xine_t *xine, const void *visual_gen)
 

Variables

static const int32_t Inverse_Table_6_9 [8][4]
 
static const opengl_render_t opengl_rb []
 
static const vo_info_t vo_info_opengl
 
const plugin_info_t xine_plugin_info[] EXPORTED
 

Macro Definition Documentation

◆ BYTES_PER_PIXEL

#define BYTES_PER_PIXEL   4

◆ CHECKERR

#define CHECKERR ( a)    ((void)0)

◆ CM_DRIVER_T

#define CM_DRIVER_T   opengl_driver_t

◆ CM_LUT

#define CM_LUT

◆ CYCLE_FACTOR1

#define CYCLE_FACTOR1   3

Referenced by render_cyl(), and render_env_tor().

◆ CYCLE_FACTOR2

#define CYCLE_FACTOR2   5

Referenced by render_cyl(), and render_env_tor().

◆ CYL_HEIGHT

#define CYL_HEIGHT   3.0

Referenced by render_cyl().

◆ CYL_TESSELATION

#define CYL_TESSELATION   128

Referenced by render_cyl().

◆ CYL_WIDTH

#define CYL_WIDTH   2.5

Referenced by render_cyl().

◆ DIST_FACTOR

#define DIST_FACTOR   16.568542 /* 2 * (sqrt(2)-1) * 20 */

Referenced by render_env_tor().

◆ GLchar

#define GLchar   MYGLChar

◆ GLcharARB

#define GLcharARB   MYGLcharARB

◆ GLhalfARB

#define GLhalfARB   MYGLhalfARB

◆ GLhalfNV

#define GLhalfNV   MYGLhalfNV

◆ GLhandleARB

#define GLhandleARB   MYGLhandleARB

◆ GLintptr

#define GLintptr   MYGLintptr

◆ GLintptrARB

#define GLintptrARB   MYGLintptrARB

◆ GLsizeiptr

#define GLsizeiptr   MYGLsizeiptr

◆ GLsizeiptrARB

#define GLsizeiptrARB   MYGLsizeiptrARB

◆ gluPerspective

#define gluPerspective   myGluPerspective

Referenced by render_setup_3d().

◆ LOG_MODULE

#define LOG_MODULE   "video_out_opengl"

Referenced by opengl_open_plugin().

◆ MY_2PI

#define MY_2PI   (M_PI * 2)

Referenced by render_cyl(), and render_setup_torus().

◆ NUM_FRAMES_BACKLOG

#define NUM_FRAMES_BACKLOG   4 /* Allow thread some time to render frames */

◆ RGB_TEXTURE_FORMAT

#define RGB_TEXTURE_FORMAT   GL_BGRA

◆ SECONDS_PER_CYCLE

#define SECONDS_PER_CYCLE   60 /* Animation parameters */

Referenced by render_cyl(), and render_env_tor().

◆ TOR_RADIUS_B

#define TOR_RADIUS_B   2.5

Referenced by render_setup_torus().

◆ TOR_RADIUS_S

#define TOR_RADIUS_S   1.0

Referenced by render_setup_torus().

◆ TOR_TESSELATION_B

#define TOR_TESSELATION_B   128

Referenced by render_setup_torus().

◆ TOR_TESSELATION_S

#define TOR_TESSELATION_S   64

Referenced by render_setup_torus().

◆ YUV_FORMAT

#define YUV_FORMAT   MODE_32_RGB

Referenced by opengl_open_plugin().

◆ YUV_SWAP_MODE

#define YUV_SWAP_MODE   0

Referenced by opengl_open_plugin().

Typedef Documentation

◆ thread_run_t

typedef void *(* thread_run_t) (void *)

Enumeration Type Documentation

◆ render_e

enum render_e
Enumerator
RENDER_NONE 
RENDER_DRAW 
RENDER_CLEAN 
RENDER_SETUP 
RENDER_CREATE 
RENDER_VISUAL 
RENDER_RELEASE 
RENDER_EXIT 

Function Documentation

◆ getaddr()

static void * getaddr ( const char * funcName)
static

References getdladdr().

Referenced by render_help_check_exts().

◆ getdladdr()

static void * getdladdr ( const GLubyte * _funcName)
static

References _x_asprintf(), and NULL.

Referenced by getaddr().

◆ myGluPerspective()

static void myGluPerspective ( GLdouble fovy,
GLdouble aspect,
GLdouble zNear,
GLdouble zFar )
static

◆ opengl_alloc_frame()

static vo_frame_t * opengl_alloc_frame ( vo_driver_t * this_gen)
static

◆ opengl_cb_default()

static void opengl_cb_default ( void * val_gen,
xine_cfg_entry_t * entry )
static

◆ opengl_cb_render_fun()

static void opengl_cb_render_fun ( void * this_gen,
xine_cfg_entry_t * entry )
static

◆ opengl_compute_ideal_size()

static void opengl_compute_ideal_size ( opengl_driver_t * this)
static

◆ opengl_compute_rgb_size()

static void opengl_compute_rgb_size ( opengl_driver_t * this)
static

◆ opengl_display_frame()

static void opengl_display_frame ( vo_driver_t * this_gen,
vo_frame_t * frame_gen )
static

◆ opengl_dispose()

static void opengl_dispose ( vo_driver_t * this_gen)
static

References opengl_dispose_internal().

Referenced by opengl_open_plugin().

◆ opengl_dispose_internal()

static void opengl_dispose_internal ( opengl_driver_t * this,
int thread_running )
static

◆ opengl_frame_dispose()

static void opengl_frame_dispose ( vo_frame_t * vo_img)
static

◆ opengl_frame_field()

static void opengl_frame_field ( vo_frame_t * vo_img,
int which_field )
static

◆ opengl_frame_proc_slice()

static void opengl_frame_proc_slice ( vo_frame_t * vo_img,
uint8_t ** src )
static

◆ opengl_get_capabilities()

static uint32_t opengl_get_capabilities ( vo_driver_t * this_gen)
static

◆ opengl_get_property()

static int opengl_get_property ( vo_driver_t * this_gen,
int property )
static

◆ opengl_get_property_min_max()

static void opengl_get_property_min_max ( vo_driver_t * this_gen,
int property,
int * min,
int * max )
static

◆ opengl_gui_data_exchange()

static int opengl_gui_data_exchange ( vo_driver_t * this_gen,
int data_type,
void * data )
static

◆ opengl_init_class()

static void * opengl_init_class ( xine_t * xine,
const void * visual_gen )
static

◆ opengl_open_plugin()

static vo_driver_t * opengl_open_plugin ( video_driver_class_t * class_gen,
const void * visual_gen )
static

◆ opengl_overlay_begin()

static void opengl_overlay_begin ( vo_driver_t * this_gen,
vo_frame_t * frame_gen,
int changed )
static

◆ opengl_overlay_blend()

static void opengl_overlay_blend ( vo_driver_t * this_gen,
vo_frame_t * frame_gen,
vo_overlay_t * overlay )
static

◆ opengl_overlay_clut_yuv2rgb()

static void opengl_overlay_clut_yuv2rgb ( opengl_driver_t * this,
vo_overlay_t * overlay,
opengl_frame_t * frame )
static

◆ opengl_overlay_end()

static void opengl_overlay_end ( vo_driver_t * this_gen,
vo_frame_t * vo_img )
static

References x11osd_expose().

Referenced by opengl_open_plugin().

◆ opengl_redraw_needed()

static int opengl_redraw_needed ( vo_driver_t * this_gen)
static

◆ opengl_set_property()

static int opengl_set_property ( vo_driver_t * this_gen,
int property,
int value )
static

◆ opengl_update_frame_format()

static void opengl_update_frame_format ( vo_driver_t * this_gen,
vo_frame_t * frame_gen,
uint32_t width,
uint32_t height,
double ratio,
int format,
int flags )
static

◆ opengl_verify_direct()

static int opengl_verify_direct ( x11_visual_t * vis)
static

◆ render_cyl()

static void render_cyl ( opengl_driver_t * this,
opengl_frame_t * frame )
static

◆ render_draw()

static void render_draw ( opengl_driver_t * this,
opengl_frame_t * frame )
static

◆ render_env_tor()

static void render_env_tor ( opengl_driver_t * this,
opengl_frame_t * frame )
static

◆ render_gfx_vinfo()

static void render_gfx_vinfo ( opengl_driver_t * this)
static

References CHECKERR.

Referenced by render_run().

◆ render_help_check_exts()

static void render_help_check_exts ( opengl_driver_t * this)
static

◆ render_help_image_tex()

static int render_help_image_tex ( opengl_driver_t * this,
int new_w,
int new_h,
GLint glformat,
GLint texformat )
static

References lprintf.

Referenced by render_image_fp_yuv(), and render_image_tex().

◆ render_help_image_tiledtex()

static int render_help_image_tiledtex ( opengl_driver_t * this,
int new_w,
int new_h,
GLint glformat,
GLint texformat )
static

References lprintf.

Referenced by render_image_tiledtex().

◆ render_help_setup_tex()

static int render_help_setup_tex ( opengl_driver_t * this)
static

◆ render_help_verify_ext()

static int render_help_verify_ext ( opengl_driver_t * this,
const char * ext )
static

References XINE_VERBOSITY_LOG, and xprintf.

Referenced by render_help_check_exts().

◆ render_image_envtex()

static int render_image_envtex ( opengl_driver_t * this,
opengl_frame_t * frame )
static

◆ render_image_fp_yuv()

static int render_image_fp_yuv ( opengl_driver_t * this,
opengl_frame_t * frame )
static

◆ render_image_nop()

static int render_image_nop ( opengl_driver_t * this,
opengl_frame_t * frame )
static

◆ render_image_tex()

static int render_image_tex ( opengl_driver_t * this,
opengl_frame_t * frame )
static

◆ render_image_tiledtex()

static int render_image_tiledtex ( opengl_driver_t * this,
opengl_frame_t * frame )
static

◆ render_run()

static void * render_run ( opengl_driver_t * this)
static

◆ render_setup_2d()

static int render_setup_2d ( opengl_driver_t * this)
static

◆ render_setup_3d()

static int render_setup_3d ( opengl_driver_t * this)
static

◆ render_setup_cyl()

static int render_setup_cyl ( opengl_driver_t * this)
static

◆ render_setup_fp_yuv()

static int render_setup_fp_yuv ( opengl_driver_t * this)
static

◆ render_setup_tex2d()

static int render_setup_tex2d ( opengl_driver_t * this)
static

◆ render_setup_torus()

static int render_setup_torus ( opengl_driver_t * this)
static

◆ render_tex2d()

static void render_tex2d ( opengl_driver_t * this,
opengl_frame_t * frame )
static

◆ render_tex2dtiled()

static void render_tex2dtiled ( opengl_driver_t * this,
opengl_frame_t * frame )
static

Variable Documentation

◆ EXPORTED

const plugin_info_t xine_plugin_info [] EXPORTED
Initial value:
= {
{ PLUGIN_NONE, 0, NULL, 0, NULL, NULL }
}
static const vo_info_t vo_info_opengl
Definition video_out_opengl.c:2200
static void * opengl_init_class(xine_t *xine, const void *visual_gen)
Definition video_out_opengl.c:2174
#define XINE_VERSION_CODE
Definition xine_internal.h:57
NULL
Definition xine_plugin.c:78
#define PLUGIN_NONE
Definition xine_plugin.h:29
#define PLUGIN_VIDEO_OUT
Definition xine_plugin.h:36

◆ Inverse_Table_6_9

const int32_t Inverse_Table_6_9[8][4]
static
Initial value:
= {
{117504, 138453, 13954, 34903},
{117504, 138453, 13954, 34903},
{104597, 132201, 25675, 53279},
{104597, 132201, 25675, 53279},
{104448, 132798, 24759, 53109},
{104597, 132201, 25675, 53279},
{104597, 132201, 25675, 53279},
{117579, 136230, 16907, 35559}
}

Referenced by render_setup_fp_yuv().

◆ opengl_rb

const opengl_render_t opengl_rb[]
static
Initial value:
= {
{ "2D_Tex_Fragprog", render_tex2d, render_image_fp_yuv,
{ "Image_Pipeline", render_draw, render_image_nop,
{ "Cylinder", render_cyl, render_image_tex,
{ "Env_Mapped_Torus", render_env_tor, render_image_envtex,
}
static void render_tex2dtiled(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:290
static int render_setup_tex2d(opengl_driver_t *this)
Definition video_out_opengl.c:864
static int render_image_nop(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:552
static int render_image_envtex(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:673
@ RENDER_DRAW
Definition video_out_opengl.c:154
@ RENDER_NONE
Definition video_out_opengl.c:154
static void render_tex2d(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:269
static void render_env_tor(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:387
static int render_setup_fp_yuv(opengl_driver_t *this)
Definition video_out_opengl.c:947
static int render_setup_2d(opengl_driver_t *this)
Definition video_out_opengl.c:835
static void render_draw(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:333
static int render_setup_torus(opengl_driver_t *this)
Definition video_out_opengl.c:911
static int render_image_fp_yuv(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:620
static int render_setup_cyl(opengl_driver_t *this)
Definition video_out_opengl.c:898
static int render_image_tex(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:558
static void render_cyl(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:345
static int render_image_tiledtex(opengl_driver_t *this, opengl_frame_t *frame)
Definition video_out_opengl.c:575

Referenced by opengl_frame_field(), opengl_open_plugin(), and render_run().

◆ vo_info_opengl

const vo_info_t vo_info_opengl
static
Initial value:
= {
.priority = 7,
.visual_type = XINE_VISUAL_TYPE_X11,
}
#define XINE_VISUAL_TYPE_X11
Definition xine.h:154