Mercurial > mplayer.hg
comparison stream/stream_dvdnav.c @ 25196:5487d363a9ac
at startup show audio and subtitle streams available in the chosen title with all their properties
author | nicodvb |
---|---|
date | Sat, 01 Dec 2007 11:35:03 +0000 |
parents | a43d99a80f4a |
children | c1d17bd6683c |
comparison
equal
deleted
inserted
replaced
25195:1aec672af2d2 | 25196:5487d363a9ac |
---|---|
21 extern char *dvd_device; | 21 extern char *dvd_device; |
22 extern int dvd_chapter; | 22 extern int dvd_chapter; |
23 extern int dvd_last_chapter; | 23 extern int dvd_last_chapter; |
24 extern int dvd_angle; | 24 extern int dvd_angle; |
25 extern char *audio_lang, *dvdsub_lang; | 25 extern char *audio_lang, *dvdsub_lang; |
26 extern char *dvd_audio_stream_channels[6], *dvd_audio_stream_types[8]; | |
26 | 27 |
27 static struct stream_priv_s { | 28 static struct stream_priv_s { |
28 int track; | 29 int track; |
29 char* device; | 30 char* device; |
30 } stream_priv_dflts = { | 31 } stream_priv_dflts = { |
376 } | 377 } |
377 else | 378 else |
378 identify_chapters(priv->dvdnav, p->track); | 379 identify_chapters(priv->dvdnav, p->track); |
379 } | 380 } |
380 | 381 |
382 static void show_audio_subs_languages(dvdnav_t *nav) | |
383 { | |
384 uint8_t lg; | |
385 uint16_t i, lang, format, id, channels; | |
386 int base[6] = {128, 0, 0, 0, 160, 136, 0}; | |
387 char tmp[3]; | |
388 for(i=0; i<8; i++) | |
389 { | |
390 lg = dvdnav_get_audio_logical_stream(nav, i); | |
391 if(lg == 0xff) continue; | |
392 channels = dvdnav_audio_stream_channels(nav, lg); | |
393 if(channels == 0xFFFF) | |
394 channels = 2; //unknown | |
395 else | |
396 channels--; | |
397 lang = dvdnav_audio_stream_to_lang(nav, lg); | |
398 if(lang == 0xFFFF) | |
399 tmp[0] = tmp[1] = '?'; | |
400 else | |
401 { | |
402 tmp[0] = lang >> 8; | |
403 tmp[1] = lang & 0xFF; | |
404 } | |
405 tmp[2] = 0; | |
406 format = dvdnav_audio_stream_format(nav, lg); | |
407 if(format == 0xFFFF || format > 6) | |
408 format = 1; //unknown | |
409 id = i + base[format]; | |
410 mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDaudioStreamInfo, i, | |
411 dvd_audio_stream_types[format], dvd_audio_stream_channels[channels], tmp, id); | |
412 } | |
413 | |
414 for(i=0; i<32; i++) | |
415 { | |
416 lg = dvdnav_get_spu_logical_stream(nav, i); | |
417 if(lg == 0xff) continue; | |
418 lang = dvdnav_spu_stream_to_lang(nav, lg); | |
419 if(lang == 0xFFFF) | |
420 tmp[0] = tmp[1] = '?'; | |
421 else | |
422 { | |
423 tmp[0] = lang >> 8; | |
424 tmp[1] = lang & 0xFF; | |
425 } | |
426 tmp[2] = 0; | |
427 mp_msg(MSGT_OPEN,MSGL_STATUS,MSGTR_DVDsubtitleLanguage, i+0x20, tmp); | |
428 } | |
429 } | |
430 | |
381 static int open_s(stream_t *stream,int mode, void* opts, int* file_format) { | 431 static int open_s(stream_t *stream,int mode, void* opts, int* file_format) { |
382 struct stream_priv_s* p = (struct stream_priv_s*)opts; | 432 struct stream_priv_s* p = (struct stream_priv_s*)opts; |
383 char *filename; | 433 char *filename; |
384 dvdnav_priv_t *priv; | 434 dvdnav_priv_t *priv; |
385 | 435 |
409 mp_msg(MSGT_OPEN,MSGL_INFO,"dvdnav_stream, you didn't specify a track number (as in dvdnav://1), playing whole disc\n"); | 459 mp_msg(MSGT_OPEN,MSGL_INFO,"dvdnav_stream, you didn't specify a track number (as in dvdnav://1), playing whole disc\n"); |
410 dvdnav_menu_call(priv->dvdnav, DVD_MENU_Title); | 460 dvdnav_menu_call(priv->dvdnav, DVD_MENU_Title); |
411 } | 461 } |
412 if(mp_msg_test(MSGT_IDENTIFY, MSGL_INFO)) | 462 if(mp_msg_test(MSGT_IDENTIFY, MSGL_INFO)) |
413 identify(priv, p); | 463 identify(priv, p); |
464 if(p->track > 0) | |
465 show_audio_subs_languages(priv->dvdnav); | |
414 if(dvd_angle > 1) | 466 if(dvd_angle > 1) |
415 dvdnav_angle_change(priv->dvdnav, dvd_angle); | 467 dvdnav_angle_change(priv->dvdnav, dvd_angle); |
416 | 468 |
417 stream->sector_size = 2048; | 469 stream->sector_size = 2048; |
418 stream->flags = STREAM_READ | STREAM_SEEK; | 470 stream->flags = STREAM_READ | STREAM_SEEK; |