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;