Mercurial > libdvdnav.hg
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 |