Commit d8416ef00da001ad651a5c192708bc2b9880e8da
1 parent
a17be48c
Exists in
master
and in
1 other branch
Remove /util/src/tspacket.cpp, pois é obsoleto
Showing
3 changed files
with
0 additions
and
875 deletions
Show diff stats
Makefile-libras.mk
| @@ -1,128 +0,0 @@ | @@ -1,128 +0,0 @@ | ||
| 1 | -# | ||
| 2 | -# There exist several targets which are by default empty and which can be | ||
| 3 | -# used for execution of your targets. These targets are usually executed | ||
| 4 | -# before and after some main targets. They are: | ||
| 5 | -# | ||
| 6 | -# .build-pre: called before 'build' target | ||
| 7 | -# .build-post: called after 'build' target | ||
| 8 | -# .clean-pre: called before 'clean' target | ||
| 9 | -# .clean-post: called after 'clean' target | ||
| 10 | -# .clobber-pre: called before 'clobber' target | ||
| 11 | -# .clobber-post: called after 'clobber' target | ||
| 12 | -# .all-pre: called before 'all' target | ||
| 13 | -# .all-post: called after 'all' target | ||
| 14 | -# .help-pre: called before 'help' target | ||
| 15 | -# .help-post: called after 'help' target | ||
| 16 | -# | ||
| 17 | -# Targets beginning with '.' are not intended to be called on their own. | ||
| 18 | -# | ||
| 19 | -# Main targets can be executed directly, and they are: | ||
| 20 | -# | ||
| 21 | -# build build a specific configuration | ||
| 22 | -# clean remove built files from a configuration | ||
| 23 | -# clobber remove all built files | ||
| 24 | -# all build all configurations | ||
| 25 | -# help print help mesage | ||
| 26 | -# | ||
| 27 | -# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and | ||
| 28 | -# .help-impl are implemented in nbproject/makefile-impl.mk. | ||
| 29 | -# | ||
| 30 | -# Available make variables: | ||
| 31 | -# | ||
| 32 | -# CND_BASEDIR base directory for relative paths | ||
| 33 | -# CND_DISTDIR default top distribution directory (build artifacts) | ||
| 34 | -# CND_BUILDDIR default top build directory (object files, ...) | ||
| 35 | -# CONF name of current configuration | ||
| 36 | -# CND_PLATFORM_${CONF} platform name (current configuration) | ||
| 37 | -# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration) | ||
| 38 | -# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration) | ||
| 39 | -# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration) | ||
| 40 | -# CND_PACKAGE_DIR_${CONF} directory of package (current configuration) | ||
| 41 | -# CND_PACKAGE_NAME_${CONF} name of package (current configuration) | ||
| 42 | -# CND_PACKAGE_PATH_${CONF} path to package (current configuration) | ||
| 43 | -# | ||
| 44 | -# NOCDDL | ||
| 45 | - | ||
| 46 | - | ||
| 47 | -# Environment | ||
| 48 | -MKDIR=mkdir | ||
| 49 | -CP=cp | ||
| 50 | -CCADMIN=CCadmin | ||
| 51 | - | ||
| 52 | - | ||
| 53 | -# build | ||
| 54 | -build: .build-post | ||
| 55 | - | ||
| 56 | -.build-pre: | ||
| 57 | -# Add your pre 'build' code here... | ||
| 58 | - | ||
| 59 | -.build-post: .build-impl | ||
| 60 | -# Add your post 'build' code here... | ||
| 61 | - | ||
| 62 | - | ||
| 63 | -# clean | ||
| 64 | -clean: .clean-post | ||
| 65 | - | ||
| 66 | -.clean-pre: | ||
| 67 | -# Add your pre 'clean' code here... | ||
| 68 | - | ||
| 69 | -.clean-post: .clean-impl | ||
| 70 | -# Add your post 'clean' code here... | ||
| 71 | - | ||
| 72 | - | ||
| 73 | -# clobber | ||
| 74 | -clobber: .clobber-post | ||
| 75 | - | ||
| 76 | -.clobber-pre: | ||
| 77 | -# Add your pre 'clobber' code here... | ||
| 78 | - | ||
| 79 | -.clobber-post: .clobber-impl | ||
| 80 | -# Add your post 'clobber' code here... | ||
| 81 | - | ||
| 82 | - | ||
| 83 | -# all | ||
| 84 | -all: .all-post | ||
| 85 | - | ||
| 86 | -.all-pre: | ||
| 87 | -# Add your pre 'all' code here... | ||
| 88 | - | ||
| 89 | -.all-post: .all-impl | ||
| 90 | -# Add your post 'all' code here... | ||
| 91 | - | ||
| 92 | - | ||
| 93 | -# build tests | ||
| 94 | -build-tests: .build-tests-post | ||
| 95 | - | ||
| 96 | -.build-tests-pre: | ||
| 97 | -# Add your pre 'build-tests' code here... | ||
| 98 | - | ||
| 99 | -.build-tests-post: .build-tests-impl | ||
| 100 | -# Add your post 'build-tests' code here... | ||
| 101 | - | ||
| 102 | - | ||
| 103 | -# run tests | ||
| 104 | -test: .test-post | ||
| 105 | - | ||
| 106 | -.test-pre: | ||
| 107 | -# Add your pre 'test' code here... | ||
| 108 | - | ||
| 109 | -.test-post: .test-impl | ||
| 110 | -# Add your post 'test' code here... | ||
| 111 | - | ||
| 112 | - | ||
| 113 | -# help | ||
| 114 | -help: .help-post | ||
| 115 | - | ||
| 116 | -.help-pre: | ||
| 117 | -# Add your pre 'help' code here... | ||
| 118 | - | ||
| 119 | -.help-post: .help-impl | ||
| 120 | -# Add your post 'help' code here... | ||
| 121 | - | ||
| 122 | - | ||
| 123 | - | ||
| 124 | -# include project implementation makefile | ||
| 125 | -include nbproject/Makefile-impl.mk | ||
| 126 | - | ||
| 127 | -# include project make variables | ||
| 128 | -include nbproject/Makefile-variables.mk |
util/src/include/tspacket.h
| @@ -1,122 +0,0 @@ | @@ -1,122 +0,0 @@ | ||
| 1 | -#ifndef _TSPACKET_H_ | ||
| 2 | -#define _TSPACKET_H_ | ||
| 3 | - | ||
| 4 | -/** | ||
| 5 | - * Esse arquivo possui fun??????es que retornam os campos de um pacote TS | ||
| 6 | - * As informa??????es necess???rias para a constru??????o deste arquivo estao na | ||
| 7 | -especifica??????o | ||
| 8 | - * ISO/IEC 13818-1, Table 2-2, pag 18. | ||
| 9 | - * | ||
| 10 | - **/ | ||
| 11 | - | ||
| 12 | -#include <stdio.h> | ||
| 13 | -#include <string.h> | ||
| 14 | -#include <stdint.h> | ||
| 15 | -#include <stdlib.h> | ||
| 16 | -//#include "section.h" | ||
| 17 | - | ||
| 18 | -#define PID_PACOTE_NULO 0x1FFF | ||
| 19 | - | ||
| 20 | -/* 71 == 0x47*/ | ||
| 21 | -#define SYNC_BYTE 71 | ||
| 22 | - | ||
| 23 | -#define PACKET_SIZE 188 | ||
| 24 | -#define MAX_PAYLOAD_SIZE 184 | ||
| 25 | -#define STUFFING_BYTE 0xFF | ||
| 26 | - | ||
| 27 | -#define AFC_RESERVED 0 | ||
| 28 | -#define AFC_ONLY_PAYLOAD 1 | ||
| 29 | -#define AFC_ONLY_ADAPT_FIELD 2 | ||
| 30 | -#define AFC_BOTH_PAYLOAD_AND_ADAPT_FIELD 3 | ||
| 31 | - | ||
| 32 | -#define SC_NOT_SCRAMBLED 0 | ||
| 33 | -#define SC_USER_DEFINED_1 1 | ||
| 34 | -#define SC_USER_DEFINED_2 2 | ||
| 35 | -#define SC_USER_DEFINED_3 3 | ||
| 36 | - | ||
| 37 | -#ifndef NULL | ||
| 38 | -#define NULL 0 | ||
| 39 | -#endif | ||
| 40 | - | ||
| 41 | -/// Assinatura das funcoes: | ||
| 42 | - | ||
| 43 | -/// Genericas | ||
| 44 | -unsigned char * getPayload (unsigned char * pacote, unsigned int * | ||
| 45 | -length); | ||
| 46 | -unsigned int getPayloadLength (unsigned char * pacote); | ||
| 47 | -unsigned int getAdaptationFieldLength (unsigned char * pacote); | ||
| 48 | -char hasAdaptationField (unsigned char * pacote); | ||
| 49 | -//char assert (int value); | ||
| 50 | -unsigned int generateGenericTsPackets(unsigned char * tsPacketInitial, int pid, | ||
| 51 | -unsigned char * section, unsigned int tableSize); | ||
| 52 | -unsigned int generateTsPacket(unsigned char * tsPacketInitial, int pid, unsigned | ||
| 53 | -char * section); | ||
| 54 | -void create_ts_null_packet(unsigned char *buffer); | ||
| 55 | - | ||
| 56 | -/// Gets tamanho | ||
| 57 | -unsigned getSectionLength(unsigned char * section); | ||
| 58 | -unsigned getSectionDataLength(unsigned char * section); | ||
| 59 | - | ||
| 60 | - | ||
| 61 | -/// Gets do cabecalho ts ... | ||
| 62 | -int getSyncByte (unsigned char * pacote); | ||
| 63 | -char getTransportErrorIndicator (unsigned char * pacote); | ||
| 64 | -unsigned char getPayloadUnitStartIndicator (unsigned char * pacote); | ||
| 65 | -char getTransportPriority (unsigned char * pacote); | ||
| 66 | -int getPid (unsigned char * pacote); | ||
| 67 | -char getTransportScramblingControl(unsigned char * pacote); | ||
| 68 | -unsigned int getAdaptationFieldControl (unsigned char * pacote); | ||
| 69 | -unsigned int getAdaptationFieldLength (unsigned char * pacote); | ||
| 70 | -unsigned getContinuityCounter (unsigned char * pacote); | ||
| 71 | - | ||
| 72 | - | ||
| 73 | - | ||
| 74 | -/// Sets do cabecalho ts ... | ||
| 75 | -void setSyncByte (unsigned char * pacote, int value); | ||
| 76 | -void setTransportErrorIndicator (unsigned char * pacote, unsigned char | ||
| 77 | -transportError); | ||
| 78 | -void setPayloadUnitStartIndicator (unsigned char * pacote, unsigned char | ||
| 79 | -payloadUnitStart); | ||
| 80 | -void setTransportPriority (unsigned char * pacote, unsigned char | ||
| 81 | -transportPriority); | ||
| 82 | -void setPid (unsigned char * pacote, int pid); | ||
| 83 | -void setTransportScramblingControl(unsigned char * pacote, unsigned char | ||
| 84 | -scramblingControl); | ||
| 85 | -void setAdaptationFieldControl (unsigned char * pacote, unsigned char | ||
| 86 | -adaptationFieldControl); | ||
| 87 | -void setContinuityCounter (unsigned char * pacote, unsigned char | ||
| 88 | -continuityCounter); | ||
| 89 | -void setPayload (unsigned char * pacote, unsigned char *data, | ||
| 90 | -unsigned length); | ||
| 91 | -void setAdaptationFieldLength (unsigned char * pacote, int length); | ||
| 92 | - | ||
| 93 | -/// Adaptation Field | ||
| 94 | -char hasPcr (unsigned char * pacote); | ||
| 95 | -int64_t getPcrBase (unsigned char * pacote); | ||
| 96 | -int64_t getPcrExtension (unsigned char * pacote); | ||
| 97 | - | ||
| 98 | -char getDiscontinuityIndicator (unsigned char * pacote); | ||
| 99 | -char getRandomAccessIndicator (unsigned char * pacote); | ||
| 100 | -char getElementaryStreamPriorityIndicator(unsigned char * pacote); | ||
| 101 | -char getPcrFlag (unsigned char * pacote); | ||
| 102 | -char getOpcrFlag (unsigned char * pacote); | ||
| 103 | -char getSplicingPointFlag (unsigned char * pacote); | ||
| 104 | -char getTransportPrivateDataFlag (unsigned char * pacote); | ||
| 105 | -char getAdaptationFieldExtensionFlag(unsigned char * pacote); | ||
| 106 | - | ||
| 107 | -void setPcrBase (unsigned char * pacote, int64_t pcrBase); | ||
| 108 | -void setPcrExtension (unsigned char * pacote, int64_t pcrExtension); | ||
| 109 | - | ||
| 110 | -void setDiscontinuityIndicator (unsigned char * pacote, int value); | ||
| 111 | -void setRandomAccessIndicator (unsigned char * pacote, int value); | ||
| 112 | -void setElementaryStreamPriorityIndicator(unsigned char * pacote, int value); | ||
| 113 | -void setPcrFlag (unsigned char * pacote, char flag); | ||
| 114 | -void setOpcrFlag (unsigned char * pacote, char flag); | ||
| 115 | -void setSplicingPointFlag (unsigned char * pacote, char flag); | ||
| 116 | -void setTransportPrivateDataFlag (unsigned char * pacote, char flag); | ||
| 117 | -void setFlagsZero (unsigned char * pacote); | ||
| 118 | -void setAdaptationFieldExtensionFlag(unsigned char * pacote, char flag); | ||
| 119 | - | ||
| 120 | -#endif // _TSPACKET_H_ | ||
| 121 | - | ||
| 122 | - |
util/src/tspacket.cpp
| @@ -1,625 +0,0 @@ | @@ -1,625 +0,0 @@ | ||
| 1 | -#include "tspacket.h" | ||
| 2 | -//#include "debug.h" | ||
| 3 | - | ||
| 4 | -//#include "dprintf.h" | ||
| 5 | - | ||
| 6 | -// Cria pacote nulo de 188 bytes | ||
| 7 | - void create_ts_null_packet(unsigned char *buffer){ | ||
| 8 | - | ||
| 9 | - unsigned char nullPacket [188]= { | ||
| 10 | - 0x47, 0x1F, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 11 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 12 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 13 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 14 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 15 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 16 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 17 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 18 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 19 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 20 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 21 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 22 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 23 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 24 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | ||
| 25 | - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; | ||
| 26 | - | ||
| 27 | - memcpy(buffer, nullPacket, 188); | ||
| 28 | - return; | ||
| 29 | -} | ||
| 30 | - | ||
| 31 | - | ||
| 32 | -/** | ||
| 33 | - * Retorna error se value <= 0 | ||
| 34 | - * | ||
| 35 | - * @param value -> valor a ser avaliado | ||
| 36 | - **/ | ||
| 37 | -char assert(int value) | ||
| 38 | -{ | ||
| 39 | - if (value <= 0) | ||
| 40 | - { | ||
| 41 | - printf("Error no assert %d\n", value); | ||
| 42 | - return 0; | ||
| 43 | - } | ||
| 44 | - else | ||
| 45 | - return 1; | ||
| 46 | -} | ||
| 47 | - | ||
| 48 | - | ||
| 49 | -/** | ||
| 50 | - * retorna zero se n???o h??? adaptation field, ou diferente de zero se h??? | ||
| 51 | - * | ||
| 52 | - * @param pacote -> pacote TS de 188 bytes | ||
| 53 | - **/ | ||
| 54 | -char hasAdaptationField(unsigned char * pacote) | ||
| 55 | -{ | ||
| 56 | - return getAdaptationFieldControl(pacote) == AFC_ONLY_ADAPT_FIELD | ||
| 57 | - || getAdaptationFieldControl(pacote) == AFC_BOTH_PAYLOAD_AND_ADAPT_FIELD; | ||
| 58 | -} | ||
| 59 | - | ||
| 60 | - | ||
| 61 | -/** | ||
| 62 | - * retorna o adaptation field len | ||
| 63 | - * | ||
| 64 | - * @param pacote -> pacote TS de 188 bytes | ||
| 65 | - **/ | ||
| 66 | -unsigned int getAdaptationFieldLength(unsigned char * pacote) | ||
| 67 | -{ | ||
| 68 | - if ( hasAdaptationField(pacote) ) | ||
| 69 | - { | ||
| 70 | - unsigned aFieldLength = pacote[4]; // 5 byte | ||
| 71 | - | ||
| 72 | - switch (getAdaptationFieldControl(pacote)) { | ||
| 73 | - case AFC_ONLY_ADAPT_FIELD: | ||
| 74 | - //assert(aFieldLength == 183); | ||
| 75 | - //break; | ||
| 76 | - if (aFieldLength == 183) | ||
| 77 | - break; | ||
| 78 | - else | ||
| 79 | - return 0; | ||
| 80 | - | ||
| 81 | - case AFC_BOTH_PAYLOAD_AND_ADAPT_FIELD: | ||
| 82 | - //assert(0 <= aFieldLength && aFieldLength <= 182); | ||
| 83 | - //break; | ||
| 84 | - if(0 <= aFieldLength && aFieldLength <= 182) | ||
| 85 | - break; | ||
| 86 | - else | ||
| 87 | - return 0; | ||
| 88 | - default: | ||
| 89 | - break; | ||
| 90 | - } | ||
| 91 | - | ||
| 92 | - return aFieldLength; | ||
| 93 | - } | ||
| 94 | - else | ||
| 95 | - return 0; | ||
| 96 | -} | ||
| 97 | - | ||
| 98 | -void setAdaptationFieldLength(unsigned char * pacote, int length) | ||
| 99 | -{ | ||
| 100 | - if ( hasAdaptationField(pacote) ) | ||
| 101 | - { | ||
| 102 | - pacote[4] = length; | ||
| 103 | - } | ||
| 104 | -} | ||
| 105 | - | ||
| 106 | - | ||
| 107 | - | ||
| 108 | - | ||
| 109 | -/** | ||
| 110 | - * Retorna o tamanho do payload | ||
| 111 | - * | ||
| 112 | - * @param pacote -> pacote TS de 188 bytes | ||
| 113 | - **/ | ||
| 114 | -unsigned int getPayloadLength(unsigned char * pacote) | ||
| 115 | -{ | ||
| 116 | - int aFieldControl = getAdaptationFieldControl(pacote); | ||
| 117 | - | ||
| 118 | - if (aFieldControl & 0x1) { /* aFieldControl is either 0x1 or 0x3: payload is | ||
| 119 | -present */ | ||
| 120 | - unsigned aFieldLength = 0; | ||
| 121 | - | ||
| 122 | - if (aFieldControl == 0x3) /* adaption field is present */ | ||
| 123 | - aFieldLength = getAdaptationFieldLength(pacote) + 1; /* the '1' is to include the | ||
| 124 | -aFieldLength itself */ | ||
| 125 | - | ||
| 126 | - if (aFieldLength <= 183) | ||
| 127 | - return MAX_PAYLOAD_SIZE - aFieldLength; | ||
| 128 | - } | ||
| 129 | - | ||
| 130 | - return 0; /* nao h??? payload */ | ||
| 131 | -} | ||
| 132 | -// proveitoso, recompesador, valer a pena, prof???cuo | ||
| 133 | - | ||
| 134 | -/** | ||
| 135 | - * Retorna um ponteiro para o in???cio do payload no pacote. | ||
| 136 | - * | ||
| 137 | - * @param pacote -> pacote TS de 188 bytes | ||
| 138 | - * @param length -> vari???vel que receber??? o tamanho do payload | ||
| 139 | - */ | ||
| 140 | -unsigned char * getPayload(unsigned char * pacote, unsigned int * length) { | ||
| 141 | - (*length) = getPayloadLength(pacote); | ||
| 142 | - | ||
| 143 | - if ( (*length) == 0 ) | ||
| 144 | - return NULL; | ||
| 145 | - | ||
| 146 | - return &pacote[PACKET_SIZE - (*length)]; | ||
| 147 | -} | ||
| 148 | - | ||
| 149 | - | ||
| 150 | -/// Gets... | ||
| 151 | - | ||
| 152 | -int getSyncByte(unsigned char * pacote) | ||
| 153 | -{ | ||
| 154 | - return pacote[0]; | ||
| 155 | -} | ||
| 156 | - | ||
| 157 | -// retorna 1 ou zero | ||
| 158 | -char getTransportErrorIndicator(unsigned char * pacote) { | ||
| 159 | - return (pacote[1] & 0x80) >> 7; | ||
| 160 | -} | ||
| 161 | - | ||
| 162 | -/** | ||
| 163 | - * retorna 0x40 se existir o payload unit start indication, e zero se nao existir | ||
| 164 | - * @param pacote -> pacote TS de 188 bytes | ||
| 165 | - **/ | ||
| 166 | -unsigned char getPayloadUnitStartIndicator(unsigned char * pacote) | ||
| 167 | -{ | ||
| 168 | - return (pacote[1] & 0x40) >> 6; | ||
| 169 | -} | ||
| 170 | - | ||
| 171 | -// retorna 1 ou zero | ||
| 172 | -char getTransportPriority(unsigned char * pacote) { | ||
| 173 | - return (pacote[1] & 0x20) >> 5; | ||
| 174 | -} | ||
| 175 | - | ||
| 176 | -/** | ||
| 177 | - * retorna o pid do pacote TS | ||
| 178 | - * @param pacote -> pacote TS de 188 bytes | ||
| 179 | - **/ | ||
| 180 | -int getPid(unsigned char * pacote) | ||
| 181 | -{ | ||
| 182 | - return ((pacote[1] & 0x1F) << 8) | pacote[2]; | ||
| 183 | -} | ||
| 184 | - | ||
| 185 | - | ||
| 186 | -char getTransportScramblingControl(unsigned char * pacote) { | ||
| 187 | - unsigned sControl = (pacote[3] & 0xC0) >> 6; | ||
| 188 | - | ||
| 189 | - switch (sControl) { | ||
| 190 | - case 0x1: return SC_USER_DEFINED_1; | ||
| 191 | - case 0x2: return SC_USER_DEFINED_2; | ||
| 192 | - case 0x3: return SC_USER_DEFINED_3; | ||
| 193 | - } | ||
| 194 | - return SC_NOT_SCRAMBLED; | ||
| 195 | -} | ||
| 196 | - | ||
| 197 | - | ||
| 198 | - | ||
| 199 | -/** | ||
| 200 | - * retorna o adaptation field control | ||
| 201 | - * @param pacote -> pacote TS de 188 bytes | ||
| 202 | - **/ | ||
| 203 | -unsigned int getAdaptationFieldControl(unsigned char * pacote) | ||
| 204 | -{ | ||
| 205 | - unsigned int aFieldControl = (pacote[3] & 0x30) >> 4; | ||
| 206 | - switch (aFieldControl) { | ||
| 207 | - case 0x1: return AFC_ONLY_PAYLOAD; | ||
| 208 | - case 0x2: return AFC_ONLY_ADAPT_FIELD; | ||
| 209 | - case 0x3: return AFC_BOTH_PAYLOAD_AND_ADAPT_FIELD; | ||
| 210 | - } | ||
| 211 | - return AFC_RESERVED; | ||
| 212 | -} | ||
| 213 | - | ||
| 214 | -unsigned getContinuityCounter(unsigned char * pacote) { | ||
| 215 | - return pacote[3] & 0x0F; | ||
| 216 | -} | ||
| 217 | - | ||
| 218 | - | ||
| 219 | - | ||
| 220 | -/// Sets... | ||
| 221 | - | ||
| 222 | -// Value deve ser setado para 71 decimal, ou 47 hexa | ||
| 223 | -void setSyncByte(unsigned char * pacote, int value) { | ||
| 224 | - pacote[0] = value; | ||
| 225 | -} | ||
| 226 | - | ||
| 227 | -// transportError deve ser 0 ou 1 | ||
| 228 | -void setTransportErrorIndicator(unsigned char * pacote, unsigned char transportError) { | ||
| 229 | - pacote[1] = (pacote[1] & 0x7F) | (transportError << 7); | ||
| 230 | -} | ||
| 231 | - | ||
| 232 | -// payloadUnitStart deve ser 0 ou 1 | ||
| 233 | -void setPayloadUnitStartIndicator(unsigned char * pacote, unsigned char | ||
| 234 | -payloadUnitStart) { | ||
| 235 | - pacote[1] = (pacote[1] & 0xBF) | (payloadUnitStart << 6); | ||
| 236 | -} | ||
| 237 | - | ||
| 238 | -// transportError deve ser 0 ou 1 | ||
| 239 | -void setTransportPriority(unsigned char * pacote, unsigned char transportPriority) { | ||
| 240 | - pacote[1] = (pacote[1] & 0xDF) | (transportPriority << 5); | ||
| 241 | -} | ||
| 242 | - | ||
| 243 | -// pid contem 13 bits | ||
| 244 | -void setPid(unsigned char * pacote, int pid) { | ||
| 245 | - pacote[1] = (pacote[1] & 0xE0) | ((pid & 0x1F00) >> 8); | ||
| 246 | - pacote[2] = pid & 0x00FF; | ||
| 247 | -} | ||
| 248 | - | ||
| 249 | -// scramblingControl contem 2 bits | ||
| 250 | -void setTransportScramblingControl(unsigned char * pacote, unsigned char | ||
| 251 | -scramblingControl) { | ||
| 252 | - pacote[3] = (pacote[3] & 0x3F) | ((scramblingControl << 6) & 0xC0); | ||
| 253 | -} | ||
| 254 | - | ||
| 255 | -// adaptationFieldControl contem 2 bits | ||
| 256 | -void setAdaptationFieldControl(unsigned char * pacote, unsigned char | ||
| 257 | -adaptationFieldControl) { | ||
| 258 | - pacote[3] = (pacote[3] & 0xCF) | ((adaptationFieldControl & 0x3) << 4); | ||
| 259 | -} | ||
| 260 | - | ||
| 261 | -//continuityConter deve ser sempre incrementado externamente a essa funcao, mas seele ultrapassar 15, | ||
| 262 | -// recebe zero | ||
| 263 | -void setContinuityCounter(unsigned char * pacote, unsigned char continuityCounter) { | ||
| 264 | - continuityCounter = continuityCounter % 16; | ||
| 265 | - pacote[3] = (pacote[3] & 0xF0) | (continuityCounter & 0x0F); | ||
| 266 | -} | ||
| 267 | - | ||
| 268 | -void setPayload(unsigned char * pacote, unsigned char *data, unsigned length) { | ||
| 269 | - unsigned available; | ||
| 270 | - unsigned char *payload = getPayload(pacote, &available); | ||
| 271 | - | ||
| 272 | - /* be sure that the available data is enough */ | ||
| 273 | - if (length <= available) | ||
| 274 | - { | ||
| 275 | - /* copy data */ | ||
| 276 | - memcpy(payload, data, length); | ||
| 277 | - | ||
| 278 | - /* fill the remaining data with stuffing bytes */ | ||
| 279 | - memset(payload + length, STUFFING_BYTE, available - length); | ||
| 280 | - } | ||
| 281 | - else | ||
| 282 | - printf("Error, tentando setar o payload (%d) maior que o espa???o disponivel(%d)\n", length, available); | ||
| 283 | -} | ||
| 284 | - | ||
| 285 | -char getDiscontinuityIndicator(unsigned char * pacote) { | ||
| 286 | - if (getAdaptationFieldLength(pacote)) | ||
| 287 | - { | ||
| 288 | - return pacote[5] & 0x80; /* 1000 0000 */ | ||
| 289 | - } | ||
| 290 | - else | ||
| 291 | - return 0; | ||
| 292 | -} | ||
| 293 | - | ||
| 294 | -char getRandomAccessIndicator(unsigned char * pacote) { | ||
| 295 | - if (getAdaptationFieldLength(pacote)) | ||
| 296 | - { | ||
| 297 | - return pacote[5] & 0x40; /* 0100 0000 */ | ||
| 298 | - } | ||
| 299 | - else | ||
| 300 | - return 0; | ||
| 301 | -} | ||
| 302 | - | ||
| 303 | -char getElementaryStreamPriorityIndicator(unsigned char * pacote) { | ||
| 304 | - if (getAdaptationFieldLength(pacote)) | ||
| 305 | - { | ||
| 306 | - return pacote[5] & 0x20; /* 0010 0000 */ | ||
| 307 | - } | ||
| 308 | - else | ||
| 309 | - return 0; | ||
| 310 | -} | ||
| 311 | - | ||
| 312 | -void setDiscontinuityIndicator(unsigned char * pacote, int value) { | ||
| 313 | - if (getAdaptationFieldLength(pacote)) | ||
| 314 | - { | ||
| 315 | - pacote[5] = (pacote[5] & 0x7F) | ((value<<7) & 0x80); /* 1000 0000 */ | ||
| 316 | - } | ||
| 317 | -} | ||
| 318 | - | ||
| 319 | -void setRandomAccessIndicator(unsigned char * pacote, int value) { | ||
| 320 | - if (getAdaptationFieldLength(pacote)) | ||
| 321 | - { | ||
| 322 | - pacote[5] = (pacote[5] & 0xBF) | ((value<<6) & 0x40); /* 0100 0000 */ | ||
| 323 | - } | ||
| 324 | -} | ||
| 325 | - | ||
| 326 | -void setElementaryStreamPriorityIndicator(unsigned char * pacote, int value) { | ||
| 327 | - if (getAdaptationFieldLength(pacote)) | ||
| 328 | - { | ||
| 329 | - pacote[5] = (pacote[5] & 0xDF) | ((value << 5)& 0x20); /* 0010 0000 */ | ||
| 330 | - } | ||
| 331 | -} | ||
| 332 | - | ||
| 333 | -char getOpcrFlag(unsigned char * pacote) { | ||
| 334 | - if (getAdaptationFieldLength(pacote)) | ||
| 335 | - { | ||
| 336 | - return pacote[5] & 0x08; /* 0000 1000 */ | ||
| 337 | - } | ||
| 338 | - else | ||
| 339 | - return NULL; | ||
| 340 | -} | ||
| 341 | -void setOpcrFlag(unsigned char * pacote, char flag) { | ||
| 342 | - if (getAdaptationFieldLength(pacote)) | ||
| 343 | - { | ||
| 344 | - pacote[5] = (pacote[5] & 0xF7) | ((flag<<3) & 0x08); | ||
| 345 | - } | ||
| 346 | -} | ||
| 347 | - | ||
| 348 | - | ||
| 349 | -char getPcrFlag(unsigned char * pacote) { | ||
| 350 | - if (getAdaptationFieldLength(pacote)) | ||
| 351 | - { | ||
| 352 | - return pacote[5] & 0x10; /* 0001 0000 */ | ||
| 353 | - } | ||
| 354 | - else | ||
| 355 | - return 0; | ||
| 356 | -} | ||
| 357 | -void setPcrFlag(unsigned char * pacote, char flag) { | ||
| 358 | - if (getAdaptationFieldLength(pacote)) | ||
| 359 | - { | ||
| 360 | - pacote[5] = (pacote[5] & 0xEF) | ((flag<<4) & 0x10); | ||
| 361 | - } | ||
| 362 | -} | ||
| 363 | - | ||
| 364 | - | ||
| 365 | -char getSplicingPointFlag(unsigned char * pacote) { | ||
| 366 | - if (getAdaptationFieldLength(pacote)) | ||
| 367 | - { | ||
| 368 | - return pacote[5] & 0x04; /* 0000 0100 */ | ||
| 369 | - } | ||
| 370 | - else | ||
| 371 | - return 0; | ||
| 372 | -} | ||
| 373 | -void setSplicingPointFlag(unsigned char * pacote, char flag) { | ||
| 374 | - if (getAdaptationFieldLength(pacote)) | ||
| 375 | - { | ||
| 376 | - pacote[5] = (pacote[5] & 0xFB) | ((flag<<2) & 0x04); /* 0000 0100 */ | ||
| 377 | - } | ||
| 378 | -} | ||
| 379 | - | ||
| 380 | -char getTransportPrivateDataFlag(unsigned char * pacote) { | ||
| 381 | - if (getAdaptationFieldLength(pacote)) | ||
| 382 | - { | ||
| 383 | - return pacote[5] & 0x02; /* 0000 0010 */ | ||
| 384 | - } | ||
| 385 | - else | ||
| 386 | - return 0; | ||
| 387 | -} | ||
| 388 | -void setTransportPrivateDataFlag(unsigned char * pacote, char flag) { | ||
| 389 | - if (getAdaptationFieldLength(pacote)) | ||
| 390 | - { | ||
| 391 | - pacote[5] = (pacote[5] & 0xFD) | ((flag<<1) & 0x02); /* 0000 0010 */ | ||
| 392 | - } | ||
| 393 | -} | ||
| 394 | - | ||
| 395 | -char getAdaptationFieldExtensionFlag(unsigned char * pacote) { | ||
| 396 | - if (getAdaptationFieldLength(pacote)) | ||
| 397 | - { | ||
| 398 | - return pacote[5] & 0x01; /* 0000 0001 */ | ||
| 399 | - } | ||
| 400 | - else | ||
| 401 | - return 0; | ||
| 402 | -} | ||
| 403 | -void setAdaptationFieldExtensionFlag(unsigned char * pacote, char flag) { | ||
| 404 | - if (getAdaptationFieldLength(pacote)) | ||
| 405 | - { | ||
| 406 | - pacote[5] = (pacote[5] & 0xFE) | (flag & 0x01); /* 0000 0001 */ | ||
| 407 | - } | ||
| 408 | -} | ||
| 409 | - | ||
| 410 | - | ||
| 411 | -void setFlagsZero(unsigned char * pacote) | ||
| 412 | -{ | ||
| 413 | - if (getAdaptationFieldLength(pacote)) | ||
| 414 | - { | ||
| 415 | - pacote[5] = pacote[5] & 0xE0; | ||
| 416 | - } | ||
| 417 | -} | ||
| 418 | - | ||
| 419 | - | ||
| 420 | - | ||
| 421 | -char hasPcr(unsigned char * pacote) { | ||
| 422 | - return hasAdaptationField(pacote) && (getAdaptationFieldLength(pacote) != 0) && getPcrFlag(pacote); | ||
| 423 | -} | ||
| 424 | - | ||
| 425 | - | ||
| 426 | -int64_t getPcrBase(unsigned char * pacote) { /* 33 */ | ||
| 427 | -// if (hasPcr(pacote)) // comentei para otimizar o codigo | ||
| 428 | - { | ||
| 429 | - return ( | ||
| 430 | - ( ((uint64_t) pacote[ 6])<< 25 ) | | ||
| 431 | - ( pacote[ 7] << 17 ) | | ||
| 432 | - ( pacote[ 8] << 9 ) | | ||
| 433 | - ( pacote[ 9] << 1 ) | | ||
| 434 | - ( pacote[10] >> 7 ) ); | ||
| 435 | - //+ (((uint64_t)1000000000)*7) + (((uint64_t)100000000)*4) +(((uint64_t)10000000)*6);//testes | ||
| 436 | - } | ||
| 437 | -// else | ||
| 438 | -// return 0; | ||
| 439 | -/* | ||
| 440 | - (( (((uint64_t) pacote[6]) << 25)) & (((uint64_t) 0x1FE00000)<<4 ) ) | | ||
| 441 | - (( (uint64_t) (pacote[ 7] << 17)) & ( 0x001FE0000) ) | | ||
| 442 | - (( (uint64_t) (pacote[ 8] << 9)) & ( 0x00001FE00) ) | | ||
| 443 | - (( (uint64_t) (pacote[ 9] << 1)) & ( 0x0000001FE) ) | | ||
| 444 | - (( (uint64_t) (pacote[10] >> 7)) & ( 0x000000001) ) ); | ||
| 445 | -*/ | ||
| 446 | -} | ||
| 447 | - | ||
| 448 | - | ||
| 449 | -void setPcrBase(unsigned char * pacote, int64_t pcrBase) { /* 33 */ | ||
| 450 | -// if (hasPcr(pacote)) // comentei para ficar mais rapido | ||
| 451 | - { | ||
| 452 | - pacote[ 6] = pcrBase>>25; | ||
| 453 | - pacote[ 7] = pcrBase>>17; | ||
| 454 | - pacote[ 8] = pcrBase>>9; | ||
| 455 | - pacote[ 9] = pcrBase>>1; | ||
| 456 | - pacote[10] = ((pcrBase<<7) & 0x80) | (pacote[10] & 0x7F); | ||
| 457 | - } | ||
| 458 | -} | ||
| 459 | - | ||
| 460 | - | ||
| 461 | -int64_t getPcrExtension(unsigned char * pacote) { | ||
| 462 | - return ((pacote[10] & 0x1) << 8) | pacote[11]; | ||
| 463 | -} | ||
| 464 | - | ||
| 465 | - | ||
| 466 | -void setPcrExtension(unsigned char * pacote, int64_t pcrExtension) { | ||
| 467 | - pacote[10] = ((pcrExtension>>8) & 0x01) | (pacote[10] & 0xFE); | ||
| 468 | - pacote[11] = pcrExtension; | ||
| 469 | -} | ||
| 470 | - | ||
| 471 | -unsigned getSectionLength(unsigned char * section) | ||
| 472 | -{ | ||
| 473 | - unsigned sectionLength = ((section[1] & 0x0F) << 8) | section[2]; | ||
| 474 | - /* ITU-T H.222.0 2.4.4.11 page 48 (private section length) */ | ||
| 475 | - if (sectionLength >= 4094) | ||
| 476 | - { | ||
| 477 | - printf("tamanho de pat section invalido (%d), maximo 4093\n", | ||
| 478 | -sectionLength); | ||
| 479 | - return 0; | ||
| 480 | - } | ||
| 481 | - | ||
| 482 | - return sectionLength; | ||
| 483 | -} | ||
| 484 | - | ||
| 485 | -unsigned getSectionDataLength(unsigned char * section) { | ||
| 486 | - // +3, pq tem 3 bytes antes do campo sectionLength | ||
| 487 | - return getSectionLength(section) + 3; | ||
| 488 | -} | ||
| 489 | - | ||
| 490 | - | ||
| 491 | -unsigned int generateGenericTsPackets(unsigned char * tsPacketInitial, int pid, unsigned char * section, unsigned int tableSize) | ||
| 492 | -{ | ||
| 493 | - int sectionSize = tableSize; | ||
| 494 | - unsigned char * temp = (unsigned char *) malloc(184); | ||
| 495 | - unsigned char * tsPacket; | ||
| 496 | - int remainBytes = 0; | ||
| 497 | - int payloadSize = 0; | ||
| 498 | - unsigned int quantPacotes =1; | ||
| 499 | - int cc = 0; | ||
| 500 | - | ||
| 501 | - memset(temp, 0xFF, 184); | ||
| 502 | - tsPacket = tsPacketInitial; | ||
| 503 | - | ||
| 504 | - if (sectionSize > 183) | ||
| 505 | - payloadSize = 183; | ||
| 506 | - else | ||
| 507 | - payloadSize = sectionSize; | ||
| 508 | - | ||
| 509 | - temp[0] = 0; | ||
| 510 | - memcpy(&temp[1], section, payloadSize); | ||
| 511 | - remainBytes = sectionSize; | ||
| 512 | - | ||
| 513 | - setSyncByte (tsPacket, SYNC_BYTE); | ||
| 514 | - setTransportErrorIndicator (tsPacket, 0); | ||
| 515 | - setPayloadUnitStartIndicator (tsPacket, 1); // 1 == first packet | ||
| 516 | - setTransportPriority (tsPacket, 0); | ||
| 517 | - setPid (tsPacket, pid); | ||
| 518 | - setTransportScramblingControl(tsPacket, SC_NOT_SCRAMBLED); | ||
| 519 | - setAdaptationFieldControl (tsPacket, AFC_ONLY_PAYLOAD); | ||
| 520 | - setContinuityCounter (tsPacket, cc++); | ||
| 521 | - setPayload (tsPacket, temp, payloadSize+1); | ||
| 522 | - free(temp); | ||
| 523 | - | ||
| 524 | -/*printf("Pat: "); | ||
| 525 | -for (i = 0; i < 188; i++){ | ||
| 526 | - printf("%x ", tsPacket[i]); | ||
| 527 | -}*/ | ||
| 528 | - | ||
| 529 | - remainBytes -= payloadSize; | ||
| 530 | - | ||
| 531 | - while (remainBytes>0) | ||
| 532 | - { | ||
| 533 | -// printf("entrei no while, remainBytes == %d, payloadSize == %d \n", remainBytes,payloadSize); | ||
| 534 | - quantPacotes++; | ||
| 535 | - tsPacket = tsPacket + PACKET_SIZE; | ||
| 536 | - section = section + payloadSize; | ||
| 537 | - | ||
| 538 | - if (remainBytes > 184) | ||
| 539 | - payloadSize = 184; | ||
| 540 | - else | ||
| 541 | - payloadSize = remainBytes; | ||
| 542 | - | ||
| 543 | - setSyncByte (tsPacket, SYNC_BYTE); | ||
| 544 | - setTransportErrorIndicator (tsPacket, 0); | ||
| 545 | - setPayloadUnitStartIndicator (tsPacket, 0); // 0 == not the first packet | ||
| 546 | - setTransportPriority (tsPacket, 0); | ||
| 547 | - setPid (tsPacket, pid); | ||
| 548 | - setTransportScramblingControl(tsPacket, SC_NOT_SCRAMBLED); | ||
| 549 | - setAdaptationFieldControl (tsPacket, AFC_ONLY_PAYLOAD); | ||
| 550 | - setContinuityCounter (tsPacket, cc++); | ||
| 551 | - setPayload (tsPacket, section, payloadSize); | ||
| 552 | - | ||
| 553 | - remainBytes -= payloadSize; | ||
| 554 | - } | ||
| 555 | - return quantPacotes; | ||
| 556 | -} | ||
| 557 | - | ||
| 558 | - | ||
| 559 | - | ||
| 560 | -unsigned int generateTsPacket(unsigned char * tsPacketInitial, int pid, unsigned char * section) | ||
| 561 | -{ | ||
| 562 | - int sectionSize = getSectionDataLength(section); | ||
| 563 | - unsigned char * temp = (unsigned char *) malloc(184); | ||
| 564 | - unsigned char * tsPacket; | ||
| 565 | - int remainBytes = 0; | ||
| 566 | - int payloadSize = 0; | ||
| 567 | - unsigned int quantPacotes =1; | ||
| 568 | - int cc = 0; | ||
| 569 | - | ||
| 570 | - memset(temp, 0xFF, 184); | ||
| 571 | - tsPacket = tsPacketInitial; | ||
| 572 | - | ||
| 573 | - if (sectionSize > 183) | ||
| 574 | - payloadSize = 183; | ||
| 575 | - else | ||
| 576 | - payloadSize = sectionSize; | ||
| 577 | - | ||
| 578 | - temp[0] = 0; | ||
| 579 | - memcpy(&temp[1], section, payloadSize); | ||
| 580 | - remainBytes = sectionSize; | ||
| 581 | - | ||
| 582 | - setSyncByte (tsPacket, SYNC_BYTE); | ||
| 583 | - setTransportErrorIndicator (tsPacket, 0); | ||
| 584 | - setPayloadUnitStartIndicator (tsPacket, 1); // 1 == first packet | ||
| 585 | - setTransportPriority (tsPacket, 0); | ||
| 586 | - setPid (tsPacket, pid); | ||
| 587 | - setTransportScramblingControl(tsPacket, SC_NOT_SCRAMBLED); | ||
| 588 | - setAdaptationFieldControl (tsPacket, AFC_ONLY_PAYLOAD); | ||
| 589 | - setContinuityCounter (tsPacket, cc++); | ||
| 590 | - setPayload (tsPacket, temp, payloadSize+1); | ||
| 591 | - free(temp); | ||
| 592 | - | ||
| 593 | -/*printf("Pat: "); | ||
| 594 | -for (i = 0; i < 188; i++){ | ||
| 595 | - printf("%x ", tsPacket[i]); | ||
| 596 | -}*/ | ||
| 597 | - | ||
| 598 | - remainBytes -= payloadSize; | ||
| 599 | - | ||
| 600 | - while (remainBytes>0) | ||
| 601 | - { | ||
| 602 | -// printf("entrei no while, remainBytes == %d, payloadSize == %d \n", remainBytes,payloadSize); | ||
| 603 | - quantPacotes++; | ||
| 604 | - tsPacket = tsPacket + PACKET_SIZE; | ||
| 605 | - section = section + payloadSize; | ||
| 606 | - | ||
| 607 | - if (remainBytes > 184) | ||
| 608 | - payloadSize = 184; | ||
| 609 | - else | ||
| 610 | - payloadSize = remainBytes; | ||
| 611 | - | ||
| 612 | - setSyncByte (tsPacket, SYNC_BYTE); | ||
| 613 | - setTransportErrorIndicator (tsPacket, 0); | ||
| 614 | - setPayloadUnitStartIndicator (tsPacket, 0); // 0 == not the first packet | ||
| 615 | - setTransportPriority (tsPacket, 0); | ||
| 616 | - setPid (tsPacket, pid); | ||
| 617 | - setTransportScramblingControl(tsPacket, SC_NOT_SCRAMBLED); | ||
| 618 | - setAdaptationFieldControl (tsPacket, AFC_ONLY_PAYLOAD); | ||
| 619 | - setContinuityCounter (tsPacket, cc++); | ||
| 620 | - setPayload (tsPacket, section, payloadSize); | ||
| 621 | - | ||
| 622 | - remainBytes -= payloadSize; | ||
| 623 | - } | ||
| 624 | - return quantPacotes; | ||
| 625 | -} |