00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "config.h"
00025
00026 #include "dvdnav_internal.h"
00027
00028
00029
00030 dvdnav_status_t dvdnav_get_region_mask(dvdnav_t *this, int32_t *region) {
00031 if(!this || !region) {
00032 printerr("Passed a NULL this pointer.");
00033 return DVDNAV_STATUS_ERR;
00034 }
00035
00036 (*region) = this->vm->state.registers.SPRM[20];
00037 return DVDNAV_STATUS_OK;
00038 }
00039
00040 dvdnav_status_t dvdnav_set_region_mask(dvdnav_t *this, int32_t mask) {
00041 if(!this) {
00042 printerr("Passed a NULL this pointer.");
00043 return DVDNAV_STATUS_ERR;
00044 }
00045
00046 pthread_mutex_lock(&this->vm_lock);
00047 this->vm->state.registers.SPRM[20] = (mask & 0xff);
00048 pthread_mutex_unlock(&this->vm_lock);
00049 return DVDNAV_STATUS_OK;
00050 }
00051
00052 dvdnav_status_t dvdnav_set_readahead_flag(dvdnav_t *this, int32_t use_readahead) {
00053 if(!this) {
00054 printerr("Passed a NULL this pointer.");
00055 return DVDNAV_STATUS_ERR;
00056 }
00057
00058 this->use_read_ahead = use_readahead;
00059 return DVDNAV_STATUS_OK;
00060 }
00061
00062 dvdnav_status_t dvdnav_get_readahead_flag(dvdnav_t *this, int32_t *flag) {
00063 if(!this || !flag) {
00064 printerr("Passed a NULL this pointer.");
00065 return DVDNAV_STATUS_ERR;
00066 }
00067
00068 (*flag) = this->use_read_ahead;
00069 return DVDNAV_STATUS_OK;
00070 }
00071
00072 static dvdnav_status_t set_language_register(dvdnav_t *this, char *code, int reg) {
00073 if(!this || !code) {
00074 printerr("Passed a NULL this pointer.");
00075 return DVDNAV_STATUS_ERR;
00076 }
00077
00078 if(!code[0] || !code[1]) {
00079 printerr("Passed illegal language code.");
00080 return DVDNAV_STATUS_ERR;
00081 }
00082
00083 pthread_mutex_lock(&this->vm_lock);
00084 this->vm->state.registers.SPRM[reg] = (code[0] << 8) | code[1];
00085 pthread_mutex_unlock(&this->vm_lock);
00086 return DVDNAV_STATUS_OK;
00087 }
00088
00089 dvdnav_status_t dvdnav_menu_language_select(dvdnav_t *this, char *code) {
00090 return set_language_register(this, code, 0);
00091 }
00092
00093 dvdnav_status_t dvdnav_audio_language_select(dvdnav_t *this, char *code) {
00094 return set_language_register(this, code, 16);
00095 }
00096
00097 dvdnav_status_t dvdnav_spu_language_select(dvdnav_t *this, char *code) {
00098 return set_language_register(this, code, 18);
00099 }
00100
00101 dvdnav_status_t dvdnav_set_PGC_positioning_flag(dvdnav_t *this, int32_t pgc) {
00102 if(!this) {
00103 printerr("Passed a NULL this pointer.");
00104 return DVDNAV_STATUS_ERR;
00105 }
00106
00107 this->pgc_based = pgc;
00108 return DVDNAV_STATUS_OK;
00109 }
00110
00111 dvdnav_status_t dvdnav_get_PGC_positioning_flag(dvdnav_t *this, int32_t *flag) {
00112 if(!this || !flag) {
00113 printerr("Passed a NULL this pointer.");
00114 return DVDNAV_STATUS_ERR;
00115 }
00116
00117 (*flag) = this->pgc_based;
00118 return DVDNAV_STATUS_OK;
00119 }