extratorCC.h 2.4 KB
/* 
 * File:   PacketPES.h
 * Author: felipe
 *
 * Created on 19 de Outubro de 2009, 14:49
 */

#ifndef _EXTRATORCC_H
#define	_EXTRATORCC_H

#include <cstring>
#include <string>
#include <list>
#include <pthread.h>
#include <iostream>
#include "ouvinteCC.h"
#include "stdint.h"
#include "ouvinteInput.h"
#include "demuxListener.h"

using namespace std;

class ExtratorCC : /*public OuvinteInput,*/ public DemuxListener  {
public:
    ExtratorCC();
    ~ExtratorCC();
    int packetPES(unsigned char *pacote);
    
    void synchronizedPesData(int PES_packet_data_byte, unsigned char *pacote);
    void dataGroup(int PES_packet_data_byte, unsigned char *pacote);
    void captionData(int PES_packet_data_byte, unsigned char *pacote, int data_group_id);
    void dataUnit(int PES_packet_data_byte, unsigned char *pacote);
    
    int verificaPESStreamIDSynchronized(unsigned char * PESPacket);
    int verificaPESStreamID(unsigned char * PESPacket);
    int verificaPESStartCode(unsigned char * PESPacket);
    int contemAF(unsigned char * pacote);
    int contemDTS(unsigned char * PESPacket);
    int contemESCR(unsigned char * PESPacket);
    int contemPayloadData(unsigned char *pacote);
    int contemPayloadStartIndicator(unsigned char *pacote);
    int contemPCR(unsigned char * pacote);
    int contemPTS(unsigned char * PESPacket);
    int contemDSM(unsigned char * PESPacket);
    int contemAdditional(unsigned char * PESPacket);
    int contemES_rate(unsigned char * PESPacket);
    int contemPES_CRC(unsigned char * PESPacket);
    int contemPES_extension(unsigned char * PESPacket);
    short unsigned GetTamanhoAF(unsigned char *pacote);
    
    int64_t extractPTS(unsigned char * PESPacket);
    int64_t extractDTS(unsigned char * PESPacket);

    virtual void registraOuvinte(OuvinteCC * ouvinte);
    virtual void removeOuvinte(OuvinteCC * ouvinte);
    virtual void notificaOuvintes(unsigned char * CC);

    //virtual void chegouInput(unsigned char *pacote);
    
    virtual void notifySection(int PID, unsigned char* section, int sectionSize);
    virtual void notifyErroCRC(int numErroCRC, int PID, int tableID, int tableIDX, unsigned char* section, int sectionSize);
    virtual void notifyOldSection(int PID, int tableID, int tableIDX);

private:
    string ClosedCaption;
    int64_t PTS, DTS;

    std::list<OuvinteCC*> * ouvintes;

    // Mutex para evitar mutiplas chamadas de notificadores
    pthread_mutex_t *mutex;
};


#endif