#include #include #include #include #include "codificadormanager.h" #include "librasdatamessage.h" #include "librascontrolmessage.h" #include "librassection.h" #include "tspacket.h" #include "jdatagramsocket.h" using namespace std; using namespace jsocket; namespace Codificador { CodificadorManager* CodificadorManager::ccmanager = 0; CodificadorManager::CodificadorManager() { cc = 0; packets = new unsigned char[70000]; //pid = 0x63; version_number = 1; } CodificadorManager* CodificadorManager::getInstance() { if (ccmanager == NULL) ccmanager = new CodificadorManager(); return ccmanager; } CodificadorManager::~CodificadorManager() { printf("Deletando ccManager1... \n"); if (packets) { delete []packets; packets = NULL; } printf("Deletando ccManager2... \n"); ccmanager == NULL; } int CodificadorManager::getPid() { return this->pid; } void CodificadorManager::setPid(int pid) { this->pid = pid; } void CodificadorManager::setResolution(string resolution) { this->resolution = resolution; } void CodificadorManager::setDictionaryVersion(int dictionaryversion) { this->dictionaryversion = dictionaryversion; } void CodificadorManager::setDPH(int dph) { this->dph = dph; } void CodificadorManager::setDPV(int dpv) { this->dpv = dpv; } void CodificadorManager::setDFW(int dfw) { this->dfw = dfw; } void CodificadorManager::setDFH(int dfh) { this->dfh = dfh; } void CodificadorManager::setPortaOut(int porta) { this->portaOut = porta; } void CodificadorManager::setIp(string ip) { this->ip = ip; } unsigned char *CodificadorManager::generateSection(unsigned int type, unsigned char *msg, int n, int *numPackets) { unsigned short len; unsigned char *pesBytes; LibrasSection *librSection = NULL; if (type == LibrasDataMessage::LIBRAS_DATA_TYPE) { if(version_number == 32) version_number = 1; LibrasDataMessage *librData = new LibrasDataMessage((unsigned char *) msg, (unsigned short) n); librSection = new LibrasSection(librData, type, version_number); pesBytes = librSection->generateBytes(&len); *numPackets = generateTsPacket(packets, pid, pesBytes); delete librData; } else if (type == LibrasControlMessage::LIBRAS_MGM_TYPE) { if(version_number == 32) version_number = 1; LibrasControlMessage *librctrMess = new LibrasControlMessage(); librctrMess->setResolution(resolution); librctrMess->setDictionaryVersion((unsigned char)dictionaryversion); librctrMess->setDPH((unsigned short)dph); librctrMess->setDPV((unsigned short)dpv); librctrMess->setDFH((unsigned short)dfh); librctrMess->setDFW((unsigned short)dfw); librSection = new LibrasSection(librctrMess, type, version_number); pesBytes = librSection->generateBytes(&len); /*printf("PES Packet... \n"); for (int j = 0; j < len; j++){ printf("%x ", pesBytes[j]); } printf("\n");*/ *numPackets = generateTsPacket(packets, pid, pesBytes); delete librctrMess; } else { return NULL; } version_number++; delete []pesBytes; delete librSection; return packets; } int CodificadorManager::sendToOutput(unsigned char *pes, int numPackets) { //ip do MUX unsigned char *pack; pack = (unsigned char*) malloc (188); create_ts_null_packet(pack); for (int i = 1; i < 7; i++) { memcpy(pes + (i * 188), pack, 188); } DatagramSocket * w_socket = NULL; try { w_socket = new DatagramSocket(ip, portaOut); } catch (...) { printf("\nERRO ao abrir o socket.\n"); return 1; } //for (int i = 0; i < numPackets; i++) //w_socket->Send((char *) pes + (i * 188), 188); w_socket->Send((char *) pes, 1316); w_socket->Close(); delete w_socket; return 0; } }