|
Packit |
5e46da |
/*
|
|
Packit |
5e46da |
* This file is part of libbluray
|
|
Packit |
5e46da |
* Copyright (C) 2009-2010 John Stebbins
|
|
Packit |
5e46da |
* Copyright (C) 2012-2013 Petri Hintukainen <phintuka@users.sourceforge.net>
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* This library is free software; you can redistribute it and/or
|
|
Packit |
5e46da |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
5e46da |
* License as published by the Free Software Foundation; either
|
|
Packit |
5e46da |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
5e46da |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
5e46da |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
5e46da |
* Lesser General Public License for more details.
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
5e46da |
* License along with this library. If not, see
|
|
Packit |
5e46da |
* <http://www.gnu.org/licenses/>.
|
|
Packit |
5e46da |
*/
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include <stdio.h>
|
|
Packit |
5e46da |
#include <stdlib.h>
|
|
Packit |
5e46da |
#include <unistd.h>
|
|
Packit |
5e46da |
#include <inttypes.h>
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include "bluray.h"
|
|
Packit |
5e46da |
#include "bdnav/clpi_data.h"
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include "util.h"
|
|
Packit |
5e46da |
#include "strings.h"
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static int verbose;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
const VALUE_MAP video_aspect_map[] = {
|
|
Packit |
5e46da |
{0, "Reserved1"},
|
|
Packit |
5e46da |
{1, "Reserved2"},
|
|
Packit |
5e46da |
{2, "4:3"},
|
|
Packit |
5e46da |
{3, "16:9"},
|
|
Packit |
5e46da |
{0, NULL}
|
|
Packit |
5e46da |
};
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
const VALUE_MAP application_type_map[] = {
|
|
Packit |
5e46da |
{1, "Main TS for a main-path of Movie"},
|
|
Packit |
5e46da |
{2, "Main TS for a main-path of Time based slide show"},
|
|
Packit |
5e46da |
{3, "Main TS for a main-path of Browsable slide show"},
|
|
Packit |
5e46da |
{4, "Sub TS for a sub-path of Browsable slide show"},
|
|
Packit |
5e46da |
{5, "Sub TS for a sub-path of Interactive Graphics menu"},
|
|
Packit |
5e46da |
{6, "Sub TS for a sub-path of Text subtitle"},
|
|
Packit |
5e46da |
{7, "Sub TS for a sub-path of one or more elementary streams path"},
|
|
Packit |
5e46da |
{0, NULL},
|
|
Packit |
5e46da |
};
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void
|
|
Packit |
5e46da |
_show_stream(CLPI_PROG_STREAM *ss, int level)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
indent_printf(level, "Codec (%04x): %s", ss->coding_type,
|
|
Packit |
5e46da |
_lookup_str(codec_map, ss->coding_type));
|
|
Packit |
5e46da |
indent_printf(level, "PID: %04x", ss->pid);
|
|
Packit |
5e46da |
switch (ss->coding_type) {
|
|
Packit |
5e46da |
case 0x01:
|
|
Packit |
5e46da |
case 0x02:
|
|
Packit |
5e46da |
case 0xea:
|
|
Packit |
5e46da |
case 0x1b:
|
|
Packit |
5e46da |
case 0x20:
|
|
Packit |
5e46da |
case 0x24:
|
|
Packit |
5e46da |
indent_printf(level, "Format %02x: %s", ss->format,
|
|
Packit |
5e46da |
_lookup_str(video_format_map, ss->format));
|
|
Packit |
5e46da |
indent_printf(level, "Rate %02x: %s", ss->rate,
|
|
Packit |
5e46da |
_lookup_str(video_rate_map, ss->rate));
|
|
Packit |
5e46da |
indent_printf(level, "Aspect %02x: %s", ss->aspect,
|
|
Packit |
5e46da |
_lookup_str(video_aspect_map, ss->aspect));
|
|
Packit |
5e46da |
indent_printf(level, "oc_flag %02x", ss->oc_flag);
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
case 0x03:
|
|
Packit |
5e46da |
case 0x04:
|
|
Packit |
5e46da |
case 0x80:
|
|
Packit |
5e46da |
case 0x81:
|
|
Packit |
5e46da |
case 0x82:
|
|
Packit |
5e46da |
case 0x83:
|
|
Packit |
5e46da |
case 0x84:
|
|
Packit |
5e46da |
case 0x85:
|
|
Packit |
5e46da |
case 0x86:
|
|
Packit |
5e46da |
case 0xa1:
|
|
Packit |
5e46da |
case 0xa2:
|
|
Packit |
5e46da |
indent_printf(level, "Format %02x: %s", ss->format,
|
|
Packit |
5e46da |
_lookup_str(audio_format_map, ss->format));
|
|
Packit |
5e46da |
indent_printf(level, "Rate %02x: %s", ss->rate,
|
|
Packit |
5e46da |
_lookup_str(audio_rate_map, ss->rate));
|
|
Packit |
5e46da |
indent_printf(level, "Language: %s", ss->lang);
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
case 0x90:
|
|
Packit |
5e46da |
case 0x91:
|
|
Packit |
5e46da |
case 0xa0:
|
|
Packit |
5e46da |
indent_printf(level, "Language: %s", ss->lang);
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
case 0x92:
|
|
Packit |
5e46da |
indent_printf(level, "Char Code: %02x", ss->char_code);
|
|
Packit |
5e46da |
indent_printf(level, "Language: %s", ss->lang);
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
default:
|
|
Packit |
5e46da |
fprintf(stderr, "unrecognized coding type %02x\n", ss->coding_type);
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
};
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void
|
|
Packit |
5e46da |
_show_clip_info(CLPI_CL *cl, int level)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
CLPI_CLIP_INFO *ci = &cl->clip;
|
|
Packit |
5e46da |
int ii;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
indent_printf(level, "Clip Info");
|
|
Packit |
5e46da |
indent_printf(level+1, "Clip Stream Type: %02x", ci->clip_stream_type);
|
|
Packit |
5e46da |
indent_printf(level+1, "Clip Application Type (%02x): %s",
|
|
Packit |
5e46da |
ci->application_type, _lookup_str(application_type_map, ci->application_type));
|
|
Packit |
5e46da |
indent_printf(level+1, "is_ATC_delta: %s", ci->is_atc_delta ? "True" : "False");
|
|
Packit |
5e46da |
indent_printf(level+1, "ATC delta count: %d", ci->atc_delta_count);
|
|
Packit |
5e46da |
indent_printf(level+1, "TS Recording Rate: %u", ci->ts_recording_rate);
|
|
Packit |
5e46da |
indent_printf(level+1, "Number Source Packets: %u", ci->num_source_packets);
|
|
Packit |
5e46da |
// Show ts type info
|
|
Packit |
5e46da |
indent_printf(level+1, "TS Type Info");
|
|
Packit |
5e46da |
indent_printf(level+2, "Validity Flags %02x", ci->ts_type_info.validity);
|
|
Packit |
5e46da |
indent_printf(level+2, "Format Id %s", ci->ts_type_info.format_id);
|
|
Packit |
5e46da |
// Show cc5 thing
|
|
Packit |
5e46da |
for (ii = 0; ii < ci->atc_delta_count; ii++) {
|
|
Packit |
5e46da |
indent_printf(level+1, "ATC delta[ %d ]", ii);
|
|
Packit |
5e46da |
indent_printf(level+2, "Delta %08x", ci->atc_delta[ii].delta);
|
|
Packit |
5e46da |
indent_printf(level+2, "File Id %s", ci->atc_delta[ii].file_id);
|
|
Packit |
5e46da |
indent_printf(level+2, "File Code %s", ci->atc_delta[ii].file_code);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
// show fonts
|
|
Packit |
5e46da |
if (cl->clip.font_info.font_count) {
|
|
Packit |
5e46da |
indent_printf(level+1, "Font files");
|
|
Packit |
5e46da |
for (ii = 0; ii < cl->clip.font_info.font_count; ii++) {
|
|
Packit |
5e46da |
indent_printf(level+2, "Font file %d: %s.otf", ii+1, cl->clip.font_info.font[ii].file_id);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
printf("\n");
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void
|
|
Packit |
5e46da |
_show_seq_info(CLPI_SEQ_INFO *si, int level)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
CLPI_ATC_SEQ *atc;
|
|
Packit |
5e46da |
CLPI_STC_SEQ *stc;
|
|
Packit |
5e46da |
int ii, jj;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
indent_printf(level, "Sequence Info");
|
|
Packit |
5e46da |
indent_printf(level+1, "Number ATC Sequences: %d", si->num_atc_seq);
|
|
Packit |
5e46da |
for (ii = 0; ii < si->num_atc_seq; ii++) {
|
|
Packit |
5e46da |
atc = &si->atc_seq[ii];
|
|
Packit |
5e46da |
indent_printf(level+1, "ATC Sequence %d", ii);
|
|
Packit |
5e46da |
indent_printf(level+2, "SPN ATC Start: %u", atc->spn_atc_start);
|
|
Packit |
5e46da |
indent_printf(level+2, "Offset STC Id: %d", atc->offset_stc_id);
|
|
Packit |
5e46da |
indent_printf(level+2, "Number STC Sequences: %d", atc->num_stc_seq);
|
|
Packit |
5e46da |
for (jj = 0; jj < atc->num_stc_seq; jj++) {
|
|
Packit |
5e46da |
stc = &atc->stc_seq[jj];
|
|
Packit |
5e46da |
indent_printf(level+2, "ATC Sequence %d", jj);
|
|
Packit |
5e46da |
indent_printf(level+3, "SPN STC Start: %u", stc->spn_stc_start);
|
|
Packit |
5e46da |
indent_printf(level+3, "PCR PID: %04x", stc->pcr_pid);
|
|
Packit |
5e46da |
indent_printf(level+3, "Presentation Start: %u",
|
|
Packit |
5e46da |
stc->presentation_start_time);
|
|
Packit |
5e46da |
indent_printf(level+3, "Presentation End: %u",
|
|
Packit |
5e46da |
stc->presentation_end_time);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void
|
|
Packit |
5e46da |
_show_prog_info(CLPI_PROG_INFO *pi, int level)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
CLPI_PROG *prog;
|
|
Packit |
5e46da |
int ii, jj;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
indent_printf(level, "Program Info");
|
|
Packit |
5e46da |
indent_printf(level+1, "Number Programs: %d", pi->num_prog);
|
|
Packit |
5e46da |
for (ii = 0; ii < pi->num_prog; ii++) {
|
|
Packit |
5e46da |
prog = &pi->progs[ii];
|
|
Packit |
5e46da |
indent_printf(level+1, "Program %d", ii);
|
|
Packit |
5e46da |
indent_printf(level+2, "SPN Program Sequence Start: %d",
|
|
Packit |
5e46da |
prog->spn_program_sequence_start);
|
|
Packit |
5e46da |
indent_printf(level+2, "Program Map PID: %d", prog->program_map_pid);
|
|
Packit |
5e46da |
indent_printf(level+2, "Number Streams: %d", prog->num_streams);
|
|
Packit |
5e46da |
indent_printf(level+2, "Number Groups: %d", prog->num_groups);
|
|
Packit |
5e46da |
for (jj = 0; jj < prog->num_streams; jj++) {
|
|
Packit |
5e46da |
indent_printf(level+2, "Stream %d", jj);
|
|
Packit |
5e46da |
_show_stream(&prog->streams[jj], level+3);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void
|
|
Packit |
5e46da |
_show_extent_start(CLPI_EXTENT_START *es, int level)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
unsigned int ii;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
indent_printf(level, "Extension data: Extent Start Point");
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (!es->num_point) {
|
|
Packit |
5e46da |
indent_printf(level+1, "(no data)");
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
} else {
|
|
Packit |
5e46da |
indent_printf(level+1, "Number of Start Points: %d", es->num_point);
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (verbose) {
|
|
Packit |
5e46da |
for (ii = 0; ii < es->num_point; ii++) {
|
|
Packit |
5e46da |
indent_printf(level+1, "Extent %5d: SPN 0x%08X", ii, es->point[ii]);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void
|
|
Packit |
5e46da |
_show_cpi_info(CLPI_CPI *cpi, int level)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
CLPI_EP_MAP_ENTRY *entry;
|
|
Packit |
5e46da |
CLPI_EP_COARSE *coarse;
|
|
Packit |
5e46da |
CLPI_EP_FINE *fine;
|
|
Packit |
5e46da |
int ii, jj, kk;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
indent_printf(level, "CPI");
|
|
Packit |
5e46da |
indent_printf(level+1, "Number Stream PID: %d", cpi->num_stream_pid);
|
|
Packit |
5e46da |
for (ii = 0; ii < cpi->num_stream_pid; ii++) {
|
|
Packit |
5e46da |
entry = &cpi->entry[ii];
|
|
Packit |
5e46da |
indent_printf(level+1, "Stream: %d", ii);
|
|
Packit |
5e46da |
indent_printf(level+2, "PID: %04x", entry->pid);
|
|
Packit |
5e46da |
indent_printf(level+2, "EP Stream Type: %d", entry->ep_stream_type);
|
|
Packit |
5e46da |
indent_printf(level+2, "Number EP Coarse: %d", entry->num_ep_coarse);
|
|
Packit |
5e46da |
indent_printf(level+2, "Number EP Fine: %d", entry->num_ep_fine);
|
|
Packit |
5e46da |
indent_printf(level+2, "EP Map Start: %d",
|
|
Packit |
5e46da |
entry->ep_map_stream_start_addr);
|
|
Packit |
5e46da |
for (jj = 0; jj < entry->num_ep_coarse; jj++) {
|
|
Packit |
5e46da |
coarse = &entry->coarse[jj];
|
|
Packit |
5e46da |
indent_printf(level+2, "Coarse: %d", jj);
|
|
Packit |
5e46da |
indent_printf(level+3, "Ref EP Fine: %d", coarse->ref_ep_fine_id);
|
|
Packit |
5e46da |
indent_printf(level+3, "PTS EP: %d", coarse->pts_ep);
|
|
Packit |
5e46da |
indent_printf(level+3, "SPN EP: %d", coarse->spn_ep);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
for (jj = 0; jj < entry->num_ep_fine; jj++) {
|
|
Packit |
5e46da |
fine = &entry->fine[jj];
|
|
Packit |
5e46da |
indent_printf(level+2, "Fine: %d", jj);
|
|
Packit |
5e46da |
indent_printf(level+3, "Angle Change Point: %s",
|
|
Packit |
5e46da |
fine->is_angle_change_point ? "True":"False");
|
|
Packit |
5e46da |
indent_printf(level+3, "I End Offset: %d",
|
|
Packit |
5e46da |
fine->i_end_position_offset);
|
|
Packit |
5e46da |
indent_printf(level+3, "PTS EP: %d", fine->pts_ep);
|
|
Packit |
5e46da |
indent_printf(level+3, "SPN EP: %d", fine->spn_ep);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
if (verbose) {
|
|
Packit |
5e46da |
uint64_t pts;
|
|
Packit |
5e46da |
uint32_t spn;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
indent_printf(level+2, "PTS - SPN Map");
|
|
Packit |
5e46da |
for (jj = 0; jj < entry->num_ep_coarse; jj++) {
|
|
Packit |
5e46da |
int start, end;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
indent_printf(level+3, "Coarse: %d", jj);
|
|
Packit |
5e46da |
coarse = &entry->coarse[jj];
|
|
Packit |
5e46da |
start = coarse->ref_ep_fine_id;
|
|
Packit |
5e46da |
if (jj < entry->num_ep_coarse - 1) {
|
|
Packit |
5e46da |
end = entry->coarse[jj+1].ref_ep_fine_id;
|
|
Packit |
5e46da |
} else {
|
|
Packit |
5e46da |
end = entry->num_ep_fine;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
for (kk = start; kk < end; kk++) {
|
|
Packit |
5e46da |
fine = &entry->fine[kk];
|
|
Packit |
5e46da |
pts = ((uint64_t) (coarse->pts_ep & ~0x01) << 19) +
|
|
Packit |
5e46da |
((uint64_t)fine->pts_ep << 9);
|
|
Packit |
5e46da |
spn = (coarse->spn_ep & ~0x1FFFF) + fine->spn_ep;
|
|
Packit |
5e46da |
indent_printf(level+4, "PTS %8"PRIu64"/%8"PRIu64" -- SPN %u",
|
|
Packit |
5e46da |
pts, pts >> 1, spn);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static void
|
|
Packit |
5e46da |
_usage(char *cmd)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
fprintf(stderr,
|
|
Packit |
5e46da |
"Usage: %s -vcspi <clpi file> [<clpi file> ...]\n"
|
|
Packit |
5e46da |
"With no options, produces no output (not very useful)\n"
|
|
Packit |
5e46da |
"Options:\n"
|
|
Packit |
5e46da |
" v - Verbose output.\n"
|
|
Packit |
5e46da |
" c - Shows the Clip Info structure\n"
|
|
Packit |
5e46da |
" s - Shows the Sequence Info structure\n"
|
|
Packit |
5e46da |
" p - Shows the Program Info structure\n"
|
|
Packit |
5e46da |
" i - Shows the CPI. PTS to SPN map\n"
|
|
Packit |
5e46da |
" e - Shows Extent Start Table\n"
|
|
Packit |
5e46da |
, cmd);
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
exit(EXIT_FAILURE);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#define OPTS "vcspie"
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
int
|
|
Packit |
5e46da |
main(int argc, char *argv[])
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
CLPI_CL *cl;
|
|
Packit |
5e46da |
int opt;
|
|
Packit |
5e46da |
int opt_clip_info = 0, opt_seq_info = 0, opt_prog_info = 0;
|
|
Packit |
5e46da |
int opt_cpi_info = 0, opt_extent_start = 0;
|
|
Packit |
5e46da |
int ii;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
do {
|
|
Packit |
5e46da |
opt = getopt(argc, argv, OPTS);
|
|
Packit |
5e46da |
switch (opt) {
|
|
Packit |
5e46da |
case -1: break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
case 'v':
|
|
Packit |
5e46da |
verbose = 1;
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
case 's':
|
|
Packit |
5e46da |
opt_seq_info = 1;
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
case 'i':
|
|
Packit |
5e46da |
opt_cpi_info = 1;
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
case 'c':
|
|
Packit |
5e46da |
opt_clip_info = 1;
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
case 'p':
|
|
Packit |
5e46da |
opt_prog_info = 1;
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
case 'e':
|
|
Packit |
5e46da |
opt_extent_start = 1;
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
default:
|
|
Packit |
5e46da |
_usage(argv[0]);
|
|
Packit |
5e46da |
break;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
} while (opt != -1);
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (optind >= argc) {
|
|
Packit |
5e46da |
_usage(argv[0]);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
for (ii = optind; ii < argc; ii++) {
|
|
Packit |
5e46da |
cl = bd_read_clpi(argv[ii]);
|
|
Packit |
5e46da |
if (cl == NULL) {
|
|
Packit |
5e46da |
fprintf(stderr, "Parsing %s failed\n", argv[ii]);
|
|
Packit |
5e46da |
continue;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
if (opt_clip_info) {
|
|
Packit |
5e46da |
// Show clip info
|
|
Packit |
5e46da |
_show_clip_info(cl, 1);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
if (opt_seq_info) {
|
|
Packit |
5e46da |
// Show sequence info
|
|
Packit |
5e46da |
_show_seq_info(&cl->sequence, 1);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
if (opt_prog_info) {
|
|
Packit |
5e46da |
// Show program info
|
|
Packit |
5e46da |
_show_prog_info(&cl->program, 1);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
if (opt_cpi_info) {
|
|
Packit |
5e46da |
// Show cpi
|
|
Packit |
5e46da |
_show_cpi_info(&cl->cpi, 1);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (opt_prog_info) {
|
|
Packit |
5e46da |
if (cl->program_ss.num_prog) {
|
|
Packit |
5e46da |
printf("\n");
|
|
Packit |
5e46da |
indent_printf(1, "Extension: Program Info SS");
|
|
Packit |
5e46da |
_show_prog_info(&cl->program_ss, 1);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
if (opt_cpi_info) {
|
|
Packit |
5e46da |
if (cl->program_ss.num_prog) {
|
|
Packit |
5e46da |
printf("\n");
|
|
Packit |
5e46da |
indent_printf(1, "Extension: CPI SS");
|
|
Packit |
5e46da |
_show_cpi_info(&cl->cpi_ss, 1);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
if (opt_extent_start) {
|
|
Packit |
5e46da |
// Show extent start point
|
|
Packit |
5e46da |
if (cl->extent_start.num_point > 0) {
|
|
Packit |
5e46da |
_show_extent_start(&cl->extent_start, 1);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
bd_free_clpi(cl);
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
return 0;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|