1
mirror of https://github.com/mpv-player/mpv synced 2024-12-28 06:03:45 +01:00

Merge svn changes up to r30185

This commit is contained in:
Uoti Urpala 2010-01-08 01:36:05 +02:00
commit b390b9b28f
16 changed files with 1456 additions and 28 deletions

View File

@ -3860,6 +3860,18 @@ Provides brightness, contrast, saturation, hue and gamma control.
Gamma can also be set independently for red, green and blue.
Speed depends more on GPU memory bandwidth than other methods.
.RE
.IPs colorspace
Select the color space for YUV to RGB conversion.
.RSss
.IPs 0
Use the formula used normally by MPlayer (default)
.IPs 1
Use ITU-R BT.601 color space.
.IPs 2
Use ITU-R BT.709 color space.
.IPs 3
Use SMPTE-240M color space.
.RE
.IPs lscale=<n>
Select the scaling function to use for luminance scaling.
Only valid for yuv modes 2, 3, 4 and 6.
@ -3958,6 +3970,21 @@ Apart from this the values have the same meaning as for \-vo gl.
.REss
.
.TP
.B matrixview
OpenGL based renderer creating a Matrix-like running-text effect.
.PD 0
.RSs
.IPs cols=<n>
Number of text columns to display.
Very low values (< 16) will probably fail due to scaler limitations.
Values not divisible be 16 may cause issues as well.
.IPs rows=<n>
Number of text rows to display.
Very low values (< 16) will probably fail due to scaler limitations.
Values not divisible be 16 may cause issues as well.
.REss
.
.TP
.B "null\ \ \ "
Produces no video output.
Useful for benchmarking.

View File

@ -541,6 +541,7 @@ SRCS_MPLAYER-$(GIF) += libvo/vo_gif89a.c
SRCS_MPLAYER-$(GL) += libvo/gl_common.c libvo/vo_gl.c libvo/vo_gl2.c libvo/csputils.c
SRCS_MPLAYER-$(GL_WIN32) += libvo/w32_common.c
SRCS_MPLAYER-$(GL_X11) += libvo/x11_common.c
SRCS_MPLAYER-$(MATRIXVIEW) += libvo/vo_matrixview.c libvo/matrixview.c
SRCS_MPLAYER-$(IVTV) += libao2/ao_ivtv.c libvo/vo_ivtv.c
SRCS_MPLAYER-$(JACK) += libao2/ao_jack.c

85
configure vendored
View File

