diff --git a/libmpdemux/open.c b/libmpdemux/open.c index a41da05beb..bf1bd82012 100644 --- a/libmpdemux/open.c +++ b/libmpdemux/open.c @@ -208,7 +208,6 @@ if(dvd_title){ /** * Check number of audio channels and types */ -// fprintf( stderr,"[open] nr_audio streams: %d\n",vts_file->vtsi_mat->nr_of_vts_audio_streams ); { int ac3aid = 128; int mpegaid = 0; @@ -264,7 +263,41 @@ if(dvd_title){ d->nr_of_channels++; } } - mp_msg(MSGT_OPEN,MSGL_V,"[open] %d audio channel found on disk.\n",d->nr_of_channels ); + mp_msg(MSGT_OPEN,MSGL_V,"[open] number of audio channels on disk: %d.\n",d->nr_of_channels ); + } + + /** + * Check number of subtitles and language + */ + { + int i; + + d->nr_of_subtitles=0; + for ( i=0;i<32;i++ ) + if ( vts_file->vts_pgcit->pgci_srp[0].pgc->subp_control[i] & 0x80000000 ) + { + subp_attr_t * subtitle = &vts_file->vtsi_mat->vts_subp_attr[i]; + int language = 0; + char tmp[] = "unknown"; + + if ( subtitle->type == 1 ) + { + language=subtitle->lang_code; + tmp[0]=language>>8; + tmp[1]=language&0xff; + tmp[2]=0; + } + + d->subtitles[ d->nr_of_subtitles ].language=language; + d->subtitles[ d->nr_of_subtitles ].id=d->nr_of_subtitles; + + mp_msg(MSGT_OPEN,MSGL_V,"[open] subtitle ( sid ): %d language: %s\n", + d->nr_of_subtitles, + tmp + ); + d->nr_of_subtitles++; + } + mp_msg(MSGT_OPEN,MSGL_V,"[open] number of subtitles on disk: %d\n",d->nr_of_subtitles ); } /** diff --git a/libmpdemux/stream.h b/libmpdemux/stream.h index 749560b671..13541689e5 100644 --- a/libmpdemux/stream.h +++ b/libmpdemux/stream.h @@ -177,6 +177,11 @@ typedef struct { int language; } audio_stream_t; +typedef struct { + int id; // 0 - 31 + int language; +} subtitle_t; + typedef struct { dvd_reader_t *dvd; dvd_file_t *title; @@ -196,6 +201,9 @@ typedef struct { // audio datas int nr_of_channels; audio_stream_t audio_streams[8]; +// subtitles + int nr_of_subtitles; + subtitle_t subtitles[32]; } dvd_priv_t; #endif