1
/*****************************************************************************
2
* dvd_summary.c: set of functions to print options of selected title
4
*****************************************************************************
5
* Copyright (C) 1998-2001 VideoLAN
6
* $Id: dvd_summary.c,v 1.11 2001/12/07 18:33:07 sam Exp $
8
* Author: St�phane Borel <stef@via.ecp.fr>
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation; either version 2 of the License, or
13
* (at your option) any later version.
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software
22
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
23
*****************************************************************************/
25
#define MODULE_NAME dvd
26
#include "modules_inner.h"
28
/*****************************************************************************
30
*****************************************************************************/
41
#include <netinet/in.h>
45
#include <sys/types.h>
48
#ifdef STRNCASECMP_IN_STRINGS_H
54
# include "dummy_dvdcss.h"
56
# include <videolan/dvdcss.h>
66
#include "input_dvd.h"
72
#include "modules_export.h"
76
* Local tools to decode some data in ifo
79
/****************************************************************************
81
****************************************************************************/
82
void IfoPrintTitle( thread_dvd_data_t * p_dvd )
84
intf_WarnMsg( 5, "dvd info: title: %d", p_dvd->i_title );
85
intf_WarnMsg( 5, " vobstart at: %d blocks", p_dvd->i_start );
86
intf_WarnMsg( 5, " stream size: %d blocks", p_dvd->i_size );
87
intf_WarnMsg( 5, " number of chapters: %d", p_dvd->i_chapter_nb );
88
intf_WarnMsg( 5, " number of angles: %d", p_dvd->i_angle_nb );
91
/****************************************************************************
93
****************************************************************************/
94
#define video p_dvd->p_ifo->vts.manager_inf.video_attr
95
void IfoPrintVideo( thread_dvd_data_t * p_dvd )
98
char psz_perm_displ[4][23] =
100
"pan-scan & letterboxed",
105
char psz_source_res[4][28] =
107
"720x480 ntsc or 720x576 pal",
108
"704x480 ntsc or 704x576 pal",
109
"352x480 ntsc or 352x576 pal",
110
"352x240 ntsc or 352x288 pal"
114
switch( video.i_ratio )
117
sprintf( psz_ratio, "4:3" );
120
sprintf( psz_ratio, "16:9" );
123
sprintf( psz_ratio, "undef" );
127
intf_WarnMsg( 5, "dvd info: video" );
128
intf_WarnMsg( 5, " compression: mpeg-%d", video.i_compression+1 );
129
intf_WarnMsg( 5, " tv system: %s Hz",
130
video.i_system ? "pal 625/50" : "ntsc 525/60" );
131
intf_WarnMsg( 5, " aspect ratio: %s", psz_ratio );
132
intf_WarnMsg( 5, " display mode: %s",
133
psz_perm_displ[video.i_perm_displ] );
134
intf_WarnMsg( 5, " line21-1: %s",
135
video.i_line21_1 ? "data present in GOP" : "" );
136
intf_WarnMsg( 5, " line21-2: %s",
137
video.i_line21_2 ? "data present in GOP" : "" );
138
intf_WarnMsg( 5, " source res: %s",
139
psz_source_res[video.i_source_res] );
140
intf_WarnMsg( 5, " letterboxed: %s",
141
video.i_letterboxed ? "yes" : "no" );
142
intf_WarnMsg( 5, " mode: %s",
143
video.i_mode ? "film (625/50 only)" : "camera");
147
/****************************************************************************
149
****************************************************************************/
150
#define audio p_dvd->p_ifo->vts.manager_inf.p_audio_attr[i-1]
151
#define audio_status \
152
p_dvd->p_ifo->vts.title_unit.p_title[p_dvd->i_title_id-1].title.pi_audio_status[i-1]
153
void IfoPrintAudio( thread_dvd_data_t * p_dvd, int i )
156
if( audio_status.i_available )
158
char ppsz_mode[7][9] =
159
{ "ac3", "unknown", "mpeg-1", "mpeg-2", "lpcm", "sdds", "dts" };
160
char ppsz_appl_mode[3][15] =
161
{ "not specified", "karaoke", "surround sound" };
162
char psz_caption[25];
163
char ppsz_quant[4][10] =
164
{ "16 bits", "20 bits", "24 bits", "drc" };
166
intf_WarnMsg( 5, "dvd info: audio %d" , i );
167
intf_WarnMsg( 5, " language: %s",
168
DecodeLanguage( hton16( audio.i_lang_code ) ) );
169
intf_WarnMsg( 5, " mode: %s", ppsz_mode[audio.i_coding_mode & 0x7] );
170
intf_WarnMsg( 5, " channel(s): %d %s",
171
audio.i_num_channels + 1,
172
audio.i_multichannel_extension ? "ext." : "" );
173
intf_WarnMsg( 5, " sampling: %d Hz",
174
audio.i_sample_freq ? 96000 : 48000 );
175
intf_WarnMsg( 5, " appl_mode: %s",
176
ppsz_appl_mode[audio.i_appl_mode & 0x2] );
177
switch( audio.i_caption )
180
sprintf( psz_caption, "normal caption" );
183
sprintf( psz_caption, "directors comments" );
186
sprintf( psz_caption, " " );
189
intf_WarnMsg( 5, " caption: %s", psz_caption );
190
intf_WarnMsg( 5, " quantization: %s",
191
ppsz_quant[audio.i_quantization & 0x3] );
193
intf_WarnMsg( 5, " status: %x", audio_status.i_position );
201
/****************************************************************************
203
****************************************************************************/
204
#define spu p_dvd->p_ifo->vts.manager_inf.p_spu_attr[i-1]
206
p_dvd->p_ifo->vts.title_unit.p_title[p_dvd->i_title_id-1].title.pi_spu_status[i-1]
208
void IfoPrintSpu( thread_dvd_data_t * p_dvd, int i )
210
if( spu_status.i_available )
212
intf_WarnMsg( 5, "dvd info: spu %d", i );
213
intf_WarnMsg( 5, " caption: %d", spu.i_caption );
214
intf_WarnMsg( 5, " language: %s",
215
DecodeLanguage( hton16( spu.i_lang_code ) ) );
216
intf_WarnMsg( 5, " prefix: %x", spu.i_prefix );
218
intf_WarnMsg( 5, " status: 4:3 %x wide %x letter %x pan %x",
219
spu_status.i_position_43,
220
spu_status.i_position_wide,
221
spu_status.i_position_letter,
222
spu_status.i_position_pan );