]> git.sesse.net Git - vlc/blob - plugins/dvd/dvd_summary.c
* Added error checking in pthread wrapper ; as a result, intf_msg.h must
[vlc] / plugins / dvd / dvd_summary.c
1 /*****************************************************************************
2  * dvd_summary.c: set of functions to print options of selected title
3  * found in .ifo.
4  *****************************************************************************
5  * Copyright (C) 1998-2001 VideoLAN
6  * $Id: dvd_summary.c,v 1.10 2001/11/28 15:08:05 massiot Exp $
7  *
8  * Author: Stéphane Borel <stef@via.ecp.fr>
9  *
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.
14  * 
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.
19  *
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  *****************************************************************************/
24
25 #define MODULE_NAME dvd
26 #include "modules_inner.h"
27
28 /*****************************************************************************
29  * Preamble
30  *****************************************************************************/
31 #include "defs.h"
32
33 #include <stdio.h>
34 #include <stdlib.h>
35
36 #ifdef HAVE_UNISTD_H
37 #include <unistd.h>
38 #endif
39
40 #if !defined( WIN32 )
41 #include <netinet/in.h>
42 #endif
43
44 #include <fcntl.h>
45 #include <sys/types.h>
46
47 #include <string.h>
48 #ifdef STRNCASECMP_IN_STRINGS_H
49 #   include <strings.h>
50 #endif
51 #include <errno.h>
52
53 #ifdef GOD_DAMN_DMCA
54 #   include "dummy_dvdcss.h"
55 #else
56 #   include <videolan/dvdcss.h>
57 #endif
58
59 #include "config.h"
60 #include "common.h"
61 #include "intf_msg.h"
62 #include "threads.h"
63 #include "mtime.h"
64 #include "iso_lang.h"
65 #include "tests.h"
66
67 #include "main.h"
68
69 #include "input_dvd.h"
70 #include "dvd_ifo.h"
71
72 #include "debug.h"
73
74 #include "modules.h"
75 #include "modules_export.h"
76
77
78 /*
79  * Local tools to decode some data in ifo
80  */
81
82 /****************************************************************************
83  * IfoPrintTitle
84  ****************************************************************************/
85 void IfoPrintTitle( thread_dvd_data_t * p_dvd )
86 {
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 );
92 }
93
94 /****************************************************************************
95  * IfoPrintVideo
96  ****************************************************************************/
97 #define video p_dvd->p_ifo->vts.manager_inf.video_attr
98 void IfoPrintVideo( thread_dvd_data_t * p_dvd )
99 {
100     char     psz_ratio[12];
101     char     psz_perm_displ[4][23] =
102              {
103                 "pan-scan & letterboxed",
104                 "pan-scan",
105                 "letterboxed",
106                 "not specified"
107              };
108     char     psz_source_res[4][28] =
109              {
110                 "720x480 ntsc or 720x576 pal",
111                 "704x480 ntsc or 704x576 pal",
112                 "352x480 ntsc or 352x576 pal",
113                 "352x240 ntsc or 352x288 pal"
114              };
115
116  
117     switch( video.i_ratio )
118     {
119     case 0:
120         sprintf( psz_ratio, "4:3" );
121         break;
122     case 3:
123         sprintf( psz_ratio, "16:9" );
124         break;
125     default:
126         sprintf( psz_ratio, "undef" );
127         break;
128     }
129
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");
147 }
148 #undef video
149
150 /****************************************************************************
151  * IfoPrintAudio
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 )
157 {
158
159     if( audio_status.i_available )
160     {
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" };
168     
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 )
181         {
182         case 1:
183             sprintf( psz_caption, "normal caption" );
184             break;
185         case 3:
186             sprintf( psz_caption, "directors comments" );
187             break;
188         default:
189             sprintf( psz_caption, " " );
190             break;
191         }
192         intf_WarnMsg( 5, "    caption: %s", psz_caption );
193         intf_WarnMsg( 5, "    quantization: %s",
194                          ppsz_quant[audio.i_quantization & 0x3] );
195     
196         intf_WarnMsg( 5, "    status: %x", audio_status.i_position );
197     }
198
199
200 }
201 #undef audio_status
202 #undef audio
203
204 /****************************************************************************
205  * IfoPrintSpu
206  ****************************************************************************/
207 #define spu p_dvd->p_ifo->vts.manager_inf.p_spu_attr[i-1]
208 #define spu_status \
209     p_dvd->p_ifo->vts.title_unit.p_title[p_dvd->i_title_id-1].title.pi_spu_status[i-1]
210
211 void IfoPrintSpu( thread_dvd_data_t * p_dvd, int i )
212 {
213     if( spu_status.i_available )
214     {
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 );
220
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 );
226     }
227
228 }
229 #undef spu_status
230 #undef spu