annotate vidix/drivers/nvidia_vid.c @ 15533:ddf15d233d58

Do not switch to audio tracks whose codec private data differs from the main audio track's as this will most likely result in messed up audio output. Patch by Michael Behrisch <list () behrisch ! de>
author mosu
date Sat, 21 May 2005 06:50:08 +0000
parents 6a49dea2c0e2
children 8e859a01904f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
1 /*
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
2 nvidia_vid - VIDIX based video driver for NVIDIA chips
11902
faust3
parents: 11895
diff changeset
3 Copyrights 2003 - 2004 Sascha Sommer. This file is based on sources from
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
4 RIVATV (rivatv.sf.net)
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
5 Licence: GPL
11159
8ac4d769a1fb support for disabling the colorkey
alex
parents: 11118
diff changeset
6 WARNING: THIS DRIVER IS IN BETA STAGE
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
7
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
8 multi buffer support and TNT2 fixes by Dmitry Baryshkov
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
9 */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
10
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
11
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
12 #include <errno.h>
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
13 #include <stdio.h>
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
14 #include <stdlib.h>
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
15 #include <string.h>
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
16 #include <inttypes.h>
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
17 #include <unistd.h>
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
18
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
19
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
20 #include "../vidix.h"
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
21 #include "../fourcc.h"
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
22 #include "../../libdha/libdha.h"
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
23 #include "../../libdha/pci_ids.h"
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
24 #include "../../libdha/pci_names.h"
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
25 #include "../../config.h"
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
26 #include "../../bswap.h"
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
27
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
28
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
29 pciinfo_t pci_info;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
30
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
31
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
32 #define MAX_FRAMES 3
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
33 #define NV04_BES_SIZE 1024*2000*4
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
34
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
35
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
36 static vidix_capability_t nvidia_cap = {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
37 "NVIDIA RIVA OVERLAY DRIVER",
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
38 "Sascha Sommer <saschasommer@freenet.de>",
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
39 TYPE_OUTPUT,
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
40 { 0, 0, 0, 0 },
10957
4d4d0c1c7142 according to xfree cvs maximum overlay size is only 2046x2046
atmos4
parents: 10954
diff changeset
41 2046,
4d4d0c1c7142 according to xfree cvs maximum overlay size is only 2046x2046
atmos4
parents: 10954
diff changeset
42 2046,
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
43 4,
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
44 4,
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
45 -1,
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
46 FLAG_UPSCALER|FLAG_DOWNSCALER,
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
47 VENDOR_NVIDIA2,
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
48 -1,
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
49 { 0, 0, 0, 0 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
50 };
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
51
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
52
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
53 unsigned int vixGetVersion(void){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
54 return(VIDIX_VERSION);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
55 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
56
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
57
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
58 #define NV_ARCH_03 0x03
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
59 #define NV_ARCH_04 0x04
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
60 #define NV_ARCH_10 0x10
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
61 #define NV_ARCH_20 0x20
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
62 #define NV_ARCH_30 0x30
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
63
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
64 struct nvidia_cards {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
65 unsigned short chip_id;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
66 unsigned short arch;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
67 };
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
68
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
69
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
70 static struct nvidia_cards nvidia_card_ids[] = {
11073
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
71 /*NV03*/
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
72 {DEVICE_NVIDIA2_RIVA128, NV_ARCH_03},
11073
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
73 {DEVICE_NVIDIA2_RIVA128ZX,NV_ARCH_03},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
74 /*NV04*/
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
75 {DEVICE_NVIDIA_NV4_RIVA_TNT,NV_ARCH_04},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
76 {DEVICE_NVIDIA_NV5_RIVA_TNT2,NV_ARCH_04},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
77 {DEVICE_NVIDIA_NV5_RIVA_TNT22,NV_ARCH_04},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
78 {DEVICE_NVIDIA_NV5_RIVA_TNT23,NV_ARCH_04},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
79 {DEVICE_NVIDIA_NV5_RIVA_TNT24,NV_ARCH_04},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
80 {DEVICE_NVIDIA_NV6_VANTA,NV_ARCH_04},
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
81 {DEVICE_NVIDIA_RIVA_TNT2_MODEL,NV_ARCH_04},
11073
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
82 {DEVICE_NVIDIA_NV6_VANTA2,NV_ARCH_04},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
83 {DEVICE_NVIDIA_NV6_VANTA3,NV_ARCH_04},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
84 {DEVICE_NVIDIA_NV5_RIVA_TNT25,NV_ARCH_04},
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
85 {DEVICE_NVIDIA2_TNT,NV_ARCH_04},
11073
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
86 {DEVICE_NVIDIA2_TNT2,NV_ARCH_04},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
87 {DEVICE_NVIDIA2_VTNT2,NV_ARCH_04},
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
88 {DEVICE_NVIDIA2_UTNT2 ,NV_ARCH_04},
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
89 {DEVICE_NVIDIA2_ITNT2,NV_ARCH_04},
11073
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
90 /*NV10*/
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
91 {DEVICE_NVIDIA_NV10_GEFORCE_256,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
92 {DEVICE_NVIDIA_NV10_GEFORCE_2562,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
93 {DEVICE_NVIDIA_NV11_GEFORCE2_MX,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
94 {DEVICE_NVIDIA_NV11_GEFORCE2_MX2,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
95 {DEVICE_NVIDIA_NV11_GEFORCE2_GO,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
96 {DEVICE_NVIDIA_NV11_GEFORCE2_MXR ,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
97 {DEVICE_NVIDIA_NV15_GEFORCE2_GTS,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
98 {DEVICE_NVIDIA_NV15_GEFORCE2_TI,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
99 {DEVICE_NVIDIA_NV15_GEFORCE2_ULTRA,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
100 {DEVICE_NVIDIA_NV17_GEFORCE4_MX460,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
101 {DEVICE_NVIDIA_NV17_GEFORCE4_MX440,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
102 {DEVICE_NVIDIA_NV17_GEFORCE4_MX420,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
103 {DEVICE_NVIDIA_NV17_GEFORCE4_440,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
104 {DEVICE_NVIDIA_NV17_GEFORCE4_420,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
105 {DEVICE_NVIDIA_NV17_GEFORCE4_4202,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
106 {DEVICE_NVIDIA_NV17_GEFORCE4_4402,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
107 {DEVICE_NVIDIA_NV18_GEFORCE4_MX440,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
108 {DEVICE_NVIDIA_NV15_GEFORCE2,NV_ARCH_10},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
109 /*NV20*/
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
110 {DEVICE_NVIDIA_NV20_GEFORCE3,NV_ARCH_20},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
111 {DEVICE_NVIDIA_NV20_GEFORCE3_TI200,NV_ARCH_20},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
112 {DEVICE_NVIDIA_NV20_GEFORCE3_TI500,NV_ARCH_20},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
113 {DEVICE_NVIDIA_NV25_GEFORCE4_TI4600,NV_ARCH_20},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
114 {DEVICE_NVIDIA_NV25_GEFORCE4_TI4400,NV_ARCH_20},
0c633f49231d added a few more device ids
faust3
parents: 10977
diff changeset
115 {DEVICE_NVIDIA_NV25_GEFORCE4_TI4200,NV_ARCH_20},
11895
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
116 {DEVICE_NVIDIA_QUADRO4_900XGL,NV_ARCH_20},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
117 {DEVICE_NVIDIA_QUADRO4_750XGL,NV_ARCH_20},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
118 {DEVICE_NVIDIA_QUADRO4_700XGL,NV_ARCH_20},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
119 {DEVICE_NVIDIA_NV28_GEFORCE4_TI,NV_ARCH_20},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
120 {DEVICE_NVIDIA_NV28_GEFORCE4_TI2,NV_ARCH_20},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
121 {DEVICE_NVIDIA_NV28_GEFORCE4_TI3,NV_ARCH_20},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
122 {DEVICE_NVIDIA_NV28_GEFORCE4_TI4,NV_ARCH_20},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
123 {DEVICE_NVIDIA_NV28GL_QUADRO4_980,NV_ARCH_20},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
124 {DEVICE_NVIDIA_NV28GL_QUADRO4_780,NV_ARCH_20},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
125 /*NV30*/
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
126 {DEVICE_NVIDIA_NV30_GEFORCE_FX,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
127 {DEVICE_NVIDIA_NV30_GEFORCE_FX2,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
128 {DEVICE_NVIDIA_NV30_GEFORCE_FX3,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
129 {DEVICE_NVIDIA_NV30GL_QUADRO_FX,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
130 {DEVICE_NVIDIA_NV30GL_QUADRO_FX2,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
131 {DEVICE_NVIDIA_NV31_GEFORCE_FX,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
132 {DEVICE_NVIDIA_NV31_GEFORCE_FX2,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
133 {DEVICE_NVIDIA_NV34_GEFORCE_FX,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
134 {DEVICE_NVIDIA_NV34_GEFORCE_FX2,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
135 {DEVICE_NVIDIA_NV34GL_QUADRO_FX,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
136 {DEVICE_NVIDIA_NV35_GEFORCE_FX,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
137 {DEVICE_NVIDIA_NV35_GEFORCE_FX2,NV_ARCH_30},
d9489d5581d0 a few more nvidia cards (only tested card is GeForceFX 5200)
faust3
parents: 11783
diff changeset
138 {DEVICE_NVIDIA_NV35GL_QUADRO_FX,NV_ARCH_30}
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
139 };
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
140
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
141
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
142 static int find_chip(unsigned chip_id){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
143 unsigned i;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
144 for(i = 0;i < sizeof(nvidia_card_ids)/sizeof(struct nvidia_cards);i++)
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
145 {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
146 if(chip_id == nvidia_card_ids[i].chip_id)return i;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
147 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
148 return -1;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
149 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
150
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
151 int vixProbe(int verbose, int force){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
152 pciinfo_t lst[MAX_PCI_DEVICES];
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
153 unsigned i,num_pci;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
154 int err;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
155
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
156 if (force)
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
157 printf("[nvidia_vid]: warning: forcing not supported yet!\n");
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
158 err = pci_scan(lst,&num_pci);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
159 if(err){
11678
972d1998bde9 occured --> occurred typo patch by Clinton Roy <croy@dstc.edu.au>
diego
parents: 11233
diff changeset
160 printf("[nvidia_vid] Error occurred during pci scan: %s\n",strerror(err));
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
161 return err;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
162 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
163 else {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
164 err = ENXIO;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
165 for(i=0; i < num_pci; i++){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
166 if(lst[i].vendor == VENDOR_NVIDIA2 || lst[i].vendor == VENDOR_NVIDIA){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
167 int idx;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
168 const char *dname;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
169 idx = find_chip(lst[i].device);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
170 if(idx == -1)
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
171 continue;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
172 dname = pci_device_name(lst[i].vendor, lst[i].device);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
173 dname = dname ? dname : "Unknown chip";
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
174 printf("[nvidia_vid] Found chip: %s\n", dname);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
175 if ((lst[i].command & PCI_COMMAND_IO) == 0){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
176 printf("[nvidia_vid] Device is disabled, ignoring\n");
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
177 continue;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
178 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
179 nvidia_cap.device_id = lst[i].device;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
180 err = 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
181 memcpy(&pci_info, &lst[i], sizeof(pciinfo_t));
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
182 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
183 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
184 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
185 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
186 if(err && verbose) printf("[nvidia_vid] Can't find chip\n");
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
187 return err;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
188 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
189
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
190
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
191
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
192
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
193 /*
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
194 * PCI-Memory IO access macros.
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
195 */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
196 #define VID_WR08(p,i,val) (((uint8_t *)(p))[(i)]=(val))
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
197 #define VID_RD08(p,i) (((uint8_t *)(p))[(i)])
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
198
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
199 #define VID_WR32(p,i,val) (((uint32_t *)(p))[(i)/4]=(val))
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
200 #define VID_RD32(p,i) (((uint32_t *)(p))[(i)/4])
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
201
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
202 #ifndef USE_RMW_CYCLES
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
203 /*
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
204 * Can be used to inhibit READ-MODIFY-WRITE cycles. On by default.
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
205 */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
206
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
207 #define MEM_BARRIER() __asm__ __volatile__ ("" : : : "memory")
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
208
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
209 #undef VID_WR08
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
210 #define VID_WR08(p,i,val) ({ MEM_BARRIER(); ((uint8_t *)(p))[(i)]=(val); })
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
211 #undef VID_RD08
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
212 #define VID_RD08(p,i) ({ MEM_BARRIER(); ((uint8_t *)(p))[(i)]; })
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
213
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
214 #undef VID_WR32
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
215 #define VID_WR32(p,i,val) ({ MEM_BARRIER(); ((uint32_t *)(p))[(i)/4]=(val); })
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
216 #undef VID_RD32
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
217 #define VID_RD32(p,i) ({ MEM_BARRIER(); ((uint32_t *)(p))[(i)/4]; })
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
218 #endif /* USE_RMW_CYCLES */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
219
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
220 #define VID_AND32(p,i,val) VID_WR32(p,i,VID_RD32(p,i)&(val))
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
221 #define VID_OR32(p,i,val) VID_WR32(p,i,VID_RD32(p,i)|(val))
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
222 #define VID_XOR32(p,i,val) VID_WR32(p,i,VID_RD32(p,i)^(val))
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
223
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
224
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
225
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
226
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
227
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
228
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
229 struct rivatv_chip {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
230 volatile uint32_t *PMC; /* general control */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
231 volatile uint32_t *PME; /* multimedia port */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
232 volatile uint32_t *PFB; /* framebuffer control */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
233 volatile uint32_t *PVIDEO; /* overlay control */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
234 volatile uint8_t *PCIO; /* SVGA (CRTC, ATTR) registers */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
235 volatile uint8_t *PVIO; /* SVGA (MISC, GRAPH, SEQ) registers */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
236 volatile uint32_t *PRAMIN; /* instance memory */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
237 volatile uint32_t *PRAMHT; /* hash table */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
238 volatile uint32_t *PRAMFC; /* fifo context table */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
239 volatile uint32_t *PRAMRO; /* fifo runout table */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
240 volatile uint32_t *PFIFO; /* fifo control region */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
241 volatile uint32_t *FIFO; /* fifo channels (USER) */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
242 volatile uint32_t *PGRAPH; /* graphics engine */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
243
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
244 unsigned long fbsize; /* framebuffer size */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
245 int arch; /* compatible NV_ARCH_XX define */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
246 int realarch; /* real architecture */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
247 void (* lock) (struct rivatv_chip *, int);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
248 };
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
249 typedef struct rivatv_chip rivatv_chip;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
250
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
251
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
252 struct rivatv_info {
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
253 unsigned int use_colorkey;
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
254 unsigned int colorkey; /* saved xv colorkey*/
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
255 unsigned int vidixcolorkey; /*currently used colorkey*/
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
256 unsigned int depth;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
257 unsigned int format;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
258 unsigned int pitch;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
259 unsigned int width,height;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
260 unsigned int d_width,d_height; /*scaled width && height*/
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
261 unsigned int wx,wy; /*window x && y*/
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
262 unsigned int screen_x; /*screen width*/
11085
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
263 unsigned int screen_y; /*screen height*/
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
264 unsigned long buffer_size; /* size of the image buffer */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
265 struct rivatv_chip chip; /* NV architecture structure */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
266 void* video_base; /* virtual address of control region */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
267 void* control_base; /* virtual address of fb region */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
268 unsigned long picture_base; /* direct pointer to video picture */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
269 unsigned long picture_offset; /* offset of video picture in frame buffer */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
270 // struct rivatv_dma dma; /* DMA structure */
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
271 unsigned int cur_frame;
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
272 unsigned int num_frames; /* number of buffers */
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
273 int bps; /* bytes per line */
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
274 };
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
275 typedef struct rivatv_info rivatv_info;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
276
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
277 //framebuffer size funcs
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
278 static unsigned long rivatv_fbsize_nv03 (struct rivatv_chip *chip){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
279 if (VID_RD32 (chip->PFB, 0) & 0x00000020) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
280 if (((VID_RD32 (chip->PMC, 0) & 0xF0) == 0x20)
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
281 && ((VID_RD32 (chip->PMC, 0) & 0x0F) >= 0x02)) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
282 /* SDRAM 128 ZX. */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
283 return ((1 << (VID_RD32 (chip->PFB, 0) & 0x03)) * 1024 * 1024);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
284 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
285 else {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
286 return 1024 * 1024 * 8;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
287 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
288 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
289 else {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
290 /* SGRAM 128. */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
291 switch (chip->PFB[0x00000000] & 0x00000003) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
292 case 0:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
293 return 1024 * 1024 * 8;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
294 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
295 case 2:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
296 return 1024 * 1024 * 4;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
297 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
298 default:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
299 return 1024 * 1024 * 2;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
300 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
301 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
302 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
303 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
304 static unsigned long rivatv_fbsize_nv04 (struct rivatv_chip *chip){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
305 if (VID_RD32 (chip->PFB, 0) & 0x00000100) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
306 return ((VID_RD32 (chip->PFB, 0) >> 12) & 0x0F) * 1024 * 1024 * 2
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
307 + 1024 * 1024 * 2;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
308 } else {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
309 switch (VID_RD32 (chip->PFB, 0) & 0x00000003) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
310 case 0:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
311 return 1024 * 1024 * 32;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
312 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
313 case 1:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
314 return 1024 * 1024 * 4;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
315 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
316 case 2:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
317 return 1024 * 1024 * 8;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
318 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
319 case 3:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
320 default:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
321 return 1024 * 1024 * 16;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
322 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
323 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
324 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
325 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
326
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
327 static unsigned long rivatv_fbsize_nv10 (struct rivatv_chip *chip){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
328 return ((VID_RD32 (chip->PFB, 0x20C) >> 20) & 0x000000FF) * 1024 * 1024;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
329 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
330
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
331 //lock funcs
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
332 static void rivatv_lock_nv03 (struct rivatv_chip *chip, int LockUnlock){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
333 VID_WR08 (chip->PVIO, 0x3C4, 0x06);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
334 VID_WR08 (chip->PVIO, 0x3C5, LockUnlock ? 0x99 : 0x57);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
335 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
336
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
337 static void rivatv_lock_nv04 (struct rivatv_chip *chip, int LockUnlock){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
338 VID_WR08 (chip->PCIO, 0x3C4, 0x06);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
339 VID_WR08 (chip->PCIO, 0x3C5, LockUnlock ? 0x99 : 0x57);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
340 VID_WR08 (chip->PCIO, 0x3D4, 0x1F);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
341 VID_WR08 (chip->PCIO, 0x3D5, LockUnlock ? 0x99 : 0x57);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
342 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
343
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
344
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
345
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
346
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
347 /* Enable PFB (Framebuffer), PVIDEO (Overlay unit) and PME (Mediaport) if neccessary. */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
348 static void rivatv_enable_PMEDIA (struct rivatv_info *info){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
349 uint32_t reg;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
350
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
351 /* switch off interrupts once for a while */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
352 // VID_WR32 (info->chip.PME, 0x200140, 0x00);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
353 // VID_WR32 (info->chip.PMC, 0x000140, 0x00);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
354
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
355 reg = VID_RD32 (info->chip.PMC, 0x000200);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
356
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
357 /* NV3 (0x10100010): NV03_PMC_ENABLE_PMEDIA, NV03_PMC_ENABLE_PFB, NV03_PMC_ENABLE_PVIDEO */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
358
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
359 if ((reg & 0x10100010) != 0x10100010) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
360 printf("PVIDEO and PFB disabled, enabling...\n");
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
361 VID_OR32 (info->chip.PMC, 0x000200, 0x10100010);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
362 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
363
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
364 /* save the current colorkey */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
365 switch (info->chip.arch ) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
366 case NV_ARCH_10:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
367 case NV_ARCH_20:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
368 case NV_ARCH_30:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
369 /* NV_PVIDEO_COLOR_KEY */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
370 info->colorkey = VID_RD32 (info->chip.PVIDEO, 0xB00);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
371 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
372 case NV_ARCH_03:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
373 case NV_ARCH_04:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
374 /* NV_PVIDEO_KEY */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
375 info->colorkey = VID_RD32 (info->chip.PVIDEO, 0x240);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
376 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
377 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
378
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
379
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
380 /* re-enable interrupts again */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
381 // VID_WR32 (info->chip.PMC, 0x000140, 0x01);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
382 // VID_WR32 (info->chip.PME, 0x200140, 0x01);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
383 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
384
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
385 /* Stop overlay video. */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
386 void rivatv_overlay_stop (struct rivatv_info *info) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
387 switch (info->chip.arch ) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
388 case NV_ARCH_10:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
389 case NV_ARCH_20:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
390 case NV_ARCH_30:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
391 /* NV_PVIDEO_COLOR_KEY */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
392 /* Xv-Extension-Hack: Restore previously saved value. */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
393 VID_WR32 (info->chip.PVIDEO, 0xB00, info->colorkey);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
394 /* NV_PVIDEO_STOP */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
395 VID_OR32 (info->chip.PVIDEO, 0x704, 0x11);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
396 /* NV_PVIDEO_BUFFER */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
397 VID_AND32 (info->chip.PVIDEO, 0x700, ~0x11);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
398 /* NV_PVIDEO_INTR_EN_BUFFER */
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
399 // VID_AND32 (info->chip.PVIDEO, 0x140, ~0x11);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
400 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
401 case NV_ARCH_03:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
402 case NV_ARCH_04:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
403 /* NV_PVIDEO_KEY */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
404 VID_WR32 (info->chip.PVIDEO, 0x240, info->colorkey);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
405 /* NV_PVIDEO_OVERLAY_VIDEO_OFF */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
406 VID_AND32 (info->chip.PVIDEO, 0x244, ~0x01);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
407 /* NV_PVIDEO_INTR_EN_0_NOTIFY */
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
408 // VID_AND32 (info->chip.PVIDEO, 0x140, ~0x01);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
409 /* NV_PVIDEO_OE_STATE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
410 VID_WR32 (info->chip.PVIDEO, 0x224, 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
411 /* NV_PVIDEO_SU_STATE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
412 VID_WR32 (info->chip.PVIDEO, 0x228, 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
413 /* NV_PVIDEO_RM_STATE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
414 VID_WR32 (info->chip.PVIDEO, 0x22C, 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
415 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
416 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
417 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
418
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
419 /* Get pan offset of the physical screen. */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
420 static uint32_t rivatv_overlay_pan (struct rivatv_info *info){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
421 uint32_t pan;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
422 info->chip.lock (&info->chip, 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
423 VID_WR08 (info->chip.PCIO, 0x3D4, 0x0D);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
424 pan = VID_RD08 (info->chip.PCIO, 0x3D5);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
425 VID_WR08 (info->chip.PCIO, 0x3D4, 0x0C);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
426 pan |= VID_RD08 (info->chip.PCIO, 0x3D5) << 8;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
427 VID_WR08 (info->chip.PCIO, 0x3D4, 0x19);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
428 pan |= (VID_RD08 (info->chip.PCIO, 0x3D5) & 0x1F) << 16;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
429 VID_WR08 (info->chip.PCIO, 0x3D4, 0x2D);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
430 pan |= (VID_RD08 (info->chip.PCIO, 0x3D5) & 0x60) << 16;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
431 return pan << 2;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
432 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
433
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
434 /* Compute and set colorkey depending on the colour depth. */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
435 static void rivatv_overlay_colorkey (rivatv_info* info, unsigned int chromakey){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
436 uint32_t r, g, b, key = 0;
11159
8ac4d769a1fb support for disabling the colorkey
alex
parents: 11118
diff changeset
437
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
438 r = (chromakey & 0x00FF0000) >> 16;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
439 g = (chromakey & 0x0000FF00) >> 8;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
440 b = chromakey & 0x000000FF;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
441 switch (info->depth) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
442 case 15:
11160
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
443 key = ((r >> 3) << 10) | ((g >> 3) << 5) | ((b >> 3));
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
444 #ifndef WIN32
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
445 key = key | 0x00008000;
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
446 #endif
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
447 break;
11118
344052fdfc4a Fix colorkey for xvidix, tested on Riva128 4MB X@15/16/24bpp (aka 15/15/32 in nvidia_vid)
atmos4
parents: 11086
diff changeset
448 case 16: // XXX unchecked
11160
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
449 key = ((r >> 3) << 11) | ((g >> 2) << 5) | ((b >> 3));
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
450 #ifndef WIN32
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
451 key = key | 0x00008000;
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
452 #endif
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
453 break;
11160
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
454 case 24: // XXX unchecked, maybe swap order of masking - FIXME Can the card be in 24 bit mode anyway?
11118
344052fdfc4a Fix colorkey for xvidix, tested on Riva128 4MB X@15/16/24bpp (aka 15/15/32 in nvidia_vid)
atmos4
parents: 11086
diff changeset
455 key = (chromakey & 0x00FFFFFF) | 0x00800000;
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
456 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
457 case 32:
11160
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
458 key = chromakey;
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
459 #ifndef WIN32
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
460 key = key | 0x80000000;
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
461 #endif
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
462 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
463 }
11118
344052fdfc4a Fix colorkey for xvidix, tested on Riva128 4MB X@15/16/24bpp (aka 15/15/32 in nvidia_vid)
atmos4
parents: 11086
diff changeset
464 //printf("[nvidia_vid] depth=%d %08X \n", info->depth, chromakey);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
465 switch (info->chip.arch) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
466 case NV_ARCH_10:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
467 case NV_ARCH_20:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
468 case NV_ARCH_30:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
469 VID_WR32 (info->chip.PVIDEO, 0xB00, key);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
470 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
471 case NV_ARCH_03:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
472 case NV_ARCH_04:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
473 VID_WR32 (info->chip.PVIDEO, 0x240, key);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
474 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
475 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
476 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
477
11085
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
478 static void nv_getscreenproperties(struct rivatv_info *info){
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
479 uint32_t bpp=0;
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
480 info->chip.lock(&info->chip, 0);
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
481 /*get screen depth*/
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
482 VID_WR08(info->chip.PCIO, 0x03D4,0x28);
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
483 bpp = VID_RD08(info->chip.PCIO,0x03D5)&0x3;
11085
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
484 if(bpp==3)bpp=4;
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
485 if((bpp == 2) && (info->chip.PVIDEO[0x00000600/4] & 0x00001000) == 0x0)info->depth=15;
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
486 else info->depth = bpp*8;
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
487 /*get screen width*/
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
488 VID_WR08(info->chip.PCIO, 0x03D4, 0x1);
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
489 info->screen_x = (1 + VID_RD08(info->chip.PCIO, 0x3D5)) * 8;
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
490 /*get screen height*/
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
491 /* get first 8 bits in VT_DISPLAY_END*/
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
492 VID_WR08(info->chip.PCIO, 0x03D4, 0x12);
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
493 info->screen_y = VID_RD08(info->chip.PCIO,0x03D5);
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
494 VID_WR08(info->chip.PCIO,0x03D4,0x07);
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
495 /* get 9th bit in CRTC_OVERFLOW*/
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
496 info->screen_y |= (VID_RD08(info->chip.PCIO,0x03D5) &0x02)<<7;
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
497 /* and the 10th in CRTC_OVERFLOW*/
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
498 info->screen_y |=(VID_RD08(info->chip.PCIO,0x03D5) &0x40)<<3;
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
499 ++info->screen_y;
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
500 }
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
501
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
502
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
503
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
504
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
505 /* Start overlay video. */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
506 void rivatv_overlay_start (struct rivatv_info *info,int bufno){
11085
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
507 uint32_t base, size, offset, xscale, yscale, pan;
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
508 uint32_t value;
11233
92ded1d954ea cvidix geometry support in textmode
faust3
parents: 11210
diff changeset
509 int x=info->wx?info->wx:8, y=info->wy?info->wy:8;
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
510 int lwidth=info->d_width, lheight=info->d_height;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
511 int bps;
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
512 int i;
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
513
10977
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
514 size = info->buffer_size;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
515 base = info->picture_offset;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
516 offset = bufno*size;
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
517 /*update depth & dimensions here because it may change with vo vesa or vo fbdev*/
11085
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
518 nv_getscreenproperties(info);
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
519
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
520 if(info->depth){
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
521 // bps = info->screen_x * ((info->depth+1)/8);
10977
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
522 /* get pan offset of the physical screen */
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
523 pan = rivatv_overlay_pan (info);
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
524 /* adjust window position depending on the pan offset */
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
525 bps = 0;
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
526 info->chip.lock (&info->chip, 0);
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
527 for (i = 0; (i < 1024) && (bps == 0); i++)
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
528 {
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
529 if (info->chip.arch != NV_ARCH_03)
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
530 bps = info->chip.PGRAPH[0x00000670/4];
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
531 else
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
532 bps = info->chip.PGRAPH[0x00000650/4];
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
533 }
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
534 if (bps == 0)
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
535 {
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
536 fprintf(stderr, "[nvidia_vid] reading bps returned 0!!!\n");
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
537 if (info->bps != 0)
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
538 bps = info->bps;
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
539 }
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
540 else
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
541 {
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
542 info->bps = bps;
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
543 }
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
544
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
545 if (bps != 0)
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
546 {
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
547 x = info->wx - (pan % bps) * 8 / info->depth;
10977
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
548 y = info->wy - (pan / bps);
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
549 }
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
550 }
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
551
10977
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
552 /* adjust negative output window variables */
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
553 if (x < 0) {
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
554 lwidth = info->d_width + x;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
555 offset += (-x * info->width / info->d_width) << 1;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
556 // offset += (-window->x * port->vld_width / window->width) << 1;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
557 x = 0;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
558 }
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
559 if (y < 0) {
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
560 lheight = info->d_height + y;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
561 offset += (-y * info->height / info->d_height * info->width) << 1;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
562 // offset += (-window->y * port->vld_height / window->height * port->org_width) << 1;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
563 y = 0;
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
564 }
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
565
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
566 switch (info->chip.arch) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
567 case NV_ARCH_10:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
568 case NV_ARCH_20:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
569 case NV_ARCH_30:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
570
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
571 /* NV_PVIDEO_BASE */
11160
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
572 VID_WR32 (info->chip.PVIDEO, 0x900 + 0, base + offset);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
573 //VID_WR32 (info->chip.PVIDEO, 0x900 + 4, base);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
574 /* NV_PVIDEO_LIMIT */
11160
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
575 VID_WR32 (info->chip.PVIDEO, 0x908 + 0, base + offset + size - 1);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
576 //VID_WR32 (info->chip.PVIDEO, 0x908 + 4, base + size - 1);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
577
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
578 /* extra code for NV20 && NV30 architectures */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
579 if (info->chip.arch == NV_ARCH_20 || info->chip.arch == NV_ARCH_30) {
11160
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
580 VID_WR32 (info->chip.PVIDEO, 0x800 + 0, base + offset);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
581 //VID_WR32 (info->chip.PVIDEO, 0x800 + 4, base);
11160
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
582 VID_WR32 (info->chip.PVIDEO, 0x808 + 0, base + offset + size - 1);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
583 //VID_WR32 (info->chip.PVIDEO, 0x808 + 4, base + size - 1);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
584 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
585
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
586 /* NV_PVIDEO_LUMINANCE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
587 VID_WR32 (info->chip.PVIDEO, 0x910 + 0, 0x00001000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
588 //VID_WR32 (info->chip.PVIDEO, 0x910 + 4, 0x00001000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
589 /* NV_PVIDEO_CHROMINANCE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
590 VID_WR32 (info->chip.PVIDEO, 0x918 + 0, 0x00001000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
591 //VID_WR32 (info->chip.PVIDEO, 0x918 + 4, 0x00001000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
592
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
593 /* NV_PVIDEO_OFFSET */
11160
b5a3ef555164 double buffering fix for cards > NV04 && windows colorkeying fix
faust3
parents: 11159
diff changeset
594 VID_WR32 (info->chip.PVIDEO, 0x920 + 0, 0x0);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
595 //VID_WR32 (info->chip.PVIDEO, 0x920 + 4, offset + pitch);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
596 /* NV_PVIDEO_SIZE_IN */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
597 VID_WR32 (info->chip.PVIDEO, 0x928 + 0, ((info->height) << 16) | info->width);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
598 //VID_WR32 (info->chip.PVIDEO, 0x928 + 4, ((port->org_height/2) << 16) | port->org_width);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
599 /* NV_PVIDEO_POINT_IN */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
600 VID_WR32 (info->chip.PVIDEO, 0x930 + 0, 0x00000000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
601 //VID_WR32 (info->chip.PVIDEO, 0x930 + 4, 0x00000000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
602 /* NV_PVIDEO_DS_DX_RATIO */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
603 VID_WR32 (info->chip.PVIDEO, 0x938 + 0, (info->width << 20) / info->d_width);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
604 //VID_WR32 (info->chip.PVIDEO, 0x938 + 4, (port->org_width << 20) / window->width);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
605 /* NV_PVIDEO_DT_DY_RATIO */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
606 VID_WR32 (info->chip.PVIDEO, 0x940 + 0, ((info->height) << 20) / info->d_height);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
607 //VID_WR32 (info->chip.PVIDEO, 0x940 + 4, ((port->org_height/2) << 20) / window->height);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
608
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
609 /* NV_PVIDEO_POINT_OUT */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
610 VID_WR32 (info->chip.PVIDEO, 0x948 + 0, ((y + 0) << 16) | x);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
611 //VID_WR32 (info->chip.PVIDEO, 0x948 + 4, ((y + 0) << 16) | x);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
612 /* NV_PVIDEO_SIZE_OUT */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
613 VID_WR32 (info->chip.PVIDEO, 0x950 + 0, (lheight << 16) | lwidth);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
614 //VID_WR32 (info->chip.PVIDEO, 0x950 + 4, (height << 16) | width);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
615
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
616 /* NV_PVIDEO_FORMAT */
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
617 value = info->pitch;
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
618 if(info->use_colorkey)value |= 1 << 20;
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
619 if(info->format == IMGFMT_YUY2)value |= 1 << 16;
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
620 VID_WR32 (info->chip.PVIDEO, 0x958 + 0, value);
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
621 //VID_WR32 (info->chip.PVIDEO, 0x958 + 4, (pitch << 1) | 0x00100000);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
622
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
623 /* NV_PVIDEO_INTR_EN_BUFFER */
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
624 // VID_OR32 (info->chip.PVIDEO, 0x140, 0x01/*0x11*/);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
625 /* NV_PVIDEO_STOP */
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
626 VID_WR32 (info->chip.PVIDEO, 0x704,0x0);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
627 /* NV_PVIDEO_BUFFER */
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
628 VID_WR32 (info->chip.PVIDEO, 0x700, 0x01/*0x11*/);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
629 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
630
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
631 case NV_ARCH_03:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
632 case NV_ARCH_04:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
633
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
634
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
635 /* NV_PVIDEO_OE_STATE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
636 VID_WR32 (info->chip.PVIDEO, 0x224, 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
637 /* NV_PVIDEO_SU_STATE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
638 VID_WR32 (info->chip.PVIDEO, 0x228, 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
639 /* NV_PVIDEO_RM_STATE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
640 VID_WR32 (info->chip.PVIDEO, 0x22C, 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
641
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
642 /* NV_PVIDEO_BUFF0_START_ADDRESS */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
643 VID_WR32 (info->chip.PVIDEO, 0x20C + 0, base + offset + 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
644 VID_WR32 (info->chip.PVIDEO, 0x20C + 4, base + offset + 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
645 /* NV_PVIDEO_BUFF0_PITCH_LENGTH */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
646 VID_WR32 (info->chip.PVIDEO, 0x214 + 0, info->pitch);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
647 VID_WR32 (info->chip.PVIDEO, 0x214 + 4, info->pitch);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
648
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
649 /* NV_PVIDEO_WINDOW_START */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
650 VID_WR32 (info->chip.PVIDEO, 0x230, (y << 16) | x);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
651 /* NV_PVIDEO_WINDOW_SIZE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
652 VID_WR32 (info->chip.PVIDEO, 0x234, (lheight << 16) | lwidth);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
653 /* NV_PVIDEO_STEP_SIZE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
654 yscale = ((info->height - 1) << 11) / (info->d_height - 1);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
655 xscale = ((info->width - 1) << 11) / (info->d_width - 1);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
656 VID_WR32 (info->chip.PVIDEO, 0x200, (yscale << 16) | xscale);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
657
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
658 /* NV_PVIDEO_RED_CSC_OFFSET */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
659 VID_WR32 (info->chip.PVIDEO, 0x280, 0x69);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
660 /* NV_PVIDEO_GREEN_CSC_OFFSET */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
661 VID_WR32 (info->chip.PVIDEO, 0x284, 0x3e);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
662 /* NV_PVIDEO_BLUE_CSC_OFFSET */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
663 VID_WR32 (info->chip.PVIDEO, 0x288, 0x89);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
664 /* NV_PVIDEO_CSC_ADJUST */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
665 VID_WR32 (info->chip.PVIDEO, 0x28C, 0x00000); /* No colour correction! */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
666
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
667 /* NV_PVIDEO_CONTROL_Y (BLUR_ON, LINE_HALF) */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
668 VID_WR32 (info->chip.PVIDEO, 0x204, 0x001);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
669 /* NV_PVIDEO_CONTROL_X (WEIGHT_HEAVY, SHARPENING_ON, SMOOTHING_ON) */
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
670 VID_WR32 (info->chip.PVIDEO, 0x208, 0x111); /*directx overlay 0x110 */
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
671
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
672 /* NV_PVIDEO_FIFO_BURST_LENGTH */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
673 VID_WR32 (info->chip.PVIDEO, 0x23C, 0x03);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
674 /* NV_PVIDEO_FIFO_THRES_SIZE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
675 VID_WR32 (info->chip.PVIDEO, 0x238, 0x38); /*windows uses 0x40*/
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
676
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
677 /* NV_PVIDEO_BUFF0_OFFSET */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
678 VID_WR32 (info->chip.PVIDEO, 0x21C + 0, 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
679 VID_WR32 (info->chip.PVIDEO, 0x21C + 4, 0);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
680
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
681 /* NV_PVIDEO_INTR_EN_0_NOTIFY_ENABLED */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
682 // VID_OR32 (info->chip.PVIDEO, 0x140, 0x01);
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
683
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
684 /* NV_PVIDEO_OVERLAY (KEY_ON, VIDEO_ON, FORMAT_CCIR) */
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
685 value = 0x1; /*video on*/
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
686 if(info->format==IMGFMT_YUY2)value |= 0x100;
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
687 if(info->use_colorkey)value |=0x10;
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
688 VID_WR32 (info->chip.PVIDEO, 0x244, value);
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
689
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
690 /* NV_PVIDEO_SU_STATE */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
691 VID_XOR32 (info->chip.PVIDEO, 0x228, 1 << 16);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
692 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
693 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
694 /*set colorkey*/
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
695 rivatv_overlay_colorkey(info,info->vidixcolorkey);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
696
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
697 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
698
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
699
10977
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
700
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
701
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
702
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
703
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
704
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
705 static rivatv_info* info;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
706
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
707
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
708
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
709
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
710 int vixInit(void){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
711 int mtrr;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
712 info = (rivatv_info*)calloc(1,sizeof(rivatv_info));
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
713 info->control_base = map_phys_mem(pci_info.base0, 0x00C00000 + 0x00008000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
714 info->chip.arch = nvidia_card_ids[find_chip(pci_info.device)].arch;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
715 printf("[nvidia_vid] arch %x register base %x\n",info->chip.arch,(unsigned int)info->control_base);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
716 info->chip.PFIFO = (uint32_t *) (info->control_base + 0x00002000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
717 info->chip.FIFO = (uint32_t *) (info->control_base + 0x00800000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
718 info->chip.PMC = (uint32_t *) (info->control_base + 0x00000000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
719 info->chip.PFB = (uint32_t *) (info->control_base + 0x00100000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
720 info->chip.PME = (uint32_t *) (info->control_base + 0x00000000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
721 info->chip.PCIO = (uint8_t *) (info->control_base + 0x00601000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
722 info->chip.PVIO = (uint8_t *) (info->control_base + 0x000C0000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
723 info->chip.PGRAPH = (uint32_t *) (info->control_base + 0x00400000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
724 /* setup chip specific functions */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
725 switch (info->chip.arch) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
726 case NV_ARCH_03:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
727 info->chip.lock = rivatv_lock_nv03;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
728 info->chip.fbsize = rivatv_fbsize_nv03 (&info->chip);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
729 info->chip.PVIDEO = (uint32_t *) (info->control_base + 0x00680000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
730 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
731 case NV_ARCH_04:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
732 info->chip.lock = rivatv_lock_nv04;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
733 info->chip.fbsize = rivatv_fbsize_nv04 (&info->chip);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
734 info->chip.PRAMIN = (uint32_t *) (info->control_base + 0x00700000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
735 info->chip.PVIDEO = (uint32_t *) (info->control_base + 0x00680000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
736 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
737 case NV_ARCH_10:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
738 case NV_ARCH_20:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
739 case NV_ARCH_30:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
740 info->chip.lock = rivatv_lock_nv04;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
741 info->chip.fbsize = rivatv_fbsize_nv10 (&info->chip);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
742 info->chip.PRAMIN = (uint32_t *) (info->control_base + 0x00700000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
743 info->chip.PVIDEO = (uint32_t *) (info->control_base + 0x00008000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
744 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
745 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
746 switch (info->chip.arch) {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
747 case NV_ARCH_03:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
748 {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
749 /* This maps framebuffer @6MB, thus 2MB are left for video. */
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
750 info->video_base = map_phys_mem(pci_info.base1, info->chip.fbsize);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
751 /* This may trash your screen for resolutions greater than 1024x768, sorry. */
10977
3da6b1de1c33 make it work in textmode again && support for nv03 with 4MB RAM
faust3
parents: 10970
diff changeset
752 info->picture_offset = 1024*768* 4 * ((info->chip.fbsize > 4194304)?2:1);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
753 info->picture_base = (uint32_t) info->video_base + info->picture_offset;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
754 info->chip.PRAMIN = (uint32_t *) (info->video_base + 0x00C00000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
755 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
756 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
757 case NV_ARCH_04:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
758 case NV_ARCH_10:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
759 case NV_ARCH_20:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
760 case NV_ARCH_30:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
761 {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
762 info->video_base = map_phys_mem(pci_info.base1, info->chip.fbsize);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
763 info->picture_offset = info->chip.fbsize - NV04_BES_SIZE;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
764 // info->picture_base = (unsigned long)map_phys_mem(pci_info.base1+info->picture_offset,NV04_BES_SIZE);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
765 info->picture_base = (uint32_t) info->video_base + info->picture_offset;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
766 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
767 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
768 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
769
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
770 printf("[nvidia_vid] detected memory size %u MB\n",(uint32_t)(info->chip.fbsize /1024/1024));
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
771
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
772 if ((mtrr = mtrr_set_type(pci_info.base1, info->chip.fbsize, MTRR_TYPE_WRCOMB))!= 0)
11085
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
773 printf("[nvidia_vid] unable to setup MTRR: %s\n", strerror(mtrr));
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
774 else
11085
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
775 printf("[nvidia_vid] MTRR set up\n");
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
776
11085
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
777 nv_getscreenproperties(info);
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
778 if(!info->depth)printf("[nvidia_vid] text mode: %ux%u\n",info->screen_x,info->screen_y);
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
779 else printf("[nvidia_vid] video mode: %ux%u@%u\n",info->screen_x,info->screen_y, info->depth);
14aea5a85ba1 fixed the mysterious segfaults on faster machines
faust3
parents: 11073
diff changeset
780
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
781
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
782 rivatv_enable_PMEDIA(info);
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
783 info->cur_frame = 0;
11159
8ac4d769a1fb support for disabling the colorkey
alex
parents: 11118
diff changeset
784 info->use_colorkey = 0;
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
785
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
786 return 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
787 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
788
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
789 void vixDestroy(void){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
790 unmap_phys_mem(info->control_base ,0x00C00000 + 0x00008000);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
791 unmap_phys_mem(info->video_base, info->chip.fbsize);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
792 free(info);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
793 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
794
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
795 int vixGetCapability(vidix_capability_t *to){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
796 memcpy(to, &nvidia_cap, sizeof(vidix_capability_t));
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
797 return 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
798 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
799
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
800 inline static int is_supported_fourcc(uint32_t fourcc)
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
801 {
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
802 if (fourcc == IMGFMT_UYVY || fourcc == IMGFMT_YUY2)
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
803 return 1;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
804 else
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
805 return 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
806 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
807
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
808 int vixQueryFourcc(vidix_fourcc_t *to){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
809 if(is_supported_fourcc(to->fourcc)){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
810 to->depth = VID_DEPTH_1BPP | VID_DEPTH_2BPP |
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
811 VID_DEPTH_4BPP | VID_DEPTH_8BPP |
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
812 VID_DEPTH_12BPP| VID_DEPTH_15BPP|
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
813 VID_DEPTH_16BPP| VID_DEPTH_24BPP|
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
814 VID_DEPTH_32BPP;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
815 to->flags = VID_CAP_EXPAND | VID_CAP_SHRINK | VID_CAP_COLORKEY;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
816 return 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
817 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
818 else to->depth = to->flags = 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
819 return ENOSYS;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
820 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
821
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
822 int vixConfigPlayback(vidix_playback_t *vinfo){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
823 uint32_t i;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
824 printf("called %s\n", __FUNCTION__);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
825 if (! is_supported_fourcc(vinfo->fourcc))
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
826 return ENOSYS;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
827
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
828 info->width = vinfo->src.w;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
829 info->height = vinfo->src.h;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
830
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
831 info->d_width = vinfo->dest.w;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
832 info->d_height = vinfo->dest.h;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
833 info->wx = vinfo->dest.x;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
834 info->wy = vinfo->dest.y;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
835 info->format = vinfo->fourcc;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
836
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
837 printf("[nvidia_vid] setting up a %dx%d-%dx%d video window (src %dx%d), format 0x%X\n",
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
838 info->d_width, info->d_height, info->wx, info->wy, info->width, info->height, vinfo->fourcc);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
839
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
840
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
841 vinfo->dga_addr=(void*)(info->picture_base);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
842
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
843 switch (vinfo->fourcc)
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
844 {
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
845 case IMGFMT_YUY2:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
846 case IMGFMT_UYVY:
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
847
11086
7f659e7b7ce1 the yv12 image looked more like a yuy2 image ;)
faust3
parents: 11085
diff changeset
848 vinfo->dest.pitch.y = 16;
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
849 vinfo->dest.pitch.u = 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
850 vinfo->dest.pitch.v = 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
851
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
852 vinfo->offset.y = 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
853 vinfo->offset.v = 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
854 vinfo->offset.u = 0;
11902
faust3
parents: 11895
diff changeset
855 info->pitch = ((info->width << 1) + (vinfo->dest.pitch.y-1)) & ~(vinfo->dest.pitch.y-1);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
856 vinfo->frame_size = info->pitch * info->height;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
857 break;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
858 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
859 info->buffer_size = vinfo->frame_size;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
860 info->num_frames = vinfo->num_frames= (info->chip.fbsize - info->picture_offset)/vinfo->frame_size;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
861 if(vinfo->num_frames > MAX_FRAMES)vinfo->num_frames = MAX_FRAMES;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
862 // vinfo->num_frames = 1;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
863 // printf("[nvidia_vid] Number of frames %i\n",vinfo->num_frames);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
864 for(i=0;i <vinfo->num_frames;i++)vinfo->offsets[i] = vinfo->frame_size*i;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
865 return 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
866 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
867
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
868 int vixPlaybackOn(void){
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
869 rivatv_overlay_start(info,info->cur_frame);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
870 return 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
871 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
872
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
873 int vixPlaybackOff(void){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
874 rivatv_overlay_stop(info);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
875 return 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
876 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
877
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
878 int vixSetGrKeys( const vidix_grkey_t * grkey){
11159
8ac4d769a1fb support for disabling the colorkey
alex
parents: 11118
diff changeset
879 if (grkey->ckey.op == CKEY_FALSE)
8ac4d769a1fb support for disabling the colorkey
alex
parents: 11118
diff changeset
880 {
8ac4d769a1fb support for disabling the colorkey
alex
parents: 11118
diff changeset
881 info->use_colorkey = 0;
8ac4d769a1fb support for disabling the colorkey
alex
parents: 11118
diff changeset
882 printf("[nvidia_vid] colorkeying disabled\n");
8ac4d769a1fb support for disabling the colorkey
alex
parents: 11118
diff changeset
883 }
11165
e1c3f72da3d1 fixed colorkey enabling/disabling
faust3
parents: 11160
diff changeset
884 else {
11159
8ac4d769a1fb support for disabling the colorkey
alex
parents: 11118
diff changeset
885 info->use_colorkey = 1;
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
886 info->vidixcolorkey = ((grkey->ckey.red<<16)|(grkey->ckey.green<<8)|grkey->ckey.blue);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
887 printf("[nvidia_vid] set colorkey 0x%x\n",info->vidixcolorkey);
11165
e1c3f72da3d1 fixed colorkey enabling/disabling
faust3
parents: 11160
diff changeset
888 }
11210
60288914167b update overlay only if it is configured
faust3
parents: 11165
diff changeset
889 if(info->d_width && info->d_height)rivatv_overlay_start(info,0);
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
890 return 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
891 }
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
892
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
893 int vixPlaybackFrameSelect(unsigned int frame){
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
894 // printf("selecting buffer %d\n", frame);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
895 rivatv_overlay_start(info, frame);
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
896 if (info->num_frames >= 1)
11783
c2e36b3193a1 Fix "panning" display
lumag
parents: 11678
diff changeset
897 info->cur_frame = frame/*(frame+1)%info->num_frames*/;
10954
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
898 return 0;
27da030f7201 experimental nvidia_vid, use at your own risk
faust3
parents:
diff changeset
899 }