comparison vm/vm.c @ 243:e75c52894630 src

* assert(0) does not always and the program (see NDEBUG) * use abort(), where we should really terminate * reversed return value of getbits_init (I prefer booleans)
author mroi
date Wed, 03 Mar 2004 16:50:42 +0000
parents 8b5edf44e384
children a27c81078c3c
comparison
equal deleted inserted replaced
242:f794e1c17947 243:e75c52894630
1 /* 1 /*
2 * Copyright (C) 2000, 2001 Håkan Hjort 2 * Copyright (C) 2000, 2001 Håkan Hjort
3 * Copyright (C) 2001 Rich Wareham <richwareham@users.sourceforge.net> 3 * Copyright (C) 2001 Rich Wareham <richwareham@users.sourceforge.net>
4 * 2002-2004 the dvdnav project
4 * 5 *
5 * This file is part of libdvdnav, a DVD navigation library. It is modified 6 * This file is part of libdvdnav, a DVD navigation library. It is modified
6 * from a file originally part of the Ogle DVD player. 7 * from a file originally part of the Ogle DVD player.
7 * 8 *
8 * libdvdnav is free software; you can redistribute it and/or modify 9 * libdvdnav is free software; you can redistribute it and/or modify
864 case VTSM_DOMAIN: 865 case VTSM_DOMAIN:
865 return vm->vtsi->vtsi_mat->vtsm_video_attr; 866 return vm->vtsi->vtsi_mat->vtsm_video_attr;
866 case VMGM_DOMAIN: 867 case VMGM_DOMAIN:
867 case FP_DOMAIN: 868 case FP_DOMAIN:
868 return vm->vmgi->vmgi_mat->vmgm_video_attr; 869 return vm->vmgi->vmgi_mat->vmgm_video_attr;
869 } 870 default:
870 assert(0); 871 abort();
872 }
871 } 873 }
872 874
873 audio_attr_t vm_get_audio_attr(vm_t *vm, int streamN) { 875 audio_attr_t vm_get_audio_attr(vm_t *vm, int streamN) {
874 switch ((vm->state).domain) { 876 switch ((vm->state).domain) {
875 case VTS_DOMAIN: 877 case VTS_DOMAIN:
877 case VTSM_DOMAIN: 879 case VTSM_DOMAIN:
878 return vm->vtsi->vtsi_mat->vtsm_audio_attr; 880 return vm->vtsi->vtsi_mat->vtsm_audio_attr;
879 case VMGM_DOMAIN: 881 case VMGM_DOMAIN:
880 case FP_DOMAIN: 882 case FP_DOMAIN:
881 return vm->vmgi->vmgi_mat->vmgm_audio_attr; 883 return vm->vmgi->vmgi_mat->vmgm_audio_attr;
882 } 884 default:
883 assert(0); 885 abort();
886 }
884 } 887 }
885 888
886 subp_attr_t vm_get_subp_attr(vm_t *vm, int streamN) { 889 subp_attr_t vm_get_subp_attr(vm_t *vm, int streamN) {
887 switch ((vm->state).domain) { 890 switch ((vm->state).domain) {
888 case VTS_DOMAIN: 891 case VTS_DOMAIN:
890 case VTSM_DOMAIN: 893 case VTSM_DOMAIN:
891 return vm->vtsi->vtsi_mat->vtsm_subp_attr; 894 return vm->vtsi->vtsi_mat->vtsm_subp_attr;
892 case VMGM_DOMAIN: 895 case VMGM_DOMAIN:
893 case FP_DOMAIN: 896 case FP_DOMAIN:
894 return vm->vmgi->vmgi_mat->vmgm_subp_attr; 897 return vm->vmgi->vmgi_mat->vmgm_subp_attr;
895 } 898 default:
896 assert(0); 899 abort();
900 }
897 } 901 }
898 902
899 903
900 /* Playback control */ 904 /* Playback control */
901 905
1053 break; 1057 break;
1054 case 1: /* The first cell in the block */ 1058 case 1: /* The first cell in the block */
1055 switch((vm->state).pgc->cell_playback[(vm->state).cellN - 1].block_type) { 1059 switch((vm->state).pgc->cell_playback[(vm->state).cellN - 1].block_type) {
1056 case 0: /* Not part of a block */ 1060 case 0: /* Not part of a block */
1057 assert(0); 1061 assert(0);
1062 break;
1058 case 1: /* Angle block */ 1063 case 1: /* Angle block */
1059 /* Loop and check each cell instead? So we don't get outside the block? */ 1064 /* Loop and check each cell instead? So we don't get outside the block? */
1060 (vm->state).cellN += (vm->state).AGL_REG - 1; 1065 (vm->state).cellN += (vm->state).AGL_REG - 1;
1061 #ifdef STRICT 1066 #ifdef STRICT
1062 assert((vm->state).cellN <= (vm->state).pgc->nr_of_cells); 1067 assert((vm->state).cellN <= (vm->state).pgc->nr_of_cells);
1157 case 3: /* The last cell in the block */ 1162 case 3: /* The last cell in the block */
1158 default: 1163 default:
1159 switch((vm->state).pgc->cell_playback[(vm->state).cellN - 1].block_type) { 1164 switch((vm->state).pgc->cell_playback[(vm->state).cellN - 1].block_type) {
1160 case 0: /* Not part of a block */ 1165 case 0: /* Not part of a block */
1161 assert(0); 1166 assert(0);
1167 break;
1162 case 1: /* Angle block */ 1168 case 1: /* Angle block */
1163 /* Skip the 'other' angles */ 1169 /* Skip the 'other' angles */
1164 (vm->state).cellN++; 1170 (vm->state).cellN++;
1165 while((vm->state).cellN <= (vm->state).pgc->nr_of_cells && 1171 while((vm->state).cellN <= (vm->state).pgc->nr_of_cells &&
1166 (vm->state).pgc->cell_playback[(vm->state).cellN - 1].block_mode >= 2) { 1172 (vm->state).pgc->cell_playback[(vm->state).cellN - 1].block_mode >= 2) {
1806 case VMGM_DOMAIN: 1812 case VMGM_DOMAIN:
1807 case FP_DOMAIN: 1813 case FP_DOMAIN:
1808 pgcit = get_MENU_PGCIT(vm, vm->vmgi, (vm->state).registers.SPRM[0]); 1814 pgcit = get_MENU_PGCIT(vm, vm->vmgi, (vm->state).registers.SPRM[0]);
1809 break; 1815 break;
1810 default: 1816 default:
1811 pgcit = NULL; /* Should never hapen */ 1817 abort();
1812 fprintf(MSG_OUT, "libdvdnav: get_PGCIT: Unknown domain:%d\n",
1813 (vm->state).domain);
1814 assert(0);
1815 break;
1816 } 1818 }
1817 1819
1818 return pgcit; 1820 return pgcit;
1819 } 1821 }
1820 1822