⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nav_task.c

📁 这是DVD中伺服部分的核心代码
💻 C
📖 第 1 页 / 共 5 页
字号:
              break;
          case VOCAL_FADER:
              set_vocal_fade_mode(VOCAL_CHANGER);
              /* Send "VOCAL_CHANGER"message to OSD */
              out_msg[1] = VOCAL_CHANGER;
              break;
          case VOCAL_OFF:
          default:
              set_vocal_fade_mode(VOCAL_FADER);
              /* Send "VOCAL_FADER"message to OSD */
              out_msg[1] = VOCAL_FADER;
          }
          if (UsrEventHandler(out_msg) != USR_SUCCESS)
          {
              DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
          }
          break;
#else
        case KEY_SURROUND:
            break;
#endif

            /* Bring up the Program menu */
        case KEY_PROGRAM:
            if ( (nav_state == DRIVE_EMPTY) || (nav_state == UNLOADED) )
            {
                uop_prohibited_msg(0);
                break;
            }
            else if ( (nav_state != NORMAL_PLAYING) && (nav_state != PAUSED) &&
                (nav_state != STOPPED) && (nav_state != FULL_STOPPED) && (nav_state != CELL_STILL) )
            {
                uop_prohibited_msg(0);
                break;
            }
#if SUBTITLE_MODE == SUBTITLE_1
            if (subtitle_menu)
            {
                break;
            }
#endif

            if (settmppml_on)
            {
                break;
            }

            if (program_on == TRUE)
            {
                program_on = FALSE;
            }
            else
            {

                A_B_count = repeat_count = 0;
                if (repeat_mode != REPEAT_OFF)
                {
                    repeat_mode = REPEAT_OFF;
                    UsrSendRepeatEvent(VDVD_INFO_REPEAT_OFF);
                }
                program_on = TRUE;
            }

            if (search_on == TRUE)
            {
                search_on = FALSE;
                out_msg[0] = VDVD_STATUS_GOTO;
                out_msg[1] = 0;
                if (UsrEventHandler(out_msg) != USR_SUCCESS)
                {
                    DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
                }
            }
            if (echomenu_on == TRUE)
            {
                echomenu_on = FALSE;
                out_msg[0] = VDVD_STATUS_ECHO;
                out_msg[1] = echomenu_on;
                if (UsrEventHandler(out_msg) != USR_SUCCESS)
                {
                    DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
                }
            }
            if (keymenu_on == TRUE)
            {
                keymenu_on = FALSE;
                out_msg[0] = VDVD_STATUS_KEY_SHIFT;
                out_msg[1] = keymenu_on;
                if (UsrEventHandler(out_msg) != USR_SUCCESS)
                {
                    DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
                }
            }
            out_msg[0] = VDVD_STATUS_PROGRAM;
            out_msg[1] = program_on;
            if (UsrEventHandler(out_msg) != USR_SUCCESS)
            {
                DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
            }
            break;

          case KEY_GOTO:
            DBGPRINT(DBG_ON(DBG_TRACE), ("nav_task: case KEY_GOTO\n"));
            if (nav_state == DRIVE_EMPTY)
            {
                uop_prohibited_msg(0);
                break;
            }
            else if( (nav_state != NORMAL_PLAYING) && (nav_state != PAUSED) &&
                (nav_state != STOPPED) && (nav_state != FULL_STOPPED) && (nav_state != CELL_STILL) )
            {
                uop_prohibited_msg(0);
                break;
            }

            if (user_program_enable || repeat_mode|| A_B_count)
            {
               uop_prohibited_msg(0);
               break;
            }
#if SUBTITLE_MODE == SUBTITLE_1
            if (subtitle_menu)
            {
                break;
            }
#endif
            if (settmppml_on)
            {
                break;
            }

            if (echomenu_on)
            {
                break;
            }

            if (keymenu_on)
            {
                break;
            }

            if (program_on)
            {
               search_on = FALSE;
               search_mode = 0;
            }

            if (!search_on)
            {
                search_mode = 0;
            }

            if (search_mode == 0)
            {
                search_on = TRUE;
                search_mode ++;
            }
            else if (search_mode == 1)
            {
                if ( (tt_srp[get_sprm(SPRM_TTN_TT_DOM) - 1].tt_pb_ty & 0x01) ||
                    (tt_srp[get_sprm(SPRM_TTN_TT_DOM) - 1].tt_pb_ty & 0x40) ||
                    (pgc_gi.pgc_uop_ctl[3] & 0x21)                          ||
                    ((nvpck[CURRENT].pci_gi.vobu_uop_ctl[3] & 0x21) && (pgc_mode >= PGC_PG_PLAY))
                    || (pgc_domain == VMGM_PGC) || (pgc_domain == VTSM_PGC) ||
                    (nav_state == FULL_STOPPED) ||
                    (vts_tmap[next_pgcn - 1].map_en_n == 0) )
                {
                    search_on = FALSE;
                    search_mode = 0;
                    out_msg[0] = VDVD_STATUS_GOTO;
                    out_msg[1] = search_mode;
                    if (UsrEventHandler(out_msg) != USR_SUCCESS)
                    {
                        DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
                    }
                    break;
                }
                else
                {
                    search_mode++;
                }
            }
            else if (search_mode == 2)
            {
                search_on = FALSE;
                search_mode = 0;
            }
            else
            {
                search_mode++;
            }

            if (program_on == TRUE)
            {
                program_on = FALSE;
                out_msg[0] = VDVD_STATUS_PROGRAM;
                out_msg[1] = program_on;
                if (UsrEventHandler(out_msg) != USR_SUCCESS)
                {
                    DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
                }
            }
            out_msg[0] = VDVD_STATUS_GOTO;
            out_msg[1] = search_mode;
            if (UsrEventHandler(out_msg) != USR_SUCCESS)
            {
                DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
            }
            break;

        case KEY_SHUFFLE_PLAY:
            track_buffer_empty = 0;
            if ( (nav_state == STOPPED) || (nav_state == FULL_STOPPED) || (nav_state == PAUSED) )
            {
                EnableNavCmdTimer();
            }

            if (!shuffle_on)
            {
                if ( (nav_state == UNLOADED) || (nav_state == DRIVE_EMPTY) )
                {
                    uop_prohibited_msg(2);
                    break;
                }
                out_msg[0] = VDVD_STATUS_PLAY;
                if (UsrEventHandler(out_msg) != USR_SUCCESS)
                {
                    DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
                }

                if (nav_state == FULL_STOPPED)
                {
                    start_drive(RESTART);
                }

                Enter_shuffle_mode();
                abort_drive_reset_channel();
                clear_nav_state();
                play_ni();
                current_program = 1;
                user_program_enable = 1;
                user_program_start = 0;
                out_msg[0] = VDVD_STATUS_PLAY;
                if (UsrEventHandler(out_msg) != USR_SUCCESS)
                {
                    DbgPrint(("\nUsrEventHandler FAILURE, %s, %d\n\n", __FILE__, __LINE__));
                }
                playback_next_user_program(1);
                player_state = NORMAL_PLAY;
            }
            else
            {
                Exit_shuffle_mode();
            }
            break;


