Another set of IO edits

--HG--
extra : convert_revision : svn%3Aeff31bef-be4a-0410-a8fe-e47997df2690/trunk%40140
issue20
tibs 2009-05-03 20:08:52 +00:00
rodzic ef54a360b1
commit 0789bd1fa2
11 zmienionych plików z 463 dodań i 470 usunięć

Wyświetl plik

@ -105,36 +105,35 @@ extern void free_access_unit(access_unit_p *acc_unit)
} }
/* /*
* Report on this access unit, on the given output stream. * Report on this access unit
*/ */
extern void report_access_unit(FILE *stream, extern void report_access_unit(access_unit_p access_unit)
access_unit_p access_unit)
{ {
int ii; int ii;
fprintf(stream,"Access unit %u",access_unit->index); fprint_msg("Access unit %u",access_unit->index);
if (access_unit->started_primary_picture) if (access_unit->started_primary_picture)
fprintf(stream," (%s)",access_unit->primary_start->start_reason); fprint_msg(" (%s)",access_unit->primary_start->start_reason);
fprintf(stream,":\n"); print_msg(":\n");
if (access_unit->field_pic_flag) if (access_unit->field_pic_flag)
fprintf(stream," %s field of frame %u\n", fprint_msg(" %s field of frame %u\n",
(access_unit->bottom_field_flag==1?"Bottom":"Top"), (access_unit->bottom_field_flag==1?"Bottom":"Top"),
access_unit->frame_num); access_unit->frame_num);
else else
fprintf(stream," Frame %u\n",access_unit->frame_num); fprint_msg(" Frame %u\n",access_unit->frame_num);
if (access_unit->ignored_broken_NAL_units) if (access_unit->ignored_broken_NAL_units)
fprintf(stream," Ignored %d broken NAL unit%s\n", fprint_msg(" Ignored %d broken NAL unit%s\n",
access_unit->ignored_broken_NAL_units, access_unit->ignored_broken_NAL_units,
(access_unit->ignored_broken_NAL_units==1?"":"s")); (access_unit->ignored_broken_NAL_units==1?"":"s"));
for (ii=0; ii<access_unit->nal_units->length; ii++) for (ii=0; ii<access_unit->nal_units->length; ii++)
{ {
nal_unit_p nal = access_unit->nal_units->array[ii]; nal_unit_p nal = access_unit->nal_units->array[ii];
if (nal == NULL) if (nal == NULL)
fprintf(stream," <null>\n"); print_msg(" <null>\n");
else else
{ {
fprintf(stream," %c",((access_unit->primary_start == nal)?'*':' ')); fprint_msg(" %c",((access_unit->primary_start == nal)?'*':' '));
report_nal(TRUE,nal); report_nal(TRUE,nal);
} }
} }
@ -672,20 +671,20 @@ static inline int end_access_unit(access_unit_context_p context,
{ {
if (show_details) if (show_details)
{ {
report_access_unit(stdout,access_unit); report_access_unit(access_unit);
if (context->pending_nal) if (context->pending_nal)
{ {
printf("... pending: "); print_msg("... pending: ");
report_nal(TRUE,context->pending_nal); report_nal(TRUE,context->pending_nal);
} }
if (context->end_of_sequence) if (context->end_of_sequence)
{ {
printf("--> EndOfSequence "); print_msg("--> EndOfSequence ");
report_nal(TRUE,context->end_of_sequence); report_nal(TRUE,context->end_of_sequence);
} }
if (context->end_of_stream) if (context->end_of_stream)
{ {
printf("--> EndOfStream "); print_msg("--> EndOfStream ");
report_nal(TRUE,context->end_of_stream); report_nal(TRUE,context->end_of_stream);
} }
} }
@ -904,9 +903,9 @@ static int maybe_remember_access_unit(reverse_data_p reverse_data,
access_unit->index); access_unit->index);
return 1; return 1;
} }
if (verbose) printf("REMEMBER IDR %5d at " OFFSET_T_FORMAT_08 if (verbose) fprint_msg("REMEMBER IDR %5d at " OFFSET_T_FORMAT_08
"/%04d for %5d\n",access_unit->index, "/%04d for %5d\n",access_unit->index,
start_posn.infile,start_posn.inpacket,num_bytes); start_posn.infile,start_posn.inpacket,num_bytes);
} }
return 0; return 0;
} }
@ -1056,7 +1055,7 @@ extern int get_next_access_unit(access_unit_context_p context,
else if (nal_is_redundant(nal)) else if (nal_is_redundant(nal))
{ {
// pass // pass
// printf(" ignoring redundant NAL unit\n"); // print_msg(" ignoring redundant NAL unit\n");
free_nal_unit(&nal); free_nal_unit(&nal);
} }
else else
@ -1270,8 +1269,8 @@ static int get_next_field_of_pair(access_unit_context_p context,
access_unit_p second; access_unit_p second;
if (show_details || context->nac->show_nal_details) if (show_details || context->nac->show_nal_details)
printf("@@ Looking for second field (%s time)\n", fprint_msg("@@ Looking for second field (%s time)\n",
(first_time?"first":"second")); (first_time?"first":"second"));
// We assume (hope) the next picture will be our second half // We assume (hope) the next picture will be our second half
err = get_next_non_empty_access_unit(context,quiet,show_details,&second); err = get_next_non_empty_access_unit(context,quiet,show_details,&second);
@ -1294,7 +1293,7 @@ static int get_next_field_of_pair(access_unit_context_p context,
{ {
// They appear to be matching fields - make a frame from them // They appear to be matching fields - make a frame from them
if (show_details || context->nac->show_nal_details) if (show_details || context->nac->show_nal_details)
printf("@@ Merging two field access units\n"); print_msg("@@ Merging two field access units\n");
err = merge_access_unit_nals(*access_unit,&second); // (frees `second`) err = merge_access_unit_nals(*access_unit,&second); // (frees `second`)
if (err) if (err)
{ {
@ -1302,7 +1301,7 @@ static int get_next_field_of_pair(access_unit_context_p context,
return 1; return 1;
} }
if (show_details) if (show_details)
report_access_unit(stdout,*access_unit); report_access_unit(*access_unit);
} }
else if (first_time) else if (first_time)
{ {

Wyświetl plik

@ -79,10 +79,9 @@ extern int rewind_access_unit_context(access_unit_context_p context);
extern void free_access_unit(access_unit_p *acc_unit); extern void free_access_unit(access_unit_p *acc_unit);
/* /*
* Report on this access unit, on the given output stream. * Report on this access unit
*/ */
extern void report_access_unit(FILE *stream, extern void report_access_unit(access_unit_p access_unit);
access_unit_p access_unit);
/* /*
* Retrieve the bounds of this access unit in the file it was read from. * Retrieve the bounds of this access unit in the file it was read from.

Wyświetl plik

@ -748,7 +748,7 @@ static void find_h264_fields(ES_p es,
if (access_unit->field_pic_flag == 1) if (access_unit->field_pic_flag == 1)
{ {
report_access_unit(stdout,access_unit); report_access_unit(access_unit);
num_fields ++; num_fields ++;
} }
else else
@ -823,7 +823,7 @@ static void report_h264_frames(ES_p es,
break; break;
if (!quiet) if (!quiet)
report_access_unit(stdout,access_unit); report_access_unit(access_unit);
if (count_sizes) if (count_sizes)
{ {

600
pes.c

Plik diff jest za duży Load Diff

131
pidint.c
Wyświetl plik

@ -33,6 +33,7 @@
#include "compat.h" #include "compat.h"
#include "pidint_fns.h" #include "pidint_fns.h"
#include "misc_fns.h" #include "misc_fns.h"
#include "printing_fns.h"
#include "ts_fns.h" #include "ts_fns.h"
#include "h222_defns.h" #include "h222_defns.h"
@ -49,14 +50,14 @@ extern int init_pidint_list(pidint_list_p list)
list->number = malloc(sizeof(int)*PIDINT_LIST_START_SIZE); list->number = malloc(sizeof(int)*PIDINT_LIST_START_SIZE);
if (list->number == NULL) if (list->number == NULL)
{ {
fprintf(stderr,"### Unable to allocate array in program list datastructure\n"); print_err("### Unable to allocate array in program list datastructure\n");
return 1; return 1;
} }
list->pid = malloc(sizeof(uint32_t)*PIDINT_LIST_START_SIZE); list->pid = malloc(sizeof(uint32_t)*PIDINT_LIST_START_SIZE);
if (list->pid == NULL) if (list->pid == NULL)
{ {
free(list->number); free(list->number);
fprintf(stderr,"### Unable to allocate array in program list datastructure\n"); print_err("### Unable to allocate array in program list datastructure\n");
return 1; return 1;
} }
return 0; return 0;
@ -73,7 +74,7 @@ extern int build_pidint_list(pidint_list_p *list)
pidint_list_p new = malloc(SIZEOF_PIDINT_LIST); pidint_list_p new = malloc(SIZEOF_PIDINT_LIST);
if (new == NULL) if (new == NULL)
{ {
fprintf(stderr,"### Unable to allocate pid/int list datastructure\n"); print_err("### Unable to allocate pid/int list datastructure\n");
return 1; return 1;
} }
@ -95,7 +96,7 @@ extern int append_to_pidint_list(pidint_list_p list,
{ {
if (list == NULL) if (list == NULL)
{ {
fprintf(stderr,"### Unable to append to NULL pid/int list\n"); print_err("### Unable to append to NULL pid/int list\n");
return 1; return 1;
} }
@ -105,13 +106,13 @@ extern int append_to_pidint_list(pidint_list_p list,
list->number = realloc(list->number,newsize*sizeof(int)); list->number = realloc(list->number,newsize*sizeof(int));
if (list->number == NULL) if (list->number == NULL)
{ {
fprintf(stderr,"### Unable to extend pid/int list array\n"); print_err("### Unable to extend pid/int list array\n");
return 1; return 1;
} }
list->pid = realloc(list->pid,newsize*sizeof(uint32_t)); list->pid = realloc(list->pid,newsize*sizeof(uint32_t));
if (list->pid == NULL) if (list->pid == NULL)
{ {
fprintf(stderr,"### Unable to extend pid/int list array\n"); print_err("### Unable to extend pid/int list array\n");
return 1; return 1;
} }
list->size = newsize; list->size = newsize;
@ -134,15 +135,15 @@ extern int remove_from_pidint_list(pidint_list_p list,
int ii; int ii;
if (list == NULL) if (list == NULL)
{ {
fprintf(stderr,"### Unable to remove entry from NULL pid/int list\n"); print_err("### Unable to remove entry from NULL pid/int list\n");
return 1; return 1;
} }
index = pid_index_in_pidint_list(list,pid); index = pid_index_in_pidint_list(list,pid);
if (index == -1) if (index == -1)
{ {
fprintf(stderr,"### Cannot remove PID %04x from pid/int list" fprint_err("### Cannot remove PID %04x from pid/int list"
" - it is not there\n",pid); " - it is not there\n",pid);
return 1; return 1;
} }
@ -191,21 +192,21 @@ extern void report_pidint_list(pidint_list_p list,
int pid_first) int pid_first)
{ {
if (list == NULL) if (list == NULL)
printf("%s is NULL\n",list_name); fprint_msg("%s is NULL\n",list_name);
else if (list->length == 0) else if (list->length == 0)
printf("%s is empty\n",list_name); fprint_msg("%s is empty\n",list_name);
else else
{ {
int ii; int ii;
printf("%s:\n",list_name); fprint_msg("%s:\n",list_name);
for (ii=0; ii<list->length; ii++) for (ii=0; ii<list->length; ii++)
{ {
if (pid_first) if (pid_first)
printf(" PID %04x (%d) -> %s %d\n", fprint_msg(" PID %04x (%d) -> %s %d\n",
list->pid[ii],list->pid[ii],int_name,list->number[ii]); list->pid[ii],list->pid[ii],int_name,list->number[ii]);
else else
printf(" %s %d -> PID %04x (%d)\n", fprint_msg(" %s %d -> PID %04x (%d)\n",
int_name,list->number[ii],list->pid[ii],list->pid[ii]); int_name,list->number[ii],list->pid[ii],list->pid[ii]);
} }
} }
} }
@ -313,21 +314,21 @@ extern int same_pidint_list(pidint_list_p list1,
extern void report_stream_list(pidint_list_p list, extern void report_stream_list(pidint_list_p list,
char *prefix) char *prefix)
{ {
if (prefix!=NULL) printf(prefix); if (prefix!=NULL) print_msg(prefix);
if (list == NULL) if (list == NULL)
printf("Program stream list is NULL\n"); print_msg("Program stream list is NULL\n");
else if (list->length == 0) else if (list->length == 0)
printf("Program stream list is empty\n"); print_msg("Program stream list is empty\n");
else else
{ {
int ii; int ii;
printf("Program streams:\n"); print_msg("Program streams:\n");
for (ii=0; ii<list->length; ii++) for (ii=0; ii<list->length; ii++)
{ {
if (prefix!=NULL) printf(prefix); if (prefix!=NULL) print_msg(prefix);
printf(" PID %04x (%d) -> Stream type %3d (%s)\n", fprint_msg(" PID %04x (%d) -> Stream type %3d (%s)\n",
list->pid[ii],list->pid[ii],list->number[ii], list->pid[ii],list->pid[ii],list->number[ii],
h222_stream_type_str(list->number[ii])); h222_stream_type_str(list->number[ii]));
} }
} }
} }
@ -345,7 +346,7 @@ static int init_pmt_streams(pmt_p pmt)
pmt->streams = malloc(SIZEOF_PMT_STREAM*PMT_STREAMS_START_SIZE); pmt->streams = malloc(SIZEOF_PMT_STREAM*PMT_STREAMS_START_SIZE);
if (pmt->streams == NULL) if (pmt->streams == NULL)
{ {
fprintf(stderr,"### Unable to allocate streams in PMT datastructure\n"); print_err("### Unable to allocate streams in PMT datastructure\n");
return 1; return 1;
} }
return 0; return 0;
@ -378,16 +379,16 @@ extern pmt_p build_pmt(uint16_t program_number, byte version_number,
if (PCR_pid != 0x1FFF && (PCR_pid < 0x0010 || PCR_pid > 0x1ffe)) if (PCR_pid != 0x1FFF && (PCR_pid < 0x0010 || PCR_pid > 0x1ffe))
{ {
fprintf(stderr,"### Error building PMT datastructure\n" fprint_err("### Error building PMT datastructure\n"
" PCR PID %04x is outside legal program stream range\n", " PCR PID %04x is outside legal program stream range\n",
PCR_pid); PCR_pid);
return NULL; return NULL;
} }
new = malloc(SIZEOF_PMT); new = malloc(SIZEOF_PMT);
if (new == NULL) if (new == NULL)
{ {
fprintf(stderr,"### Unable to allocate PMT datastructure\n"); print_err("### Unable to allocate PMT datastructure\n");
return NULL; return NULL;
} }
@ -422,8 +423,8 @@ extern int set_pmt_program_info(pmt_p pmt,
{ {
if (program_info_length > PMT_MAX_INFO_LENGTH) if (program_info_length > PMT_MAX_INFO_LENGTH)
{ {
fprintf(stderr,"### Program info length %d is more than %d\n", fprint_err("### Program info length %d is more than %d\n",
program_info_length,PMT_MAX_INFO_LENGTH); program_info_length,PMT_MAX_INFO_LENGTH);
return 1; return 1;
} }
if (pmt->program_info == NULL) if (pmt->program_info == NULL)
@ -431,7 +432,7 @@ extern int set_pmt_program_info(pmt_p pmt,
pmt->program_info = malloc(program_info_length); pmt->program_info = malloc(program_info_length);
if (pmt->program_info == NULL) if (pmt->program_info == NULL)
{ {
fprintf(stderr,"### Unable to allocate program info in PMT datastructure\n"); print_err("### Unable to allocate program info in PMT datastructure\n");
return 1; return 1;
} }
} }
@ -441,7 +442,7 @@ extern int set_pmt_program_info(pmt_p pmt,
pmt->program_info = realloc(pmt->program_info,program_info_length); pmt->program_info = realloc(pmt->program_info,program_info_length);
if (pmt->program_info == NULL) if (pmt->program_info == NULL)
{ {
fprintf(stderr,"### Unable to extend program info in PMT datastructure\n"); print_err("### Unable to extend program info in PMT datastructure\n");
return 1; return 1;
} }
} }
@ -465,22 +466,22 @@ extern int add_stream_to_pmt(pmt_p pmt,
{ {
if (pmt == NULL) if (pmt == NULL)
{ {
fprintf(stderr,"### Unable to append to NULL PMT datastructure\n"); print_err("### Unable to append to NULL PMT datastructure\n");
return 1; return 1;
} }
if (elementary_PID < 0x0010 || elementary_PID > 0x1ffe) if (elementary_PID < 0x0010 || elementary_PID > 0x1ffe)
{ {
fprintf(stderr,"### Error adding stream to PMT\n" fprint_err("### Error adding stream to PMT\n"
" Elementary PID %04x is outside legal program stream range\n", " Elementary PID %04x is outside legal program stream range\n",
elementary_PID); elementary_PID);
return 1; return 1;
} }
if (ES_info_length > PMT_MAX_INFO_LENGTH) if (ES_info_length > PMT_MAX_INFO_LENGTH)
{ {
fprintf(stderr,"### ES info length %d is more than %d\n", fprint_err("### ES info length %d is more than %d\n",
ES_info_length,PMT_MAX_INFO_LENGTH); ES_info_length,PMT_MAX_INFO_LENGTH);
return 1; return 1;
} }
@ -490,7 +491,7 @@ extern int add_stream_to_pmt(pmt_p pmt,
pmt->streams = realloc(pmt->streams,newsize*SIZEOF_PMT_STREAM); pmt->streams = realloc(pmt->streams,newsize*SIZEOF_PMT_STREAM);
if (pmt->streams == NULL) if (pmt->streams == NULL)
{ {
fprintf(stderr,"### Unable to extend PMT streams array\n"); print_err("### Unable to extend PMT streams array\n");
return 1; return 1;
} }
pmt->streams_size = newsize; pmt->streams_size = newsize;
@ -503,7 +504,7 @@ extern int add_stream_to_pmt(pmt_p pmt,
pmt->streams[pmt->num_streams].ES_info = malloc(ES_info_length); pmt->streams[pmt->num_streams].ES_info = malloc(ES_info_length);
if (pmt->streams[pmt->num_streams].ES_info == NULL) if (pmt->streams[pmt->num_streams].ES_info == NULL)
{ {
fprintf(stderr,"### Unable to allocate PMT stream ES info\n"); print_err("### Unable to allocate PMT stream ES info\n");
return 1; return 1;
} }
memcpy(pmt->streams[pmt->num_streams].ES_info,ES_info,ES_info_length); memcpy(pmt->streams[pmt->num_streams].ES_info,ES_info,ES_info_length);
@ -539,15 +540,15 @@ extern int remove_stream_from_pmt(pmt_p pmt,
int ii; int ii;
if (pmt == NULL) if (pmt == NULL)
{ {
fprintf(stderr,"### Unable to remove entry from NULL PMT datastructure\n"); print_err("### Unable to remove entry from NULL PMT datastructure\n");
return 1; return 1;
} }
index = pid_index_in_pmt(pmt,pid); index = pid_index_in_pmt(pmt,pid);
if (index == -1) if (index == -1)
{ {
fprintf(stderr,"### Cannot remove PID %04x from PMT datastructure" fprint_err("### Cannot remove PID %04x from PMT datastructure"
" - it is not there\n",pid); " - it is not there\n",pid);
return 1; return 1;
} }
@ -713,54 +714,54 @@ extern int same_pmt(pmt_p pmt1,
/* /*
* Report on a PMT datastructure. * Report on a PMT datastructure.
* *
* - `stream` is the stream to write to * - if `is_msg`, report as a message, otherwise as an error
* - `prefix` is NULL or a string to put before each line printed * - `prefix` is NULL or a string to put before each line printed
* - `pmt` is the PMT to report on * - `pmt` is the PMT to report on
*/ */
extern void report_pmt(FILE *stream, extern void report_pmt(int is_msg,
char *prefix, char *prefix,
pmt_p pmt) pmt_p pmt)
{ {
if (prefix!=NULL) fprintf(stream,prefix); if (prefix!=NULL) fprint_msg_or_err(is_msg,prefix);
if (pmt == NULL) if (pmt == NULL)
{ {
fprintf(stream,"PMT is NULL\n"); fprint_msg_or_err(is_msg,"PMT is NULL\n");
return; return;
} }
else else
fprintf(stream,"Program %d, version %d, PCR PID %04x (%d)\n", fprint_msg_or_err(is_msg,"Program %d, version %d, PCR PID %04x (%d)\n",
pmt->program_number,pmt->version_number,pmt->PCR_pid,pmt->PCR_pid); pmt->program_number,pmt->version_number,pmt->PCR_pid,pmt->PCR_pid);
if (pmt->program_info_length > 0) if (pmt->program_info_length > 0)
{ {
if (prefix!=NULL) fprintf(stream,prefix); if (prefix!=NULL) fprint_msg_or_err(is_msg,prefix);
print_data(stream==stdout," Program info",pmt->program_info, print_data(is_msg," Program info",pmt->program_info,
pmt->program_info_length,pmt->program_info_length); pmt->program_info_length,pmt->program_info_length);
print_descriptors(stream,prefix," ",pmt->program_info, print_descriptors(is_msg,prefix," ",pmt->program_info,
pmt->program_info_length); pmt->program_info_length);
} }
if (pmt->num_streams > 0) if (pmt->num_streams > 0)
{ {
int ii; int ii;
if (prefix!=NULL) fprintf(stream,prefix); if (prefix!=NULL) fprint_msg_or_err(is_msg,prefix);
fprintf(stream,"Program streams:\n"); fprint_msg_or_err(is_msg,"Program streams:\n");
for (ii=0; ii<pmt->num_streams; ii++) for (ii=0; ii<pmt->num_streams; ii++)
{ {
if (prefix!=NULL) fprintf(stream,prefix); if (prefix!=NULL) fprint_msg_or_err(is_msg,prefix);
fprintf(stream," PID %04x (%4d) -> Stream type %02x (%3d) %s\n", fprint_msg_or_err(is_msg," PID %04x (%4d) -> Stream type %02x (%3d) %s\n",
pmt->streams[ii].elementary_PID, pmt->streams[ii].elementary_PID,
pmt->streams[ii].elementary_PID, pmt->streams[ii].elementary_PID,
pmt->streams[ii].stream_type, pmt->streams[ii].stream_type,
pmt->streams[ii].stream_type, pmt->streams[ii].stream_type,
h222_stream_type_str(pmt->streams[ii].stream_type)); h222_stream_type_str(pmt->streams[ii].stream_type));
if (pmt->streams[ii].ES_info_length > 0) if (pmt->streams[ii].ES_info_length > 0)
{ {
if (prefix!=NULL) fprintf(stream,prefix); if (prefix!=NULL) fprint_msg_or_err(is_msg,prefix);
print_data(stream==stdout," ES info", print_data(is_msg," ES info",
pmt->streams[ii].ES_info, pmt->streams[ii].ES_info,
pmt->streams[ii].ES_info_length, pmt->streams[ii].ES_info_length,
pmt->streams[ii].ES_info_length); pmt->streams[ii].ES_info_length);
print_descriptors(stream,prefix," ", print_descriptors(is_msg,prefix," ",
pmt->streams[ii].ES_info, pmt->streams[ii].ES_info,
pmt->streams[ii].ES_info_length); pmt->streams[ii].ES_info_length);
} }

Wyświetl plik

@ -229,11 +229,11 @@ extern int same_pmt(pmt_p pmt1,
/* /*
* Report on a PMT datastructure. * Report on a PMT datastructure.
* *
* - `stream` is the stream to write to * - if `is_msg`, report as a message, otherwise as an error
* - `prefix` is NULL or a string to put before each line printed * - `prefix` is NULL or a string to put before each line printed
* - `pmt` is the PMT to report on * - `pmt` is the PMT to report on
*/ */
extern void report_pmt(FILE *stream, extern void report_pmt(int is_msg,
char *prefix, char *prefix,
pmt_p pmt); pmt_p pmt);

124
ts.c
Wyświetl plik

@ -41,6 +41,7 @@
#include "ts_fns.h" #include "ts_fns.h"
#include "tswrite_fns.h" #include "tswrite_fns.h"
#include "misc_fns.h" #include "misc_fns.h"
#include "printing_fns.h"
#include "pidint_fns.h" #include "pidint_fns.h"
#include "pes_fns.h" #include "pes_fns.h"
@ -1005,7 +1006,7 @@ extern int write_pmt(TS_writer_p output,
if (section_length > 1021) if (section_length > 1021)
{ {
fprintf(stderr,"### PMT data is too long - will not fit in 1021 bytes\n"); fprintf(stderr,"### PMT data is too long - will not fit in 1021 bytes\n");
report_pmt(stderr," ",pmt); report_pmt(FALSE," ",pmt);
return 1; return 1;
} }
@ -2193,7 +2194,7 @@ extern int extract_prog_list_from_pat(int verbose,
* Print out information about program descriptors * Print out information about program descriptors
* (either from the PMT program info, or the PMT/stream ES info) * (either from the PMT program info, or the PMT/stream ES info)
* *
* - `stream` is the stream to print on * - if `is_msg` then print as a message, otherwise as an error
* - `leader1` and `leader2` are the text to write at the start of each line * - `leader1` and `leader2` are the text to write at the start of each line
* (either or both may be NULL) * (either or both may be NULL)
* - `desc_data` is the data containing the descriptors * - `desc_data` is the data containing the descriptors
@ -2203,7 +2204,7 @@ extern int extract_prog_list_from_pat(int verbose,
* *
* If you want to interpret more descriptors then ITU-T J.94 is the standard * If you want to interpret more descriptors then ITU-T J.94 is the standard
*/ */
extern int print_descriptors(FILE *stream, extern int print_descriptors(int is_msg,
char *leader1, char *leader1,
char *leader2, char *leader2,
byte *desc_data, byte *desc_data,
@ -2224,8 +2225,8 @@ extern int print_descriptors(FILE *stream,
if (this_length > data_len) if (this_length > data_len)
{ {
// Not much we can do - try giving up? // Not much we can do - try giving up?
fprintf(stream,"Descriptor %x says length %d, but only %d bytes left\n", fprint_msg_or_err(is_msg,"Descriptor %x says length %d, but only %d bytes left\n",
tag,this_length,data_len); tag,this_length,data_len);
return 1; // Hmm - well, maybe return 1; // Hmm - well, maybe
} }
@ -2249,63 +2250,63 @@ extern int print_descriptors(FILE *stream,
tag==18?"IBP": tag==18?"IBP":
tag>19 && tag<64?"Reserved":NULL); tag>19 && tag<64?"Reserved":NULL);
if (leader1 != NULL) fputs(leader1,stream); if (leader1 != NULL) fprint_msg_or_err(is_msg,"%s",leader1);
if (leader2 != NULL) fputs(leader2,stream); if (leader2 != NULL) fprint_msg_or_err(is_msg,"%s",leader2);
if (name != NULL) if (name != NULL)
print_data(stream==stdout,name,data,this_length,100); print_data(is_msg,name,data,this_length,100);
else else
{ {
switch (tag) switch (tag)
{ {
uint32_t temp_u; uint32_t temp_u;
case 5: case 5:
fprintf(stream,"Registration "); fprint_msg_or_err(is_msg,"Registration ");
if (this_length >= 4) if (this_length >= 4)
{ {
for (ii=0; ii<4; ii++) for (ii=0; ii<4; ii++)
{ {
if (isprint(data[ii])) if (isprint(data[ii]))
putc(data[ii],stream); fprint_msg_or_err(is_msg,"%c",data[ii]);
else else
fprintf(stream,"<%02x>",data[ii]); fprint_msg_or_err(is_msg,"<%02x>",data[ii]);
} }
if (this_length > 4) if (this_length > 4)
for (ii=4; ii < this_length; ii++) for (ii=4; ii < this_length; ii++)
fprintf(stream," %02x",data[ii]); fprint_msg_or_err(is_msg," %02x",data[ii]);
} }
fprintf(stream,"\n"); fprint_msg_or_err(is_msg,"\n");
break; break;
case 9: // I see this in data, so might as well "explain" it case 9: // I see this in data, so might as well "explain" it
fprintf(stream,"Conditional access: "); fprint_msg_or_err(is_msg,"Conditional access: ");
temp_u = (data[0] << 8) | data[1]; temp_u = (data[0] << 8) | data[1];
fprintf(stream,"id %04x (%d) ",temp_u,temp_u); fprint_msg_or_err(is_msg,"id %04x (%d) ",temp_u,temp_u);
temp_u = ((data[2] & 0x1F) << 8) | data[3]; temp_u = ((data[2] & 0x1F) << 8) | data[3];
fprintf(stream,"PID %04x (%d) ",temp_u,temp_u); fprint_msg_or_err(is_msg,"PID %04x (%d) ",temp_u,temp_u);
if (data_len > 4) if (data_len > 4)
print_data(stream==stdout,"data",&data[4],data_len-4,data_len-4); print_data(is_msg,"data",&data[4],data_len-4,data_len-4);
else else
fprintf(stream,"\n"); fprint_msg_or_err(is_msg,"\n");
break; break;
case 10: // We'll assume the length is a multiple of 4 case 10: // We'll assume the length is a multiple of 4
fprintf(stream,"Languages: "); fprint_msg_or_err(is_msg,"Languages: ");
for (ii = 0; ii < this_length/4; ii++) for (ii = 0; ii < this_length/4; ii++)
{ {
byte audio_type; byte audio_type;
if (ii > 0) fprintf(stream,", "); if (ii > 0) fprint_msg_or_err(is_msg,", ");
putc(*(data+(ii*4)+0),stream); fprint_msg_or_err(is_msg,"%c",*(data+(ii*4)+0));
putc(*(data+(ii*4)+1),stream); fprint_msg_or_err(is_msg,"%c",*(data+(ii*4)+1));
putc(*(data+(ii*4)+2),stream); fprint_msg_or_err(is_msg,"%c",*(data+(ii*4)+2));
audio_type = *(data+(ii*4)+3); audio_type = *(data+(ii*4)+3);
switch (audio_type) switch (audio_type)
{ {
case 0: /*fprintf(stream,"/undefined");*/ break; // clearer to say nowt? case 0: /*fprint_msg_or_err(is_msg,"/undefined");*/ break; // clearer to say nowt?
case 1: fprintf(stream,"/clean effects"); break; case 1: fprint_msg_or_err(is_msg,"/clean effects"); break;
case 2: fprintf(stream,"/hearing impaired"); break; case 2: fprint_msg_or_err(is_msg,"/hearing impaired"); break;
case 3: fprintf(stream,"/visual impaired commentary"); break; case 3: fprint_msg_or_err(is_msg,"/visual impaired commentary"); break;
default: fprintf(stream,"/reserved:0x%02x",audio_type); break; default: fprint_msg_or_err(is_msg,"/reserved:0x%02x",audio_type); break;
} }
} }
fprintf(stream,"\n"); fprint_msg_or_err(is_msg,"\n");
break; break;
case 0x56: // teletext case 0x56: // teletext
for (ii = 0; ii < this_length; ii += 5) for (ii = 0; ii < this_length; ii += 5)
@ -2313,42 +2314,42 @@ extern int print_descriptors(FILE *stream,
int jj; int jj;
int teletext_type, teletext_magazine, teletext_page; int teletext_type, teletext_magazine, teletext_page;
if (ii == 0) if (ii == 0)
fprintf(stream,"Teletext: "); fprint_msg_or_err(is_msg,"Teletext: ");
else else
{ {
if (leader1 != NULL) fputs(leader1,stream); if (leader1 != NULL) fprint_msg_or_err(is_msg,"%s",leader1);
if (leader2 != NULL) fputs(leader2,stream); if (leader2 != NULL) fprint_msg_or_err(is_msg,"%s",leader2);
fprintf(stream," "); fprint_msg_or_err(is_msg," ");
} }
fprintf(stream,"language="); fprint_msg_or_err(is_msg,"language=");
for (jj=ii; jj<ii+3; jj++) for (jj=ii; jj<ii+3; jj++)
{ {
if (isprint(data[jj])) if (isprint(data[jj]))
putc(data[jj],stream); fprint_msg_or_err(is_msg,"%c",data[jj]);
else else
fprintf(stream,"<%02x>",data[jj]); fprint_msg_or_err(is_msg,"<%02x>",data[jj]);
} }
teletext_type = (data[ii+3] & 0xF8) >> 3; teletext_type = (data[ii+3] & 0xF8) >> 3;
teletext_magazine = (data[ii+3] & 0x07); teletext_magazine = (data[ii+3] & 0x07);
teletext_page = data[ii+4]; teletext_page = data[ii+4];
fprintf(stream,", type="); fprint_msg_or_err(is_msg,", type=");
switch (teletext_type) switch (teletext_type)
{ {
case 1: fprintf(stream,"Initial"); break; case 1: fprint_msg_or_err(is_msg,"Initial"); break;
case 2: fprintf(stream,"Subtitles"); break; case 2: fprint_msg_or_err(is_msg,"Subtitles"); break;
case 3: fprintf(stream,"Additional info"); break; case 3: fprint_msg_or_err(is_msg,"Additional info"); break;
case 4: fprintf(stream,"Programme schedule"); break; case 4: fprint_msg_or_err(is_msg,"Programme schedule"); break;
case 5: fprintf(stream,"Hearing impaired subtitles"); break; case 5: fprint_msg_or_err(is_msg,"Hearing impaired subtitles"); break;
default: fprintf(stream,"%x (reserved)",teletext_type); break; default: fprint_msg_or_err(is_msg,"%x (reserved)",teletext_type); break;
} }
fprintf(stream,", magazine %d, page %x",teletext_magazine,teletext_page); fprint_msg_or_err(is_msg,", magazine %d, page %x",teletext_magazine,teletext_page);
fprintf(stream,"\n"); fprint_msg_or_err(is_msg,"\n");
} }
break; break;
case 0x59: case 0x59:
{ {
fprintf(stream, "subtitling_descriptor:\n"); fprint_msg_or_err(is_msg, "subtitling_descriptor:\n");
for (ii = 0; ii + 8 <= this_length; ii += 8) for (ii = 0; ii + 8 <= this_length; ii += 8)
{ {
@ -2360,34 +2361,33 @@ extern int print_descriptors(FILE *stream,
lang[1] = data[ii + 1]; lang[1] = data[ii + 1];
lang[2] = data[ii + 2]; lang[2] = data[ii + 2];
lang[3] = 0; lang[3] = 0;
if (leader1 != NULL) fputs(leader1,stream); if (leader1 != NULL) fprint_msg_or_err(is_msg,"%s",leader1);
if (leader2 != NULL) fputs(leader2,stream); if (leader2 != NULL) fprint_msg_or_err(is_msg,"%s",leader2);
fprintf(stream, fprint_msg_or_err(is_msg," language='%s', subtitling_type=%u\n",
" language='%s', subtitling_type=%u\n",
lang, subtitling_type); lang, subtitling_type);
if (leader1 != NULL) fputs(leader1,stream); if (leader1 != NULL) fprint_msg_or_err(is_msg,"%s",leader1);
if (leader2 != NULL) fputs(leader2,stream); if (leader2 != NULL) fprint_msg_or_err(is_msg,"%s",leader2);
fprintf(stream, fprint_msg_or_err(is_msg,
" composition_page_id=%u, ancillary_page_id=%u\n", " composition_page_id=%u, ancillary_page_id=%u\n",
composition_page_id, ancillary_page_id); composition_page_id, ancillary_page_id);
} }
if (ii < this_length) if (ii < this_length)
fprintf(stream, "### %d spare bytes at end of descriptor\n", this_length - ii); fprint_msg_or_err(is_msg, "### %d spare bytes at end of descriptor\n", this_length - ii);
break; break;
} }
case 0x6A: case 0x6A:
print_data(stream==stdout,"DVB AC-3",data,this_length,100); print_data(is_msg,"DVB AC-3",data,this_length,100);
break; break;
case 0x81: case 0x81:
print_data(stream==stdout,"ATSC AC-3",data,this_length,100); print_data(is_msg,"ATSC AC-3",data,this_length,100);
default: default:
// Report the tag number as decimal since that is how H.222 // Report the tag number as decimal since that is how H.222
// describes it in table 2-39 // describes it in table 2-39
{ {
char temp_c[50]; // twice as much as I need... char temp_c[50]; // twice as much as I need...
sprintf(temp_c,"Descriptor tag %02x (%3d)",tag,tag); sprintf(temp_c,"Descriptor tag %02x (%3d)",tag,tag);
print_data(stream==stdout,temp_c,data,this_length,100); print_data(is_msg,temp_c,data,this_length,100);
} }
break; break;
} }
@ -2671,7 +2671,7 @@ extern int extract_pmt(int verbose,
if (verbose && program_info_length > 0) if (verbose && program_info_length > 0)
{ {
printf(" Program info:\n"); printf(" Program info:\n");
print_descriptors(stdout," ",NULL,&data[12],program_info_length); print_descriptors(TRUE," ",NULL,&data[12],program_info_length);
} }
// 32 bits at the end of a program association section is reserved for a CRC // 32 bits at the end of a program association section is reserved for a CRC
@ -2724,7 +2724,7 @@ extern int extract_pmt(int verbose,
printf(" PID %04x -> Stream %02x %s\n",pid,stream_type, printf(" PID %04x -> Stream %02x %s\n",pid,stream_type,
h222_stream_type_str(stream_type)); h222_stream_type_str(stream_type));
if (ES_info_length > 0) if (ES_info_length > 0)
print_descriptors(stdout," ",NULL,&stream_data[5],ES_info_length); print_descriptors(TRUE," ",NULL,&stream_data[5],ES_info_length);
} }
err = add_stream_to_pmt(*pmt,pid,stream_type,ES_info_length, err = add_stream_to_pmt(*pmt,pid,stream_type,ES_info_length,
stream_data+5); stream_data+5);
@ -2903,7 +2903,7 @@ extern int extract_stream_list_from_pmt(int verbose,
if (verbose && program_info_length > 0) if (verbose && program_info_length > 0)
{ {
printf(" Program info:\n"); printf(" Program info:\n");
print_descriptors(stdout," ",NULL,&data[12],program_info_length); print_descriptors(TRUE," ",NULL,&data[12],program_info_length);
} }
// 32 bits at the end of a program association section is reserved for a CRC // 32 bits at the end of a program association section is reserved for a CRC
@ -2949,7 +2949,7 @@ extern int extract_stream_list_from_pmt(int verbose,
buf[SARRAYSIZE-1] = '\0'; buf[SARRAYSIZE-1] = '\0';
printf(" Stream %02x %-40s -> PID %04x\n",stream_type,buf,pid); printf(" Stream %02x %-40s -> PID %04x\n",stream_type,buf,pid);
if (ES_info_length > 0) if (ES_info_length > 0)
print_descriptors(stdout," ",NULL,&stream_data[5],ES_info_length); print_descriptors(TRUE," ",NULL,&stream_data[5],ES_info_length);
} }
// For the moment, we shan't bother to remember the extra info. // For the moment, we shan't bother to remember the extra info.
err = append_to_pidint_list(*stream_list,pid,stream_type); err = append_to_pidint_list(*stream_list,pid,stream_type);
@ -3442,7 +3442,7 @@ extern int find_pmt(TS_reader_p tsreader,
{ {
printf("\n"); printf("\n");
printf("Program map\n"); printf("Program map\n");
report_pmt(stdout," ",*pmt); report_pmt(TRUE," ",*pmt);
printf("\n"); printf("\n");
} }
return 0; return 0;

Wyświetl plik

@ -549,7 +549,7 @@ extern void report_payload(int show_data,
* Print out information about program descriptors * Print out information about program descriptors
* (either from the PMT program info, or the PMT/stream ES info) * (either from the PMT program info, or the PMT/stream ES info)
* *
* - `stream` is the stream to print on * - if `is_msg` then print as a message, otherwise as an error
* - `leader1` and `leader2` are the text to write at the start of each line * - `leader1` and `leader2` are the text to write at the start of each line
* (either or both may be NULL) * (either or both may be NULL)
* - `desc_data` is the data containing the descriptors * - `desc_data` is the data containing the descriptors
@ -557,7 +557,7 @@ extern void report_payload(int show_data,
* *
* Returns 0 if all went well, 1 if something went wrong * Returns 0 if all went well, 1 if something went wrong
*/ */
extern int print_descriptors(FILE *stream, extern int print_descriptors(int is_msg,
char *leader1, char *leader1,
char *leader2, char *leader2,
byte *desc_data, byte *desc_data,

Wyświetl plik

@ -263,7 +263,7 @@ static int report_streams(TS_reader_p tsreader,
else if (!verbose) else if (!verbose)
printf("\nPacket %d is PMT with PID %04x (%d)\n",ii+1,pid,pid); printf("\nPacket %d is PMT with PID %04x (%d)\n",ii+1,pid,pid);
report_pmt(stdout," ",this_pmt); report_pmt(TRUE," ",this_pmt);
free_pmt(&last_pmt); free_pmt(&last_pmt);
last_pmt = this_pmt; last_pmt = this_pmt;

Wyświetl plik

@ -342,7 +342,7 @@ static int find_PCR_PID(TS_reader_p tsreader,
} }
if (!quiet) if (!quiet)
report_pmt(stdout," ",pmt); report_pmt(TRUE," ",pmt);
*pcr_pid = pmt->PCR_pid; *pcr_pid = pmt->PCR_pid;
free_pmt(&pmt); free_pmt(&pmt);
if (!quiet) if (!quiet)

Wyświetl plik

@ -745,7 +745,7 @@ static int report_ts(TS_reader_p tsreader,
{ {
fprintf(stderr,"### Internal error: stream for PID %0x returned NULL" fprintf(stderr,"### Internal error: stream for PID %0x returned NULL"
" in PMT\n",pid); " in PMT\n",pid);
report_pmt(stderr," ",pmt); report_pmt(FALSE," ",pmt);
free_pidint_list(&prog_list); free_pidint_list(&prog_list);
free_pmt(&pmt); free_pmt(&pmt);
if (pmt_data) free(pmt_data); if (pmt_data) free(pmt_data);
@ -904,7 +904,7 @@ static int report_ts(TS_reader_p tsreader,
pmt_data = NULL; pmt_data_len = 0; pmt_data_used = 0; pmt_data = NULL; pmt_data_len = 0; pmt_data_used = 0;
#if 0 #if 0
printf("PMT data read as:\n"); printf("PMT data read as:\n");
report_pmt(stdout," ",pmt); report_pmt(TRUE," ",pmt);
printf("\n"); printf("\n");
#endif #endif
} }