Commit 3b5f86ecafad51afe1eee52733feb079433eeb23

Authored by Wesnydy Ribeiro
1 parent 094f6d33
Exists in master and in 1 other branch devel

Remoção do Sincronizador

servico/src/include/serviceWindowGeneration.h
@@ -9,8 +9,6 @@ @@ -9,8 +9,6 @@
9 #include "jthread.h" 9 #include "jthread.h"
10 #include "dprintf.h" 10 #include "dprintf.h"
11 #include "Mixer.h" 11 #include "Mixer.h"
12 -//#include "synchronizer.h"  
13 -//#include "listenerSynchronizer.h"  
14 #include "listenerTradutor.h" 12 #include "listenerTradutor.h"
15 #include "tradutorPortGlosa.h" 13 #include "tradutorPortGlosa.h"
16 #include "serviceException.h" 14 #include "serviceException.h"
@@ -23,11 +21,7 @@ @@ -23,11 +21,7 @@
23 21
24 #define DEVELOPER "devel" 22 #define DEVELOPER "devel"
25 #define PRODUCTION "prod" 23 #define PRODUCTION "prod"
26 -#define BASEDIR "vlibras_user/dicionario_libras/"  
27 -#define BASEDIRTRANSP "vlibras_user/dicionarioTransp_libras/"  
28 -#define VIDEO_POSE_NEUTRA "poseneutra"  
29 -#define EXTENSAO_DICIONARIO ".ts"  
30 -#define PATH_DEVEL "vlibras_user/vlibras-contents/videos/" 24 +#define PATH_DEVEL_CONTENTS "vlibras_user/vlibras-contents/videos/"
31 #define PATH_DEVEL_UPLOADS "vlibras_user/vlibras-contents/uploads/" 25 #define PATH_DEVEL_UPLOADS "vlibras_user/vlibras-contents/uploads/"
32 #define PATH_VBOX_UPLOADS "vlibras_user/.vlibras-conf/uploads/" 26 #define PATH_VBOX_UPLOADS "vlibras_user/.vlibras-conf/uploads/"
33 #define PATH_CONF_FILE "vlibras_user/.vlibras-conf/param.json" 27 #define PATH_CONF_FILE "vlibras_user/.vlibras-conf/param.json"
@@ -46,7 +40,6 @@ class ServiceWindowGeneration { @@ -46,7 +40,6 @@ class ServiceWindowGeneration {
46 40
47 protected: 41 protected:
48 TradutorPortGlosa* tradutor; 42 TradutorPortGlosa* tradutor;
49 - //Synchronizer* sincronizador;  
50 Mixer* mixer; 43 Mixer* mixer;
51 StreamSocket* core_socket; 44 StreamSocket* core_socket;
52 45
@@ -59,7 +52,7 @@ protected: @@ -59,7 +52,7 @@ protected:
59 bool parsingSuccessful; 52 bool parsingSuccessful;
60 53
61 char* path_input; 54 char* path_input;
62 - char* path_libras; 55 + char* path_client;
63 char* path_contents; 56 char* path_contents;
64 char* path_uploads; 57 char* path_uploads;
65 char* client_type; 58 char* client_type;
@@ -75,15 +68,10 @@ protected: @@ -75,15 +68,10 @@ protected:
75 68
76 virtual void setSizeOfSubtitles(int sub_size) = 0; 69 virtual void setSizeOfSubtitles(int sub_size) = 0;
77 virtual void setPathContents() = 0; 70 virtual void setPathContents() = 0;
78 - virtual void setPathLibras() = 0;  
79 - //virtual void setBackground() = 0;  
80 71
81 virtual void connectToUnity() = 0; 72 virtual void connectToUnity() = 0;
82 virtual void sendGlosa(string glosa) = 0; 73 virtual void sendGlosa(string glosa) = 0;
83 virtual void waitVideoGeneration() = 0; 74 virtual void waitVideoGeneration() = 0;
84 -  
85 - //virtual void transcodeVideoToWebm();  
86 - virtual void transcodeVideoToMp4() = 0;  
87 75
88 public: 76 public:
89 virtual void initialize() = 0; 77 virtual void initialize() = 0;
servico/src/include/serviceWindowGenerationFromRec.h
@@ -16,15 +16,11 @@ private: @@ -16,15 +16,11 @@ private:
16 void addPTS(int64_t pts); 16 void addPTS(int64_t pts);
17 void setSizeOfSubtitles(int sub_size); 17 void setSizeOfSubtitles(int sub_size);
18 void setPathContents(); 18 void setPathContents();
19 - void setPathLibras();  
20 - //void setBackground();  
21 19
22 void connectToUnity(); 20 void connectToUnity();
23 void sendGlosa(string glosa); 21 void sendGlosa(string glosa);
24 void waitVideoGeneration(); 22 void waitVideoGeneration();
25 23
26 - void transcodeVideoToMp4();  
27 - void createThumbnail();  
28 bool isRunning(); 24 bool isRunning();
29 public: 25 public:
30 ServiceWindowGenerationFromRec(char* pathVideo, int sublanguage, int position, int size, 26 ServiceWindowGenerationFromRec(char* pathVideo, int sublanguage, int position, int size,
@@ -36,7 +32,6 @@ public: @@ -36,7 +32,6 @@ public:
36 void notifyTextRecognized(unsigned char* text, int64_t pts); 32 void notifyTextRecognized(unsigned char* text, int64_t pts);
37 void notifyTranslation(vector<string>* glosas); 33 void notifyTranslation(vector<string>* glosas);
38 void notifyTranslator(unsigned char* text); 34 void notifyTranslator(unsigned char* text);
39 - //void notifyEndOfSynchronization();  
40 void notifyEnd(int sentences_size); 35 void notifyEnd(int sentences_size);
41 36
42 void initialize(); 37 void initialize();
servico/src/include/serviceWindowGenerationFromSRT.h
@@ -19,15 +19,11 @@ private: @@ -19,15 +19,11 @@ private:
19 void addPTS(int64_t pts); 19 void addPTS(int64_t pts);
20 void setSizeOfSubtitles(int sub_size); 20 void setSizeOfSubtitles(int sub_size);
21 void setPathContents(); 21 void setPathContents();
22 - void setPathLibras();  
23 - //void setBackground();  
24 22
25 void connectToUnity(); 23 void connectToUnity();
26 void sendGlosa(string glosa); 24 void sendGlosa(string glosa);
27 void waitVideoGeneration(); 25 void waitVideoGeneration();
28 26
29 - void transcodeVideoToMp4();  
30 - void createThumbnail();  
31 bool isRunning(); 27 bool isRunning();
32 public: 28 public:
33 //construtor de serviço de video e legenda 29 //construtor de serviço de video e legenda
@@ -40,7 +36,6 @@ public: @@ -40,7 +36,6 @@ public:
40 void notifySubtitle(unsigned char* subtitle, int64_t pts); 36 void notifySubtitle(unsigned char* subtitle, int64_t pts);
41 void notifyTranslation(vector<string>* glosas); 37 void notifyTranslation(vector<string>* glosas);
42 void notifyTranslator(unsigned char* text); 38 void notifyTranslator(unsigned char* text);
43 - //void notifyEndOfSynchronization();  
44 void notifyEnd(int sub_size); 39 void notifyEnd(int sub_size);
45 40
46 void initialize(); 41 void initialize();
servico/src/include/serviceWindowGenerationFromText.h
@@ -15,14 +15,11 @@ private: @@ -15,14 +15,11 @@ private:
15 15
16 void setSizeOfSubtitles(int sub_size); 16 void setSizeOfSubtitles(int sub_size);
17 void setPathContents(); 17 void setPathContents();
18 - void setPathLibras();  
19 - //void setBackground();  
20 18
21 void connectToUnity(); 19 void connectToUnity();
22 void sendGlosa(string glosa); 20 void sendGlosa(string glosa);
23 void waitVideoGeneration(); 21 void waitVideoGeneration();
24 22
25 - void transcodeVideoToMp4();  
26 bool isRunning(); 23 bool isRunning();
27 public: 24 public:
28 ServiceWindowGenerationFromText(char* pathFile, int transparency, char* id, char* client); 25 ServiceWindowGenerationFromText(char* pathFile, int transparency, char* id, char* client);
@@ -31,7 +28,6 @@ public: @@ -31,7 +28,6 @@ public:
31 void notifyLine(unsigned char* line); 28 void notifyLine(unsigned char* line);
32 void notifyTranslation(vector<string>* glosas); 29 void notifyTranslation(vector<string>* glosas);
33 void notifyTranslator(unsigned char* text); 30 void notifyTranslator(unsigned char* text);
34 - //void notifyEndOfSynchronization();  
35 void notifyEnd(int line_size); 31 void notifyEnd(int line_size);
36 32
37 void initialize(); 33 void initialize();
servico/src/serviceWindowGenerationFromRec.cpp
@@ -50,14 +50,13 @@ ServiceWindowGenerationFromRec::~ServiceWindowGenerationFromRec(){ @@ -50,14 +50,13 @@ ServiceWindowGenerationFromRec::~ServiceWindowGenerationFromRec(){
50 free(vetor_pts); 50 free(vetor_pts);
51 if (tradutor) delete tradutor; 51 if (tradutor) delete tradutor;
52 if (rec) delete rec; 52 if (rec) delete rec;
53 - //if (sincronizador) delete sincronizador;  
54 if (mixer) delete mixer; 53 if (mixer) delete mixer;
55 DDDPRINTF("Service Rec finished!\n"); 54 DDDPRINTF("Service Rec finished!\n");
56 } 55 }
57 56
58 void ServiceWindowGenerationFromRec::setPathContents(){ 57 void ServiceWindowGenerationFromRec::setPathContents(){
59 if(strcmp(client_type,DEVELOPER) == 0){ 58 if(strcmp(client_type,DEVELOPER) == 0){
60 - this->path_contents = PATH_DEVEL; 59 + this->path_contents = PATH_DEVEL_CONTENTS;
61 this->path_uploads = PATH_DEVEL_UPLOADS; 60 this->path_uploads = PATH_DEVEL_UPLOADS;
62 rec->setPathAudioContents(path_uploads); 61 rec->setPathAudioContents(path_uploads);
63 }else if(strcmp(client_type, PRODUCTION) == 0){ 62 }else if(strcmp(client_type, PRODUCTION) == 0){
@@ -78,40 +77,11 @@ void ServiceWindowGenerationFromRec::setPathContents(){ @@ -78,40 +77,11 @@ void ServiceWindowGenerationFromRec::setPathContents(){
78 } 77 }
79 } 78 }
80 79
81 -void ServiceWindowGenerationFromRec::setPathLibras(){  
82 - char* final_path = new char[MAX_SIZE_PATH];  
83 - strcpy(final_path, this->path_uploads);  
84 - strcat(final_path, this->user_id);  
85 - strcat(final_path, "/video_libras.ts");  
86 -  
87 - this->path_libras = final_path;  
88 -}  
89 -  
90 -// void ServiceWindowGenerationFromRec::setBackground(){  
91 -// if(this->transparency == 0) { //pega dicionario com BackGround opaco  
92 -// char* dicPath;  
93 -// dicPath = getenv("DIC_LIBRAS");  
94 -// if(dicPath != NULL)  
95 -// sincronizador = new Synchronizer(dicPath, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
96 -// else  
97 -// sincronizador = new Synchronizer(BASEDIR, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
98 -  
99 -// } else if(this->transparency == 1) { //pega dicionario com BackGround transparente  
100 -// char* dicTPath;  
101 -// dicTPath = getenv("DICTRANSP_LIBRAS");  
102 -// if(dicTPath != NULL)  
103 -// sincronizador = new Synchronizer(dicTPath, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
104 -// else  
105 -// sincronizador = new Synchronizer(BASEDIRTRANSP, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
106 -// }  
107 -// }  
108 -  
109 void ServiceWindowGenerationFromRec::setSizeOfSubtitles(int sub_size){ 80 void ServiceWindowGenerationFromRec::setSizeOfSubtitles(int sub_size){
110 numero_legendas = sub_size; 81 numero_legendas = sub_size;
111 if (legendas_enviadas >= numero_legendas){ 82 if (legendas_enviadas >= numero_legendas){
112 sendGlosa(END_NOTIFICATION); 83 sendGlosa(END_NOTIFICATION);
113 waitVideoGeneration(); 84 waitVideoGeneration();
114 - //sincronizador->stop();  
115 } 85 }
116 } 86 }
117 87
@@ -129,19 +99,6 @@ void ServiceWindowGenerationFromRec::notifyTextRecognized(unsigned char* text, i @@ -129,19 +99,6 @@ void ServiceWindowGenerationFromRec::notifyTextRecognized(unsigned char* text, i
129 notifyTranslator(text); 99 notifyTranslator(text);
130 } 100 }
131 101
132 -// //Quando o sincronizador termina, ele invoca esse método para avisar  
133 -// void ServiceWindowGenerationFromRec::notifyEndOfSynchronization() {  
134 -// if (this->service_type == SERVICE_TYPE_REC) {  
135 -// mixer = new Mixer();  
136 -// mixer->initialize(this->path_input, this->path_libras,this->position,this->size,  
137 -// this->transparency, this->user_id, this->path_uploads, this->path_contents);  
138 -// createThumbnail();  
139 -// }else{  
140 -// transcodeVideoToMp4();  
141 -// }  
142 -// this->running = false;  
143 -// }  
144 -  
145 void ServiceWindowGenerationFromRec::notifyTranslation(vector<string> * glosas) { 102 void ServiceWindowGenerationFromRec::notifyTranslation(vector<string> * glosas) {
146 for (int i = 0; i < glosas->size(); i++) { 103 for (int i = 0; i < glosas->size(); i++) {
147 locale loc; 104 locale loc;
@@ -150,7 +107,6 @@ void ServiceWindowGenerationFromRec::notifyTranslation(vector&lt;string&gt; * glosas) @@ -150,7 +107,6 @@ void ServiceWindowGenerationFromRec::notifyTranslation(vector&lt;string&gt; * glosas)
150 glosa_lower += std::tolower(glosas->at(i).at(k), loc); 107 glosa_lower += std::tolower(glosas->at(i).at(k), loc);
151 } 108 }
152 //int64_t pts_notificado = vetor_pts->front(); 109 //int64_t pts_notificado = vetor_pts->front();
153 - //sincronizador->recebeglosa(glosa_lower, pts_notificado);  
154 sendGlosa(glosa_lower); 110 sendGlosa(glosa_lower);
155 } 111 }
156 112
@@ -174,43 +130,11 @@ bool ServiceWindowGenerationFromRec::isFinished(){ @@ -174,43 +130,11 @@ bool ServiceWindowGenerationFromRec::isFinished(){
174 130
175 void ServiceWindowGenerationFromRec::initialize(){ 131 void ServiceWindowGenerationFromRec::initialize(){
176 DPRINTF("Service REC Initialize.\n"); 132 DPRINTF("Service REC Initialize.\n");
177 - rec->addListener(this);  
178 - setPathLibras();  
179 -  
180 - if(this->sub_language == 1)  
181 - tradutor->addListener(this);  
182 -  
183 - if(this->service_type != SERVICE_TYPE_REC_ONLY_AUDIO){  
184 - vector<string> tokens;  
185 - char* pathtmp = this->path_input;  
186 - int size = strlen(pathtmp);  
187 - char vtemp [size];  
188 -  
189 - strcpy(vtemp, pathtmp);  
190 - pathtmp = strtok(vtemp, ".");  
191 - while (pathtmp != NULL) {  
192 - tokens.push_back(string(pathtmp));  
193 - pathtmp = strtok(NULL, ".");  
194 - }  
195 -  
196 - string buildstrpath = tokens[0] + "_libras" + EXTENSAO_DICIONARIO;  
197 - this->path_libras = new char[buildstrpath.size()];  
198 - strcpy(this->path_libras, buildstrpath.c_str());  
199 - //printf("O Serviço montou o seguinte path para o vídeo de Libras: %s\n", path_libras);  
200 -  
201 - }else{  
202 - tradutor->addListener(this);  
203 - }  
204 133
  134 + rec->addListener(this);
  135 + tradutor->addListener(this);
205 connectToUnity(); 136 connectToUnity();
206 137
207 - // setBackground();  
208 -  
209 - // uint64_t pcr_base = (uint64_t) 1000; //FIXME: macro  
210 - // sincronizador->setPCRBase(pcr_base);  
211 - // sincronizador->addListener(this);  
212 - // sincronizador->Start();  
213 -  
214 try{ 138 try{
215 rec->initialize(); 139 rec->initialize();
216 } catch(RecognizeException ex){ 140 } catch(RecognizeException ex){
@@ -229,7 +153,6 @@ void ServiceWindowGenerationFromRec::sendGlosa(string glosa) { @@ -229,7 +153,6 @@ void ServiceWindowGenerationFromRec::sendGlosa(string glosa) {
229 153
230 char* ok_core = new char[4]; 154 char* ok_core = new char[4];
231 core_socket->read(ok_core, 4); //aguarda o unity confirmar o recebimento da glosa 155 core_socket->read(ok_core, 4); //aguarda o unity confirmar o recebimento da glosa
232 - //cout << "Recebi: " << ok_core << endl;  
233 delete [] ok_core; 156 delete [] ok_core;
234 } 157 }
235 158
@@ -250,7 +173,6 @@ void ServiceWindowGenerationFromRec::waitVideoGeneration() { @@ -250,7 +173,6 @@ void ServiceWindowGenerationFromRec::waitVideoGeneration() {
250 try{ 173 try{
251 do{ 174 do{
252 core_socket->read(endgeneration, sizeof(endgeneration)); 175 core_socket->read(endgeneration, sizeof(endgeneration));
253 - //usleep(500000);  
254 }while(strcmp(endgeneration, END_NOTIFICATION) != 0); 176 }while(strcmp(endgeneration, END_NOTIFICATION) != 0);
255 core_socket->close(); 177 core_socket->close();
256 this->running = false; 178 this->running = false;
@@ -259,25 +181,6 @@ void ServiceWindowGenerationFromRec::waitVideoGeneration() { @@ -259,25 +181,6 @@ void ServiceWindowGenerationFromRec::waitVideoGeneration() {
259 } 181 }
260 } 182 }
261 183
262 -void ServiceWindowGenerationFromRec::transcodeVideoToMp4(){  
263 - DPRINTF("[AGUARDE] Transcodificando o vídeo de Libras...\n");  
264 - string command = "ffmpeg -i ";  
265 - command.append(path_libras)  
266 - .append(" -qscale 0 -strict experimental -vcodec libx264 -preset fast -r 30 ").append(" -v quiet ")  
267 - .append(path_contents).append(user_id).append(".mp4");  
268 - //printf("[INFO]: Transcodification command -> %s\n", command.c_str());  
269 - system(command.c_str());  
270 -}  
271 -  
272 -void ServiceWindowGenerationFromRec::createThumbnail(){  
273 - string command = "ffmpeg -ss 10 -i ";  
274 - command.append(path_contents).append(user_id).append(".mp4")  
275 - .append(" -vcodec png -vframes 1 -an -f rawvideo -y -vf scale=200:200 ").append(" -v quiet ")  
276 - .append(path_contents).append(user_id).append(".png");  
277 - //printf("[INFO]: Thumbnail command -> %s\n", command.c_str());  
278 - system(command.c_str());  
279 -}  
280 -  
281 void ServiceWindowGenerationFromRec::Run(){ 184 void ServiceWindowGenerationFromRec::Run(){
282 while(isRunning()){ 185 while(isRunning()){
283 usleep(200000); 186 usleep(200000);
servico/src/serviceWindowGenerationFromSRT.cpp
@@ -53,7 +53,6 @@ ServiceWindowGenerationFromSRT::~ServiceWindowGenerationFromSRT() { @@ -53,7 +53,6 @@ ServiceWindowGenerationFromSRT::~ServiceWindowGenerationFromSRT() {
53 free(vetor_pts); 53 free(vetor_pts);
54 if (mixer) delete mixer; 54 if (mixer) delete mixer;
55 if (tradutor) delete tradutor; 55 if (tradutor) delete tradutor;
56 - //if (sincronizador) delete sincronizador;  
57 if (extratorSRT)delete extratorSRT; 56 if (extratorSRT)delete extratorSRT;
58 if (extrator_factory) delete extrator_factory; 57 if (extrator_factory) delete extrator_factory;
59 DDDPRINTF("Service SRT finalized!\n"); 58 DDDPRINTF("Service SRT finalized!\n");
@@ -61,8 +60,7 @@ ServiceWindowGenerationFromSRT::~ServiceWindowGenerationFromSRT() { @@ -61,8 +60,7 @@ ServiceWindowGenerationFromSRT::~ServiceWindowGenerationFromSRT() {
61 60
62 void ServiceWindowGenerationFromSRT::setPathContents() { 61 void ServiceWindowGenerationFromSRT::setPathContents() {
63 if(strcmp(client_type,DEVELOPER) == 0){ 62 if(strcmp(client_type,DEVELOPER) == 0){
64 - this->path_contents = PATH_DEVEL;  
65 - this->path_uploads = PATH_DEVEL_UPLOADS; 63 + this->path_contents = PATH_DEVEL_CONTENTS;
66 }else if(strcmp(client_type, PRODUCTION) == 0){ 64 }else if(strcmp(client_type, PRODUCTION) == 0){
67 ifstream conf_file(PATH_CONF_FILE, ifstream::binary); 65 ifstream conf_file(PATH_CONF_FILE, ifstream::binary);
68 parsingSuccessful = reader.parse(conf_file, root); 66 parsingSuccessful = reader.parse(conf_file, root);
@@ -73,47 +71,17 @@ void ServiceWindowGenerationFromSRT::setPathContents() { @@ -73,47 +71,17 @@ void ServiceWindowGenerationFromSRT::setPathContents() {
73 string attr = root.get("storage", PATH_VBOX_UPLOADS).asString(); 71 string attr = root.get("storage", PATH_VBOX_UPLOADS).asString();
74 this->path_contents = new char[MAX_SIZE_PATH]; 72 this->path_contents = new char[MAX_SIZE_PATH];
75 strcpy(this->path_contents, attr.c_str()); 73 strcpy(this->path_contents, attr.c_str());
76 - this->path_uploads = PATH_VBOX_UPLOADS;  
77 conf_file.close(); 74 conf_file.close();
78 }else{ 75 }else{
79 throw ServiceException("Invalid client!"); 76 throw ServiceException("Invalid client!");
80 } 77 }
81 } 78 }
82 79
83 -void ServiceWindowGenerationFromSRT::setPathLibras() {  
84 - char* final_path = new char[MAX_SIZE_PATH];  
85 - strcpy(final_path, this->path_uploads);  
86 - strcat(final_path, this->user_id);  
87 - strcat(final_path, "/video_libras.ts");  
88 -  
89 - this->path_libras = final_path;  
90 -}  
91 -  
92 -// void ServiceWindowGenerationFromSRT::setBackground() {  
93 -// if(this->transparency == 0) { //pega dicionario com BackGround opaco  
94 -// char* dicPath;  
95 -// dicPath = getenv("DIC_LIBRAS");  
96 -// if(dicPath != NULL)  
97 -// sincronizador = new Synchronizer(dicPath, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
98 -// else  
99 -// sincronizador = new Synchronizer(BASEDIR, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
100 -  
101 -// } else if(this->transparency == 1) { //pega dicionario com BackGround transparente  
102 -// char* dicTPath;  
103 -// dicTPath = getenv("DICTRANSP_LIBRAS");  
104 -// if(dicTPath != NULL)  
105 -// sincronizador = new Synchronizer(dicTPath, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
106 -// else  
107 -// sincronizador = new Synchronizer(BASEDIRTRANSP, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
108 -// }  
109 -// }  
110 -  
111 void ServiceWindowGenerationFromSRT::setSizeOfSubtitles(int sub_size) { 80 void ServiceWindowGenerationFromSRT::setSizeOfSubtitles(int sub_size) {
112 numero_legendas = sub_size; 81 numero_legendas = sub_size;
113 if (legendas_enviadas >= numero_legendas){ 82 if (legendas_enviadas >= numero_legendas){
114 sendGlosa(END_NOTIFICATION); 83 sendGlosa(END_NOTIFICATION);
115 waitVideoGeneration(); 84 waitVideoGeneration();
116 - //sincronizador->stop();  
117 } 85 }
118 } 86 }
119 87
@@ -134,18 +102,6 @@ void ServiceWindowGenerationFromSRT::notifySubtitle(unsigned char *subtitle, int @@ -134,18 +102,6 @@ void ServiceWindowGenerationFromSRT::notifySubtitle(unsigned char *subtitle, int
134 notifyTranslator(subtitle); 102 notifyTranslator(subtitle);
135 } 103 }
136 104
137 -// void ServiceWindowGenerationFromSRT::notifyEndOfSynchronization() {  
138 -// if (this->service_type == SERVICE_TYPE_SRT) {  
139 -// mixer = new Mixer();  
140 -// mixer->initialize(this->path_input, this->path_libras,this->position,this->size,  
141 -// this->transparency, this->user_id, this->path_uploads, this->path_contents);  
142 -// createThumbnail();  
143 -// }else{  
144 -// transcodeVideoToMp4();  
145 -// }  
146 -// this->running = false;  
147 -// }  
148 -  
149 void ServiceWindowGenerationFromSRT::notifyTranslation(vector<string> * glosas) { 105 void ServiceWindowGenerationFromSRT::notifyTranslation(vector<string> * glosas) {
150 for (int i = 0; i < glosas->size(); i++) { 106 for (int i = 0; i < glosas->size(); i++) {
151 locale loc; 107 locale loc;
@@ -155,7 +111,6 @@ void ServiceWindowGenerationFromSRT::notifyTranslation(vector&lt;string&gt; * glosas) @@ -155,7 +111,6 @@ void ServiceWindowGenerationFromSRT::notifyTranslation(vector&lt;string&gt; * glosas)
155 } 111 }
156 sendGlosa(glosa_lower); 112 sendGlosa(glosa_lower);
157 //int64_t pts_notificado = vetor_pts->front(); 113 //int64_t pts_notificado = vetor_pts->front();
158 - //sincronizador->recebeglosa(glosa_lower, pts_notificado);  
159 } 114 }
160 115
161 vetor_pts->erase(vetor_pts->begin()); 116 vetor_pts->erase(vetor_pts->begin());
@@ -181,45 +136,14 @@ void ServiceWindowGenerationFromSRT::initialize() { @@ -181,45 +136,14 @@ void ServiceWindowGenerationFromSRT::initialize() {
181 extratorSRT->addListener(this); 136 extratorSRT->addListener(this);
182 extratorSRT->setFilePath(path_srt); 137 extratorSRT->setFilePath(path_srt);
183 138
184 - setPathLibras();  
185 -  
186 - if (this->sub_language == 1)  
187 - tradutor->addListener(this);  
188 -  
189 - if(this->service_type != SERVICE_TYPE_SRT_ONLY){  
190 - vector<string> tokens;  
191 - char* pathtmp = this->path_input;  
192 - int size = strlen(pathtmp);  
193 - char vtemp [size]; 139 + tradutor->addListener(this);
194 140
195 - strcpy(vtemp, pathtmp);  
196 - pathtmp = strtok(vtemp, ".");  
197 - while (pathtmp != NULL) {  
198 - tokens.push_back(string(pathtmp));  
199 - pathtmp = strtok(NULL, ".");  
200 - }  
201 -  
202 - string buildstrpath = tokens[0] + "_libras" + EXTENSAO_DICIONARIO;  
203 - this->path_libras = new char[buildstrpath.size()];  
204 - strcpy(this->path_libras, buildstrpath.c_str());  
205 - //printf("O Serviço montou o seguinte path para o vídeo de Libras: %s\n", path_libras);  
206 -  
207 - }else{  
208 - tradutor->addListener(this);  
209 - }  
210 -  
211 - //setBackground();  
212 -  
213 - if (service_type != SERVICE_TYPE_SRT) {  
214 - uint64_t pcr_base = (uint64_t) 1000; //FIXME: macro  
215 - //sincronizador->setPCRBase(pcr_base);  
216 - } 141 + // if (service_type != SERVICE_TYPE_SRT) {
  142 + // uint64_t pcr_base = (uint64_t) 1000; //FIXME: macro
  143 + // }
217 144
218 connectToUnity(); 145 connectToUnity();
219 146
220 - // sincronizador->addListener(this);  
221 - // sincronizador->Start();  
222 -  
223 try{ 147 try{
224 extratorSRT->initialize(); 148 extratorSRT->initialize();
225 }catch(ExtratorException ex){ 149 }catch(ExtratorException ex){
@@ -238,7 +162,6 @@ void ServiceWindowGenerationFromSRT::sendGlosa(string glosa) { @@ -238,7 +162,6 @@ void ServiceWindowGenerationFromSRT::sendGlosa(string glosa) {
238 162
239 char* ok_core = new char[3]; 163 char* ok_core = new char[3];
240 core_socket->read(ok_core, 3); //aguarda o unity confirmar o recebimento da glosa 164 core_socket->read(ok_core, 3); //aguarda o unity confirmar o recebimento da glosa
241 - //cout << "Recebi: " << ok_core << endl;  
242 delete [] ok_core; 165 delete [] ok_core;
243 } 166 }
244 167
@@ -259,7 +182,6 @@ void ServiceWindowGenerationFromSRT::waitVideoGeneration() { @@ -259,7 +182,6 @@ void ServiceWindowGenerationFromSRT::waitVideoGeneration() {
259 try{ 182 try{
260 do{ 183 do{
261 core_socket->read(endgeneration, sizeof(endgeneration)); 184 core_socket->read(endgeneration, sizeof(endgeneration));
262 - //usleep(500000);  
263 }while(strcmp(endgeneration, END_NOTIFICATION) != 0); 185 }while(strcmp(endgeneration, END_NOTIFICATION) != 0);
264 core_socket->close(); 186 core_socket->close();
265 this->running = false; 187 this->running = false;
@@ -268,25 +190,6 @@ void ServiceWindowGenerationFromSRT::waitVideoGeneration() { @@ -268,25 +190,6 @@ void ServiceWindowGenerationFromSRT::waitVideoGeneration() {
268 } 190 }
269 } 191 }
270 192
271 -void ServiceWindowGenerationFromSRT::transcodeVideoToMp4(){  
272 - DPRINTF("[AGUARDE] Transcodificando o vídeo de Libras...\n");  
273 - string command = "ffmpeg -i ";  
274 - command.append(path_libras)  
275 - .append(" -qscale 0 -strict experimental -vcodec libx264 -preset fast -r 30 ").append(" -v quiet ")  
276 - .append(path_contents).append(user_id).append(".mp4");  
277 - //printf("[INFO]: Transcodification command -> %s\n", command.c_str());  
278 - system(command.c_str());  
279 -}  
280 -  
281 -void ServiceWindowGenerationFromSRT::createThumbnail(){  
282 - string command = "ffmpeg -ss 10 -i ";  
283 - command.append(path_contents).append(user_id).append(".mp4")  
284 - .append(" -vcodec png -vframes 1 -an -f rawvideo -y -vf scale=200:200 ").append(" -v quiet ")  
285 - .append(path_contents).append(user_id).append(".png");  
286 - //printf("[INFO]: Thumbnail command -> %s\n", command.c_str());  
287 - system(command.c_str());  
288 -}  
289 -  
290 void ServiceWindowGenerationFromSRT::Run() { 193 void ServiceWindowGenerationFromSRT::Run() {
291 while(isRunning()){ 194 while(isRunning()){
292 usleep(200000); 195 usleep(200000);
servico/src/serviceWindowGenerationFromText.cpp
@@ -25,7 +25,6 @@ ServiceWindowGenerationFromText::ServiceWindowGenerationFromText(char* pathFile, @@ -25,7 +25,6 @@ ServiceWindowGenerationFromText::ServiceWindowGenerationFromText(char* pathFile,
25 ServiceWindowGenerationFromText::~ServiceWindowGenerationFromText() { 25 ServiceWindowGenerationFromText::~ServiceWindowGenerationFromText() {
26 free(vetor_pts); 26 free(vetor_pts);
27 if (tradutor) delete tradutor; 27 if (tradutor) delete tradutor;
28 - //if (sincronizador) delete sincronizador;  
29 if (extratorTXT)delete extratorTXT; 28 if (extratorTXT)delete extratorTXT;
30 if (extrator_factory) delete extrator_factory; 29 if (extrator_factory) delete extrator_factory;
31 DDDPRINTF("Service Text finalized!\n"); 30 DDDPRINTF("Service Text finalized!\n");
@@ -33,8 +32,7 @@ ServiceWindowGenerationFromText::~ServiceWindowGenerationFromText() { @@ -33,8 +32,7 @@ ServiceWindowGenerationFromText::~ServiceWindowGenerationFromText() {
33 32
34 void ServiceWindowGenerationFromText::setPathContents() { 33 void ServiceWindowGenerationFromText::setPathContents() {
35 if(strcmp(client_type,DEVELOPER) == 0){ 34 if(strcmp(client_type,DEVELOPER) == 0){
36 - this->path_contents = PATH_DEVEL;  
37 - this->path_uploads = PATH_DEVEL_UPLOADS; 35 + this->path_contents = PATH_DEVEL_CONTENTS;
38 }else if(strcmp(client_type, PRODUCTION) == 0){ 36 }else if(strcmp(client_type, PRODUCTION) == 0){
39 ifstream conf_file(PATH_CONF_FILE, ifstream::binary); 37 ifstream conf_file(PATH_CONF_FILE, ifstream::binary);
40 parsingSuccessful = reader.parse(conf_file, root); 38 parsingSuccessful = reader.parse(conf_file, root);
@@ -44,47 +42,16 @@ void ServiceWindowGenerationFromText::setPathContents() { @@ -44,47 +42,16 @@ void ServiceWindowGenerationFromText::setPathContents() {
44 string attr = root.get("storage", PATH_VBOX_UPLOADS).asString(); 42 string attr = root.get("storage", PATH_VBOX_UPLOADS).asString();
45 this->path_contents = new char[MAX_SIZE_PATH]; 43 this->path_contents = new char[MAX_SIZE_PATH];
46 strcpy(this->path_contents, attr.c_str()); 44 strcpy(this->path_contents, attr.c_str());
47 - this->path_uploads = PATH_VBOX_UPLOADS;  
48 }else{ 45 }else{
49 throw ServiceException("Invalid client!"); 46 throw ServiceException("Invalid client!");
50 } 47 }
51 } 48 }
52 49
53 -void ServiceWindowGenerationFromText::setPathLibras() {  
54 - char* final_path = new char[MAX_SIZE_PATH];  
55 - strcpy(final_path, this->path_uploads);  
56 - strcat(final_path, this->user_id);  
57 - strcat(final_path, "/video_libras.ts");  
58 -  
59 - this->path_libras = final_path;  
60 -}  
61 -  
62 -// void ServiceWindowGenerationFromText::setBackground() {  
63 -// if(this->transparency == 0) { //pega dicionario com BackGround opaco  
64 -// char* dicPath;  
65 -// dicPath = getenv("DIC_LIBRAS");  
66 -// if(dicPath != NULL)  
67 -// sincronizador = new Synchronizer(dicPath, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
68 -// else  
69 -// sincronizador = new Synchronizer(BASEDIR, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
70 -  
71 -// } else if(this->transparency == 1) { //pega dicionario com BackGround transparente  
72 -// char* dicTPath;  
73 -// dicTPath = getenv("DICTRANSP_LIBRAS");  
74 -// if(dicTPath != NULL)  
75 -// sincronizador = new Synchronizer(dicTPath, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
76 -// else{  
77 -// sincronizador = new Synchronizer(BASEDIRTRANSP, EXTENSAO_DICIONARIO, this->path_libras, this->transparency);  
78 -// }  
79 -// }  
80 -// }  
81 -  
82 void ServiceWindowGenerationFromText::setSizeOfSubtitles(int sub_size) { 50 void ServiceWindowGenerationFromText::setSizeOfSubtitles(int sub_size) {
83 numero_legendas = sub_size; 51 numero_legendas = sub_size;
84 if (legendas_enviadas >= numero_legendas){ 52 if (legendas_enviadas >= numero_legendas){
85 sendGlosa(END_NOTIFICATION); 53 sendGlosa(END_NOTIFICATION);
86 waitVideoGeneration(); 54 waitVideoGeneration();
87 - //sincronizador->stop();  
88 } 55 }
89 } 56 }
90 57
@@ -96,11 +63,6 @@ void ServiceWindowGenerationFromText::notifyLine(unsigned char* line) { @@ -96,11 +63,6 @@ void ServiceWindowGenerationFromText::notifyLine(unsigned char* line) {
96 notifyTranslator(line); 63 notifyTranslator(line);
97 } 64 }
98 65
99 -// void ServiceWindowGenerationFromText::notifyEndOfSynchronization() {  
100 -// transcodeVideoToMp4();  
101 -// this->running = false;  
102 -// }  
103 -  
104 void ServiceWindowGenerationFromText::notifyTranslation(vector<string> * glosas) { 66 void ServiceWindowGenerationFromText::notifyTranslation(vector<string> * glosas) {
105 for (int i = 0; i < glosas->size(); i++) { 67 for (int i = 0; i < glosas->size(); i++) {
106 locale loc; 68 locale loc;
@@ -109,7 +71,6 @@ void ServiceWindowGenerationFromText::notifyTranslation(vector&lt;string&gt; * glosas) @@ -109,7 +71,6 @@ void ServiceWindowGenerationFromText::notifyTranslation(vector&lt;string&gt; * glosas)
109 glosa_lower += std::tolower(glosas->at(i).at(k), loc); 71 glosa_lower += std::tolower(glosas->at(i).at(k), loc);
110 } 72 }
111 sendGlosa(glosa_lower); 73 sendGlosa(glosa_lower);
112 - //sincronizador->recebeglosa(glosa_lower, 1000);  
113 } 74 }
114 legendas_enviadas++; 75 legendas_enviadas++;
115 } 76 }
@@ -133,19 +94,10 @@ void ServiceWindowGenerationFromText::initialize() { @@ -133,19 +94,10 @@ void ServiceWindowGenerationFromText::initialize() {
133 extratorTXT->addListener(this); 94 extratorTXT->addListener(this);
134 extratorTXT->setFilePath(path_input); 95 extratorTXT->setFilePath(path_input);
135 96
136 - setPathLibras();  
137 -  
138 tradutor->addListener(this); 97 tradutor->addListener(this);
139 98
140 connectToUnity(); 99 connectToUnity();
141 100
142 - //setBackground();  
143 -  
144 - // uint64_t pcr_base = (uint64_t) 1000; //FIXME: macro  
145 - // sincronizador->setPCRBase(pcr_base);  
146 - // sincronizador->addListener(this);  
147 - // sincronizador->Start();  
148 -  
149 try{ 101 try{
150 extratorTXT->initialize(); 102 extratorTXT->initialize();
151 }catch(ExtratorException ex){ 103 }catch(ExtratorException ex){
@@ -164,7 +116,6 @@ void ServiceWindowGenerationFromText::sendGlosa(string glosa) { @@ -164,7 +116,6 @@ void ServiceWindowGenerationFromText::sendGlosa(string glosa) {
164 116
165 char* ok_core = new char[3]; 117 char* ok_core = new char[3];
166 core_socket->read(ok_core, 3); //aguarda o unity confirmar o recebimento da glosa 118 core_socket->read(ok_core, 3); //aguarda o unity confirmar o recebimento da glosa
167 - //cout << "Recebi: " << ok_core << endl;  
168 delete [] ok_core; 119 delete [] ok_core;
169 } 120 }
170 121
@@ -185,7 +136,6 @@ void ServiceWindowGenerationFromText::waitVideoGeneration() { @@ -185,7 +136,6 @@ void ServiceWindowGenerationFromText::waitVideoGeneration() {
185 try{ 136 try{
186 do{ 137 do{
187 core_socket->read(endgeneration, sizeof(endgeneration)); 138 core_socket->read(endgeneration, sizeof(endgeneration));
188 - //usleep(500000);  
189 }while(strcmp(endgeneration, END_NOTIFICATION) != 0); 139 }while(strcmp(endgeneration, END_NOTIFICATION) != 0);
190 core_socket->close(); 140 core_socket->close();
191 this->running = false; 141 this->running = false;
@@ -194,16 +144,6 @@ void ServiceWindowGenerationFromText::waitVideoGeneration() { @@ -194,16 +144,6 @@ void ServiceWindowGenerationFromText::waitVideoGeneration() {
194 } 144 }
195 } 145 }
196 146
197 -void ServiceWindowGenerationFromText::transcodeVideoToMp4(){  
198 - DPRINTF("[AGUARDE] Transcodificando o vídeo de Libras...\n");  
199 - string command = "ffmpeg -i ";  
200 - command.append(path_libras)  
201 - .append(" -qscale 0 -strict experimental -vcodec libx264 -preset fast -r 30 ").append(" -v quiet ")  
202 - .append(path_contents).append(user_id).append(".mp4");  
203 - //printf("[INFO]: Transcodification command -> %s\n", command.c_str());  
204 - system(command.c_str());  
205 -}  
206 -  
207 void ServiceWindowGenerationFromText::Run(){ 147 void ServiceWindowGenerationFromText::Run(){
208 while(isRunning()){ 148 while(isRunning()){
209 usleep(200000); 149 usleep(200000);
synchronizer/src/include/listenerSynchronizer.h
@@ -1,14 +0,0 @@ @@ -1,14 +0,0 @@
1 -#ifndef _LISTENER_SYNCHRONIZER_H  
2 -#define _LISTENER_SYNCHRONIZER_H  
3 -  
4 -#include <string>  
5 -#include <stdint.h>  
6 -  
7 -using namespace std;  
8 -  
9 -class ListenerSynchronizer {  
10 -public:  
11 - virtual void notifyEndOfSynchronization() = 0;  
12 -};  
13 -  
14 -#endif  
15 \ No newline at end of file 0 \ No newline at end of file
synchronizer/src/include/synchronizer.h
@@ -1,126 +0,0 @@ @@ -1,126 +0,0 @@
1 -#ifndef SYNCHRONIZER_H  
2 -#define SYNCHRONIZER_H  
3 -  
4 -#include <stdio.h>  
5 -#include <stdlib.h>  
6 -#include <string.h>  
7 -#include <errno.h>  
8 -#include <time.h>  
9 -#include <unistd.h>  
10 -#include <signal.h>  
11 -#include <fcntl.h>  
12 -#include <sys/time.h>  
13 -#include <arpa/inet.h>  
14 -#include <sys/socket.h>  
15 -#include <vector>  
16 -#include <list>  
17 -#include <iostream>  
18 -#include <fstream>  
19 -#include "dprintf.h"  
20 -#include "jmutex.h"  
21 -#include "jthread.h"  
22 -#include "listenerSynchronizer.h"  
23 -//#include "httpstreamer.h"  
24 -  
25 -#define VIDEO_PADRAO "vlibras_user/dicionario_libras/poseneutra.ts"  
26 -#define VIDEOTRANSP_PADRAO "vlibras_user/dicionarioTransp_libras/poseneutra.ts"  
27 -  
28 -//DICIONARIO 30 fps  
29 -#define PCRPID 256  
30 -#define PESPID 256  
31 -  
32 -//DICIONARIO 45 fps  
33 -//#define PCRPID 4097  
34 -//#define PESPID 4113  
35 -  
36 -using namespace jthread;  
37 -using namespace std;  
38 -  
39 -class Synchronizer : public jthread::Thread {  
40 -  
41 -private:  
42 - bool hastext;  
43 - int taxa;  
44 - int filefd;  
45 - vector <char*> *videos;  
46 - int devicetv;  
47 -  
48 - uint64_t pcrBaseGeral;  
49 - uint64_t ultimoPCRBase;  
50 - uint64_t ultimoPCRBaseMod;  
51 - int64_t pcr_inicial;  
52 - int mediaDiferencaPCR;  
53 - int contagemPCR;  
54 -  
55 - ofstream escreveAux;  
56 - char* extensao;  
57 - char* baseDir;  
58 -  
59 - int64_t tempo_poseneutra;  
60 - vector <int64_t> *vector_pts;  
61 - int flagPrimeiroArquivo;  
62 -  
63 - list<ListenerSynchronizer*> * listeners;  
64 - Mutex* mutex_sync;  
65 - Mutex* mutexi;  
66 -  
67 - char* path_libras;  
68 - int transparency;  
69 -  
70 - int count_tasks;  
71 - bool service_running;  
72 -  
73 -  
74 -public:  
75 - Synchronizer();  
76 - Synchronizer(/*int64_t pcr_inicial, */char*baseDir, char* extensao, char* path_libras, int transparency);  
77 - virtual ~Synchronizer();  
78 -  
79 - void setPCRBase(uint64_t pcr_base);  
80 -  
81 - void Run();  
82 - void stop();  
83 -  
84 - void soletraGlosa(string glosa, int64_t pts);//em fase de teste  
85 - void recebeglosa(char * video, int tam, int64_t pts);  
86 - void recebeglosa(string glosa, int64_t pts);  
87 - char * getproximoarquivo();  
88 -  
89 - void msleep(long tsleep, long *desconto);  
90 -  
91 - int gettaxa();  
92 - int64_t getMilisegundos();  
93 -  
94 - void settaxa(int taxa);  
95 -  
96 - vector <char*> * getVideos();  
97 -  
98 - void analisaPCR(unsigned char * pacote);  
99 - void analisaPTSDTS(unsigned char *pacote);  
100 - int getPid(unsigned char *pacote);  
101 - bool contemAF(unsigned char *pacote);  
102 - int getTamanhoAF(unsigned char *pacote);  
103 - bool contemPCR(unsigned char *pacote);  
104 - uint64_t retornaPCRBase(unsigned char *pacote);  
105 - void setPCRBase(unsigned char *pacote, uint64_t pcrbase);  
106 - bool contemPayloadStartIndicator(unsigned char *pacote);  
107 - bool contemPayloadData(unsigned char *pacote);  
108 - bool verificaPESStartCode(unsigned char *PESPacket);  
109 - bool verificaPESStreamID(unsigned char *PESPacket);  
110 - bool contemPTS(unsigned char *PESPacket);  
111 - bool contemDTS(unsigned char *PESPacket);  
112 - uint64_t retornaPTS(unsigned char *PESPacket);  
113 - uint64_t retornaDTS(unsigned char *PESPacket);  
114 - void setNovoPTS(unsigned char *pacote, uint64_t PTS);  
115 - void setNovoDTS(unsigned char *pacote, uint64_t DTS);  
116 - void escrevePacote(char *pacote);  
117 - int escrevePacote(int * descritor, char *pacote, int size);  
118 -  
119 - virtual void addListener(ListenerSynchronizer* listener);  
120 - virtual void removeListener(ListenerSynchronizer* listener);  
121 - virtual void notifyListeners();  
122 -  
123 -};  
124 -  
125 -  
126 -#endif /* SYNCHRONIZER_H */  
synchronizer/src/synchronizer.cpp
@@ -1,568 +0,0 @@ @@ -1,568 +0,0 @@
1 -#include "synchronizer.h"  
2 -  
3 -Synchronizer::Synchronizer() {  
4 - baseDir = (char*) "vlibras_user/dicionario_libras/";  
5 - extensao = (char*) ".ts";  
6 - filefd = 0;  
7 - videos = new vector <char*> ();  
8 - vector_pts = new vector <int64_t > ();  
9 - this->mutexi = new Mutex();  
10 -  
11 - this->baseDir = new char[strlen(baseDir) + 1];  
12 - strcpy(this->baseDir, baseDir);  
13 -  
14 - this->extensao = new char[strlen(extensao) + 1];  
15 - strcpy(this->extensao, extensao);  
16 - flagPrimeiroArquivo = 1;  
17 - listeners = new list<ListenerSynchronizer*>();  
18 - this->path_libras = path_libras;  
19 - DPRINTF("Done!\n")  
20 -}  
21 -  
22 -Synchronizer::Synchronizer(/*int64_t pcr_inicial, */char* baseDir, char* extensao, char* path_libras, int transparency) {  
23 -  
24 - hastext = true;  
25 - count_tasks = 0; // Usado no teste de Eduardo!  
26 - service_running = true;  
27 -  
28 - this->pcr_inicial = -1;  
29 - this->tempo_poseneutra = 120000;  
30 -  
31 - this->transparency = transparency;  
32 -  
33 - //cout << "\n\nTransparencia: " << this->transparency << "\n";  
34 -  
35 - this->baseDir = new char[strlen(baseDir) + 1];  
36 - strcpy(this->baseDir, baseDir);  
37 -  
38 - //cout << "\n\n#######BASEDIR: " << this->baseDir << "\n";  
39 -  
40 - this->extensao = new char[strlen(extensao) + 1];  
41 - strcpy(this->extensao, extensao);  
42 -  
43 - filefd = 0;  
44 - videos = new vector <char*> ();  
45 - pcrBaseGeral = 0;  
46 - ultimoPCRBase = 0;  
47 - mediaDiferencaPCR = 0;  
48 - contagemPCR = 0;  
49 - vector_pts = new vector <int64_t > ();  
50 - flagPrimeiroArquivo = 1;  
51 - listeners = new list<ListenerSynchronizer*>();  
52 - this->path_libras = new char[strlen(path_libras) + 1];  
53 - strcpy(this->path_libras, path_libras);  
54 - //cout << "-> path libras sync: " << path_libras << endl;  
55 - this->mutex_sync = new Mutex();  
56 - this->mutexi = new Mutex();  
57 -  
58 - DPRINTF("Done!\n")  
59 -}  
60 -  
61 -Synchronizer::~Synchronizer() {  
62 - free(videos);  
63 - listeners->clear();  
64 - delete listeners;  
65 - if (escreveAux.is_open()) escreveAux.close();  
66 - DDDPRINTF("Synchronizer finalized!\n");  
67 -  
68 -}  
69 -  
70 -string toLower(string strr) {  
71 - char str[100];  
72 - string ret;  
73 - strcpy(str, strr.c_str());  
74 - int differ = 'A' - 'a';  
75 - char ch;  
76 - int ii = strlen(str);  
77 - for (int i = 0; i < ii; i++) {  
78 - strncpy(&ch, str + i, 1);  
79 - if (ch >= 'A' && ch <= 'Z') {  
80 - ch = ch - differ;  
81 - memcpy(str + i, &ch, 1);  
82 - }  
83 - }  
84 - ret = str;  
85 - return ret;  
86 -}  
87 -  
88 -void Synchronizer::setPCRBase(uint64_t pcr_base){  
89 - this->pcr_inicial = pcr_base;  
90 -}  
91 -  
92 -char* converteString(string palavra) {  
93 -  
94 - const char* aux = new char[palavra.size()];  
95 - aux = palavra.c_str();  
96 - char * aux2 = (char*) aux;  
97 -  
98 - return aux2;  
99 -}  
100 -  
101 -/* Método utilizado pelos serviços (Services Generation) para informar que  
102 - este processo pode ser finalizado após a demanda atual, isto é, depois  
103 - que terminar de gerar os vídeos que estão na fila.  
104 - */  
105 -void Synchronizer::stop() {  
106 - //printf("> O Synchronizer recebeu a mensagem de que pode terminar a execução\n");  
107 - service_running = false;  
108 -}  
109 -  
110 -int Synchronizer::gettaxa() {  
111 - return taxa;  
112 -}  
113 -  
114 -void Synchronizer::settaxa(int taxa) {  
115 - this->taxa = taxa;  
116 -}  
117 -  
118 -vector <char*> * Synchronizer::getVideos() {  
119 - return videos;  
120 -}  
121 -  
122 -/* Trata a glosa de modo single, ou seja, havendo sinal ou soletrando,  
123 - este método é chamado individualmente em cada sinal correspondente.  
124 - */  
125 -void Synchronizer::recebeglosa(char * video, int tam, int64_t pts) {  
126 - mutexi->Lock();  
127 - char *video_copy = new char [tam + 1];  
128 - strcpy(video_copy, video);  
129 - videos->push_back(video_copy);  
130 - count_tasks++;  
131 - vector_pts->push_back(pts);  
132 - mutexi->Unlock();  
133 -}  
134 -  
135 -int64_t Synchronizer::getMilisegundos() {  
136 - struct timeval tempo;  
137 - gettimeofday(&tempo, NULL);  
138 - return (int64_t) tempo.tv_sec * 1000 + tempo.tv_usec / 1000;  
139 -}  
140 -  
141 -void Synchronizer::msleep(long tsleep, long *desconto) {  
142 - struct timeval tempo;  
143 - long deltaTAux = 0;  
144 - long tusleep = 0;  
145 - int64_t tAux = 0, tAux2 = 0;  
146 -  
147 - tsleep -= *desconto;  
148 -  
149 - tusleep = tsleep / 1000;  
150 -  
151 - gettimeofday(&tempo, NULL);  
152 - tAux = tempo.tv_sec * 1000 + tempo.tv_usec / 1000;  
153 -  
154 - while ((tsleep > 0) && (deltaTAux <= tsleep)) {  
155 - usleep(tusleep);  
156 -  
157 - gettimeofday(&tempo, NULL);  
158 - tAux2 = tempo.tv_sec * 1000 + tempo.tv_usec / 1000;  
159 -  
160 - deltaTAux = (tAux2 - tAux)*1000;  
161 - }  
162 -  
163 - //desconto = (deltaTAux - (tsleep/1000))*1000;  
164 - *desconto = (deltaTAux - tsleep);  
165 -}  
166 -  
167 -char* proximo = new char[1000];  
168 -char* proximo2 = new char[1000];  
169 -  
170 -char * Synchronizer::getproximoarquivo() {  
171 - char * video = new char[1000];  
172 - string s1, s2, s3;  
173 - video = NULL;  
174 - list<char *>::iterator it;  
175 - //proximo = NULL;  
176 -  
177 - if (videos->size() == 0) {  
178 - if(this->transparency == 0){  
179 - return VIDEO_PADRAO;  
180 - }else{  
181 - return VIDEOTRANSP_PADRAO;  
182 - }  
183 - }  
184 -  
185 - mutexi->Lock();  
186 - video = videos->front();  
187 -  
188 - videos->erase(videos->begin());  
189 - mutexi->Unlock();  
190 -  
191 - if (video == NULL) {  
192 - if(this->transparency == 0){  
193 - return VIDEO_PADRAO;  
194 - }else{  
195 - return VIDEOTRANSP_PADRAO;  
196 - }  
197 - }else{  
198 - return video;  
199 - }  
200 -}  
201 -  
202 -void Synchronizer::analisaPCR(unsigned char *pacote) {  
203 - // preciso ter o PID de PCR  
204 - if ((getPid(pacote) != PCRPID) || (!contemAF(pacote))  
205 - //if ((!contemAF(pacote))  
206 - || (getTamanhoAF(pacote) == 0) || (!contemPCR(pacote))) {  
207 -  
208 -  
209 - if (contemPCR(pacote)){  
210 - //printf("Encontrei PCR - PID:%d\n", getPid(pacote));  
211 -  
212 - }  
213 - return;  
214 - }  
215 -  
216 - uint64_t pcrBase = retornaPCRBase(pacote);  
217 -  
218 - if (mediaDiferencaPCR != 0 && contagemPCR == 0) { // nesse caso esse eh o primeiro PCR de um novo video  
219 - //printf("Encontrei o primeiro PCR de um video!\n");  
220 - setPCRBase(pacote, pcrBaseGeral + mediaDiferencaPCR); // tem que multiplicar por 2 o mediaDiferencaPCR?  
221 - ultimoPCRBaseMod = pcrBaseGeral + mediaDiferencaPCR;  
222 - mediaDiferencaPCR = 0;  
223 - } else if (mediaDiferencaPCR == 0 && contagemPCR == 0 && flagPrimeiroArquivo == 1) {  
224 - flagPrimeiroArquivo = 0;  
225 - setPCRBase(pacote, pcr_inicial + mediaDiferencaPCR); // tem que multiplicar por 2 o mediaDiferencaPCR?  
226 - contagemPCR++;  
227 - sleep(1);  
228 - ultimoPCRBaseMod = pcr_inicial + mediaDiferencaPCR;  
229 -  
230 - }  
231 - else {  
232 -  
233 - mediaDiferencaPCR = (ultimoPCRBase > 0) ? pcrBase - ultimoPCRBase : 0;  
234 - contagemPCR++;  
235 -  
236 - //if (pcrBaseGeral != 0) { // se nao for o primeiro video //2 - Mudei para o serviço  
237 - setPCRBase(pacote, ultimoPCRBaseMod + mediaDiferencaPCR);  
238 - ultimoPCRBaseMod += mediaDiferencaPCR;  
239 - //}  
240 - }  
241 -  
242 - ultimoPCRBase = pcrBase;  
243 -  
244 -}  
245 -  
246 -void Synchronizer::analisaPTSDTS(unsigned char *pacote) {  
247 - int inicioPESData = 4;  
248 - if (contemAF(pacote)) inicioPESData += getTamanhoAF(pacote) + 1;  
249 -  
250 - if ((!verificaPESStartCode(pacote + inicioPESData)) ||  
251 - (!verificaPESStreamID(pacote + inicioPESData)) ||  
252 - (!contemPTS(pacote + inicioPESData))) {  
253 -  
254 - return;  
255 - }  
256 -  
257 - uint64_t PTS = retornaPTS(pacote + inicioPESData);  
258 - int diferenca = PTS - ultimoPCRBase;  
259 - // confirmar se isso aqui SEMPRE eh chamado depois de pelo menos um PCR ser encontrado, principalmente  
260 - // no inicio do video  
261 - if (ultimoPCRBaseMod != 0)  
262 - setNovoPTS(pacote + inicioPESData, ultimoPCRBaseMod + diferenca);  
263 - else  
264 - setNovoPTS(pacote + inicioPESData, pcrBaseGeral + diferenca);  
265 -  
266 - if (!contemDTS(pacote + inicioPESData)) return;  
267 -  
268 - uint64_t DTS = retornaDTS(pacote + inicioPESData);  
269 - diferenca = DTS - ultimoPCRBase;  
270 -  
271 - if (ultimoPCRBaseMod != 0)  
272 - setNovoDTS(pacote + inicioPESData, ultimoPCRBaseMod + diferenca);  
273 - else  
274 - setNovoDTS(pacote + inicioPESData, pcrBaseGeral + diferenca);  
275 -}  
276 -  
277 -int Synchronizer::getPid(unsigned char *pacote) {  
278 - return ((pacote[1] & 0x1F) << 8) | pacote[2];  
279 -}  
280 -  
281 -bool Synchronizer::contemAF(unsigned char *pacote) {  
282 - return pacote[3] & 0x20;  
283 -}  
284 -  
285 -int Synchronizer::getTamanhoAF(unsigned char *pacote) {  
286 - return pacote[4];  
287 -}  
288 -  
289 -bool Synchronizer::contemPCR(unsigned char *pacote) {  
290 - return pacote[5] & 0x10;  
291 -}  
292 -  
293 -uint64_t Synchronizer::retornaPCRBase(unsigned char *pacote) {  
294 - uint64_t pcrbase = 0;  
295 -  
296 - pcrbase = (uint64_t) pacote[6] << 25 | pacote[7] << 17 | pacote[8] << 9  
297 - | pacote[9] << 1 | (pacote[10] & 0x80) >> 7;  
298 -  
299 - return pcrbase;  
300 -}  
301 -  
302 -void Synchronizer::setPCRBase(unsigned char *pacote, uint64_t pcrbase) {  
303 - pacote[6] = pcrbase >> 25;  
304 - pacote[7] = pcrbase >> 17;  
305 - pacote[8] = pcrbase >> 9;  
306 - pacote[9] = pcrbase >> 1;  
307 - if ((pcrbase << 63) != 0)  
308 - pacote[10] = pacote[10] | 0x80;  
309 - else  
310 - pacote[10] = pacote[10] & 0x7F;  
311 -}  
312 -  
313 -bool Synchronizer::contemPayloadStartIndicator(unsigned char *pacote) {  
314 - return pacote[1] & 0x40;  
315 -}  
316 -  
317 -bool Synchronizer::contemPayloadData(unsigned char *pacote) {  
318 - return pacote[3] & 0x10;  
319 -}  
320 -  
321 -bool Synchronizer::verificaPESStartCode(unsigned char *PESPacket) {  
322 - return (((PESPacket[0] << 16) | (PESPacket[1] << 8) | (PESPacket[2]))  
323 - == 0x000001) ? 1 : 0;  
324 -}  
325 -  
326 -bool Synchronizer::verificaPESStreamID(unsigned char *PESPacket) {  
327 - int stream_id = PESPacket[3];  
328 -  
329 - return ((stream_id != 0xBC) && (stream_id != 0xBE) && (stream_id != 0xBF)  
330 - && (stream_id != 0xF0) && (stream_id != 0xF1) && (stream_id != 0xFF)  
331 - && (stream_id != 0xF2) && (stream_id != 0xF8));  
332 -}  
333 -  
334 -bool Synchronizer::contemPTS(unsigned char *PESPacket) {  
335 - //printf("\nTem PTS: %d\n", PESPacket[7] & 0x80);  
336 - return PESPacket[7] & 0x80;  
337 -}  
338 -  
339 -bool Synchronizer::contemDTS(unsigned char *PESPacket) {  
340 - return PESPacket[7] & 0x40;  
341 -}  
342 -  
343 -uint64_t Synchronizer::retornaPTS(unsigned char *PESPacket) {  
344 - uint64_t PTS = (uint64_t) ((PESPacket[9] & 0x0E) >> 1) << 30 |  
345 - (PESPacket[10] << 22) |  
346 - (((PESPacket[11] & 0xFE) >> 1) << 15) |  
347 - (PESPacket[12] << 7) |  
348 - ((PESPacket[13] & 0xFE) >> 1);  
349 - return PTS;  
350 -}  
351 -  
352 -uint64_t Synchronizer::retornaDTS(unsigned char *PESPacket) {  
353 - uint64_t DTS = (uint64_t) ((PESPacket[14] & 0x0E) >> 1) << 30 |  
354 - (PESPacket[15] << 22) |  
355 - (((PESPacket[16] & 0xFE) >> 1) << 15) |  
356 - (PESPacket[17] << 7) |  
357 - ((PESPacket[18] & 0xFE) >> 1);  
358 - return DTS;  
359 -}  
360 -  
361 -void Synchronizer::setNovoPTS(unsigned char *pacote, uint64_t PTS) {  
362 - pacote[9] = pacote[9] & 0xF1;  
363 - pacote[9] = pacote[9] | ((PTS >> 30) << 1);  
364 - pacote[10] = PTS >> 22;  
365 - pacote[11] = pacote[11] & 0x1;  
366 - pacote[11] = pacote[11] | ((PTS >> 15) << 1);  
367 - pacote[12] = PTS >> 7;  
368 - pacote[13] = pacote[13] & 0x1;  
369 - pacote[13] = pacote[13] | PTS << 1;  
370 -}  
371 -  
372 -void Synchronizer::setNovoDTS(unsigned char *pacote, uint64_t DTS) {  
373 - pacote[14] = pacote[14] & 0xF1;  
374 - pacote[14] = pacote[14] | ((DTS >> 30) << 1);  
375 - pacote[15] = DTS >> 22;  
376 - pacote[16] = pacote[16] & 0x1;  
377 - pacote[16] = pacote[16] | ((DTS >> 15) << 1);  
378 - pacote[17] = DTS >> 7;  
379 - pacote[18] = pacote[18] & 0x1;  
380 - pacote[18] = pacote[18] | DTS << 1;  
381 -}  
382 -  
383 -void Synchronizer::escrevePacote(char *pacote) {  
384 - if (!escreveAux.is_open()) {  
385 - escreveAux.open(this->path_libras, ios::out | ios::binary);  
386 -  
387 - }  
388 - //printf("tamanho do pacote = %d\n\n", strlen(pacote));  
389 - escreveAux.write(pacote, 188*70);  
390 - //printf(" OK!\n\n");  
391 -  
392 -}  
393 -  
394 -int Synchronizer::escrevePacote(int * descritor, char *pacote, int size) {  
395 - if (*descritor < 0) {// ainda não abri  
396 - *descritor = open(this->path_libras, O_WRONLY | O_CREAT, 0660);  
397 - if (descritor < 0) {  
398 - printf("Can't open output file\n");  
399 - return -1;  
400 - }  
401 - }  
402 - return write(*descritor, pacote, size);  
403 -}  
404 -  
405 -void ouch(int sig) {  
406 - printf("\nSinal Capturado %d", sig);  
407 - (void) signal(SIGPIPE, SIG_DFL);  
408 -  
409 -}  
410 -  
411 -void Synchronizer::soletraGlosa(string glosa, int64_t pts) {  
412 -  
413 - //string path = (string) baseDir + glosa + (string) extensao;  
414 - //cout << "\n***Glosa NAO ENCONTRADA: " << glosa << endl;  
415 - /*mutexi->Lock();  
416 - int file = open(converteString(path), O_RDONLY);  
417 - mutexi->Unlock();*/  
418 - //if (file != NULL) {  
419 - for (int i = 0; i < glosa.length(); i++) {  
420 - if (glosa[i] == '[')  
421 - return;  
422 - char c = glosa[i];  
423 - if (c >= 97 && c <= 122) {  
424 - string path2 = (string) baseDir + glosa[i] + (string) extensao;  
425 - char* path2_char = converteString(path2);  
426 - recebeglosa(converteString(path2), strlen(path2_char), pts);  
427 - }  
428 - }  
429 - //close(file);  
430 - //} else {  
431 - // printf("*** ERRO ao abrir o arquivo.");  
432 - //}  
433 -  
434 -}  
435 -  
436 -/* Utilizado no teste de Eduardo */  
437 -void Synchronizer::recebeglosa(string glosa, int64_t pts) {  
438 - glosa = toLower(glosa);  
439 -  
440 - size_t found;  
441 - found=glosa.rfind("dl");  
442 - if (found == 0)  
443 - glosa = glosa.substr(2, glosa.length());  
444 -  
445 - string path = (string) baseDir + glosa.c_str() + (string) extensao;  
446 - char* urlchar = converteString(path);  
447 - mutexi->Lock();  
448 - FILE *f = fopen(urlchar, "r");  
449 - mutexi->Unlock();  
450 - if (f == NULL) {  
451 - soletraGlosa(glosa, pts);  
452 - } else {  
453 - fclose(f);  
454 - recebeglosa(urlchar, strlen(urlchar), pts);  
455 - }  
456 -  
457 -}  
458 -  
459 -  
460 -void Synchronizer::addListener(ListenerSynchronizer* listener) {  
461 - listeners->push_back(listener);  
462 -}  
463 -  
464 -void Synchronizer::removeListener(ListenerSynchronizer* listener) {  
465 - listeners->remove(listener);  
466 -}  
467 -  
468 -void Synchronizer::notifyListeners() {  
469 - for (list<ListenerSynchronizer*>::iterator i = listeners->begin(); i != listeners->end(); i++) {  
470 - (*i)->notifyEndOfSynchronization();  
471 - }  
472 -}  
473 -  
474 -void Synchronizer::Run() {  
475 -  
476 - pcrBaseGeral = ultimoPCRBase = mediaDiferencaPCR = contagemPCR = ultimoPCRBaseMod = 0;  
477 - int64_t t0 = 0, tf = 0;  
478 - int64_t pts_run;  
479 - int cnt, finalcnt, bitrate = 1121600, deltaT = 0;  
480 - int bufferSize = 7 * 188;  
481 - char * buff = new char[bufferSize];  
482 -  
483 - char * arquivo;  
484 -  
485 - while (videos->size() == 0){  
486 - usleep(50000); //50ms  
487 - }  
488 -  
489 - if(this->transparency == 0)  
490 - arquivo = VIDEO_PADRAO;  
491 - else  
492 - arquivo = VIDEOTRANSP_PADRAO;  
493 -  
494 - mutexi->Lock();  
495 - filefd = open(arquivo, O_RDONLY);  
496 - mutexi->Unlock();  
497 -  
498 - if (filefd < 0)  
499 - cout << "NAO CONSEGUI ABRIR O ARQUIVO2 - " << arquivo << endl;  
500 -  
501 - (void) signal(SIGPIPE, ouch);  
502 -  
503 - int videos_processed = 0;  
504 -  
505 - int desc_out = -1;  
506 -  
507 - while (videos_processed <= count_tasks || service_running) {  
508 -  
509 - cnt = read(filefd, buff, bufferSize);  
510 -  
511 - // atualiza os valores de PCR e PTS/DTS para cada video  
512 - for (int i = 0; i < cnt / 188; i++) {  
513 - analisaPCR((unsigned char*) buff + (188 * i));  
514 - analisaPTSDTS((unsigned char*) buff + (188 * i));  
515 - }  
516 -  
517 - escrevePacote(&desc_out,buff,cnt);  
518 - free(buff);  
519 - buff = new char[bufferSize];  
520 -  
521 - finalcnt = cnt;  
522 - if (finalcnt == 0) {  
523 -  
524 - while (videos->size() == 0 && service_running) { // esperando arquivos do serviço  
525 - usleep(10000);  
526 - }  
527 -  
528 - pts_run = vector_pts->front();  
529 - if (ultimoPCRBaseMod + tempo_poseneutra < pts_run) {  
530 - if(this->transparency == 0){  
531 - arquivo = VIDEO_PADRAO;  
532 - }else{  
533 - arquivo = VIDEOTRANSP_PADRAO;  
534 - }  
535 -  
536 - }else {  
537 - if (vector_pts->size() > 0) {  
538 - vector_pts->erase(vector_pts->begin());  
539 - arquivo = getproximoarquivo();  
540 - }  
541 - videos_processed++;  
542 - }  
543 -  
544 - close(filefd);  
545 - filefd = open(arquivo, O_RDONLY);  
546 - if (ultimoPCRBase != 0) {  
547 - if (ultimoPCRBaseMod != 0) {  
548 - pcrBaseGeral = ultimoPCRBaseMod;  
549 - } else {  
550 - pcrBaseGeral = ultimoPCRBase;  
551 - }  
552 - contagemPCR = 0;  
553 - ultimoPCRBaseMod = 0;  
554 - }  
555 - } else if (finalcnt == -1) {  
556 - printf("Erro: Finalizando Sincronizador!\n");  
557 - this->stop();  
558 - }  
559 - } // Fim do while!  
560 -  
561 - //fsync(desc_out);  
562 - close(filefd);  
563 - close(desc_out);  
564 - notifyListeners();  
565 -  
566 -}  
567 -  
568 -