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.10 2001/11/28 15:08:05 massiot 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>
69 #include "input_dvd.h"
75 #include "modules_export.h"
79 * Local tools to decode some data in ifo
82 /****************************************************************************
84 ****************************************************************************/
85 void IfoPrintTitle( thread_dvd_data_t * p_dvd )
87 intf_WarnMsg( 5, "dvd info: title: %d", p_dvd->i_title );
88 intf_WarnMsg( 5, " vobstart at: %d blocks", p_dvd->i_start );
89 intf_WarnMsg( 5, " stream size: %d blocks", p_dvd->i_size );
90 intf_WarnMsg( 5, " number of chapters: %d", p_dvd->i_chapter_nb );
91 intf_WarnMsg( 5, " number of angles: %d", p_dvd->i_angle_nb );
94 /****************************************************************************
96 ****************************************************************************/
97 #define video p_dvd->p_ifo->vts.manager_inf.video_attr
98 void IfoPrintVideo( thread_dvd_data_t * p_dvd )
101 char psz_perm_displ[4][23] =
103 "pan-scan & letterboxed",
108 char psz_source_res[4][28] =
110 "720x480 ntsc or 720x576 pal",
111 "704x480 ntsc or 704x576 pal",
112 "352x480 ntsc or 352x576 pal",
113 "352x240 ntsc or 352x288 pal"
117 switch( video.i_ratio )
120 sprintf( psz_ratio, "4:3" );
123 sprintf( psz_ratio, "16:9" );
126 sprintf( psz_ratio, "undef" );
130 intf_WarnMsg( 5, "dvd info: video" );
131 intf_WarnMsg( 5, " compression: mpeg-%d", video.i_compression+1 );
132 intf_WarnMsg( 5, " tv system: %s Hz",
133 video.i_system ? "pal 625/50" : "ntsc 525/60" );
134 intf_WarnMsg( 5, " aspect ratio: %s", psz_ratio );
135 intf_WarnMsg( 5, " display mode: %s",
136 psz_perm_displ[video.i_perm_displ] );
137 intf_WarnMsg( 5, " line21-1: %s",
138 video.i_line21_1 ? "data present in GOP" : "" );
139 intf_WarnMsg( 5, " line21-2: %s",
140 video.i_line21_2 ? "data present in GOP" : "" );
141 intf_WarnMsg( 5, " source res: %s",
142 psz_source_res[video.i_source_res] );
143 intf_WarnMsg( 5, " letterboxed: %s",
144 video.i_letterboxed ? "yes" : "no" );
145 intf_WarnMsg( 5, " mode: %s",
146 video.i_mode ? "film (625/50 only)" : "camera");
150 /****************************************************************************
152 ****************************************************************************/
153 #define audio p_dvd->p_ifo->vts.manager_inf.p_audio_attr[i-1]
154 #define audio_status \
155 p_dvd->p_ifo->vts.title_unit.p_title[p_dvd->i_title_id-1].title.pi_audio_status[i-1]
156 void IfoPrintAudio( thread_dvd_data_t * p_dvd, int i )
159 if( audio_status.i_available )
161 char ppsz_mode[7][9] =
162 { "ac3", "unknown", "mpeg-1", "mpeg-2", "lpcm", "sdds", "dts" };
163 char ppsz_appl_mode[3][15] =
164 { "not specified", "karaoke", "surround sound" };
165 char psz_caption[25];
166 char ppsz_quant[4][10] =
167 { "16 bits", "20 bits", "24 bits", "drc" };
169 intf_WarnMsg( 5, "dvd info: audio %d" , i );
170 intf_WarnMsg( 5, " language: %s",
171 DecodeLanguage( hton16( audio.i_lang_code ) ) );
172 intf_WarnMsg( 5, " mode: %s", ppsz_mode[audio.i_coding_mode & 0x7] );
173 intf_WarnMsg( 5, " channel(s): %d %s",
174 audio.i_num_channels + 1,
175 audio.i_multichannel_extension ? "ext." : "" );
176 intf_WarnMsg( 5, " sampling: %d Hz",
177 audio.i_sample_freq ? 96000 : 48000 );
178 intf_WarnMsg( 5, " appl_mode: %s",
179 ppsz_appl_mode[audio.i_appl_mode & 0x2] );
180 switch( audio.i_caption )
183 sprintf( psz_caption, "normal caption" );
186 sprintf( psz_caption, "directors comments" );
189 sprintf( psz_caption, " " );
192 intf_WarnMsg( 5, " caption: %s", psz_caption );
193 intf_WarnMsg( 5, " quantization: %s",
194 ppsz_quant[audio.i_quantization & 0x3] );
196 intf_WarnMsg( 5, " status: %x", audio_status.i_position );
204 /****************************************************************************
206 ****************************************************************************/
207 #define spu p_dvd->p_ifo->vts.manager_inf.p_spu_attr[i-1]
209 p_dvd->p_ifo->vts.title_unit.p_title[p_dvd->i_title_id-1].title.pi_spu_status[i-1]
211 void IfoPrintSpu( thread_dvd_data_t * p_dvd, int i )
213 if( spu_status.i_available )
215 intf_WarnMsg( 5, "dvd info: spu %d", i );
216 intf_WarnMsg( 5, " caption: %d", spu.i_caption );
217 intf_WarnMsg( 5, " language: %s",
218 DecodeLanguage( hton16( spu.i_lang_code ) ) );
219 intf_WarnMsg( 5, " prefix: %x", spu.i_prefix );
221 intf_WarnMsg( 5, " status: 4:3 %x wide %x letter %x pan %x",
222 spu_status.i_position_43,
223 spu_status.i_position_wide,
224 spu_status.i_position_letter,
225 spu_status.i_position_pan );