0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 12:02:23 +02:00

neomagic tv out support throught vesa vbe, patch by Rudolf Marek

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12661 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
alex 2004-06-25 17:29:18 +00:00
parent b632b4faac
commit 0ded89d5b5
4 changed files with 62 additions and 0 deletions

View File

@ -456,6 +456,7 @@ Makovicka, Jindrich (henry) <makovick@KMLinux.fjfi.cvut.cz>
Marek, Rudolf <MAREKR2@cs.felk.cvut.cz> Marek, Rudolf <MAREKR2@cs.felk.cvut.cz>
* gtf code for -vo vesa * gtf code for -vo vesa
* neomagic tv out support through vesa vbe
Megyer, László (Lez, Laaz) <lez@sch.bme.hu> Megyer, László (Lez, Laaz) <lez@sch.bme.hu>
* subtitle reader * subtitle reader

View File

@ -123,6 +123,10 @@ static int vidix_opened = 0;
static vidix_grkey_t gr_key; static vidix_grkey_t gr_key;
#endif #endif
/* Neomagic TV out */
static int neomagic_tvout = 0;
static int neomagic_tvnorm = NEO_PAL;
#define HAS_DGA() (win.idx == -1) #define HAS_DGA() (win.idx == -1)
#define MOVIE_MODE (MODE_ATTR_COLOR | MODE_ATTR_GRAPHICS) #define MOVIE_MODE (MODE_ATTR_COLOR | MODE_ATTR_GRAPHICS)
#define FRAME_MODE (MODE_WIN_RELOCATABLE | MODE_WIN_WRITEABLE) #define FRAME_MODE (MODE_WIN_RELOCATABLE | MODE_WIN_WRITEABLE)
@ -444,6 +448,10 @@ static uint32_t parseSubDevice(const char *sd)
else else
if(strcmp(sd,"dga") == 0) { flags &= ~(SUBDEV_NODGA); flags |= SUBDEV_FORCEDGA; } if(strcmp(sd,"dga") == 0) { flags &= ~(SUBDEV_NODGA); flags |= SUBDEV_FORCEDGA; }
else else
if(strcmp(sd,"neotv_pal") == 0) { neomagic_tvout = 1; neomagic_tvnorm = NEO_PAL; }
else
if(strcmp(sd,"neotv_ntsc") == 0) { neomagic_tvout = 1; neomagic_tvnorm = NEO_NTSC; }
else
if(memcmp(sd,"lvo:",4) == 0) lvo_name = &sd[4]; /* lvo_name will be valid within init() */ if(memcmp(sd,"lvo:",4) == 0) lvo_name = &sd[4]; /* lvo_name will be valid within init() */
#ifdef CONFIG_VIDIX #ifdef CONFIG_VIDIX
else else
@ -927,6 +935,15 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
return -1; return -1;
} }
if (neomagic_tvout) {
err = vbeSetTV(video_mode,neomagic_tvnorm);
if (err!=0x4f) {
printf("vo_vesa: Sorry unsupported mode, try -x 640 -zoom\n");
}
else {
printf("vo_vesa: Oh you really have picture on TV!\n");
}
}
/* Now we are in video mode!!!*/ /* Now we are in video mode!!!*/
/* Below 'return -1' is impossible */ /* Below 'return -1' is impossible */
if(verbose) if(verbose)

View File

@ -6,6 +6,7 @@
You can redistribute this file under terms and conditions You can redistribute this file under terms and conditions
of GNU General Public licence v2. of GNU General Public licence v2.
Written by Nick Kurshev <nickols_k@mail.ru> Written by Nick Kurshev <nickols_k@mail.ru>
Neomagic TV out support by Rudolf Marek <r.marek et sh.cvut.cz>
*/ */
#include <../config.h> #include <../config.h>
@ -336,6 +337,46 @@ int vbeGetModeInfo(unsigned mode,struct VesaModeInfoBlock *data)
return retval; return retval;
} }
int vbeSetTV(unsigned int vesa_mode,unsigned int TV_mode) {
#define NR_MODES 8
unsigned int mode_table[NR_MODES] =
{0x101,0x103,0x111,0x114,0x120,0x121,0x122,0x123};
unsigned int tv_table[][NR_MODES] = {
{0x201,0x202,0x211,0x212,0x221,0x231,0x222,0x232},
{0x200,0x203,0x210,0x213,0x220,0x230,0xFFFF,0xFFFF}};
/*
Alternate mode map. If modes like 320x240 and 400x300 does not work, but
640x480 and 800x600 work, then try to replace above two lines with this
lines and write email to me if it works.
r.marek et sh.cvut.cz
{0x201,0x202,0x211,0x212,0x222,0x223,0x224,0x225},
{0x200,0x203,0x210,0x213,0x220,0x221,0xFFFF,0xFFFF}};
*/
int i,retval;
struct LRMI_regs r;
memset(&r,0,sizeof(struct LRMI_regs));
for (i=0;((mode_table[i]!=(vesa_mode&0x3FF))&&(i<NR_MODES));i++) ;
if (i==NR_MODES) return 0;
if(verbose > 1) printf("vbelib: Trying to set TV mode %x\n",tv_table[TV_mode][i]);
r.eax = 0x4f14;
r.ebx = 0x20;
r.edx = 0;
r.edi = 0;
r.ecx = tv_table[TV_mode][i];
retval = VBE_LRMI_int(0x10,&r);
if(!retval) return VBE_VM86_FAIL;
return r.eax & 0xffff;
}
int vbeSetMode(unsigned mode,struct VesaCRTCInfoBlock *data) int vbeSetMode(unsigned mode,struct VesaCRTCInfoBlock *data)
{ {
struct LRMI_regs r; struct LRMI_regs r;

View File

@ -82,6 +82,8 @@ static inline void * PhysToVirtSO(unsigned short seg,unsigned short off)
#define MODE_WIN_RELOCATABLE (1 << 0) #define MODE_WIN_RELOCATABLE (1 << 0)
#define MODE_WIN_READABLE (1 << 1) #define MODE_WIN_READABLE (1 << 1)
#define MODE_WIN_WRITEABLE (1 << 2) #define MODE_WIN_WRITEABLE (1 << 2)
#define NEO_PAL 0
#define NEO_NTSC 1
/* SuperVGA mode information block */ /* SuperVGA mode information block */
struct VesaModeInfoBlock { struct VesaModeInfoBlock {
@ -211,6 +213,7 @@ extern int vbeSetScanLineLengthB(unsigned num_bytes);
extern int vbeGetDisplayStart(unsigned *pixel_num,unsigned *scan_line); extern int vbeGetDisplayStart(unsigned *pixel_num,unsigned *scan_line);
extern int vbeSetDisplayStart(unsigned long offset, int vsync); extern int vbeSetDisplayStart(unsigned long offset, int vsync);
extern int vbeSetScheduledDisplayStart(unsigned long offset, int vsync); extern int vbeSetScheduledDisplayStart(unsigned long offset, int vsync);
extern int vbeSetTV(unsigned int vesa_mode,unsigned int TV_mode);
/* /*
Func 0x08-0x09: Func 0x08-0x09:
Support of palette currently is not implemented. Support of palette currently is not implemented.