/**************************************************************************
 * MENU  DOMAINS                                                          *
 **************************************************************************/
        case KEY_GOTO_BUTTON:
            DBGPRINT(DBG_ON(DBG_TRACE), ("nav_task() - KEY_GOTO_BUTTON\n"));

            if ((nav_state == STOPPED) || (nav_state == FULL_STOPPED) || (nav_state == DRIVE_EMPTY))
            {
                uop_prohibited_msg(0);       /* player prohibited */
                break;
            }

            /* Make sure that the current navigation data is applicable */
            if (nv_pck_ready == 0)
            {
                uop_prohibited_msg(0);
                break;
            }

            /* Check if user operation is prohibited for this pgc */
            if (pgc_gi.pgc_uop_ctl[1] & 0x02)
            {
                uop_prohibited_msg(0);
                break;
            }

            /* Check that button number is valid.  If not, prohibit this command */
            if (( message[1] <= nvpck[CURRENT].hl_gi.btn_ofn ) ||
                ( message[1] >= (ULONG)(nvpck[CURRENT].hl_gi.btn_ofn + nvpck[CURRENT].hl_gi.nsl_btn_ns + 1) ))
            {
                uop_prohibited_msg(0);
                break;
            }

            if (nav_state == PAUSED)
            {
                EnableNavCmdTimer();
            }

            change_button_num((UBYTE) (message[1]));

            if (select_or_active_button()) /* button is already activated */
            {
                break;
            }

            /*
             * Order of button activation needs to be...
             * 1. Highlight button then disable button
             * 2. Do abort_drive_reset_channel() if necessary.
             * 3. Execute button command
             */

            /* activate current selected button */
            activate_selected_button();

            /* Make the highlight visable */
            OS_TaskDelay(OS_WAIT_1S/4);

            /* disable the button */
            Button.button_cmd = BTN_DISABLE;
            PEiStreamCtrlSendDVDButtonCmd(tPE, &Button);



            if ( TRUE == IsBranchCommand(nvpck[CURRENT].btn_cmd[button_num]))
            {
                normalize();

                send_another_cell_request = reset_scr_flag = 0;
                abort_drive_reset_channel();

                during_search = 1;

                reset_scr_flag = 0x05;    /* CELL_V1 */
                num_of_times = vobu_button_hl = 0;
                cell_play_counter = 0;

                /* Prevent next play OR select to activate button */
                /* eventhough NEW nv_pck hac not been arrived    */
                nvpck[CURRENT].hl_gi.btn_ns = 0;
            }

            retval = (UCHAR)(button_cell_cmd(BUTTON_CMD));

            if (retval == 0)
            {
                if (pgc_domain == TT_PGC)
                {
                    rsm_info.valid = 0;
                    if ( !(get_sprm(SPRM_SPSTN_TT_DOM) & 0x40) ) /* subtitle not enabled in title domain */
                    {
                        spu_disp_off();
                    }
                }
            }
            else
            {
                if ( (0 != pgc_cmdti.c_cmd_n) && (c_pbi[next_cell - 1].c_cat[3]) )
                {
                    for (i = 0; i < SIZEOF_CMD; i++)
                    {
                        button_cmd_buff[0][i] = c_cmd_buff[c_pbi[next_cell - 1].c_cat[3] - 1][i];
                    }

                    retval = (UCHAR)(button_cell_cmd(CELL_CMD));
                }
            }
            break;

        case KEY_SETTMPPML:
            DBGPRINT(DBG_ON(DBG_TRACE), ("nav_task() - KEY_SETTMPPML\n"));
            settmppml_on = FALSE;
            if (message[1] == 0)
            {
                DbgPrint(("nav_task() - parental play (0)\n"));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -