📄 ts.cpp
字号:
/* Copyright (C) 1995, Tektronix Inc. All Rights Reserved. * * Usage Restrictions * * License is granted to copy, to use, and to make and to use derivative * works for research and evaluation purposes only. * * Disclaimer of Warranty * * These software programs are available to the user without any license * fee or royalty on an "as is" basis. Tektronix Inc. disclaims any and * all warranties, whether express, implied, or statuary, including any * implied warranties or merchantability or of fitness for a particular * purpose. In no event shall the copyright-holder be liable for any * incidental, punitive, or consequential damages of any kind whatsoever * arising from the use of these programs. * * This disclaimer of warranty extends to the user of these programs and * user's customers, employees, agents, transferees, successors, and * assigns. * * The Tektronix Inc. does not represent or warrant that the programs * furnished hereunder are free of infringement of any third-party * patents.*//* TS class and AdaptationField class implementations */#include "TS.H"#include "Utilities.H"extern "C"{#include <stdio.h> }TS::TS (){ adaptation = NULL; continuity_counter = NOCC;}int TS::get_header_length (){ if (adaptation) return adaptation->get_length() + 4; else return 4;}void TS::config_basic (char e, char a, char p1, char s, int c, char p2){ transport_error_code = e; payload_unit_start_code = a; priority_code = p1; scrambling_code = s; continuity_counter = c; payload_code = p2;}void TS::config_adaptation (char d, char r, char p, TimeStamp27* pcr, TimeStamp27* opcr, int splice, int dlen, int elen, int slen){ if (!adaptation) adaptation = new AdaptationField(); adaptation->discontinuity_code = d; adaptation->random_access_code = r; adaptation->elem_stream_priority_code = p; if (pcr) adaptation->PCR = pcr; else adaptation->PCR = NULL; if (opcr) adaptation->OPCR = opcr; else adaptation->OPCR = NULL; adaptation->splice_countdown = splice; adaptation->transport_private_data_length = dlen; adaptation->adaptation_extension_length = elen; adaptation->number_stuffing_bytes = slen;} void TS::inc_cc (){ if (continuity_counter >= 15) continuity_counter = 0; else continuity_counter++;}void TS::add_pcr (TimeStamp27 pcr){ if (!adaptation) { adaptation = new AdaptationField(); } if (!adaptation->PCR) { adaptation->PCR = new TimeStamp27(); } adaptation->PCR->bits0_31 = pcr.bits0_31; adaptation->PCR->ext = pcr.ext; }void TS::delete_pcr (){ if (adaptation) { adaptation->PCR = NULL; if (adaptation->get_length() == 0) { delete adaptation; adaptation = NULL; } }}void TS::print (){ printf("transport_error_indicator: %c\n", transport_error_code); printf("payload_unit_start_indicator: %c\n", payload_unit_start_code); printf("transport_priority: %c\n", priority_code); printf("PID: %d\n", pid); printf("transport_scramble_control: %c\n", scrambling_code); printf("continuity_counter: %d\n", continuity_counter); if (adaptation) { adaptation->print(); } if (payload_code == 'P') printf("transport payload length = %d\n", 188 - get_header_length());}AdaptationField::AdaptationField (){ adaptation_field_length = NOLENGTH; discontinuity_code = '0'; random_access_code = '0'; elem_stream_priority_code = 'L'; PCR = (TimeStamp27*) NULL; OPCR = (TimeStamp27*) NULL; splice_countdown = NOSPLICE; transport_private_data_length = 0; adaptation_extension_length = 0; number_stuffing_bytes = 0;}int AdaptationField::get_fields_length (){ int fields_length = 0; if (PCR) fields_length += 6; if (OPCR) fields_length += 6; if (splice_countdown != NOSPLICE) fields_length += 1; if (transport_private_data_length > 0) fields_length += transport_private_data_length + 1; if (adaptation_extension_length > 0) fields_length += adaptation_extension_length + 1; fields_length += number_stuffing_bytes; return fields_length;} // get_length returns the total length of the adaptation field including// the adaptation_field_length field.int AdaptationField::get_length (){ // first collect the total length of the data fields (minus the length // field and flags field int fields_length = get_fields_length(); if ((fields_length == 0) && (adaptation_field_length == 0)) return 1; return fields_length + 2;}void AdaptationField::print (){ printf(" - Adaptation Field Begins - \n"); printf("adaptation_field_length: %d\n", get_length() - 1); printf("discontinuity_indicator: %c\n", discontinuity_code); printf("random_access_indicator: %c\n", random_access_code); printf("elementary_stream_priority_indicator: %c\n", elem_stream_priority_code); if (PCR) printf("PCR: b32 = %d; bits0..31 = %d; ext = %d\n", PCR->bit32, PCR->bits0_31, PCR->ext);; if (OPCR) printf("OPCR: b32 = %d; bits0..31 = %d; ext = %d\n", OPCR->bit32, OPCR->bits0_31, OPCR->ext); if (splice_countdown != NOSPLICE) printf("splice_countdown: %d\n", splice_countdown); if (transport_private_data_length) printf("transport_private_data_length: %d\n", transport_private_data_length); if (adaptation_extension_length) printf("adaptation_field_extension_length: %d\n", adaptation_extension_length); if (number_stuffing_bytes) printf("stuffing bytes read: length: %d\n", number_stuffing_bytes);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -