Commit a17be48caed92e5b51bc58ae8a3ab390da242ac7
1 parent
2a840a72
Exists in
master
and in
1 other branch
Remoção de componentesnão utilizados (correção)
Showing
40 changed files
with
0 additions
and
3197 deletions
Show diff stats
codificador/src/codificadormanager.cpp
@@ -1,171 +0,0 @@ | @@ -1,171 +0,0 @@ | ||
1 | -#include <stdio.h> | ||
2 | -#include <stdlib.h> | ||
3 | -#include <stdint.h> | ||
4 | -#include <iostream> | ||
5 | - | ||
6 | -#include "codificadormanager.h" | ||
7 | - | ||
8 | -#include "librasdatamessage.h" | ||
9 | -#include "librascontrolmessage.h" | ||
10 | -#include "librassection.h" | ||
11 | -#include "tspacket.h" | ||
12 | -#include "jdatagramsocket.h" | ||
13 | - | ||
14 | -using namespace std; | ||
15 | -using namespace jsocket; | ||
16 | - | ||
17 | -namespace Codificador { | ||
18 | - | ||
19 | - CodificadorManager* CodificadorManager::ccmanager = 0; | ||
20 | - | ||
21 | - CodificadorManager::CodificadorManager() { | ||
22 | - cc = 0; | ||
23 | - packets = new unsigned char[70000]; | ||
24 | - //pid = 0x63; | ||
25 | - version_number = 1; | ||
26 | - } | ||
27 | - | ||
28 | - CodificadorManager* CodificadorManager::getInstance() { | ||
29 | - if (ccmanager == NULL) | ||
30 | - ccmanager = new CodificadorManager(); | ||
31 | - return ccmanager; | ||
32 | - } | ||
33 | - | ||
34 | - CodificadorManager::~CodificadorManager() { | ||
35 | - printf("Deletando ccManager1... \n"); | ||
36 | - if (packets) { | ||
37 | - delete []packets; | ||
38 | - packets = NULL; | ||
39 | - } | ||
40 | - | ||
41 | - printf("Deletando ccManager2... \n"); | ||
42 | - ccmanager == NULL; | ||
43 | - } | ||
44 | - | ||
45 | - int CodificadorManager::getPid() { | ||
46 | - return this->pid; | ||
47 | - } | ||
48 | - | ||
49 | - void CodificadorManager::setPid(int pid) { | ||
50 | - this->pid = pid; | ||
51 | - } | ||
52 | - | ||
53 | - void CodificadorManager::setResolution(string resolution) { | ||
54 | - this->resolution = resolution; | ||
55 | - } | ||
56 | - | ||
57 | - void CodificadorManager::setDictionaryVersion(int dictionaryversion) { | ||
58 | - this->dictionaryversion = dictionaryversion; | ||
59 | - } | ||
60 | - | ||
61 | - void CodificadorManager::setDPH(int dph) { | ||
62 | - this->dph = dph; | ||
63 | - } | ||
64 | - | ||
65 | - void CodificadorManager::setDPV(int dpv) { | ||
66 | - this->dpv = dpv; | ||
67 | - } | ||
68 | - | ||
69 | - void CodificadorManager::setDFW(int dfw) { | ||
70 | - this->dfw = dfw; | ||
71 | - } | ||
72 | - | ||
73 | - void CodificadorManager::setDFH(int dfh) { | ||
74 | - this->dfh = dfh; | ||
75 | - } | ||
76 | - | ||
77 | - void CodificadorManager::setPortaOut(int porta) { | ||
78 | - this->portaOut = porta; | ||
79 | - } | ||
80 | - | ||
81 | - void CodificadorManager::setIp(string ip) { | ||
82 | - this->ip = ip; | ||
83 | - } | ||
84 | - | ||
85 | - unsigned char *CodificadorManager::generateSection(unsigned int type, unsigned char *msg, int n, int *numPackets) { | ||
86 | - unsigned short len; | ||
87 | - unsigned char *pesBytes; | ||
88 | - LibrasSection *librSection = NULL; | ||
89 | - | ||
90 | - if (type == LibrasDataMessage::LIBRAS_DATA_TYPE) { | ||
91 | - if(version_number == 32) | ||
92 | - version_number = 1; | ||
93 | - | ||
94 | - LibrasDataMessage *librData = new LibrasDataMessage((unsigned char *) msg, (unsigned short) n); | ||
95 | - | ||
96 | - librSection = new LibrasSection(librData, type, version_number); | ||
97 | - | ||
98 | - pesBytes = librSection->generateBytes(&len); | ||
99 | - | ||
100 | - *numPackets = generateTsPacket(packets, pid, pesBytes); | ||
101 | - | ||
102 | - | ||
103 | - delete librData; | ||
104 | - } else if (type == LibrasControlMessage::LIBRAS_MGM_TYPE) { | ||
105 | - if(version_number == 32) | ||
106 | - version_number = 1; | ||
107 | - | ||
108 | - LibrasControlMessage *librctrMess = new LibrasControlMessage(); | ||
109 | - librctrMess->setResolution(resolution); | ||
110 | - librctrMess->setDictionaryVersion((unsigned char)dictionaryversion); | ||
111 | - librctrMess->setDPH((unsigned short)dph); | ||
112 | - librctrMess->setDPV((unsigned short)dpv); | ||
113 | - librctrMess->setDFH((unsigned short)dfh); | ||
114 | - librctrMess->setDFW((unsigned short)dfw); | ||
115 | - | ||
116 | - librSection = new LibrasSection(librctrMess, type, version_number); | ||
117 | - | ||
118 | - pesBytes = librSection->generateBytes(&len); | ||
119 | - | ||
120 | - /*printf("PES Packet... \n"); | ||
121 | - for (int j = 0; j < len; j++){ | ||
122 | - printf("%x ", pesBytes[j]); | ||
123 | - } | ||
124 | - printf("\n");*/ | ||
125 | - | ||
126 | - *numPackets = generateTsPacket(packets, pid, pesBytes); | ||
127 | - | ||
128 | - delete librctrMess; | ||
129 | - } else { | ||
130 | - return NULL; | ||
131 | - } | ||
132 | - version_number++; | ||
133 | - | ||
134 | - delete []pesBytes; | ||
135 | - delete librSection; | ||
136 | - return packets; | ||
137 | - } | ||
138 | - | ||
139 | - int CodificadorManager::sendToOutput(unsigned char *pes, int numPackets) { | ||
140 | - //ip do MUX | ||
141 | - | ||
142 | - unsigned char *pack; | ||
143 | - pack = (unsigned char*) malloc (188); | ||
144 | - create_ts_null_packet(pack); | ||
145 | - | ||
146 | - for (int i = 1; i < 7; i++) { | ||
147 | - memcpy(pes + (i * 188), pack, 188); | ||
148 | - } | ||
149 | - | ||
150 | - DatagramSocket * w_socket = NULL; | ||
151 | - | ||
152 | - try { | ||
153 | - w_socket = new DatagramSocket(ip, portaOut); | ||
154 | - | ||
155 | - } catch (...) { | ||
156 | - printf("\nERRO ao abrir o socket.\n"); | ||
157 | - return 1; | ||
158 | - } | ||
159 | - | ||
160 | - //for (int i = 0; i < numPackets; i++) | ||
161 | - //w_socket->Send((char *) pes + (i * 188), 188); | ||
162 | - w_socket->Send((char *) pes, 1316); | ||
163 | - | ||
164 | - w_socket->Close(); | ||
165 | - delete w_socket; | ||
166 | - | ||
167 | - return 0; | ||
168 | - | ||
169 | - | ||
170 | - } | ||
171 | -} |
codificador/src/crc32.cpp
@@ -1,80 +0,0 @@ | @@ -1,80 +0,0 @@ | ||
1 | -#include "crc32.h" | ||
2 | - | ||
3 | -static const unsigned int CRC32[256] = { | ||
4 | - 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, | ||
5 | - 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, | ||
6 | - 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, | ||
7 | - 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, | ||
8 | - 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, | ||
9 | - 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, | ||
10 | - 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, | ||
11 | - 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, | ||
12 | - 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, | ||
13 | - 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, | ||
14 | - 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, | ||
15 | - 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, | ||
16 | - 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, | ||
17 | - 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, | ||
18 | - 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, | ||
19 | - 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, | ||
20 | - 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, | ||
21 | - 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, | ||
22 | - 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, | ||
23 | - 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, | ||
24 | - 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, | ||
25 | - 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, | ||
26 | - 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, | ||
27 | - 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, | ||
28 | - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, | ||
29 | - 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, | ||
30 | - 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, | ||
31 | - 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, | ||
32 | - 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, | ||
33 | - 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, | ||
34 | - 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, | ||
35 | - 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, | ||
36 | - 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, | ||
37 | - 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, | ||
38 | - 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, | ||
39 | - 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, | ||
40 | - 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, | ||
41 | - 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, | ||
42 | - 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, | ||
43 | - 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, | ||
44 | - 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, | ||
45 | - 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, | ||
46 | - 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, | ||
47 | - 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, | ||
48 | - 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, | ||
49 | - 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, | ||
50 | - 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, | ||
51 | - 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, | ||
52 | - 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, | ||
53 | - 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, | ||
54 | - 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, | ||
55 | - 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, | ||
56 | - 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, | ||
57 | - 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, | ||
58 | - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, | ||
59 | - 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, | ||
60 | - 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, | ||
61 | - 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, | ||
62 | - 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, | ||
63 | - 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, | ||
64 | - 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, | ||
65 | - 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, | ||
66 | - 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, | ||
67 | - 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4, | ||
68 | -}; | ||
69 | - | ||
70 | -unsigned int calculate_CRC_32(unsigned char *begin, unsigned count) { | ||
71 | - unsigned crc = 0xffffffff; | ||
72 | - | ||
73 | - while (count > 0) { | ||
74 | - crc = (crc << 8) ^ CRC32[(crc >> 24) ^ ((unsigned) * begin)]; | ||
75 | - begin++; | ||
76 | - count--; | ||
77 | - } | ||
78 | - return crc; | ||
79 | -} | ||
80 | - |
codificador/src/include/codificadormanager.h
@@ -1,51 +0,0 @@ | @@ -1,51 +0,0 @@ | ||
1 | -#ifndef _LIBRAS_MANAGER_H_ | ||
2 | -#define _LIBRAS_MANAGER_H_ | ||
3 | - | ||
4 | -#include <string> | ||
5 | -#include "tspacket.h" | ||
6 | - | ||
7 | -using namespace std; | ||
8 | - | ||
9 | -namespace Codificador { | ||
10 | - | ||
11 | - class CodificadorManager { | ||
12 | - private: | ||
13 | - static CodificadorManager *ccmanager; | ||
14 | - CodificadorManager(); | ||
15 | - | ||
16 | - int cc; | ||
17 | - int pid; | ||
18 | - unsigned char version_number; | ||
19 | - unsigned char *packets; | ||
20 | - | ||
21 | - string resolution; | ||
22 | - int dictionaryversion; | ||
23 | - int dph; | ||
24 | - int dpv; | ||
25 | - int dfw; | ||
26 | - int dfh; | ||
27 | - int portaOut; | ||
28 | - string ip; | ||
29 | - | ||
30 | - | ||
31 | - public: | ||
32 | - static CodificadorManager *getInstance(); | ||
33 | - virtual ~CodificadorManager(); | ||
34 | - | ||
35 | - int getPid(); | ||
36 | - void setPid(int pid); | ||
37 | - void setResolution(string resolution); | ||
38 | - void setDictionaryVersion(int dictionaryversion); | ||
39 | - void setDPH(int dph); | ||
40 | - void setDPV(int dph); | ||
41 | - void setDFW(int dph); | ||
42 | - void setDFH(int dph); | ||
43 | - void setPortaOut(int porta); | ||
44 | - void setIp(string ip); | ||
45 | - | ||
46 | - unsigned char *generateSection(unsigned int type, unsigned char *msg, int n, int *numPackets); | ||
47 | - int sendToOutput(unsigned char *pes, int numPackets); | ||
48 | - }; | ||
49 | -} | ||
50 | - | ||
51 | -#endif |
codificador/src/include/crc32.h
codificador/src/include/inmanagementdata.h
@@ -1,27 +0,0 @@ | @@ -1,27 +0,0 @@ | ||
1 | -#ifndef _INPUT_MGM_DATA_H_ | ||
2 | -#define _INPUT_MGM_DATA_H_ | ||
3 | - | ||
4 | -#include "jthread.h" | ||
5 | -#include "codificadormanager.h" | ||
6 | - | ||
7 | - namespace Codificador { | ||
8 | - | ||
9 | - class InManagementData: public jthread::Thread{ | ||
10 | - | ||
11 | - private: | ||
12 | - CodificadorManager *codificadorManager; | ||
13 | - bool stopped; | ||
14 | - | ||
15 | - public: | ||
16 | - static const int MAX_CC_MSG = 65536; | ||
17 | - | ||
18 | - InManagementData(); | ||
19 | - virtual ~InManagementData(); | ||
20 | - | ||
21 | - void Run(); | ||
22 | - void stop(); | ||
23 | - }; | ||
24 | - | ||
25 | - } | ||
26 | - | ||
27 | -#endif |
codificador/src/include/librascontrolmessage.h
@@ -1,57 +0,0 @@ | @@ -1,57 +0,0 @@ | ||
1 | -#ifndef _LIBRAS_CONTROL_MESSAGE_H_ | ||
2 | -#define _LIBRAS_CONTROL_MESSAGE_H_ | ||
3 | - | ||
4 | -#include "librascontrolsection.h" | ||
5 | -#include <string> | ||
6 | - | ||
7 | -using namespace std; | ||
8 | - | ||
9 | -namespace Codificador { | ||
10 | - | ||
11 | - class LibrasControlMessage : public LibrasControlSection { | ||
12 | - | ||
13 | - private: | ||
14 | - unsigned short messagelength; | ||
15 | - unsigned char resolution; | ||
16 | - unsigned char dictionaryversion; | ||
17 | - unsigned short dph; | ||
18 | - unsigned short dpv; | ||
19 | - unsigned short dfw; | ||
20 | - unsigned short dfh; | ||
21 | - unsigned char privatedatalength; | ||
22 | - unsigned char *privateDataBytes; | ||
23 | - | ||
24 | - public: | ||
25 | - static const unsigned int LIBRAS_MGM_TYPE = 0x00; | ||
26 | - static const unsigned int MESSAGE_ID_CONTROL = 0x01; | ||
27 | - | ||
28 | - unsigned short getMessageLength(); | ||
29 | - unsigned char getResolution(); | ||
30 | - unsigned char getDictionaryVersion(); | ||
31 | - unsigned short getDPH(); | ||
32 | - unsigned short getDPV(); | ||
33 | - unsigned short getDFW(); | ||
34 | - unsigned short getDFH(); | ||
35 | - unsigned char getPrivateDataLength(); | ||
36 | - unsigned char *getPrivateDataBytes(); | ||
37 | - | ||
38 | - void setMessageLength(unsigned short messagelength); | ||
39 | - void setResolution(string resolution); | ||
40 | - void setDictionaryVersion(unsigned char dictionaryversion); | ||
41 | - void setDPH(unsigned short dph); | ||
42 | - void setDPV(unsigned short dph); | ||
43 | - void setDFW(unsigned short dph); | ||
44 | - void setDFH(unsigned short dph); | ||
45 | - void setPrivateDataLength(unsigned char privatedatalength); | ||
46 | - void setPrivateDataBytes(unsigned char *privateDataBytes, int len); | ||
47 | - | ||
48 | - LibrasControlMessage(); | ||
49 | - virtual ~LibrasControlMessage(); | ||
50 | - | ||
51 | - | ||
52 | - virtual unsigned char *generateBytes(unsigned short *librasLen); | ||
53 | - }; | ||
54 | - | ||
55 | -} | ||
56 | - | ||
57 | -#endif |
codificador/src/include/librascontrolsection.h
@@ -1,26 +0,0 @@ | @@ -1,26 +0,0 @@ | ||
1 | -#ifndef _LIBRAS_CONTROL_SECTION_H_ | ||
2 | -#define _LIBRAS_CONTROL_SECTION_H_ | ||
3 | - | ||
4 | -namespace Codificador { | ||
5 | - | ||
6 | - class LibrasControlSection { | ||
7 | - protected: | ||
8 | - unsigned int type; | ||
9 | - unsigned char timecontrolflag; | ||
10 | - unsigned char messageid; | ||
11 | - | ||
12 | - public: | ||
13 | - | ||
14 | - LibrasControlSection(); | ||
15 | - virtual ~LibrasControlSection(); | ||
16 | - | ||
17 | - unsigned char getTimeControlFlag(); | ||
18 | - | ||
19 | - void setTimeControlFlag(unsigned char timecontrolflag); | ||
20 | - | ||
21 | - virtual unsigned char *generateBytes(unsigned short *librasLen); | ||
22 | - }; | ||
23 | - | ||
24 | -} | ||
25 | - | ||
26 | -#endif |
codificador/src/include/librasdatamessage.h
@@ -1,42 +0,0 @@ | @@ -1,42 +0,0 @@ | ||
1 | -#ifndef _LIBRAS_DATA_MESSAGE_H_ | ||
2 | -#define _LIBRAS_DATA_MESSAGE_H_ | ||
3 | - | ||
4 | -#include "librascontrolsection.h" | ||
5 | - | ||
6 | -namespace Codificador { | ||
7 | - | ||
8 | - class LibrasDataMessage : public LibrasControlSection { | ||
9 | - | ||
10 | - private: | ||
11 | - unsigned short messagelength; | ||
12 | - unsigned int stm; | ||
13 | - unsigned short sinaislooplength; | ||
14 | - unsigned char glosadatalength; | ||
15 | - unsigned char *glosaDataBytes; | ||
16 | - | ||
17 | - public: | ||
18 | - static const unsigned int LIBRAS_DATA_TYPE = 0x01; | ||
19 | - static const unsigned int MESSAGE_ID_DATA = 0x02; | ||
20 | - | ||
21 | - unsigned short getMessageLength(); | ||
22 | - unsigned int getStm(); | ||
23 | - unsigned short getSinaisLoopLength(); | ||
24 | - unsigned char getGlosaDataLength(); | ||
25 | - unsigned char *getGlosaDataBytes(); | ||
26 | - | ||
27 | - void setMessageLength(unsigned short messagelength); | ||
28 | - void setStm(unsigned int stm); | ||
29 | - void setSinaisLoopLength(unsigned short sinaislooplength); | ||
30 | - void setGlosaDataLength(unsigned char glosadatalength); | ||
31 | - void setGlosaDataBytes(unsigned char *glosaDataBytes, int len); | ||
32 | - | ||
33 | - LibrasDataMessage(unsigned char *data, int size); | ||
34 | - virtual ~LibrasDataMessage(); | ||
35 | - | ||
36 | - virtual unsigned char *generateBytes(unsigned short *librasLen); | ||
37 | - | ||
38 | - }; | ||
39 | - | ||
40 | -} | ||
41 | - | ||
42 | -#endif |
codificador/src/include/librassection.h
@@ -1,53 +0,0 @@ | @@ -1,53 +0,0 @@ | ||
1 | -#ifndef _SYNCRO_PES_DATA_H_ | ||
2 | -#define _SYNCRO_PES_DATA_H_ | ||
3 | - | ||
4 | -#include "librascontrolsection.h" | ||
5 | - | ||
6 | - namespace Codificador { | ||
7 | - | ||
8 | - class LibrasSection{ | ||
9 | - | ||
10 | - private: | ||
11 | - unsigned char tableid; | ||
12 | - unsigned char section_syntax_indicator; | ||
13 | - unsigned short libras_section_length; | ||
14 | - unsigned short table_id_extension; | ||
15 | - unsigned char version_number; | ||
16 | - unsigned char current_next_indicator; | ||
17 | - unsigned char section_number; | ||
18 | - unsigned char last_section_number; | ||
19 | - unsigned int crc32; | ||
20 | - | ||
21 | - LibrasControlSection *libras; | ||
22 | - | ||
23 | - public: | ||
24 | - | ||
25 | - LibrasSection(LibrasControlSection *libr, unsigned int type, unsigned char version); | ||
26 | - virtual ~LibrasSection(); | ||
27 | - | ||
28 | - unsigned char getSectionSyntaxIndicator(); | ||
29 | - unsigned short getLibrasSectionLength(); | ||
30 | - unsigned char getTableIdExtension(); | ||
31 | - unsigned char getVersionNumber(); | ||
32 | - unsigned char getCurrentNextIndicator(); | ||
33 | - unsigned char getSectionNumber(); | ||
34 | - unsigned char getLastSectionNumber(); | ||
35 | - unsigned int getCrc32(); | ||
36 | - LibrasControlSection *getLibras(); | ||
37 | - | ||
38 | - void setSectionSyntaxIndicator(unsigned char section_syntax_indicator); | ||
39 | - void setLibrasSectionLength(unsigned short libras_section_length); | ||
40 | - void setTableIdExtension(unsigned short table_id_extension); | ||
41 | - void setVersionNumber(unsigned char version_number); | ||
42 | - void setCurrentNextIndicator(unsigned char current_next_indicator); | ||
43 | - void setSectionNumber(unsigned char section_number); | ||
44 | - void setLastSectionNumber(unsigned char last_section_number); | ||
45 | - | ||
46 | - void setLibras(LibrasControlSection *libras); | ||
47 | - | ||
48 | - unsigned char *generateBytes(unsigned short *syncPesLen); | ||
49 | - }; | ||
50 | - | ||
51 | - } | ||
52 | - | ||
53 | -#endif |
codificador/src/include/recebeglosa.h
@@ -1,39 +0,0 @@ | @@ -1,39 +0,0 @@ | ||
1 | -/* | ||
2 | - * File: RecebeGlosa.h | ||
3 | - * Author: felipe | ||
4 | - * | ||
5 | - * Created on 2 de Fevereiro de 2010, 09:43 | ||
6 | - */ | ||
7 | - | ||
8 | -#ifndef _RECEBEGLOSA_H | ||
9 | -#define _RECEBEGLOSA_H | ||
10 | - | ||
11 | -#include <vector> | ||
12 | -#include <string> | ||
13 | -#include <pthread.h> | ||
14 | -#include "codificadormanager.h" | ||
15 | -#include "ouvinteTradutor.h" | ||
16 | - | ||
17 | -using namespace std; | ||
18 | - | ||
19 | -namespace Codificador { | ||
20 | - | ||
21 | - class RecebeGlosa : public Tradutor::OuvinteTradutor { | ||
22 | - public: | ||
23 | - | ||
24 | - RecebeGlosa(int pd, string rl, int vs, int dh, int dv, int dw, int df, int portOut, string ip); | ||
25 | - ~RecebeGlosa(); | ||
26 | - | ||
27 | - void PreencheVector(); | ||
28 | - virtual void codifica(std::vector<std::string> * glosas); | ||
29 | - | ||
30 | - private: | ||
31 | - CodificadorManager *codificadorManager; | ||
32 | - | ||
33 | - // Mutex para evitar mutiplas chamadas de notificadores | ||
34 | - pthread_mutex_t *mutex; | ||
35 | - }; | ||
36 | -} | ||
37 | - | ||
38 | -#endif /* _RECEBEGLOSA_H */ | ||
39 | - |
codificador/src/inmanagementdata.cpp
@@ -1,36 +0,0 @@ | @@ -1,36 +0,0 @@ | ||
1 | -#include <stdio.h> | ||
2 | - | ||
3 | -#include "inmanagementdata.h" | ||
4 | -#include "codificadormanager.h" | ||
5 | -#include "librascontrolmessage.h" | ||
6 | - | ||
7 | -namespace Codificador{ | ||
8 | - | ||
9 | - InManagementData::InManagementData(){ | ||
10 | - stopped = false; | ||
11 | - codificadorManager = CodificadorManager::getInstance(); | ||
12 | - } | ||
13 | - | ||
14 | - InManagementData::~InManagementData(){ | ||
15 | - } | ||
16 | - | ||
17 | - void InManagementData::stop(){ | ||
18 | - stopped = true; | ||
19 | - } | ||
20 | - | ||
21 | - void InManagementData::Run(){ | ||
22 | - int numPackets; | ||
23 | - unsigned char *pes; | ||
24 | - | ||
25 | - while(!stopped){ | ||
26 | - pes = codificadorManager->generateSection(LibrasControlMessage::LIBRAS_MGM_TYPE, NULL, 0, &numPackets); | ||
27 | - codificadorManager->sendToOutput(pes, numPackets); | ||
28 | - printf("\nGerando Libras Control Message\n"); | ||
29 | - sleep(2); | ||
30 | - | ||
31 | - } | ||
32 | - | ||
33 | - printf("Saiu do InputMgmData... \n"); | ||
34 | - | ||
35 | - } | ||
36 | -} |
codificador/src/librascontrolmessage.cpp
@@ -1,143 +0,0 @@ | @@ -1,143 +0,0 @@ | ||
1 | -#include <stdio.h> | ||
2 | -#include <stdlib.h> | ||
3 | -#include <string.h> | ||
4 | - | ||
5 | -#include "librascontrolmessage.h" | ||
6 | - | ||
7 | -namespace Codificador { | ||
8 | - | ||
9 | - LibrasControlMessage::LibrasControlMessage() : LibrasControlSection() { | ||
10 | - type = LIBRAS_MGM_TYPE; | ||
11 | - | ||
12 | - messagelength = 11; | ||
13 | - //resolution = 1; | ||
14 | - timecontrolflag = 0; | ||
15 | - //dictionaryversion = 1; | ||
16 | - privatedatalength = 0; | ||
17 | - privateDataBytes = NULL; | ||
18 | - //dph = 0; | ||
19 | - //dfh = 0; | ||
20 | - //dfw = 0; | ||
21 | - //dpv = 0; | ||
22 | - } | ||
23 | - | ||
24 | - LibrasControlMessage::~LibrasControlMessage() { | ||
25 | - | ||
26 | - } | ||
27 | - | ||
28 | - unsigned short LibrasControlMessage::getMessageLength() { | ||
29 | - return messagelength; | ||
30 | - } | ||
31 | - | ||
32 | - unsigned char LibrasControlMessage::getResolution() { | ||
33 | - return resolution; | ||
34 | - } | ||
35 | - | ||
36 | - unsigned char LibrasControlMessage::getDictionaryVersion() { | ||
37 | - return dictionaryversion; | ||
38 | - } | ||
39 | - | ||
40 | - unsigned short LibrasControlMessage::getDPH() { | ||
41 | - return dph; | ||
42 | - } | ||
43 | - | ||
44 | - unsigned short LibrasControlMessage::getDPV() { | ||
45 | - return dpv; | ||
46 | - } | ||
47 | - | ||
48 | - unsigned short LibrasControlMessage::getDFW() { | ||
49 | - return dfw; | ||
50 | - } | ||
51 | - | ||
52 | - unsigned short LibrasControlMessage::getDFH() { | ||
53 | - return dfh; | ||
54 | - } | ||
55 | - | ||
56 | - unsigned char LibrasControlMessage::getPrivateDataLength() { | ||
57 | - return privatedatalength; | ||
58 | - } | ||
59 | - | ||
60 | - unsigned char *LibrasControlMessage::getPrivateDataBytes() { | ||
61 | - return privateDataBytes; | ||
62 | - } | ||
63 | - | ||
64 | - void LibrasControlMessage::setMessageLength(unsigned short messagelength) { | ||
65 | - this->messagelength = messagelength; | ||
66 | - } | ||
67 | - | ||
68 | - void LibrasControlMessage::setResolution(string resolution) { | ||
69 | - if(resolution.compare("1920x1080") == 0) | ||
70 | - this->resolution = 0; | ||
71 | - if(resolution.compare("1280x720") == 0) | ||
72 | - this->resolution = 1; | ||
73 | - if(resolution.compare("640x480") == 0) | ||
74 | - this->resolution = 2; | ||
75 | - if(resolution.compare("960x540") == 0) | ||
76 | - this->resolution = 3; | ||
77 | - if(resolution.compare("720x480") == 0) | ||
78 | - this->resolution = 4; | ||
79 | - } | ||
80 | - | ||
81 | - void LibrasControlMessage::setDictionaryVersion(unsigned char dictionaryversion) { | ||
82 | - this->dictionaryversion = dictionaryversion; | ||
83 | - } | ||
84 | - | ||
85 | - void LibrasControlMessage::setDPH(unsigned short dph) { | ||
86 | - this->dph = dph; | ||
87 | - } | ||
88 | - | ||
89 | - void LibrasControlMessage::setDPV(unsigned short dpv) { | ||
90 | - this->dpv = dpv; | ||
91 | - } | ||
92 | - | ||
93 | - void LibrasControlMessage::setDFW(unsigned short dfw) { | ||
94 | - this->dfw = dfw; | ||
95 | - } | ||
96 | - | ||
97 | - void LibrasControlMessage::setDFH(unsigned short dfh) { | ||
98 | - this->dfh = dfh; | ||
99 | - } | ||
100 | - | ||
101 | - void LibrasControlMessage::setPrivateDataLength(unsigned char privatedatalength) { | ||
102 | - this->privatedatalength = privatedatalength; | ||
103 | - } | ||
104 | - | ||
105 | - void LibrasControlMessage::setPrivateDataBytes(unsigned char *privateDataBytes, int len) { | ||
106 | - if (this->privateDataBytes) { | ||
107 | - delete (this->privateDataBytes); | ||
108 | - } | ||
109 | - | ||
110 | - this->privateDataBytes = new unsigned char[len]; | ||
111 | - memcpy(this->privateDataBytes, privateDataBytes, len); | ||
112 | - } | ||
113 | - | ||
114 | - unsigned char *LibrasControlMessage::generateBytes(unsigned short *librasLen) { | ||
115 | - unsigned char *librasDataBytes; | ||
116 | - | ||
117 | - *librasLen = privatedatalength + messagelength + 3; | ||
118 | - | ||
119 | - librasDataBytes = new unsigned char[*librasLen]; | ||
120 | - | ||
121 | - messageid = MESSAGE_ID_CONTROL; | ||
122 | - messagelength += privatedatalength; | ||
123 | - | ||
124 | - librasDataBytes[0] = messageid & 0xFF; | ||
125 | - librasDataBytes[1] = (messagelength >> 8) & 0xFF; | ||
126 | - librasDataBytes[2] = messagelength & 0xFF; | ||
127 | - librasDataBytes[3] = ((resolution << 1) & 0x1E) | (timecontrolflag & 0x01); | ||
128 | - librasDataBytes[4] = dictionaryversion & 0xFF; | ||
129 | - librasDataBytes[5] = (dph >> 8) & 0xFF; | ||
130 | - librasDataBytes[6] = dph & 0xFF; | ||
131 | - librasDataBytes[7] = (dpv >> 8) & 0xFF; | ||
132 | - librasDataBytes[8] = dpv & 0xFF; | ||
133 | - librasDataBytes[9] = (dfw >> 8) & 0xFF; | ||
134 | - librasDataBytes[10] = dfw & 0xFF; | ||
135 | - librasDataBytes[11] = (dfh >> 8) & 0xFF; | ||
136 | - librasDataBytes[12] = dfh & 0xFF; | ||
137 | - librasDataBytes[13] = privatedatalength & 0xFF; | ||
138 | - | ||
139 | - memcpy(librasDataBytes + 11, privateDataBytes, privatedatalength); | ||
140 | - | ||
141 | - return librasDataBytes; | ||
142 | - } | ||
143 | -} |
codificador/src/librascontrolsection.cpp
@@ -1,27 +0,0 @@ | @@ -1,27 +0,0 @@ | ||
1 | -#include "librascontrolsection.h" | ||
2 | - | ||
3 | -#define NULL 0 | ||
4 | - | ||
5 | -namespace Codificador { | ||
6 | - | ||
7 | - LibrasControlSection::LibrasControlSection() { | ||
8 | - timecontrolflag = 0; | ||
9 | - } | ||
10 | - | ||
11 | - LibrasControlSection::~LibrasControlSection() { | ||
12 | - | ||
13 | - } | ||
14 | - | ||
15 | - unsigned char LibrasControlSection::getTimeControlFlag() { | ||
16 | - return timecontrolflag; | ||
17 | - } | ||
18 | - | ||
19 | - void LibrasControlSection::setTimeControlFlag(unsigned char timecontrolflag) { | ||
20 | - this->timecontrolflag = timecontrolflag; | ||
21 | - } | ||
22 | - | ||
23 | - unsigned char *LibrasControlSection::generateBytes(unsigned short *librasLen) { | ||
24 | - | ||
25 | - return NULL; | ||
26 | - } | ||
27 | -} |
codificador/src/librasdatamessage.cpp
@@ -1,98 +0,0 @@ | @@ -1,98 +0,0 @@ | ||
1 | -#include <stdio.h> | ||
2 | -#include <stdlib.h> | ||
3 | -#include <string.h> | ||
4 | - | ||
5 | -#include "librasdatamessage.h" | ||
6 | - | ||
7 | -namespace Codificador { | ||
8 | - | ||
9 | - LibrasDataMessage::LibrasDataMessage(unsigned char *data, int size) : LibrasControlSection() { | ||
10 | - type = LIBRAS_DATA_TYPE; | ||
11 | - | ||
12 | - messagelength = 4; | ||
13 | - | ||
14 | - glosadatalength = size; | ||
15 | - glosaDataBytes = NULL; | ||
16 | - //Pode mudar | ||
17 | - sinaislooplength = 1; | ||
18 | - | ||
19 | - if (size > 0) { | ||
20 | - glosaDataBytes = new unsigned char[glosadatalength]; | ||
21 | - memcpy(glosaDataBytes, data, size); | ||
22 | - } | ||
23 | - } | ||
24 | - | ||
25 | - LibrasDataMessage::~LibrasDataMessage() { | ||
26 | - if (glosaDataBytes) delete [] glosaDataBytes; | ||
27 | - } | ||
28 | - | ||
29 | - unsigned short LibrasDataMessage::getMessageLength() { | ||
30 | - return messagelength; | ||
31 | - } | ||
32 | - | ||
33 | - unsigned int LibrasDataMessage::getStm() { | ||
34 | - return stm; | ||
35 | - } | ||
36 | - | ||
37 | - unsigned short LibrasDataMessage::getSinaisLoopLength() { | ||
38 | - return sinaislooplength; | ||
39 | - } | ||
40 | - | ||
41 | - unsigned char LibrasDataMessage::getGlosaDataLength() { | ||
42 | - return glosadatalength; | ||
43 | - } | ||
44 | - | ||
45 | - unsigned char *LibrasDataMessage::getGlosaDataBytes() { | ||
46 | - return glosaDataBytes; | ||
47 | - } | ||
48 | - | ||
49 | - void LibrasDataMessage::setMessageLength(unsigned short messagelength) { | ||
50 | - this->messagelength = messagelength; | ||
51 | - } | ||
52 | - | ||
53 | - void LibrasDataMessage::setStm(unsigned int stm) { | ||
54 | - this->stm = stm; | ||
55 | - } | ||
56 | - | ||
57 | - void LibrasDataMessage::setSinaisLoopLength(unsigned short sinaislooplength) { | ||
58 | - this->sinaislooplength = sinaislooplength; | ||
59 | - } | ||
60 | - | ||
61 | - void LibrasDataMessage::setGlosaDataLength(unsigned char glosadatalength) { | ||
62 | - this->glosadatalength = glosadatalength; | ||
63 | - } | ||
64 | - | ||
65 | - void LibrasDataMessage::setGlosaDataBytes(unsigned char *glosaDataBytes, int len) { | ||
66 | - if (this->glosaDataBytes) { | ||
67 | - delete [] (this->glosaDataBytes); | ||
68 | - } | ||
69 | - | ||
70 | - this->glosaDataBytes = new unsigned char[len]; | ||
71 | - memcpy(this->glosaDataBytes, glosaDataBytes, len); | ||
72 | - } | ||
73 | - | ||
74 | - unsigned char *LibrasDataMessage::generateBytes(unsigned short *librasLen) { | ||
75 | - unsigned char *librasDataBytes; | ||
76 | - | ||
77 | - *librasLen = glosadatalength + messagelength + 3; | ||
78 | - sinaislooplength += glosadatalength; | ||
79 | - | ||
80 | - librasDataBytes = new unsigned char[*librasLen]; | ||
81 | - | ||
82 | - messageid = MESSAGE_ID_DATA; | ||
83 | - messagelength += glosadatalength; | ||
84 | - | ||
85 | - librasDataBytes[0] = messageid & 0xFF; | ||
86 | - librasDataBytes[1] = (messagelength >> 8) & 0xFF; | ||
87 | - librasDataBytes[2] = messagelength & 0xFF; | ||
88 | - librasDataBytes[3] = timecontrolflag & 0x01; | ||
89 | - //Ajeitar pra quando tiver STM | ||
90 | - librasDataBytes[4] = (sinaislooplength >> 8) & 0xFF; | ||
91 | - librasDataBytes[5] = sinaislooplength & 0xFF; | ||
92 | - librasDataBytes[6] = glosadatalength & 0xFF; | ||
93 | - | ||
94 | - memcpy(librasDataBytes + 7, glosaDataBytes, glosadatalength); | ||
95 | - | ||
96 | - return librasDataBytes; | ||
97 | - } | ||
98 | -} |
codificador/src/librassection.cpp
@@ -1,138 +0,0 @@ | @@ -1,138 +0,0 @@ | ||
1 | -#include <stdio.h> | ||
2 | -#include <stdlib.h> | ||
3 | -#include <string.h> | ||
4 | - | ||
5 | -#include "librassection.h" | ||
6 | -#include "crc32.h" | ||
7 | - | ||
8 | -namespace Codificador{ | ||
9 | - | ||
10 | - LibrasSection::LibrasSection(LibrasControlSection *libr, unsigned int type, unsigned char version){ | ||
11 | - | ||
12 | - tableid = 145; | ||
13 | - section_syntax_indicator = 1; | ||
14 | - | ||
15 | - if( type == 0 ) | ||
16 | - table_id_extension = 0x0001; | ||
17 | - if( type == 1) | ||
18 | - table_id_extension = 0x0002; | ||
19 | - | ||
20 | - version_number = version; | ||
21 | - current_next_indicator = 1; | ||
22 | - section_number = 0; | ||
23 | - last_section_number = 0; | ||
24 | - | ||
25 | - libras_section_length = 9; | ||
26 | - | ||
27 | - libras = libr; | ||
28 | - } | ||
29 | - | ||
30 | - LibrasSection::~LibrasSection(){ | ||
31 | - | ||
32 | - } | ||
33 | - | ||
34 | - unsigned char LibrasSection::getSectionSyntaxIndicator(){ | ||
35 | - return section_syntax_indicator; | ||
36 | - } | ||
37 | - | ||
38 | - unsigned short LibrasSection::getLibrasSectionLength(){ | ||
39 | - return libras_section_length; | ||
40 | - } | ||
41 | - | ||
42 | - unsigned char LibrasSection::getTableIdExtension(){ | ||
43 | - return table_id_extension; | ||
44 | - } | ||
45 | - | ||
46 | - unsigned char LibrasSection::getVersionNumber(){ | ||
47 | - return version_number; | ||
48 | - } | ||
49 | - | ||
50 | - unsigned char LibrasSection::getCurrentNextIndicator(){ | ||
51 | - return current_next_indicator; | ||
52 | - } | ||
53 | - | ||
54 | - unsigned char LibrasSection::getSectionNumber(){ | ||
55 | - return section_number; | ||
56 | - } | ||
57 | - | ||
58 | - unsigned char LibrasSection::getLastSectionNumber(){ | ||
59 | - return last_section_number; | ||
60 | - } | ||
61 | - | ||
62 | - unsigned int LibrasSection::getCrc32(){ | ||
63 | - return crc32; | ||
64 | - } | ||
65 | - | ||
66 | - LibrasControlSection *LibrasSection::getLibras(){ | ||
67 | - return libras; | ||
68 | - } | ||
69 | - | ||
70 | - void LibrasSection::setSectionSyntaxIndicator(unsigned char section_syntax_indicator){ | ||
71 | - this->section_syntax_indicator = section_syntax_indicator; | ||
72 | - } | ||
73 | - | ||
74 | - void LibrasSection::setLibrasSectionLength(unsigned short libras_section_length){ | ||
75 | - this->libras_section_length = libras_section_length; | ||
76 | - } | ||
77 | - | ||
78 | - void LibrasSection::setTableIdExtension(unsigned short table_id_extension){ | ||
79 | - this->table_id_extension = table_id_extension; | ||
80 | - } | ||
81 | - | ||
82 | - void LibrasSection::setVersionNumber(unsigned char version_number){ | ||
83 | - this->version_number = version_number; | ||
84 | - } | ||
85 | - | ||
86 | - void LibrasSection::setCurrentNextIndicator(unsigned char current_next_indicator){ | ||
87 | - this->current_next_indicator = current_next_indicator; | ||
88 | - } | ||
89 | - | ||
90 | - void LibrasSection::setSectionNumber(unsigned char section_number){ | ||
91 | - this->section_number = section_number; | ||
92 | - } | ||
93 | - | ||
94 | - void LibrasSection::setLastSectionNumber(unsigned char last_section_number){ | ||
95 | - this->last_section_number = last_section_number; | ||
96 | - } | ||
97 | - | ||
98 | - void LibrasSection::setLibras(LibrasControlSection *libras){ | ||
99 | - this->libras = libras; | ||
100 | - } | ||
101 | - | ||
102 | - unsigned char *LibrasSection::generateBytes(unsigned short *librLen){ | ||
103 | - int offset = 0; | ||
104 | - unsigned short librasLen; | ||
105 | - unsigned char *librSecBytes; | ||
106 | - unsigned char *librasBytes = libras->generateBytes(&librasLen); | ||
107 | - | ||
108 | - *librLen = librasLen + libras_section_length + 3; | ||
109 | - libras_section_length += librasLen; | ||
110 | - | ||
111 | - librSecBytes = new unsigned char[*librLen]; | ||
112 | - | ||
113 | - librSecBytes[0] = tableid & 0xFF; | ||
114 | - librSecBytes[1] = (section_syntax_indicator << 7) & 0x80; | ||
115 | - librSecBytes[1] = (libras_section_length >> 8) & 0x0F; | ||
116 | - librSecBytes[2] = libras_section_length & 0xFF; | ||
117 | - librSecBytes[3] = (table_id_extension >> 8) & 0xFF; | ||
118 | - librSecBytes[4] = table_id_extension & 0xFF; | ||
119 | - librSecBytes[5] = (version_number << 5) & 0x3E; | ||
120 | - librSecBytes[5] = current_next_indicator & 0x01; | ||
121 | - librSecBytes[6] = section_number & 0xFF; | ||
122 | - librSecBytes[7] = last_section_number & 0xFF; | ||
123 | - | ||
124 | - memcpy(librSecBytes + 8, librasBytes, librasLen); | ||
125 | - | ||
126 | - crc32 = calculate_CRC_32(librSecBytes, *librLen - 4); | ||
127 | - offset = 8 + librasLen; | ||
128 | - | ||
129 | - librSecBytes[offset + 0]= (crc32 >> 24) & 0xFF; | ||
130 | - librSecBytes[offset + 1]= (crc32 >> 16) & 0xFF; | ||
131 | - librSecBytes[offset + 2]= (crc32 >> 8) & 0xFF; | ||
132 | - librSecBytes[offset + 3]= crc32 & 0xFF; | ||
133 | - | ||
134 | - delete []librasBytes; | ||
135 | - return librSecBytes; | ||
136 | - } | ||
137 | -} | ||
138 | - |
codificador/src/recebeglosa.cpp
@@ -1,102 +0,0 @@ | @@ -1,102 +0,0 @@ | ||
1 | -/* | ||
2 | - * File: RecebeGlosa.cpp | ||
3 | - * Author: felipe | ||
4 | - * | ||
5 | - * Created on 2 de Fevereiro de 2010, 09:43 | ||
6 | - */ | ||
7 | - | ||
8 | -#include "recebeglosa.h" | ||
9 | -#include "librasdatamessage.h" | ||
10 | -#include "dprintf.h" | ||
11 | -#include <iostream> | ||
12 | - | ||
13 | -#include <stdlib.h> | ||
14 | -#include <stdio.h> | ||
15 | -#include <tspacket.h> | ||
16 | - | ||
17 | -namespace Codificador { | ||
18 | - | ||
19 | - RecebeGlosa::RecebeGlosa(int pd, string rl, int vs, int dh, int dv, int dw, int df, int portOut, string ip) { | ||
20 | - codificadorManager = CodificadorManager::getInstance(); | ||
21 | - codificadorManager->setPid(pd); | ||
22 | - codificadorManager->setResolution(rl); | ||
23 | - codificadorManager->setDictionaryVersion(vs); | ||
24 | - codificadorManager->setDPH(dh); | ||
25 | - codificadorManager->setDPV(dv); | ||
26 | - codificadorManager->setDFW(dw); | ||
27 | - codificadorManager->setDFH(df); | ||
28 | - codificadorManager->setPortaOut(portOut); | ||
29 | - codificadorManager->setIp(ip); | ||
30 | - // Inicia o mutex | ||
31 | - mutex = (pthread_mutex_t *) malloc( sizeof(pthread_mutex_t) ); | ||
32 | - pthread_mutex_init(mutex, NULL); | ||
33 | - } | ||
34 | - | ||
35 | - RecebeGlosa::~RecebeGlosa() { | ||
36 | - if (mutex) { | ||
37 | - int ret = pthread_mutex_destroy(mutex); | ||
38 | - if (ret) | ||
39 | - DDDPRINTF("erro destruindo mutex\n"); | ||
40 | - free(mutex); | ||
41 | - } | ||
42 | - } | ||
43 | - | ||
44 | - void RecebeGlosa::codifica(vector<string> * glosas) { | ||
45 | - // Mutex para evitar bug multiplas chamadas dos notificadores | ||
46 | - pthread_mutex_lock(mutex); | ||
47 | - unsigned char *nullpackets = new unsigned char [188]; | ||
48 | - | ||
49 | - vector<string>::iterator it; | ||
50 | - unsigned char *data; | ||
51 | - string valor; | ||
52 | - int tamanho, numPackets, contNullPackets = 0; | ||
53 | - //FILE *arq; | ||
54 | - | ||
55 | - unsigned char *pes; | ||
56 | - | ||
57 | - //arq = fopen ("../libras.ts" , "a"); | ||
58 | - | ||
59 | - printf("\nGlosa recebida para codificacao: "); | ||
60 | - printf("\033[31m"); | ||
61 | - for (it = glosas->begin(); it < glosas->end(); it++) { | ||
62 | - cout << *it << " "; | ||
63 | - } | ||
64 | - printf("\033[0m"); | ||
65 | - printf("\n"); | ||
66 | - | ||
67 | - for (it = glosas->begin(); it < glosas->end(); it++) { | ||
68 | - valor = *it; | ||
69 | - //Gambiarra | ||
70 | - //if(gambis == 0) { | ||
71 | - //valor.insert(0, "dl"); | ||
72 | - //gambis++; | ||
73 | - //} | ||
74 | - tamanho = valor.size(); | ||
75 | - data = (unsigned char*) valor.c_str(); | ||
76 | - //cout << "Glosa: " << data << endl; | ||
77 | - | ||
78 | - if ((tamanho>2) && data[0] == 'd' && data[1] == 'l') { | ||
79 | - for(int i = 2; i < tamanho; i++) { | ||
80 | - pes = codificadorManager->generateSection(LibrasDataMessage::LIBRAS_DATA_TYPE,(unsigned char*) &data[i], 1, &numPackets); | ||
81 | - codificadorManager->sendToOutput(pes, numPackets); | ||
82 | - //fwrite(pes , 1 , 188 , arq ); | ||
83 | - } | ||
84 | - | ||
85 | - } else { | ||
86 | - pes = codificadorManager->generateSection(LibrasDataMessage::LIBRAS_DATA_TYPE, data, tamanho, &numPackets); | ||
87 | - codificadorManager->sendToOutput(pes, numPackets); | ||
88 | - //fwrite(pes , 1 , 188 , arq ); | ||
89 | - } | ||
90 | - } | ||
91 | - //printf("\nGerando Libras Data Message\n"); | ||
92 | - //create_ts_null_packet(nullpackets); | ||
93 | - | ||
94 | - //while(contNullPackets < 30000) { | ||
95 | - //contNullPackets++; | ||
96 | - //fwrite(nullpackets , 1 , 188 , arq ); | ||
97 | - //} | ||
98 | - | ||
99 | - //fclose(arq); | ||
100 | - pthread_mutex_unlock(mutex); | ||
101 | - } | ||
102 | -} | ||
103 | \ No newline at end of file | 0 | \ No newline at end of file |
demux/src/bitutil_hal.cpp
@@ -1,71 +0,0 @@ | @@ -1,71 +0,0 @@ | ||
1 | -#include "bitutil_hal.h" | ||
2 | - | ||
3 | - | ||
4 | - const U8 bitMask[8] = { 0x80, 0x40, 0x20, 0x10, | ||
5 | - 0x08, 0x04, 0x02, 0x01 }; | ||
6 | - | ||
7 | - U8 getByteAt(unsigned char * bitStream, | ||
8 | - int byteIndex) | ||
9 | - { | ||
10 | - return bitStream[byteIndex]; | ||
11 | - | ||
12 | - } | ||
13 | - | ||
14 | - BOOL getBitAt(unsigned char * bitStream, int bitIndex) | ||
15 | - { | ||
16 | - int byteIndex = bitIndex / 8; | ||
17 | - int bitOffset = bitIndex % 8; | ||
18 | - | ||
19 | - if ((bitStream[byteIndex] & bitMask[bitOffset]) != 0) | ||
20 | - return TRUE; | ||
21 | - else | ||
22 | - return FALSE; | ||
23 | - } | ||
24 | - | ||
25 | - U32 getIntAt(unsigned char * bitStream,int intIndex) | ||
26 | - { | ||
27 | - U32 * bitStream2 = (U32 *) bitStream; | ||
28 | - return bitStream2[intIndex]; | ||
29 | - | ||
30 | - } | ||
31 | - | ||
32 | - U8 getByteAtBits(unsigned char * bitStream,int firstBitOffset, int length) | ||
33 | - { | ||
34 | - U8 byte = 0x00; | ||
35 | - int lastBitOffset = firstBitOffset + length - 1; | ||
36 | - | ||
37 | - int i, bit; | ||
38 | - for (bit = lastBitOffset, i = 7; | ||
39 | - bit >= firstBitOffset; | ||
40 | - bit--, i--){ | ||
41 | - int byteIndex = bit / 8; | ||
42 | - int bitOffset = bit % 8; | ||
43 | - if ((bitStream[byteIndex] & bitMask[bitOffset]) != 0){ | ||
44 | - byte = byte | bitMask[i]; | ||
45 | - } | ||
46 | - } | ||
47 | - | ||
48 | - return byte; | ||
49 | - } | ||
50 | - U32 getIntAtBits(unsigned char * bitStream,int firstBitOffset, int length) | ||
51 | - { | ||
52 | - U32 integer = 0x00000000; | ||
53 | - U8 * byte = (U8 *) &integer; | ||
54 | - int lastBitOffset = firstBitOffset + length - 1; | ||
55 | - | ||
56 | - int i, bit; | ||
57 | - for (bit = lastBitOffset, i = 31; | ||
58 | - bit >= firstBitOffset; | ||
59 | - bit--, i--){ | ||
60 | - int byteIndex = bit / 8; | ||
61 | - int bitOffset = bit % 8; | ||
62 | - if ((bitStream[byteIndex] & bitMask[bitOffset]) != 0){ | ||
63 | - int byteIndex2 = 3 - (i / 8); | ||
64 | - int bitOffset2 = i % 8; | ||
65 | - byte[byteIndex2] = byte[byteIndex2] | bitMask[bitOffset2]; | ||
66 | - } | ||
67 | - } | ||
68 | - | ||
69 | - return integer; | ||
70 | - } | ||
71 | - |
demux/src/demux.cpp
@@ -1,256 +0,0 @@ | @@ -1,256 +0,0 @@ | ||
1 | -/* | ||
2 | - * Demux.cpp | ||
3 | - * | ||
4 | - * Created on: 09/10/2008 | ||
5 | - * Author: lacet | ||
6 | - */ | ||
7 | - | ||
8 | -#include "filter.h" | ||
9 | -#include "packet.h" | ||
10 | -#include "section_hal.h" | ||
11 | - | ||
12 | -#include <stdio.h> | ||
13 | -#include <string.h> | ||
14 | - | ||
15 | -#include "demux.h" | ||
16 | -#include "demuxListener.h" | ||
17 | -#include "jmutex.h" | ||
18 | -#include "util.h" | ||
19 | -#define OK (0) | ||
20 | - | ||
21 | -//debug | ||
22 | -#define DEBUG 0 | ||
23 | -#define DEBUG_ARQ 0 | ||
24 | - | ||
25 | -FILE *file = NULL; | ||
26 | - | ||
27 | -Packet* myPacket = NULL; | ||
28 | - | ||
29 | -Mutex* mutex = new Mutex(); | ||
30 | - | ||
31 | -Demux::Demux(int pid) { | ||
32 | - //mutex->Lock(); | ||
33 | - //filters = new vector<Filter*> (); | ||
34 | - filter = new Filter(pid, 0, 0); | ||
35 | - //printf("\nFiltro Setado\n"); | ||
36 | - mySectionBuffer = new SectionBuffer(); | ||
37 | - mySectionBuffer->initSectionsBuffer(); | ||
38 | - sectionSize = -1; | ||
39 | - sectionRead = 0; | ||
40 | - countPacotes = 0; | ||
41 | - continuityCounter = 0; | ||
42 | - lastContinuityCounter = 0; | ||
43 | - flagShiftPointerField = 1; | ||
44 | - //setDemuxListener(); | ||
45 | - //mutex->Unlock(); | ||
46 | -} | ||
47 | - | ||
48 | -Demux::Demux(int pid, DemuxListener* listener) { | ||
49 | - //mutex->Lock(); | ||
50 | - //filters = new vector<Filter*> (); | ||
51 | - filter = new Filter(pid, 0, 0); | ||
52 | - //printf("\nFiltro Setado\n"); | ||
53 | - mySectionBuffer = new SectionBuffer(); | ||
54 | - mySectionBuffer->initSectionsBuffer(); | ||
55 | - sectionSize = -1; | ||
56 | - sectionRead = 0; | ||
57 | - countPacotes = 0; | ||
58 | - continuityCounter = 0; | ||
59 | - lastContinuityCounter = 0; | ||
60 | - setDemuxListener(listener); | ||
61 | - //mutex->Unlock(); | ||
62 | - ouvintes = new list<OuvinteDemux*>(); | ||
63 | - | ||
64 | - // Inicia o mutex | ||
65 | - mutex = (pthread_mutex_t *) malloc(sizeof (pthread_mutex_t)); | ||
66 | - pthread_mutex_init(mutex, NULL); | ||
67 | -} | ||
68 | - | ||
69 | -void Demux::setDemuxListener(DemuxListener* listener) { | ||
70 | - this->listener = listener; | ||
71 | -} | ||
72 | - | ||
73 | -void Demux::chegouInput(unsigned char *pacote) { | ||
74 | - // Mutex para evitar bug multiplas chamadas dos notificadores | ||
75 | - pthread_mutex_lock(mutex); | ||
76 | - Packet *mypack = new Packet(pacote); | ||
77 | - getNextSection(pacote, mypack); | ||
78 | - | ||
79 | - pthread_mutex_unlock(mutex); | ||
80 | - | ||
81 | -} | ||
82 | - | ||
83 | -Demux::~Demux() { | ||
84 | - | ||
85 | - delete filter; | ||
86 | - delete mySectionBuffer; | ||
87 | - | ||
88 | - if (ouvintes) { | ||
89 | - // nao deleta os ouvintes mesmo, apenas a lista | ||
90 | - ouvintes->clear(); | ||
91 | - delete ouvintes; | ||
92 | - } | ||
93 | - | ||
94 | - if (mutex) { | ||
95 | - int ret = pthread_mutex_destroy(mutex); | ||
96 | - if (ret) | ||
97 | - printf("erro destruindo mutex\n"); | ||
98 | - free(mutex); | ||
99 | - } | ||
100 | - | ||
101 | - | ||
102 | -} | ||
103 | - | ||
104 | -Filter* Demux::getFilter() { | ||
105 | - return filter; | ||
106 | -} | ||
107 | - | ||
108 | -int getPESSize(unsigned char* pacote) { | ||
109 | - return getIntAtBits(pacote, 32, 16) + 6; | ||
110 | -} | ||
111 | -int start = 0; | ||
112 | -//int countPacotes = 0; | ||
113 | - | ||
114 | -int Demux::getNextSection(unsigned char* packet, Packet *myPacket) { | ||
115 | - //countPacotes++; | ||
116 | - //unsigned char* packet = new unsigned char[PACKET_SIZE]; // TODO desalocar | ||
117 | - unsigned char *payloadData; | ||
118 | - static utils::Util util; | ||
119 | - int packetControl = OK; | ||
120 | - //Filter* filter; | ||
121 | - //int packetControl; | ||
122 | - int count1, count2; | ||
123 | - count1 = count2 = 0; | ||
124 | - //printf("\nPacket Notified - PID: %d\nSection Read: %d\n", myPacket->getPid(), sectionRead); | ||
125 | - //this->flagShiftPointerField = 1; | ||
126 | - | ||
127 | - if (myPacket && filter) { | ||
128 | - | ||
129 | - if (packetControl == OK) { | ||
130 | - | ||
131 | - if (myPacket->getPid() != filter->getFilterPid()) { | ||
132 | - //printf("\nRefused Packet - PID: %d\n", myPacket->getPid()); | ||
133 | - //invalid pid | ||
134 | - | ||
135 | - return 0; | ||
136 | - } else if (myPacket->getPayloadLength() < 1) { | ||
137 | - //printf("\nEmpty Payload\n"); | ||
138 | - return 0; | ||
139 | - //empty payload | ||
140 | - } else { | ||
141 | - //cout << "Accepted Packet - PID: " << myPacket->getPid() << endl; | ||
142 | - continuityCounter = myPacket->getContinuityCounter(); | ||
143 | - //printf("\nContinuity Counter: %d\n", continuityCounter); | ||
144 | - | ||
145 | - if (start == 0) { | ||
146 | - start = 1; | ||
147 | - } else { | ||
148 | - if (lastContinuityCounter == 15) { | ||
149 | - if (continuityCounter != 0) { | ||
150 | - //cout << "ERRO DE CONTINUIDADE!!" << endl; | ||
151 | - //cout << "PID: " << myPacket->getPid() << endl; | ||
152 | - //cout << "CC: " << continuityCounter << endl; | ||
153 | - //cout << "LCC: " << lastContinuityCounter << endl; | ||
154 | - lastContinuityCounter = continuityCounter; | ||
155 | - sectionRead = 0; | ||
156 | - sectionSize = -1; | ||
157 | - return OK; | ||
158 | - | ||
159 | - } | ||
160 | - } else if (continuityCounter != (lastContinuityCounter + 1)) { | ||
161 | - //cout << "ERRO DE CONTINUIDADE!" << endl; | ||
162 | - //cout << "PID: " << myPacket->getPid() << endl; | ||
163 | - //cout << "CC: " << continuityCounter << endl; | ||
164 | - //cout << "LCC: " << lastContinuityCounter << endl; | ||
165 | - | ||
166 | - lastContinuityCounter = continuityCounter; | ||
167 | - sectionRead = 0; | ||
168 | - sectionSize = -1; | ||
169 | - return OK; | ||
170 | - } | ||
171 | - } | ||
172 | - } | ||
173 | - lastContinuityCounter = continuityCounter; | ||
174 | - | ||
175 | - } | ||
176 | - } else { | ||
177 | - //printf("\nInvalid Packet\n"); | ||
178 | - return 0; | ||
179 | - //invalid packet | ||
180 | - } | ||
181 | - | ||
182 | - payloadData = myPacket->getPayloadCopy(); | ||
183 | - payloadSize = myPacket->getPayloadLength(); | ||
184 | - // TODO validate continuity_counter | ||
185 | - if (myPacket->hasAdaptationField()) { | ||
186 | - int tamanho = packet[4]; | ||
187 | - payloadData = (unsigned char *) myPacket->getPayloadBeginingAtUnitStarted(); | ||
188 | - payloadSize = myPacket->getPayloadBeginingAtUnitStartedLength(); | ||
189 | - if (payloadData[0] == 0x00 && payloadData[1] == 0x00 && payloadData[2] == 0x01) { | ||
190 | - //cout << "Pegou Payload Correto" << endl; | ||
191 | - } else { | ||
192 | - cout << "Pegou Payload Errado" << endl; | ||
193 | - } | ||
194 | - | ||
195 | - } else { | ||
196 | - | ||
197 | - } | ||
198 | - | ||
199 | - if (sectionRead == 0) { | ||
200 | - | ||
201 | - sectionSize = getPESSize(payloadData); | ||
202 | - | ||
203 | - if (sectionSize > payloadSize) { | ||
204 | - memcpy(sectionData, payloadData, payloadSize); | ||
205 | - sectionRead += payloadSize; | ||
206 | - } else { | ||
207 | - memcpy(sectionData, payloadData, sectionSize); | ||
208 | - sectionRead += sectionSize; | ||
209 | - } | ||
210 | - | ||
211 | - if (sectionData[0] == 0x00 && sectionData[1] == 0x00 && sectionData[2] == 0x01) { | ||
212 | - //cout << "Pacote PES OK!" << endl; | ||
213 | - } else { | ||
214 | - sectionRead = 0; | ||
215 | - sectionSize = -1; | ||
216 | - cout << "Pacote PES ERRADO!" << endl; | ||
217 | - } | ||
218 | - | ||
219 | - } else { | ||
220 | - | ||
221 | - if ((sectionSize - sectionRead) > payloadSize) { | ||
222 | - memcpy(sectionData + sectionRead, payloadData, payloadSize); | ||
223 | - sectionRead += payloadSize; | ||
224 | - } else { | ||
225 | - memcpy(sectionData + sectionRead, payloadData, (sectionSize - sectionRead)); | ||
226 | - sectionRead += (sectionSize - sectionRead); | ||
227 | - } | ||
228 | - | ||
229 | - } | ||
230 | - | ||
231 | - if (sectionRead == sectionSize) { | ||
232 | - sectionSize = getPESSize(sectionData); | ||
233 | - //cout << "PES NOTIFIED - PES Size: " << sectionSize << endl; | ||
234 | - listener->notifySection(myPacket->getPid(), sectionData, sectionSize); | ||
235 | - sectionRead = 0; | ||
236 | - sectionSize = -1; | ||
237 | - | ||
238 | - } | ||
239 | - | ||
240 | - delete myPacket; | ||
241 | - return OK; | ||
242 | -} | ||
243 | - | ||
244 | -void Demux::registraOuvinte(OuvinteDemux * ouvinte) { | ||
245 | - ouvintes->push_back(ouvinte); | ||
246 | -} | ||
247 | - | ||
248 | -void Demux::removeOuvinte(OuvinteDemux * ouvinte) { | ||
249 | - ouvintes->remove(ouvinte); | ||
250 | -} | ||
251 | - | ||
252 | -void Demux::notificaOuvintes(unsigned char * sec) { | ||
253 | - for (list<OuvinteDemux*>::iterator i = ouvintes->begin(); i != ouvintes->end(); i++) { | ||
254 | - (*i)->chegou(sec); | ||
255 | - } | ||
256 | -} |
demux/src/demuxListener.cpp
demux/src/filter.cpp
@@ -1,147 +0,0 @@ | @@ -1,147 +0,0 @@ | ||
1 | -/* | ||
2 | - * Filter.cpp | ||
3 | - * | ||
4 | - * Created on: 08/10/2008 | ||
5 | - * Author: lacet | ||
6 | - */ | ||
7 | - | ||
8 | -#include "filter.h" | ||
9 | -#include "packet.h" | ||
10 | -#include "section_hal.h" | ||
11 | - | ||
12 | -#include <stdio.h> | ||
13 | -#include <string.h> | ||
14 | -#include "util.h" | ||
15 | - | ||
16 | -int sectionSizee; | ||
17 | - | ||
18 | -Filter::Filter(int FilterPID, int FilterTID, int FilterTIDx) { | ||
19 | - // TODO Auto-generated constructor stub | ||
20 | - this->setFilterPid(FilterPID); | ||
21 | - this->setFilterTid(FilterTID); | ||
22 | - this->setFilterTidx(FilterTIDx); | ||
23 | - this->setLastSectionCRC(0); | ||
24 | - this->setCrcErrorCount(0); | ||
25 | -} | ||
26 | - | ||
27 | -Filter::Filter() { | ||
28 | - | ||
29 | -} | ||
30 | - | ||
31 | -Filter::~Filter() { | ||
32 | - // TODO Auto-generated destructor stub | ||
33 | -} | ||
34 | - | ||
35 | -int Filter::isValid(unsigned char *section, Packet* myPacket, DemuxListener* listener) { | ||
36 | - static utils::Util util; | ||
37 | - | ||
38 | - if (getFilterTidx() == -1) { | ||
39 | - //printf("->2\n"); | ||
40 | - if (section[0] == this->getFilterTid()) { | ||
41 | - //printf("->3\n"); | ||
42 | - if (checkCRC32(section)) { | ||
43 | - if (getSectionCRC(section) != this->getLastSectionCRC()) { | ||
44 | - this->setLastSectionCRC(getSectionCRC(section)); | ||
45 | - return 1; | ||
46 | - } else { | ||
47 | - //Old Version Of Section | ||
48 | - /*analisadorSI*/listener->notifyOldSection(myPacket->getPid(), getTid( | ||
49 | - section), getTidX(section)); | ||
50 | - if (getTid(section) == 80) { | ||
51 | - int a = util.getBits(section, 0, 48, 8); | ||
52 | - if (a == 48) { | ||
53 | - //printf("\nOld Section\n"); | ||
54 | - } | ||
55 | - } | ||
56 | - return 0; | ||
57 | - } | ||
58 | - } else { | ||
59 | - //return 0; | ||
60 | - this->setCrcErrorCount(this->getCrcErrorCount() + 1); | ||
61 | - cout << "\nERRO DE CRC no PID " << myPacket->getPid() << endl; | ||
62 | - | ||
63 | - sectionSizee = getSectionSize(section); | ||
64 | - | ||
65 | - listener->notifyErroCRC(this->getCrcErrorCount(), | ||
66 | - myPacket->getPid(), getTid(section), getTidX(section), | ||
67 | - section, sectionSizee); | ||
68 | - | ||
69 | - //return 1; | ||
70 | - return 0; | ||
71 | - } | ||
72 | - | ||
73 | - } else { | ||
74 | - | ||
75 | - return 0; | ||
76 | - } | ||
77 | - } else { | ||
78 | - | ||
79 | - if ((section[0] == this->getFilterTid()) && (getIntAtBits(section, 24, | ||
80 | - 16) == this->getFilterTidx())) { | ||
81 | - if (checkCRC32(section)) { | ||
82 | - if (getSectionCRC(section) != this->getLastSectionCRC()) { | ||
83 | - this->setLastSectionCRC(getSectionCRC(section)); | ||
84 | - return 1; | ||
85 | - } else { | ||
86 | - //Old Version Of Section | ||
87 | - /*analisadorSI*/listener->notifyOldSection(myPacket->getPid(), getTid( | ||
88 | - section), getTidX(section)); | ||
89 | - return 0; | ||
90 | - } | ||
91 | - } else { | ||
92 | - this->setCrcErrorCount(this->getCrcErrorCount() + 1); | ||
93 | - sectionSizee = getSectionSize(section); | ||
94 | - /*analisadorSI*/listener->notifyErroCRC(this->getCrcErrorCount(), | ||
95 | - myPacket->getPid(), getTid(section), getTidX(section), | ||
96 | - section, sectionSizee); | ||
97 | - cout << "\nERRO DE CRC no PID " << myPacket->getPid() << endl; | ||
98 | - | ||
99 | - return 0; | ||
100 | - } | ||
101 | - } else { | ||
102 | - //printf("->6"); | ||
103 | - return 0; | ||
104 | - } | ||
105 | - } | ||
106 | -} | ||
107 | - | ||
108 | -void Filter::setLastSectionCRC(int lastSectionCRC) { | ||
109 | - this->lastSectionCRC = lastSectionCRC; | ||
110 | -} | ||
111 | - | ||
112 | -void Filter::setFilterPid(int FilterPID) { | ||
113 | - this->FilterPID = FilterPID; | ||
114 | -} | ||
115 | - | ||
116 | -void Filter::setFilterTid(int FilterTID) { | ||
117 | - this->FilterTID = FilterTID; | ||
118 | -} | ||
119 | - | ||
120 | -void Filter::setFilterTidx(int FilterTIDx) { | ||
121 | - this->FilterTIDx = FilterTIDx; | ||
122 | -} | ||
123 | - | ||
124 | -void Filter::setCrcErrorCount(int crcErrorCount) { | ||
125 | - this->crcErrorCount = crcErrorCount; | ||
126 | -} | ||
127 | - | ||
128 | -int Filter::getCrcErrorCount() { | ||
129 | - return crcErrorCount; | ||
130 | -} | ||
131 | - | ||
132 | -int Filter::getLastSectionCRC() { | ||
133 | - return lastSectionCRC; | ||
134 | -} | ||
135 | - | ||
136 | -int Filter::getFilterPid() { | ||
137 | - return FilterPID; | ||
138 | -} | ||
139 | - | ||
140 | -int Filter::getFilterTid() { | ||
141 | - return FilterTID; | ||
142 | -} | ||
143 | - | ||
144 | -int Filter::getFilterTidx() { | ||
145 | - return FilterTIDx; | ||
146 | -} | ||
147 | - |
demux/src/include/bitutil_hal.h
@@ -1,20 +0,0 @@ | @@ -1,20 +0,0 @@ | ||
1 | -#ifndef BITUTIL_H_ | ||
2 | -#define BITUTIL_H_ | ||
3 | -//#include "global_init.h" | ||
4 | - | ||
5 | -typedef unsigned char U8; | ||
6 | -typedef unsigned short U16; | ||
7 | -typedef unsigned int U32; | ||
8 | -typedef unsigned char BOOL; | ||
9 | - | ||
10 | -#define TRUE (1) | ||
11 | -#define FALSE (0) | ||
12 | - | ||
13 | -U8 getByteAt(unsigned char * bitStream,int byteIndex); | ||
14 | -BOOL getBitAt(unsigned char * bitStream, int bitIndex); | ||
15 | -U32 getIntAt(unsigned char * bitStream,int intIndex); | ||
16 | -U8 getByteAtBits(unsigned char * bitStream,int firstBitOffset, int length); | ||
17 | -U32 getIntAtBits(unsigned char * bitStream,int firstBitOffset, int length); | ||
18 | - | ||
19 | - | ||
20 | -#endif /*BITUTIL_H_*/ |
demux/src/include/demux.h
@@ -1,70 +0,0 @@ | @@ -1,70 +0,0 @@ | ||
1 | -/* | ||
2 | - * demux.h | ||
3 | - * | ||
4 | - * Created on: 09/10/2008 | ||
5 | - * Author: lacet | ||
6 | - */ | ||
7 | - | ||
8 | -#ifndef DEMUX_H_ | ||
9 | -#define DEMUX_H_ | ||
10 | - | ||
11 | -#include "filter.h" | ||
12 | -#include <vector> | ||
13 | -#include "jthread.h" | ||
14 | -#include <pthread.h> | ||
15 | -#include "demuxListener.h" | ||
16 | -#include "ouvinteDemux.h" | ||
17 | -#include "ouvinteInput.h" | ||
18 | - | ||
19 | - | ||
20 | -using namespace std; | ||
21 | - | ||
22 | -using namespace jthread; | ||
23 | - | ||
24 | -class Demux : public OuvinteInput { | ||
25 | - | ||
26 | -private: | ||
27 | - | ||
28 | - vector<Filter*> *permanentFilters; | ||
29 | - //vector<Filter*> *filters; | ||
30 | - //Filter* *filters; | ||
31 | - //Filter* filter; | ||
32 | - vector<Filter*> *addedFilter; | ||
33 | - vector<Filter*> *filtersAux; | ||
34 | - SectionBuffer* mySectionBuffer; | ||
35 | - DemuxListener* listener; | ||
36 | - int sectionSize; | ||
37 | - | ||
38 | - int sectionRead; | ||
39 | - unsigned char section[MAX_SECTION_SIZE]; | ||
40 | - int payloadSize; | ||
41 | - int firstPart; | ||
42 | - int quantity; | ||
43 | - int remain; | ||
44 | - int countPacotes; | ||
45 | - unsigned char sectionData[MAX_SECTION_SIZE]; | ||
46 | - int continuityCounter; | ||
47 | - int lastContinuityCounter; | ||
48 | - int flagShiftPointerField; | ||
49 | - | ||
50 | - std::list<OuvinteDemux*> * ouvintes; | ||
51 | - pthread_mutex_t *mutex; | ||
52 | - | ||
53 | -public: | ||
54 | - //void setDemuxListener(); | ||
55 | - void setDemuxListener(DemuxListener* listener); | ||
56 | - Filter* filter; | ||
57 | - ~Demux(); | ||
58 | - Demux(int pid); | ||
59 | - Demux(int pid, DemuxListener* listener); | ||
60 | - Filter* getFilter(); | ||
61 | - int getNextSection(unsigned char* packet, Packet *myPacket); | ||
62 | - | ||
63 | - virtual void chegouInput(unsigned char *pacote); | ||
64 | - void registraOuvinte(OuvinteDemux * ouvinte); | ||
65 | - void removeOuvinte(OuvinteDemux * ouvinte); | ||
66 | - void notificaOuvintes(unsigned char * CC); | ||
67 | - | ||
68 | -}; | ||
69 | - | ||
70 | -#endif /* DEMUX_H_ */ |
demux/src/include/demuxListener.h
@@ -1,34 +0,0 @@ | @@ -1,34 +0,0 @@ | ||
1 | -/* | ||
2 | - * demuxListener.h | ||
3 | - * | ||
4 | - * Created on: 03/10/2008 | ||
5 | - * Author: thales | ||
6 | - */ | ||
7 | - | ||
8 | -#ifndef DEMUXLISTENER_H_ | ||
9 | -#define DEMUXLISTENER_H_ | ||
10 | - | ||
11 | - | ||
12 | -#include <vector> | ||
13 | -#include <list> | ||
14 | -#include <iostream> | ||
15 | - | ||
16 | -using namespace std; | ||
17 | - | ||
18 | -class DemuxListener{ | ||
19 | -public: | ||
20 | - DemuxListener(); | ||
21 | - ~DemuxListener(); | ||
22 | - virtual void notifySection(int PID, unsigned char* section, int sectionSize) = 0; | ||
23 | - | ||
24 | - virtual void notifyErroCRC(int numErroCRC, int PID, int tableID, int tableIDX, unsigned char* section, | ||
25 | - int sectionSize) = 0; | ||
26 | - | ||
27 | - virtual void notifyOldSection(int PID, int tableID, int tableIDX) = 0; | ||
28 | - | ||
29 | - // virtual ~DemuxListener() = 0; | ||
30 | - | ||
31 | -}; | ||
32 | - | ||
33 | - | ||
34 | -#endif /* IANALISADORSI_H_ */ |
demux/src/include/filter.h
@@ -1,48 +0,0 @@ | @@ -1,48 +0,0 @@ | ||
1 | -/* | ||
2 | - * filter.h | ||
3 | - * | ||
4 | - * Created on: 08/10/2008 | ||
5 | - * Author: lacet | ||
6 | - */ | ||
7 | - | ||
8 | -#ifndef FILTER_H_ | ||
9 | -#define FILTER_H_ | ||
10 | - | ||
11 | -#include "sectionBuffer.h" | ||
12 | -#include "bitutil_hal.h" | ||
13 | -#include "demuxListener.h" | ||
14 | -#include "packet.h" | ||
15 | - | ||
16 | - | ||
17 | - | ||
18 | -class Filter { | ||
19 | - | ||
20 | -private: | ||
21 | - int FilterPID; | ||
22 | - int FilterTID; | ||
23 | - int FilterTIDx; | ||
24 | - int lastSectionCRC; | ||
25 | - int crcErrorCount; | ||
26 | - | ||
27 | -public: | ||
28 | - Filter(int FilterPID, int FilterTID, int FilterTIDx); | ||
29 | - Filter(); | ||
30 | - virtual ~Filter(); | ||
31 | - int isValid(unsigned char *section, Packet* myPacket, DemuxListener* listener); | ||
32 | - //int getNextPacket(unsigned char *packet); | ||
33 | - //int getNextSection(unsigned char *section, SectionBuffer *mySectionBuffer); | ||
34 | - //int test(); | ||
35 | - void setLastSectionCRC(int lastSectionCRC); | ||
36 | - void setFilterPid(int FilterPID); | ||
37 | - void setFilterTid(int FilterTID); | ||
38 | - void setFilterTidx(int FilterTIDx); | ||
39 | - void setCrcErrorCount(int crcErrorCount); | ||
40 | - int getLastSectionCRC(); | ||
41 | - int getFilterPid(); | ||
42 | - int getFilterTid(); | ||
43 | - int getFilterTidx(); | ||
44 | - int getCrcErrorCount(); | ||
45 | - | ||
46 | -}; | ||
47 | - | ||
48 | -#endif /* FILTER_H_ */ |
demux/src/include/ouvinteDemux.h
@@ -1,26 +0,0 @@ | @@ -1,26 +0,0 @@ | ||
1 | -/* | ||
2 | - * File: ouvintedemux.h | ||
3 | - * Author: felipel | ||
4 | - * | ||
5 | - * Created on 12 de Julho de 2010, 15:03 | ||
6 | - */ | ||
7 | - | ||
8 | -#ifndef OUVINTEDEMUX_H | ||
9 | -#define OUVINTEDEMUX_H | ||
10 | - | ||
11 | -#include <string> | ||
12 | - | ||
13 | -using namespace std; | ||
14 | - | ||
15 | -class OuvinteDemux { | ||
16 | -public: | ||
17 | - OuvinteDemux(); | ||
18 | - virtual ~OuvinteDemux(); | ||
19 | - | ||
20 | - virtual void chegou(unsigned char * section) = 0; | ||
21 | -private: | ||
22 | - | ||
23 | -}; | ||
24 | - | ||
25 | -#endif /* OUVINTEDEMUX_H */ | ||
26 | - |
demux/src/include/packet.h
@@ -1,41 +0,0 @@ | @@ -1,41 +0,0 @@ | ||
1 | -/* Modificado por: @Felipe Lacet | ||
2 | - * Ultima Atualização: 08/10/2008 | ||
3 | - * | ||
4 | - * packet.h | ||
5 | - * | ||
6 | - */ | ||
7 | - | ||
8 | -#ifndef PACKET_H_ | ||
9 | -#define PACKET_H_ | ||
10 | -//#include "global_init.h" | ||
11 | -#include "bitutil_hal.h" | ||
12 | -#define PACKET_SIZE (188) | ||
13 | - | ||
14 | - | ||
15 | - | ||
16 | -class Packet{ | ||
17 | - | ||
18 | -public: | ||
19 | - | ||
20 | -Packet(unsigned char* packet); | ||
21 | -~Packet(); | ||
22 | -unsigned char* getPayloadBeginingAtUnitStarted(); | ||
23 | -BOOL hasPointerField(); | ||
24 | -BOOL hasPayload(); | ||
25 | -U8 getPayloadLength(); | ||
26 | -unsigned char * getPayloadCopy(); | ||
27 | -U8 getPayloadBeginingAtUnitStartedLength(); | ||
28 | -U8 getPointerField(); | ||
29 | -U16 getPid(); | ||
30 | -U8 getAdaptationFieldLength(); | ||
31 | -U32 getContinuityCounter(); | ||
32 | -BOOL hasAdaptationField(); | ||
33 | -BOOL parser(); | ||
34 | - | ||
35 | -private: | ||
36 | - | ||
37 | -unsigned char* packet; | ||
38 | - | ||
39 | -}; | ||
40 | - | ||
41 | -#endif /*PACKET_H_*/ |
demux/src/include/sectionBuffer.h
@@ -1,34 +0,0 @@ | @@ -1,34 +0,0 @@ | ||
1 | -/* Modificado por: @Felipe Lacet | ||
2 | - * Ultima Atualização: 08/10/2008 | ||
3 | - * | ||
4 | - * sectionBuffer.h | ||
5 | - * | ||
6 | - */ | ||
7 | -#ifndef QUEUE_H_ | ||
8 | -#define QUEUE_H_ | ||
9 | -#include "section_hal.h" | ||
10 | - | ||
11 | -#define MAX_SECTIONS_COUNT (20) | ||
12 | - | ||
13 | -#define SECTIONS_BUFFER_SIZE (MAX_SECTIONS_COUNT*MAX_SECTION_SIZE) | ||
14 | - | ||
15 | -class SectionBuffer{ | ||
16 | - | ||
17 | -private: | ||
18 | - unsigned char sectionsBufferData[SECTIONS_BUFFER_SIZE]; | ||
19 | - int sectionsBufferBegin; | ||
20 | - int sectionsBufferEnd; | ||
21 | - int bufferSectionsCount; | ||
22 | - | ||
23 | -public: | ||
24 | - SectionBuffer(); | ||
25 | - ~SectionBuffer(); | ||
26 | - void copyData(unsigned char *data, int *position, int size, int fromBuffer); | ||
27 | - void initSectionsBuffer(); | ||
28 | - int getSectionsCount(); | ||
29 | - void addSection(unsigned char *section); | ||
30 | - void removeSection(unsigned char *section); | ||
31 | - | ||
32 | -}; | ||
33 | - | ||
34 | -#endif //QUEUE_H_ |
demux/src/include/section_hal.h
@@ -1,22 +0,0 @@ | @@ -1,22 +0,0 @@ | ||
1 | -#ifndef SECTION_H_ | ||
2 | -#define SECTION_H_ | ||
3 | -#include "bitutil_hal.h" | ||
4 | -#include <stdio.h> | ||
5 | - | ||
6 | -#define SECTION_HEADER_SIZE (6) | ||
7 | - | ||
8 | -#define MAX_SECTION_SIZE (4096) | ||
9 | - | ||
10 | - | ||
11 | -U8 getTid(unsigned char* section); | ||
12 | -U16 getTidX(unsigned char* section); | ||
13 | -int getSectionSize(unsigned char* payload); | ||
14 | -U8 getSectionNumber(unsigned char *bitStream); | ||
15 | -U32 getSectionCRC(unsigned char* section); | ||
16 | -BOOL checkCRC32(unsigned char* section); | ||
17 | -U32 calculateCrc(unsigned char *begin, unsigned count); | ||
18 | - | ||
19 | - | ||
20 | - | ||
21 | - | ||
22 | -#endif /*SECTION_H_*/ |
demux/src/include/util.h
@@ -1,37 +0,0 @@ | @@ -1,37 +0,0 @@ | ||
1 | -#ifndef UTIL_H_ | ||
2 | -#define UTIL_H_ | ||
3 | - | ||
4 | -#include <string> | ||
5 | -#include <sstream> | ||
6 | -#include <stdlib.h> | ||
7 | -#include <stdio.h> | ||
8 | -#include <algorithm> | ||
9 | - | ||
10 | -using std::string; | ||
11 | - | ||
12 | -namespace utils | ||
13 | -{ | ||
14 | - | ||
15 | -class Util | ||
16 | -{ | ||
17 | -public: | ||
18 | - | ||
19 | - /* | ||
20 | - retorna os bits do buffer. | ||
21 | - */ | ||
22 | - static unsigned long long getBits(unsigned char* buf, int byte_offset, int startbit, int bitlen); | ||
23 | - | ||
24 | - static void stringUpper(string& string); | ||
25 | - | ||
26 | - static string int2str(int n); | ||
27 | - | ||
28 | - static int stringtoint(const char* string); | ||
29 | - | ||
30 | - static long long getBits48(unsigned char *buf, int byte_offset, int startbit, int bitlen); | ||
31 | - | ||
32 | - static unsigned long long getBits64(unsigned char *buf, int byte_offset, int startbit, int bitlen); | ||
33 | -}; | ||
34 | - | ||
35 | -} | ||
36 | - | ||
37 | -#endif /*UTIL_H_*/ |
demux/src/ouvinteDemux.cpp
demux/src/packet.cpp
@@ -1,129 +0,0 @@ | @@ -1,129 +0,0 @@ | ||
1 | -/* Modificado por: @Felipe Lacet | ||
2 | - * Ultima Atualização: 08/10/2008 | ||
3 | - * | ||
4 | - * Packet.cpp | ||
5 | - * | ||
6 | - */ | ||
7 | -#include "bitutil_hal.h" | ||
8 | -#include "packet.h" | ||
9 | -//#include "dprintf.h" | ||
10 | -#include <iostream> | ||
11 | -int TS_PACKET_SIZE = 188; | ||
12 | - | ||
13 | -//static int payloadIndex; | ||
14 | -using namespace std; | ||
15 | - | ||
16 | -Packet::Packet(unsigned char* packet) { | ||
17 | - | ||
18 | - this->packet = packet; | ||
19 | - | ||
20 | -} | ||
21 | - | ||
22 | -Packet::~Packet() { | ||
23 | -}; | ||
24 | - | ||
25 | -unsigned char* Packet::getPayloadBeginingAtUnitStarted() { | ||
26 | - | ||
27 | - int payloadIndex = 4 + (hasAdaptationField() ? 1 : 0) + getAdaptationFieldLength(); | ||
28 | - return (&packet[payloadIndex]); | ||
29 | - | ||
30 | -} | ||
31 | - | ||
32 | -BOOL Packet::hasPointerField() { | ||
33 | - return ( getBitAt(packet, 9)); | ||
34 | -} | ||
35 | - | ||
36 | -BOOL Packet::hasPayload() { | ||
37 | - unsigned int adaptationFieldControl = getByteAtBits(packet, 26, 2); | ||
38 | - | ||
39 | - if ((adaptationFieldControl == 0x1) || (adaptationFieldControl == 0x3)) { | ||
40 | - return (1); | ||
41 | - } else { | ||
42 | - return (0); | ||
43 | - } | ||
44 | -} | ||
45 | - | ||
46 | -U8 Packet::getPayloadLength() { | ||
47 | - if (!hasPayload()) { | ||
48 | - return (0); | ||
49 | - } else { | ||
50 | - return (TS_PACKET_SIZE - (hasAdaptationField() ? 1 : 0) - getAdaptationFieldLength() - 4); | ||
51 | - } | ||
52 | -} | ||
53 | - | ||
54 | -unsigned char* Packet::getPayloadCopy() { | ||
55 | - int payloadIndex = 4 + (hasAdaptationField() ? 1 : 0) + getAdaptationFieldLength(); | ||
56 | - | ||
57 | - if (hasPayload()) { | ||
58 | - int size = getPayloadLength(); | ||
59 | - | ||
60 | - /*unsigned char * payload =(unsigned char *) malloc(sizeof(unsigned char)*size);*/ | ||
61 | - return (&packet[payloadIndex]); | ||
62 | - | ||
63 | - /*memcpy(payload, &packet[payloadIndex], size);*/ | ||
64 | - /*return payload;*/ | ||
65 | - /*return &packet[payloadIndex];*/ | ||
66 | - } else { | ||
67 | - return (NULL); | ||
68 | - } | ||
69 | -} | ||
70 | - | ||
71 | -U8 Packet::getPayloadBeginingAtUnitStartedLength() { | ||
72 | - int payloadIndex = 4 + (hasAdaptationField() ? 1 : 0) + getAdaptationFieldLength(); | ||
73 | - return TS_PACKET_SIZE - payloadIndex - 1; | ||
74 | -} | ||
75 | - | ||
76 | -U8 Packet::getPointerField() { | ||
77 | - int payloadIndex = 4 + (hasAdaptationField() ? 1 : 0) + getAdaptationFieldLength(); | ||
78 | - | ||
79 | - if (hasPointerField()) { | ||
80 | - unsigned char pf = getByteAt(packet, payloadIndex); | ||
81 | - //cout << "Poiter Field: " << pf << endl; | ||
82 | - //printf("Poiter Field: %x\n", pf); | ||
83 | - return ( getByteAt(packet, payloadIndex)); | ||
84 | - } else { | ||
85 | - return (0); | ||
86 | - } | ||
87 | -} | ||
88 | - | ||
89 | -U16 Packet::getPid() { | ||
90 | - return ( getIntAtBits(packet, 11, 13)); | ||
91 | -} | ||
92 | - | ||
93 | -U8 Packet::getAdaptationFieldLength() { | ||
94 | - if (hasAdaptationField()) { | ||
95 | - return ( getByteAt(packet, 4)); | ||
96 | - } else { | ||
97 | - return (0); | ||
98 | - } | ||
99 | -} | ||
100 | - | ||
101 | -unsigned int Packet::getContinuityCounter() { | ||
102 | - return ( getIntAtBits(packet, 28, 4)); | ||
103 | -} | ||
104 | - | ||
105 | -BOOL Packet::hasAdaptationField() { | ||
106 | - unsigned int adaptationFieldControl = getByteAtBits(packet, 26, 2); | ||
107 | - | ||
108 | - if ((adaptationFieldControl == 0x2) || (adaptationFieldControl == 0x3)) { | ||
109 | - return TRUE; | ||
110 | - } else { | ||
111 | - return FALSE; | ||
112 | - } | ||
113 | -} | ||
114 | - | ||
115 | -BOOL Packet::parser() { | ||
116 | - // DPRINTF("PACOTE %X\n",packet[0]); | ||
117 | - if (getByteAt(packet, 0) != 0x47) { | ||
118 | - // DPRINTF("NAO PACOTE"); | ||
119 | - return FALSE; | ||
120 | - } | ||
121 | - | ||
122 | - if (getBitAt(packet, 8)) { | ||
123 | - // DPRINTF("NAO PACOTE 2"); | ||
124 | - | ||
125 | - return FALSE; | ||
126 | - } | ||
127 | - // payloadIndex = 4 + (hasAdaptationField(packet) ? 1 : 0) + getAdaptationFieldLength(packet); | ||
128 | - return TRUE; | ||
129 | -} |
demux/src/sectionBuffer.cpp
@@ -1,123 +0,0 @@ | @@ -1,123 +0,0 @@ | ||
1 | -/* Modificado por: @Felipe Lacet | ||
2 | - * Ultima Atualização: 08/10/2008 | ||
3 | - * | ||
4 | - * SectionBuffer.cpp | ||
5 | - * | ||
6 | - */ | ||
7 | - | ||
8 | -//#include "queue.h" | ||
9 | -#include <string.h> | ||
10 | -#include <stdio.h> | ||
11 | -//#include "dprintf.h" | ||
12 | -#include "section_hal.h" | ||
13 | -#include "sectionBuffer.h" | ||
14 | - | ||
15 | -SectionBuffer::SectionBuffer() { | ||
16 | - initSectionsBuffer(); | ||
17 | -} | ||
18 | - | ||
19 | -SectionBuffer::~SectionBuffer() { | ||
20 | -} | ||
21 | - | ||
22 | -void SectionBuffer::copyData(unsigned char *data, int *position, int size, int fromBuffer) { | ||
23 | - unsigned char *source, *target; | ||
24 | - int rightSpace; | ||
25 | - | ||
26 | - rightSpace = SECTIONS_BUFFER_SIZE - *position; | ||
27 | - if (fromBuffer) { | ||
28 | - source = sectionsBufferData + *position; | ||
29 | - target = data; | ||
30 | - } else { | ||
31 | - source = data; | ||
32 | - target = sectionsBufferData + *position; | ||
33 | - } | ||
34 | - | ||
35 | - if (size > rightSpace) { | ||
36 | - memcpy(target, source, rightSpace); | ||
37 | - if (fromBuffer) { | ||
38 | - target = data + rightSpace; | ||
39 | - source = sectionsBufferData; | ||
40 | - } else { | ||
41 | - target = sectionsBufferData; | ||
42 | - source = data + rightSpace; | ||
43 | - } | ||
44 | - memcpy(target, source, size - rightSpace); | ||
45 | - } else { | ||
46 | - memcpy(target, source, size); | ||
47 | - } | ||
48 | - | ||
49 | - *position = (*position + size) % SECTIONS_BUFFER_SIZE; | ||
50 | -} | ||
51 | - | ||
52 | -void SectionBuffer::initSectionsBuffer() { | ||
53 | - sectionsBufferBegin = 0; | ||
54 | - sectionsBufferEnd = 0; | ||
55 | - bufferSectionsCount = 0; | ||
56 | - memset(sectionsBufferData, 0, SECTIONS_BUFFER_SIZE); | ||
57 | -} | ||
58 | - | ||
59 | -//int getSectionsCount(demux_section_t *demux_section) | ||
60 | - | ||
61 | -int SectionBuffer::getSectionsCount() { | ||
62 | - return bufferSectionsCount; | ||
63 | -} | ||
64 | - | ||
65 | -void SectionBuffer::addSection(unsigned char *section) { | ||
66 | - copyData(section, §ionsBufferEnd, getSectionSize(section), 0); | ||
67 | - bufferSectionsCount++; | ||
68 | -} | ||
69 | - | ||
70 | -void SectionBuffer::removeSection(unsigned char *section) { | ||
71 | - // copy section header | ||
72 | - copyData(section, §ionsBufferBegin, SECTION_HEADER_SIZE, 1); | ||
73 | - // copy section body | ||
74 | - copyData(section + SECTION_HEADER_SIZE, §ionsBufferBegin, getSectionSize(section) - SECTION_HEADER_SIZE, 1); | ||
75 | - // update sections counter | ||
76 | - bufferSectionsCount--; | ||
77 | -} | ||
78 | - | ||
79 | -/* | ||
80 | - | ||
81 | -// tests | ||
82 | - | ||
83 | -int main() { | ||
84 | - int i, j, k; | ||
85 | - unsigned char section[5][8] = { | ||
86 | - { 99, 0, 2, 99, 99, 99, 99, 99 }, | ||
87 | - { 88, 0, 5, 88, 88, 88, 88, 88 }, | ||
88 | - { 77, 0, 1, 77, 77, 77, 77, 77 }, | ||
89 | - { 66, 0, 3, 66, 66, 66, 66, 66 }, | ||
90 | - { 55, 0, 1, 55, 55, 55, 55, 55 } | ||
91 | - }; | ||
92 | - | ||
93 | - initSectionsBuffer(); | ||
94 | - DPRINTF("---------------\n"); | ||
95 | - | ||
96 | - for (i = 0, k = 0; i < 10; i++) { | ||
97 | - DDPRINTF("i = %d\n", i); | ||
98 | - if (i % 2 == 1) { | ||
99 | - unsigned char removed[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; | ||
100 | - DDPRINTF("will REMOVE section:"); | ||
101 | - removeSection(removed); | ||
102 | - for (j = 0; j < getSectionSize(removed); j++) { | ||
103 | - printf("%3d", removed[j]); | ||
104 | - } | ||
105 | - printf("\n"); | ||
106 | - } else { | ||
107 | - DDPRINTF("will ADD section %d with %d bytes\n", k, getSectionSize(section[k])); | ||
108 | - addSection(section[k++]); | ||
109 | - } | ||
110 | - DPRINTF("data:"); | ||
111 | - for (j = 0; j < SECTIONS_BUFFER_SIZE; j++) { | ||
112 | - printf("%3d", demux_section->sectionsBufferData[j]); | ||
113 | - } | ||
114 | - printf("\n"); | ||
115 | - DPRINTF(" "); | ||
116 | - for (j = 0; j < SECTIONS_BUFFER_SIZE; j++) { | ||
117 | - printf(demux_section->sectionsBufferBegin == j ? (demux_section->sectionsBufferEnd == j ? " be" : " b") : (demux_section->sectionsBufferEnd == j ? " e" : " ")); | ||
118 | - } | ||
119 | - printf("\n"); | ||
120 | - DPRINTF("sections count = %d\n", demux_section->bufferSectionsCount); | ||
121 | - DPRINTF("---------------\n"); | ||
122 | - } | ||
123 | -}*/ |
demux/src/section_hal.cpp
@@ -1,132 +0,0 @@ | @@ -1,132 +0,0 @@ | ||
1 | -#include "section_hal.h" | ||
2 | - | ||
3 | -int crcError; | ||
4 | -#include <iostream> | ||
5 | -using namespace std; | ||
6 | - | ||
7 | - | ||
8 | -U32 CRC32[256] = { | ||
9 | - 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, | ||
10 | - 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, | ||
11 | - 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, | ||
12 | - 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, | ||
13 | - 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, | ||
14 | - 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, | ||
15 | - 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, | ||
16 | - 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, | ||
17 | - 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, | ||
18 | - 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, | ||
19 | - 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, | ||
20 | - 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, | ||
21 | - 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, | ||
22 | - 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, | ||
23 | - 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, | ||
24 | - 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, | ||
25 | - 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, | ||
26 | - 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, | ||
27 | - 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, | ||
28 | - 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, | ||
29 | - 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, | ||
30 | - 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, | ||
31 | - 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, | ||
32 | - 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, | ||
33 | - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, | ||
34 | - 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, | ||
35 | - 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, | ||
36 | - 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, | ||
37 | - 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, | ||
38 | - 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, | ||
39 | - 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, | ||
40 | - 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, | ||
41 | - 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, | ||
42 | - 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, | ||
43 | - 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, | ||
44 | - 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, | ||
45 | - 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, | ||
46 | - 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, | ||
47 | - 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, | ||
48 | - 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, | ||
49 | - 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, | ||
50 | - 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, | ||
51 | - 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, | ||
52 | - 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, | ||
53 | - 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, | ||
54 | - 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, | ||
55 | - 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, | ||
56 | - 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, | ||
57 | - 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, | ||
58 | - 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, | ||
59 | - 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, | ||
60 | - 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, | ||
61 | - 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, | ||
62 | - 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, | ||
63 | - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, | ||
64 | - 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, | ||
65 | - 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, | ||
66 | - 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, | ||
67 | - 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, | ||
68 | - 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, | ||
69 | - 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, | ||
70 | - 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, | ||
71 | - 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, | ||
72 | - 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4, | ||
73 | -}; | ||
74 | - | ||
75 | -U8 getTid(unsigned char* section) { | ||
76 | - return getByteAt(section, 0); | ||
77 | -} | ||
78 | - | ||
79 | -U16 getTidX(unsigned char* section) { | ||
80 | - return getIntAtBits(section, 24, 16); | ||
81 | -} | ||
82 | - | ||
83 | -int getSectionSize(unsigned char* payload) { | ||
84 | - | ||
85 | - return getIntAtBits(payload, 12, 12) + 3; | ||
86 | - | ||
87 | -} | ||
88 | - | ||
89 | -U8 getSectionNumber(unsigned char *bitStream) { | ||
90 | - return getIntAtBits(bitStream, 48, 8); | ||
91 | -} | ||
92 | - | ||
93 | -U32 getSectionCRC(unsigned char* section) { | ||
94 | - U32 sectionCRC = getIntAtBits(section, (getSectionSize(section)*8) - 32, 32); | ||
95 | - return sectionCRC; | ||
96 | -} | ||
97 | - | ||
98 | -BOOL checkCRC32(unsigned char* section) { | ||
99 | - //if (!getBitAt(section, 8)) { | ||
100 | - // printf("\nCRC ERROR - YES\n"); | ||
101 | - // return FALSE; | ||
102 | - //} | ||
103 | - U32 aux; | ||
104 | - int i; | ||
105 | - | ||
106 | - U32 sectionCRC32 = getIntAtBits(section, (getSectionSize(section)*8) - 32, 32); | ||
107 | - | ||
108 | - aux = calculateCrc(section, (getSectionSize(section) - 4)); | ||
109 | - | ||
110 | - if (aux == sectionCRC32) { | ||
111 | - //printf("\nCRC Calculado: %x\nCRC Lido:%x\n", aux, sectionCRC32); | ||
112 | - | ||
113 | - return TRUE; | ||
114 | - | ||
115 | - } | ||
116 | - printf("\nCRC Calculado: %x\nCRC Lido:%x\n", aux, sectionCRC32); | ||
117 | - return FALSE; | ||
118 | -} | ||
119 | - | ||
120 | -U32 calculateCrc(unsigned char *begin, unsigned count) { | ||
121 | - unsigned crc = 0xffffffff; | ||
122 | - | ||
123 | - while (count > 0) { | ||
124 | - crc = (crc << 8) ^ CRC32[(crc >> 24) ^ ((unsigned) * begin)]; | ||
125 | - begin++; | ||
126 | - count--; | ||
127 | - } | ||
128 | - | ||
129 | - return crc; | ||
130 | -} | ||
131 | - | ||
132 | - |
demux/src/util.cpp
@@ -1,135 +0,0 @@ | @@ -1,135 +0,0 @@ | ||
1 | -#include "util.h" | ||
2 | - | ||
3 | -namespace utils { | ||
4 | - | ||
5 | - void Util::stringUpper(string& string) { | ||
6 | - transform(string.begin(), string.end(), string.begin(), toupper); | ||
7 | - } | ||
8 | - | ||
9 | - string Util::int2str(int n) { | ||
10 | - std::stringstream ss; | ||
11 | - | ||
12 | - ss << n; | ||
13 | - return ss.str(); | ||
14 | - } | ||
15 | - | ||
16 | - int Util::stringtoint(const char* string) { | ||
17 | - return atoi(string); | ||
18 | - } | ||
19 | - | ||
20 | - /* | ||
21 | - -- get bits out of buffer (max 32 bit!!!) | ||
22 | - -- return: value | ||
23 | - */ | ||
24 | - | ||
25 | - unsigned long long Util::getBits(unsigned char* buf, int byte_offset, int startbit, int bitlen) { | ||
26 | - unsigned char *b; | ||
27 | - unsigned long v; | ||
28 | - unsigned long mask; | ||
29 | - unsigned long tmp_long; | ||
30 | - int bitHigh; | ||
31 | - | ||
32 | - | ||
33 | - b = &buf[byte_offset + (startbit >> 3)]; | ||
34 | - startbit %= 8; | ||
35 | - | ||
36 | - switch ((bitlen - 1) >> 3) { | ||
37 | - case -1 : // -- <=0 bits: always 0 | ||
38 | - return 0L; | ||
39 | - break; | ||
40 | - | ||
41 | - case 0: // -- 1..8 bit | ||
42 | - tmp_long = (unsigned long) ( | ||
43 | - (*(b) << 8) + *(b + 1)); | ||
44 | - bitHigh = 16; | ||
45 | - break; | ||
46 | - | ||
47 | - case 1: // -- 9..16 bit | ||
48 | - tmp_long = (unsigned long) ( | ||
49 | - (*(b) << 16) + (*(b + 1) << 8) + *(b + 2)); | ||
50 | - bitHigh = 24; | ||
51 | - break; | ||
52 | - | ||
53 | - case 2: // -- 17..24 bit | ||
54 | - tmp_long = (unsigned long) ( | ||
55 | - (*(b) << 24) + (*(b + 1) << 16) + | ||
56 | - (*(b + 2) << 8) + *(b + 3)); | ||
57 | - bitHigh = 32; | ||
58 | - break; | ||
59 | - | ||
60 | - case 3: // -- 25..32 bit | ||
61 | - // -- to be safe, we need 32+8 bit as shift range | ||
62 | - return (unsigned long) Util::getBits48(b, 0, startbit, bitlen); | ||
63 | - break; | ||
64 | - | ||
65 | - default: // -- 33.. bits: fail, deliver constant fail value | ||
66 | - //printf("\nGET BITS: OUT OF BOUNDS\n"); | ||
67 | - return getBits48(buf, byte_offset, startbit, bitlen); | ||
68 | - break; | ||
69 | - } | ||
70 | - | ||
71 | - startbit = bitHigh - startbit - bitlen; | ||
72 | - tmp_long = tmp_long >> startbit; | ||
73 | - mask = (1ULL << bitlen) - 1; // 1ULL !!! | ||
74 | - v = tmp_long & mask; | ||
75 | - | ||
76 | - return v; | ||
77 | - } | ||
78 | - | ||
79 | - /* | ||
80 | - -- get bits out of buffer (max 48 bit) | ||
81 | - -- extended bitrange, so it's slower | ||
82 | - -- return: value | ||
83 | - */ | ||
84 | - | ||
85 | - long long Util::getBits48(unsigned char *buf, int byte_offset, int startbit, int bitlen) { | ||
86 | - unsigned char *b; | ||
87 | - unsigned long long v; | ||
88 | - unsigned long long mask; | ||
89 | - unsigned long long tmp; | ||
90 | - | ||
91 | - if (bitlen > 48) { | ||
92 | - printf("\ngetBits48() OUT OF BOUNDS\n"); | ||
93 | - return getBits64(buf, byte_offset, startbit, bitlen); | ||
94 | - } | ||
95 | - | ||
96 | - | ||
97 | - b = &buf[byte_offset + (startbit / 8)]; | ||
98 | - startbit %= 8; | ||
99 | - | ||
100 | - | ||
101 | - // -- safe is 48 bitlen | ||
102 | - tmp = (unsigned long long) ( | ||
103 | - ((unsigned long long) *(b) << 48) + ((unsigned long long) *(b + 1) << 40) + | ||
104 | - ((unsigned long long) *(b + 2) << 32) + ((unsigned long long) *(b + 3) << 24) + | ||
105 | - (*(b + 4) << 16) + (*(b + 5) << 8) + *(b + 6)); | ||
106 | - | ||
107 | - startbit = 56 - startbit - bitlen; | ||
108 | - tmp = tmp >> startbit; | ||
109 | - mask = (1ULL << bitlen) - 1; // 1ULL !!! | ||
110 | - v = tmp & mask; | ||
111 | - | ||
112 | - return v; | ||
113 | - } | ||
114 | - | ||
115 | - /* | ||
116 | - -- get bits out of buffer (max 64 bit) | ||
117 | - -- extended bitrange, so it's slower | ||
118 | - -- return: value | ||
119 | - */ | ||
120 | - | ||
121 | - unsigned long long Util::getBits64(unsigned char *buf, int byte_offset, int startbit, int bitlen) { | ||
122 | - unsigned long long x1, x2, x3; | ||
123 | - | ||
124 | - if (bitlen <= 32) { | ||
125 | - x3 = Util::getBits(buf, byte_offset, startbit, bitlen); | ||
126 | - } else { | ||
127 | - x1 = Util::getBits(buf, byte_offset, startbit, 32); | ||
128 | - x2 = Util::getBits(buf, byte_offset, startbit + 32, bitlen - 32); | ||
129 | - x3 = (x1 << (bitlen - 32)) + x2; | ||
130 | - } | ||
131 | - return x3; | ||
132 | - } | ||
133 | - | ||
134 | -} | ||
135 | - |
extratorCC/src/extratorCC.cpp
@@ -1,487 +0,0 @@ | @@ -1,487 +0,0 @@ | ||
1 | -/* | ||
2 | - * File: PacketPES.cpp | ||
3 | - * Author: felipe | ||
4 | - * | ||
5 | - * Created on 19 de Outubro de 2009, 14:49 | ||
6 | - */ | ||
7 | - | ||
8 | -#include "extratorCC.h" | ||
9 | -#include <cstdlib> | ||
10 | -#include <stdint.h> | ||
11 | -#include <stdio.h> | ||
12 | -#include <fstream> | ||
13 | -#include <sstream> | ||
14 | - | ||
15 | -#include "dprintf.h" | ||
16 | - | ||
17 | -using namespace std; | ||
18 | - | ||
19 | -ExtratorCC::ExtratorCC() { | ||
20 | - ouvintes = new list<OuvinteCC*>(); | ||
21 | - | ||
22 | - PTS = 0; | ||
23 | - | ||
24 | - // Inicia o mutex | ||
25 | - mutex = (pthread_mutex_t *) malloc(sizeof (pthread_mutex_t)); | ||
26 | - pthread_mutex_init(mutex, NULL); | ||
27 | -} | ||
28 | - | ||
29 | -void ExtratorCC::notifySection(int PID, unsigned char* section, int sectionSize) { | ||
30 | - //cout << "Recebi PES com a PID: " << PID << endl; | ||
31 | - packetPES(section); | ||
32 | - | ||
33 | -} | ||
34 | - | ||
35 | -void ExtratorCC::notifyErroCRC(int numErroCRC, int PID, int tableID, int tableIDX, unsigned char* section, int sectionSize) { | ||
36 | - | ||
37 | -} | ||
38 | - | ||
39 | -void ExtratorCC::notifyOldSection(int PID, int tableID, int tableIDX) { | ||
40 | - | ||
41 | -} | ||
42 | - | ||
43 | -ExtratorCC::~ExtratorCC() { | ||
44 | - if (ouvintes) { | ||
45 | - // nao deleta os ouvintes mesmo, apenas a lista | ||
46 | - ouvintes->clear(); | ||
47 | - delete ouvintes; | ||
48 | - } | ||
49 | - | ||
50 | - if (mutex) { | ||
51 | - int ret = pthread_mutex_destroy(mutex); | ||
52 | - if (ret) | ||
53 | - DDDPRINTF("erro destruindo mutex\n"); | ||
54 | - free(mutex); | ||
55 | - } | ||
56 | -} | ||
57 | - | ||
58 | -/*void ExtratorCC::chegouInput(unsigned char *pacote) { | ||
59 | - // Mutex para evitar bug multiplas chamadas dos notificadores | ||
60 | - pthread_mutex_lock(mutex); | ||
61 | - | ||
62 | - //packetPES(pacote); | ||
63 | - | ||
64 | - pthread_mutex_unlock(mutex); | ||
65 | -}*/ | ||
66 | - | ||
67 | - | ||
68 | -int ExtratorCC::contemAF(unsigned char * pacote) { | ||
69 | - return pacote[3] & 0x20; | ||
70 | -} | ||
71 | - | ||
72 | -int ExtratorCC::contemDTS(unsigned char * ExtratorCC) { | ||
73 | - return ((ExtratorCC[7] >> 6) & 0x03); | ||
74 | -} | ||
75 | - | ||
76 | -int ExtratorCC::contemESCR(unsigned char * ExtratorCC) { | ||
77 | - return ((ExtratorCC[7] >> 5) & 0x01); | ||
78 | -} | ||
79 | - | ||
80 | -int ExtratorCC::contemDSM(unsigned char * ExtratorCC) { | ||
81 | - return ((ExtratorCC[7] >> 3) & 0x01); | ||
82 | -} | ||
83 | - | ||
84 | -int ExtratorCC::contemPES_extension(unsigned char * ExtratorCC) { | ||
85 | - return ExtratorCC[7] & 0x01; | ||
86 | -} | ||
87 | - | ||
88 | -int ExtratorCC::contemAdditional(unsigned char * ExtratorCC) { | ||
89 | - return ((ExtratorCC[7] >> 2) & 0x01); | ||
90 | -} | ||
91 | - | ||
92 | -int ExtratorCC::contemPES_CRC(unsigned char * ExtratorCC) { | ||
93 | - return ((ExtratorCC[7] >> 1) & 0x01); | ||
94 | -} | ||
95 | - | ||
96 | -int ExtratorCC::contemES_rate(unsigned char * ExtratorCC) { | ||
97 | - return ((ExtratorCC[7] >> 4) & 0x01); | ||
98 | -} | ||
99 | - | ||
100 | -int ExtratorCC::contemPayloadData(unsigned char *pacote) { | ||
101 | - return pacote[3] & 0x10; | ||
102 | -} | ||
103 | - | ||
104 | -int ExtratorCC::contemPayloadStartIndicator(unsigned char *pacote) { | ||
105 | - return pacote[1] & 0x40; | ||
106 | -} | ||
107 | - | ||
108 | -int ExtratorCC::contemPCR(unsigned char * pacote) { | ||
109 | - return pacote[5] & 0x10; | ||
110 | -} | ||
111 | - | ||
112 | -int ExtratorCC::contemPTS(unsigned char * ExtratorCC) { | ||
113 | - return ((ExtratorCC[7] >> 6) & 0x02); | ||
114 | -} | ||
115 | - | ||
116 | -short unsigned ExtratorCC::GetTamanhoAF(unsigned char *pacote) { | ||
117 | - return pacote[4]; | ||
118 | -} | ||
119 | - | ||
120 | -int ExtratorCC::verificaPESStartCode(unsigned char * ExtratorCC) { | ||
121 | - // cout << "Start Code: " << ((PESPacket[0] << 16) | (PESPacket[1] << 8) | (PESPacket[2])) << endl; | ||
122 | - return (((ExtratorCC[0] << 16) | (ExtratorCC[1] << 8) | (ExtratorCC[2])) | ||
123 | - == 0x000001) ? 1 : 0; | ||
124 | -} | ||
125 | - | ||
126 | -int ExtratorCC::verificaPESStreamID(unsigned char * ExtratorCC) { | ||
127 | - int stream_id = ExtratorCC[3]; | ||
128 | - | ||
129 | - return ((stream_id != 0xBC) && (stream_id != 0xBE) && (stream_id != 0xBF) | ||
130 | - && (stream_id != 0xF0) && (stream_id != 0xF1) && (stream_id != 0xFF) | ||
131 | - && (stream_id != 0xF2) && (stream_id != 0xF8)); | ||
132 | -} | ||
133 | - | ||
134 | -int ExtratorCC::verificaPESStreamIDSynchronized(unsigned char * ExtratorCC) { | ||
135 | - int stream_id = ExtratorCC[3]; | ||
136 | - | ||
137 | - return ((stream_id == 0xBD)); | ||
138 | -} | ||
139 | - | ||
140 | -/* Extrai o PTS (Presentation Time Stamp) do pacote PES e retorna um | ||
141 | - * int64_t contendo os 33-bits extraídos */ | ||
142 | -int64_t ExtratorCC::extractPTS(unsigned char* PESPacket) { | ||
143 | - | ||
144 | - int64_t pts, c1, c2, c3 = 0; | ||
145 | - | ||
146 | - // leitura do 1º campo do PTS[32..30] | ||
147 | - c1 = ((PESPacket[9] & 0x0E) >> 1); // 0x0E = 00001110 | ||
148 | - pts = c1; | ||
149 | - | ||
150 | - // leitura do 2º campo do PTS[29..15] | ||
151 | - c2 = (((PESPacket[10] << 8) | (PESPacket[11])) >> 1); // >> 1 tira o marker_bit | ||
152 | - pts = (((pts << 16) | (c2 << 1)) >> 1); | ||
153 | - | ||
154 | - // leitura do 3º campo do PTS[14..0] | ||
155 | - c3 = (((PESPacket[12] << 8) | (PESPacket[13])) >> 1); | ||
156 | - pts = (((pts << 16) | (c3 << 1)) >> 1); | ||
157 | - | ||
158 | - return pts; | ||
159 | - | ||
160 | -} | ||
161 | - | ||
162 | -/* Extrai o DTS 33-bits (Decoding Time Stamp) do pacote PES */ | ||
163 | -int64_t ExtratorCC::extractDTS(unsigned char* PESPacket) { | ||
164 | - | ||
165 | - int64_t dts, c1, c2, c3 = 0; | ||
166 | - | ||
167 | - // leitura do 1º campo do DTS[32..30] | ||
168 | - c1 = ((PESPacket[14] & 0x0E) >> 1); // 0x0E = 00001110 | ||
169 | - dts = c1; | ||
170 | - | ||
171 | - // leitura do 2º campo do DTS[29..15] | ||
172 | - c2 = (((PESPacket[15] << 8) | (PESPacket[16])) >> 1); // >> 1 tira o marker_bit | ||
173 | - dts = (((dts << 16) | (c2 << 1)) >> 1); | ||
174 | - | ||
175 | - // leitura do 3º campo do DTS[14..0] | ||
176 | - c3 = (((PESPacket[17] << 8) | (PESPacket[18])) >> 1); | ||
177 | - dts = (((dts << 16) | (c3 << 1)) >> 1); | ||
178 | - | ||
179 | - return dts; | ||
180 | - | ||
181 | -} | ||
182 | - | ||
183 | -int ExtratorCC::packetPES(unsigned char *pacote) { | ||
184 | - int N1, N2, PES_header_data_length, PES_packet_length, cont_stuffing_byte = 0, cont_PES_packet_data_byte = 0; | ||
185 | - int pack_stuffing_length, system_header_start_code, PES_packet_data_byte; | ||
186 | - | ||
187 | - this->PTS = 0; | ||
188 | - this->DTS = 0; | ||
189 | - | ||
190 | - | ||
191 | - int inicioPESData = 0; | ||
192 | - | ||
193 | - if ((!verificaPESStartCode(pacote + inicioPESData)) || | ||
194 | - (!verificaPESStreamIDSynchronized(pacote + inicioPESData))) { | ||
195 | - | ||
196 | - return -1; | ||
197 | - } | ||
198 | - | ||
199 | - PES_packet_data_byte = inicioPESData + 9; | ||
200 | - PES_packet_length = (((pacote[inicioPESData + 4] & 0xFF) << 8) | (pacote[inicioPESData + 5] & 0xFF)); | ||
201 | - PES_header_data_length = pacote[inicioPESData + 8]; | ||
202 | - cont_PES_packet_data_byte = 3; | ||
203 | - | ||
204 | - /* PTS_DTS_flags = '10' */ | ||
205 | - if (contemPTS(pacote + inicioPESData) == 2) { | ||
206 | - PTS = extractPTS(pacote); | ||
207 | - PES_packet_data_byte += 5; | ||
208 | - cont_stuffing_byte += 5; | ||
209 | - } | ||
210 | - | ||
211 | - /* PTS_DTS_flags = '11' */ | ||
212 | - if (contemDTS(pacote + inicioPESData) == 3) { | ||
213 | - PTS = extractPTS(pacote); | ||
214 | - DTS = extractDTS(pacote); | ||
215 | - PES_packet_data_byte += 10; | ||
216 | - cont_stuffing_byte += 10; | ||
217 | - } | ||
218 | - | ||
219 | - if (contemESCR(pacote + inicioPESData) == 1) { | ||
220 | - PES_packet_data_byte += 6; | ||
221 | - cont_stuffing_byte += 6; | ||
222 | - } | ||
223 | - | ||
224 | - if (contemES_rate(pacote + inicioPESData) == 1) { | ||
225 | - PES_packet_data_byte += 3; | ||
226 | - cont_stuffing_byte += 3; | ||
227 | - } | ||
228 | - | ||
229 | - if (contemDSM(pacote + inicioPESData) == 1) { | ||
230 | - PES_packet_data_byte += 1; | ||
231 | - cont_stuffing_byte += 1; | ||
232 | - } | ||
233 | - | ||
234 | - if (contemAdditional(pacote + inicioPESData) == 1) { | ||
235 | - PES_packet_data_byte += 1; | ||
236 | - cont_stuffing_byte += 1; | ||
237 | - } | ||
238 | - | ||
239 | - if (contemPES_CRC(pacote + inicioPESData) == 1) { | ||
240 | - PES_packet_data_byte += 2; | ||
241 | - cont_stuffing_byte += 2; | ||
242 | - } | ||
243 | - | ||
244 | - if (contemPES_extension(pacote + inicioPESData) == 1) { | ||
245 | - int flag = PES_packet_data_byte; | ||
246 | - int PES_extension_field_length, PES_private_data_flag, pack_header_field_flag; | ||
247 | - int program_packet_sequence_counter_flag, PSTD_buffer_flag, PES_extension_flag_2; | ||
248 | - PES_packet_data_byte += 1; | ||
249 | - cont_stuffing_byte += 1; | ||
250 | - | ||
251 | - PES_private_data_flag = ((pacote[flag] >> 7) & 0x01); | ||
252 | - if (PES_private_data_flag == 1) { | ||
253 | - PES_packet_data_byte += 16; | ||
254 | - cont_stuffing_byte += 16; | ||
255 | - } | ||
256 | - | ||
257 | - pack_header_field_flag = ((pacote[flag] >> 6) & 0x01); | ||
258 | - if (pack_header_field_flag == 1) { | ||
259 | - PES_packet_data_byte += 14; | ||
260 | - cont_stuffing_byte += 15; | ||
261 | - pack_stuffing_length = pacote[PES_packet_data_byte] & 0x07; | ||
262 | - PES_packet_data_byte += 1; | ||
263 | - for (int i = 0; i < pack_stuffing_length; i++) { | ||
264 | - PES_packet_data_byte++; | ||
265 | - cont_stuffing_byte++; | ||
266 | - } | ||
267 | - system_header_start_code = (pacote[PES_packet_data_byte] << 24) | (pacote[PES_packet_data_byte + 1] << 16) | (pacote[PES_packet_data_byte + 2] << 8) | (pacote[PES_packet_data_byte + 3]); | ||
268 | - if (system_header_start_code == 0x000001BB) { | ||
269 | - PES_packet_data_byte += 12; | ||
270 | - cont_stuffing_byte += 12; | ||
271 | - while (pacote[PES_packet_data_byte] == 0x01) { | ||
272 | - PES_packet_data_byte += 3; | ||
273 | - cont_stuffing_byte += 3; | ||
274 | - } | ||
275 | - } | ||
276 | - } | ||
277 | - | ||
278 | - program_packet_sequence_counter_flag = ((pacote[flag] >> 5) & 0x01); | ||
279 | - if (program_packet_sequence_counter_flag == 1) { | ||
280 | - PES_packet_data_byte += 2; | ||
281 | - cont_stuffing_byte += 2; | ||
282 | - } | ||
283 | - | ||
284 | - PSTD_buffer_flag = ((pacote[flag] >> 4) & 0x01); | ||
285 | - if (PSTD_buffer_flag == 1) { | ||
286 | - PES_packet_data_byte += 2; | ||
287 | - cont_stuffing_byte += 2; | ||
288 | - } | ||
289 | - | ||
290 | - PES_extension_flag_2 = pacote[flag] & 0x01; | ||
291 | - if (PES_extension_flag_2 == 1) { | ||
292 | - PES_extension_field_length = pacote[PES_packet_data_byte] & 0x7F; | ||
293 | - PES_packet_data_byte += 1; | ||
294 | - cont_stuffing_byte += 1; | ||
295 | - for (int i = 0; i < PES_extension_field_length; i++) { | ||
296 | - PES_packet_data_byte++; | ||
297 | - cont_stuffing_byte++; | ||
298 | - } | ||
299 | - } | ||
300 | - } | ||
301 | - | ||
302 | - N1 = PES_header_data_length - cont_stuffing_byte; | ||
303 | - cont_PES_packet_data_byte += cont_stuffing_byte + N1; | ||
304 | - N2 = PES_packet_length - cont_PES_packet_data_byte; | ||
305 | - | ||
306 | - for (int i = 0; i < N1; i++) { | ||
307 | - PES_packet_data_byte++; | ||
308 | - } | ||
309 | - | ||
310 | - synchronizedPesData(PES_packet_data_byte, pacote); | ||
311 | - | ||
312 | - return 0; | ||
313 | -} | ||
314 | - | ||
315 | -void ExtratorCC::synchronizedPesData(int PES_packet_data_byte, unsigned char *pacote) { | ||
316 | - int PES_data_private_data_byte; | ||
317 | - PES_packet_data_byte += 2; | ||
318 | - PES_data_private_data_byte = pacote[PES_packet_data_byte] & 0x0F; | ||
319 | - PES_packet_data_byte += 1; | ||
320 | - | ||
321 | - for (int i = 0; i < PES_data_private_data_byte; i++) { | ||
322 | - PES_packet_data_byte++; | ||
323 | - } | ||
324 | - | ||
325 | - dataGroup(PES_packet_data_byte, pacote); | ||
326 | -} | ||
327 | - | ||
328 | -void ExtratorCC::dataGroup(int PES_packet_data_byte, unsigned char *pacote) { | ||
329 | - int data_group_id, data_group_size; | ||
330 | - | ||
331 | - data_group_id = (pacote[PES_packet_data_byte] >> 2) & 0x3F; | ||
332 | - PES_packet_data_byte += 3; | ||
333 | - data_group_size = (pacote[PES_packet_data_byte] << 8) | (pacote[PES_packet_data_byte + 1]); | ||
334 | - PES_packet_data_byte += 2; | ||
335 | - | ||
336 | - captionData(PES_packet_data_byte, pacote, data_group_id); | ||
337 | -} | ||
338 | - | ||
339 | -void ExtratorCC::captionData(int PES_packet_data_byte, unsigned char *pacote, int data_group_id) { | ||
340 | - int TDM, data_unit_loop_length; | ||
341 | - | ||
342 | - TDM = (pacote[PES_packet_data_byte] >> 6) & 0x03; | ||
343 | - PES_packet_data_byte += 1; | ||
344 | - if (TDM == 1 || TDM == 2) { | ||
345 | - PES_packet_data_byte += 5; | ||
346 | - } | ||
347 | - if (data_group_id > 0) { | ||
348 | - data_unit_loop_length = (pacote[PES_packet_data_byte] << 16) | (pacote[PES_packet_data_byte + 1] << 8) | (pacote[PES_packet_data_byte + 2]); | ||
349 | - PES_packet_data_byte += 4; | ||
350 | - | ||
351 | - dataUnit(PES_packet_data_byte, pacote); | ||
352 | - } | ||
353 | -} | ||
354 | - | ||
355 | -void ExtratorCC::dataUnit(int PES_packet_data_byte, unsigned char *pacote) { | ||
356 | - int data_unit_parameter, data_unit_size, controle_CSI_count, controle_CSI, flag; | ||
357 | - unsigned char msg[300]; // TODO ver qual eh o valor maximo que isso pode atingir | ||
358 | - int k = 0; // contador que vai percorrer msg | ||
359 | - | ||
360 | - //FILE * pFile; | ||
361 | - //stringstream st; | ||
362 | - //string resultadoo, finall; | ||
363 | - | ||
364 | - //pFile = fopen ("tempo2.txt" , "a+"); | ||
365 | - //if (pFile == NULL) perror ("Error opening file"); | ||
366 | - | ||
367 | - data_unit_parameter = pacote[PES_packet_data_byte]; | ||
368 | - PES_packet_data_byte += 1; | ||
369 | - data_unit_size = (pacote[PES_packet_data_byte] << 16) | (pacote[PES_packet_data_byte + 1] << 8) | (pacote[PES_packet_data_byte + 2]); | ||
370 | - PES_packet_data_byte += 3; | ||
371 | - | ||
372 | - // printf("\nPACOTE: "); | ||
373 | - // for (int f = 0; f < data_unit_size + 10; f++) { | ||
374 | - // printf(" %x", pacote[f + PES_packet_data_byte]); | ||
375 | - //} | ||
376 | - | ||
377 | - for (int i = 0; i < data_unit_size; i++) { | ||
378 | - | ||
379 | - if (pacote[PES_packet_data_byte + i] < 0x1C) { | ||
380 | - } else | ||
381 | - if (pacote[PES_packet_data_byte + i] == 0x1C) { | ||
382 | - i += 2; | ||
383 | - } else | ||
384 | - if (pacote[PES_packet_data_byte + i] > 0x1C && pacote[PES_packet_data_byte + i] < 0x20) { | ||
385 | - } else | ||
386 | - if (pacote[PES_packet_data_byte + i] >= 0x80 && pacote[PES_packet_data_byte + i] <= 0x8A) { | ||
387 | - } else | ||
388 | - if (pacote[PES_packet_data_byte + i] == 0x8B) { | ||
389 | - i += 1; | ||
390 | - if (pacote[PES_packet_data_byte + i] == 0x60 || pacote[PES_packet_data_byte + i] == 0x41 || | ||
391 | - pacote[PES_packet_data_byte + i] == 0x44 || pacote[PES_packet_data_byte + i] == 0x45 || | ||
392 | - pacote[PES_packet_data_byte + i] == 0x6B || pacote[PES_packet_data_byte + i] == 0x64) { | ||
393 | - } | ||
394 | - } else | ||
395 | - if (pacote[PES_packet_data_byte + i] == 0x90) { | ||
396 | - if (pacote[PES_packet_data_byte + i + 1] == 0x20) | ||
397 | - i += 2; | ||
398 | - else | ||
399 | - i += 1; | ||
400 | - } else | ||
401 | - if (pacote[PES_packet_data_byte + i] == 0x91) { | ||
402 | - i += 1; | ||
403 | - if (pacote[PES_packet_data_byte + i] == 0x40 || pacote[PES_packet_data_byte + i] == 0x47 || | ||
404 | - pacote[PES_packet_data_byte + i] == 0x4F) { | ||
405 | - } | ||
406 | - } else | ||
407 | - if (pacote[PES_packet_data_byte + i] == 0x92) { | ||
408 | - if (pacote[PES_packet_data_byte + i + 1] == 0x20) | ||
409 | - i += 2; | ||
410 | - else | ||
411 | - i += 1; | ||
412 | - } else | ||
413 | - if (pacote[PES_packet_data_byte + i] == 0x93) { | ||
414 | - i += 1; | ||
415 | - if (pacote[PES_packet_data_byte + i] == 0x40 || pacote[PES_packet_data_byte + i] == 0x41 || | ||
416 | - pacote[PES_packet_data_byte + i] == 0x42) { | ||
417 | - } | ||
418 | - } else | ||
419 | - if (pacote[PES_packet_data_byte + i] == 0x94) { | ||
420 | - i += 1; | ||
421 | - if (pacote[PES_packet_data_byte + i] == 0x40 || pacote[PES_packet_data_byte + i] == 0x44 || | ||
422 | - pacote[PES_packet_data_byte + i] == 0x45) { | ||
423 | - } | ||
424 | - } else | ||
425 | - if (pacote[PES_packet_data_byte + i] == 0x97 || pacote[PES_packet_data_byte + i] == 0x98) { | ||
426 | - i += 1; | ||
427 | - } else | ||
428 | - if (pacote[PES_packet_data_byte + i] == 0x99 || pacote[PES_packet_data_byte + i] == 0x9A) { | ||
429 | - } else | ||
430 | - if (pacote[PES_packet_data_byte + i] == 0x9B) { | ||
431 | - controle_CSI_count = 0; | ||
432 | - flag = 0; | ||
433 | - | ||
434 | - controle_CSI = PES_packet_data_byte + i; | ||
435 | - | ||
436 | - while (flag == 0) { | ||
437 | - if (pacote[controle_CSI] == 0x53 || pacote[controle_CSI] == 0x54 || pacote[controle_CSI] == 0x6E || | ||
438 | - pacote[controle_CSI] == 0x61 || pacote[controle_CSI] == 0x56 || pacote[controle_CSI] == 0x5F || | ||
439 | - pacote[controle_CSI] == 0x57 || pacote[controle_CSI] == 0x5B || pacote[controle_CSI] == 0x5C || | ||
440 | - pacote[controle_CSI] == 0x58 || pacote[controle_CSI] == 0x59 || pacote[controle_CSI] == 0x42 || | ||
441 | - pacote[controle_CSI] == 0x5D || pacote[controle_CSI] == 0x5E || pacote[controle_CSI] == 0x62 || | ||
442 | - pacote[controle_CSI] == 0x65 || pacote[controle_CSI] == 0x63 || pacote[controle_CSI] == 0x64 || | ||
443 | - pacote[controle_CSI] == 0x66 || pacote[controle_CSI] == 0x68 || pacote[controle_CSI] == 0x69 || | ||
444 | - pacote[controle_CSI] == 0x6F) { | ||
445 | - | ||
446 | - flag = 1; | ||
447 | - i += controle_CSI_count; | ||
448 | - } | ||
449 | - | ||
450 | - controle_CSI++; | ||
451 | - controle_CSI_count++; | ||
452 | - } | ||
453 | - } else { | ||
454 | - if (pacote[PES_packet_data_byte + i] < 0x20) | ||
455 | - msg[k++] = ' '; | ||
456 | - else | ||
457 | - msg[k++] = pacote[PES_packet_data_byte + i]; | ||
458 | - } | ||
459 | - } | ||
460 | - | ||
461 | - msg[k] = '\0'; | ||
462 | - printf("\n****************************************************************************************"); | ||
463 | - printf("\nMensagem extraida do CC: "); | ||
464 | - printf("\033[31m"); | ||
465 | - printf("_%s_", msg); | ||
466 | - printf("\033[0m"); | ||
467 | - printf("\n\n"); | ||
468 | - | ||
469 | - //printf("\nTEMPO DE EXTRAÇÃO: %lld\n\n", calculoFinal); | ||
470 | - printf("PTS = %lld\n", PTS); | ||
471 | - //printf("DTS = %lld\n", DTS); | ||
472 | - notificaOuvintes(msg); | ||
473 | -} | ||
474 | - | ||
475 | -void ExtratorCC::registraOuvinte(OuvinteCC * ouvinte) { | ||
476 | - ouvintes->push_back(ouvinte); | ||
477 | -} | ||
478 | - | ||
479 | -void ExtratorCC::removeOuvinte(OuvinteCC * ouvinte) { | ||
480 | - ouvintes->remove(ouvinte); | ||
481 | -} | ||
482 | - | ||
483 | -void ExtratorCC::notificaOuvintes(unsigned char * CC) { | ||
484 | - for (list<OuvinteCC*>::iterator i = ouvintes->begin(); i != ouvintes->end(); i++) { | ||
485 | - (*i)->notificaCC(CC, PTS); | ||
486 | - } | ||
487 | -} |
extratorCC/src/include/extratorCC.h
@@ -1,76 +0,0 @@ | @@ -1,76 +0,0 @@ | ||
1 | -/* | ||
2 | - * File: PacketPES.h | ||
3 | - * Author: felipe | ||
4 | - * | ||
5 | - * Created on 19 de Outubro de 2009, 14:49 | ||
6 | - */ | ||
7 | - | ||
8 | -#ifndef _EXTRATORCC_H | ||
9 | -#define _EXTRATORCC_H | ||
10 | - | ||
11 | -#include <cstring> | ||
12 | -#include <string> | ||
13 | -#include <list> | ||
14 | -#include <pthread.h> | ||
15 | -#include <iostream> | ||
16 | -#include "ouvinteCC.h" | ||
17 | -#include "stdint.h" | ||
18 | -#include "ouvinteInput.h" | ||
19 | -#include "demuxListener.h" | ||
20 | - | ||
21 | -using namespace std; | ||
22 | - | ||
23 | -class ExtratorCC : /*public OuvinteInput,*/ public DemuxListener { | ||
24 | -public: | ||
25 | - ExtratorCC(); | ||
26 | - ~ExtratorCC(); | ||
27 | - int packetPES(unsigned char *pacote); | ||
28 | - | ||
29 | - void synchronizedPesData(int PES_packet_data_byte, unsigned char *pacote); | ||
30 | - void dataGroup(int PES_packet_data_byte, unsigned char *pacote); | ||
31 | - void captionData(int PES_packet_data_byte, unsigned char *pacote, int data_group_id); | ||
32 | - void dataUnit(int PES_packet_data_byte, unsigned char *pacote); | ||
33 | - | ||
34 | - int verificaPESStreamIDSynchronized(unsigned char * PESPacket); | ||
35 | - int verificaPESStreamID(unsigned char * PESPacket); | ||
36 | - int verificaPESStartCode(unsigned char * PESPacket); | ||
37 | - int contemAF(unsigned char * pacote); | ||
38 | - int contemDTS(unsigned char * PESPacket); | ||
39 | - int contemESCR(unsigned char * PESPacket); | ||
40 | - int contemPayloadData(unsigned char *pacote); | ||
41 | - int contemPayloadStartIndicator(unsigned char *pacote); | ||
42 | - int contemPCR(unsigned char * pacote); | ||
43 | - int contemPTS(unsigned char * PESPacket); | ||
44 | - int contemDSM(unsigned char * PESPacket); | ||
45 | - int contemAdditional(unsigned char * PESPacket); | ||
46 | - int contemES_rate(unsigned char * PESPacket); | ||
47 | - int contemPES_CRC(unsigned char * PESPacket); | ||
48 | - int contemPES_extension(unsigned char * PESPacket); | ||
49 | - short unsigned GetTamanhoAF(unsigned char *pacote); | ||
50 | - | ||
51 | - int64_t extractPTS(unsigned char * PESPacket); | ||
52 | - int64_t extractDTS(unsigned char * PESPacket); | ||
53 | - | ||
54 | - virtual void registraOuvinte(OuvinteCC * ouvinte); | ||
55 | - virtual void removeOuvinte(OuvinteCC * ouvinte); | ||
56 | - virtual void notificaOuvintes(unsigned char * CC); | ||
57 | - | ||
58 | - //virtual void chegouInput(unsigned char *pacote); | ||
59 | - | ||
60 | - virtual void notifySection(int PID, unsigned char* section, int sectionSize); | ||
61 | - virtual void notifyErroCRC(int numErroCRC, int PID, int tableID, int tableIDX, unsigned char* section, int sectionSize); | ||
62 | - virtual void notifyOldSection(int PID, int tableID, int tableIDX); | ||
63 | - | ||
64 | -private: | ||
65 | - string ClosedCaption; | ||
66 | - int64_t PTS, DTS; | ||
67 | - | ||
68 | - std::list<OuvinteCC*> * ouvintes; | ||
69 | - | ||
70 | - // Mutex para evitar mutiplas chamadas de notificadores | ||
71 | - pthread_mutex_t *mutex; | ||
72 | -}; | ||
73 | - | ||
74 | - | ||
75 | -#endif | ||
76 | - |
extratorCC/src/include/ouvinteCC.h
@@ -1,29 +0,0 @@ | @@ -1,29 +0,0 @@ | ||
1 | -/* | ||
2 | - * File: ouvinteCC.h | ||
3 | - * Author: felipe | ||
4 | - * | ||
5 | - * Created on 3 de Fevereiro de 2010, 19:44 | ||
6 | - */ | ||
7 | - | ||
8 | -#ifndef _OUVINTECC_H | ||
9 | -#define _OUVINTECC_H | ||
10 | - | ||
11 | -#include <string> | ||
12 | -#include <stdint.h> | ||
13 | - | ||
14 | -using namespace std; | ||
15 | - | ||
16 | -class OuvinteCC { | ||
17 | -public: | ||
18 | - OuvinteCC(); | ||
19 | - virtual ~OuvinteCC(); | ||
20 | - | ||
21 | - // inclusão do parâmetro "long int pts" | ||
22 | - virtual void notificaCC(unsigned char * cc, int64_t pts) = 0; | ||
23 | -private: | ||
24 | - | ||
25 | -}; | ||
26 | - | ||
27 | - | ||
28 | -#endif /* _OUVINTECC_H */ | ||
29 | - |
extratorCC/src/ouvinteCC.cpp
servico/src/include/serviceWindowGenerationFromCC.h
@@ -1,44 +0,0 @@ | @@ -1,44 +0,0 @@ | ||
1 | -#ifndef SERVICEWINDOWGENERATIONFROMCC_H | ||
2 | -#define SERVICEWINDOWGENERATIONFROMCC_H | ||
3 | - | ||
4 | -#include "serviceWindowGeneration.h" | ||
5 | -#include "ouvinteCC.h" | ||
6 | -#include <pthread.h> | ||
7 | -#include "inputFile.h" | ||
8 | -#include "extratorCC.h" | ||
9 | -#include "demux.h" | ||
10 | -#include "stdint.h" | ||
11 | -#include <vector> | ||
12 | -#include "jthread.h" | ||
13 | - | ||
14 | -using namespace std; | ||
15 | -using namespace jthread; | ||
16 | - | ||
17 | -class ServiceWindowGenerationFromCC : public ServiceWindowGeneration, public OuvinteCC, public Thread { | ||
18 | -private: | ||
19 | - pthread_mutex_t *mutex_serviceCC; | ||
20 | - //LEONARDO: comentado. //InputFile *inputfile; | ||
21 | - ExtratorCC *extratorCC; | ||
22 | - Demux *demux; | ||
23 | - //char* path_input; | ||
24 | - //int numero_legendas; | ||
25 | - | ||
26 | - | ||
27 | - | ||
28 | -public: | ||
29 | - | ||
30 | - ServiceWindowGenerationFromCC( | ||
31 | - char* path, int position, int size, int transparency, int _serviceType); | ||
32 | - | ||
33 | - ~ServiceWindowGenerationFromCC(); | ||
34 | - //virtual void chegouCC(unsigned char * cc); | ||
35 | - virtual void notificaCC(unsigned char * cc, int64_t pts); | ||
36 | - void notificaTradutor(unsigned char * cc); | ||
37 | - void notificaSincronizadorSemTradutor(unsigned char * cc, int64_t pts); | ||
38 | - void initialize(); | ||
39 | - void setPathInput(char* path); | ||
40 | - void Run(); | ||
41 | - | ||
42 | -}; | ||
43 | - | ||
44 | -#endif |
servico/src/serviceWindowGenerationFromCC.cpp
@@ -1,102 +0,0 @@ | @@ -1,102 +0,0 @@ | ||
1 | -#include "include/serviceWindowGenerationFromCC.h" | ||
2 | - | ||
3 | -using namespace std; | ||
4 | - | ||
5 | -ServiceWindowGenerationFromCC::ServiceWindowGenerationFromCC( | ||
6 | - char* path, int position, int size, int transparency, int _serviceType) { | ||
7 | - setPathInput(path); | ||
8 | - numero_legendas = 0; | ||
9 | - setPosition(position); | ||
10 | - setSize(size); | ||
11 | - setTransparency(transparency); | ||
12 | - setServiceType(_serviceType); | ||
13 | - //this->fisish = false; | ||
14 | - //initialize(); | ||
15 | -} | ||
16 | - | ||
17 | -ServiceWindowGenerationFromCC::~ServiceWindowGenerationFromCC() { | ||
18 | - | ||
19 | -} | ||
20 | - | ||
21 | -void ServiceWindowGenerationFromCC::setPathInput(char* path) { | ||
22 | - this->path_input = path; | ||
23 | -} | ||
24 | - | ||
25 | -void ServiceWindowGenerationFromCC::notificaCC(unsigned char* cc, int64_t pts) { | ||
26 | - cout << "1-Chegou LEGENDA no ServiceFromCC\n" << endl; | ||
27 | - printf("Glosa: %s PTS: %lld\n", cc, pts); | ||
28 | - | ||
29 | - if (!strcmp((const char*) cc, "Homem supermercado falar nao vender.")) { | ||
30 | - printf("\nIGUAL\n"); | ||
31 | - return; | ||
32 | - } else { | ||
33 | - //printf("\nDIFERENTE\n"); | ||
34 | - } | ||
35 | - | ||
36 | - numero_legendas++; | ||
37 | - char op = this->getRunningOption(); | ||
38 | - | ||
39 | - if (op == '3') { | ||
40 | - notificaSincronizadorSemTradutor(cc, pts); | ||
41 | - } else { | ||
42 | - adicionaPTS(pts); | ||
43 | - notificaTradutor(cc); | ||
44 | - } | ||
45 | - | ||
46 | -} | ||
47 | - | ||
48 | -void ServiceWindowGenerationFromCC::notificaSincronizadorSemTradutor(unsigned char * cc, int64_t pts) { | ||
49 | - char* pch = strtok((char*) cc, " "); | ||
50 | - while (pch != NULL) { | ||
51 | - string pch_string = (string) pch; | ||
52 | - sincronizador->recebeglosa(pch_string, pts); | ||
53 | - printf("%s\n", pch); | ||
54 | - pch = strtok(NULL, " "); | ||
55 | - } | ||
56 | -} | ||
57 | - | ||
58 | -void ServiceWindowGenerationFromCC::notificaTradutor(unsigned char* cc) { | ||
59 | - | ||
60 | - const char* constchar = (const char*) cc; | ||
61 | - char* cc_copy = new char[strlen(constchar)]; | ||
62 | - strcpy(cc_copy, constchar); | ||
63 | - tradutor->traduz((unsigned char*) cc_copy); | ||
64 | - | ||
65 | -} | ||
66 | - | ||
67 | -void ServiceWindowGenerationFromCC::initialize() { | ||
68 | - | ||
69 | - inputfile = new InputFile(this->path_input); | ||
70 | - extratorCC = new ExtratorCC(); | ||
71 | - monitor_pcr_base = new MonitorPCR(); | ||
72 | - demux = new Demux(278, (DemuxListener*) extratorCC); | ||
73 | - inputfile->registraOuvinte(demux); | ||
74 | - extratorCC->registraOuvinte(this); | ||
75 | - | ||
76 | - inputfile->registraOuvinte(monitor_pcr_base); | ||
77 | - | ||
78 | - ServiceWindowGeneration::initialize(); | ||
79 | - | ||
80 | - inputfile->initialize(); | ||
81 | - this->Start(); | ||
82 | -} | ||
83 | - | ||
84 | -void ServiceWindowGenerationFromCC::Run() { | ||
85 | - | ||
86 | - while (true) { | ||
87 | - | ||
88 | - if (inputfile->isFinished()) { | ||
89 | - | ||
90 | - this->finish = true; | ||
91 | - | ||
92 | - if (getRunningOption() == '3') { | ||
93 | - //printf("\n\n\nEncerrei\n\n\n"); | ||
94 | - sincronizador->stop(); | ||
95 | - | ||
96 | - } | ||
97 | - | ||
98 | - } | ||
99 | - sleep(5); | ||
100 | - } | ||
101 | - | ||
102 | -} |