Mercurial > mplayer.hg
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 |