synchronizer.h 3.19 KB
#ifndef SYNCHRONIZER_H
#define SYNCHRONIZER_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <vector>
#include <list>
#include <iostream>
#include <fstream>
#include "dprintf.h"
#include "jmutex.h"
#include "jthread.h"
#include "listenerSynchronizer.h"
//#include "httpstreamer.h"

#define VIDEO_PADRAO "vlibras_user/dicionario_libras/poseneutra.ts"
#define VIDEOTRANSP_PADRAO "vlibras_user/dicionarioTransp_libras/poseneutra.ts"

//DICIONARIO 30 fps
#define PCRPID 256
#define PESPID 256

//DICIONARIO 45 fps
//#define PCRPID 4097
//#define PESPID 4113

using namespace jthread;
using namespace std;

class Synchronizer : public jthread::Thread {

private:
	bool hastext;
    int taxa;
    int filefd;
    vector <char*> *videos;
    int devicetv;

    uint64_t pcrBaseGeral;
    uint64_t ultimoPCRBase;
    uint64_t ultimoPCRBaseMod;
    int64_t pcr_inicial;
    int mediaDiferencaPCR;
    int contagemPCR;

    ofstream escreveAux;
    char* extensao;
    char* baseDir;

    int64_t tempo_poseneutra;
    vector <int64_t> *vector_pts;
    int flagPrimeiroArquivo;

    list<ListenerSynchronizer*> * listeners;
    Mutex* mutex_sync;
    Mutex* mutexi;

    char* path_libras;
    int transparency;

    int count_tasks;
    bool service_running;
    

public:
    Synchronizer();
    Synchronizer(/*int64_t pcr_inicial, */char*baseDir, char* extensao, char* path_libras, int transparency);
    virtual ~Synchronizer();

    void setPCRBase(uint64_t pcr_base);

    void Run();
    void stop();

    void soletraGlosa(string glosa, int64_t pts);//em fase de teste
    void recebeglosa(char * video, int tam, int64_t pts);
    void recebeglosa(string glosa, int64_t pts);
    char * getproximoarquivo();

    void msleep(long tsleep, long *desconto);

    int gettaxa();
    int64_t getMilisegundos();

    void settaxa(int taxa);

    vector <char*> * getVideos();

    void analisaPCR(unsigned char * pacote);
    void analisaPTSDTS(unsigned char *pacote);
    int getPid(unsigned char *pacote);
    bool contemAF(unsigned char *pacote);
    int getTamanhoAF(unsigned char *pacote);
    bool contemPCR(unsigned char *pacote);
    uint64_t retornaPCRBase(unsigned char *pacote);
    void setPCRBase(unsigned char *pacote, uint64_t pcrbase);
    bool contemPayloadStartIndicator(unsigned char *pacote);
    bool contemPayloadData(unsigned char *pacote);
    bool verificaPESStartCode(unsigned char *PESPacket);
    bool verificaPESStreamID(unsigned char *PESPacket);
    bool contemPTS(unsigned char *PESPacket);
    bool contemDTS(unsigned char *PESPacket);
    uint64_t retornaPTS(unsigned char *PESPacket);
    uint64_t retornaDTS(unsigned char *PESPacket);
    void setNovoPTS(unsigned char *pacote, uint64_t PTS);
    void setNovoDTS(unsigned char *pacote, uint64_t DTS);
    void escrevePacote(char *pacote);
    int escrevePacote(int * descritor, char *pacote, int size);

    virtual void addListener(ListenerSynchronizer* listener);
    virtual void removeListener(ListenerSynchronizer* listener);
    virtual void notifyListeners();

};


#endif /* SYNCHRONIZER_H */