gen_pat.c   gen_pat.c 
/************************************************************************** *** /************************************************************************** ***
* gen_pat.c: PAT generator * gen_pat.c: PAT generator
*------------------------------------------------------------------------- --- *------------------------------------------------------------------------- ---
* Copyright (C) 2001-2010 VideoLAN * Copyright (C) 2001-2011 VideoLAN
* $Id: gen_pat.c,v 1.3 2002/10/07 14:15:14 sam Exp $ * $Id: gen_pat.c,v 1.3 2002/10/07 14:15:14 sam Exp $
* *
* Authors: Arnaud de Bossoreille de Ribou <bozo@via.ecp.fr> * Authors: Arnaud de Bossoreille de Ribou <bozo@via.ecp.fr>
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either * License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version. * version 2.1 of the License, or (at your option) any later version.
* *
* This library is distributed in the hope that it will be useful, * This library is distributed in the hope that it will be useful,
skipping to change at line 30 skipping to change at line 30
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130 1 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130 1 USA
* *
*------------------------------------------------------------------------- --- *------------------------------------------------------------------------- ---
* *
************************************************************************** ***/ ************************************************************************** ***/
#include "config.h" #include "config.h"
#include <stdio.h> #include <stdio.h>
#include <stdbool.h>
#if defined(HAVE_INTTYPES_H) #if defined(HAVE_INTTYPES_H)
#include <inttypes.h> #include <inttypes.h>
#elif defined(HAVE_STDINT_H) #elif defined(HAVE_STDINT_H)
#include <stdint.h> #include <stdint.h>
#endif #endif
/* the libdvbpsi distribution defines DVBPSI_DIST */ /* the libdvbpsi distribution defines DVBPSI_DIST */
#ifdef DVBPSI_DIST #ifdef DVBPSI_DIST
#include "../src/dvbpsi.h" #include "../src/dvbpsi.h"
skipping to change at line 57 skipping to change at line 58
/************************************************************************** *** /************************************************************************** ***
* writePSI * writePSI
************************************************************************** ***/ ************************************************************************** ***/
static void writePSI(uint8_t* p_packet, dvbpsi_psi_section_t* p_section) static void writePSI(uint8_t* p_packet, dvbpsi_psi_section_t* p_section)
{ {
p_packet[0] = 0x47; p_packet[0] = 0x47;
while(p_section) while(p_section)
{ {
size_t i_bytes_written = 0;
uint8_t* p_pos_in_ts; uint8_t* p_pos_in_ts;
uint8_t* p_byte = p_section->p_data; uint8_t* p_byte = p_section->p_data;
uint8_t* p_end = p_section->p_payload_end uint8_t* p_end = p_section->p_payload_end
+ (p_section->b_syntax_indicator ? 4 : 0); + (p_section->b_syntax_indicator ? 4 : 0);
p_packet[1] |= 0x40; p_packet[1] |= 0x40;
p_packet[3] = (p_packet[3] & 0x0f) | 0x10; p_packet[3] = (p_packet[3] & 0x0f) | 0x10;
p_packet[4] = 0x00; /* pointer_field */ p_packet[4] = 0x00; /* pointer_field */
p_pos_in_ts = p_packet + 5; p_pos_in_ts = p_packet + 5;
while((p_pos_in_ts < p_packet + 188) && (p_byte < p_end)) while((p_pos_in_ts < p_packet + 188) && (p_byte < p_end))
*(p_pos_in_ts++) = *(p_byte++); *(p_pos_in_ts++) = *(p_byte++);
while(p_pos_in_ts < p_packet + 188) while(p_pos_in_ts < p_packet + 188)
*(p_pos_in_ts++) = 0xff; *(p_pos_in_ts++) = 0xff;
fwrite(p_packet, 1, 188, stdout); i_bytes_written = fwrite(p_packet, 1, 188, stdout);
if(i_bytes_written == 0)
{
fprintf(stderr,"eof detected ... aborting\n");
return;
}
p_packet[3] = (p_packet[3] + 1) & 0x0f; p_packet[3] = (p_packet[3] + 1) & 0x0f;
while(p_byte < p_end) while(p_byte < p_end)
{ {
p_packet[1] &= 0xbf; p_packet[1] &= 0xbf;
p_packet[3] = (p_packet[3] & 0x0f) | 0x10; p_packet[3] = (p_packet[3] & 0x0f) | 0x10;
p_pos_in_ts = p_packet + 4; p_pos_in_ts = p_packet + 4;
while((p_pos_in_ts < p_packet + 188) && (p_byte < p_end)) while((p_pos_in_ts < p_packet + 188) && (p_byte < p_end))
*(p_pos_in_ts++) = *(p_byte++); *(p_pos_in_ts++) = *(p_byte++);
while(p_pos_in_ts < p_packet + 188) while(p_pos_in_ts < p_packet + 188)
*(p_pos_in_ts++) = 0xff; *(p_pos_in_ts++) = 0xff;
fwrite(p_packet, 1, 188, stdout); i_bytes_written = fwrite(p_packet, 1, 188, stdout);
if(i_bytes_written == 0)
{
fprintf(stderr,"eof detected ... aborting\n");
return;
}
p_packet[3] = (p_packet[3] + 1) & 0x0f; p_packet[3] = (p_packet[3] + 1) & 0x0f;
} }
p_section = p_section->p_next; p_section = p_section->p_next;
} }
} }
static void message(dvbpsi_t *handle, const dvbpsi_msg_level_t level, const
char* msg)
{
switch(level)
{
case DVBPSI_MSG_ERROR: fprintf(stderr, "Error: "); break;
case DVBPSI_MSG_WARN: fprintf(stderr, "Warning: "); break;
case DVBPSI_MSG_DEBUG: fprintf(stderr, "Debug: "); break;
default: /* do nothing */
return;
}
fprintf(stderr, "%s\n", msg);
}
/************************************************************************** *** /************************************************************************** ***
* main * main
************************************************************************** ***/ ************************************************************************** ***/
int main(int i_argc, char* pa_argv[]) int main(int i_argc, char* pa_argv[])
{ {
uint8_t packet[188]; uint8_t packet[188];
dvbpsi_pat_t pat; dvbpsi_pat_t pat;
dvbpsi_psi_section_t* p_section1, * p_section2; dvbpsi_psi_section_t* p_section1, * p_section2;
dvbpsi_psi_section_t* p_section3, * p_section4; dvbpsi_psi_section_t* p_section3, * p_section4;
dvbpsi_psi_section_t* p_section5, * p_section6; dvbpsi_psi_section_t* p_section5, * p_section6;
int i; int i;
dvbpsi_t *p_dvbpsi = dvbpsi_new(&message, DVBPSI_MSG_DEBUG);
if (p_dvbpsi == NULL)
return 1;
/* PAT generation */ /* PAT generation */
dvbpsi_InitPAT(&pat, 1, 0, 0); dvbpsi_pat_init(&pat, 1, 0, 0);
dvbpsi_PATAddProgram(&pat, 0, 0x12); dvbpsi_pat_program_add(&pat, 0, 0x12);
dvbpsi_PATAddProgram(&pat, 1, 0x42); dvbpsi_pat_program_add(&pat, 1, 0x42);
dvbpsi_PATAddProgram(&pat, 2, 0x21); dvbpsi_pat_program_add(&pat, 2, 0x21);
dvbpsi_PATAddProgram(&pat, 3, 0x24); dvbpsi_pat_program_add(&pat, 3, 0x24);
for(i = 4; i < 43; i++) for(i = 4; i < 43; i++)
dvbpsi_PATAddProgram(&pat, i, i); dvbpsi_pat_program_add(&pat, i, i);
p_section1 = dvbpsi_GenPATSections(&pat, 4); p_section1 = dvbpsi_pat_sections_generate(p_dvbpsi, &pat, 4);
pat.b_current_next = 1; pat.b_current_next = 1;
p_section2 = dvbpsi_GenPATSections(&pat, 8); p_section2 = dvbpsi_pat_sections_generate(p_dvbpsi, &pat, 8);
pat.i_version = 1; pat.i_version = 1;
pat.b_current_next = 0; pat.b_current_next = 0;
p_section3 = dvbpsi_GenPATSections(&pat, 16); p_section3 = dvbpsi_pat_sections_generate(p_dvbpsi, &pat, 16);
pat.b_current_next = 1; pat.b_current_next = 1;
p_section4 = dvbpsi_GenPATSections(&pat, 300); p_section4 = dvbpsi_pat_sections_generate(p_dvbpsi, &pat, 300);
pat.i_version = 2; pat.i_version = 2;
pat.b_current_next = 0; pat.b_current_next = 0;
p_section5 = dvbpsi_GenPATSections(&pat, 16); p_section5 = dvbpsi_pat_sections_generate(p_dvbpsi, &pat, 16);
pat.b_current_next = 1; pat.b_current_next = 1;
p_section6 = dvbpsi_GenPATSections(&pat, 16); p_section6 = dvbpsi_pat_sections_generate(p_dvbpsi, &pat, 16);
/* TS packets generation */ /* TS packets generation */
packet[0] = 0x47; packet[0] = 0x47;
packet[1] = packet[2] = 0x00; packet[1] = packet[2] = 0x00;
packet[3] = 0x00; packet[3] = 0x00;
writePSI(packet, p_section1); writePSI(packet, p_section1);
writePSI(packet, p_section2); writePSI(packet, p_section2);
writePSI(packet, p_section3); writePSI(packet, p_section3);
writePSI(packet, p_section4); writePSI(packet, p_section4);
writePSI(packet, p_section5); writePSI(packet, p_section5);
writePSI(packet, p_section6); writePSI(packet, p_section6);
dvbpsi_DeletePSISections(p_section1); dvbpsi_DeletePSISections(p_section1);
dvbpsi_DeletePSISections(p_section2); dvbpsi_DeletePSISections(p_section2);
dvbpsi_DeletePSISections(p_section3); dvbpsi_DeletePSISections(p_section3);
dvbpsi_DeletePSISections(p_section4); dvbpsi_DeletePSISections(p_section4);
dvbpsi_DeletePSISections(p_section5); dvbpsi_DeletePSISections(p_section5);
dvbpsi_DeletePSISections(p_section6); dvbpsi_DeletePSISections(p_section6);
dvbpsi_EmptyPAT(&pat); dvbpsi_pat_empty(&pat);
dvbpsi_delete(p_dvbpsi);
return 0; return 0;
} }
 End of changes. 17 change blocks. 
18 lines changed or deleted 47 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/