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 | -# | |
| 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 | -#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 | -#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 | -} |