@ -334,6 +334,7 @@ Video output:
--enable-dhahelper enable VIDIX dhahelper support
--enable-svgalib_helper enable VIDIX svgalib_helper support
--enable-gl enable OpenGL video output [autodetect]
--disable-matrixview disable OpenGL MatrixView video output [autodetect]
--enable-dga2 enable DGA 2 support [autodetect]
--enable-dga1 enable DGA 1 support [autodetect]
--enable-vesa enable VESA video output [autodetect]
@ -537,6 +538,7 @@ _md5sum=yes
_yuv4mpeg=yes
_gif=auto
_gl=auto
matrixview=yes
_ggi=auto
_ggiwmh=auto
_aa=auto
@ -890,6 +892,8 @@ for ac_option do
--disable-gif) _gif=no ;;
--enable-gl) _gl=yes ;;
--disable-gl) _gl=no ;;
--enable-matrixview) matrixview=yes ;;
--disable-matrixview) matrixview=no ;;
--enable-ggi) _ggi=yes ;;
--disable-ggi) _ggi=no ;;
--enable-ggiwmh) _ggiwmh=yes ;;
@ -4488,6 +4492,19 @@ else
_novomodules="xvidix $_novomodules"
fi
echocheck "MatrixView"
if test "$_gl" = no ; then
matrixview=no
fi
if test "$matrixview" = yes ; then
_vomodules="matrixview $_vomodules"
def_matrixview='#define CONFIG_MATRIXVIEW 1'
else
_novomodules="matrixview $_novomodules"
def_matrixview='#undef CONFIG_MATRIXVIEW'
fi
echores "$matrixview"
echocheck "GGI"
if test "$_ggi" = auto ; then
cat > $TMPC << EOF
@ -5039,6 +5056,9 @@ echores "$_vesa"
echocheck "SDL"
_inc_tmp=""
_ld_tmp=""
def_sdl_sdl_h="#undef CONFIG_SDL_SDL_H"
if test -z "$_sdlconfig" ; then
if ( sdl-config --version ) >>"$TMPLOG" 2>&1 ; then
_sdlconfig="sdl-config"
@ -5050,15 +5070,40 @@ if test -z "$_sdlconfig" ; then
fi
if test "$_sdl" = auto || test "$_sdl" = yes ; then
cat > $TMPC << EOF
#ifdef CONFIG_SDL_SDL_H
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif
#ifndef __APPLE__
// we allow SDL hacking our main() only on OSX
#undef main
#endif
int main(int argc, char *argv[]) {
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE);
return 0;
}
EOF
_sdl=no
if "$_sdlconfig" --version >>"$TMPLOG" 2>&1 ; then
if cc_check $($_sdlconfig --cflags) $($_sdlconfig --libs) >>"$TMPLOG" 2>&1 ; then
for _ld_tmp in "-lSDL" "-lSDL -lpthread" "-lSDL -lwinmm -lgdi32" ; do
if cc_check -DCONFIG_SDL_SDL_H $_inc_tmp $_ld_tmp ; then
_sdl=yes
def_sdl_sdl_h="#define CONFIG_SDL_SDL_H 1"
break
fi
done
if test "$_sdl" = no && "$_sdlconfig" --version >>"$TMPLOG" 2>&1 ; then
if cygwin ; then
_inc_tmp="$($_sdlconfig --cflags | cut -d " " -f 1,5,6 | sed s/no-cygwin/cygwin/)"
_ld_tmp="$($_sdlconfig --libs | cut -d " " -f 1,4,6 | sed s/no-cygwin/cygwin/)"
elif mingw32 ; then
_inc_tmp=$($_sdlconfig --cflags | sed s/-Dmain=SDL_main//)
_ld_tmp=$($_sdlconfig --libs | sed -e s/-mwindows// -e s/-lmingw32//)
else
_inc_tmp="$($_sdlconfig --cflags)"
_ld_tmp="$($_sdlconfig --libs)"
fi
if cc_check $_inc_tmp $_ld_tmp >>"$TMPLOG" 2>&1 ; then
_sdlversion=$($_sdlconfig --version | sed 's/[^0-9]//g')
if test "$_sdlversion" -gt 116 ; then
if test "$_sdlversion" -lt 121 ; then
@ -5073,16 +5118,8 @@ EOF
fi
if test "$_sdl" = yes ; then
def_sdl='#define CONFIG_SDL 1'
if cygwin ; then
libs_mplayer="$libs_mplayer $($_sdlconfig --libs | cut -d " " -f 1,4,6 | sed s/no-cygwin/cygwin/)"
extra_cflags="$extra_cflags $($_sdlconfig --cflags | cut -d " " -f 1,5,6 | sed s/no-cygwin/cygwin/)"
elif mingw32 ; then
libs_mplayer="$libs_mplayer $($_sdlconfig --libs | sed -e s/-mwindows// -e s/-lmingw32//)"
extra_cflags="$extra_cflags $($_sdlconfig --cflags | sed s/-Dmain=SDL_main//)"
else
libs_mplayer="$libs_mplayer $($_sdlconfig --libs)"
extra_cflags="$extra_cflags $($_sdlconfig --cflags | sed s/-D_GNU_SOURCE=1//)"
fi
extra_cflags="$extra_cflags $_inc_tmp"
libs_mplayer="$libs_mplayer $_ld_tmp"
_vomodules="sdl $_vomodules"
_aomodules="sdl $_aomodules"
_res_comment="using $_sdlconfig"
@ -6017,7 +6054,7 @@ int main(void) {
}
EOF
_fontconfig=no
for _ld_tmp in "" "-lexpat -lfreetype" "-lexpat -lfreetype -lz" ; do
for _ld_tmp in "" "-lexpat -lfreetype" "-lexpat -lfreetype -lz" "-lexpat -lfreetype -lz -liconv" ; do
_ld_tmp="-lfontconfig $_ld_tmp"
cc_check $_ld_tmp && _fontconfig=yes && extra_ldflags="$extra_ldflags $_ld_tmp" && break
done
@ -6054,8 +6091,9 @@ echores "$_ass"
echocheck "fribidi with charsets"
_inc_tmp=""
_ld_tmp=""
if test "$_fribidi" = auto ; then
if ( $_fribidiconfig --version ) >/dev/null 2>&1 ; then
cat > $TMPC << EOF
#include <stdio.h>
/* workaround for fribidi 0.10.4 and below */
@ -6070,15 +6108,19 @@ int main(void) {
}
EOF
_fribidi=no
cc_check $($_fribidiconfig --cflags) $($_fribidiconfig --libs) && _fribidi=yes
else
_fribidi=no
fi
_inc_tmp=""
_ld_tmp="-lfribidi"
cc_check $_inc_tmp $_ld_tmp && _fribidi=yes
if test "$_fribidi" = no ; then
_inc_tmp="$($_fribidiconfig --cflags)"
_ld_tmp="$($_fribidiconfig --libs)"
cc_check $_inc_tmp $_ld_tmp && _fribidi=yes
fi
fi
if test "$_fribidi" = yes ; then
def_fribidi='#define CONFIG_FRIBIDI 1'
extra_cflags="$extra_cflags $($_fribidiconfig --cflags)"
extra_ldflags="$extra_ldflags $($_fribidiconfig --libs)"
extra_cflags="$extra_cflags $_inc_tmp"
extra_ldflags="$extra_ldflags $_ld_tmp"
else
def_fribidi='#undef CONFIG_FRIBIDI'
fi
@ -7841,6 +7883,7 @@ GGI = $_ggi
GL = $_gl
GL_WIN32 = $_gl_win32
GL_X11 = $_gl_x11
MATRIXVIEW = $matrixview
HAVE_POSIX_SELECT = $_posix_select
HAVE_SYS_MMAN_H = $_mman
IVTV = $_ivtv
@ -8314,6 +8357,7 @@ $def_gif_tvt_hack
$def_gl
$def_gl_win32
$def_gl_x11
$def_matrixview
$def_ivtv
$def_jpeg
$def_kva
@ -8325,6 +8369,7 @@ $def_pnm
$def_quartz
$def_s3fb
$def_sdl
$def_sdl_sdl_h
$def_sdlbuggy
$def_svga
$def_tdfxfb

View File

@ -31,7 +31,11 @@
#include "audio_out.h"
#include "audio_out_internal.h"
#include "libaf/af_format.h"
#ifdef CONFIG_SDL_SDL_H
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif
#include "osdep/timer.h"
#include "libavutil/fifo.h"

View File

@ -256,6 +256,7 @@ static int query_format(struct vf_instance* vf, unsigned int fmt)
static void uninit(vf_instance_t *vf)
{
avcodec_close(vf->priv->avctx);
av_freep(&vf->priv->avctx);
if(vf->priv->ctx) sws_freeContext(vf->priv->ctx);
if (vf->priv->buffer) free(vf->priv->buffer);

View File

@ -23,9 +23,11 @@
#include "config.h"
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include "cpudetect.h"
#include "fastmemcpy.h"
#include "ffmpeg_files/x86_cpu.h"
#undef memcpy
#define BLOCK_SIZE 4096

View File

@ -100,7 +100,7 @@ If you have questions please contact with me: Nick Kurshev: nickols_k@mail.ru.
/* for small memory blocks (<256 bytes) this version is faster */
#define small_memcpy(to,from,n)\
{\
register unsigned long int dummy;\
register x86_reg dummy;\
__asm__ volatile(\
"rep; movsb"\
:"=&D"(to), "=&S"(from), "=&c"(dummy)\
@ -180,9 +180,9 @@ static void * RENAME(fast_memcpy)(void * to, const void * from, size_t len)
#endif
if(len >= MIN_LEN)
{
register unsigned long int delta;
register x86_reg delta;
/* Align destinition to MMREG_SIZE -boundary */
delta = ((unsigned long int)to)&(MMREG_SIZE-1);
delta = ((intptr_t)to)&(MMREG_SIZE-1);
if(delta)
{
delta=MMREG_SIZE-delta;
@ -201,7 +201,7 @@ static void * RENAME(fast_memcpy)(void * to, const void * from, size_t len)
processor's decoders, but it's not always possible.
*/
#if HAVE_SSE /* Only P3 (may be Cyrix3) */
if(((unsigned long)from) & 15)
if(((intptr_t)from) & 15)
/* if SRC is misaligned */
for(; i>0; i--)
{
@ -243,7 +243,7 @@ static void * RENAME(fast_memcpy)(void * to, const void * from, size_t len)
}
#else
// Align destination at BLOCK_SIZE boundary
for(; ((int)to & (BLOCK_SIZE-1)) && i>0; i--)
for(; ((intptr_t)to & (BLOCK_SIZE-1)) && i>0; i--)
{
__asm__ volatile (
#ifndef HAVE_ONLY_MMX1
@ -328,7 +328,7 @@ static void * RENAME(fast_memcpy)(void * to, const void * from, size_t len)
"cmp %4, %2 \n\t"
" jae 1b \n\t"
: "+r" (from), "+r" (to), "+r" (i)
: "r" ((long)BLOCK_SIZE), "i" (BLOCK_SIZE/64), "i" ((long)CONFUSION_FACTOR)
: "r" ((x86_reg)BLOCK_SIZE), "i" (BLOCK_SIZE/64), "i" ((x86_reg)CONFUSION_FACTOR)
: "%"REG_a, "%ecx"
);
@ -400,9 +400,9 @@ static void * RENAME(mem2agpcpy)(void * to, const void * from, size_t len)
#endif
if(len >= MIN_LEN)
{
register unsigned long int delta;
register x86_reg delta;
/* Align destinition to MMREG_SIZE -boundary */
delta = ((unsigned long int)to)&7;
delta = ((intptr_t)to)&7;
if(delta)
{
delta=8-delta;

View File

@ -41,8 +41,10 @@ void (GLAPIENTRY *End)(void);
void (GLAPIENTRY *Viewport)(GLint, GLint, GLsizei, GLsizei);
void (GLAPIENTRY *MatrixMode)(GLenum);
void (GLAPIENTRY *LoadIdentity)(void);
void (GLAPIENTRY *Translated)(double, double, double);
void (GLAPIENTRY *Scaled)(double, double, double);
void (GLAPIENTRY *Ortho)(double, double, double, double, double, double);
void (GLAPIENTRY *Frustum)(double, double, double, double, double, double);
void (GLAPIENTRY *PushMatrix)(void);
void (GLAPIENTRY *PopMatrix)(void);
void (GLAPIENTRY *Clear)(GLbitfield);
@ -54,10 +56,14 @@ void (GLAPIENTRY *CallList)(GLuint);
void (GLAPIENTRY *CallLists)(GLsizei, GLenum, const GLvoid *);
void (GLAPIENTRY *GenTextures)(GLsizei, GLuint *);
void (GLAPIENTRY *DeleteTextures)(GLsizei, const GLuint *);
void (GLAPIENTRY *TexEnvf)(GLenum, GLenum, GLfloat);
void (GLAPIENTRY *TexEnvi)(GLenum, GLenum, GLint);
void (GLAPIENTRY *Color4ub)(GLubyte, GLubyte, GLubyte, GLubyte);
void (GLAPIENTRY *Color3f)(GLfloat, GLfloat, GLfloat);
void (GLAPIENTRY *Color4f)(GLfloat, GLfloat, GLfloat, GLfloat);
void (GLAPIENTRY *ClearColor)(GLclampf, GLclampf, GLclampf, GLclampf);
void (GLAPIENTRY *ClearDepth)(GLclampd);
void (GLAPIENTRY *DepthFunc)(GLenum);
void (GLAPIENTRY *Enable)(GLenum);
void (GLAPIENTRY *Disable)(GLenum);
const GLubyte *(GLAPIENTRY *GetString)(GLenum);
@ -75,6 +81,11 @@ void (GLAPIENTRY *TexParameterf)(GLenum, GLenum, GLfloat);
void (GLAPIENTRY *TexParameterfv)(GLenum, GLenum, const GLfloat *);
void (GLAPIENTRY *TexCoord2f)(GLfloat, GLfloat);
void (GLAPIENTRY *Vertex2f)(GLfloat, GLfloat);
void (GLAPIENTRY *Vertex3f)(GLfloat, GLfloat, GLfloat);
void (GLAPIENTRY *Normal3f)(GLfloat, GLfloat, GLfloat);
void (GLAPIENTRY *Lightfv)(GLenum, GLenum, const GLfloat *);
void (GLAPIENTRY *ColorMaterial)(GLenum, GLenum);
void (GLAPIENTRY *ShadeModel)(GLenum);
void (GLAPIENTRY *GetIntegerv)(GLenum, GLint *);
/**
@ -359,8 +370,10 @@ static const extfunc_desc_t extfuncs[] = {
DEF_FUNC_DESC(Viewport),
DEF_FUNC_DESC(MatrixMode),
DEF_FUNC_DESC(LoadIdentity),
DEF_FUNC_DESC(Translated),
DEF_FUNC_DESC(Scaled),
DEF_FUNC_DESC(Ortho),
DEF_FUNC_DESC(Frustum),
DEF_FUNC_DESC(PushMatrix),
DEF_FUNC_DESC(PopMatrix),
DEF_FUNC_DESC(Clear),
@ -372,10 +385,14 @@ static const extfunc_desc_t extfuncs[] = {
DEF_FUNC_DESC(CallLists),
DEF_FUNC_DESC(GenTextures),
DEF_FUNC_DESC(DeleteTextures),
DEF_FUNC_DESC(TexEnvf),
DEF_FUNC_DESC(TexEnvi),
DEF_FUNC_DESC(Color4ub),
DEF_FUNC_DESC(Color3f),
DEF_FUNC_DESC(Color4f),
DEF_FUNC_DESC(ClearColor),
DEF_FUNC_DESC(ClearDepth),
DEF_FUNC_DESC(DepthFunc),
DEF_FUNC_DESC(Enable),
DEF_FUNC_DESC(Disable),
DEF_FUNC_DESC(DrawBuffer),
@ -392,6 +409,11 @@ static const extfunc_desc_t extfuncs[] = {
DEF_FUNC_DESC(TexParameterfv),
DEF_FUNC_DESC(TexCoord2f),
DEF_FUNC_DESC(Vertex2f),
DEF_FUNC_DESC(Vertex3f),
DEF_FUNC_DESC(Normal3f),
DEF_FUNC_DESC(Lightfv),
DEF_FUNC_DESC(ColorMaterial),
DEF_FUNC_DESC(ShadeModel),
DEF_FUNC_DESC(GetIntegerv),
// here start the real extensions

View File

@ -395,8 +395,10 @@ extern void (GLAPIENTRY *End)(void);
extern void (GLAPIENTRY *Viewport)(GLint, GLint, GLsizei, GLsizei);
extern void (GLAPIENTRY *MatrixMode)(GLenum);
extern void (GLAPIENTRY *LoadIdentity)(void);
extern void (GLAPIENTRY *Translated)(double, double, double);
extern void (GLAPIENTRY *Scaled)(double, double, double);
extern void (GLAPIENTRY *Ortho)(double, double, double, double, double, double);
extern void (GLAPIENTRY *Frustum)(double, double, double, double, double, double);
extern void (GLAPIENTRY *PushMatrix)(void);
extern void (GLAPIENTRY *PopMatrix)(void);
extern void (GLAPIENTRY *Clear)(GLbitfield);
@ -408,10 +410,14 @@ extern void (GLAPIENTRY *CallList)(GLuint);
extern void (GLAPIENTRY *CallLists)(GLsizei, GLenum, const GLvoid *);
extern void (GLAPIENTRY *GenTextures)(GLsizei, GLuint *);
extern void (GLAPIENTRY *DeleteTextures)(GLsizei, const GLuint *);
extern void (GLAPIENTRY *TexEnvf)(GLenum, GLenum, GLfloat);
extern void (GLAPIENTRY *TexEnvi)(GLenum, GLenum, GLint);
extern void (GLAPIENTRY *Color4ub)(GLubyte, GLubyte, GLubyte, GLubyte);
extern void (GLAPIENTRY *Color3f)(GLfloat, GLfloat, GLfloat);
extern void (GLAPIENTRY *Color4f)(GLfloat, GLfloat, GLfloat, GLfloat);
extern void (GLAPIENTRY *ClearColor)(GLclampf, GLclampf, GLclampf, GLclampf);
extern void (GLAPIENTRY *ClearDepth)(GLclampd);
extern void (GLAPIENTRY *DepthFunc)(GLenum);
extern void (GLAPIENTRY *Enable)(GLenum);
extern void (GLAPIENTRY *Disable)(GLenum);
extern const GLubyte *(GLAPIENTRY *GetString)(GLenum);
@ -429,6 +435,11 @@ extern void (GLAPIENTRY *TexParameterf)(GLenum, GLenum, GLfloat);
extern void (GLAPIENTRY *TexParameterfv)(GLenum, GLenum, const GLfloat *);
extern void (GLAPIENTRY *TexCoord2f)(GLfloat, GLfloat);
extern void (GLAPIENTRY *Vertex2f)(GLfloat, GLfloat);
extern void (GLAPIENTRY *Vertex3f)(GLfloat, GLfloat, GLfloat);
extern void (GLAPIENTRY *Normal3f)(GLfloat, GLfloat, GLfloat);
extern void (GLAPIENTRY *Lightfv)(GLenum, GLenum, const GLfloat *);
extern void (GLAPIENTRY *ColorMaterial)(GLenum, GLenum);
extern void (GLAPIENTRY *ShadeModel)(GLenum);
extern void (GLAPIENTRY *GetIntegerv)(GLenum, GLint *);
extern void (GLAPIENTRY *GenBuffers)(GLsizei, GLuint *);

378
libvo/matrixview.c Normal file
View File

@ -0,0 +1,378 @@
/*
* Copyright (C) 2003 Alex Zolotov <nightradio@knoppix.ru>
* Mucked with by Tugrul Galatali <tugrul@galatali.com>
*
* MatrixView is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* MatrixView 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 MPlayer; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/**
* Ported to an MPlayer video out plugin by Pigeon <pigeon at pigeond.net>
* August 2006
*/
#include <math.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "gl_common.h"
#include "matrixview.h"
#include "matrixview_font.h"
static float matrix_contrast = 1.5;
static float matrix_brightness = 1.0;
// Settings for our light. Try playing with these (or add more lights).
static float Light_Ambient[] = { 0.1f, 0.1f, 0.1f, 1.0f };
static float Light_Diffuse[] = { 1.2f, 1.2f, 1.2f, 1.0f };
static float Light_Position[] = { 2.0f, 2.0f, 0.0f, 1.0f };
static const uint8_t flare[4][4] = {
{ 0, 0, 0, 0},
{ 0, 180, 0, 0},
{ 0, 0, 0, 0},
{ 0, 0, 0, 0}
};
#define MAX_TEXT_X 0x4000
#define MAX_TEXT_Y 0x4000
static int text_x = 0;
static int text_y = 0;
#define _text_x text_x/2
#define _text_y text_y/2
// Scene position
#define Z_Off -128.0f
#define Z_Depth 8
static uint8_t *speed;
static uint8_t *text;
static uint8_t *text_light;
static float *text_depth;
static float *bump_pic;
static void draw_char(int num, float light, float x, float y, float z)
{
float tx, ty;
int num2, num3;
num &= 63;
//light = light / 255; //light=7-light;num+=(light*60);
light = light / 255 * matrix_brightness;
num2 = num / 10;
num3 = num - (num2 * 10);
ty = (float)num2 / 7;
tx = (float)num3 / 10;
Normal3f(0.0f, 0.0f, 1.0f); // Needed for lighting
Color4f(0.0, 1.0, 0.0, light); // Basic polygon color
TexCoord2f(tx, ty);
Vertex3f(x, y, z);
TexCoord2f(tx + 0.1, ty);
Vertex3f(x + 1, y, z);
TexCoord2f(tx + 0.1, ty + 0.166);
Vertex3f(x + 1, y - 1, z);
TexCoord2f(tx, ty + 0.166);
Vertex3f(x, y - 1, z);
}
static void draw_illuminatedchar(int num, float x, float y, float z)
{
float tx, ty;
int num2, num3;
num2 = num / 10;
num3 = num - (num2 * 10);
ty = (float)num2 / 7;
tx = (float)num3 / 10;
Normal3f(0.0f, 0.0f, 1.0f); // Needed for lighting
Color4f(1.0, 1.0, 1.0, .5); // Basic polygon color
TexCoord2f(tx, ty);
Vertex3f(x, y, z);
TexCoord2f(tx + 0.1, ty);
Vertex3f(x + 1, y, z);
TexCoord2f(tx + 0.1, ty + 0.166);
Vertex3f(x + 1, y - 1, z);
TexCoord2f(tx, ty + 0.166);
Vertex3f(x, y - 1, z);
}
static void draw_flare(float x, float y, float z) //flare
{
Normal3f(0.0f, 0.0f, 1.0f); // Needed for lighting
Color4f(1.0, 1.0, 1.0, .8); // Basic polygon color
TexCoord2f(0, 0);
Vertex3f(x - 1, y + 1, z);
TexCoord2f(0.75, 0);
Vertex3f(x + 2, y + 1, z);
TexCoord2f(0.75, 0.75);
Vertex3f(x + 2, y - 2, z);
TexCoord2f(0, 0.75);
Vertex3f(x - 1, y - 2, z);
}
static void draw_text(uint8_t *pic)
{
int x, y;
int p = 0;
int c, c_pic;
int pic_fade = 255;
for (y = _text_y; y > -_text_y; y--) {
for (x = -_text_x; x < _text_x; x++) {
c = text_light[p] - (text[p] >> 1);
c += pic_fade;
if (c > 255)
c = 255;
if (pic) {
// Original code
//c_pic = pic[p] * matrix_contrast - (255 - pic_fade);
c_pic = (255 - pic[p]) * matrix_contrast - (255 - pic_fade);
if (c_pic < 0)
c_pic = 0;
c -= c_pic;
if (c < 0)
c = 0;
bump_pic[p] = (255.0f - c_pic) / (256 / Z_Depth);
} else {
bump_pic[p] = Z_Depth;
}
if (text[p] && c > 10)
draw_char(text[p] + 1, c, x, y, text_depth[p] + bump_pic[p]);
if (text_depth[p] < 0.1)
text_depth[p] = 0;
else
text_depth[p] /= 1.1;
if (text_light[p] > 128 && text_light[p + text_x] < 10)
draw_illuminatedchar(text[p] + 1, x, y, text_depth[p] + bump_pic[p]);
p++;
}
}
}
static void draw_flares(void)
{
float x, y;
int p = 0;
for (y = _text_y; y > -_text_y; y--) {
for (x = -_text_x; x < _text_x; x++) {
if (text_light[p] > 128 && text_light[p + text_x] < 10)
draw_flare(x, y, text_depth[p] + bump_pic[p]);
p++;
}
}
}
static void scroll(double dCurrentTime)
{
int a, s, polovina;
//static double dLastCycle = -1;
static double dLastMove = -1;
if (dCurrentTime - dLastMove > 1.0 / (text_y / 1.5)) {
dLastMove = dCurrentTime;
polovina = text_x * text_y / 2;
s = 0;
for (a = text_x * text_y + text_x - 1; a >= text_x; a--) {
if (speed[s])
text_light[a] = text_light[a - text_x]; //scroll light table down
s++;
if (s >= text_x)
s = 0;
}
memmove(text_light + text_x, text_light, text_x * text_y);
memset(text_light, 253, text_x);
s = 0;
for (a = polovina; a < text_x * text_y; a++) {
if (text_light[a] == 255)
text_light[s] = text_light[s + text_x] >> 1; //make black bugs in top line
s++;
if (s >= text_x)
s = 0;
}
}
}
static void make_change(double dCurrentTime)
{
int r = rand() % text_x * text_y;
text[r] += 133; //random bugs
r = rand() % (4 * text_x);
if (r < text_x && text_light[r])
text_light[r] = 255; //white bugs
scroll (dCurrentTime);
}
static void make_text(void)
{
int a;
for (a = 0; a < text_x * text_y; a++)
text[a] = rand() >> 8; // avoid the lowest bits of rand()
for (a = 0; a < text_x; a++)
speed[a] = rand() >= RAND_MAX / 2;
}
static void ourBuildTextures(void)
{
TexImage2D(GL_TEXTURE_2D, 0, 1, 128, 64, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, font_texture);
TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
BindTexture(GL_TEXTURE_2D, 1);
TexImage2D(GL_TEXTURE_2D, 0, 1, 4, 4, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, flare);
TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Some pretty standard settings for wrapping and filtering.
TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
BindTexture(GL_TEXTURE_2D, 0);
}
void matrixview_init(int w, int h)
{
make_text();
ourBuildTextures();
// Color to clear color buffer to.
ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
// Depth to clear depth buffer to; type of test.
ClearDepth(1.0);
DepthFunc(GL_LESS);
// Enables Smooth Color Shading; try GL_FLAT for (lack of) fun.
ShadeModel(GL_SMOOTH);
// Set up a light, turn it on.
Lightfv(GL_LIGHT1, GL_POSITION, Light_Position);
Lightfv(GL_LIGHT1, GL_AMBIENT, Light_Ambient);
Lightfv(GL_LIGHT1, GL_DIFFUSE, Light_Diffuse);
Enable(GL_LIGHT1);
// A handy trick -- have surface material mirror the color.
ColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
Enable(GL_COLOR_MATERIAL);
// Allow adjusting of texture color via glColor
TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
matrixview_reshape(w, h);
}
void matrixview_reshape(int w, int h)
{
Viewport(0, 0, w, h);
MatrixMode(GL_PROJECTION);
LoadIdentity();
Frustum(-_text_x, _text_x, -_text_y, _text_y, -Z_Off - Z_Depth, -Z_Off);
MatrixMode(GL_MODELVIEW);
}
void matrixview_draw(int w, int h, double currentTime, float frameTime, uint8_t *data)
{
Enable(GL_BLEND);
Enable(GL_TEXTURE_2D);
Disable(GL_LIGHTING);
BlendFunc(GL_SRC_ALPHA, GL_ONE);
Disable(GL_DEPTH_TEST);
MatrixMode(GL_MODELVIEW);
LoadIdentity();
Translated(0.0f, 0.0f, Z_Off);
// Clear the color and depth buffers.
Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// OK, let's start drawing our planer quads.
Begin(GL_QUADS);
draw_text(data);
End();
BindTexture(GL_TEXTURE_2D, 1);
Begin(GL_QUADS);
draw_flares();
End();
BindTexture(GL_TEXTURE_2D, 0);
make_change(currentTime);
LoadIdentity();
MatrixMode(GL_PROJECTION);
}
void matrixview_contrast_set(float contrast)
{
matrix_contrast = contrast;
}
void matrixview_brightness_set(float brightness)
{
matrix_brightness = brightness;
}
void matrixview_matrix_resize(int w, int h)
{
int elems;
free(speed);
speed = NULL;
free(text);
text = NULL;
free(text_light);
text_light = NULL;
free(text_depth);
text_depth = NULL;
if (w > MAX_TEXT_X || h > MAX_TEXT_Y)
return;
elems = w * (h + 1);
speed = calloc(w, sizeof(*speed));
text = calloc(elems, sizeof(*text));
text_light = calloc(elems, sizeof(*text_light));
text_depth = calloc(elems, sizeof(*text_depth));
bump_pic = calloc(elems, sizeof(*bump_pic));
text_x = w;
text_y = h;
make_text();
}

12
libvo/matrixview.h Normal file
View File

@ -0,0 +1,12 @@
#ifndef MPLAYER_MATRIXVIEW_H
#define MPLAYER_MATRIXVIEW_H
#include <stdint.h>
void matrixview_init (int w, int h);
void matrixview_reshape (int w, int h);
void matrixview_draw (int w, int h, double currentTime, float frameTime, uint8_t *data);
void matrixview_matrix_resize(int w, int h);
void matrixview_contrast_set(float contrast);
void matrixview_brightness_set(float brightness);
#endif /* MPLAYER_MATRIXVIEW_H */

588
libvo/matrixview_font.h Normal file
View File

@ -0,0 +1,588 @@
#ifndef MPLAYER_MATRIXVIEW_FONT_H
#define MPLAYER_MATRIXVIEW_FONT_H
#include <stdint.h>
#define FONT_TEXTURE_W 128
#define FONT_TEXTURE_H 64
static const uint8_t font_texture[FONT_TEXTURE_H][FONT_TEXTURE_W] = {
{
2, 2, 2, 2, 5, 20, 52, 77, 13, 2, 2, 2, 2, 2, 2, 3,
13, 42, 67, 71, 66, 34, 7, 2, 2, 2, 2, 4, 36, 69, 71, 71,
71, 71, 70, 35, 4, 3, 2, 2, 2, 2, 2, 3, 2, 29, 70, 71,
39, 3, 2, 3, 3, 44, 71, 71, 71, 72, 71, 71, 71, 65, 13, 2,
3, 2, 3, 5, 30, 64, 72, 71, 45, 13, 3, 2, 2, 2, 29, 71,
71, 71, 71, 71, 71, 71, 71, 47, 2, 2, 2, 2, 2, 5, 26, 58,
63, 36, 7, 2, 2, 2, 2, 2, 2, 12, 58, 71, 71, 71, 71, 61,
15, 2, 2, 2, 2, 3, 2, 3, 2, 2, 2, 2, 3, 2, 3, 5
}, {
2, 2, 2, 3, 30, 122, 127, 122, 20, 3, 2, 2, 2, 2, 3, 33,
110, 125, 85, 54, 64, 111, 80, 8, 3, 3, 3, 20, 92, 63, 50, 50,
83, 125, 127, 121, 29, 2, 2, 2, 2, 2, 3, 3, 14, 106, 118, 127,
74, 2, 3, 3, 3, 42, 67, 67, 67, 67, 67, 102, 127, 120, 22, 3,
2, 3, 8, 79, 125, 115, 73, 103, 127, 107, 28, 3, 2, 2, 21, 50,
50, 49, 50, 50, 56, 118, 127, 85, 2, 2, 2, 2, 6, 65, 124, 127,
123, 126, 89, 15, 2, 2, 2, 2, 3, 80, 127, 126, 65, 62, 124, 127,
86, 5, 3, 2, 3, 3, 4, 12, 13, 7, 7, 12, 12, 4, 3, 6
}, {
2, 2, 2, 3, 12, 59, 125, 123, 20, 3, 2, 2, 2, 2, 7, 102,
127, 99, 5, 3, 3, 24, 90, 32, 3, 3, 3, 3, 2, 3, 3, 3,
5, 86, 127, 127, 51, 3, 2, 2, 2, 2, 3, 5, 78, 101, 70, 127,
74, 3, 3, 3, 2, 3, 3, 3, 3, 3, 2, 71, 127, 120, 23, 2,
3, 3, 50, 126, 126, 35, 2, 14, 113, 127, 78, 5, 3, 3, 3, 3,
2, 2, 3, 3, 21, 118, 127, 78, 2, 2, 2, 2, 36, 125, 127, 77,
35, 106, 127, 76, 2, 2, 2, 2, 2, 93, 127, 109, 12, 35, 123, 127,
100, 7, 3, 3, 3, 3, 16, 105, 110, 47, 54, 109, 98, 15, 3, 5
}, {
2, 2, 2, 2, 3, 31, 124, 123, 21, 2, 2, 2, 2, 2, 9, 112,
127, 93, 4, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3,
2, 64, 127, 127, 51, 3, 2, 2, 2, 2, 3, 47, 116, 33, 62, 127,
73, 3, 3, 2, 3, 7, 48, 77, 77, 77, 78, 107, 127, 119, 22, 3,
2, 3, 90, 127, 114, 14, 3, 5, 94, 127, 95, 7, 3, 3, 3, 3,
3, 3, 3, 4, 64, 127, 123, 29, 2, 2, 2, 2, 45, 127, 126, 56,
15, 93, 127, 82, 2, 2, 2, 2, 3, 93, 127, 108, 15, 95, 127, 127,
99, 8, 3, 3, 3, 2, 29, 127, 127, 41, 78, 127, 110, 14, 3, 6
}, {
2, 2, 2, 2, 2, 30, 124, 123, 20, 2, 2, 2, 2, 2, 5, 83,
127, 113, 11, 2, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3,
3, 68, 127, 127, 51, 3, 3, 3, 2, 3, 20, 111, 62, 3, 62, 127,
74, 2, 2, 3, 3, 50, 126, 127, 118, 66, 47, 47, 47, 43, 9, 2,
2, 3, 98, 127, 125, 23, 3, 11, 110, 127, 87, 5, 3, 2, 2, 2,
3, 3, 3, 26, 118, 127, 73, 4, 3, 2, 2, 2, 12, 100, 127, 122,
109, 127, 115, 31, 2, 2, 2, 2, 2, 94, 127, 109, 55, 125, 127, 127,
99, 7, 2, 3, 3, 3, 42, 127, 124, 32, 92, 127, 100, 7, 3, 5
}, {
2, 2, 2, 2, 2, 30, 124, 122, 20, 2, 2, 2, 2, 2, 2, 14,
88, 126, 91, 18, 3, 3, 2, 2, 2, 2, 3, 3, 2, 9, 9, 10,
25, 108, 127, 127, 48, 3, 2, 3, 4, 7, 86, 99, 15, 10, 66, 127,
73, 2, 2, 2, 2, 65, 127, 127, 61, 4, 3, 3, 2, 2, 2, 2,
2, 3, 92, 127, 127, 94, 48, 82, 126, 124, 57, 3, 3, 2, 2, 2,
2, 4, 8, 91, 127, 106, 15, 3, 2, 2, 2, 2, 3, 53, 125, 127,
127, 127, 74, 6, 2, 2, 2, 2, 2, 93, 127, 115, 115, 98, 121, 127,
99, 7, 2, 2, 3, 3, 59, 127, 120, 26, 100, 127, 92, 3, 3, 5
}, {
2, 2, 2, 2, 2, 30, 124, 123, 20, 2, 2, 2, 2, 2, 3, 3,
10, 66, 121, 110, 42, 5, 3, 2, 2, 2, 3, 2, 3, 87, 102, 103,
114, 119, 118, 91, 15, 3, 3, 3, 3, 54, 126, 114, 102, 102, 115, 127,
74, 3, 2, 2, 2, 66, 127, 127, 50, 3, 3, 3, 2, 2, 2, 2,
2, 3, 72, 127, 114, 84, 104, 105, 91, 46, 5, 3, 3, 2, 2, 2,
2, 3, 51, 126, 126, 47, 3, 3, 2, 2, 2, 2, 29, 120, 127, 107,
82, 122, 125, 49, 2, 2, 2, 2, 3, 93, 127, 127, 123, 36, 117, 127,
99, 7, 2, 2, 3, 3, 75, 127, 115, 24, 108, 127, 80, 3, 3, 5
}, {
2, 2, 2, 2, 2, 30, 124, 123, 20, 2, 2, 2, 2, 2, 2, 3,
3, 4, 35, 107, 122, 66, 10, 3, 2, 2, 3, 3, 3, 34, 86, 120,
112, 63, 29, 5, 3, 2, 3, 3, 4, 44, 59, 59, 59, 59, 93, 127,
73, 3, 2, 2, 2, 65, 127, 127, 53, 2, 2, 2, 2, 2, 2, 2,
2, 2, 32, 122, 125, 40, 3, 3, 2, 3, 3, 3, 3, 2, 2, 2,
2, 7, 97, 127, 105, 10, 3, 3, 3, 2, 2, 2, 52, 127, 126, 45,
5, 88, 127, 78, 2, 2, 2, 2, 3, 93, 127, 127, 83, 9, 117, 127,
99, 7, 2, 2, 3, 3, 72, 111, 94, 20, 101, 111, 55, 2, 3, 5
}, {
6, 5, 6, 6, 6, 60, 249, 246, 40, 6, 5, 5, 5, 5, 13, 21,
22, 22, 22, 47, 174, 254, 193, 49, 6, 5, 6, 16, 37, 36, 38, 83,
183, 249, 209, 116, 23, 5, 6, 6, 6, 6, 7, 6, 5, 5, 123, 255,
149, 5, 5, 5, 5, 129, 255, 255, 193, 42, 10, 8, 44, 61, 12, 5,
6, 6, 7, 124, 243, 225, 82, 17, 6, 7, 7, 6, 6, 6, 5, 5,
6, 20, 208, 255, 192, 6, 6, 5, 6, 5, 6, 5, 51, 237, 255, 199,
149, 236, 249, 87, 6, 5, 5, 5, 5, 184, 255, 254, 72, 38, 238, 255,
196, 14, 7, 6, 6, 5, 17, 24, 20, 8, 23, 24, 15, 5, 5, 5
}, {
7, 6, 6, 6, 5, 55, 226, 221, 38, 6, 5, 5, 5, 5, 96, 192,
191, 192, 192, 191, 197, 234, 234, 151, 7, 6, 6, 74, 209, 209, 209, 210,
210, 230, 235, 231, 85, 6, 6, 5, 21, 152, 174, 174, 174, 175, 204, 235,
131, 5, 5, 5, 5, 53, 202, 233, 234, 210, 180, 176, 209, 151, 15, 5,
6, 6, 6, 7, 63, 169, 215, 184, 148, 128, 14, 6, 6, 6, 6, 6,
6, 18, 189, 235, 174, 6, 6, 6, 7, 6, 7, 6, 8, 82, 205, 242,
244, 215, 115, 11, 6, 7, 6, 6, 6, 90, 219, 234, 205, 204, 235, 218,
100, 7, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
6, 6, 6, 7, 5, 13, 39, 36, 10, 6, 6, 5, 5, 5, 23, 40,
40, 40, 39, 40, 40, 40, 39, 29, 6, 6, 6, 17, 38, 40, 40, 39,
40, 41, 39, 41, 17, 6, 6, 6, 11, 50, 58, 49, 39, 38, 39, 38,
25, 5, 5, 5, 5, 12, 37, 56, 58, 57, 58, 57, 51, 21, 6, 6,
6, 6, 6, 7, 5, 5, 27, 38, 39, 39, 10, 6, 6, 6, 7, 6,
5, 7, 33, 40, 30, 6, 6, 7, 6, 5, 6, 6, 18, 25, 36, 68,
71, 40, 24, 23, 23, 9, 5, 6, 6, 6, 26, 40, 40, 40, 38, 25,
6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
5, 137, 201, 200, 201, 201, 201, 200, 201, 168, 18, 5, 5, 5, 5, 5,
5, 6, 18, 25, 36, 44, 59, 51, 10, 7, 5, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 5, 15, 168, 217, 123, 5, 6, 6, 6,
6, 6, 5, 5, 5, 76, 192, 194, 195, 195, 194, 210, 217, 158, 6, 5,
6, 6, 5, 5, 5, 6, 6, 5, 6, 6, 6, 6, 6, 5, 5, 16,
78, 78, 78, 79, 78, 79, 62, 10, 5, 6, 6, 10, 125, 175, 176, 177,
175, 182, 216, 218, 183, 33, 6, 6, 6, 7, 6, 6, 6, 6, 5, 6,
6, 6, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
5, 173, 247, 178, 168, 170, 169, 169, 169, 140, 15, 5, 5, 5, 61, 172,
187, 204, 213, 220, 230, 238, 247, 212, 23, 5, 5, 6, 6, 6, 6, 19,
121, 179, 147, 36, 7, 6, 5, 8, 45, 209, 255, 166, 44, 43, 43, 43,
42, 28, 5, 5, 5, 18, 36, 37, 37, 37, 74, 235, 255, 183, 6, 6,
6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 5, 6, 6, 45,
249, 248, 254, 255, 251, 248, 192, 16, 6, 6, 7, 7, 16, 22, 22, 22,
22, 45, 243, 255, 134, 8, 6, 5, 6, 24, 78, 83, 60, 10, 5, 6,
6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
5, 173, 228, 26, 7, 6, 5, 6, 6, 5, 5, 5, 5, 5, 111, 255,
251, 246, 232, 226, 210, 202, 190, 147, 17, 6, 6, 7, 6, 6, 62, 196,
252, 181, 49, 7, 6, 6, 6, 23, 200, 252, 255, 248, 237, 238, 238, 238,
238, 151, 5, 5, 5, 5, 6, 5, 6, 30, 201, 255, 245, 85, 5, 6,
6, 6, 6, 7, 6, 6, 6, 6, 7, 6, 6, 7, 6, 7, 5, 12,
51, 52, 184, 255, 105, 52, 40, 8, 6, 5, 6, 7, 33, 44, 44, 44,
44, 66, 244, 255, 144, 11, 6, 6, 6, 21, 123, 236, 244, 153, 32, 6,
6, 7, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
5, 173, 228, 27, 6, 6, 6, 5, 5, 6, 5, 5, 5, 5, 28, 70,
75, 85, 81, 93, 86, 97, 84, 5, 6, 6, 8, 6, 21, 132, 239, 230,
106, 19, 6, 6, 6, 7, 6, 13, 85, 215, 255, 191, 96, 96, 96, 96,
96, 62, 5, 5, 5, 6, 6, 6, 17, 175, 255, 249, 114, 8, 5, 7,
5, 5, 23, 28, 27, 27, 12, 22, 28, 28, 27, 11, 5, 6, 6, 6,
6, 6, 169, 255, 71, 5, 6, 7, 6, 6, 6, 12, 174, 240, 240, 240,
239, 241, 255, 255, 230, 43, 6, 6, 6, 7, 7, 53, 183, 253, 214, 83,
9, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
5, 173, 228, 26, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 101,
226, 236, 240, 249, 251, 255, 213, 6, 6, 6, 5, 5, 47, 211, 255, 184,
36, 6, 6, 6, 5, 7, 6, 6, 6, 158, 255, 179, 7, 5, 5, 5,
5, 5, 5, 5, 5, 5, 6, 12, 146, 253, 253, 143, 11, 6, 6, 6,
6, 13, 193, 227, 227, 225, 47, 199, 226, 227, 216, 39, 5, 6, 6, 7,
6, 6, 168, 255, 70, 7, 6, 5, 6, 6, 6, 7, 44, 60, 60, 60,
60, 79, 246, 255, 152, 14, 6, 6, 6, 6, 5, 7, 17, 130, 253, 247,
132, 10, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
2, 86, 114, 13, 3, 3, 3, 2, 2, 2, 3, 3, 2, 2, 2, 49,
107, 101, 97, 90, 83, 78, 54, 2, 3, 3, 3, 3, 3, 14, 75, 123,
110, 45, 5, 2, 3, 3, 2, 3, 4, 42, 127, 114, 16, 3, 3, 3,
2, 2, 2, 2, 2, 2, 4, 54, 124, 127, 89, 8, 2, 3, 3, 3,
2, 4, 24, 28, 28, 26, 6, 25, 28, 28, 26, 4, 2, 3, 3, 3,
3, 3, 83, 127, 35, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3,
2, 15, 120, 127, 64, 3, 2, 3, 2, 2, 3, 3, 40, 106, 126, 92,
27, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5
}, {
3, 86, 114, 13, 3, 3, 3, 2, 2, 2, 3, 3, 2, 3, 11, 33,
47, 45, 52, 58, 67, 79, 83, 80, 9, 4, 3, 3, 3, 3, 5, 37,
103, 118, 73, 12, 3, 3, 3, 3, 3, 10, 98, 127, 67, 3, 3, 3,
3, 2, 2, 2, 2, 3, 38, 120, 127, 103, 17, 3, 3, 3, 3, 3,
3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
3, 3, 83, 127, 35, 2, 3, 3, 2, 3, 3, 2, 3, 3, 3, 3,
3, 25, 126, 127, 63, 3, 3, 3, 3, 3, 15, 77, 123, 116, 55, 9,
3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5
}, {
3, 86, 121, 71, 65, 65, 65, 65, 64, 64, 64, 33, 2, 3, 51, 121,
125, 126, 127, 127, 127, 127, 127, 110, 12, 3, 3, 3, 22, 26, 27, 26,
34, 43, 42, 23, 3, 3, 3, 3, 3, 3, 29, 114, 122, 51, 5, 3,
3, 2, 2, 2, 2, 21, 113, 127, 113, 26, 3, 3, 3, 2, 3, 3,
3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 61,
81, 81, 112, 127, 94, 81, 81, 35, 3, 2, 3, 3, 2, 3, 3, 3,
10, 89, 127, 127, 53, 3, 3, 3, 3, 16, 77, 98, 84, 23, 3, 3,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5
}, {
3, 82, 121, 121, 121, 121, 121, 121, 121, 121, 121, 61, 4, 3, 42, 89,
84, 76, 71, 57, 52, 40, 31, 19, 4, 3, 2, 3, 98, 115, 115, 115,
115, 114, 115, 82, 6, 3, 2, 3, 3, 3, 3, 25, 91, 122, 88, 46,
28, 13, 2, 2, 2, 40, 126, 127, 73, 40, 40, 39, 40, 33, 3, 3,
3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 7, 90,
121, 121, 121, 121, 121, 121, 121, 53, 3, 3, 3, 5, 60, 82, 83, 83,
107, 127, 127, 109, 18, 3, 3, 3, 3, 4, 7, 8, 5, 3, 3, 3,
2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5
}, {
2, 12, 17, 17, 16, 17, 17, 16, 16, 17, 16, 9, 2, 2, 4, 5,
2, 3, 3, 2, 3, 3, 2, 2, 2, 2, 2, 2, 15, 17, 17, 16,
17, 17, 17, 12, 3, 3, 3, 3, 2, 3, 2, 3, 7, 32, 63, 69,
58, 20, 3, 3, 2, 26, 82, 83, 82, 81, 82, 82, 81, 67, 2, 3,
3, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 13,
16, 17, 17, 17, 17, 17, 17, 9, 3, 3, 2, 5, 62, 83, 83, 83,
82, 83, 71, 22, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 3,
3, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 2, 5
}, {
2, 2, 2, 3, 3, 3, 14, 28, 29, 10, 3, 2, 2, 2, 3, 3,
3, 2, 2, 3, 3, 3, 3, 2, 2, 2, 3, 7, 27, 29, 6, 3,
2, 4, 23, 28, 11, 3, 3, 3, 11, 29, 28, 28, 29, 28, 29, 28,
29, 24, 4, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3,
3, 3, 3, 3, 3, 2, 2, 2, 3, 23, 28, 26, 4, 3, 3, 3,
17, 29, 13, 3, 10, 28, 20, 3, 2, 3, 3, 2, 4, 27, 27, 4,
3, 19, 25, 5, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 12, 28,
17, 3, 3, 3, 3, 3, 3, 3, 5, 15, 16, 5, 3, 3, 3, 5
}, {
2, 2, 2, 3, 3, 3, 36, 121, 122, 51, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 4, 3, 2, 2, 2, 2, 3, 24, 114, 122, 18, 3,
2, 15, 113, 115, 19, 3, 3, 3, 38, 122, 122, 122, 122, 122, 122, 122,
122, 101, 9, 2, 8, 96, 103, 104, 103, 103, 104, 103, 103, 103, 59, 3,
3, 15, 43, 42, 43, 43, 43, 43, 45, 103, 122, 113, 7, 3, 3, 2,
73, 122, 55, 2, 38, 122, 85, 3, 2, 3, 3, 3, 10, 115, 114, 8,
3, 76, 112, 15, 2, 2, 2, 2, 11, 49, 53, 53, 53, 53, 79, 121,
84, 23, 3, 3, 3, 3, 14, 30, 44, 115, 115, 48, 30, 18, 3, 5
}, {
2, 2, 2, 2, 3, 3, 18, 116, 127, 84, 4, 2, 2, 2, 2, 3,
3, 38, 104, 105, 78, 3, 2, 2, 2, 2, 2, 26, 121, 127, 18, 2,
2, 52, 127, 92, 6, 3, 2, 3, 34, 127, 127, 77, 35, 35, 36, 35,
35, 28, 4, 3, 10, 120, 127, 103, 80, 80, 80, 80, 80, 80, 47, 2,
3, 37, 118, 117, 118, 118, 118, 117, 119, 126, 127, 118, 7, 2, 3, 3,
79, 127, 59, 3, 41, 127, 89, 2, 3, 3, 3, 3, 48, 125, 124, 75,
73, 107, 123, 60, 2, 2, 2, 2, 22, 119, 112, 93, 93, 93, 114, 127,
104, 39, 3, 3, 3, 3, 53, 122, 124, 127, 127, 124, 122, 75, 2, 6
}, {
6, 5, 7, 10, 13, 12, 9, 192, 255, 221, 24, 6, 7, 6, 6, 6,
6, 97, 255, 255, 198, 7, 6, 5, 5, 5, 6, 70, 249, 255, 38, 8,
11, 182, 253, 103, 6, 7, 6, 6, 48, 255, 255, 120, 58, 146, 70, 6,
6, 6, 6, 7, 17, 229, 255, 135, 6, 7, 7, 6, 6, 6, 7, 7,
7, 12, 28, 28, 28, 29, 29, 28, 35, 200, 255, 237, 15, 5, 6, 6,
174, 255, 99, 6, 83, 255, 177, 5, 6, 7, 7, 10, 104, 251, 250, 164,
160, 219, 247, 130, 5, 5, 5, 5, 24, 223, 173, 17, 12, 16, 176, 252,
62, 8, 7, 5, 8, 6, 56, 134, 155, 252, 253, 160, 134, 78, 6, 5
}, {
5, 6, 24, 197, 233, 207, 31, 128, 255, 255, 62, 6, 6, 6, 6, 5,
6, 48, 130, 131, 97, 6, 5, 5, 5, 5, 5, 53, 242, 255, 39, 6,
16, 145, 151, 26, 7, 6, 7, 6, 36, 237, 255, 237, 246, 251, 80, 6,
6, 5, 6, 6, 15, 212, 255, 180, 11, 6, 6, 6, 7, 6, 7, 5,
5, 5, 5, 5, 5, 5, 5, 5, 12, 194, 255, 236, 15, 6, 6, 5,
172, 255, 86, 5, 56, 184, 126, 5, 5, 6, 6, 6, 22, 242, 240, 17,
5, 115, 166, 24, 5, 5, 5, 5, 6, 135, 232, 48, 8, 11, 203, 247,
29, 6, 7, 5, 5, 6, 30, 68, 74, 248, 248, 104, 50, 5, 6, 6
}, {
6, 6, 73, 253, 255, 172, 7, 71, 249, 255, 134, 6, 6, 6, 5, 5,
5, 6, 6, 6, 5, 6, 5, 5, 5, 5, 6, 28, 231, 255, 54, 7,
6, 6, 7, 6, 6, 7, 6, 9, 126, 248, 255, 241, 145, 57, 12, 7,
6, 5, 7, 7, 9, 133, 254, 240, 49, 6, 6, 17, 71, 64, 16, 8,
6, 5, 5, 5, 5, 5, 5, 5, 12, 195, 255, 237, 14, 6, 6, 6,
144, 255, 103, 5, 8, 12, 12, 5, 6, 6, 6, 6, 17, 223, 240, 21,
6, 11, 12, 5, 5, 5, 5, 5, 6, 16, 110, 161, 70, 12, 229, 227,
20, 6, 6, 5, 5, 7, 122, 247, 133, 246, 249, 236, 180, 6, 7, 6
}, {
6, 6, 154, 255, 254, 90, 6, 22, 224, 255, 189, 14, 6, 6, 6, 6,
7, 39, 100, 102, 75, 6, 5, 5, 5, 5, 6, 8, 191, 255, 117, 6,
6, 6, 6, 6, 5, 6, 5, 15, 184, 213, 255, 227, 34, 6, 6, 7,
6, 6, 6, 7, 6, 23, 195, 255, 198, 33, 6, 93, 248, 220, 26, 6,
5, 5, 5, 5, 5, 5, 5, 5, 16, 219, 255, 237, 15, 5, 5, 6,
81, 255, 156, 7, 6, 5, 6, 5, 5, 6, 6, 6, 11, 173, 249, 67,
6, 6, 6, 7, 6, 5, 5, 5, 6, 6, 6, 14, 14, 30, 238, 199,
15, 7, 6, 6, 6, 6, 156, 252, 115, 247, 248, 193, 199, 14, 5, 5
}, {
7, 26, 217, 255, 246, 110, 43, 17, 176, 255, 239, 31, 6, 5, 6, 5,
6, 96, 254, 255, 195, 6, 5, 5, 5, 5, 6, 5, 84, 250, 210, 25,
6, 5, 6, 6, 6, 5, 5, 7, 28, 31, 204, 255, 132, 7, 6, 6,
6, 5, 5, 5, 5, 5, 33, 176, 252, 211, 79, 162, 255, 185, 6, 5,
5, 6, 6, 5, 5, 5, 5, 6, 84, 250, 255, 237, 16, 5, 5, 5,
25, 211, 225, 34, 6, 6, 6, 6, 6, 5, 5, 5, 5, 75, 250, 158,
9, 6, 6, 5, 5, 5, 5, 5, 5, 6, 5, 5, 6, 57, 246, 173,
11, 6, 6, 5, 6, 12, 179, 241, 91, 247, 248, 102, 227, 62, 6, 5
}, {
6, 77, 254, 255, 255, 253, 244, 224, 227, 255, 255, 83, 6, 6, 6, 5,
6, 93, 247, 248, 191, 6, 5, 5, 5, 5, 6, 7, 10, 155, 253, 162,
25, 7, 6, 5, 6, 6, 6, 5, 5, 5, 60, 227, 245, 113, 18, 7,
6, 5, 5, 5, 5, 6, 5, 15, 79, 163, 214, 251, 255, 113, 6, 6,
6, 11, 20, 20, 20, 21, 36, 100, 230, 255, 255, 197, 11, 5, 5, 5,
5, 72, 236, 171, 24, 7, 6, 7, 5, 5, 5, 5, 6, 11, 147, 245,
101, 10, 7, 7, 5, 5, 5, 5, 5, 6, 6, 6, 7, 86, 253, 144,
6, 6, 5, 5, 5, 19, 203, 234, 81, 247, 249, 67, 101, 169, 21, 5
}, {
6, 153, 255, 253, 217, 234, 250, 255, 255, 255, 255, 147, 6, 6, 6, 6,
5, 12, 26, 26, 20, 5, 5, 5, 5, 5, 6, 6, 6, 17, 120, 231,
210, 123, 76, 54, 8, 7, 5, 5, 5, 5, 6, 51, 177, 242, 198, 126,
83, 30, 5, 5, 5, 6, 6, 7, 6, 9, 60, 252, 242, 56, 6, 6,
5, 79, 241, 240, 240, 241, 244, 251, 255, 254, 225, 62, 5, 5, 5, 5,
5, 7, 62, 192, 188, 85, 30, 6, 6, 5, 5, 5, 5, 5, 17, 113,
212, 142, 76, 24, 5, 5, 5, 5, 21, 95, 105, 106, 105, 168, 255, 180,
104, 45, 7, 6, 7, 21, 206, 247, 226, 249, 249, 223, 218, 214, 35, 6
}, {
8, 85, 114, 104, 31, 25, 58, 105, 114, 114, 114, 70, 6, 5, 5, 5,
6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 6, 6, 6, 5, 8, 31,
102, 137, 122, 59, 6, 5, 5, 5, 9, 11, 11, 11, 19, 49, 96, 118,
97, 29, 6, 5, 5, 5, 7, 6, 6, 5, 29, 83, 77, 13, 6, 6,
5, 38, 117, 120, 120, 119, 119, 120, 120, 105, 34, 6, 6, 5, 5, 5,
5, 5, 6, 14, 61, 101, 58, 6, 6, 5, 5, 5, 5, 6, 6, 8,
21, 68, 86, 21, 5, 5, 5, 5, 21, 99, 110, 110, 110, 112, 115, 112,
109, 46, 6, 6, 6, 8, 40, 54, 56, 55, 54, 55, 56, 51, 12, 6
}, {
3, 3, 20, 57, 57, 57, 57, 57, 57, 37, 2, 3, 3, 14, 66, 69,
69, 69, 69, 69, 69, 69, 69, 69, 38, 3, 2, 2, 2, 2, 3, 7,
8, 3, 2, 2, 2, 2, 3, 6, 62, 84, 84, 84, 84, 84, 84, 84,
84, 84, 23, 3, 3, 27, 53, 57, 57, 52, 52, 53, 53, 32, 3, 3,
3, 3, 50, 83, 84, 84, 84, 84, 84, 81, 26, 3, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 57, 69, 69, 69, 69,
69, 68, 69, 69, 67, 19, 3, 3, 2, 2, 2, 2, 3, 10, 6, 3,
2, 2, 2, 2, 3, 37, 69, 69, 26, 3, 3, 3, 3, 2, 3, 6
}, {
3, 3, 45, 127, 115, 96, 96, 105, 127, 83, 3, 3, 3, 24, 123, 127,
118, 110, 110, 110, 110, 110, 117, 127, 72, 3, 3, 2, 2, 2, 3, 55,
79, 5, 2, 2, 2, 2, 3, 7, 96, 127, 127, 123, 120, 120, 120, 120,
120, 120, 32, 3, 3, 20, 56, 126, 113, 39, 37, 37, 37, 22, 3, 3,
3, 3, 49, 81, 81, 81, 87, 125, 119, 81, 24, 3, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 5, 90, 110, 110, 110, 110,
110, 111, 110, 110, 107, 29, 3, 3, 3, 2, 2, 2, 4, 99, 46, 3,
2, 2, 2, 2, 3, 65, 127, 127, 58, 3, 3, 4, 5, 3, 3, 6
}, {
2, 2, 46, 127, 74, 6, 6, 38, 125, 83, 3, 3, 3, 24, 123, 127,
54, 7, 7, 7, 7, 7, 51, 127, 71, 2, 2, 2, 2, 2, 3, 58,
89, 5, 2, 2, 2, 2, 3, 4, 90, 127, 125, 39, 9, 9, 9, 9,
9, 9, 5, 3, 3, 16, 49, 126, 113, 31, 29, 29, 29, 18, 3, 3,
3, 3, 36, 62, 62, 62, 70, 124, 102, 9, 3, 3, 3, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 59, 65, 65, 65, 65,
65, 65, 65, 65, 65, 43, 3, 3, 2, 2, 2, 2, 4, 104, 48, 3,
2, 2, 2, 2, 3, 48, 127, 127, 73, 14, 42, 77, 34, 3, 3, 6
}, {
3, 3, 46, 127, 72, 2, 3, 35, 125, 83, 3, 3, 3, 24, 123, 127,
52, 3, 2, 2, 2, 2, 43, 118, 66, 2, 2, 2, 2, 2, 2, 58,
90, 5, 2, 2, 2, 2, 3, 2, 72, 127, 125, 32, 3, 2, 2, 2,
2, 2, 3, 3, 3, 62, 125, 127, 127, 126, 124, 123, 123, 74, 3, 3,
3, 3, 73, 125, 127, 125, 121, 124, 119, 16, 3, 3, 3, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 7, 118, 127, 127, 125, 124,
125, 125, 125, 124, 125, 88, 3, 3, 2, 2, 2, 2, 4, 105, 49, 3,
2, 2, 2, 2, 3, 31, 127, 127, 120, 118, 126, 120, 39, 3, 3, 5
}, {
2, 2, 46, 127, 93, 48, 47, 68, 126, 83, 3, 3, 2, 24, 123, 127,
52, 3, 3, 2, 2, 2, 4, 8, 5, 2, 2, 2, 2, 2, 4, 40,
69, 5, 2, 2, 2, 2, 3, 3, 38, 127, 127, 43, 3, 3, 2, 2,
2, 2, 2, 2, 2, 19, 54, 126, 127, 122, 49, 36, 36, 22, 3, 3,
3, 3, 14, 75, 127, 87, 22, 42, 118, 70, 10, 4, 3, 3, 3, 18,
32, 31, 31, 31, 31, 31, 27, 5, 2, 3, 7, 111, 127, 119, 41, 37,
36, 36, 36, 36, 36, 26, 3, 3, 2, 2, 2, 2, 3, 105, 48, 2,
2, 2, 2, 2, 22, 105, 127, 127, 126, 101, 57, 19, 4, 2, 2, 5
}, {
2, 2, 46, 127, 113, 91, 91, 102, 127, 83, 3, 3, 3, 18, 121, 127,
62, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 28,
34, 3, 2, 2, 2, 2, 3, 3, 13, 107, 127, 74, 4, 3, 2, 2,
2, 2, 2, 2, 2, 3, 28, 125, 127, 124, 35, 3, 3, 4, 3, 3,
3, 3, 3, 53, 127, 86, 4, 3, 30, 86, 81, 16, 3, 3, 3, 56,
107, 107, 100, 80, 100, 107, 90, 11, 3, 3, 4, 84, 127, 124, 31, 3,
2, 2, 2, 2, 2, 3, 4, 3, 2, 2, 2, 2, 3, 105, 48, 2,
2, 2, 2, 2, 34, 123, 117, 127, 119, 24, 3, 2, 2, 2, 2, 5
}, {
2, 2, 45, 127, 74, 4, 5, 37, 126, 83, 3, 3, 2, 6, 94, 127,
107, 12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 57,
88, 5, 2, 2, 2, 2, 2, 3, 3, 64, 127, 116, 23, 3, 2, 2,
2, 2, 2, 2, 2, 2, 27, 125, 127, 127, 64, 3, 3, 3, 3, 2,
3, 3, 3, 16, 114, 112, 13, 3, 3, 4, 6, 3, 3, 3, 3, 5,
6, 6, 2, 0, 2, 6, 5, 3, 3, 2, 3, 38, 124, 127, 89, 8,
3, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 3, 105, 48, 2,
2, 2, 2, 2, 14, 31, 21, 115, 127, 76, 4, 2, 2, 2, 2, 5
}, {
2, 2, 46, 127, 74, 3, 3, 35, 125, 83, 2, 3, 3, 2, 30, 115,
127, 76, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 58,
89, 5, 2, 2, 2, 2, 3, 3, 9, 92, 127, 127, 94, 16, 2, 2,
2, 2, 2, 2, 2, 2, 27, 125, 119, 114, 111, 15, 3, 3, 3, 3,
2, 3, 3, 4, 57, 126, 65, 5, 3, 3, 2, 3, 3, 3, 2, 2,
3, 2, 0, 0, 0, 3, 3, 3, 2, 3, 3, 5, 73, 126, 126, 70,
8, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 3, 105, 48, 2,
2, 2, 2, 2, 3, 3, 3, 52, 124, 122, 52, 5, 2, 2, 2, 5
}, {
6, 6, 91, 255, 191, 104, 106, 146, 253, 166, 6, 5, 5, 5, 6, 53,
201, 250, 172, 48, 21, 14, 15, 9, 6, 6, 5, 5, 5, 5, 6, 115,
178, 11, 5, 5, 5, 5, 5, 10, 118, 255, 234, 175, 246, 212, 89, 29,
21, 27, 9, 6, 6, 6, 56, 251, 215, 66, 225, 178, 33, 6, 5, 5,
5, 6, 5, 6, 10, 138, 242, 126, 24, 13, 7, 6, 6, 5, 5, 5,
5, 7, 7, 4, 5, 5, 5, 5, 5, 6, 7, 6, 14, 116, 235, 254,
189, 67, 22, 15, 16, 14, 6, 5, 7, 6, 7, 6, 7, 164, 76, 6,
6, 6, 6, 6, 5, 5, 5, 9, 118, 244, 248, 151, 51, 24, 23, 11
}, {
6, 6, 60, 174, 174, 174, 173, 173, 174, 113, 6, 5, 5, 5, 5, 6,
20, 100, 188, 224, 187, 169, 143, 29, 7, 6, 5, 5, 5, 5, 7, 44,
79, 8, 5, 5, 5, 5, 5, 41, 220, 235, 117, 9, 70, 165, 226, 208,
194, 179, 25, 6, 6, 6, 51, 232, 196, 10, 41, 157, 193, 41, 5, 5,
5, 6, 6, 6, 6, 7, 79, 172, 182, 150, 16, 5, 7, 5, 5, 5,
5, 7, 5, 6, 5, 5, 5, 5, 5, 6, 5, 6, 6, 7, 38, 118,
194, 230, 195, 169, 166, 92, 6, 6, 6, 6, 6, 6, 5, 7, 6, 6,
7, 6, 5, 6, 5, 5, 5, 5, 8, 64, 164, 226, 233, 200, 169, 48
}, {
5, 6, 7, 11, 15, 11, 9, 15, 9, 6, 5, 5, 5, 5, 6, 6,
6, 6, 5, 12, 31, 27, 6, 6, 5, 6, 6, 5, 5, 5, 6, 7,
6, 7, 5, 5, 5, 5, 7, 16, 31, 29, 10, 7, 6, 7, 21, 40,
34, 16, 8, 6, 10, 14, 20, 40, 34, 16, 15, 15, 26, 13, 5, 5,
5, 7, 15, 15, 15, 16, 15, 14, 21, 16, 6, 6, 6, 5, 5, 5,
5, 6, 12, 14, 10, 5, 5, 5, 5, 6, 6, 11, 14, 14, 15, 15,
15, 25, 41, 41, 25, 6, 7, 6, 6, 12, 15, 10, 6, 15, 11, 13,
14, 6, 6, 6, 5, 5, 5, 5, 6, 10, 24, 25, 29, 25, 8, 5
}, {
6, 6, 6, 120, 192, 118, 64, 192, 63, 6, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 5, 5, 5, 5, 6, 6,
6, 6, 5, 5, 5, 5, 6, 7, 6, 6, 5, 6, 5, 34, 176, 192,
191, 192, 52, 6, 93, 193, 192, 192, 192, 191, 191, 191, 191, 68, 5, 5,
5, 50, 187, 192, 192, 191, 192, 193, 193, 182, 19, 6, 6, 6, 19, 24,
25, 25, 146, 192, 129, 24, 24, 24, 19, 6, 5, 77, 163, 163, 161, 163,
162, 164, 184, 192, 163, 18, 7, 5, 6, 119, 192, 83, 36, 181, 108, 153,
154, 14, 6, 5, 5, 15, 24, 24, 26, 70, 216, 168, 21, 9, 6, 5
}, {
5, 5, 5, 180, 255, 134, 78, 254, 86, 6, 5, 5, 5, 5, 6, 6,
6, 6, 34, 61, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 6, 17, 15, 6, 5, 5, 5, 43, 234, 252,
253, 252, 67, 6, 126, 255, 214, 166, 167, 166, 166, 166, 166, 58, 5, 5,
5, 70, 252, 255, 219, 167, 167, 166, 212, 249, 56, 6, 6, 11, 153, 218,
218, 218, 247, 255, 244, 218, 219, 218, 162, 13, 7, 26, 35, 36, 37, 37,
36, 43, 199, 255, 170, 8, 6, 6, 6, 184, 255, 114, 98, 254, 109, 238,
159, 9, 6, 6, 6, 116, 219, 218, 219, 229, 255, 248, 192, 27, 6, 6
}, {
5, 5, 14, 200, 255, 103, 64, 249, 85, 5, 6, 5, 5, 5, 6, 6,
89, 71, 116, 208, 44, 114, 20, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 7, 90, 83, 6, 5, 5, 5, 16, 69, 76,
76, 76, 22, 5, 124, 255, 134, 6, 13, 40, 37, 7, 6, 5, 5, 5,
5, 64, 249, 255, 144, 5, 8, 7, 52, 233, 139, 8, 7, 7, 138, 255,
255, 201, 162, 162, 163, 162, 162, 162, 120, 11, 7, 145, 245, 245, 244, 244,
244, 243, 253, 255, 224, 25, 6, 6, 6, 174, 255, 110, 164, 243, 120, 252,
99, 6, 7, 6, 6, 139, 250, 154, 129, 175, 255, 226, 112, 19, 7, 5
}, {
5, 5, 24, 215, 255, 79, 37, 234, 90, 6, 6, 5, 5, 5, 6, 6,
104, 236, 237, 247, 234, 172, 18, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 6, 70, 144, 6, 5, 5, 5, 32, 164, 177,
177, 176, 50, 6, 115, 255, 140, 8, 59, 243, 218, 8, 6, 5, 5, 5,
5, 47, 240, 255, 153, 46, 87, 143, 159, 86, 207, 49, 7, 6, 51, 244,
255, 180, 15, 6, 6, 5, 5, 5, 5, 6, 6, 131, 254, 144, 97, 97,
97, 102, 214, 255, 183, 13, 6, 6, 6, 153, 255, 91, 202, 175, 140, 222,
33, 5, 6, 6, 6, 140, 242, 54, 6, 98, 255, 193, 5, 5, 5, 6
}, {
5, 5, 36, 233, 251, 62, 11, 208, 136, 7, 6, 5, 5, 5, 5, 6,
76, 219, 247, 253, 240, 134, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 7, 32, 218, 47, 5, 5, 5, 42, 232, 250,
250, 249, 67, 5, 101, 255, 183, 12, 64, 255, 228, 7, 7, 5, 5, 5,
5, 16, 219, 255, 245, 249, 255, 238, 185, 17, 37, 35, 7, 5, 9, 128,
255, 253, 146, 17, 5, 5, 5, 5, 5, 6, 6, 71, 249, 124, 8, 6,
7, 14, 190, 255, 159, 6, 6, 6, 5, 123, 255, 111, 25, 19, 21, 25,
8, 5, 6, 6, 6, 141, 242, 53, 6, 73, 255, 195, 8, 6, 7, 5
}, {
2, 2, 25, 124, 120, 23, 3, 73, 93, 6, 3, 2, 2, 2, 3, 3,
55, 63, 65, 107, 44, 81, 11, 2, 2, 2, 2, 2, 3, 4, 2, 2,
2, 2, 3, 3, 2, 2, 3, 5, 85, 99, 20, 2, 3, 7, 32, 35,
35, 34, 10, 3, 28, 122, 121, 29, 32, 127, 117, 14, 3, 2, 2, 2,
2, 3, 75, 127, 126, 93, 52, 22, 3, 2, 2, 2, 2, 3, 29, 99,
127, 127, 126, 90, 28, 6, 3, 3, 3, 3, 3, 5, 77, 112, 29, 4,
3, 7, 96, 127, 80, 2, 2, 3, 3, 35, 125, 76, 3, 2, 3, 3,
2, 2, 2, 2, 2, 70, 121, 26, 3, 22, 120, 107, 11, 3, 2, 5
}, {
3, 3, 29, 127, 113, 16, 2, 30, 116, 25, 3, 2, 2, 2, 3, 3,
2, 3, 36, 71, 3, 3, 2, 2, 2, 2, 2, 3, 40, 65, 65, 65,
65, 65, 65, 47, 4, 3, 3, 2, 32, 121, 110, 56, 22, 11, 10, 10,
10, 10, 4, 3, 5, 74, 125, 112, 82, 127, 125, 44, 3, 2, 2, 2,
2, 3, 25, 119, 125, 39, 4, 3, 2, 2, 2, 2, 2, 7, 92, 127,
122, 77, 106, 127, 120, 92, 62, 38, 9, 3, 3, 3, 8, 57, 83, 37,
3, 12, 109, 127, 79, 3, 3, 3, 3, 10, 106, 111, 15, 4, 3, 3,
2, 2, 2, 2, 3, 71, 121, 27, 3, 6, 91, 124, 32, 3, 3, 6
}, {
3, 3, 42, 127, 107, 10, 3, 3, 63, 83, 10, 2, 2, 2, 2, 3,
3, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 46, 76, 76, 76,
76, 76, 75, 54, 4, 2, 3, 3, 4, 58, 123, 127, 119, 106, 104, 104,
104, 104, 28, 3, 3, 7, 39, 58, 60, 99, 127, 101, 14, 2, 2, 2,
2, 2, 2, 60, 125, 112, 28, 3, 3, 2, 2, 2, 2, 7, 93, 103,
36, 3, 94, 127, 93, 36, 55, 58, 14, 3, 3, 3, 3, 3, 3, 3,
4, 56, 127, 127, 76, 3, 2, 3, 2, 3, 48, 124, 81, 10, 3, 2,
2, 2, 2, 2, 3, 70, 126, 78, 48, 14, 28, 115, 93, 10, 3, 5
}, {
2, 2, 56, 127, 99, 4, 3, 2, 6, 34, 11, 2, 2, 3, 3, 3,
2, 3, 2, 3, 3, 3, 2, 2, 2, 2, 3, 3, 2, 3, 2, 2,
2, 2, 3, 3, 3, 3, 3, 3, 2, 4, 45, 103, 125, 127, 127, 127,
127, 127, 34, 3, 3, 3, 3, 3, 2, 22, 104, 127, 101, 39, 12, 2,
2, 2, 3, 5, 55, 117, 115, 58, 22, 11, 6, 2, 2, 6, 46, 28,
18, 19, 99, 127, 90, 19, 18, 18, 15, 4, 3, 33, 69, 69, 69, 69,
87, 123, 127, 122, 37, 3, 3, 3, 3, 2, 5, 64, 121, 92, 34, 10,
10, 4, 2, 3, 3, 47, 120, 124, 120, 31, 3, 35, 108, 89, 21, 7
}, {
3, 3, 58, 108, 75, 2, 3, 3, 3, 3, 2, 3, 2, 3, 3, 3,
3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2,
2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 9, 36, 63, 81, 88,
89, 88, 24, 3, 3, 3, 2, 2, 2, 3, 15, 57, 91, 98, 56, 3,
2, 2, 2, 2, 2, 22, 66, 97, 91, 74, 26, 3, 2, 5, 70, 97,
96, 97, 106, 108, 105, 97, 97, 97, 70, 6, 3, 48, 100, 100, 100, 100,
100, 100, 95, 46, 3, 2, 2, 2, 2, 2, 2, 4, 30, 72, 91, 79,
68, 11, 3, 3, 3, 5, 24, 30, 28, 10, 3, 3, 16, 61, 57, 10
}, {
2, 3, 7, 11, 8, 21, 38, 19, 3, 2, 3, 2, 3, 4, 18, 29,
28, 29, 29, 29, 29, 29, 29, 27, 8, 3, 14, 38, 38, 38, 37, 37,
37, 37, 38, 38, 37, 11, 2, 2, 2, 2, 3, 3, 3, 2, 3, 2,
3, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
3, 3, 2, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 3, 9, 11,
11, 11, 12, 12, 11, 11, 11, 11, 8, 3, 2, 3, 3, 2, 2, 2,
2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2,
2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 5
}, {
3, 3, 3, 3, 3, 84, 127, 59, 3, 3, 3, 3, 3, 3, 29, 46,
45, 47, 102, 120, 62, 46, 45, 43, 11, 3, 41, 123, 123, 123, 123, 123,
123, 123, 123, 123, 119, 31, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
3, 2, 2, 2, 2, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2,
3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5
}, {
2, 12, 89, 103, 102, 121, 127, 112, 103, 102, 64, 3, 3, 4, 74, 118,
118, 119, 125, 127, 120, 118, 118, 113, 26, 2, 16, 45, 45, 45, 45, 46,
45, 46, 46, 46, 43, 13, 2, 2, 2, 13, 58, 59, 59, 59, 58, 54,
10, 2, 2, 3, 3, 2, 2, 2, 2, 35, 38, 3, 2, 3, 2, 2,
3, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 3, 3,
3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
3, 3, 3, 2, 3, 2, 2, 3, 3, 3, 3, 3, 2, 3, 3, 5
}, {
5, 20, 140, 164, 175, 246, 253, 183, 165, 165, 103, 5, 5, 9, 166, 255,
156, 65, 65, 65, 64, 74, 217, 249, 60, 5, 80, 238, 238, 239, 237, 240,
238, 238, 238, 238, 230, 60, 5, 5, 5, 29, 132, 132, 132, 132, 133, 122,
20, 5, 5, 5, 5, 5, 6, 6, 5, 159, 173, 6, 7, 6, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
5, 6, 5, 7, 39, 234, 236, 41, 6, 7, 7, 5, 6, 9, 163, 255,
124, 6, 6, 6, 7, 17, 177, 217, 52, 6, 23, 62, 116, 252, 255, 120,
62, 61, 63, 62, 60, 18, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6,
5, 6, 5, 5, 5, 5, 6, 68, 123, 204, 213, 123, 76, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
5, 6, 6, 6, 59, 250, 213, 25, 6, 6, 6, 5, 5, 9, 164, 255,
130, 6, 6, 7, 7, 8, 27, 30, 11, 6, 6, 6, 25, 229, 255, 137,
7, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5,
6, 6, 5, 5, 5, 5, 5, 126, 225, 244, 248, 225, 140, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
6, 14, 81, 96, 141, 255, 216, 99, 97, 97, 61, 5, 5, 8, 148, 255,
181, 10, 6, 6, 6, 5, 6, 6, 7, 6, 6, 6, 6, 143, 254, 216,
25, 6, 6, 6, 7, 6, 5, 6, 5, 5, 5, 5, 5, 6, 6, 6,
6, 5, 5, 5, 5, 5, 5, 19, 30, 168, 183, 31, 21, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
6, 25, 191, 220, 242, 255, 243, 222, 220, 221, 139, 5, 5, 5, 64, 246,
244, 63, 7, 7, 6, 7, 6, 6, 8, 6, 6, 7, 6, 26, 211, 255,
145, 13, 6, 6, 5, 6, 5, 6, 6, 154, 221, 221, 221, 221, 221, 221,
124, 7, 5, 5, 5, 5, 5, 5, 5, 122, 129, 6, 6, 6, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
5, 9, 23, 27, 165, 255, 140, 26, 26, 26, 18, 5, 5, 5, 8, 111,
245, 219, 57, 6, 6, 6, 5, 7, 7, 6, 6, 6, 6, 6, 52, 211,
250, 140, 18, 6, 6, 6, 6, 6, 5, 35, 48, 49, 49, 49, 51, 50,
28, 6, 5, 5, 5, 5, 5, 5, 5, 12, 11, 6, 6, 6, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
6, 6, 6, 6, 186, 255, 95, 5, 5, 5, 5, 5, 5, 5, 5, 8,
73, 197, 236, 155, 88, 82, 44, 7, 6, 6, 7, 7, 6, 7, 6, 31,
136, 225, 207, 141, 104, 8, 6, 6, 5, 5, 5, 5, 5, 5, 6, 5,
5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 6, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}, {
5, 6, 5, 8, 84, 107, 28, 5, 5, 5, 5, 5, 5, 5, 5, 6,
5, 17, 52, 99, 103, 90, 35, 6, 5, 5, 6, 5, 6, 6, 6, 5,
6, 28, 62, 101, 58, 7, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
}
};
#endif /* MPLAYER_MATRIXVIEW_FONT_H */

View File

@ -87,6 +87,7 @@ extern struct vo_driver video_out_vdpau;
extern struct vo_driver video_out_xv;
extern struct vo_driver video_out_gl;
extern struct vo_driver video_out_gl2;
extern struct vo_driver video_out_matrixview;
extern struct vo_driver video_out_dga;
extern struct vo_driver video_out_sdl;
extern struct vo_driver video_out_3dfx;
@ -184,6 +185,9 @@ const struct vo_driver *video_out_drivers[] =
&video_out_gl,
&video_out_gl2,
#endif
#ifdef CONFIG_MATRIXVIEW
&video_out_matrixview,
#endif
#ifdef CONFIG_DGA
&video_out_dga,
#endif

325
libvo/vo_matrixview.c Normal file
View File

@ -0,0 +1,325 @@
/*
* MatrixView video output driver for MPlayer
*
* by Pigeon <pigeon at pigeond.net>
*
* Based on MatrixView the screensaver from http://rss-glx.sf.net/
*
* This file is part of MPlayer.
*
* MPlayer 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.
*
* MPlayer 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 MPlayer; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "config.h"
#include <stdint.h>
#include "mp_msg.h"
#include "subopt-helper.h"
#include "video_out.h"
#include "video_out_internal.h"
#include "gl_common.h"
#include "libswscale/swscale.h"
#include "libmpcodecs/vf_scale.h"
#include "osdep/timer.h"
#include "matrixview.h"
static const vo_info_t info =
{
"MatrixView (OpenGL)",
"matrixview",
"Pigeon <pigeon@pigeond.net>",
"Based on MatrixView from rss-glx.sf.net"
};
LIBVO_EXTERN(matrixview)
static MPGLContext glctx;
#ifdef CONFIG_GL_X11
static int wsGLXAttrib[] = {
GLX_RGBA,
GLX_RED_SIZE,1,
GLX_GREEN_SIZE,1,
GLX_BLUE_SIZE,1,
GLX_DEPTH_SIZE,1,
GLX_DOUBLEBUFFER,
None
};
#endif
static int int_pause;
static int eq_contrast;
static int eq_brightness;
static uint32_t image_width;
static uint32_t image_height;
static uint32_t image_format;
static struct SwsContext *sws;
static uint8_t *map_image[MP_MAX_PLANES];
static int map_stride[MP_MAX_PLANES];
#define DEFAULT_MATRIX_ROWS 96
#define DEFAULT_MATRIX_COLS 128
static int matrix_rows;
static int matrix_cols;
#define DEFAULT_CONTRAST 0.90f
#define CONTRAST_MULTIPLIER 0.02f
#define DEFAULT_BRIGHTNESS 1.0f
#define BRIGHTNESS_MULTIPLIER 0.02f
static void contrast_set(int value)
{
float contrast = value * CONTRAST_MULTIPLIER + DEFAULT_CONTRAST;
eq_contrast = value;
if (contrast < 0) contrast = 0;
matrixview_contrast_set(contrast);
}
static void brightness_set(int value)
{
float brightness = value * BRIGHTNESS_MULTIPLIER + DEFAULT_BRIGHTNESS;
eq_brightness = value;
if (brightness < 0) brightness = 0;
matrixview_brightness_set(brightness);
}
static int
config(uint32_t width, uint32_t height,
uint32_t d_width, uint32_t d_height,
uint32_t flags, char *title, uint32_t format)
{
image_height = height;
image_width = width;
image_format = format;
int_pause = 0;
#ifdef CONFIG_GL_WIN32
if (glctx.type == GLTYPE_W32 && !vo_w32_config(d_width, d_height, flags))
return -1;
#endif
#ifdef CONFIG_GL_X11
if (glctx.type == GLTYPE_X11) {
XVisualInfo *vinfo=glXChooseVisual( mDisplay,mScreen,wsGLXAttrib );
if (vinfo == NULL)
{
mp_msg(MSGT_VO, MSGL_ERR, "[matrixview] no GLX support present\n");
return -1;
}
mp_msg(MSGT_VO, MSGL_V, "[matrixview] GLX chose visual with ID 0x%x\n", (int)vinfo->visualid);
vo_x11_create_vo_window(vinfo, vo_dx, vo_dy, d_width, d_height, flags,
XCreateColormap(mDisplay, mRootWin, vinfo->visual, AllocNone),
"matrixview", title);
}
#endif /* CONFIG_GL_WIN32 */
if (glctx.setGlWindow(&glctx) == SET_WINDOW_FAILED)
return -1;
if(sws)
sws_freeContext(sws);
sws = sws_getContextFromCmdLine(image_width, image_height, image_format, matrix_cols, matrix_rows, IMGFMT_Y8);
if (!sws) {
mp_msg(MSGT_VO, MSGL_ERR, "[matrixview] Cannot create SwsContext context\n");
return -1;
}
if(!map_image[0])
map_image[0] = calloc(matrix_cols, matrix_rows);
map_stride[0] = matrix_cols;
matrixview_init(vo_dwidth, vo_dheight);
matrixview_matrix_resize(matrix_cols, matrix_rows);
contrast_set(eq_contrast);
brightness_set(eq_brightness);
matrixview_reshape(vo_dwidth, vo_dheight);
return 0;
}
static void check_events(void)
{
int e=glctx.check_events();
if(e & VO_EVENT_RESIZE) {
matrixview_reshape(vo_dwidth, vo_dheight);
}
if(e & VO_EVENT_EXPOSE && int_pause) flip_page();
}
static void draw_osd(void)
{
return;
}
static void flip_page(void)
{
matrixview_draw(vo_dwidth, vo_dheight, GetTimer(), 0.0, map_image[0]);
glctx.swapGlBuffers(&glctx);
}
static int draw_slice(uint8_t *src[], int stride[], int w, int h, int x, int y)
{
sws_scale(sws, src, stride, y, h, map_image, map_stride);
return 0;
}
static int draw_frame(uint8_t *src[])
{
return 0;
}
static int query_format(uint32_t format)
{
int caps = VFCAP_CSP_SUPPORTED | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE;
switch(format) {
case IMGFMT_YV12:
case IMGFMT_BGR32:
case IMGFMT_BGR24:
case IMGFMT_BGR16:
case IMGFMT_BGR15:
case IMGFMT_RGB32:
case IMGFMT_RGB24:
case IMGFMT_ARGB:
return caps;
default:
break;
}
return 0;
}
static void uninit(void)
{
if (!vo_config_count) return;
uninit_mpglcontext(&glctx);
free(map_image[0]);
map_image[0] = NULL;
sws_freeContext(sws);
sws = NULL;
}
static const opt_t subopts[] =
{
{ "rows", OPT_ARG_INT, &matrix_rows, int_pos },
{ "cols", OPT_ARG_INT, &matrix_cols, int_pos },
{ NULL }
};
static int preinit(const char *arg)
{
enum MPGLType gltype = GLTYPE_X11;
#ifdef CONFIG_GL_WIN32
gltype = GLTYPE_W32;
#endif
if(!init_mpglcontext(&glctx, gltype)) return -1;
matrix_rows = DEFAULT_MATRIX_ROWS;
matrix_cols = DEFAULT_MATRIX_COLS;
if(subopt_parse(arg, subopts) != 0) {
mp_msg(MSGT_VO, MSGL_FATAL,
"\n-vo matrixview command line help:\n"
"Example: mplayer -vo matrixview:cols=320:rows=240\n"
"\n"
"Options:\n"
"\n"
" cols=<12-320>\n"
" Specify the number of columns of the matrix view, default %d\n"
"\n"
" rows=<12-240>\n"
" Specify the number of rows of the matrix view, default %d\n"
"\n"
,
DEFAULT_MATRIX_COLS, DEFAULT_MATRIX_ROWS
);
return -1;
}
return 0;
}
static int control(uint32_t request, void *data)
{
switch (request) {
case VOCTRL_PAUSE:
case VOCTRL_RESUME:
int_pause = (request == VOCTRL_PAUSE);
return VO_TRUE;
case VOCTRL_QUERY_FORMAT:
return query_format(*(uint32_t*)data);
case VOCTRL_ONTOP:
glctx.ontop();
return VO_TRUE;
case VOCTRL_FULLSCREEN:
glctx.fullscreen();
matrixview_reshape(vo_dwidth, vo_dheight);
return VO_TRUE;
case VOCTRL_BORDER:
glctx.border();
return VO_TRUE;
case VOCTRL_GET_EQUALIZER:
{
struct voctrl_get_equalizer_args *args = data;
if (strcasecmp(args->name, "contrast") == 0)
{
*args->valueptr = eq_contrast;
}
else if (strcasecmp(args->name, "brightness") == 0)
{
*args->valueptr = eq_brightness;
}
}
return VO_TRUE;
case VOCTRL_SET_EQUALIZER:
{
struct voctrl_set_equalizer_args *args = data;
if (strcasecmp(args->name, "contrast") == 0)
{
contrast_set(args->value);
}
else if (strcasecmp(args->name, "brightness") == 0)
{
brightness_set(args->value);
}
}
return VO_TRUE;
case VOCTRL_UPDATE_SCREENINFO:
glctx.update_xinerama_info();
return VO_TRUE;
}
return VO_NOTIMPL;
}

View File

@ -90,7 +90,11 @@ static const vo_info_t info =
const LIBVO_EXTERN(sdl)
#ifdef CONFIG_SDL_SDL_H
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif
//#include <SDL/SDL_syswm.h>

View File

@ -1140,8 +1140,12 @@ void init_vo_spudec(struct MPContext *mpctx)
* will be done automatically by replacing our main() if we include SDL.h.
*/
#if defined(__APPLE__) && defined(CONFIG_SDL)
#ifdef CONFIG_SDL_SDL_H
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif
#endif
/**
* \brief append a formatted string