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:
parent
b632b4faac
commit
0ded89d5b5
1
AUTHORS
1
AUTHORS
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user