annotate libmpdemux/tvi_bsdbt848.c @ 9278:caea8ed36b48

The reason why mplayer crashes (in some cases) when using x11 output and -wid (>0) parameter is this: Mplayer by default creates a colormap using DirectColor visual. If the window given to mplayer uses TrueColor visual there will be an error when mplayer sets the colormap for the window. This patch modifies mplayer to use TrueColor visual if the window given to mplayer uses TrueColor. Another solution is to make sure that the window given to mplayer is created using DirectColor visual if it is supported by the display. Jouni Tulkki <jitulkki@cc.hut.fi>
author arpi
date Tue, 04 Feb 2003 18:31:44 +0000
parents 1ebf4c3ab032
children 0ea7b9c6c27f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5081
7473fca49ca0 initial
alex
parents:
diff changeset
1 /*
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
2 (C)2002 Charles R. Henrich (henrich@msu.edu)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
3 *BSD (hopefully, requires working driver!) BrookTree capture support.
5081
7473fca49ca0 initial
alex
parents:
diff changeset
4
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
5 Still in (active) development!
5081
7473fca49ca0 initial
alex
parents:
diff changeset
6
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
7 v1.1 Mar 13 2002 Fully functional, need to move ring buffer to
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
8 the kernel driver.
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
9 v1.0 Feb 19 2002 First Release, need to add support for changing
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
10 audio parameters.
5081
7473fca49ca0 initial
alex
parents:
diff changeset
11 */
7473fca49ca0 initial
alex
parents:
diff changeset
12
7473fca49ca0 initial
alex
parents:
diff changeset
13 #include "config.h"
7473fca49ca0 initial
alex
parents:
diff changeset
14
7473fca49ca0 initial
alex
parents:
diff changeset
15 #if defined(USE_TV) && defined(HAVE_TV_BSDBT848)
7473fca49ca0 initial
alex
parents:
diff changeset
16
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
17 #define RINGSIZE 8
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
18 #define FRAGSIZE 4096 /* (2^12 see SETFRAGSIZE below) */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
19
5081
7473fca49ca0 initial
alex
parents:
diff changeset
20 #define TRUE (1==1)
7473fca49ca0 initial
alex
parents:
diff changeset
21 #define FALSE (1==0)
7473fca49ca0 initial
alex
parents:
diff changeset
22
7473fca49ca0 initial
alex
parents:
diff changeset
23 #define PAL_WIDTH 768
7473fca49ca0 initial
alex
parents:
diff changeset
24 #define PAL_HEIGHT 576
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
25 #define PAL_FPS 25
5081
7473fca49ca0 initial
alex
parents:
diff changeset
26
7473fca49ca0 initial
alex
parents:
diff changeset
27 #define NTSC_WIDTH 640
7473fca49ca0 initial
alex
parents:
diff changeset
28 #define NTSC_HEIGHT 480
8953
1ebf4c3ab032 NTSC is 29.97 fps, not 30. wrong values here are likely to cause
rfelker
parents: 5886
diff changeset
29 #define NTSC_FPS 29.97
5081
7473fca49ca0 initial
alex
parents:
diff changeset
30
7473fca49ca0 initial
alex
parents:
diff changeset
31 #include <stdio.h>
7473fca49ca0 initial
alex
parents:
diff changeset
32 #include <stdlib.h>
7473fca49ca0 initial
alex
parents:
diff changeset
33 #include <unistd.h>
7473fca49ca0 initial
alex
parents:
diff changeset
34 #include <fcntl.h>
7473fca49ca0 initial
alex
parents:
diff changeset
35 #include <sys/types.h>
7473fca49ca0 initial
alex
parents:
diff changeset
36 #include <sys/mman.h>
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
37 #include <sys/filio.h>
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
38 #include <sys/time.h>
5081
7473fca49ca0 initial
alex
parents:
diff changeset
39 #include <signal.h>
7473fca49ca0 initial
alex
parents:
diff changeset
40 #include <string.h>
7473fca49ca0 initial
alex
parents:
diff changeset
41
5872
02576893af2a OpenBSD, NetBSD portability patches by
arpi
parents: 5572
diff changeset
42 #ifdef __NetBSD__
02576893af2a OpenBSD, NetBSD portability patches by
arpi
parents: 5572
diff changeset
43 #include <dev/ic/bt8xx.h>
02576893af2a OpenBSD, NetBSD portability patches by
arpi
parents: 5572
diff changeset
44 #else
5081
7473fca49ca0 initial
alex
parents:
diff changeset
45 #include <machine/ioctl_meteor.h>
7473fca49ca0 initial
alex
parents:
diff changeset
46 #include <machine/ioctl_bt848.h>
5872
02576893af2a OpenBSD, NetBSD portability patches by
arpi
parents: 5572
diff changeset
47 #endif
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
48
5142
7fc559dbc607 BSD compatibility fix by Steven M. Schultz
alex
parents: 5081
diff changeset
49 #ifdef HAVE_SYS_SOUNDCARD_H
7fc559dbc607 BSD compatibility fix by Steven M. Schultz
alex
parents: 5081
diff changeset
50 #include <sys/soundcard.h>
7fc559dbc607 BSD compatibility fix by Steven M. Schultz
alex
parents: 5081
diff changeset
51 #else
5886
d4307620912d soundcard.h fix, by Bernd Ernesti <mplayer@lists.veego.de>
arpi
parents: 5872
diff changeset
52 #ifdef HAVE_SOUNDCARD_H
d4307620912d soundcard.h fix, by Bernd Ernesti <mplayer@lists.veego.de>
arpi
parents: 5872
diff changeset
53 #include <soundcard.h>
d4307620912d soundcard.h fix, by Bernd Ernesti <mplayer@lists.veego.de>
arpi
parents: 5872
diff changeset
54 #else
5081
7473fca49ca0 initial
alex
parents:
diff changeset
55 #include <machine/soundcard.h>
5142
7fc559dbc607 BSD compatibility fix by Steven M. Schultz
alex
parents: 5081
diff changeset
56 #endif
5886
d4307620912d soundcard.h fix, by Bernd Ernesti <mplayer@lists.veego.de>
arpi
parents: 5872
diff changeset
57 #endif
5081
7473fca49ca0 initial
alex
parents:
diff changeset
58
7473fca49ca0 initial
alex
parents:
diff changeset
59 #include "../libvo/img_format.h"
7473fca49ca0 initial
alex
parents:
diff changeset
60 #include "tv.h"
7473fca49ca0 initial
alex
parents:
diff changeset
61
7473fca49ca0 initial
alex
parents:
diff changeset
62 /* information about this file */
7473fca49ca0 initial
alex
parents:
diff changeset
63 static tvi_info_t info = {
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
64 "Brooktree848 Support",
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
65 "bsdbt848",
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
66 "Charles Henrich",
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
67 "in development"
5081
7473fca49ca0 initial
alex
parents:
diff changeset
68 };
7473fca49ca0 initial
alex
parents:
diff changeset
69
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
70 typedef struct {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
71 int dirty;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
72 double timestamp;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
73 char *buf;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
74 } RBFRAME;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
75
5081
7473fca49ca0 initial
alex
parents:
diff changeset
76 /* private data's */
7473fca49ca0 initial
alex
parents:
diff changeset
77 typedef struct {
7473fca49ca0 initial
alex
parents:
diff changeset
78
7473fca49ca0 initial
alex
parents:
diff changeset
79 /* Audio */
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
80 char *dspdev;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
81 int dspready;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
82 int dspfd;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
83 int dspsamplesize;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
84 int dspstereo;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
85 int dspspeed;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
86 int dspfmt;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
87 int dspframesize;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
88 int dsprate;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
89 long long dspbytesread;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
90
7473fca49ca0 initial
alex
parents:
diff changeset
91 /* Video */
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
92 char *btdev;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
93 int videoready;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
94 int btfd;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
95 int source;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
96 int maxfps;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
97 int fps;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
98 int iformat;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
99 int maxheight;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
100 int maxwidth;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
101 struct meteor_geomet geom;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
102 struct meteor_capframe capframe;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
103
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
104 /* Frame Buffer */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
105
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
106 int framebufsize;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
107 float timestamp;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
108 int curpaintframe;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
109 int curbufframe;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
110 unsigned char *livebuf;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
111 RBFRAME framebuf[RINGSIZE];
5081
7473fca49ca0 initial
alex
parents:
diff changeset
112
7473fca49ca0 initial
alex
parents:
diff changeset
113 /* Inputs */
7473fca49ca0 initial
alex
parents:
diff changeset
114
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
115 int input;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
116
7473fca49ca0 initial
alex
parents:
diff changeset
117 /* Tuner */
7473fca49ca0 initial
alex
parents:
diff changeset
118
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
119 char *tunerdev;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
120 int tunerfd;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
121 int tunerready;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
122 u_long tunerfreq;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
123 struct bktr_chnlset cset;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
124
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
125 /* Other */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
126
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
127 int immediatemode;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
128 double starttime;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
129
7473fca49ca0 initial
alex
parents:
diff changeset
130 } priv_t;
7473fca49ca0 initial
alex
parents:
diff changeset
131
7473fca49ca0 initial
alex
parents:
diff changeset
132 #include "tvi_def.h"
7473fca49ca0 initial
alex
parents:
diff changeset
133
7473fca49ca0 initial
alex
parents:
diff changeset
134 static priv_t *G_private=NULL;
7473fca49ca0 initial
alex
parents:
diff changeset
135
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
136 static int getinput(int innumber);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
137
7473fca49ca0 initial
alex
parents:
diff changeset
138 static void processframe(int signal)
7473fca49ca0 initial
alex
parents:
diff changeset
139 {
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
140 struct timeval curtime;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
141
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
142 if(G_private->immediatemode == TRUE) return;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
143
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
144 gettimeofday(&curtime, NULL);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
145
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
146 if(G_private->framebuf[G_private->curpaintframe].dirty == TRUE)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
147 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
148 memcpy(G_private->framebuf[G_private->curpaintframe].buf,
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
149 G_private->livebuf, G_private->framebufsize);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
150
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
151 G_private->framebuf[G_private->curpaintframe].dirty = FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
152
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
153 G_private->framebuf[G_private->curpaintframe].timestamp =
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
154 curtime.tv_sec + curtime.tv_usec*.000001;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
155
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
156 G_private->curpaintframe++;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
157
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
158 if(G_private->curpaintframe >= RINGSIZE) G_private->curpaintframe = 0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
159 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
160
7473fca49ca0 initial
alex
parents:
diff changeset
161 return;
7473fca49ca0 initial
alex
parents:
diff changeset
162 }
7473fca49ca0 initial
alex
parents:
diff changeset
163
7473fca49ca0 initial
alex
parents:
diff changeset
164 /* handler creator - entry point ! */
7473fca49ca0 initial
alex
parents:
diff changeset
165 tvi_handle_t *tvi_init_bsdbt848(char *device)
7473fca49ca0 initial
alex
parents:
diff changeset
166 {
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
167 return(new_handle());
5081
7473fca49ca0 initial
alex
parents:
diff changeset
168 }
7473fca49ca0 initial
alex
parents:
diff changeset
169
7473fca49ca0 initial
alex
parents:
diff changeset
170 static int control(priv_t *priv, int cmd, void *arg)
7473fca49ca0 initial
alex
parents:
diff changeset
171 {
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
172 switch(cmd)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
173 {
5081
7473fca49ca0 initial
alex
parents:
diff changeset
174
7473fca49ca0 initial
alex
parents:
diff changeset
175 /* Tuner Controls */
7473fca49ca0 initial
alex
parents:
diff changeset
176
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
177 case TVI_CONTROL_IS_TUNER:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
178 if(priv->tunerready == FALSE) return TVI_CONTROL_FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
179 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
180
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
181 case TVI_CONTROL_TUN_GET_FREQ:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
182 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
183 if(ioctl(priv->tunerfd, TVTUNER_GETFREQ, &priv->tunerfreq) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
184 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
185 perror("GETFREQ:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
186 return(TVI_CONTROL_FALSE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
187 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
188
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
189 (int)*(void **)arg = priv->tunerfreq;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
190 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
191 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
192
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
193 case TVI_CONTROL_TUN_SET_FREQ:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
194 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
195 priv->tunerfreq = (int)*(void **)arg;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
196
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
197 if(ioctl(priv->tunerfd, TVTUNER_SETFREQ, &priv->tunerfreq) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
198 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
199 perror("SETFREQ:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
200 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
201 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
202
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
203 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
204 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
205
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
206 case TVI_CONTROL_TUN_GET_TUNER:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
207 case TVI_CONTROL_TUN_SET_TUNER:
5081
7473fca49ca0 initial
alex
parents:
diff changeset
208
7473fca49ca0 initial
alex
parents:
diff changeset
209 /* Inputs */
7473fca49ca0 initial
alex
parents:
diff changeset
210
7473fca49ca0 initial
alex
parents:
diff changeset
211 case TVI_CONTROL_SPC_GET_INPUT:
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
212 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
213 if(ioctl(priv->btfd, METEORGINPUT, &priv->input) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
214 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
215 perror("GINPUT:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
216 return(TVI_CONTROL_FALSE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
217 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
218
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
219 (int)*(void **)arg = priv->input;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
220 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
221 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
222
5081
7473fca49ca0 initial
alex
parents:
diff changeset
223 case TVI_CONTROL_SPC_SET_INPUT:
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
224 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
225 priv->input = getinput((int)*(void **)arg);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
226
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
227 if(ioctl(priv->btfd, METEORSINPUT, &priv->input) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
228 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
229 perror("tunerfreq:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
230 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
231 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
232
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
233 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
234 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
235
7473fca49ca0 initial
alex
parents:
diff changeset
236 /* Audio Controls */
7473fca49ca0 initial
alex
parents:
diff changeset
237
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
238 case TVI_CONTROL_IS_AUDIO:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
239 if(priv->dspready == FALSE) return TVI_CONTROL_FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
240 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
241
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
242 case TVI_CONTROL_AUD_GET_FORMAT:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
243 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
244 (int)*(void **)arg = AFMT_S16_LE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
245 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
246 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
247 case TVI_CONTROL_AUD_GET_CHANNELS:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
248 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
249 (int)*(void **)arg = 2;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
250 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
251 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
252 case TVI_CONTROL_AUD_SET_SAMPLERATE:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
253 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
254 int dspspeed = (int)*(void **)arg;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
255
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
256 if(ioctl(priv->dspfd, SNDCTL_DSP_SPEED, &dspspeed) == -1)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
257 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
258 perror("invalidaudiorate");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
259 return(TVI_CONTROL_FALSE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
260 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
261
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
262 priv->dspspeed = dspspeed;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
263
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
264 priv->dspframesize = priv->dspspeed*priv->dspsamplesize/8/
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
265 priv->fps * (priv->dspstereo+1);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
266 priv->dsprate = priv->dspspeed * priv->dspsamplesize/8*
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
267 (priv->dspstereo+1);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
268
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
269 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
270 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
271 case TVI_CONTROL_AUD_GET_SAMPLERATE:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
272 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
273 (int)*(void **)arg = priv->dspspeed;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
274 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
275 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
276 case TVI_CONTROL_AUD_GET_SAMPLESIZE:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
277 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
278 (int)*(void **)arg = priv->dspsamplesize/8;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
279 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
280 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
281
7473fca49ca0 initial
alex
parents:
diff changeset
282 /* Video Controls */
7473fca49ca0 initial
alex
parents:
diff changeset
283
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
284 case TVI_CONTROL_IS_VIDEO:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
285 if(priv->videoready == FALSE) return TVI_CONTROL_FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
286 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
287
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
288 case TVI_CONTROL_TUN_SET_NORM:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
289 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
290 int req_mode = (int)*(void **)arg;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
291
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
292 priv->iformat = METEOR_FMT_AUTOMODE;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
293
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
294 if(req_mode == TV_NORM_PAL)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
295 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
296 priv->iformat = METEOR_FMT_PAL;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
297 priv->maxheight = PAL_HEIGHT;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
298 priv->maxwidth = PAL_WIDTH;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
299 priv->maxfps = PAL_FPS;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
300 priv->fps = PAL_FPS;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
301
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
302 if(priv->fps > priv->maxfps) priv->fps = priv->maxfps;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
303
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
304 if(priv->geom.rows > priv->maxheight)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
305 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
306 priv->geom.rows = priv->maxheight;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
307 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
308
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
309 if(priv->geom.columns > priv->maxwidth)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
310 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
311 priv->geom.columns = priv->maxwidth;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
312 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
313 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
314
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
315 if(req_mode == TV_NORM_NTSC)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
316 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
317 priv->iformat = METEOR_FMT_NTSC;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
318 priv->maxheight = NTSC_HEIGHT;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
319 priv->maxwidth = NTSC_WIDTH;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
320 priv->maxfps = NTSC_FPS;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
321 priv->fps = NTSC_FPS;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
322
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
323 priv->dspframesize = priv->dspspeed*priv->dspsamplesize/8/
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
324 priv->fps * (priv->dspstereo+1);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
325 priv->dsprate = priv->dspspeed * priv->dspsamplesize/8 *
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
326 (priv->dspstereo+1);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
327
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
328 if(priv->fps > priv->maxfps) priv->fps = priv->maxfps;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
329
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
330 if(priv->geom.rows > priv->maxheight)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
331 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
332 priv->geom.rows = priv->maxheight;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
333 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
334
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
335 if(priv->geom.columns > priv->maxwidth)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
336 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
337 priv->geom.columns = priv->maxwidth;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
338 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
339 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
340
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
341 if(req_mode == TV_NORM_SECAM) priv->iformat = METEOR_FMT_SECAM;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
342
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
343 if(ioctl(priv->btfd, METEORSFMT, &priv->iformat) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
344 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
345 perror("format:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
346 return(TVI_CONTROL_FALSE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
347 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
348
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
349 if(ioctl(priv->btfd, METEORSETGEO, &priv->geom) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
350 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
351 perror("geo:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
352 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
353 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
354
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
355 if(ioctl(priv->btfd, METEORSFPS, &priv->fps) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
356 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
357 perror("fps:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
358 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
359 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
360
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
361 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
362 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
363
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
364 case TVI_CONTROL_VID_GET_FORMAT:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
365 (int)*(void **)arg = IMGFMT_UYVY;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
366 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
367
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
368 case TVI_CONTROL_VID_SET_FORMAT:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
369 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
370 int req_fmt = (int)*(void **)arg;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
371
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
372 if(req_fmt != IMGFMT_UYVY) return(TVI_CONTROL_FALSE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
373
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
374 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
375 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
376 case TVI_CONTROL_VID_SET_WIDTH:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
377 priv->geom.columns = (int)*(void **)arg;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
378
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
379 if(priv->geom.columns > priv->maxwidth)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
380 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
381 priv->geom.columns = priv->maxwidth;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
382 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
383
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
384 if(ioctl(priv->btfd, METEORSETGEO, &priv->geom) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
385 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
386 perror("width:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
387 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
388 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
389
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
390 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
391
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
392 case TVI_CONTROL_VID_GET_WIDTH:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
393 (int)*(void **)arg = priv->geom.columns;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
394 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
395
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
396 case TVI_CONTROL_VID_SET_HEIGHT:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
397 priv->geom.rows = (int)*(void **)arg;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
398
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
399 if(priv->geom.rows > priv->maxheight)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
400 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
401 priv->geom.rows = priv->maxheight;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
402 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
403
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
404 if(priv->geom.rows <= priv->maxheight / 2)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
405 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
406 priv->geom.oformat |= METEOR_GEO_EVEN_ONLY;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
407 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
408
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
409 if(ioctl(priv->btfd, METEORSETGEO, &priv->geom) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
410 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
411 perror("height:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
412 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
413 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
414
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
415 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
416
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
417 case TVI_CONTROL_VID_GET_HEIGHT:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
418 (int)*(void **)arg = priv->geom.rows;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
419 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
420
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
421 case TVI_CONTROL_VID_GET_FPS:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
422 (int)*(void **)arg = (int)priv->fps;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
423 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
424
7473fca49ca0 initial
alex
parents:
diff changeset
425 /*
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
426 case TVI_CONTROL_VID_SET_FPS:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
427 priv->fps = (int)*(void **)arg;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
428
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
429 if(priv->fps > priv->maxfps) priv->fps = priv->maxfps;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
430
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
431 if(ioctl(priv->btfd, METEORSFPS, &priv->fps) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
432 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
433 perror("fps:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
434 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
435 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
436
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
437 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
438 */
7473fca49ca0 initial
alex
parents:
diff changeset
439
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
440 case TVI_CONTROL_VID_CHK_WIDTH:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
441 case TVI_CONTROL_VID_CHK_HEIGHT:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
442 return(TVI_CONTROL_TRUE);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
443
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
444 case TVI_CONTROL_IMMEDIATE:
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
445 priv->immediatemode = TRUE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
446 return(TVI_CONTROL_TRUE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
447 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
448
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
449 return(TVI_CONTROL_UNKNOWN);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
450 }
7473fca49ca0 initial
alex
parents:
diff changeset
451
7473fca49ca0 initial
alex
parents:
diff changeset
452 static int init(priv_t *priv)
7473fca49ca0 initial
alex
parents:
diff changeset
453 {
7473fca49ca0 initial
alex
parents:
diff changeset
454 int marg;
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
455 int count;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
456
7473fca49ca0 initial
alex
parents:
diff changeset
457 G_private = priv; /* Oooh, sick */
7473fca49ca0 initial
alex
parents:
diff changeset
458
7473fca49ca0 initial
alex
parents:
diff changeset
459 /* Video Configuration */
7473fca49ca0 initial
alex
parents:
diff changeset
460
7473fca49ca0 initial
alex
parents:
diff changeset
461 priv->videoready = TRUE;
7473fca49ca0 initial
alex
parents:
diff changeset
462 priv->btdev = strdup("/dev/bktr0");
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
463 priv->immediatemode = FALSE;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
464 priv->iformat = METEOR_FMT_PAL;
7473fca49ca0 initial
alex
parents:
diff changeset
465 priv->maxheight = PAL_HEIGHT;
7473fca49ca0 initial
alex
parents:
diff changeset
466 priv->maxwidth = PAL_WIDTH;
7473fca49ca0 initial
alex
parents:
diff changeset
467 priv->maxfps = PAL_FPS;
7473fca49ca0 initial
alex
parents:
diff changeset
468 priv->source = METEOR_INPUT_DEV0;
7473fca49ca0 initial
alex
parents:
diff changeset
469 priv->fps = priv->maxfps;
7473fca49ca0 initial
alex
parents:
diff changeset
470
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
471 priv->starttime=0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
472 priv->curpaintframe=0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
473 priv->curbufframe=0;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
474
7473fca49ca0 initial
alex
parents:
diff changeset
475 priv->geom.columns = priv->maxwidth;
7473fca49ca0 initial
alex
parents:
diff changeset
476 priv->geom.rows = priv->maxheight;
7473fca49ca0 initial
alex
parents:
diff changeset
477 priv->geom.frames = 1;
7473fca49ca0 initial
alex
parents:
diff changeset
478 priv->geom.oformat = METEOR_GEO_YUV_PACKED;
7473fca49ca0 initial
alex
parents:
diff changeset
479
7473fca49ca0 initial
alex
parents:
diff changeset
480 priv->btfd = open(priv->btdev, O_RDONLY);
7473fca49ca0 initial
alex
parents:
diff changeset
481
7473fca49ca0 initial
alex
parents:
diff changeset
482 if(priv->btfd < 0)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
483 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
484 perror("bktr open");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
485 priv->videoready = FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
486 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
487
7473fca49ca0 initial
alex
parents:
diff changeset
488 if(priv->videoready == TRUE &&
7473fca49ca0 initial
alex
parents:
diff changeset
489 ioctl(priv->btfd, METEORSFMT, &priv->iformat) < 0)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
490 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
491 perror("FMT:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
492 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
493
7473fca49ca0 initial
alex
parents:
diff changeset
494 if(priv->videoready == TRUE &&
7473fca49ca0 initial
alex
parents:
diff changeset
495 ioctl(priv->btfd, METEORSINPUT, &priv->source) < 0)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
496 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
497 perror("SINPUT:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
498 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
499
7473fca49ca0 initial
alex
parents:
diff changeset
500 if(priv->videoready == TRUE &&
7473fca49ca0 initial
alex
parents:
diff changeset
501 ioctl(priv->btfd, METEORSFPS, &priv->fps) < 0)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
502 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
503 perror("SFPS:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
504 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
505
7473fca49ca0 initial
alex
parents:
diff changeset
506 if(priv->videoready == TRUE &&
7473fca49ca0 initial
alex
parents:
diff changeset
507 ioctl(priv->btfd, METEORSETGEO, &priv->geom) < 0)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
508 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
509 perror("SGEO:ioctl");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
510 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
511
7473fca49ca0 initial
alex
parents:
diff changeset
512 if(priv->videoready == TRUE)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
513 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
514 priv->framebufsize = (priv->geom.columns * priv->geom.rows * 2);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
515
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
516 priv->livebuf = (u_char *)mmap((caddr_t)0, priv->framebufsize, PROT_READ,
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
517 MAP_SHARED, priv->btfd, (off_t)0);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
518
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
519 if(priv->livebuf == (u_char *) MAP_FAILED)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
520 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
521 perror("mmap");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
522 priv->videoready = FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
523 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
524
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
525 for(count=0;count<RINGSIZE;count++)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
526 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
527 priv->framebuf[count].buf = malloc(priv->framebufsize);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
528
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
529 if(priv->framebuf[count].buf == NULL)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
530 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
531 perror("framebufmalloc");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
532 priv->videoready = FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
533 break;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
534 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
535
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
536 priv->framebuf[count].dirty = TRUE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
537 priv->framebuf[count].timestamp = 0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
538 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
539 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
540
7473fca49ca0 initial
alex
parents:
diff changeset
541 /* Tuner Configuration */
7473fca49ca0 initial
alex
parents:
diff changeset
542
7473fca49ca0 initial
alex
parents:
diff changeset
543 priv->tunerdev = strdup("/dev/tuner0");
7473fca49ca0 initial
alex
parents:
diff changeset
544 priv->tunerready = TRUE;
7473fca49ca0 initial
alex
parents:
diff changeset
545
7473fca49ca0 initial
alex
parents:
diff changeset
546 priv->tunerfd = open(priv->tunerdev, O_RDONLY);
7473fca49ca0 initial
alex
parents:
diff changeset
547
7473fca49ca0 initial
alex
parents:
diff changeset
548 if(priv->tunerfd < 0)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
549 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
550 perror("tune open");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
551 priv->tunerready = FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
552 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
553
7473fca49ca0 initial
alex
parents:
diff changeset
554 /* Audio Configuration */
7473fca49ca0 initial
alex
parents:
diff changeset
555
7473fca49ca0 initial
alex
parents:
diff changeset
556 priv->dspready = TRUE;
7473fca49ca0 initial
alex
parents:
diff changeset
557 priv->dspdev = strdup("/dev/dsp");
7473fca49ca0 initial
alex
parents:
diff changeset
558 priv->dspsamplesize = 16;
7473fca49ca0 initial
alex
parents:
diff changeset
559 priv->dspstereo = 1;
7473fca49ca0 initial
alex
parents:
diff changeset
560 priv->dspspeed = 44100;
7473fca49ca0 initial
alex
parents:
diff changeset
561 priv->dspfmt = AFMT_S16_LE;
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
562 priv->dspbytesread = 0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
563 priv->dsprate = priv->dspspeed * priv->dspsamplesize/8*(priv->dspstereo+1);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
564 priv->dspframesize = priv->dspspeed*priv->dspsamplesize/8/priv->fps *
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
565 (priv->dspstereo+1);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
566
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
567 if((priv->dspfd = open ("/dev/dsp", O_RDONLY, 0)) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
568 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
569 perror("/dev/dsp open");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
570 priv->dspready = FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
571 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
572
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
573 marg = (256 << 16) | 12;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
574
7473fca49ca0 initial
alex
parents:
diff changeset
575 if (ioctl(priv->dspfd, SNDCTL_DSP_SETFRAGMENT, &marg ) < 0 )
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
576 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
577 perror("setfrag");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
578 priv->dspready = FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
579 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
580
7473fca49ca0 initial
alex
parents:
diff changeset
581 if((priv->dspready == TRUE) &&
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
582 ((ioctl(priv->dspfd, SNDCTL_DSP_SAMPLESIZE, &priv->dspsamplesize) == -1) ||
5081
7473fca49ca0 initial
alex
parents:
diff changeset
583 (ioctl(priv->dspfd, SNDCTL_DSP_STEREO, &priv->dspstereo) == -1) ||
7473fca49ca0 initial
alex
parents:
diff changeset
584 (ioctl(priv->dspfd, SNDCTL_DSP_SPEED, &priv->dspspeed) == -1) ||
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
585 (ioctl(priv->dspfd, SNDCTL_DSP_SETFMT, &priv->dspfmt) == -1)))
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
586 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
587 perror ("configuration of /dev/dsp failed");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
588 close(priv->dspfd);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
589 priv->dspready = FALSE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
590 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
591
7473fca49ca0 initial
alex
parents:
diff changeset
592 return(1);
7473fca49ca0 initial
alex
parents:
diff changeset
593 }
7473fca49ca0 initial
alex
parents:
diff changeset
594
7473fca49ca0 initial
alex
parents:
diff changeset
595 /* that's the real start, we'got the format parameters (checked with control) */
7473fca49ca0 initial
alex
parents:
diff changeset
596 static int start(priv_t *priv)
7473fca49ca0 initial
alex
parents:
diff changeset
597 {
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
598 int tmp;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
599 struct timeval curtime;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
600 int marg;
7473fca49ca0 initial
alex
parents:
diff changeset
601
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
602 fprintf(stderr,"START\n");
5081
7473fca49ca0 initial
alex
parents:
diff changeset
603 if(priv->videoready == FALSE) return(0);
7473fca49ca0 initial
alex
parents:
diff changeset
604
7473fca49ca0 initial
alex
parents:
diff changeset
605 signal(SIGUSR1, processframe);
7473fca49ca0 initial
alex
parents:
diff changeset
606 signal(SIGALRM, processframe);
7473fca49ca0 initial
alex
parents:
diff changeset
607
7473fca49ca0 initial
alex
parents:
diff changeset
608 marg = SIGUSR1;
7473fca49ca0 initial
alex
parents:
diff changeset
609
7473fca49ca0 initial
alex
parents:
diff changeset
610 if(ioctl(priv->btfd, METEORSSIGNAL, &marg) < 0)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
611 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
612 perror("METEORSSIGNAL failed");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
613 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
614 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
615
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
616 read(priv->dspfd, &tmp, 2);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
617
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
618 gettimeofday(&curtime, NULL);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
619
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
620 priv->starttime = curtime.tv_sec + (curtime.tv_usec *.000001);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
621
7473fca49ca0 initial
alex
parents:
diff changeset
622 marg = METEOR_CAP_CONTINOUS;
7473fca49ca0 initial
alex
parents:
diff changeset
623
7473fca49ca0 initial
alex
parents:
diff changeset
624 if(ioctl(priv->btfd, METEORCAPTUR, &marg) < 0)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
625 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
626 perror("METEORCAPTUR failed");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
627 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
628 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
629
7473fca49ca0 initial
alex
parents:
diff changeset
630 return(1);
7473fca49ca0 initial
alex
parents:
diff changeset
631 }
7473fca49ca0 initial
alex
parents:
diff changeset
632
7473fca49ca0 initial
alex
parents:
diff changeset
633 static int uninit(priv_t *priv)
7473fca49ca0 initial
alex
parents:
diff changeset
634 {
7473fca49ca0 initial
alex
parents:
diff changeset
635 int marg;
7473fca49ca0 initial
alex
parents:
diff changeset
636
7473fca49ca0 initial
alex
parents:
diff changeset
637 if(priv->videoready == FALSE) return(0);
7473fca49ca0 initial
alex
parents:
diff changeset
638
7473fca49ca0 initial
alex
parents:
diff changeset
639 marg = METEOR_SIG_MODE_MASK;
7473fca49ca0 initial
alex
parents:
diff changeset
640
7473fca49ca0 initial
alex
parents:
diff changeset
641 if(ioctl( priv->btfd, METEORSSIGNAL, &marg) < 0 )
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
642 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
643 perror("METEORSSIGNAL");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
644 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
645 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
646
7473fca49ca0 initial
alex
parents:
diff changeset
647 marg = METEOR_CAP_STOP_CONT;
7473fca49ca0 initial
alex
parents:
diff changeset
648
7473fca49ca0 initial
alex
parents:
diff changeset
649 if(ioctl(priv->btfd, METEORCAPTUR, &marg) < 0 )
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
650 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
651 perror("METEORCAPTUR STOP");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
652 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
653 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
654
7473fca49ca0 initial
alex
parents:
diff changeset
655 close(priv->btfd);
7473fca49ca0 initial
alex
parents:
diff changeset
656 close(priv->dspfd);
7473fca49ca0 initial
alex
parents:
diff changeset
657
7473fca49ca0 initial
alex
parents:
diff changeset
658 priv->dspfd = -1;
7473fca49ca0 initial
alex
parents:
diff changeset
659 priv->btfd = -1;
7473fca49ca0 initial
alex
parents:
diff changeset
660
7473fca49ca0 initial
alex
parents:
diff changeset
661 priv->dspready = priv->videoready = FALSE;
7473fca49ca0 initial
alex
parents:
diff changeset
662
7473fca49ca0 initial
alex
parents:
diff changeset
663 return(1);
7473fca49ca0 initial
alex
parents:
diff changeset
664 }
7473fca49ca0 initial
alex
parents:
diff changeset
665
7473fca49ca0 initial
alex
parents:
diff changeset
666
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
667 static double grabimmediate_video_frame(priv_t *priv, char *buffer, int len)
5081
7473fca49ca0 initial
alex
parents:
diff changeset
668 {
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
669 struct timeval curtime;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
670 sigset_t sa_mask;
7473fca49ca0 initial
alex
parents:
diff changeset
671
7473fca49ca0 initial
alex
parents:
diff changeset
672 if(priv->videoready == FALSE) return(0);
7473fca49ca0 initial
alex
parents:
diff changeset
673
7473fca49ca0 initial
alex
parents:
diff changeset
674 alarm(1);
7473fca49ca0 initial
alex
parents:
diff changeset
675 sigfillset(&sa_mask);
7473fca49ca0 initial
alex
parents:
diff changeset
676 sigdelset(&sa_mask,SIGINT);
7473fca49ca0 initial
alex
parents:
diff changeset
677 sigdelset(&sa_mask,SIGUSR1);
7473fca49ca0 initial
alex
parents:
diff changeset
678 sigdelset(&sa_mask,SIGALRM);
7473fca49ca0 initial
alex
parents:
diff changeset
679 sigsuspend(&sa_mask);
7473fca49ca0 initial
alex
parents:
diff changeset
680 alarm(0);
7473fca49ca0 initial
alex
parents:
diff changeset
681
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
682 memcpy(buffer, priv->livebuf, len);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
683
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
684 /* PTS = 0, show the frame NOW, this routine is only used in playback mode
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
685 without audio capture .. */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
686
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
687 return(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
688 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
689
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
690 static double grab_video_frame(priv_t *priv, char *buffer, int len)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
691 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
692 struct timeval curtime;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
693 double timestamp=0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
694 sigset_t sa_mask;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
695
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
696 if(priv->videoready == FALSE) return(0);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
697
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
698 if(priv->immediatemode == TRUE)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
699 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
700 return grabimmediate_video_frame(priv, buffer, len);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
701 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
702
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
703 while(priv->framebuf[priv->curbufframe].dirty == TRUE)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
704 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
705 alarm(1);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
706 sigemptyset(&sa_mask);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
707 sigsuspend(&sa_mask);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
708 alarm(0);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
709 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
710
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
711 memcpy(buffer, priv->framebuf[priv->curbufframe].buf, len);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
712 timestamp = priv->framebuf[priv->curbufframe].timestamp;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
713 priv->framebuf[priv->curbufframe].dirty = TRUE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
714
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
715 priv->curbufframe++;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
716 if(priv->curbufframe >= RINGSIZE) priv->curbufframe = 0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
717
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
718 return(timestamp-priv->starttime);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
719 }
7473fca49ca0 initial
alex
parents:
diff changeset
720
7473fca49ca0 initial
alex
parents:
diff changeset
721 static int get_video_framesize(priv_t *priv)
7473fca49ca0 initial
alex
parents:
diff changeset
722 {
7473fca49ca0 initial
alex
parents:
diff changeset
723 return(priv->geom.columns*priv->geom.rows*16/8);
7473fca49ca0 initial
alex
parents:
diff changeset
724 }
7473fca49ca0 initial
alex
parents:
diff changeset
725
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
726 static double grab_audio_frame(priv_t *priv, char *buffer, int len)
5081
7473fca49ca0 initial
alex
parents:
diff changeset
727 {
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
728 struct timeval curtime;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
729 double curpts;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
730 double timeskew;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
731 int bytesavail;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
732 int bytesread;
7473fca49ca0 initial
alex
parents:
diff changeset
733 int ret;
7473fca49ca0 initial
alex
parents:
diff changeset
734
7473fca49ca0 initial
alex
parents:
diff changeset
735 if(priv->dspready == FALSE) return 0;
7473fca49ca0 initial
alex
parents:
diff changeset
736
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
737 gettimeofday(&curtime, NULL);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
738
5081
7473fca49ca0 initial
alex
parents:
diff changeset
739 /* Get exactly one frame of audio, which forces video sync to audio.. */
7473fca49ca0 initial
alex
parents:
diff changeset
740
7473fca49ca0 initial
alex
parents:
diff changeset
741 bytesread=read(priv->dspfd, buffer, len);
7473fca49ca0 initial
alex
parents:
diff changeset
742
7473fca49ca0 initial
alex
parents:
diff changeset
743 while(bytesread < len)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
744 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
745 ret=read(priv->dspfd, &buffer[bytesread], len-bytesread);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
746
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
747 if(ret == -1)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
748 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
749 perror("Audio read failed!");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
750 return 0;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
751 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
752
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
753 bytesread+=ret;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
754 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
755
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
756 priv->dspbytesread += bytesread;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
757
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
758 curpts = curtime.tv_sec + curtime.tv_usec * .000001;
5081
7473fca49ca0 initial
alex
parents:
diff changeset
759
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
760 timeskew = priv->dspbytesread * 1.0 / priv->dsprate - (curpts-priv->starttime);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
761
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
762 if(timeskew > .125/priv->fps)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
763 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
764 priv->starttime -= timeskew;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
765 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
766 else
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
767 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
768 if(timeskew < -.125/priv->fps)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
769 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
770 priv->starttime -= timeskew;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
771 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
772 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
773
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
774 return(priv->dspbytesread * 1.0 / priv->dsprate);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
775 }
7473fca49ca0 initial
alex
parents:
diff changeset
776
7473fca49ca0 initial
alex
parents:
diff changeset
777 static int get_audio_framesize(priv_t *priv)
7473fca49ca0 initial
alex
parents:
diff changeset
778 {
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
779 int bytesavail;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
780
5081
7473fca49ca0 initial
alex
parents:
diff changeset
781 if(priv->dspready == FALSE) return 0;
7473fca49ca0 initial
alex
parents:
diff changeset
782
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
783 if(ioctl(priv->dspfd, FIONREAD, &bytesavail) < 0)
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
784 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
785 perror("FIONREAD");
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
786 return(TVI_CONTROL_FALSE);
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
787 }
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
788
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
789 /* When mencoder wants audio data, it wants data..
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
790 it wont go do anything else until it gets it :( */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
791
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
792 if(bytesavail == 0) return FRAGSIZE;
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
793
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
794 return(bytesavail);
5081
7473fca49ca0 initial
alex
parents:
diff changeset
795 }
7473fca49ca0 initial
alex
parents:
diff changeset
796
7473fca49ca0 initial
alex
parents:
diff changeset
797 static int getinput(int innumber)
7473fca49ca0 initial
alex
parents:
diff changeset
798 {
7473fca49ca0 initial
alex
parents:
diff changeset
799 switch(innumber)
5572
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
800 {
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
801 case 0: return METEOR_INPUT_DEV0; /* RCA */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
802 case 1: return METEOR_INPUT_DEV1; /* Tuner */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
803 case 2: return METEOR_INPUT_DEV2; /* In 1 */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
804 case 3: return METEOR_INPUT_DEV3; /* In 2 */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
805 case 4: return METEOR_INPUT_DEV_RGB; /* RGB */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
806 case 5: return METEOR_INPUT_DEV_SVIDEO; /* SVid */
8cd761968f35 BSD-BT848 TV update patch by Charles Henrich <henrich@sigbus.com>
arpi
parents: 5142
diff changeset
807 }
5081
7473fca49ca0 initial
alex
parents:
diff changeset
808
7473fca49ca0 initial
alex
parents:
diff changeset
809 return 0;
7473fca49ca0 initial
alex
parents:
diff changeset
810 }
7473fca49ca0 initial
alex
parents:
diff changeset
811
7473fca49ca0 initial
alex
parents:
diff changeset
812 #endif /* USE_TV */