MythTV
master
mythtv
libs
libmythtv
captions
cc608reader.h
Go to the documentation of this file.
1
#ifndef CC608READER_H
2
#define CC608READER_H
3
4
#include <cstdint>
5
#include <utility>
6
7
// Qt headers
8
#include <QMutex>
9
10
// MythTV headers
11
#include "
libmythtv/captions/cc608decoder.h
"
12
#include "
libmythtv/mythtvexp.h
"
13
14
static
constexpr int8_t
MAXTBUFFER
{ 60 };
15
static
constexpr int8_t
MAXOUTBUFFERS
{ 16 + 1 };
16
17
class
CC608Text
18
{
19
public
:
20
CC608Text
(QString T,
int
X,
int
Y) :
21
m_text
(std::move(T)),
m_x
(X),
m_y
(Y) {}
22
CC608Text
(
const
CC608Text
&other) =
default
;
23
QString
m_text
;
24
int
m_x
;
25
int
m_y
;
26
};
27
28
struct
TextContainer
29
{
30
std::chrono::milliseconds
timecode
;
31
int
len
;
32
unsigned
char
*
buffer
;
33
char
type
;
34
};
35
36
class
CC608Buffer
37
{
38
public
:
39
~CC608Buffer
(
void
) {
Clear
(); }
40
void
Clear
(
void
)
41
{
42
m_lock
.lock();
43
for
(
auto
*cc :
m_buffers
)
44
delete
cc;
45
m_buffers
.clear();
46
m_lock
.unlock();
47
}
48
49
QMutex
m_lock
;
50
std::vector<CC608Text*>
m_buffers
;
51
};
52
53
class
CC608StateTracker
54
{
55
public
:
56
CC608StateTracker
() =
default
;
57
58
void
Clear
(
void
)
59
{
60
m_outputText
=
""
;
61
m_outputCol
= 0;
62
m_outputRow
= 0;
63
m_changed
=
true
;
64
m_output
.
Clear
();
65
}
66
67
QString
m_outputText
;
68
int
m_outputCol
{0};
69
int
m_outputRow
{0};
70
bool
m_changed
{
true
};
71
CC608Buffer
m_output
;
72
};
73
74
class
MythPlayer
;
75
76
using
CC608WriteFn
= void (*) (
void
*,
unsigned
char
*, int, std::chrono::milliseconds, int);
77
78
class
MTV_PUBLIC
CC608Reader
:
public
CC608Input
79
{
80
public
:
81
explicit
CC608Reader
(
MythPlayer
*parent);
82
~
CC608Reader
()
override
;
83
84
void
SetTTPageNum
(
int
page) { m_ccPageNum = page; }
85
void
SetEnabled
(
bool
enable) { m_enabled = enable; }
86
void
FlushTxtBuffers(
void
);
87
CC608Buffer
*GetOutputText(
bool
&changed,
int
&streamIdx);
88
CC608Buffer
* GetOutputText(
bool
&changed);
89
void
SetMode(
int
mode);
90
void
ClearBuffers(
bool
input,
bool
output
,
int
outputStreamIdx = -1);
91
void
AddTextData
(
unsigned
char
*buf,
int
len,
92
std::chrono::milliseconds timecode,
char
type
)
override
;
// CC608Input
93
void
TranscodeWriteText(
CC608WriteFn
func,
void
* ptr);
94
95
private
:
96
int
Update(
unsigned
char
*inpos);
97
void
Update608Text(std::vector<CC608Text*> *ccbuf,
98
int
replace = 0,
int
scroll = 0,
99
bool
scroll_prsv =
false
,
100
int
scroll_yoff = 0,
int
scroll_ymax = 15,
101
int
streamIdx =
CC_CC1
);
102
int
NumInputBuffers(
bool
need_to_lock =
true
);
103
104
MythPlayer
*m_parent {
nullptr
};
105
bool
m_enabled {
false
};
106
// Input buffers
107
int
m_readPosition {0};
108
int
m_writePosition {0};
109
QMutex
m_inputBufLock
;
110
int
m_maxTextSize {0};
111
std::array<TextContainer,MAXTBUFFER+1> m_inputBuffers {};
112
int
m_ccMode {
CC_CC1
};
113
int
m_ccPageNum {0x888};
114
// Output buffers
115
std::array<CC608StateTracker,MAXOUTBUFFERS>
m_state
;
116
};
117
118
#endif // CC608READER_H
CC608Buffer::m_lock
QMutex m_lock
Definition:
cc608reader.h:49
CC608Text
Definition:
cc608reader.h:17
CC608Reader::m_inputBufLock
QMutex m_inputBufLock
Definition:
cc608reader.h:109
mythtvexp.h
CC608Buffer::m_buffers
std::vector< CC608Text * > m_buffers
Definition:
cc608reader.h:50
CC608Reader::SetTTPageNum
void SetTTPageNum(int page)
Definition:
cc608reader.h:84
CC608Input
Definition:
cc608decoder.h:67
MythPlayer
Definition:
mythplayer.h:83
CC608WriteFn
void(*)(void *, unsigned char *, int, std::chrono::milliseconds, int) CC608WriteFn
Definition:
cc608reader.h:76
CC608Text::m_x
int m_x
Definition:
cc608reader.h:24
cc608decoder.h
CC608Buffer::Clear
void Clear(void)
Definition:
cc608reader.h:40
hardwareprofile.getLink.type
type
Definition:
getLink.py:57
CC608Buffer
Definition:
cc608reader.h:36
CC608StateTracker::m_outputRow
int m_outputRow
Definition:
cc608reader.h:69
CC608Reader::m_state
std::array< CC608StateTracker, MAXOUTBUFFERS > m_state
Definition:
cc608reader.h:115
MAXOUTBUFFERS
static constexpr int8_t MAXOUTBUFFERS
Definition:
cc608reader.h:15
CC608StateTracker::m_output
CC608Buffer m_output
Definition:
cc608reader.h:71
CC608Buffer::~CC608Buffer
~CC608Buffer(void)
Definition:
cc608reader.h:39
CC608StateTracker::m_changed
bool m_changed
Definition:
cc608reader.h:70
CC608Input::AddTextData
virtual void AddTextData(unsigned char *buf, int len, std::chrono::milliseconds timecode, char type)=0
TextContainer
Definition:
cc608reader.h:28
CC_CC1
@ CC_CC1
Definition:
cc608decoder.h:50
MTV_PUBLIC
#define MTV_PUBLIC
Definition:
mythtvexp.h:15
CC608Text::CC608Text
CC608Text(QString T, int X, int Y)
Definition:
cc608reader.h:20
MAXTBUFFER
static constexpr int8_t MAXTBUFFER
Definition:
cc608reader.h:14
CC608StateTracker::Clear
void Clear(void)
Definition:
cc608reader.h:58
TextContainer::len
int len
Definition:
cc608reader.h:31
TextContainer::timecode
std::chrono::milliseconds timecode
Definition:
cc608reader.h:30
CC608StateTracker
Definition:
cc608reader.h:53
CC608StateTracker::m_outputText
QString m_outputText
Definition:
cc608reader.h:67
CC608StateTracker::CC608StateTracker
CC608StateTracker()=default
TextContainer::type
char type
Definition:
cc608reader.h:33
CC608Reader::SetEnabled
void SetEnabled(bool enable)
Definition:
cc608reader.h:85
CC608Text::m_text
QString m_text
Definition:
cc608reader.h:23
CC608Reader
Definition:
cc608reader.h:78
CC608StateTracker::m_outputCol
int m_outputCol
Definition:
cc608reader.h:68
output
#define output
Definition:
synaesthesia.cpp:223
TextContainer::buffer
unsigned char * buffer
Definition:
cc608reader.h:32
CC608Text::m_y
int m_y
Definition:
cc608reader.h:25
Generated on Thu Feb 6 2025 03:17:12 for MythTV by
1.8.17