annotate stream/tvi_vbi.c @ 23542:2e13eea875a3

Copile fix: missing libswscale part of ffmpeg r9322 TARGET_ARCH -> ARCH change.
author reimar
date Sat, 16 Jun 2007 15:17:00 +0000
parents a6c619ee9d30
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23510
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1 #include "config.h"
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
2
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
3 #include <stdlib.h>
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
4 #include <string.h>
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
5 #include <unistd.h>
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
6 #include <errno.h>
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
7
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
8 #include "tv.h"
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
9 #include "tvi_vbi.h"
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
10 #include "mp_msg.h"
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
11 #include "libmpcodecs/img_format.h"
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
12
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
13 #ifdef USE_ICONV
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
14 #include <iconv.h>
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
15 #endif
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
16
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
17 #define VBI_TEXT_CHARSET "UTF-8"
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
18
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
19 char* tv_param_tdevice=NULL; ///< teletext vbi device
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
20 char* tv_param_tformat="gray"; ///< format: text,bw,gray,color
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
21 int tv_param_tpage=100; ///< page number
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
22
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
23
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
24 #ifdef USE_ICONV
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
25 /*
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
26 ------------------------------------------------------------------
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
27 zvbi-0.2.25/src/exp-txt.c skip debug "if(1) fprintf(stderr,) " message
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
28 ------------------------------------------------------------------
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
29 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
30
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
31 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
32 * libzvbi - Text export functions
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
33 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
34 * Copyright (C) 2001, 2002 Michael H. Schimek
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
35 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
36 * Based on code from AleVT 1.5.1
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
37 * Copyright (C) 1998, 1999 Edgar Toernig <froese@gmx.de>
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
38 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
39 * This program is free software; you can redistribute it and/or modify
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
40 * it under the terms of the GNU General Public License as published by
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
41 * the Free Software Foundation; either version 2 of the License, or
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
42 * (at your option) any later version.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
43 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
44 * This program is distributed in the hope that it will be useful,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
45 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
46 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
47 * GNU General Public License for more details.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
48 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
49 * You should have received a copy of the GNU General Public License
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
50 * along with this program; if not, write to the Free Software
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
51 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
52 **/
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
53
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
54 /** $Id$ **/
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
55
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
56 static vbi_bool
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
57 print_unicode(iconv_t cd, int endian, int unicode, char **p, int n)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
58 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
59 char in[2], *ip, *op;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
60 size_t li, lo, r;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
61
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
62 in[0 + endian] = unicode;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
63 in[1 - endian] = unicode >> 8;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
64 ip = in; op = *p;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
65 li = sizeof(in); lo = n;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
66
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
67 r = iconv(cd, &ip, &li, &op, &lo);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
68
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
69 if ((size_t) -1 == r
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
70 || (**p == 0x40 && unicode != 0x0040)) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
71 in[0 + endian] = 0x20;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
72 in[1 - endian] = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
73 ip = in; op = *p;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
74 li = sizeof(in); lo = n;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
75
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
76 r = iconv(cd, &ip, &li, &op, &lo);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
77
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
78 if ((size_t) -1 == r
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
79 || (r == 1 && **p == 0x40))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
80 goto error;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
81 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
82
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
83 *p = op;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
84
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
85 return TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
86
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
87 error:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
88 return FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
89 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
90
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
91 static int
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
92 vbi_print_page_region_nodebug(vbi_page * pg, char *buf, int size,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
93 const char *format, vbi_bool table,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
94 vbi_bool rtl, int column, int row, int width,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
95 int height)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
96 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
97 int endian = vbi_ucs2be();
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
98 int column0, column1, row0, row1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
99 int x, y, spaces, doubleh, doubleh0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
100 iconv_t cd;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
101 char *p;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
102
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
103 rtl = rtl;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
104
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
105 #if 0
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
106 if (1)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
107 fprintf (stderr, "vbi_print_page_region '%s' "
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
108 "table=%d col=%d row=%d width=%d height=%d\n",
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
109 format, table, column, row, width, height);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
110 #endif
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
111
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
112 column0 = column;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
113 row0 = row;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
114 column1 = column + width - 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
115 row1 = row + height - 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
116
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
117 if (!pg || !buf || size < 0 || !format
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
118 || column0 < 0 || column1 >= pg->columns
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
119 || row0 < 0 || row1 >= pg->rows
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
120 || endian < 0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
121 return 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
122
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
123 if ((cd = iconv_open(format, "UCS-2")) == (iconv_t) -1)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
124 return 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
125
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
126 p = buf;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
127
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
128 doubleh = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
129
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
130 for (y = row0; y <= row1; y++) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
131 int x0, x1, xl;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
132
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
133 x0 = (table || y == row0) ? column0 : 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
134 x1 = (table || y == row1) ? column1 : (pg->columns - 1);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
135
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
136 xl = (table || y != row0 || (y + 1) != row1) ? -1 : column1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
137
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
138 doubleh0 = doubleh;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
139
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
140 spaces = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
141 doubleh = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
142
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
143 for (x = x0; x <= x1; x++) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
144 vbi_char ac = pg->text[y * pg->columns + x];
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
145
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
146 if (table) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
147 if (ac.size > VBI_DOUBLE_SIZE)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
148 ac.unicode = 0x0020;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
149 } else {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
150 switch (ac.size) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
151 case VBI_NORMAL_SIZE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
152 case VBI_DOUBLE_WIDTH:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
153 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
154
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
155 case VBI_DOUBLE_HEIGHT:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
156 case VBI_DOUBLE_SIZE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
157 doubleh++;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
158 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
159
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
160 case VBI_OVER_TOP:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
161 case VBI_OVER_BOTTOM:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
162 continue;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
163
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
164 case VBI_DOUBLE_HEIGHT2:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
165 case VBI_DOUBLE_SIZE2:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
166 if (y > row0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
167 ac.unicode = 0x0020;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
168 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
169 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
170
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
171 /*
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
172 * Special case two lines row0 ... row1, and all chars
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
173 * in row0, column0 ... column1 are double height: Skip
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
174 * row1, don't wrap around.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
175 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
176 if (x == xl && doubleh >= (x - x0)) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
177 x1 = xl;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
178 y = row1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
179 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
180
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
181 if (ac.unicode == 0x20 || !vbi_is_print(ac.unicode)) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
182 spaces++;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
183 continue;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
184 } else {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
185 if (spaces < (x - x0) || y == row0) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
186 for (; spaces > 0; spaces--)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
187 if (!print_unicode(cd, endian, 0x0020,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
188 &p, buf + size - p))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
189 goto failure;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
190 } else /* discard leading spaces */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
191 spaces = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
192 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
193 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
194
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
195 if (!print_unicode(cd, endian, ac.unicode, &p, buf + size - p))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
196 goto failure;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
197 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
198
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
199 /* if !table discard trailing spaces and blank lines */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
200
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
201 if (y < row1) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
202 int left = buf + size - p;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
203
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
204 if (left < 1)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
205 goto failure;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
206
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
207 if (table) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
208 *p++ = '\n'; /* XXX convert this (eg utf16) */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
209 } else if (spaces >= (x1 - x0)) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
210 ; /* suppress blank line */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
211 } else {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
212 /* exactly one space between adjacent rows */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
213 if (!print_unicode(cd, endian, 0x0020, &p, left))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
214 goto failure;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
215 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
216 } else {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
217 if (doubleh0 > 0) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
218 ; /* prentend this is a blank double height lower row */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
219 } else {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
220 for (; spaces > 0; spaces--)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
221 if (!print_unicode(cd, endian, 0x0020, &p, buf + size - p))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
222 goto failure;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
223 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
224 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
225 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
226
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
227 iconv_close(cd);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
228 return p - buf;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
229
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
230 failure:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
231 iconv_close(cd);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
232 return 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
233 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
234 #endif
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
235 /*
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
236 end of zvbi-0.2.25/src/exp-txt.c part
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
237 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
238
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
239
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
240 /*
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
241 ------------------------------------------------------------------
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
242 Private routines
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
243 ------------------------------------------------------------------
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
244 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
245
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
246 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
247 * \brief Decode event handler
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
248 * \param ev VBI event
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
249 * \param data pointer to user defined data
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
250 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
251 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
252 static void event_handler(vbi_event * ev, void *data)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
253 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
254 priv_vbi_t *user_vbi = (priv_vbi_t *) data;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
255 vbi_page pg;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
256 char *s;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
257 int i;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
258
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
259 switch (ev->type) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
260 case VBI_EVENT_CAPTION:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
261 mp_msg(MSGT_TV,MSGL_DBG3,"caption\n");
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
262 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
263 case VBI_EVENT_NETWORK:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
264 s = ev->ev.network.name;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
265 if (s) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
266 pthread_mutex_lock(&(user_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
267 if (user_vbi->network_name)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
268 free(user_vbi->network_name);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
269 user_vbi->network_name = strdup(s);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
270 pthread_mutex_unlock(&(user_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
271 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
272 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
273 case VBI_EVENT_NETWORK_ID:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
274 s = ev->ev.network.name;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
275 if (s) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
276 pthread_mutex_lock(&(user_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
277 if (user_vbi->network_id)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
278 free(user_vbi->network_id);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
279 user_vbi->network_id = strdup(s);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
280 pthread_mutex_unlock(&(user_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
281 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
282 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
283 case VBI_EVENT_TTX_PAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
284 pthread_mutex_lock(&(user_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
285 user_vbi->curr_pgno = ev->ev.ttx_page.pgno; // page number
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
286 user_vbi->curr_subno = ev->ev.ttx_page.subno; // subpage
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
287 i = vbi_bcd2dec(ev->ev.ttx_page.pgno);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
288 if (i > 0 && i < 1000) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
289 if (!user_vbi->cache[i])
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
290 user_vbi->cache[i] = (vbi_page *) malloc(sizeof(vbi_page));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
291 vbi_fetch_vt_page(user_vbi->decoder, // fetch page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
292 user_vbi->cache[i],
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
293 ev->ev.ttx_page.pgno,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
294 ev->ev.ttx_page.subno,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
295 VBI_WST_LEVEL_3p5, 25, TRUE);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
296 memcpy(user_vbi->theader, user_vbi->cache[i]->text,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
297 sizeof(user_vbi->theader));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
298 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
299 pthread_mutex_unlock(&(user_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
300 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
301 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
302 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
303
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
304 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
305 * \brief Prepares page to be shown on screen
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
306 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
307 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
308 * This routine adds page number, current time, etc to page header
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
309 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
310 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
311 static void process_page(priv_vbi_t * priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
312 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
313 char *pagesptr;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
314 int csize, i, j, subtitle = 0, sflg, send;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
315 void *canvas;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
316 char cpage[5];
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
317 vbi_page page;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
318
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
319 memcpy(&(page), priv_vbi->page, sizeof(vbi_page));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
320 if (priv_vbi->pgno != priv_vbi->page->pgno) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
321 //don't clear first line
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
322 for (i = page.columns; i < 1056; i++) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
323 page.text[i].unicode = ' ';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
324 page.text[i].background = VBI_TRANSPARENT_COLOR;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
325 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
326 snprintf(cpage, sizeof(cpage), "%03X", priv_vbi->pgno);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
327 page.text[1].unicode = cpage[0];
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
328 page.text[2].unicode = cpage[1];
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
329 page.text[3].unicode = cpage[2];
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
330 page.text[4].unicode = ' ';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
331 page.text[5].unicode = ' ';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
332 page.text[6].unicode = ' ';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
333 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
334
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
335 //background page number & title
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
336 j=vbi_bcd2dec(priv_vbi->curr_pgno);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
337 if (j>0 && j<1000 && priv_vbi->cache[j]){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
338 for(i=8;i<priv_vbi->cache[j]->columns;i++){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
339 page.text[i].unicode = priv_vbi->cache[j]->text[i].unicode;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
340 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
341 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
342
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
343 if (page.text[1].unicode == ' ' && page.text[2].unicode == ' ' &&
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
344 page.text[3].unicode == ' ' && page.text[4].unicode == ' ' &&
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
345 page.text[5].unicode == ' ' && page.text[5].unicode == ' '
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
346 && !priv_vbi->half)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
347 subtitle = 1; // subtitle page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
348 if (priv_vbi->pagenumdec) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
349 i = (priv_vbi->pagenumdec >> 12) & 0xf;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
350 switch (i) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
351 case 1:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
352 page.text[1].unicode = '0' + ((priv_vbi->pagenumdec >> 0) & 0xf);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
353 page.text[2].unicode = '-';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
354 page.text[3].unicode = '-';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
355 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
356 case 2:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
357 page.text[1].unicode = '0' + ((priv_vbi->pagenumdec >> 4) & 0xf);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
358 page.text[2].unicode = '0' + ((priv_vbi->pagenumdec >> 0) & 0xf);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
359 page.text[3].unicode = '-';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
360 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
361 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
362 page.text[4].unicode = ' ';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
363 page.text[5].unicode = ' ';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
364 page.text[6].unicode = ' ';
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
365 page.text[1].foreground = VBI_WHITE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
366 page.text[2].foreground = VBI_WHITE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
367 page.text[3].foreground = VBI_WHITE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
368 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
369 priv_vbi->columns = page.columns;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
370 priv_vbi->rows = page.rows;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
371 if (!subtitle) { // update time in header
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
372 memcpy(&(page.text[VBI_TIME_LINEPOS]),
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
373 &(priv_vbi->theader[VBI_TIME_LINEPOS]),
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
374 sizeof(vbi_char) * (priv_vbi->columns - VBI_TIME_LINEPOS));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
375 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
376 switch (priv_vbi->tformat) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
377 case VBI_TFORMAT_TEXT: // mode: text
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
378 if (priv_vbi->txtpage) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
379 #ifdef USE_ICONV
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
380 vbi_print_page_region_nodebug(&(page), priv_vbi->txtpage,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
381 VBI_TXT_PAGE_SIZE, VBI_TEXT_CHARSET, TRUE,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
382 0, 0, 0, page.columns, page.rows); // vbi_page to text without message
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
383 #else
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
384 vbi_print_page(&(page), priv_vbi->txtpage,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
385 VBI_TXT_PAGE_SIZE, VBI_TEXT_CHARSET, TRUE, 0);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
386 #endif
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
387 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
388 priv_vbi->valid_page = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
389 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
390 case VBI_TFORMAT_BW: // mode: black & white
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
391 for (i=0; i < (priv_vbi->pgno!=page.pgno?page.columns:1056); i++) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
392 if (priv_vbi->foreground){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
393 page.text[i].foreground = VBI_BLACK;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
394 page.text[i].background = VBI_WHITE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
395 }else{
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
396 page.text[i].foreground = VBI_WHITE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
397 page.text[i].background = VBI_BLACK;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
398 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
399 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
400 case VBI_TFORMAT_GRAY: // mode: grayscale
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
401 case VBI_TFORMAT_COLOR: // mode: color (request color spu patch!)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
402
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
403
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
404
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
405 page.color_map[VBI_TRANSPARENT_COLOR] = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
406 if (priv_vbi->alpha) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
407 if (subtitle) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
408 for (i = 0; i < page.rows; i++) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
409 sflg = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
410 send = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
411 for (j = 0; j < page.columns; j++) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
412 if (page.text[i * page.columns + j].unicode != ' ') {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
413 sflg = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
414 send = j;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
415 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
416 if (sflg == 0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
417 page.text[i * page.columns + j].background =
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
418 VBI_TRANSPARENT_COLOR;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
419 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
420 for (j = send + 1; j < page.columns; j++)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
421 page.text[i * page.columns + j].background =
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
422 VBI_TRANSPARENT_COLOR;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
423 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
424 } else {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
425 for (i = 0; i < 1056; i++)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
426 page.text[i].background = VBI_TRANSPARENT_COLOR;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
427 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
428 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
429 csize = page.columns * page.rows * 12 * 10 * sizeof(vbi_rgba);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
430 if (csize == 0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
431 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
432 if (csize > priv_vbi->canvas_size) { // test canvas size
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
433 if (priv_vbi->canvas)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
434 free(priv_vbi->canvas);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
435 priv_vbi->canvas = malloc(csize);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
436 priv_vbi->canvas_size = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
437 if (priv_vbi->canvas)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
438 priv_vbi->canvas_size = csize;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
439 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
440 if (priv_vbi->canvas) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
441 vbi_draw_vt_page(&(page),
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
442 priv_vbi->fmt,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
443 priv_vbi->canvas,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
444 priv_vbi->reveal, priv_vbi->flash_on);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
445 priv_vbi->csize = csize;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
446 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
447 priv_vbi->spudec_proc = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
448 priv_vbi->valid_page = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
449 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
450 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
451 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
452
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
453 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
454 * \brief Update page in cache
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
455 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
456 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
457 * Routine also calls process_page to refresh currently visible page (if so)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
458 * every time it was received from VBI by background thread.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
459 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
460 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
461 static void update_page(priv_vbi_t * priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
462 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
463 int i;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
464 int index;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
465 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
466 /*
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
467 priv_vbi->redraw=1 - page redraw requested
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
468 pgno!=page->pgno - page was switched
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
469 curr_pgno==pgno - backgound process just fetched current page, refresh it
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
470 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
471 if (priv_vbi->redraw ||
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
472 priv_vbi->pgno != priv_vbi->page->pgno ||
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
473 priv_vbi->curr_pgno == priv_vbi->pgno) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
474 index = vbi_bcd2dec(priv_vbi->pgno);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
475 if ( index <= 0 || index > 999 || !priv_vbi->cache[index]) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
476 // curr_pgno is last decoded page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
477 index = vbi_bcd2dec(priv_vbi->curr_pgno);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
478 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
479
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
480 if (index <=0 || index >999 || !priv_vbi->cache[index]){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
481 priv_vbi->valid_page = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
482 memset(priv_vbi->page, 0, sizeof(vbi_page));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
483 }else
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
484 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
485 memcpy(priv_vbi->page, priv_vbi->cache[index], sizeof(vbi_page));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
486 process_page(priv_vbi);//prepare page to be shown on screen
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
487 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
488 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
489 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
490 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
491
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
492 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
493 * \brief background grabber routine
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
494 * \param data user-defined data
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
495 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
496 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
497 static void *grabber(void *data)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
498 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
499 priv_vbi_t *user_vbi = (priv_vbi_t *) data;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
500 vbi_capture_buffer *sliced_buffer;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
501 struct timeval timeout;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
502 unsigned int n_lines;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
503 int r, err_count = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
504
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
505 while (!user_vbi->eof) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
506 timeout.tv_sec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
507 timeout.tv_usec = 500;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
508 r = vbi_capture_pull(user_vbi->capture, NULL, &sliced_buffer, &timeout); // grab slices
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
509 if (user_vbi->eof)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
510 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
511 switch (r) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
512 case -1: // read error
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
513 if (err_count++ > 4)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
514 user_vbi->eof = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
515 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
516 case 0: // time out
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
517 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
518 default:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
519 err_count = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
520 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
521 if (r != 1)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
522 continue;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
523 n_lines = sliced_buffer->size / sizeof(vbi_sliced);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
524 vbi_decode(user_vbi->decoder, (vbi_sliced *) sliced_buffer->data,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
525 n_lines, sliced_buffer->timestamp); // decode slice
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
526 update_page(user_vbi);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
527 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
528 switch (r) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
529 case -1:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
530 mp_msg(MSGT_TV, MSGL_ERR, "VBI read error %d (%s)\n",
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
531 errno, strerror(errno));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
532 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
533 case 0:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
534 mp_msg(MSGT_TV, MSGL_ERR, "VBI read timeout\n");
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
535 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
536 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
537 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
538 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
539
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
540 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
541 * \brief calculate increased/decreased by given value page number
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
542 * \param curr current page number in hexadecimal for
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
543 * \param direction decimal value (can be negative) to add to value or curr parameter
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
544 * \return new page number in hexadecimal form
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
545 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
546 * VBI page numbers are represented in special hexadecimal form, e.g.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
547 * page with number 123 (as seen by user) internally has number 0x123.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
548 * and equation 0x123+8 should be equal to 0x131 instead of regular 0x12b.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
549 * Page numbers 0xYYY (where Y is not belongs to (0..9) and pages below 0x100 and
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
550 * higher 0x999 are reserved for internal use.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
551 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
552 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
553 static int steppage(int curr, int direction)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
554 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
555 int newpage = vbi_dec2bcd(vbi_bcd2dec(curr) + direction);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
556 if (newpage < 0x100)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
557 newpage = 0x100;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
558 if (newpage > 0x999)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
559 newpage = 0x999;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
560 return newpage;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
561 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
562
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
563 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
564 * \brief toggles teletext page displaying mode
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
565 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
566 * \param flag new mode
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
567 * \return
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
568 * TVI_CONTROL_TRUE is success,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
569 * TVI_CONTROL_FALSE otherwise
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
570 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
571 * flag:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
572 * 0 - off
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
573 * 1 - on & opaque
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
574 * 2 - on & transparent
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
575 * 3 - on & transparent with black foreground color (only in bw mode)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
576 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
577 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
578 static int teletext_set_mode(priv_vbi_t * priv_vbi, int flag)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
579 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
580 if (flag<0 || flag>3)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
581 return TVI_CONTROL_FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
582
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
583 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
584
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
585 priv_vbi->on = flag;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
586
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
587 if (priv_vbi->on > 2 && priv_vbi->tformat != VBI_TFORMAT_BW)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
588 priv_vbi->on = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
589
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
590 priv_vbi->foreground = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
591 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
592 priv_vbi->spudec_proc = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
593 priv_vbi->redraw = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
594 switch (priv_vbi->on) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
595 case 0:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
596 priv_vbi->csize = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
597 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
598 case 1:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
599 priv_vbi->alpha = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
600 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
601 case 2:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
602 priv_vbi->alpha = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
603 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
604 case 3:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
605 priv_vbi->alpha = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
606 priv_vbi->foreground = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
607 break;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
608 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
609 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
610 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
611 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
612
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
613 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
614 * \brief get half page mode (only in SPU mode)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
615 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
616 * \return current mode
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
617 * 0 : half mode off
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
618 * 1 : top half page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
619 * 2 : bottom half page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
620 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
621 static int vbi_get_half(priv_vbi_t * priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
622 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
623 int flag = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
624 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
625 if (priv_vbi->valid_page)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
626 flag = priv_vbi->half;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
627 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
628 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
629 return flag;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
630 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
631
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
632 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
633 * \brief set half page mode (only in SPU mode)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
634 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
635 * \param flag new half page mode
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
636 * \return
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
637 * TVI_CONTROL_TRUE is success,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
638 * TVI_CONTROL_FALSE otherwise
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
639 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
640 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
641 * flag:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
642 * 0 : half mode off
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
643 * 1 : top half page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
644 * 2 : bottom half page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
645 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
646 static int teletext_set_half_page(priv_vbi_t * priv_vbi, int flag)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
647 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
648 if (flag<0 || flag>2)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
649 return TVI_CONTROL_FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
650
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
651 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
652 priv_vbi->half = flag;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
653 if (priv_vbi->tformat == VBI_TFORMAT_TEXT && priv_vbi->half > 1)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
654 priv_vbi->half = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
655 priv_vbi->redraw = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
656 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
657 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
658 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
659 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
660
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
661 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
662 * \brief displays specified page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
663 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
664 * \param pgno page number to display
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
665 * \param subno subpage number
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
666 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
667 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
668 static void vbi_setpage(priv_vbi_t * priv_vbi, int pgno, int subno)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
669 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
670 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
671 priv_vbi->pgno = steppage(0, pgno);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
672 priv_vbi->subno = subno;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
673 priv_vbi->redraw = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
674 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
675 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
676 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
677
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
678 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
679 * \brief steps over pages by a given value
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
680 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
681 * \param direction decimal step value (can be negative)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
682 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
683 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
684 static void vbi_steppage(priv_vbi_t * priv_vbi, int direction)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
685 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
686 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
687 priv_vbi->pgno = steppage(priv_vbi->pgno, direction);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
688 priv_vbi->redraw = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
689 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
690 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
691 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
692
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
693 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
694 * \brief append just entered digit to editing page number
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
695 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
696 * \param dec decimal digit to append
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
697 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
698 * dec:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
699 * '0'..'9' append digit
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
700 * '-' remove last digit (backspace emulation)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
701 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
702 * This routine allows user to jump to arbitrary page.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
703 * It implements simple page number editing algorithm.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
704 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
705 * Subsystem can be on one of two modes: normal and page number edit mode.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
706 * Zero value of priv_vbi->pagenumdec means normal mode
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
707 * Non-zero value means page number edit mode and equals to packed
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
708 * decimal number of already entered part of page number.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
709 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
710 * How this works.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
711 * Let's assume that current mode is normal (pagenumdec is zero), teletext page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
712 * 100 are displayed as usual. topmost left corner of page contains page number.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
713 * Then vbi_add_dec is sequentally called (through slave
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
714 * command of course) with 1,4,-,2,3 * values of dec parameter.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
715 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
716 * +-----+------------+------------------+
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
717 * | dec | pagenumxec | displayed number |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
718 * +-----+------------+------------------+
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
719 * | | 0x000 | 100 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
720 * +-----+------------+------------------+
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
721 * | 1 | 0x001 | __1 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
722 * +-----+------------+------------------+
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
723 * | 4 | 0x014 | _14 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
724 * +-----+------------+------------------+
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
725 * | - | 0x001 | __1 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
726 * +-----+------------+------------------+
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
727 * | 2 | 0x012 | _12 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
728 * +-----+------------+------------------+
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
729 * | 3 | 0x123 | 123 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
730 * +-----+------------+------------------+
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
731 * | | 0x000 | 123 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
732 * +-----+------------+------------------+
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
733 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
734 * pagenumdec will automatically receive zero value after third digit of page number
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
735 * is entered and current page will be switched to another one with entered page number.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
736 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
737 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
738 static void vbi_add_dec(priv_vbi_t * priv_vbi, char *dec)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
739 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
740 int count, shift;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
741 if (!dec)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
742 return;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
743 if (!priv_vbi->on)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
744 return;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
745 if ((*dec < '0' || *dec > '9') && *dec != '-')
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
746 return;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
747 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
748 count = (priv_vbi->pagenumdec >> 12) & 0xf;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
749 if (*dec == '-') {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
750 count--;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
751 if (count)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
752 priv_vbi->pagenumdec = ((priv_vbi->pagenumdec >> 4) & 0xfff) | (count << 12);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
753 else
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
754 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
755 } else {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
756 shift = count * 4;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
757 count++;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
758 priv_vbi->pagenumdec =
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
759 (((priv_vbi->pagenumdec) << 4 | (*dec -'0')) & 0xfff) | (count << 12);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
760 if (count == 3) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
761 priv_vbi->pgno = priv_vbi->pagenumdec & 0xfff;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
762 priv_vbi->subno = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
763 priv_vbi->redraw = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
764 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
765 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
766 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
767 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
768 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
769
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
770 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
771 * \brief follows link specified on current page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
772 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
773 * \param linkno link number (0..6)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
774 * \return
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
775 * TVI_CONTROL_FALSE if linkno is outside 0..6 range or if
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
776 * teletext is switched off
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
777 * TVI_CONTROL_TRUE otherwise
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
778 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
779 * linkno:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
780 * 0: tpage in tv parameters (starting page, usually 100)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
781 * 1..6: follows link on current page with given number
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
782 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
783 * FIXME: quick test shows that this is working strange
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
784 * FIXME: routine does not checks whether links exists on page or not
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
785 * TODO: more precise look
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
786 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
787 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
788 static int vbi_golink(priv_vbi_t * priv_vbi, int linkno)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
789 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
790 if (linkno < 0 || linkno > 6)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
791 return TVI_CONTROL_FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
792 if (!priv_vbi->on)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
793 return TVI_CONTROL_FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
794 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
795 if (linkno == 0) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
796 priv_vbi->pgno = priv_vbi->tpage;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
797 priv_vbi->subno = priv_vbi->page->nav_link[linkno].subno;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
798 priv_vbi->redraw = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
799 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
800 } else {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
801 linkno--;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
802 if (priv_vbi->pgno == priv_vbi->page->pgno) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
803 priv_vbi->pgno = priv_vbi->page->nav_link[linkno].pgno;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
804 priv_vbi->subno = priv_vbi->page->nav_link[linkno].subno;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
805 priv_vbi->redraw = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
806 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
807 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
808 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
809 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
810 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
811 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
812 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
813
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
814 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
815 * \brief get pointer to current teletext page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
816 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
817 * \return pointer to vbi_page structure if teletext is
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
818 * switched on and current page is valid, NULL - otherwise
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
819 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
820 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
821 static vbi_page *vbi_getpage(priv_vbi_t * priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
822 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
823 vbi_page *page = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
824
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
825 if (!priv_vbi->on)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
826 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
827 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
828 if (priv_vbi->valid_page)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
829 if (page = malloc(sizeof(vbi_page)))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
830 memcpy(page, priv_vbi->page, sizeof(vbi_page));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
831 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
832 return page;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
833 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
834
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
835 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
836 * \brief get pointer to current teletext page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
837 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
838 * \return pointer to character string, containing text-only data of
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
839 * teletext page. If teletext is switched off, current page is invalid
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
840 * or page format if not equal to "text" then returning value is NULL.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
841 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
842 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
843 static char *vbi_getpagetext(priv_vbi_t * priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
844 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
845 char *page = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
846
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
847 if (!priv_vbi->on)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
848 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
849 if (priv_vbi->tformat != VBI_TFORMAT_TEXT && priv_vbi->canvas)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
850 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
851 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
852 if (priv_vbi->valid_page)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
853 page = priv_vbi->txtpage;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
854 if (!page)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
855 page = priv_vbi->header;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
856 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
857 return page;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
858 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
859
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
860 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
861 * \brief get current page RGBA32 image (only in SPU mode)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
862 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
863 * \return pointer to tv_teletext_img_t structure, containing among
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
864 * other things rendered RGBA32 image of current teletext page.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
865 * return NULL is image is not available for some reason.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
866 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
867 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
868 static tv_teletext_img_t *vbi_getpageimg(priv_vbi_t * priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
869 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
870 tv_teletext_img_t *img = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
871
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
872 if (priv_vbi->tformat == VBI_TFORMAT_TEXT)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
873 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
874 if (priv_vbi->spudec_proc == 0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
875 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
876 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
877 if (NULL != (img = malloc(sizeof(tv_teletext_img_t)))) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
878 img->tformat = priv_vbi->tformat; // format: bw|gray|color
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
879 img->tformat = VBI_TFORMAT_GRAY; // format: bw|gray|color
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
880 img->half = priv_vbi->half; // half mode
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
881 img->columns = priv_vbi->columns; // page size
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
882 img->rows = priv_vbi->rows;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
883 img->width = priv_vbi->columns * 12;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
884 img->width = priv_vbi->rows * 10;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
885 img->canvas = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
886 // is page ok?
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
887 if (priv_vbi->canvas && priv_vbi->on && priv_vbi->csize && priv_vbi->valid_page) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
888
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
889 if (NULL != (img->canvas = malloc(priv_vbi->csize)))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
890 memcpy(img->canvas, priv_vbi->canvas, priv_vbi->csize);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
891 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
892 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
893 priv_vbi->spudec_proc = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
894 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
895 return img;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
896 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
897
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
898 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
899 * \brief start teletext sybsystem
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
900 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
901 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
902 * initializes cache, vbi decoder and starts background thread
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
903 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
904 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
905 static void vbi_start(priv_vbi_t * priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
906 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
907 if (!priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
908 return;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
909 if (NULL != (priv_vbi->txtpage = malloc(VBI_TXT_PAGE_SIZE))) // alloc vbi_page
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
910 memset(priv_vbi->txtpage, 0, VBI_TXT_PAGE_SIZE);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
911 priv_vbi->page = malloc(sizeof(vbi_page));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
912 priv_vbi->cache = (vbi_page **) malloc(1000 * sizeof(vbi_page *));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
913 memset(priv_vbi->cache, 0, 1000 * sizeof(vbi_page *));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
914 priv_vbi->decoder = vbi_decoder_new();
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
915 priv_vbi->subno = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
916 priv_vbi->fmt = VBI_PIXFMT_RGBA32_LE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
917 memset(priv_vbi->theader, 0, sizeof(priv_vbi->theader));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
918 snprintf(priv_vbi->header, sizeof(priv_vbi->header), "%s", VBI_NO_TELETEXT);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
919 vbi_event_handler_add(priv_vbi->decoder, ~0, event_handler, (void *) priv_vbi); // add event handler
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
920 pthread_create(&priv_vbi->grabber_thread, NULL, grabber, priv_vbi); // add grab function
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
921 pthread_mutex_init(&priv_vbi->buffer_mutex, NULL);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
922 priv_vbi->valid_page = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
923 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
924 mp_msg(MSGT_TV, MSGL_INFO, "Teletext device: %s\n", priv_vbi->device);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
925 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
926
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
927 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
928 * \brief Teletext reset
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
929 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
930 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
931 * should be called during frequency, norm change, etc
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
932 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
933 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
934 static void vbi_reset(priv_vbi_t * priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
935 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
936 int i;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
937 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
938 if (priv_vbi->canvas)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
939 free(priv_vbi->canvas);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
940 priv_vbi->canvas = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
941 priv_vbi->canvas_size = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
942 priv_vbi->redraw = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
943 priv_vbi->csize = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
944 priv_vbi->valid_page = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
945 priv_vbi->spudec_proc = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
946 priv_vbi->pagenumdec = 0;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
947 if (priv_vbi->page)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
948 memset(priv_vbi->page, 0, sizeof(vbi_page));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
949 if (priv_vbi->txtpage)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
950 memset(priv_vbi->txtpage, 0, VBI_TXT_PAGE_SIZE);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
951 memset(priv_vbi->theader, 0, sizeof(priv_vbi->theader));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
952 if (priv_vbi->cache) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
953 for (i = 0; i < 1000; i++) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
954 if (priv_vbi->cache[i])
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
955 free(priv_vbi->cache[i]);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
956 priv_vbi->cache[i] = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
957 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
958 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
959 snprintf(priv_vbi->header, sizeof(priv_vbi->header), "%s",
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
960 VBI_NO_TELETEXT);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
961 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
962 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
963
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
964 /*
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
965 ---------------------------------------------------------------------------------
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
966 Public routines
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
967 ---------------------------------------------------------------------------------
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
968 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
969
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
970 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
971 * \brief teletext subsystem init
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
972 * \note Routine uses global variables tv_param_tdevice, tv_param_tpage
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
973 * and tv_param_tformat for initialization.
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
974 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
975 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
976 priv_vbi_t *teletext_init(void)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
977 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
978 priv_vbi_t *priv_vbi;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
979 int formatid, startpage;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
980 unsigned int services = VBI_SLICED_TELETEXT_B |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
981 VBI_SLICED_CAPTION_525 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
982 VBI_SLICED_CAPTION_625 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
983 VBI_SLICED_VBI_525 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
984 VBI_SLICED_VBI_625 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
985 VBI_SLICED_WSS_625 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
986 VBI_SLICED_WSS_CPR1204 |
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
987 VBI_SLICED_VPS;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
988
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
989 if (!tv_param_tdevice)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
990 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
991
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
992 if (NULL == (priv_vbi = malloc(sizeof(priv_vbi_t))))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
993 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
994 memset(priv_vbi, 0, sizeof(priv_vbi_t));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
995 formatid = VBI_TFORMAT_TEXT; // default
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
996 if (tv_param_tformat != NULL) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
997 if (strcmp(tv_param_tformat, "text") == 0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
998 formatid = VBI_TFORMAT_TEXT;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
999 if (strcmp(tv_param_tformat, "bw") == 0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1000 formatid = VBI_TFORMAT_BW;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1001 if (strcmp(tv_param_tformat, "gray") == 0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1002 formatid = VBI_TFORMAT_GRAY;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1003 if (strcmp(tv_param_tformat, "color") == 0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1004 formatid = VBI_TFORMAT_COLOR;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1005 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1006 startpage = steppage(0, tv_param_tpage); // page number is HEX
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1007 if (startpage < 0x100 || startpage > 0x999)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1008 startpage = 0x100;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1009 priv_vbi->device = strdup(tv_param_tdevice);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1010 priv_vbi->tformat = formatid;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1011 priv_vbi->tpage = startpage; // page number
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1012 priv_vbi->pgno = startpage; // page number
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1013
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1014
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1015 if (!priv_vbi->capture) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1016 priv_vbi->services = services; // probe v4l2
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1017 priv_vbi->capture = vbi_capture_v4l2_new(priv_vbi->device, // device
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1018 20, // buffer numbers
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1019 &(priv_vbi->services), // services
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1020 0, // strict
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1021 &(priv_vbi->errstr), // error string
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1022 0); // trace
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1023 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1024 services = priv_vbi->services;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1025 if (priv_vbi->capture == NULL) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1026 priv_vbi->services = services; // probe v4l
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1027 priv_vbi->capture = vbi_capture_v4l_new(priv_vbi->device,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1028 20,
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1029 &(priv_vbi->services),
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1030 0, &(priv_vbi->errstr), 0);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1031 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1032
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1033 if (!priv_vbi->capture) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1034 free(priv_vbi->device);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1035 free(priv_vbi);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1036 mp_msg(MSGT_TV, MSGL_INFO, "No teletext\n");
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1037 return NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1038 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1039 return priv_vbi;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1040 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1041
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1042 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1043 * \brief teletext subsystem uninitialization
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1044 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1045 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1046 * closes vbi capture, decode and and frees priv_vbi structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1047 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1048 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1049 void teletext_uninit(priv_vbi_t * priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1050 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1051 int i;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1052 if (priv_vbi == NULL)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1053 return;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1054 priv_vbi->eof = 1;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1055 if (priv_vbi->capture){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1056 vbi_capture_delete(priv_vbi->capture);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1057 priv_vbi->capture = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1058 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1059 if (priv_vbi->decoder){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1060 vbi_event_handler_remove(priv_vbi->decoder, event_handler);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1061 vbi_decoder_delete(priv_vbi->decoder);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1062 priv_vbi->decoder = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1063 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1064 if (priv_vbi->grabber_thread)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1065 pthread_join(priv_vbi->grabber_thread, NULL);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1066 pthread_mutex_destroy(&priv_vbi->buffer_mutex);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1067 if (priv_vbi->device){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1068 free(priv_vbi->device);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1069 priv_vbi->device = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1070 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1071 if (priv_vbi->errstr){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1072 free(priv_vbi->errstr);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1073 priv_vbi->errstr = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1074 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1075 if (priv_vbi->canvas){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1076 free(priv_vbi->canvas);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1077 priv_vbi->canvas = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1078 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1079 if (priv_vbi->txtpage){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1080 free(priv_vbi->txtpage);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1081 priv_vbi->txtpage = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1082 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1083 if (priv_vbi->network_name){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1084 free(priv_vbi->network_name);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1085 priv_vbi->network_name = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1086 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1087 if (priv_vbi->network_id){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1088 free(priv_vbi->network_id);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1089 priv_vbi->network_id = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1090 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1091 if (priv_vbi->page){
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1092 free(priv_vbi->page);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1093 priv_vbi->page = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1094 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1095 if (priv_vbi->cache) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1096 for (i = 0; i < 1000; i++) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1097 if (priv_vbi->cache[i])
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1098 free(priv_vbi->cache[i]);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1099 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1100 free(priv_vbi->cache);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1101 priv_vbi->cache = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1102 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1103 free(priv_vbi);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1104 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1105
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1106 /**
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1107 * \brief Teletext control routine
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1108 * \param priv_vbi private data structure
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1109 * \param cmd command
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1110 * \param arg command parameter (has to be not null)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1111 *
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1112 */
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1113 int teletext_control(priv_vbi_t * priv_vbi, int cmd, void *arg)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1114 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1115 vbi_page *page = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1116 char *txtpage = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1117 tv_teletext_img_t *img = NULL;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1118 if (!priv_vbi)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1119 return TVI_CONTROL_FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1120 if (!arg)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1121 return TVI_CONTROL_FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1122 switch (cmd) {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1123 case TVI_CONTROL_VBI_RESET:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1124 vbi_reset(priv_vbi);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1125 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1126 case TVI_CONTROL_VBI_START:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1127 vbi_start(priv_vbi);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1128 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1129 case TVI_CONTROL_VBI_GET_FORMAT:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1130 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1131 *(int*)arg=priv_vbi->tformat;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1132 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1133 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1134 case TVI_CONTROL_VBI_SET_MODE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1135 return teletext_set_mode(priv_vbi, *(int *) arg);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1136 case TVI_CONTROL_VBI_GET_MODE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1137 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1138 *(int*)arg=priv_vbi->on;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1139 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1140 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1141 case TVI_CONTROL_VBI_STEP_MODE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1142 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1143 int val;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1144 pthread_mutex_lock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1145 val=(priv_vbi->on+*(int*)arg)%4;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1146 pthread_mutex_unlock(&(priv_vbi->buffer_mutex));
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1147 if (val<0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1148 val+=4;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1149 return teletext_set_mode(priv_vbi,val);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1150 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1151 case TVI_CONTROL_VBI_GET_HALF_PAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1152 *(void **) arg = (void *) vbi_get_half(priv_vbi);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1153 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1154 case TVI_CONTROL_VBI_SET_HALF_PAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1155 return teletext_set_half_page(priv_vbi, *(int *) arg);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1156 case TVI_CONTROL_VBI_STEP_HALF_PAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1157 {
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1158 int val;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1159 val=(vbi_get_half(priv_vbi)+*(int*)arg)%3;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1160
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1161 if (val<0)
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1162 val+=3;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1163 return teletext_set_half_page(priv_vbi,val);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1164 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1165
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1166 case TVI_CONTROL_VBI_SET_PAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1167 vbi_setpage(priv_vbi, *(int *) arg, 0);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1168 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1169 case TVI_CONTROL_VBI_STEP_PAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1170 vbi_steppage(priv_vbi, *(int *) arg);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1171 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1172 case TVI_CONTROL_VBI_ADD_DEC:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1173 vbi_add_dec(priv_vbi, *(char **) arg);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1174 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1175 case TVI_CONTROL_VBI_GO_LINK:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1176 return vbi_golink(priv_vbi, *(int *) arg);
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1177 case TVI_CONTROL_VBI_GET_PAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1178 *(int*) arg = priv_vbi->pgno;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1179 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1180 case TVI_CONTROL_VBI_GET_VBIPAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1181 if (NULL == (page = vbi_getpage(priv_vbi)))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1182 return TVI_CONTROL_FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1183 *(void **) arg = (void *) page;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1184 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1185 case TVI_CONTROL_VBI_GET_TXTPAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1186 if (NULL == (txtpage = vbi_getpagetext(priv_vbi)))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1187 return TVI_CONTROL_FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1188 *(void **) arg = (void *) txtpage;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1189 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1190 case TVI_CONTROL_VBI_GET_IMGPAGE:
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1191 if (NULL == (img = vbi_getpageimg(priv_vbi)))
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1192 return TVI_CONTROL_FALSE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1193 *(void **) arg = (void *) img;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1194 return TVI_CONTROL_TRUE;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1195 }
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1196 return TVI_CONTROL_UNKNOWN;
a6c619ee9d30 Teletext support for tv:// (v4l and v4l2 only)
voroshil
parents:
diff changeset
1197 }