⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ts.cpp

📁 1、简介 此代码是IS0 13818-5 MPEG2系统层协议分析代码
💻 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 + -