MythTV master
cc708reader.cpp
Go to the documentation of this file.
1// -*- Mode: c++ -*-
2// Copyright (c) 2003-2005, Daniel Kristjansson
3
4#include <cstdlib>
5
7
9
10#define LOC QString("CC708Reader: ")
11#define CHECKENABLED if (!m_enabled) return
12
14{
15 for (uint i=0; i < k708MaxServices; i++)
16 {
17 m_buf[i].resize(0);
18 m_buf[i].reserve(512);
19 m_delayed[i] = false;
20
21 m_tempStr[i].reserve(512);
22 }
24}
25
27{
28 for (uint i = 1; i < k708MaxServices; i++)
29 DeleteWindows(i, 0xff);
30}
31
32void CC708Reader::SetCurrentWindow(uint service_num, int window_id)
33{
35 LOG(VB_VBI, LOG_DEBUG, LOC + QString("SetCurrentWindow(%1, %2)")
36 .arg(service_num).arg(window_id));
37 m_cc708services[service_num].m_currentWindow = window_id;
38}
39
41 uint service_num, int window_id,
42 int priority, bool visible,
43 int anchor_point, int relative_pos,
44 int anchor_vertical, int anchor_horizontal,
45 int row_count, int column_count,
46 int row_lock, int column_lock,
47 int pen_style, int window_style)
48{
49
51
52 m_cc708DelayedDeletes[service_num & 63] &= ~(1 << window_id);
53
54 LOG(VB_VBI, LOG_DEBUG, LOC +
55 QString("DefineWindow(%1, %2,\n\t\t\t\t\t")
56 .arg(service_num).arg(window_id) +
57 QString(" prio %1, vis %2, ap %3, rp %4, av %5, ah %6")
58 .arg(priority).arg(visible).arg(anchor_point).arg(relative_pos)
59 .arg(anchor_vertical).arg(anchor_horizontal) +
60 QString("\n\t\t\t\t\t row_cnt %1, row_lck %2, "
61 "col_cnt %3, col_lck %4 ")
62 .arg(row_count).arg(row_lock)
63 .arg(column_count).arg(column_lock) +
64 QString("\n\t\t\t\t\t pen style %1, win style %2)")
65 .arg(pen_style).arg(window_style));
66
67 GetCCWin(service_num, window_id)
68 .DefineWindow(priority, visible,
69 anchor_point, relative_pos,
70 anchor_vertical, anchor_horizontal,
71 row_count, column_count,
72 row_lock, column_lock,
73 pen_style, window_style);
74
75 m_cc708services[service_num].m_currentWindow = window_id;
76}
77
78void CC708Reader::DeleteWindows(uint service_num, int window_map)
79{
81 LOG(VB_VBI, LOG_DEBUG, LOC + QString("DeleteWindows(%1, %2)")
82 .arg(service_num).arg(window_map, 8, 2, QChar{'0'}));
83
84 for (uint i = 0; i < 8; i++)
85 if ((1 << i) & window_map)
86 GetCCWin(service_num, i).Clear();
87 m_cc708DelayedDeletes[service_num&63] |= window_map;
88}
89
90void CC708Reader::DisplayWindows(uint service_num, int window_map)
91{
93 LOG(VB_VBI, LOG_DEBUG, LOC + QString("DisplayWindows(%1, %2)")
94 .arg(service_num).arg(window_map, 8, 2, QChar{'0'}));
95
96 for (uint i = 0; i < 8; i++)
97 {
98 if ((1 << i) & m_cc708DelayedDeletes[service_num & 63])
99 {
100 CC708Window &win = GetCCWin(service_num, i);
101 QMutexLocker locker(&win.m_lock);
102
103 win.SetExists(false);
104 if (win.m_text)
105 {
106 delete [] win.m_text;
107 win.m_text = nullptr;
108 }
109 }
110 m_cc708DelayedDeletes[service_num & 63] = 0;
111 }
112
113 for (uint i = 0; i < 8; i++)
114 {
115 if ((1 << i ) & window_map)
116 {
117 CC708Window &win = GetCCWin(service_num, i);
118 win.SetVisible(true);
119 LOG(VB_VBI, LOG_DEBUG, LOC +
120 QString("DisplayedWindow(%1, %2)").arg(service_num).arg(i));
121 }
122 }
123}
124
125void CC708Reader::HideWindows(uint service_num, int window_map)
126{
128 LOG(VB_VBI, LOG_DEBUG, LOC + QString("HideWindows(%1, %2)")
129 .arg(service_num).arg(window_map, 8, 2, QChar{'0'}));
130
131 for (uint i = 0; i < 8; i++)
132 {
133 if ((1 << i) & window_map)
134 {
135 CC708Window &win = GetCCWin(service_num, i);
136 win.SetVisible(false);
137 }
138 }
139}
140
141void CC708Reader::ClearWindows(uint service_num, int window_map)
142{
144 LOG(VB_VBI, LOG_DEBUG, LOC + QString("ClearWindows(%1, %2)")
145 .arg(service_num).arg(window_map, 8, 2, QChar{'0'}));
146
147 for (uint i = 0; i < 8; i++)
148 if ((1 << i) & window_map)
149 GetCCWin(service_num, i).Clear();
150}
151
152void CC708Reader::ToggleWindows(uint service_num, int window_map)
153{
155 LOG(VB_VBI, LOG_DEBUG, LOC + QString("ToggleWindows(%1, %2)")
156 .arg(service_num).arg(window_map, 8, 2, QChar{'0'}));
157
158 for (uint i = 0; i < 8; i++)
159 {
160 if ((1 << i) & window_map)
161 {
162 CC708Window &win = GetCCWin(service_num, i);
163 win.SetVisible(!win.GetVisible());
164 }
165 }
166}
167
169 uint service_num,
170 int fill_color, int fill_opacity,
171 int border_color, int border_type,
172 int scroll_dir, int print_dir,
173 int effect_dir,
174 int display_effect, int effect_speed,
175 int justify, int word_wrap)
176{
178 LOG(VB_VBI, LOG_DEBUG, LOC + QString("SetWindowAttributes(%1...)")
179 .arg(service_num));
180
181 CC708Window &win = GetCCWin(service_num);
182
183 win.m_fill_color = fill_color & 0x3f;
184 win.m_fill_opacity = fill_opacity;
185 win.m_border_color = border_color & 0x3f;
186 win.m_border_type = border_type;
187 win.m_scroll_dir = scroll_dir;
188 win.m_print_dir = print_dir;
189 win.m_effect_dir = effect_dir;
190 win.m_display_effect = display_effect;
191 win.m_effect_speed = effect_speed;
192 win.m_justify = justify;
193 win.m_word_wrap = word_wrap;
194}
195
197 uint service_num, int pen_size,
198 int offset, int text_tag, int font_tag,
199 int edge_type, int underline, int italics)
200{
202 LOG(VB_VBI, LOG_DEBUG, LOC + QString("SetPenAttributes(%1, %2,")
203 .arg(service_num).arg(m_cc708services[service_num].m_currentWindow) +
204 QString("\n\t\t\t\t\t pen_size %1, offset %2, text_tag %3, "
205 "font_tag %4,"
206 "\n\t\t\t\t\t edge_type %5, underline %6, italics %7")
207 .arg(pen_size).arg(offset).arg(text_tag).arg(font_tag)
208 .arg(edge_type).arg(underline).arg(italics));
209
210 GetCCWin(service_num).m_pen.SetAttributes(
211 pen_size, offset, text_tag, font_tag, edge_type, underline, italics);
212}
213
215 uint service_num,
216 int fg_color, int fg_opacity,
217 int bg_color, int bg_opacity,
218 int edge_color)
219{
221 LOG(VB_VBI, LOG_DEBUG,
222 LOC + QString("SetPenColor(service=%1, fg%2.%3, bg=%4.%5, edge=%6)")
223 .arg(service_num).arg(fg_color).arg(fg_opacity)
224 .arg(bg_color).arg(bg_opacity).arg(edge_color));
225
226 CC708CharacterAttribute &attr = GetCCWin(service_num).m_pen.m_attr;
227
228 attr.m_fgColor = fg_color;
229 attr.m_fgOpacity = fg_opacity;
230 attr.m_bgColor = bg_color;
231 attr.m_bgOpacity = bg_opacity;
232 attr.m_edgeColor = edge_color;
233}
234
235void CC708Reader::SetPenLocation(uint service_num, int row, int column)
236{
238 LOG(VB_VBI, LOG_DEBUG, LOC + QString("SetPenLocation(%1, (c %2, r %3))")
239 .arg(service_num).arg(column).arg(row));
240 GetCCWin(service_num).SetPenLocation(row, column);
241}
242
243void CC708Reader::Delay(uint service_num, int tenths_of_seconds)
244{
246 LOG(VB_VBI, LOG_DEBUG, LOC + QString("Delay(%1, %2 seconds)")
247 .arg(service_num).arg(tenths_of_seconds * 0.1F));
248}
249
251{
253 LOG(VB_VBI, LOG_DEBUG, LOC + QString("DelayCancel(%1)").arg(service_num));
254}
255
256void CC708Reader::Reset(uint service_num)
257{
259 LOG(VB_VBI, LOG_DEBUG, LOC + QString("Reset(%1)").arg(service_num));
260 DeleteWindows(service_num, 0xff);
261 DelayCancel(service_num);
262}
263
265 std::u16string& unicode_string)
266{
268 QString debug = QString();
269 for (auto ch : unicode_string)
270 {
271 GetCCWin(service_num).AddChar(QChar(ch));
272 debug += QChar(ch);
273 }
274 LOG(VB_VBI, LOG_DEBUG, LOC + QString("AddText to %1->%2 |%3|")
275 .arg(service_num).arg(m_cc708services[service_num].m_currentWindow).arg(debug));
276}
#define LOC
Definition: cc708reader.cpp:10
#define CHECKENABLED
Definition: cc708reader.cpp:11
const uint k708MaxServices
Definition: cc708reader.h:13
CC708CharacterAttribute m_attr
Definition: cc708window.h:169
void SetAttributes(int pen_size, int offset, int text_tag, int font_tag, int edge_type, int underline, int italics)
Definition: cc708window.h:155
virtual void Reset(uint service_num)
virtual void SetPenColor(uint service_num, int fg_color, int fg_opacity, int bg_color, int bg_opacity, int edge_color)
virtual void ClearWindows(uint service_num, int window_map)
virtual void DefineWindow(uint service_num, int window_id, int priority, bool visible, int anchor_point, int relative_pos, int anchor_vertical, int anchor_horizontal, int row_count, int column_count, int row_lock, int column_lock, int pen_style, int window_style)
Definition: cc708reader.cpp:40
CC708Window & GetCCWin(uint service_num, uint window_id)
Definition: cc708reader.h:28
std::array< std::vector< uint8_t >, k708MaxServices > m_buf
Definition: cc708reader.h:77
virtual void Delay(uint service_num, int tenths_of_seconds)
std::array< CC708Service, k708MaxServices > m_cc708services
Definition: cc708reader.h:83
std::array< std::u16string, k708MaxServices > m_tempStr
Definition: cc708reader.h:80
std::array< int, k708MaxServices > m_cc708DelayedDeletes
Definition: cc708reader.h:84
virtual void TextWrite(uint service_num, std::u16string &unicode_string)
virtual void DeleteWindows(uint service_num, int window_map)
Definition: cc708reader.cpp:78
virtual void SetWindowAttributes(uint service_num, int fill_color, int fill_opacity, int border_color, int border_type, int scroll_dir, int print_dir, int effect_dir, int display_effect, int effect_speed, int justify, int word_wrap)
virtual void DisplayWindows(uint service_num, int window_map)
Definition: cc708reader.cpp:90
virtual void SetPenAttributes(uint service_num, int pen_size, int offset, int text_tag, int font_tag, int edge_type, int underline, int italics)
void ClearBuffers(void)
Definition: cc708reader.cpp:26
virtual void ToggleWindows(uint service_num, int window_map)
virtual void HideWindows(uint service_num, int window_map)
virtual void SetCurrentWindow(uint service_num, int window_id)
Definition: cc708reader.cpp:32
virtual void DelayCancel(uint service_num)
virtual void SetPenLocation(uint service_num, int row, int column)
std::array< bool, k708MaxServices > m_delayed
Definition: cc708reader.h:78
uint m_fill_opacity
Definition: cc708window.h:262
CC708Pen m_pen
Definition: cc708window.h:279
uint m_effect_dir
Definition: cc708window.h:267
void SetVisible(bool value)
Definition: cc708window.h:296
uint m_scroll_dir
Definition: cc708window.h:265
uint m_print_dir
Definition: cc708window.h:266
uint m_border_type
Definition: cc708window.h:264
uint m_justify
Definition: cc708window.h:270
uint m_effect_speed
Definition: cc708window.h:269
bool GetVisible(void) const
Definition: cc708window.h:288
uint m_display_effect
Definition: cc708window.h:268
void Clear(void)
void DefineWindow(int priority, bool visible, int anchor_point, int relative_pos, int anchor_vertical, int anchor_horizontal, int row_count, int column_count, int row_lock, int column_lock, int pen_style, int window_style)
void AddChar(QChar ch)
CC708Character * m_text
Definition: cc708window.h:278
uint m_border_color
Definition: cc708window.h:263
QRecursiveMutex m_lock
Definition: cc708window.h:310
void SetPenLocation(uint row, uint column)
uint m_word_wrap
Definition: cc708window.h:271
uint m_fill_color
Definition: cc708window.h:261
void SetExists(bool value)
Definition: cc708window.h:290
unsigned int uint
Definition: compat.h:60
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
VERBOSE_PREAMBLE Most debug(nodatabase, notimestamp, noextra)") VERBOSE_MAP(VB_GENERAL