libbluray | branch: master | hpi1 <[email protected]> | Wed Nov 27 17:07:52 2013 +0200| [3a13579dbb82b7dbb8c356b195dbb11f001d0593] | committer: hpi1
Add wrapper functions for BD-J register access. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=3a13579dbb82b7dbb8c356b195dbb11f001d0593 --- src/libbluray/bdj/bdj.c | 3 +-- src/libbluray/bdj/bdj.h | 3 +-- src/libbluray/bdj/bdj_private.h | 2 -- src/libbluray/bdj/native/org_videolan_Libbluray.c | 21 +++++++++------- src/libbluray/bluray.c | 27 ++++++++++++++++++++- src/libbluray/bluray_internal.h | 3 +++ 6 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/libbluray/bdj/bdj.c b/src/libbluray/bdj/bdj.c index d60d6fc..896d45e 100644 --- a/src/libbluray/bdj/bdj.c +++ b/src/libbluray/bdj/bdj.c @@ -251,7 +251,7 @@ static int _bdj_init(BDJAVA *bdjava, JNIEnv *env) } BDJAVA* bdj_open(const char *path, struct bluray *bd, - struct bd_registers_s *registers, struct indx_root_s *index, + struct indx_root_s *index, bdj_overlay_cb osd_cb, struct bd_argb_buffer_s *buf) { BD_DEBUG(DBG_BDJ, "bdj_open()\n"); @@ -275,7 +275,6 @@ BDJAVA* bdj_open(const char *path, struct bluray *bd, BDJAVA* bdjava = calloc(1, sizeof(BDJAVA)); bdjava->bd = bd; - bdjava->reg = registers; bdjava->index = index; bdjava->path = path; bdjava->h_libjvm = jvm_lib; diff --git a/src/libbluray/bdj/bdj.h b/src/libbluray/bdj/bdj.h index 4207de5..203cf53 100644 --- a/src/libbluray/bdj/bdj.h +++ b/src/libbluray/bdj/bdj.h @@ -45,7 +45,6 @@ typedef enum { typedef struct bdjava_s BDJAVA; struct bluray; -struct bd_registers_s; struct indx_root_s; struct bd_argb_buffer_s; @@ -53,7 +52,7 @@ typedef void (*bdj_overlay_cb)(struct bluray *, const unsigned *, int, int, int, int, int, int); BD_PRIVATE BDJAVA* bdj_open(const char *path, struct bluray *bd, - struct bd_registers_s *registers, struct indx_root_s *index, + struct indx_root_s *index, bdj_overlay_cb osd_cb, struct bd_argb_buffer_s *buf); BD_PRIVATE int bdj_start(BDJAVA *bdjava, unsigned title); BD_PRIVATE int bdj_stop(BDJAVA *bdjava); diff --git a/src/libbluray/bdj/bdj_private.h b/src/libbluray/bdj/bdj_private.h index 32e6e52..37165ae 100644 --- a/src/libbluray/bdj/bdj_private.h +++ b/src/libbluray/bdj/bdj_private.h @@ -20,7 +20,6 @@ #ifndef BDJ_PRIVATE_H_ #define BDJ_PRIVATE_H_ -#include "libbluray/register.h" #include "libbluray/bluray.h" #include "libbluray/bdnav/index_parse.h" #include "libbluray/decoders/overlay.h" @@ -28,7 +27,6 @@ struct bdjava_s { BLURAY *bd; - BD_REGISTERS *reg; INDX_ROOT *index; bdj_overlay_cb osd_cb; diff --git a/src/libbluray/bdj/native/org_videolan_Libbluray.c b/src/libbluray/bdj/native/org_videolan_Libbluray.c index 6fa96cb..d604a9c 100644 --- a/src/libbluray/bdj/native/org_videolan_Libbluray.c +++ b/src/libbluray/bdj/native/org_videolan_Libbluray.c @@ -22,11 +22,9 @@ #include "libbluray/bdj/bdj_private.h" #include "libbluray/bdj/bdj_util.h" #include "libbluray/bdj/bdjo_parser.h" -#include "libbluray/register.h" #include "libbluray/bluray.h" #include "libbluray/bluray_internal.h" -#include "util/mutex.h" #include "util/strutl.h" #include "util/macro.h" #include "util/logging.h" @@ -341,13 +339,17 @@ JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_writeGPRN(JNIEnv * env, BD_DEBUG(DBG_JNI, "writeGPRN(%d,%d)\n", (int)num, (int)value); - return bd_gpr_write(bdj->reg, num, value); + return bd_reg_write(bdj->bd, 0, num, value); } JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_readGPRN(JNIEnv * env, jclass cls, jlong np, jint num) { BDJAVA* bdj = (BDJAVA*)(intptr_t)np; - return bd_gpr_read(bdj->reg, num); + int value = bd_reg_read(bdj->bd, 0, num); + + BD_DEBUG(DBG_JNI, "readGPRN(%d) -> %d\n", (int)num, (int)value); + + return value; } JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_writePSRN(JNIEnv * env, @@ -356,16 +358,17 @@ JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_writePSRN(JNIEnv * env, BD_DEBUG(DBG_JNI, "writePSRN(%d,%d)\n", (int)num, (int)value); - bd_mutex_lock((BD_MUTEX*)bdj->bd); - int res = bd_psr_write(bdj->reg, num, value); - bd_mutex_unlock((BD_MUTEX*)bdj->bd); - return res; + return bd_reg_write(bdj->bd, 1, num, value); } JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_readPSRN(JNIEnv * env, jclass cls, jlong np, jint num) { BDJAVA* bdj = (BDJAVA*)(intptr_t)np; - return bd_psr_read(bdj->reg, num); + int value = bd_reg_read(bdj->bd, 1, num); + + BD_DEBUG(DBG_JNI, "readPSRN(%d) -> %d\n", (int)num, (int)value); + + return value; } JNIEXPORT jobject JNICALL Java_org_videolan_Libbluray_getBdjoN(JNIEnv * env, diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 6255b62..7012cd9 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -975,6 +975,31 @@ uint64_t bd_get_uo_mask(BLURAY *bd) #endif #ifdef USING_BDJAVA +uint32_t bd_reg_read(BLURAY *bd, int psr, int reg) +{ + if (psr) { + return bd_psr_read(bd->regs, reg); + } else { + return bd_gpr_read(bd->regs, reg); + } +} +#endif + +#ifdef USING_BDJAVA +int bd_reg_write(BLURAY *bd, int psr, int reg, uint32_t value) +{ + if (psr) { + bd_mutex_lock(&bd->mutex); /* avoid deadlocks (psr_write triggers callbacks that may lock this mutex) */ + int res = bd_psr_write(bd->regs, reg, value); + bd_mutex_unlock(&bd->mutex); + return res; + } else { + return bd_gpr_write(bd->regs, reg, value); + } +} +#endif + +#ifdef USING_BDJAVA /* * handle graphics updates from BD-J layer */ @@ -1055,7 +1080,7 @@ static int _start_bdj(BLURAY *bd, unsigned title) { #ifdef USING_BDJAVA if (bd->bdjava == NULL) { - bd->bdjava = bdj_open(bd->device_path, bd, bd->regs, bd->index, _bdj_osd_cb, bd->argb_buffer); + bd->bdjava = bdj_open(bd->device_path, bd, bd->index, _bdj_osd_cb, bd->argb_buffer); if (!bd->bdjava) { return 0; } diff --git a/src/libbluray/bluray_internal.h b/src/libbluray/bluray_internal.h index 9c61e53..a834fe1 100644 --- a/src/libbluray/bluray_internal.h +++ b/src/libbluray/bluray_internal.h @@ -31,4 +31,7 @@ BD_PRIVATE const uint8_t *bd_get_aacs_data(BLURAY *bd, int type); BD_PRIVATE uint64_t bd_get_uo_mask(BLURAY *bd); BD_PRIVATE int bd_play_title_internal(BLURAY *bd, unsigned title); +BD_PRIVATE uint32_t bd_reg_read(BLURAY *bd, int psr, int reg); +BD_PRIVATE int bd_reg_write(BLURAY *bd, int psr, int reg, uint32_t value); + #endif /* _BLURAY_INTERNAL_H_ */ _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
