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

📄 highlight.c

📁 linux下的MPEG1
💻 C
📖 第 1 页 / 共 2 页
字号:
/*  * Copyright (C) 2000 Rich Wareham <richwareham@users.sourceforge.net> *  * This file is part of libdvdnav, a DVD navigation library. *  * libdvdnav is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. *  * libdvdnav is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA * * $Id: highlight.c,v 1.17 2004/03/16 11:43:38 mroi Exp $ * */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <assert.h>#include "nav_types.h"#include "dvdnav_internal.h"/*#define BUTTON_TESTING*/#ifdef BUTTON_TESTING#include "nav_print.h"static void print_time(dvd_time_t *dtime) {  const char *rate;  assert((dtime->hour>>4) < 0xa && (dtime->hour&0xf) < 0xa);  assert((dtime->minute>>4) < 0x7 && (dtime->minute&0xf) < 0xa);  assert((dtime->second>>4) < 0x7 && (dtime->second&0xf) < 0xa);  assert((dtime->frame_u&0xf) < 0xa);  fprintf(MSG_OUT,"%02x:%02x:%02x.%02x",         dtime->hour,         dtime->minute,         dtime->second,         dtime->frame_u & 0x3f);  switch((dtime->frame_u & 0xc0) >> 6) {  case 1:    rate = "25.00";    break;  case 3:    rate = "29.97";    break;  default:    rate = "(please send a bug report)";    break;  }  fprintf(MSG_OUT," @ %s fps", rate);}static void nav_print_PCI_GI(pci_gi_t *pci_gi) {  int32_t i;  fprintf(MSG_OUT,"libdvdnav: pci_gi:\n");  fprintf(MSG_OUT,"libdvdnav: nv_pck_lbn    0x%08x\n", pci_gi->nv_pck_lbn);  fprintf(MSG_OUT,"libdvdnav: vobu_cat      0x%04x\n", pci_gi->vobu_cat);  fprintf(MSG_OUT,"libdvdnav: vobu_uop_ctl  0x%08x\n", *(uint32_t*)&pci_gi->vobu_uop_ctl);  fprintf(MSG_OUT,"libdvdnav: vobu_s_ptm    0x%08x\n", pci_gi->vobu_s_ptm);  fprintf(MSG_OUT,"libdvdnav: vobu_e_ptm    0x%08x\n", pci_gi->vobu_e_ptm);  fprintf(MSG_OUT,"libdvdnav: vobu_se_e_ptm 0x%08x\n", pci_gi->vobu_se_e_ptm);  fprintf(MSG_OUT,"libdvdnav: e_eltm        ");  print_time(&pci_gi->e_eltm);  fprintf(MSG_OUT,"\n");  fprintf(MSG_OUT,"libdvdnav: vobu_isrc     \"");  for(i = 0; i < 32; i++) {    char c = pci_gi->vobu_isrc[i];    if((c >= ' ') && (c <= '~'))      fprintf(MSG_OUT,"%c", c);    else      fprintf(MSG_OUT,".");  }  fprintf(MSG_OUT,"\"\n");}static void nav_print_NSML_AGLI(nsml_agli_t *nsml_agli) {  int32_t i, j = 0;  for(i = 0; i < 9; i++)    j |= nsml_agli->nsml_agl_dsta[i];  if(j == 0)    return;  fprintf(MSG_OUT,"libdvdnav: nsml_agli:\n");  for(i = 0; i < 9; i++)    if(nsml_agli->nsml_agl_dsta[i])      fprintf(MSG_OUT,"libdvdnav: nsml_agl_c%d_dsta  0x%08x\n", i + 1,             nsml_agli->nsml_agl_dsta[i]);}static void nav_print_HL_GI(hl_gi_t *hl_gi, int32_t *btngr_ns, int32_t *btn_ns) {  if((hl_gi->hli_ss & 0x03) == 0)    return;  fprintf(MSG_OUT,"libdvdnav: hl_gi:\n");  fprintf(MSG_OUT,"libdvdnav: hli_ss        0x%01x\n", hl_gi->hli_ss & 0x03);  fprintf(MSG_OUT,"libdvdnav: hli_s_ptm     0x%08x\n", hl_gi->hli_s_ptm);  fprintf(MSG_OUT,"libdvdnav: hli_e_ptm     0x%08x\n", hl_gi->hli_e_ptm);  fprintf(MSG_OUT,"libdvdnav: btn_se_e_ptm  0x%08x\n", hl_gi->btn_se_e_ptm);  *btngr_ns = hl_gi->btngr_ns;  fprintf(MSG_OUT,"libdvdnav: btngr_ns      %d\n",  hl_gi->btngr_ns);  fprintf(MSG_OUT,"libdvdnav: btngr%d_dsp_ty    0x%02x\n", 1, hl_gi->btngr1_dsp_ty);  fprintf(MSG_OUT,"libdvdnav: btngr%d_dsp_ty    0x%02x\n", 2, hl_gi->btngr2_dsp_ty);  fprintf(MSG_OUT,"libdvdnav: btngr%d_dsp_ty    0x%02x\n", 3, hl_gi->btngr3_dsp_ty);  fprintf(MSG_OUT,"libdvdnav: btn_ofn       %d\n", hl_gi->btn_ofn);  *btn_ns = hl_gi->btn_ns;  fprintf(MSG_OUT,"libdvdnav: btn_ns        %d\n", hl_gi->btn_ns);  fprintf(MSG_OUT,"libdvdnav: nsl_btn_ns    %d\n", hl_gi->nsl_btn_ns);  fprintf(MSG_OUT,"libdvdnav: fosl_btnn     %d\n", hl_gi->fosl_btnn);  fprintf(MSG_OUT,"libdvdnav: foac_btnn     %d\n", hl_gi->foac_btnn);}static void nav_print_BTN_COLIT(btn_colit_t *btn_colit) {  int32_t i, j;  j = 0;  for(i = 0; i < 6; i++)    j |= btn_colit->btn_coli[i/2][i&1];  if(j == 0)    return;  fprintf(MSG_OUT,"libdvdnav: btn_colit:\n");  for(i = 0; i < 3; i++)    for(j = 0; j < 2; j++)      fprintf(MSG_OUT,"libdvdnav: btn_cqoli %d  %s_coli:  %08x\n",             i, (j == 0) ? "sl" : "ac",             btn_colit->btn_coli[i][j]);}static void nav_print_BTNIT(btni_t *btni_table, int32_t btngr_ns, int32_t btn_ns) {  int32_t i, j, k;  fprintf(MSG_OUT,"libdvdnav: btnit:\n");  fprintf(MSG_OUT,"libdvdnav: btngr_ns: %i\n", btngr_ns);  fprintf(MSG_OUT,"libdvdnav: btn_ns: %i\n", btn_ns);  if(btngr_ns == 0)    return;  for(i = 0; i < btngr_ns; i++) {    for(j = 0; j < (36 / btngr_ns); j++) {      if(j < btn_ns) {        btni_t *btni = &btni_table[(36 / btngr_ns) * i + j];        fprintf(MSG_OUT,"libdvdnav: group %d btni %d:  ", i+1, j+1);        fprintf(MSG_OUT,"btn_coln %d, auto_action_mode %d\n",               btni->btn_coln, btni->auto_action_mode);        fprintf(MSG_OUT,"libdvdnav: coords   (%d, %d) .. (%d, %d)\n",               btni->x_start, btni->y_start, btni->x_end, btni->y_end);        fprintf(MSG_OUT,"libdvdnav: up %d, ", btni->up);        fprintf(MSG_OUT,"down %d, ", btni->down);        fprintf(MSG_OUT,"left %d, ", btni->left);        fprintf(MSG_OUT,"right %d\n", btni->right);        for(k = 0; k < 8; k++) {          fprintf(MSG_OUT, "libdvdnav: %02x ", btni->cmd.bytes[k]);        }        fprintf(MSG_OUT, "| ");#ifdef TRACE        vm_print_mnemonic(&btni->cmd);#endif        fprintf(MSG_OUT, "\n");      }    }  }}static void nav_print_HLI(hli_t *hli) {  int32_t btngr_ns = 0, btn_ns = 0;  fprintf(MSG_OUT,"libdvdnav: hli:\n");  nav_print_HL_GI(&hli->hl_gi, & btngr_ns, & btn_ns);  nav_print_BTN_COLIT(&hli->btn_colit);  nav_print_BTNIT(hli->btnit, btngr_ns, btn_ns);}void nav_print_PCI(pci_t *pci) {  fprintf(MSG_OUT,"libdvdnav: pci packet:\n");  nav_print_PCI_GI(&pci->pci_gi);  nav_print_NSML_AGLI(&pci->nsml_agli);  nav_print_HLI(&pci->hli);}#endif/* Highlighting API calls */dvdnav_status_t dvdnav_get_current_highlight(dvdnav_t *this, int32_t *button) {    if(!this || !button) {    printerr("Passed a NULL pointer.");    return DVDNAV_STATUS_ERR;  }  /* Simply return the appropriate value based on the SPRM */  if(((*button) = this->position_current.button) == -1)    (*button) = this->vm->state.HL_BTNN_REG >> 10;    return DVDNAV_STATUS_OK;}static btni_t *get_current_button(dvdnav_t *this, pci_t *pci) {  int32_t button = 0;  if(!this || !pci) {    printerr("Passed a NULL pointer.");    return NULL;  }  if(!pci->hli.hl_gi.hli_ss) {    printerr("Not in a menu.");    return NULL;  }  if(this->last_cmd_nav_lbn == pci->pci_gi.nv_pck_lbn) {    printerr("This NAV has already been left.");    return NULL;  }  button = this->vm->state.HL_BTNN_REG >> 10;#ifdef BUTTON_TESTING  nav_print_PCI(pci);#endif    return &(pci->hli.btnit[button-1]);}static dvdnav_status_t button_auto_action(dvdnav_t *this, pci_t *pci) {  if (get_current_button(this, pci)->auto_action_mode)    return dvdnav_button_activate(this, pci);  return DVDNAV_STATUS_OK;}dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *this, pci_t *pci) {  btni_t *button_ptr;    if(!(button_ptr = get_current_button(this, pci)))    return DVDNAV_STATUS_ERR;

⌨️ 快捷键说明

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