diff options
author | pontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-11-16 22:26:57 +0000 |
---|---|---|
committer | pontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-11-16 22:26:57 +0000 |
commit | b771c98ced1d2179193572a2a41ed007a5ed6d5b (patch) | |
tree | 88f42175b039dc68c6c000d67076d77289597d0e /libmpdemux/open.c | |
parent | 166548ba36be347af69655782ab16e6faeb4f0c5 (diff) | |
download | mpv-b771c98ced1d2179193572a2a41ed007a5ed6d5b.tar.bz2 mpv-b771c98ced1d2179193572a2a41ed007a5ed6d5b.tar.xz |
add dvd audio stream detect
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2936 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/open.c')
-rw-r--r-- | libmpdemux/open.c | 82 |
1 files changed, 64 insertions, 18 deletions
diff --git a/libmpdemux/open.c b/libmpdemux/open.c index 5f73540201..0cbe6a3edf 100644 --- a/libmpdemux/open.c +++ b/libmpdemux/open.c @@ -47,24 +47,8 @@ int dvd_angle=1; #define LIBDVDREAD_VERSION DVDREAD_VERSION(0,8,0) #endif - -typedef struct { - dvd_reader_t *dvd; - dvd_file_t *title; - ifo_handle_t *vmg_file; - tt_srpt_t *tt_srpt; - ifo_handle_t *vts_file; - vts_ptt_srpt_t *vts_ptt_srpt; - pgc_t *cur_pgc; - // - int cur_cell; - int cur_pack; - int cell_last_pack; - // Navi: - int packs_left; - dsi_t dsi_pack; - int angle_seek; -} dvd_priv_t; +char * dvd_audio_stream_types[8] = + { "ac3","unknown","mpeg1","mpeg2ext","lpcm","unknown","dts" }; #endif @@ -222,6 +206,68 @@ if(dvd_title){ d->vts_file=vts_file; /** + * 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; + int pcmaid = 160; + + d->nr_of_channels=0; + + if ( vts_file->vts_pgcit ) + { + int i; + for ( i=0;i<8;i++ ) + if ( vts_file->vts_pgcit->pgci_srp[0].pgc->audio_control[i] & 0x8000 ) + { + audio_attr_t * audio = &vts_file->vtsi_mat->vts_audio_attr[i]; + int language = 0; + char tmp[] = "unknown"; + + if ( audio->lang_type == 1 ) + { + language=audio->lang_code; + tmp[0]=language>>8; + tmp[1]=language&0xff; + tmp[2]=0; + } + + d->audio_streams[d->nr_of_channels].language=language; + d->audio_streams[d->nr_of_channels].id=0; + switch ( audio->audio_format ) + { + case 0: // ac3 + case 6: // dts + d->audio_streams[d->nr_of_channels].id=ac3aid; + ac3aid++; + break; + case 2: // mpeg layer 1/2/3 + case 3: // mpeg2 ext + d->audio_streams[d->nr_of_channels].id=mpegaid; + mpegaid++; + break; + case 4: // lpcm + d->audio_streams[d->nr_of_channels].id=pcmaid; + pcmaid++; + break; + } + + mp_msg(MSGT_OPEN,MSGL_V,"[open] audio stream: %d audio format: %s language: %s aid: %d\n", + d->nr_of_channels, + dvd_audio_stream_types[ audio->audio_format ], + tmp, + d->audio_streams[d->nr_of_channels].id + ); + + d->nr_of_channels++; + } + } + mp_msg(MSGT_OPEN,MSGL_V,"[open] %d audio channel found on disk.\n",d->nr_of_channels ); + } + + /** * Determine which program chain we want to watch. This is based on the * chapter number. */ |