annotate libvo/vo_s3fb.c @ 34377:d443d66a746c

av_helpers: show libav* version and configuration.
author cigaes
date Sat, 24 Dec 2011 10:55:49 +0000
parents 786d1187960d
children 5d3f93051de9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
1 /*
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
2 * copyright (C) 2006 Mark Sanderson <mmp@kiora.ath.cx>
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
3 *
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
4 * 30-Mar-2006 Modified from tdfxfb.c by Mark Zealey
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
5 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
6 * This file is part of MPlayer.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
7 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
8 * MPlayer is free software; you can redistribute it and/or modify
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
9 * it under the terms of the GNU General Public License as published by
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
11 * (at your option) any later version.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
12 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
13 * MPlayer is distributed in the hope that it will be useful,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
16 * GNU General Public License for more details.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
17 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
18 * You should have received a copy of the GNU General Public License along
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
19 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
21 */
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
22
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25220
diff changeset
23 /* Hints and tricks:
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
24 * - Use -dr to get direct rendering
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
25 * - Use -vf yuy2 to get yuy2 rendering, *MUCH* faster than yv12
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
26 */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
27
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
28 #include <stdio.h>
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
29 #include <stdlib.h>
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
30 #include <errno.h>
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
31 #include <string.h>
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
32 #include <unistd.h>
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
33 #include <sys/ioctl.h>
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
34 #include <fcntl.h>
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
35 #include <linux/fb.h>
18541
0df97a9423d0 include sys/io.h instead of asm/io.h so iopl() gets declared too
ivo
parents: 18540
diff changeset
36 #include <sys/io.h>
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
37
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
38 #include "config.h"
33412
2a2e9b6551d8 configure: Convert HAVE_SYS_MMAN_H into a 0/1 definition.
diego
parents: 33305
diff changeset
39 #if HAVE_SYS_MMAN_H
18540
fb07cde79487 only include sys/mman.h if HAVE_SYS_MMAN_H is defined
ivo
parents: 18535
diff changeset
40 #include <sys/mman.h>
fb07cde79487 only include sys/mman.h if HAVE_SYS_MMAN_H is defined
ivo
parents: 18535
diff changeset
41 #endif
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
42 #include "mp_msg.h"
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
43 #include "fastmemcpy.h"
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
44 #include "video_out.h"
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
45 #include "video_out_internal.h"
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
46 #include "aspect.h"
32467
fbe5c829c69b Move libvo/sub.[ch] from libvo to sub.
cigaes
parents: 30556
diff changeset
47 #include "sub/sub.h"
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
48
25216
3aee342be929 Make vo info structs const
reimar
parents: 24250
diff changeset
49 static const vo_info_t info =
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
50 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
51 "S3 Virge over fbdev",
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
52 "s3fb",
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
53 "Mark Sanderson <mmp@kiora.ath.cx>",
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
54 ""
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
55 };
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
56
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
57 const LIBVO_EXTERN(s3fb)
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
58
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
59 typedef struct vga_type {
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
60 int cr38, cr39, cr53;
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
61 unsigned char *mmio;
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
62 } vga_t;
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
63
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
64 static vga_t *v = NULL;
18691
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
65 static int fd = -1;
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
66 static struct fb_fix_screeninfo fb_finfo;
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
67 static struct fb_var_screeninfo fb_vinfo;
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
68 static uint32_t in_width, in_height, in_format, in_depth, in_s3_format,
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
69 screenwidth, screenheight, screendepth, screenstride,
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
70 vidwidth, vidheight, vidx, vidy, page, offset, sreg;
18691
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
71 static char *inpage, *inpage0, *smem = NULL;
33845
786d1187960d libvo: extend alpha_func function pointers with parameter type declaration
diego
parents: 33412
diff changeset
72 static void (*alpha_func)(int, int, unsigned char*, unsigned char*, int, unsigned char*, int);
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
73
28232
8df85ad26746 Add missing 'void' keyword to parameterless function declarations.
diego
parents: 27509
diff changeset
74 static void clear_screen(void);
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
75
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
76 /* streams registers */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
77 #define PSTREAM_CONTROL_REG 0x8180
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
78 #define COL_CHROMA_KEY_CONTROL_REG 0x8184
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
79 #define SSTREAM_CONTROL_REG 0x8190
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
80 #define CHROMA_KEY_UPPER_BOUND_REG 0x8194
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
81 #define SSTREAM_STRETCH_REG 0x8198
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
82 #define BLEND_CONTROL_REG 0x81A0
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
83 #define PSTREAM_FBADDR0_REG 0x81C0
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
84 #define PSTREAM_FBADDR1_REG 0x81C4
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
85 #define PSTREAM_STRIDE_REG 0x81C8
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
86 #define DOUBLE_BUFFER_REG 0x81CC
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
87 #define SSTREAM_FBADDR0_REG 0x81D0
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
88 #define SSTREAM_FBADDR1_REG 0x81D4
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
89 #define SSTREAM_STRIDE_REG 0x81D8
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
90 #define OPAQUE_OVERLAY_CONTROL_REG 0x81DC
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
91 #define K1_VSCALE_REG 0x81E0
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
92 #define K2_VSCALE_REG 0x81E4
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
93 #define DDA_VERT_REG 0x81E8
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
94 #define STREAMS_FIFO_REG 0x81EC
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
95 #define PSTREAM_START_REG 0x81F0
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
96 #define PSTREAM_WINDOW_SIZE_REG 0x81F4
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
97 #define SSTREAM_START_REG 0x81F8
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
98 #define SSTREAM_WINDOW_SIZE_REG 0x81FC
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
99
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
100 #define S3_MEMBASE sreg
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
101 #define S3_NEWMMIO_REGBASE 0x1000000 /* 16MB */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
102 #define S3_NEWMMIO_REGSIZE 0x10000 /* 64KB */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
103 #define S3V_MMIO_REGSIZE 0x8000 /* 32KB */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
104 #define S3_NEWMMIO_VGABASE (S3_NEWMMIO_REGBASE + 0x8000)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
105
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
106 #define OUTREG(mmreg, value) *(unsigned int *)(&v->mmio[mmreg]) = value
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
107
30556
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
108 static int readcrtc(int reg)
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
109 {
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
110 outb(reg, 0x3d4);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
111 return inb(0x3d5);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
112 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
113
30556
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
114 static void writecrtc(int reg, int value)
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
115 {
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
116 outb(reg, 0x3d4);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
117 outb(value, 0x3d5);
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
118 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
119
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
120 // enable S3 registers
30556
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
121 static int enable(void)
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
122 {
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
123 int fd;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
124
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
125 if (v)
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
126 return 1;
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
127 errno = 0;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18692
diff changeset
128 v = malloc(sizeof(vga_t));
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
129 if (v) {
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
130 if (ioperm(0x3d4, 2, 1) == 0) {
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
131 fd = open("/dev/mem", O_RDWR);
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
132 if (fd != -1) {
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
133 v->mmio = mmap(0, S3_NEWMMIO_REGSIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd,
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
134 S3_MEMBASE + S3_NEWMMIO_REGBASE);
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
135 close(fd);
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
136 if (v->mmio != MAP_FAILED) {
18691
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
137 v->cr38 = readcrtc(0x38);
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
138 v->cr39 = readcrtc(0x39);
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
139 v->cr53 = readcrtc(0x53);
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
140 writecrtc(0x38, 0x48);
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
141 writecrtc(0x39, 0xa5);
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
142 writecrtc(0x53, 0x08);
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
143 return 1;
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
144 }
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
145 }
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
146 iopl(0);
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
147 }
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
148 free(v);
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
149 v = NULL;
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
150 }
24250
d8b1ae2c164a warning fix:
diego
parents: 18878
diff changeset
151 return 0;
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
152 }
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
153
30556
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
154 static void disable(void)
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
155 {
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
156 if (v) {
18691
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
157 writecrtc(0x53, v->cr53);
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
158 writecrtc(0x39, v->cr39);
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
159 writecrtc(0x38, v->cr38);
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
160 ioperm(0x3d4, 2, 0);
18691
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
161 munmap(v->mmio, S3_NEWMMIO_REGSIZE);
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
162 free(v);
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
163 v = NULL;
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
164 }
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
165 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
166
30556
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
167 static int yuv_on(int format, int src_w, int src_h, int dst_x, int dst_y,
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
168 int dst_w, int dst_h, int crop, int xres, int yres,
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
169 int line_length, int offset)
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
170 {
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
171 int tmp, pitch, start, src_wc, src_hc, bpp;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
172
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
173 if (format == 0 || format == 7)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
174 bpp = 4;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
175 else if (format == 6)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
176 bpp = 3;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
177 else
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
178 bpp = 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
179
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
180 src_wc = src_w - crop * 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
181 src_hc = src_h - crop * 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
182 pitch = src_w * bpp;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
183
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
184 // video card memory layout:
18691
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
185 // 0-n: visible screen memory, n = width * height * bytes per pixel
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
186 // n-m: scaler source memory, n is aligned to a page boundary
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
187 // m+: scaler source memory for multiple buffers
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
188
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
189 // offset is the first aligned byte after the screen memory, where the scaler input buffer is
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
190 tmp = (yres * line_length + 4095) & ~4095;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
191 offset += tmp;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
192
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
193 // start is the top left viewable scaler input pixel
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
194 start = offset + crop * pitch + crop * bpp;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
195
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
196 OUTREG(COL_CHROMA_KEY_CONTROL_REG, 0x47000000);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
197 OUTREG(CHROMA_KEY_UPPER_BOUND_REG, 0x0);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
198 OUTREG(BLEND_CONTROL_REG, 0x00000020);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
199 OUTREG(DOUBLE_BUFFER_REG, 0x0); /* Choose fbaddr0 as stream source. */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
200 OUTREG(OPAQUE_OVERLAY_CONTROL_REG, 0x0);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
201
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
202 OUTREG(PSTREAM_CONTROL_REG, 0x06000000);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
203 OUTREG(PSTREAM_FBADDR0_REG, 0x0);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
204 OUTREG(PSTREAM_FBADDR1_REG, 0x0);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
205 OUTREG(PSTREAM_STRIDE_REG, line_length);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
206 OUTREG(PSTREAM_START_REG, 0x00010001);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
207 OUTREG(PSTREAM_WINDOW_SIZE_REG, 0x00010001);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
208 //OUTREG(SSTREAM_WINDOW_SIZE_REG, ( ((xres-1) << 16) | yres) & 0x7ff07ff);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
209
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
210 if (dst_w == src_w)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
211 tmp = 0;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
212 else
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
213 tmp = 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
214 /* format 1=YCbCr-16 2=YUV-16 3=BGR15 4=YUV-16/32(mixed 2/4byte stride) 5=BGR16 6=BGR24 0,7=BGR32 */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
215 /* The YUV format pixel has a range of value from 0 to 255, while the YCbCr format pixel values are in the range of 16 to 240. */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
216 OUTREG(SSTREAM_CONTROL_REG, tmp << 28 | (format << 24) |
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
217 ((((src_wc-1)<<1)-(dst_w-1)) & 0xfff));
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
218 OUTREG(SSTREAM_STRETCH_REG,
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
219 ((src_wc - 1) & 0x7ff) | (((src_wc - dst_w-1) & 0x7ff) << 16));
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
220 OUTREG(SSTREAM_FBADDR0_REG, start & 0x3fffff );
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
221 OUTREG(SSTREAM_STRIDE_REG, pitch & 0xfff );
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
222 OUTREG(SSTREAM_START_REG, ((dst_x + 1) << 16) | (dst_y + 1));
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
223 OUTREG(SSTREAM_WINDOW_SIZE_REG, ( ((dst_w-1) << 16) | (dst_h ) ) & 0x7ff07ff);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
224 OUTREG(K1_VSCALE_REG, src_hc - 1 );
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
225 OUTREG(K2_VSCALE_REG, (src_hc - dst_h) & 0x7ff );
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
226 /* 0xc000 = bw & vert interp */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
227 /* 0x8000 = no bw save */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
228 OUTREG(DDA_VERT_REG, (((~dst_h)-1) & 0xfff ) | 0xc000);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
229 writecrtc(0x92, (((pitch + 7) / 8) >> 8) | 0x80);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
230 writecrtc(0x93, (pitch + 7) / 8);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
231
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
232 writecrtc(0x67, readcrtc(0x67) | 0x4);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
233
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
234 return offset;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
235 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
236
30556
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
237 static void yuv_off(void)
358ac046eccc libvo: Mark functions not used outside of their files as static.
diego
parents: 29263
diff changeset
238 {
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
239 writecrtc(0x67, readcrtc(0x67) & ~0xc);
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
240 memset(v->mmio + 0x8180, 0, 0x80);
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
241 OUTREG(0x81b8, 0x900);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
242 OUTREG(0x81bc, 0x900);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
243 OUTREG(0x81c8, 0x900);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
244 OUTREG(0x81cc, 0x900);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
245 OUTREG(0x81d8, 0x1);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
246 OUTREG(0x81f8, 0x07ff07ff);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
247 OUTREG(0x81fc, 0x00010001);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
248 writecrtc(0x92, 0);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
249 writecrtc(0x93, 0);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
250 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
251
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
252 static int preinit(const char *arg)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
253 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
254 char *name;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
255
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
256 if(arg)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
257 name = (char*)arg;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
258 else if(!(name = getenv("FRAMEBUFFER")))
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
259 name = "/dev/fb0";
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
260
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
261 if((fd = open(name, O_RDWR)) == -1) {
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
262 mp_msg(MSGT_VO, MSGL_FATAL, "s3fb: can't open %s: %s\n", name, strerror(errno));
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
263 return -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
264 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
265
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
266 if(ioctl(fd, FBIOGET_FSCREENINFO, &fb_finfo)) {
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
267 mp_msg(MSGT_VO, MSGL_FATAL, "s3fb: problem with FBITGET_FSCREENINFO ioctl: %s\n",
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
268 strerror(errno));
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
269 close(fd);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
270 fd = -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
271 return -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
272 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
273
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
274 if(ioctl(fd, FBIOGET_VSCREENINFO, &fb_vinfo)) {
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
275 mp_msg(MSGT_VO, MSGL_FATAL, "s3fb: problem with FBITGET_VSCREENINFO ioctl: %s\n",
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
276 strerror(errno));
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
277 close(fd);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
278 fd = -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
279 return -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
280 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
281
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
282 // Check the depth now as config() musn't fail
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
283 switch(fb_vinfo.bits_per_pixel) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
284 case 16:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
285 case 24:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
286 case 32:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
287 break; // Ok
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
288 default:
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
289 mp_msg(MSGT_VO, MSGL_FATAL, "s3fb: %d bpp output is not supported\n", fb_vinfo.bits_per_pixel);
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
290 close(fd);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
291 fd = -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
292 return -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
293 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
294
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
295 /* Open up a window to the hardware */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
296 smem = mmap(0, fb_finfo.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
297 sreg = fb_finfo.smem_start;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
298
18692
9a3d768cb8da Fix a condition as suggested by Rich.
gpoirier
parents: 18691
diff changeset
299 if(smem == (void *)-1) {
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
300 mp_msg(MSGT_VO, MSGL_FATAL, "s3fb: Couldn't map memory areas: %s\n", strerror(errno));
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
301 smem = NULL;
18553
f85b5c5d5d18 Remove dead code, and do close smem file descriptor during un-init
poirierg
parents: 18542
diff changeset
302 close(fd);
f85b5c5d5d18 Remove dead code, and do close smem file descriptor during un-init
poirierg
parents: 18542
diff changeset
303 fd = -1;
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
304 return -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
305 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
306
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
307 if (!enable()) {
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
308 mp_msg(MSGT_VO, MSGL_FATAL, "s3fb: Couldn't map S3 registers: %s\n", strerror(errno));
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
309 close(fd);
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
310 fd = -1;
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
311 return -1;
18691
b08913965b6a cosmetics
gpoirier
parents: 18690
diff changeset
312 }
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
313
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
314 return 0; // Success
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
315 }
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
316
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
317 /* And close our mess */
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
318 static void uninit(void)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
319 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
320 if (inpage0) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
321 clear_screen();
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
322 yuv_off();
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
323 inpage0 = NULL;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
324 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
325
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
326 if(smem) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
327 munmap(smem, fb_finfo.smem_len);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
328 smem = NULL;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
329 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
330
18690
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
331 disable();
f31c0f34db76 Fixes suggested by Ivo, and failure under non-root operation improved. Original patch by Mark Sanderson < mmp AH kiora P ath P cx > (reworked a bit to try to meet out commit policy).
gpoirier
parents: 18553
diff changeset
332
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
333 if(fd != -1) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
334 close(fd);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
335 fd = -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
336 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
337 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
338
28232
8df85ad26746 Add missing 'void' keyword to parameterless function declarations.
diego
parents: 27509
diff changeset
339 static void clear_screen(void)
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
340 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
341 if (inpage0) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
342 int n;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
343
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
344 memset(smem, 0, screenheight * screenstride);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
345
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
346 if (in_format == IMGFMT_YUY2) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
347 unsigned short *ptr;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
348 int i;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
349
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
350 ptr = (unsigned short *)inpage0;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
351 n = in_width * in_height;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
352 if (vo_doublebuffering)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
353 n *= 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
354 for(i=0; i<n; i++)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
355 *ptr++ = 0x8000;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
356
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
357 } else {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
358 n = in_depth * in_width * in_height;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
359 if (vo_doublebuffering)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
360 n *= 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
361 memset(inpage0, 0, n);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
362 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
363 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
364 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
365
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
366 /* Setup output screen dimensions etc */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
367 static void setup_screen(uint32_t full)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
368 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
369 int inpageoffset;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
370
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
371 aspect(&vidwidth, &vidheight, full ? A_ZOOM : A_NOZOOM);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
372
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
373 // center picture
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
374 vidx = (screenwidth - vidwidth) / 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
375 vidy = (screenheight - vidheight) / 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
376
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
377 geometry(&vidx, &vidy, &vidwidth, &vidheight, screenwidth, screenheight);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
378 vo_fs = full;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
379
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
380 inpageoffset = yuv_on(in_s3_format, in_width, in_height, vidx, vidy, vidwidth, vidheight, 0, screenwidth, screenheight, screenstride, 0);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
381 inpage0 = smem + inpageoffset;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
382 inpage = inpage0;
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
383 mp_msg(MSGT_VO, MSGL_INFO, "s3fb: output is at %dx%d +%dx%d\n", vidx, vidy, vidwidth, vidheight);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
384
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
385 clear_screen();
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
386 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
387
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
388 static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height,
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
389 uint32_t flags, char *title, uint32_t format)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
390 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
391 screenwidth = fb_vinfo.xres;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
392 screenheight = fb_vinfo.yres;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
393 screenstride = fb_finfo.line_length;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
394 aspect_save_screenres(fb_vinfo.xres,fb_vinfo.yres);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
395
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
396 in_width = width;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
397 in_height = height;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
398 in_format = format;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
399 aspect_save_orig(width,height);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
400
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
401 aspect_save_prescale(d_width,d_height);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
402
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
403 /* Setup the screen for rendering to */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
404 screendepth = fb_vinfo.bits_per_pixel / 8;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
405
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
406 switch(in_format) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
407
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
408 case IMGFMT_YUY2:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
409 in_depth = 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
410 in_s3_format = 1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
411 alpha_func = vo_draw_alpha_yuy2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
412 break;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
413
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
414 case IMGFMT_BGR15:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
415 in_depth = 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
416 in_s3_format = 3;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
417 alpha_func = vo_draw_alpha_rgb16;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
418 break;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
419
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
420 case IMGFMT_BGR16:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
421 in_depth = 2;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
422 in_s3_format = 5;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
423 alpha_func = vo_draw_alpha_rgb16;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
424 break;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
425
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
426 case IMGFMT_BGR24:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
427 in_depth = 3;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
428 in_s3_format = 6;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
429 alpha_func = vo_draw_alpha_rgb24;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
430 break;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
431
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
432 case IMGFMT_BGR32:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
433 in_depth = 4;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
434 in_s3_format = 7;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
435 alpha_func = vo_draw_alpha_rgb32;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
436 break;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
437
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
438 default:
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
439 mp_msg(MSGT_VO, MSGL_FATAL, "s3fb: Eik! Something's wrong with control().\n");
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
440 return -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
441 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
442
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
443 offset = in_width * in_depth * in_height;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
444 if (vo_doublebuffering)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
445 page = offset;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
446 else
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
447 page = 0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
448
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
449 if(screenheight * screenstride + page + offset > fb_finfo.smem_len) {
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
450 mp_msg(MSGT_VO, MSGL_FATAL, "s3fb: Not enough video memory to play this movie. Try at a lower resolution\n");
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
451 return -1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
452 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
453
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
454 setup_screen(flags & VOFLAG_FULLSCREEN);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
455 if (vo_doublebuffering)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
456 inpage = inpage0 + page;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28232
diff changeset
457
18542
497803ff6b9c use mp_msg instead of printf
ivo
parents: 18541
diff changeset
458 mp_msg(MSGT_VO, MSGL_INFO, "s3fb: screen is %dx%d at %d bpp, in is %dx%d at %d bpp, norm is %dx%d\n",
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
459 screenwidth, screenheight, screendepth * 8,
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
460 in_width, in_height, in_depth * 8,
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
461 d_width, d_height);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
462
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
463 return 0;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
464 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
465
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
466 static void draw_alpha(int x, int y, int w, int h, unsigned char *src,
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
467 unsigned char *srca, int stride)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
468 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
469 char *dst = inpage + (y * in_width + x) * in_depth;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
470 alpha_func(w, h, src, srca, stride, dst, in_width * in_depth);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
471 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
472
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
473 static void draw_osd(void)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
474 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
475 if (!vo_doublebuffering)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
476 vo_draw_text(in_width, in_height, draw_alpha);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
477 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
478
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
479 /* Render onto the screen */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
480 static void flip_page(void)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
481 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
482 if(vo_doublebuffering) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
483 vo_draw_text(in_width, in_height, draw_alpha);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
484 yuv_on(in_s3_format, in_width, in_height, vidx, vidy, vidwidth, vidheight, 0, screenwidth, screenheight, screenstride, page);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
485 page ^= offset;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
486 inpage = inpage0 + page;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
487 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
488 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
489
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
490 static int draw_frame(uint8_t *src[])
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
491 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
492 mem2agpcpy(inpage, src[0], in_width * in_depth * in_height);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
493 return 0;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
494 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
495
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
496 static int draw_slice(uint8_t *i[], int s[], int w, int h, int x, int y)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
497 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
498 return 1;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
499 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
500
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
501 /* Attempt to start doing DR */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
502 static uint32_t get_image(mp_image_t *mpi)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
503 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
504
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
505 if(mpi->flags & MP_IMGFLAG_READABLE)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
506 return VO_FALSE;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
507 if(mpi->type == MP_IMGTYPE_STATIC && vo_doublebuffering)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
508 return VO_FALSE;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
509 if(mpi->type > MP_IMGTYPE_TEMP)
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
510 return VO_FALSE; // TODO ??
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
511
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
512 switch(in_format) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
513 case IMGFMT_BGR15:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
514 case IMGFMT_BGR16:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
515 case IMGFMT_BGR24:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
516 case IMGFMT_BGR32:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
517 case IMGFMT_YUY2:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
518 mpi->planes[0] = inpage;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
519 mpi->stride[0] = in_width * in_depth;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
520 break;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
521
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
522 default:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
523 return VO_FALSE;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
524 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
525
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
526 mpi->width = in_width;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
527 mpi->flags |= MP_IMGFLAG_DIRECT;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
528
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
529 return VO_TRUE;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
530 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
531
33305
ddb45e9443ec Remove the variable arguments from the libvo control() functions.
iive
parents: 32467
diff changeset
532 static int control(uint32_t request, void *data)
18535
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
533 {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
534 switch(request) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
535 case VOCTRL_GET_IMAGE:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
536 return get_image(data);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
537
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
538 case VOCTRL_QUERY_FORMAT:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
539 switch(*((uint32_t*)data)) {
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
540 case IMGFMT_BGR15:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
541 case IMGFMT_BGR16:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
542 case IMGFMT_BGR24:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
543 case IMGFMT_BGR32:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
544 case IMGFMT_YUY2:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
545 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW |
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
546 VFCAP_OSD | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
547 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
548
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
549 return 0; /* Not supported */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
550
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
551 case VOCTRL_FULLSCREEN:
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
552 setup_screen(!vo_fs);
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
553 return 0;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
554 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
555
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
556 return VO_NOTIMPL;
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
557 }
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
558
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
559 /* Dummy funcs */
8e92dd0ff93a Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff changeset
560 static void check_events(void) {}