comparison mplayer.c @ 18732:b3fa3772a187

removed old dvdnav code
author nicodvb
date Fri, 16 Jun 2006 19:06:00 +0000
parents cb7da1894b00
children 1a0111272217
comparison
equal deleted inserted replaced
18731:bd21d8500afd 18732:b3fa3772a187
64 #endif 64 #endif
65 65
66 #include "libao2/audio_out.h" 66 #include "libao2/audio_out.h"
67 67
68 #include "codec-cfg.h" 68 #include "codec-cfg.h"
69
70 #undef USE_DVDNAV
71 #ifdef USE_DVDNAV
72 #include <dvdnav.h>
73 #endif
74 69
75 #include "edl.h" 70 #include "edl.h"
76 71
77 #include "spudec.h" 72 #include "spudec.h"
78 #include "vobsub.h" 73 #include "vobsub.h"
3113 global_sub_size += dvd_number_of_subs(stream); 3108 global_sub_size += dvd_number_of_subs(stream);
3114 current_module=NULL; 3109 current_module=NULL;
3115 } 3110 }
3116 #endif 3111 #endif
3117 3112
3118 #ifdef USE_DVDNAV
3119 if (stream->type==STREAMTYPE_DVDNAV) stream_cache_size=0; // must disable caching...
3120 #endif
3121
3122 // CACHE2: initial prefill: 20% later: 5% (should be set by -cacheopts) 3113 // CACHE2: initial prefill: 20% later: 5% (should be set by -cacheopts)
3123 #ifdef HAS_DVBIN_SUPPORT 3114 #ifdef HAS_DVBIN_SUPPORT
3124 goto_enable_cache: 3115 goto_enable_cache:
3125 #endif 3116 #endif
3126 if(stream_cache_size>0){ 3117 if(stream_cache_size>0){
3199 // Handle playlist 3190 // Handle playlist
3200 current_module="handle_playlist"; 3191 current_module="handle_playlist";
3201 switch(stream->type){ 3192 switch(stream->type){
3202 case STREAMTYPE_VCD: 3193 case STREAMTYPE_VCD:
3203 case STREAMTYPE_DVD: 3194 case STREAMTYPE_DVD:
3204 case STREAMTYPE_DVDNAV:
3205 case STREAMTYPE_CDDA: 3195 case STREAMTYPE_CDDA:
3206 case STREAMTYPE_VCDBINCUE: 3196 case STREAMTYPE_VCDBINCUE:
3207 // don't try to parse raw media as playlist, it's unlikely 3197 // don't try to parse raw media as playlist, it's unlikely
3208 goto goto_next_file; 3198 goto goto_next_file;
3209 } 3199 }
3346 current_module="spudec_init_vobsub"; 3336 current_module="spudec_init_vobsub";
3347 if (vobsub_parse_ifo(NULL,spudec_ifo, palette, &width, &height, 1, -1, NULL) >= 0) 3337 if (vobsub_parse_ifo(NULL,spudec_ifo, palette, &width, &height, 1, -1, NULL) >= 0)
3348 vo_spudec=spudec_new_scaled(palette, width, height); 3338 vo_spudec=spudec_new_scaled(palette, width, height);
3349 } 3339 }
3350 3340
3351 #ifdef USE_DVDNAV
3352 if (vo_spudec==NULL && stream->type==STREAMTYPE_DVDNAV) {
3353 current_module="spudec_init_dvdnav";
3354 vo_spudec=spudec_new_scaled(dvdnav_stream_get_palette((dvdnav_priv_t*)(stream->priv)),
3355 sh_video->disp_w, sh_video->disp_h);
3356 }
3357 #endif
3358
3359 #ifdef USE_DVDREAD 3341 #ifdef USE_DVDREAD
3360 if (vo_spudec==NULL && stream->type==STREAMTYPE_DVD) { 3342 if (vo_spudec==NULL && stream->type==STREAMTYPE_DVD) {
3361 current_module="spudec_init_dvdread"; 3343 current_module="spudec_init_dvdread";
3362 vo_spudec=spudec_new_scaled(((dvd_priv_t *)(stream->priv))->cur_pgc->palette, 3344 vo_spudec=spudec_new_scaled(((dvd_priv_t *)(stream->priv))->cur_pgc->palette,
3363 sh_video->disp_w, sh_video->disp_h); 3345 sh_video->disp_w, sh_video->disp_h);
3654 3636
3655 if(loop_times>1) loop_times--; else 3637 if(loop_times>1) loop_times--; else
3656 if(loop_times==1) loop_times = -1; 3638 if(loop_times==1) loop_times = -1;
3657 3639
3658 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_StartPlaying);fflush(stdout); 3640 mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_StartPlaying);fflush(stdout);
3659
3660 #ifdef USE_DVDNAV
3661 if (stream->type==STREAMTYPE_DVDNAV) {
3662 dvdnav_stream_fullstart((dvdnav_priv_t *)stream->priv);
3663 }
3664 #endif
3665 3641
3666 total_time_usage_start=GetTimer(); 3642 total_time_usage_start=GetTimer();
3667 audio_time_usage=0; video_time_usage=0; vout_time_usage=0; 3643 audio_time_usage=0; video_time_usage=0; vout_time_usage=0;
3668 total_frame_cnt=0; drop_frame_cnt=0; // fix for multifile fps benchmark 3644 total_frame_cnt=0; drop_frame_cnt=0; // fix for multifile fps benchmark
3669 play_n_frames=play_n_frames_mf; 3645 play_n_frames=play_n_frames_mf;
4133 // handle -sstep 4109 // handle -sstep
4134 if(step_sec>0) { 4110 if(step_sec>0) {
4135 osd_function=OSD_FFW; 4111 osd_function=OSD_FFW;
4136 rel_seek_secs+=step_sec; 4112 rel_seek_secs+=step_sec;
4137 } 4113 }
4138
4139 #ifdef USE_DVDNAV
4140 if (stream->type==STREAMTYPE_DVDNAV && dvd_nav_still)
4141 dvdnav_stream_sleeping((dvdnav_priv_t*)stream->priv);
4142 #endif
4143 4114
4144 //================= EDL ========================================= 4115 //================= EDL =========================================
4145 4116
4146 if( next_edl_record ) { // Are we (still?) doing EDL? 4117 if( next_edl_record ) { // Are we (still?) doing EDL?
4147 if ( !sh_video ) { 4118 if ( !sh_video ) {
4631 #endif 4602 #endif
4632 } break; 4603 } break;
4633 case MP_CMD_KEYDOWN_EVENTS : { 4604 case MP_CMD_KEYDOWN_EVENTS : {
4634 mplayer_put_key(cmd->args[0].v.i); 4605 mplayer_put_key(cmd->args[0].v.i);
4635 } break; 4606 } break;
4636 #ifdef USE_DVDNAV
4637 case MP_CMD_DVDNAV_EVENT: {
4638 dvdnav_priv_t * dvdnav_priv = (dvdnav_priv_t*)(stream->priv);
4639 dvdnav_event_t * dvdnav_event = (dvdnav_event_t *)(cmd->args[0].v.v);
4640
4641 /* ignore these events if we're not in dvd_nav mode */
4642 if (stream->type != STREAMTYPE_DVDNAV) break;
4643
4644 if (!dvdnav_event) {
4645 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNullEvent);
4646 break;
4647 }
4648
4649 //printf("mplayer: got event: %d\n",dvdnav_event->event);
4650
4651 switch (dvdnav_event->event) {
4652 case DVDNAV_BLOCK_OK: {
4653 /* be silent about this one */
4654 break;
4655 }
4656 case DVDNAV_HIGHLIGHT: {
4657 dvdnav_highlight_event_t *hevent = (dvdnav_highlight_event_t*)(dvdnav_event->details);
4658 if (!hevent) {
4659 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavHighlightEventBroken);
4660 break;
4661 }
4662
4663 if (hevent->display && hevent->buttonN>0)
4664 {
4665 //dvdnav_priv->seen_root_menu=1; /* if we got a highlight, we're on a menu */
4666 sprintf( dvd_nav_text, "Highlight button %d (%u,%u)-(%u,%u) PTS %d (now is %5.2f)",
4667 hevent->buttonN,
4668 hevent->sx,hevent->sy,
4669 hevent->ex,hevent->ey,
4670 hevent->pts, d_video->pts);
4671 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavEvent,dvd_nav_text);
4672 //osd_show_dvd_nav_delay = 60;
4673
4674 osd_show_dvd_nav_highlight=1; /* this is just a flag */
4675 osd_show_dvd_nav_sx=hevent->sx;
4676 osd_show_dvd_nav_ex=hevent->ex;
4677 osd_show_dvd_nav_sy=hevent->sy;
4678 osd_show_dvd_nav_ey=hevent->ey;
4679 }
4680 else {
4681 osd_show_dvd_nav_highlight=0;
4682 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavHighlightHide);
4683 }
4684 break;
4685 }
4686 case DVDNAV_STILL_FRAME: {
4687 dvdnav_still_event_t *still_event = (dvdnav_still_event_t*)(dvdnav_event->details);
4688
4689 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavStillFrame, still_event->length );
4690 while (dvdnav_stream_sleeping(dvdnav_priv)) {
4691 usec_sleep(1000); /* 1ms */
4692 }
4693 dvdnav_stream_sleep(dvdnav_priv,still_event->length);
4694 break;
4695 }
4696 case DVDNAV_STOP: {
4697 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNavStop );
4698 break;
4699 }
4700 case DVDNAV_NOP: {
4701 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNavNOP);
4702 break;
4703 }
4704 case DVDNAV_SPU_STREAM_CHANGE: {
4705 #if DVDNAVVERSION > 012
4706 dvdnav_spu_stream_change_event_t *stream_change = (dvdnav_spu_stream_change_event_t*)(dvdnav_event->details);
4707
4708 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNavSpuStreamChangeVerbose,
4709 stream_change->physical_wide,
4710 stream_change->physical_letterbox,
4711 stream_change->physical_pan_scan,
4712 stream_change->logical);
4713
4714 if (vo_spudec && dvdsub_id!=stream_change->physical_wide) {
4715 mp_msg(MSGT_INPUT,MSGL_DBG2,"d_dvdsub->id change: was %d is now %d\n",
4716 d_dvdsub->id,stream_change->physical_wide);
4717 // FIXME: need a better way to change SPU id
4718 d_dvdsub->id=dvdsub_id=stream_change->physical_wide;
4719 if (vo_spudec) spudec_reset(vo_spudec);
4720 }
4721 #else
4722 dvdnav_stream_change_event_t *stream_change = (dvdnav_stream_change_event_t*)(dvdnav_event->details);
4723
4724 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNavSpuStreamChange,
4725 stream_change->physical,
4726 stream_change->logical);
4727
4728 if (vo_spudec && dvdsub_id!=stream_change->physical) {
4729 mp_msg(MSGT_INPUT,MSGL_DBG2,"d_dvdsub->id change: was %d is now %d\n",
4730 d_dvdsub->id,stream_change->physical);
4731 // FIXME: need a better way to change SPU id
4732 d_dvdsub->id=dvdsub_id=stream_change->physical;
4733 if (vo_spudec) spudec_reset(vo_spudec);
4734 }
4735 #endif /* DVDNAVVERSION > 012 */
4736 break;
4737 }
4738 case DVDNAV_AUDIO_STREAM_CHANGE: {
4739 int aid_temp;
4740 #if DVDNAVVERSION > 012
4741 dvdnav_audio_stream_change_event_t *stream_change = (dvdnav_audio_stream_change_event_t*)(dvdnav_event->details);
4742 #else
4743 dvdnav_stream_change_event_t *stream_change = (dvdnav_stream_change_event_t*)(dvdnav_event->details);
4744 #endif
4745
4746 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNavAudioStreamChange,
4747 stream_change->physical,
4748 stream_change->logical);
4749
4750 aid_temp=stream_change->physical;
4751 if (aid_temp>=0) aid_temp+=128; // FIXME: is this sane?
4752 if (d_audio && audio_id!=aid_temp) {
4753 mp_msg(MSGT_INPUT,MSGL_DBG2,"d_audio->id change: was %d is now %d\n",
4754 d_audio->id,aid_temp);
4755 // FIXME: need a better way to change audio stream id
4756 d_audio->id=dvdsub_id=aid_temp;
4757 if(sh_audio) resync_audio_stream(sh_audio);
4758 }
4759
4760 break;
4761 }
4762 case DVDNAV_VTS_CHANGE: {
4763 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNavVTSChange);
4764 break;
4765 }
4766 case DVDNAV_CELL_CHANGE: {
4767 dvdnav_cell_change_event_t *cell_change = (dvdnav_cell_change_event_t*)(dvdnav_event->details);
4768 cell_playback_t * cell_playback = cell_change->new_cell;
4769
4770 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNavCellChange);
4771 osd_show_dvd_nav_highlight=0; /* screen changed, disable menu */
4772 /*
4773 printf("new still time: %d\n",cell_playback->still_time);
4774 printf("new cell_cmd_nr: %d\n",cell_playback->cell_cmd_nr);
4775 printf("new playback_time: %02d:%02d:%02d.%02d\n",
4776 cell_playback->playback_time.hour,
4777 cell_playback->playback_time.minute,
4778 cell_playback->playback_time.second,
4779 cell_playback->playback_time.frame_u);
4780
4781 */
4782 //rel_seek_secs=1; // not really: we can't seek, but it'll reset the muxer
4783 //abs_seek_pos=0;
4784 break;
4785 }
4786 case DVDNAV_NAV_PACKET: {
4787 // printf("DVDNAV Event: Nav Packet\n");
4788 break;
4789 }
4790 case DVDNAV_SPU_CLUT_CHANGE: {
4791 uint32_t * new_clut = (uint32_t *)(dvdnav_event->details);
4792
4793 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNavSpuClutChange);
4794 // send new palette to SPU decoder
4795 if (vo_spudec) spudec_update_palette(vo_spudec,new_clut);
4796
4797 break;
4798 }
4799 case DVDNAV_SEEK_DONE: {
4800 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_DvdnavNavSeekDone);
4801 break;
4802 }
4803 }
4804
4805 // free the dvdnav event
4806 free(dvdnav_event->details);
4807 free(dvdnav_event);
4808 cmd->args[0].v.v=NULL;
4809 }
4810 case MP_CMD_DVDNAV: {
4811 dvdnav_priv_t * dvdnav_priv=(dvdnav_priv_t*)stream->priv;
4812
4813 /* ignore these events if we're not in dvd_nav mode */
4814 if (stream->type != STREAMTYPE_DVDNAV) break;
4815
4816 switch (cmd->args[0].v.i) {
4817 case MP_CMD_DVDNAV_UP:
4818 dvdnav_upper_button_select(dvdnav_priv->dvdnav);
4819 break;
4820 case MP_CMD_DVDNAV_DOWN:
4821 dvdnav_lower_button_select(dvdnav_priv->dvdnav);
4822 break;
4823 case MP_CMD_DVDNAV_LEFT:
4824 dvdnav_left_button_select(dvdnav_priv->dvdnav);
4825 break;
4826 case MP_CMD_DVDNAV_RIGHT:
4827 dvdnav_right_button_select(dvdnav_priv->dvdnav);
4828 break;
4829 case MP_CMD_DVDNAV_MENU:
4830 mp_msg(MSGT_FIXME, MSGL_FIXME, MSGTR_MenuCall);
4831 dvdnav_menu_call(dvdnav_priv->dvdnav,DVD_MENU_Root);
4832 break;
4833 case MP_CMD_DVDNAV_SELECT:
4834 dvdnav_button_activate(dvdnav_priv->dvdnav);
4835 break;
4836 default:
4837 mp_msg(MSGT_CPLAYER, MSGL_V, "Weird DVD Nav cmd %d\n",cmd->args[0].v.i);
4838 break;
4839 }
4840 break;
4841 }
4842 #endif /* USE_DVDNAV */
4843 default : { 4607 default : {
4844 #ifdef HAVE_NEW_GUI 4608 #ifdef HAVE_NEW_GUI
4845 if ( ( use_gui )&&( cmd->id > MP_CMD_GUI_EVENTS ) ) guiGetEvent( guiIEvent,(char *)cmd->id ); 4609 if ( ( use_gui )&&( cmd->id > MP_CMD_GUI_EVENTS ) ) guiGetEvent( guiIEvent,(char *)cmd->id );
4846 else 4610 else
4847 #endif 4611 #endif