git.videolan.org
/
vlc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* glx.c: don't scale the image with the chroma (supposed to speed up
[vlc.git]
/
modules
/
video_output
/
x11
/
glx.c
diff --git
a/modules/video_output/x11/glx.c
b/modules/video_output/x11/glx.c
index
1098b3b
..
4e428bf
100644
(file)
--- a/
modules/video_output/x11/glx.c
+++ b/
modules/video_output/x11/glx.c
@@
-57,8
+57,6
@@
static void SwitchContext( vout_thread_t *p_vout );
static inline int GetAlignedSize( int i_size );
static inline int GetAlignedSize( int i_size );
-#define MAX_TEXTURE_SIZE 512
-
/*****************************************************************************
* Module descriptor
*****************************************************************************/
/*****************************************************************************
* Module descriptor
*****************************************************************************/
@@
-80,6
+78,9
@@
struct vout_sys_t
uint8_t *p_buffer;
int i_index;
uint8_t *p_buffer;
int i_index;
+ int i_tex_width;
+ int i_tex_height;
+
int i_width;
int i_height;
int b_fullscreen;
int i_width;
int i_height;
int b_fullscreen;
@@
-124,7
+125,7
@@
static int Create( vlc_object_t *p_this )
msg_Err( p_vout, "out of memory" );
return( 1 );
}
msg_Err( p_vout, "out of memory" );
return( 1 );
}
-
+
//XXX set to 0 to disable the cube effect
p_vout->p_sys->i_effect = 1;
//XXX set to 0 to disable the cube effect
p_vout->p_sys->i_effect = 1;
@@
-132,16
+133,14
@@
static int Create( vlc_object_t *p_this )
p_vout->p_sys->i_height = p_vout->i_window_height; */
p_vout->p_sys->i_width = 700;
p_vout->p_sys->i_height = 700;
p_vout->p_sys->i_height = p_vout->i_window_height; */
p_vout->p_sys->i_width = 700;
p_vout->p_sys->i_height = 700;
-
p_vout->p_sys->b_fullscreen = 0;
/* A texture must have a size aligned on a power of 2 */
p_vout->p_sys->b_fullscreen = 0;
/* A texture must have a size aligned on a power of 2 */
- p_vout->output.i_width = GetAlignedSize( p_vout->render.i_width );
- p_vout->output.i_height = GetAlignedSize( p_vout->render.i_height );
- p_vout->output.i_aspect = p_vout->render.i_aspect;
+ p_vout->p_sys->i_tex_width = GetAlignedSize( p_vout->render.i_width );
+ p_vout->p_sys->i_tex_height = GetAlignedSize( p_vout->render.i_height );
- msg_Dbg( p_vout, "Texture size: %dx%d",
p_vout->output.i
_width,
- p_vout->
output.i
_height );
+ msg_Dbg( p_vout, "Texture size: %dx%d",
p_vout->p_sys->i_tex
_width,
+ p_vout->
p_sys->i_tex
_height );
/* Open and initialize device */
if( OpenDisplay( p_vout ) )
/* Open and initialize device */
if( OpenDisplay( p_vout ) )
@@
-174,6
+173,10
@@
static int Init( vout_thread_t *p_vout )
p_vout->output.i_gmask = 0x0000ff00;
p_vout->output.i_bmask = 0x00ff0000;
p_vout->output.i_gmask = 0x0000ff00;
p_vout->output.i_bmask = 0x00ff0000;
+ p_vout->output.i_width = p_vout->render.i_width;
+ p_vout->output.i_height = p_vout->render.i_height;
+ p_vout->output.i_aspect = p_vout->render.i_aspect;
+
I_OUTPUTPICTURES = 0;
p_pic = NULL;
I_OUTPUTPICTURES = 0;
p_pic = NULL;
@@
-197,9
+200,13
@@
static int Init( vout_thread_t *p_vout )
* directly by the decoder */
p_pic->i_planes = 1;
* directly by the decoder */
p_pic->i_planes = 1;
- p_pic->p->p_pixels = p_vout->p_sys->p_buffer;
+
+ p_pic->p->p_pixels = p_vout->p_sys->p_buffer
+ + 2 * p_vout->p_sys->i_tex_width *
+ (p_vout->p_sys->i_tex_height - p_vout->output.i_height)
+ + 2 * (p_vout->p_sys->i_tex_width - p_vout->output.i_width);
p_pic->p->i_lines = p_vout->output.i_height;
p_pic->p->i_lines = p_vout->output.i_height;
- p_pic->p->i_pitch = p_vout->
output.i
_width * 4;
+ p_pic->p->i_pitch = p_vout->
p_sys->i_tex
_width * 4;
p_pic->p->i_pixel_pitch = 4;
p_pic->p->i_visible_pitch = p_vout->output.i_width * 4;
p_pic->p->i_pixel_pitch = 4;
p_pic->p->i_visible_pitch = p_vout->output.i_width * 4;
@@
-311,8
+318,11
@@
static int Manage( vout_thread_t *p_vout )
static void Render( vout_thread_t *p_vout, picture_t *p_pic )
{
glClear(GL_COLOR_BUFFER_BIT);
static void Render( vout_thread_t *p_vout, picture_t *p_pic )
{
glClear(GL_COLOR_BUFFER_BIT);
- glTexImage2D (GL_TEXTURE_2D, 0, 3, p_vout->output.i_width,
+
/*
glTexImage2D (GL_TEXTURE_2D, 0, 3, p_vout->output.i_width,
p_vout->output.i_height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
p_vout->output.i_height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
+ p_vout->p_sys->p_buffer);*/
+ glTexImage2D (GL_TEXTURE_2D, 0, 3, p_vout->p_sys->i_tex_width,
+ p_vout->p_sys->i_tex_height , 0, GL_RGBA, GL_UNSIGNED_BYTE,
p_vout->p_sys->p_buffer);
if( !p_vout->p_sys->i_effect )
p_vout->p_sys->p_buffer);
if( !p_vout->p_sys->i_effect )
@@
-327,74
+337,86
@@
static void Render( vout_thread_t *p_vout, picture_t *p_pic )
}
else
{
}
else
{
- glRotatef(
2.0, 3.3, 1.5, 2
.7 );
+ glRotatef(
1.0, 0.3, 0.5, 0
.7 );
glEnable( GL_TEXTURE_2D);
glBegin( GL_QUADS );
glEnable( GL_TEXTURE_2D);
glBegin( GL_QUADS );
+
+ float f_width = p_vout->output.i_width;
+ float f_height = p_vout->output.i_height;
+
+ /* Correct the aspect ratio */
+ /* float f_aspect = (float)p_vout->output.i_aspect / VOUT_ASPECT_FACTOR;
+ if( f_aspect > 1.0 )
+ {
+ f_height *= f_aspect;
+ }
+ else
+ {
+ f_width *= f_aspect;
+ }*/
+
+ float f_offset_x = (1.0 - f_width / p_vout->p_sys->i_tex_width) / 2.0;
+ float f_offset_y = (1.0 - f_height / p_vout->p_sys->i_tex_height) / 2.0;
+
/* Front */
/* Front */
- glTexCoord2f(
0.0, 0.0
);
+ glTexCoord2f(
f_offset_x, f_offset_y
);
glVertex3f( - 1.0, 1.0, 1.0 );
glVertex3f( - 1.0, 1.0, 1.0 );
- glTexCoord2f(
0.0, 1.0
);
+ glTexCoord2f(
f_offset_x, 1.0 - f_offset_y
);
glVertex3f( - 1.0, - 1.0, 1.0 );
glVertex3f( - 1.0, - 1.0, 1.0 );
- glTexCoord2f( 1.0,
- 1.0 );
+ glTexCoord2f( 1.0 - f_offset_x, 1.0 - f_offset_y );
glVertex3f( 1.0, - 1.0, 1.0 );
glVertex3f( 1.0, - 1.0, 1.0 );
- glTexCoord2f( 1.0
, 0.0
);
+ glTexCoord2f( 1.0
- f_offset_x, f_offset_y
);
glVertex3f( 1.0, 1.0, 1.0 );
/* Left */
glVertex3f( 1.0, 1.0, 1.0 );
/* Left */
- glTexCoord2f(
0.0, 0.0
);
+ glTexCoord2f(
f_offset_x, f_offset_y
);
glVertex3f( - 1.0, 1.0, - 1.0 );
glVertex3f( - 1.0, 1.0, - 1.0 );
- glTexCoord2f(
0.0, 1.0
);
+ glTexCoord2f(
f_offset_x, 1.0 - f_offset_y
);
glVertex3f( - 1.0, - 1.0, - 1.0 );
glVertex3f( - 1.0, - 1.0, - 1.0 );
- glTexCoord2f( 1.0,
- 1.0 );
+ glTexCoord2f( 1.0 - f_offset_x, 1.0 - f_offset_y );
glVertex3f( - 1.0, - 1.0, 1.0 );
glVertex3f( - 1.0, - 1.0, 1.0 );
- glTexCoord2f( 1.0
, 0.0
);
+ glTexCoord2f( 1.0
- f_offset_x, f_offset_y
);
glVertex3f( - 1.0, 1.0, 1.0 );
/* Back */
glVertex3f( - 1.0, 1.0, 1.0 );
/* Back */
- glTexCoord2f(
0.0, 0.0
);
+ glTexCoord2f(
f_offset_x, f_offset_y
);
glVertex3f( 1.0, 1.0, - 1.0 );
glVertex3f( 1.0, 1.0, - 1.0 );
- glTexCoord2f(
0.0, 1.0
);
+ glTexCoord2f(
f_offset_x, 1.0 - f_offset_y
);
glVertex3f( 1.0, - 1.0, - 1.0 );
glVertex3f( 1.0, - 1.0, - 1.0 );
- glTexCoord2f( 1.0,
- 1.0 );
+ glTexCoord2f( 1.0 - f_offset_x, 1.0 - f_offset_y );
glVertex3f( - 1.0, - 1.0, - 1.0 );
glVertex3f( - 1.0, - 1.0, - 1.0 );
- glTexCoord2f( 1.0
, 0.0
);
+ glTexCoord2f( 1.0
- f_offset_x, f_offset_y
);
glVertex3f( - 1.0, 1.0, - 1.0 );
/* Right */
glVertex3f( - 1.0, 1.0, - 1.0 );
/* Right */
- glTexCoord2f(
0.0, 0.0
);
+ glTexCoord2f(
f_offset_x, f_offset_y
);
glVertex3f( 1.0, 1.0, 1.0 );
glVertex3f( 1.0, 1.0, 1.0 );
- glTexCoord2f(
0.0, 1.0
);
+ glTexCoord2f(
f_offset_x, 1.0 - f_offset_y
);
glVertex3f( 1.0, - 1.0, 1.0 );
glVertex3f( 1.0, - 1.0, 1.0 );
- glTexCoord2f( 1.0,
- 1.0 );
+ glTexCoord2f( 1.0 - f_offset_x, 1.0 - f_offset_y );
glVertex3f( 1.0, - 1.0, - 1.0 );
glVertex3f( 1.0, - 1.0, - 1.0 );
- glTexCoord2f( 1.0
, 0.0
);
+ glTexCoord2f( 1.0
- f_offset_x, f_offset_y
);
glVertex3f( 1.0, 1.0, - 1.0 );
/* Top */
glVertex3f( 1.0, 1.0, - 1.0 );
/* Top */
- glTexCoord2f(
0.0, 0.0
);
+ glTexCoord2f(
f_offset_x, f_offset_y
);
glVertex3f( - 1.0, 1.0, - 1.0 );
glVertex3f( - 1.0, 1.0, - 1.0 );
- glTexCoord2f(
0.0, 1.0
);
+ glTexCoord2f(
f_offset_x, 1.0 - f_offset_y
);
glVertex3f( - 1.0, 1.0, 1.0 );
glVertex3f( - 1.0, 1.0, 1.0 );
- glTexCoord2f( 1.0,
- 1.0 );
+ glTexCoord2f( 1.0 - f_offset_x, 1.0 - f_offset_y );
glVertex3f( 1.0, 1.0, 1.0 );
glVertex3f( 1.0, 1.0, 1.0 );
- glTexCoord2f( 1.0
, 0.0
);
+ glTexCoord2f( 1.0
- f_offset_x, f_offset_y
);
glVertex3f( 1.0, 1.0, - 1.0 );
/* Bottom */
glVertex3f( 1.0, 1.0, - 1.0 );
/* Bottom */
- glTexCoord2f(
0.0, 0.0
);
+ glTexCoord2f(
f_offset_x, f_offset_y
);
glVertex3f( - 1.0, - 1.0, 1.0 );
glVertex3f( - 1.0, - 1.0, 1.0 );
- glTexCoord2f(
0.0, 1.0
);
+ glTexCoord2f(
f_offset_x, 1.0 - f_offset_y
);
glVertex3f( - 1.0, - 1.0, - 1.0 );
glVertex3f( - 1.0, - 1.0, - 1.0 );
- glTexCoord2f( 1.0,
- 1.0 );
+ glTexCoord2f( 1.0 - f_offset_x, 1.0 - f_offset_y );
glVertex3f( 1.0, - 1.0, - 1.0 );
glVertex3f( 1.0, - 1.0, - 1.0 );
- glTexCoord2f( 1.0
, 0.0
);
+ glTexCoord2f( 1.0
- f_offset_x, f_offset_y
);
glVertex3f( 1.0, - 1.0, 1.0 );
glEnd();
}
glVertex3f( 1.0, - 1.0, 1.0 );
glEnd();
}
@@
-486,7
+508,7
@@
static int OpenDisplay( vout_thread_t *p_vout )
/* Allocate the texture buffer */
p_vout->p_sys->p_buffer =
/* Allocate the texture buffer */
p_vout->p_sys->p_buffer =
- malloc( p_vout->
output.i_width * p_vout->output.i
_height * 4 );
+ malloc( p_vout->
p_sys->i_tex_width * p_vout->p_sys->i_tex
_height * 4 );
if( !p_vout->p_sys->p_buffer )
{
msg_Err( p_vout, "Out of memory" );
if( !p_vout->p_sys->p_buffer )
{
msg_Err( p_vout, "Out of memory" );