Ticket #1043: dvdmenu_cleanup2.patch
File dvdmenu_cleanup2.patch, 4.5 KB (added by , 20 years ago) |
---|
-
libs/libmythtv/DVDRingBuffer.h
118 118 bool buttonSelected; 119 119 bool buttonExists; 120 120 long long menuspupts; 121 121 int cellid; 122 int lastcellid; 123 int vobid; 124 int lastvobid; 125 bool cellRepeated; 126 122 127 NuppelVideoPlayer *parent; 123 128 124 129 bool DrawMenuButton(uint8_t *spu_pkt, int buf_size); … … 126 131 void ClearMenuSPUParameters(void); 127 132 bool MenuButtonChanged(void); 128 133 uint ConvertLangCode(uint16_t code); // converts 2char key to 3char key 134 void SelectDefaultButton(void); 129 135 130 136 /* copied from dvdsub.c from ffmpeg */ 131 137 int get_nibble(const uint8_t *buf, int nibble_offset); -
libs/libmythtv/DVDRingBuffer.cpp
34 34 skipstillorwait(true), spuStreamLetterbox(false), 35 35 cellstartPos(0), buttonSelected(false), 36 36 buttonExists(false), menuspupts(0), 37 parent(0) 37 cellid(0), lastcellid(0), 38 vobid(0), lastvobid(0), 39 cellRepeated(false), parent(0) 38 40 { 39 41 dvdMenuButton = (AVSubtitleRect*)av_mallocz(sizeof(AVSubtitleRect)); 40 42 } … … 222 224 dvdnav_get_position(dvdnav, &pos, &length); 223 225 titleLength = length *DVD_BLOCK_SIZE; 224 226 cellstartPos = GetReadPosition(); 225 buttonSelected = false; 227 buttonSelected = false; 228 lastvobid = vobid; 229 lastcellid = cellid; 230 vobid = 0; 231 cellid = 0; 232 cellRepeated = false; 226 233 227 if (parent && parent->GetOSD())228 {229 parent->GetOSD()->HideSet("subtitles");230 parent->GetOSD()->ClearAll("subtitles");231 }232 233 234 if (blockBuf != dvdBlockWriteBuf) 234 235 { 235 236 dvdnav_free_cache_block(dvdnav, blockBuf); … … 284 285 case DVDNAV_NAV_PACKET: 285 286 { 286 287 lastNav = (dvdnav_t *)blockBuf; 287 if (IsInMenu() && NumMenuButtons() > 0 && 288 !buttonSelected) 288 if (vobid == 0 && cellid == 0) 289 289 { 290 pci_t *pci = dvdnav_get_current_nav_pci(dvdnav); 291 292 uint8_t button = pci->hli.hl_gi.fosl_btnn; 293 if (button > 0) 294 dvdnav_button_select(dvdnav,pci,button); 295 else 296 dvdnav_button_select(dvdnav,pci,1); 297 298 buttonSelected = true; 299 spuchanged = false; 290 dsi_t *dsi = dvdnav_get_current_nav_dsi(dvdnav); 291 vobid = dsi->dsi_gi.vobu_vob_idn; 292 cellid = dsi->dsi_gi.vobu_c_idn; 293 if ((lastvobid == vobid) && (lastcellid == cellid) 294 && IsInMenu()) 295 cellRepeated = true; 296 if (parent && parent->GetOSD() && !cellRepeated) 297 { 298 parent->GetOSD()->HideSet("subtitles"); 299 parent->GetOSD()->ClearAll("subtitles"); 300 } 301 302 if (NumMenuButtons() > 0 && !buttonSelected 303 && !cellRepeated) 304 { 305 SelectDefaultButton(); 306 buttonSelected = true; 307 spuchanged = false; 308 } 300 309 } 301 310 if (blockBuf != dvdBlockWriteBuf) 302 311 { … … 810 819 return 0; 811 820 } 812 821 822 void DVDRingBufferPriv::SelectDefaultButton(void) 823 { 824 pci_t *pci = dvdnav_get_current_nav_pci(dvdnav); 825 int button = pci->hli.hl_gi.fosl_btnn; 826 if (button > 0) 827 { 828 dvdnav_button_select(dvdnav,pci,button); 829 return; 830 } 831 dvdnav_get_current_highlight(dvdnav,&button); 832 if (button > 0 && button < NumMenuButtons()) 833 dvdnav_button_select(dvdnav,pci,button); 834 else 835 dvdnav_button_select(dvdnav,pci,1); 836 } 837 813 838 void DVDRingBufferPriv::guess_palette(uint32_t *rgba_palette,uint8_t *palette, 814 839 uint8_t *alpha) 815 840 {