/* * File: RecebeGlosa.cpp * Author: felipe * * Created on 2 de Fevereiro de 2010, 09:43 */ #include "recebeglosa.h" #include "librasdatamessage.h" #include "dprintf.h" #include #include #include #include namespace Codificador { RecebeGlosa::RecebeGlosa(int pd, string rl, int vs, int dh, int dv, int dw, int df, int portOut, string ip) { codificadorManager = CodificadorManager::getInstance(); codificadorManager->setPid(pd); codificadorManager->setResolution(rl); codificadorManager->setDictionaryVersion(vs); codificadorManager->setDPH(dh); codificadorManager->setDPV(dv); codificadorManager->setDFW(dw); codificadorManager->setDFH(df); codificadorManager->setPortaOut(portOut); codificadorManager->setIp(ip); // Inicia o mutex mutex = (pthread_mutex_t *) malloc( sizeof(pthread_mutex_t) ); pthread_mutex_init(mutex, NULL); } RecebeGlosa::~RecebeGlosa() { if (mutex) { int ret = pthread_mutex_destroy(mutex); if (ret) DDDPRINTF("erro destruindo mutex\n"); free(mutex); } } void RecebeGlosa::codifica(vector * glosas) { // Mutex para evitar bug multiplas chamadas dos notificadores pthread_mutex_lock(mutex); unsigned char *nullpackets = new unsigned char [188]; vector::iterator it; unsigned char *data; string valor; int tamanho, numPackets, contNullPackets = 0; //FILE *arq; unsigned char *pes; //arq = fopen ("../libras.ts" , "a"); printf("\nGlosa recebida para codificacao: "); printf("\033[31m"); for (it = glosas->begin(); it < glosas->end(); it++) { cout << *it << " "; } printf("\033[0m"); printf("\n"); for (it = glosas->begin(); it < glosas->end(); it++) { valor = *it; //Gambiarra //if(gambis == 0) { //valor.insert(0, "dl"); //gambis++; //} tamanho = valor.size(); data = (unsigned char*) valor.c_str(); //cout << "Glosa: " << data << endl; if ((tamanho>2) && data[0] == 'd' && data[1] == 'l') { for(int i = 2; i < tamanho; i++) { pes = codificadorManager->generateSection(LibrasDataMessage::LIBRAS_DATA_TYPE,(unsigned char*) &data[i], 1, &numPackets); codificadorManager->sendToOutput(pes, numPackets); //fwrite(pes , 1 , 188 , arq ); } } else { pes = codificadorManager->generateSection(LibrasDataMessage::LIBRAS_DATA_TYPE, data, tamanho, &numPackets); codificadorManager->sendToOutput(pes, numPackets); //fwrite(pes , 1 , 188 , arq ); } } //printf("\nGerando Libras Data Message\n"); //create_ts_null_packet(nullpackets); //while(contNullPackets < 30000) { //contNullPackets++; //fwrite(nullpackets , 1 , 188 , arq ); //} //fclose(arq); pthread_mutex_unlock(mutex); } }