libbluray | branch: master | hpi1 <[email protected]> | Wed Jul 2 15:04:25 2014 +0300| [63d66e8972b1daf80cb882fc5920f8749154b8c3] | committer: hpi1
graphics controller: return current page UO mask table > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=63d66e8972b1daf80cb882fc5920f8749154b8c3 --- src/libbluray/bdnav/uo_mask_table.h | 9 +++++++++ src/libbluray/bluray.c | 4 ++-- src/libbluray/decoders/graphics_controller.c | 9 +++++++++ src/libbluray/decoders/graphics_controller.h | 5 +++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/libbluray/bdnav/uo_mask_table.h b/src/libbluray/bdnav/uo_mask_table.h index 71792d9..3eb24d9 100644 --- a/src/libbluray/bdnav/uo_mask_table.h +++ b/src/libbluray/bdnav/uo_mask_table.h @@ -74,4 +74,13 @@ static inline BD_UO_MASK bd_uo_mask_combine(BD_UO_MASK a, BD_UO_MASK b) return result.mask; } +#define EMPTY_UO_MASK {0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0} + +static inline BD_UO_MASK bd_empty_uo_mask(void) +{ + const BD_UO_MASK empty = EMPTY_UO_MASK; + return empty; +} + + #endif // _BD_UO_MASK_TABLE_H_ diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 8b231e3..0585b83 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -490,7 +490,7 @@ static void _update_textst_timer(BLURAY *bd) { if (bd->st_textst.clip) { if (bd->st0.clip_block_pos >= bd->gc_wakeup_pos) { - GC_NAV_CMDS cmds = {-1, NULL, -1, 0, 0}; + GC_NAV_CMDS cmds = {-1, NULL, -1, 0, 0, EMPTY_UO_MASK}; gc_run(bd->graphics_controller, GC_CTRL_PG_UPDATE, bd->gc_wakeup_time, &cmds); @@ -787,7 +787,7 @@ static int _run_gc(BLURAY *bd, gc_ctrl_e msg, uint32_t param) int result = -1; if (bd && bd->graphics_controller && bd->hdmv_vm) { - GC_NAV_CMDS cmds = {-1, NULL, -1, 0, 0}; + GC_NAV_CMDS cmds = {-1, NULL, -1, 0, 0, EMPTY_UO_MASK}; result = gc_run(bd->graphics_controller, msg, param, &cmds); diff --git a/src/libbluray/decoders/graphics_controller.c b/src/libbluray/decoders/graphics_controller.c index 1b98cf2..8625f3a 100644 --- a/src/libbluray/decoders/graphics_controller.c +++ b/src/libbluray/decoders/graphics_controller.c @@ -73,6 +73,7 @@ struct graphics_controller_s { unsigned auto_action_triggered; BOG_DATA *bog_data; BOG_DATA *saved_bog_data; + BD_UO_MASK page_uo_mask; /* page effects */ int effect_idx; @@ -686,6 +687,7 @@ static void _select_page(GRAPHICS_CONTROLLER *gc, uint16_t page_id, int out_effe _select_button(gc, button_id); gc->valid_mouse_position = 0; + gc->page_uo_mask = bd_empty_uo_mask(); if (out_effects) { page = _find_page(&gc->igs->ics->interactive_composition, cur_page_id); @@ -717,6 +719,7 @@ static void _gc_reset(GRAPHICS_CONTROLLER *gc) gc->popup_visible = 0; gc->valid_mouse_position = 0; + gc->page_uo_mask = bd_empty_uo_mask(); graphics_processor_free(&gc->igp); graphics_processor_free(&gc->pgp); @@ -1401,6 +1404,7 @@ static int _render_page(GRAPHICS_CONTROLLER *gc, s->ics->video_descriptor.video_height); } + gc->page_uo_mask = page->uo_mask_table; for (ii = 0; ii < page->num_bogs; ii++) { BD_IG_BOG *bog = &page->bog[ii]; @@ -1898,6 +1902,7 @@ int gc_run(GRAPHICS_CONTROLLER *gc, gc_ctrl_e ctrl, uint32_t param, GC_NAV_CMDS cmds->nav_cmds = NULL; cmds->sound_id_ref = -1; cmds->status = GC_STATUS_NONE; + cmds->page_uo_mask = bd_empty_uo_mask(); } if (!gc) { @@ -2033,6 +2038,10 @@ int gc_run(GRAPHICS_CONTROLLER *gc, gc_ctrl_e ctrl, uint32_t param, GC_NAV_CMDS cmds->status |= GC_STATUS_MENU_OPEN; } } + + if (gc->ig_open && !gc->out_effects) { + cmds->page_uo_mask = gc->page_uo_mask; + } } bd_mutex_unlock(&gc->mutex); diff --git a/src/libbluray/decoders/graphics_controller.h b/src/libbluray/decoders/graphics_controller.h index 563de2c..2a650e4 100644 --- a/src/libbluray/decoders/graphics_controller.h +++ b/src/libbluray/decoders/graphics_controller.h @@ -22,6 +22,8 @@ #include "util/attributes.h" +#include "libbluray/bdnav/uo_mask_table.h" + #include <stdint.h> /* @@ -85,6 +87,9 @@ typedef struct { /* */ uint32_t wakeup_time; + + BD_UO_MASK page_uo_mask; + } GC_NAV_CMDS; /* _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
