tspacket.h 4.82 KB
#ifndef _TSPACKET_H_
#define _TSPACKET_H_

/**
 * Esse arquivo possui fun??????es que retornam os campos de um pacote TS
 * As informa??????es necess???rias para a constru??????o deste arquivo estao na
especifica??????o
 * ISO/IEC 13818-1, Table 2-2, pag 18.
 *
 **/

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
//#include "section.h"

#define PID_PACOTE_NULO  0x1FFF

/* 71 == 0x47*/
#define SYNC_BYTE        71

#define PACKET_SIZE      188
#define MAX_PAYLOAD_SIZE 184
#define STUFFING_BYTE    0xFF

#define AFC_RESERVED                       0
#define AFC_ONLY_PAYLOAD                   1
#define AFC_ONLY_ADAPT_FIELD               2
#define AFC_BOTH_PAYLOAD_AND_ADAPT_FIELD   3

#define SC_NOT_SCRAMBLED                   0
#define SC_USER_DEFINED_1                  1
#define SC_USER_DEFINED_2                  2
#define SC_USER_DEFINED_3                  3

#ifndef NULL
#define NULL   0
#endif

/// Assinatura das funcoes:

/// Genericas
unsigned char * getPayload                 (unsigned char * pacote, unsigned int *
length);
unsigned int    getPayloadLength           (unsigned char * pacote);
unsigned int    getAdaptationFieldLength   (unsigned char * pacote);
char            hasAdaptationField         (unsigned char * pacote);
//char            assert                     (int value);
unsigned int generateGenericTsPackets(unsigned char * tsPacketInitial, int pid,
unsigned char * section, unsigned int tableSize);
unsigned int generateTsPacket(unsigned char * tsPacketInitial, int pid, unsigned
char * section);
void create_ts_null_packet(unsigned char *buffer);

/// Gets tamanho
unsigned getSectionLength(unsigned char * section);
unsigned getSectionDataLength(unsigned char * section);


/// Gets do cabecalho ts ...
int           getSyncByte                  (unsigned char * pacote);
char          getTransportErrorIndicator   (unsigned char * pacote);
unsigned char getPayloadUnitStartIndicator (unsigned char * pacote);
char          getTransportPriority         (unsigned char * pacote);
int           getPid                       (unsigned char * pacote);
char          getTransportScramblingControl(unsigned char * pacote);
unsigned int  getAdaptationFieldControl    (unsigned char * pacote);
unsigned int  getAdaptationFieldLength     (unsigned char * pacote);
unsigned      getContinuityCounter         (unsigned char * pacote);



/// Sets do cabecalho ts ...
void setSyncByte                  (unsigned char * pacote, int value);
void setTransportErrorIndicator   (unsigned char * pacote, unsigned char
transportError);
void setPayloadUnitStartIndicator (unsigned char * pacote, unsigned char
payloadUnitStart);
void setTransportPriority         (unsigned char * pacote, unsigned char
transportPriority);
void setPid                       (unsigned char * pacote, int pid);
void setTransportScramblingControl(unsigned char * pacote, unsigned char
scramblingControl);
void setAdaptationFieldControl    (unsigned char * pacote, unsigned char
adaptationFieldControl);
void setContinuityCounter         (unsigned char * pacote, unsigned char
continuityCounter);
void setPayload                   (unsigned char * pacote, unsigned char *data,
unsigned length);
void setAdaptationFieldLength     (unsigned char * pacote, int length);

/// Adaptation Field
char          hasPcr                         (unsigned char * pacote);
int64_t       getPcrBase                     (unsigned char * pacote);
int64_t       getPcrExtension                (unsigned char * pacote);

char          getDiscontinuityIndicator      (unsigned char * pacote);
char          getRandomAccessIndicator       (unsigned char * pacote);
char          getElementaryStreamPriorityIndicator(unsigned char * pacote);
char          getPcrFlag                     (unsigned char * pacote);
char          getOpcrFlag                    (unsigned char * pacote);
char          getSplicingPointFlag           (unsigned char * pacote);
char          getTransportPrivateDataFlag    (unsigned char * pacote);
char          getAdaptationFieldExtensionFlag(unsigned char * pacote);

void setPcrBase                     (unsigned char * pacote, int64_t pcrBase);
void setPcrExtension                (unsigned char * pacote, int64_t pcrExtension);

void setDiscontinuityIndicator      (unsigned char * pacote, int value);
void setRandomAccessIndicator       (unsigned char * pacote, int value);
void setElementaryStreamPriorityIndicator(unsigned char * pacote, int value);
void setPcrFlag                     (unsigned char * pacote, char flag);
void setOpcrFlag                    (unsigned char * pacote, char flag);
void setSplicingPointFlag           (unsigned char * pacote, char flag);
void setTransportPrivateDataFlag    (unsigned char * pacote, char flag);
void setFlagsZero            (unsigned char * pacote);
void setAdaptationFieldExtensionFlag(unsigned char * pacote, char flag);

#endif // _TSPACKET_H_