Mercurial > mplayer.hg
annotate libvo/vo_s3fb.c @ 25978:a8ff60976ccb
FLAT objects cannot have multiple sections, so using the L1 attributes breaks
linking. The FDPIC relocs also break for any other format. Thus check the
compiler environment and select the appropriate sections/relocs.
patch by Mike Frysinger, vapier.adi a gmail d com
author | diego |
---|---|
date | Sat, 16 Feb 2008 15:17:59 +0000 |
parents | c9e9ac2008c2 |
children | d97a607821f1 |
rev | line source |
---|---|
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
1 /* Copyright (C) Mark Sanderson, 2006, <mmp@kiora.ath.cx>. |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
2 * Released under the terms and conditions of the GPL. |
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 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
5 * |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
6 * Hints and tricks: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
7 * - 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
|
8 * - 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
|
9 */ |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
10 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
11 #include <stdio.h> |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
12 #include <stdlib.h> |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
13 #include <errno.h> |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
14 #include <string.h> |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
15 #include <unistd.h> |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
16 #include <sys/ioctl.h> |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
17 #include <fcntl.h> |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
18 #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
|
19 #include <sys/io.h> |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
20 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
21 #include "config.h" |
18540
fb07cde79487
only include sys/mman.h if HAVE_SYS_MMAN_H is defined
ivo
parents:
18535
diff
changeset
|
22 #ifdef HAVE_SYS_MMAN_H |
fb07cde79487
only include sys/mman.h if HAVE_SYS_MMAN_H is defined
ivo
parents:
18535
diff
changeset
|
23 #include <sys/mman.h> |
fb07cde79487
only include sys/mman.h if HAVE_SYS_MMAN_H is defined
ivo
parents:
18535
diff
changeset
|
24 #endif |
18542 | 25 #include "mp_msg.h" |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
26 #include "fastmemcpy.h" |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
27 #include "video_out.h" |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
28 #include "video_out_internal.h" |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
29 #include "aspect.h" |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
30 #include "sub.h" |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
31 |
25216 | 32 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
|
33 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
34 "S3 Virge over fbdev", |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
35 "s3fb", |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
36 "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
|
37 "" |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
38 }; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
39 |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
40 const LIBVO_EXTERN(s3fb) |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
41 |
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
|
42 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
|
43 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
|
44 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
|
45 } 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
|
46 |
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
|
47 static vga_t *v = NULL; |
18691 | 48 static int fd = -1; |
49 static struct fb_fix_screeninfo fb_finfo; | |
50 static struct fb_var_screeninfo fb_vinfo; | |
51 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
|
52 screenwidth, screenheight, screendepth, screenstride, |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
53 vidwidth, vidheight, vidx, vidy, page, offset, sreg; |
18691 | 54 static char *inpage, *inpage0, *smem = NULL; |
55 static void (*alpha_func)(); | |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
56 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
57 static void clear_screen(); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
58 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
59 /* streams registers */ |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
60 #define PSTREAM_CONTROL_REG 0x8180 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
61 #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
|
62 #define SSTREAM_CONTROL_REG 0x8190 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
63 #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
|
64 #define SSTREAM_STRETCH_REG 0x8198 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
65 #define BLEND_CONTROL_REG 0x81A0 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
66 #define PSTREAM_FBADDR0_REG 0x81C0 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
67 #define PSTREAM_FBADDR1_REG 0x81C4 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
68 #define PSTREAM_STRIDE_REG 0x81C8 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
69 #define DOUBLE_BUFFER_REG 0x81CC |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
70 #define SSTREAM_FBADDR0_REG 0x81D0 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
71 #define SSTREAM_FBADDR1_REG 0x81D4 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
72 #define SSTREAM_STRIDE_REG 0x81D8 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
73 #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
|
74 #define K1_VSCALE_REG 0x81E0 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
75 #define K2_VSCALE_REG 0x81E4 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
76 #define DDA_VERT_REG 0x81E8 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
77 #define STREAMS_FIFO_REG 0x81EC |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
78 #define PSTREAM_START_REG 0x81F0 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
79 #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
|
80 #define SSTREAM_START_REG 0x81F8 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
81 #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
|
82 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
83 #define S3_MEMBASE sreg |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
84 #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
|
85 #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
|
86 #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
|
87 #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
|
88 |
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
|
89 #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
|
90 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
91 int readcrtc(int reg) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
92 outb(reg, 0x3d4); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
93 return inb(0x3d5); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
94 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
95 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
96 void writecrtc(int reg, int value) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
97 outb(reg, 0x3d4); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
98 outb(value, 0x3d5); |
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 |
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
|
101 // enable S3 registers |
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
|
102 int enable() { |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
103 int fd; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
104 |
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
|
105 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
|
106 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
|
107 errno = 0; |
18878 | 108 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
|
109 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
|
110 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
|
111 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
|
112 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
|
113 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
|
114 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
|
115 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
|
116 if (v->mmio != MAP_FAILED) { |
18691 | 117 v->cr38 = readcrtc(0x38); |
118 v->cr39 = readcrtc(0x39); | |
119 v->cr53 = readcrtc(0x53); | |
120 writecrtc(0x38, 0x48); | |
121 writecrtc(0x39, 0xa5); | |
122 writecrtc(0x53, 0x08); | |
123 return 1; | |
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 } |
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 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
|
127 } |
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
|
128 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
|
129 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
|
130 } |
24250 | 131 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
|
132 } |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
133 |
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
|
134 void 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
|
135 if (v) { |
18691 | 136 writecrtc(0x53, v->cr53); |
137 writecrtc(0x39, v->cr39); | |
138 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
|
139 ioperm(0x3d4, 2, 0); |
18691 | 140 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
|
141 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
|
142 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
|
143 } |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
144 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
145 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
146 int yuv_on(int format, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int crop, int xres, int yres, int line_length, int offset) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
147 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
|
148 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
149 if (format == 0 || format == 7) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
150 bpp = 4; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
151 else if (format == 6) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
152 bpp = 3; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
153 else |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
154 bpp = 2; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
155 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
156 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
|
157 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
|
158 pitch = src_w * bpp; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
159 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
160 // video card memory layout: |
18691 | 161 // 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
|
162 // 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
|
163 // 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
|
164 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
165 // 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
|
166 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
|
167 offset += tmp; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
168 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
169 // 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
|
170 start = offset + crop * pitch + crop * bpp; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
171 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
172 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
|
173 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
|
174 OUTREG(BLEND_CONTROL_REG, 0x00000020); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
175 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
|
176 OUTREG(OPAQUE_OVERLAY_CONTROL_REG, 0x0); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
177 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
178 OUTREG(PSTREAM_CONTROL_REG, 0x06000000); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
179 OUTREG(PSTREAM_FBADDR0_REG, 0x0); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
180 OUTREG(PSTREAM_FBADDR1_REG, 0x0); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
181 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
|
182 OUTREG(PSTREAM_START_REG, 0x00010001); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
183 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
|
184 //OUTREG(SSTREAM_WINDOW_SIZE_REG, ( ((xres-1) << 16) | yres) & 0x7ff07ff); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
185 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
186 if (dst_w == src_w) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
187 tmp = 0; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
188 else |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
189 tmp = 2; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
190 /* 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
|
191 /* 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
|
192 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
|
193 ((((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
|
194 OUTREG(SSTREAM_STRETCH_REG, |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
195 ((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
|
196 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
|
197 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
|
198 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
|
199 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
|
200 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
|
201 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
|
202 /* 0xc000 = bw & vert interp */ |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
203 /* 0x8000 = no bw save */ |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
204 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
|
205 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
|
206 writecrtc(0x93, (pitch + 7) / 8); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
207 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
208 writecrtc(0x67, readcrtc(0x67) | 0x4); |
18691 | 209 |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
210 return offset; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
211 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
212 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
213 void yuv_off() { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
214 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
|
215 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
|
216 OUTREG(0x81b8, 0x900); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
217 OUTREG(0x81bc, 0x900); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
218 OUTREG(0x81c8, 0x900); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
219 OUTREG(0x81cc, 0x900); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
220 OUTREG(0x81d8, 0x1); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
221 OUTREG(0x81f8, 0x07ff07ff); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
222 OUTREG(0x81fc, 0x00010001); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
223 writecrtc(0x92, 0); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
224 writecrtc(0x93, 0); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
225 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
226 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
227 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
|
228 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
229 char *name; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
230 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
231 if(arg) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
232 name = (char*)arg; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
233 else if(!(name = getenv("FRAMEBUFFER"))) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
234 name = "/dev/fb0"; |
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 if((fd = open(name, O_RDWR)) == -1) { |
18542 | 237 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
|
238 return -1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
239 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
240 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
241 if(ioctl(fd, FBIOGET_FSCREENINFO, &fb_finfo)) { |
18542 | 242 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
|
243 strerror(errno)); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
244 close(fd); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
245 fd = -1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
246 return -1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
247 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
248 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
249 if(ioctl(fd, FBIOGET_VSCREENINFO, &fb_vinfo)) { |
18542 | 250 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
|
251 strerror(errno)); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
252 close(fd); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
253 fd = -1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
254 return -1; |
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 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
257 // 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
|
258 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
|
259 case 16: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
260 case 24: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
261 case 32: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
262 break; // Ok |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
263 default: |
18542 | 264 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
|
265 close(fd); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
266 fd = -1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
267 return -1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
268 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
269 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
270 /* 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
|
271 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
|
272 sreg = fb_finfo.smem_start; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
273 |
18692 | 274 if(smem == (void *)-1) { |
18542 | 275 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
|
276 smem = NULL; |
18553
f85b5c5d5d18
Remove dead code, and do close smem file descriptor during un-init
poirierg
parents:
18542
diff
changeset
|
277 close(fd); |
f85b5c5d5d18
Remove dead code, and do close smem file descriptor during un-init
poirierg
parents:
18542
diff
changeset
|
278 fd = -1; |
18535
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 |
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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 return -1; |
18691 | 287 } |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
288 |
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
|
289 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
|
290 } |
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
|
291 |
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
|
292 /* And close our mess */ |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
293 static void uninit(void) |
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 if (inpage0) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
296 clear_screen(); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
297 yuv_off(); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
298 inpage0 = NULL; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
299 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
300 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
301 if(smem) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
302 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
|
303 smem = NULL; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
304 } |
18691 | 305 |
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
|
306 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
|
307 |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
308 if(fd != -1) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
309 close(fd); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
310 fd = -1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
311 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
312 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
313 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
314 static void clear_screen() |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
315 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
316 if (inpage0) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
317 int n; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
318 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
319 memset(smem, 0, screenheight * screenstride); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
320 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
321 if (in_format == IMGFMT_YUY2) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
322 unsigned short *ptr; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
323 int i; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
324 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
325 ptr = (unsigned short *)inpage0; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
326 n = in_width * in_height; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
327 if (vo_doublebuffering) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
328 n *= 2; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
329 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
|
330 *ptr++ = 0x8000; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
331 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
332 } else { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
333 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
|
334 if (vo_doublebuffering) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
335 n *= 2; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
336 memset(inpage0, 0, n); |
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 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
339 } |
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 /* Setup output screen dimensions etc */ |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
342 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
|
343 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
344 int inpageoffset; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
345 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
346 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
|
347 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
348 // center picture |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
349 vidx = (screenwidth - vidwidth) / 2; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
350 vidy = (screenheight - vidheight) / 2; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
351 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
352 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
|
353 vo_fs = full; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
354 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
355 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
|
356 inpage0 = smem + inpageoffset; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
357 inpage = inpage0; |
18542 | 358 mp_msg(MSGT_VO, MSGL_INFO, "s3fb: output is at %dx%d +%dx%d\n", vidx, vidy, vidwidth, vidheight); |
18535
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
359 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
360 clear_screen(); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
361 } |
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 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
|
364 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
|
365 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
366 screenwidth = fb_vinfo.xres; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
367 screenheight = fb_vinfo.yres; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
368 screenstride = fb_finfo.line_length; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
369 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
|
370 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
371 in_width = width; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
372 in_height = height; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
373 in_format = format; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
374 aspect_save_orig(width,height); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
375 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
376 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
|
377 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
378 /* 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
|
379 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
|
380 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
381 switch(in_format) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
382 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
383 case IMGFMT_YUY2: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
384 in_depth = 2; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
385 in_s3_format = 1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
386 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
|
387 break; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
388 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
389 case IMGFMT_BGR15: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
390 in_depth = 2; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
391 in_s3_format = 3; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
392 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
|
393 break; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
394 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
395 case IMGFMT_BGR16: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
396 in_depth = 2; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
397 in_s3_format = 5; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
398 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
|
399 break; |
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 case IMGFMT_BGR24: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
402 in_depth = 3; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
403 in_s3_format = 6; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
404 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
|
405 break; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
406 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
407 case IMGFMT_BGR32: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
408 in_depth = 4; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
409 in_s3_format = 7; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
410 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
|
411 break; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
412 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
413 default: |
18542 | 414 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
|
415 return -1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
416 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
417 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
418 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
|
419 if (vo_doublebuffering) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
420 page = offset; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
421 else |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
422 page = 0; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
423 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
424 if(screenheight * screenstride + page + offset > fb_finfo.smem_len) { |
18542 | 425 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
|
426 return -1; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
427 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
428 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
429 setup_screen(flags & VOFLAG_FULLSCREEN); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
430 if (vo_doublebuffering) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
431 inpage = inpage0 + page; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
432 |
18542 | 433 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
|
434 screenwidth, screenheight, screendepth * 8, |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
435 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
|
436 d_width, d_height); |
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 return 0; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
439 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
440 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
441 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
|
442 unsigned char *srca, int stride) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
443 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
444 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
|
445 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
|
446 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
447 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
448 static void draw_osd(void) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
449 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
450 if (!vo_doublebuffering) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
451 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
|
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 /* Render onto the screen */ |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
455 static void flip_page(void) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
456 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
457 if(vo_doublebuffering) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
458 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
|
459 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
|
460 page ^= offset; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
461 inpage = inpage0 + page; |
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 } |
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 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
|
466 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
467 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
|
468 return 0; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
469 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
470 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
471 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
|
472 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
473 return 1; |
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 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
476 /* Attempt to start doing DR */ |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
477 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
|
478 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
479 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
480 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
|
481 return VO_FALSE; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
482 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
|
483 return VO_FALSE; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
484 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
|
485 return VO_FALSE; // TODO ?? |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
486 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
487 switch(in_format) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
488 case IMGFMT_BGR15: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
489 case IMGFMT_BGR16: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
490 case IMGFMT_BGR24: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
491 case IMGFMT_BGR32: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
492 case IMGFMT_YUY2: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
493 mpi->planes[0] = inpage; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
494 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
|
495 break; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
496 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
497 default: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
498 return VO_FALSE; |
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 mpi->width = in_width; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
502 mpi->flags |= MP_IMGFLAG_DIRECT; |
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 return VO_TRUE; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
505 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
506 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
507 static int control(uint32_t request, void *data, ...) |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
508 { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
509 switch(request) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
510 case VOCTRL_GET_IMAGE: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
511 return get_image(data); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
512 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
513 case VOCTRL_QUERY_FORMAT: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
514 switch(*((uint32_t*)data)) { |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
515 case IMGFMT_BGR15: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
516 case IMGFMT_BGR16: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
517 case IMGFMT_BGR24: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
518 case IMGFMT_BGR32: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
519 case IMGFMT_YUY2: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
520 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
|
521 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
|
522 } |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
523 |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
524 return 0; /* Not supported */ |
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 case VOCTRL_FULLSCREEN: |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
527 setup_screen(!vo_fs); |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
528 return 0; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
529 } |
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 return VO_NOTIMPL; |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
532 } |
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 /* Dummy funcs */ |
8e92dd0ff93a
Add YUY2 and back end scaling on S3 Virge chips in combination with fbdev.
gpoirier
parents:
diff
changeset
|
535 static void check_events(void) {} |