libbluray | branch: master | npzacs <[email protected]> | Fri Nov 8 11:03:59 2013 +0200| [a878cad54a2329c906d5b560511926f9b8c4da56] | committer: npzacs
Try to open libmmbd if libaacs/libbdplus not found > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=a878cad54a2329c906d5b560511926f9b8c4da56 --- src/file/libaacs.c | 33 +++++++++++++++++++++++++-------- src/file/libbdplus.c | 31 ++++++++++++++++++++++++------- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/file/libaacs.c b/src/file/libaacs.c index 9fddf2f..a5ec3d5 100644 --- a/src/file/libaacs.c +++ b/src/file/libaacs.c @@ -86,23 +86,40 @@ int libaacs_required(const char *device_path) return 0; } +static void *_open_libaacs(void) +{ + const char * const libaacs[] = { + getenv("LIBAACS_PATH"), + "libaacs", + "libmmbd", + }; + unsigned ii; + + for (ii = 0; ii < sizeof(libaacs) / sizeof(libaacs[0]); ii++) { + if (libaacs[ii]) { + void *handle = dl_dlopen(libaacs[ii], "0"); + if (handle) { + BD_DEBUG(DBG_BLURAY, "Using %s for AACS\n", libaacs[ii]); + return handle; + } + } + } + + BD_DEBUG(DBG_BLURAY | DBG_CRIT, "No usable AACS libraries found!\n"); + return NULL; +} + BD_AACS *libaacs_load(void) { BD_AACS *p = calloc(1, sizeof(BD_AACS)); - const char *libaacs = getenv("LIBAACS_PATH"); - if (!libaacs) { - libaacs = "libaacs"; - } - - p->h_libaacs = dl_dlopen(libaacs, "0"); + p->h_libaacs = _open_libaacs(); if (!p->h_libaacs) { - BD_DEBUG(DBG_BLURAY | DBG_CRIT, "libaacs not found!\n"); X_FREE(p); return NULL; } - BD_DEBUG(DBG_BLURAY, "Loading libaacs (%p)\n", p->h_libaacs); + BD_DEBUG(DBG_BLURAY, "Loading aacs library (%p)\n", p->h_libaacs); *(void **)(&p->decrypt_unit) = dl_dlsym(p->h_libaacs, "aacs_decrypt_unit"); *(void **)(&p->get_vid) = dl_dlsym(p->h_libaacs, "aacs_get_vid"); diff --git a/src/file/libbdplus.c b/src/file/libbdplus.c index 297d182..0c278bb 100644 --- a/src/file/libbdplus.c +++ b/src/file/libbdplus.c @@ -86,20 +86,37 @@ int libbdplus_required(const char *device_path) return 0; } +static void *_libbdplus_open(void) +{ + const char * const libbdplus[] = { + getenv("LIBBDPLUS_PATH"), + "libbdplus", + "libmmbd", + }; + unsigned ii; + + for (ii = 0; ii < sizeof(libbdplus) / sizeof(libbdplus[0]); ii++) { + if (libbdplus[ii]) { + void *handle = dl_dlopen(libbdplus[ii], "0"); + if (handle) { + BD_DEBUG(DBG_BLURAY, "Using %s for BD+\n", libbdplus[ii]); + return handle; + } + } + } + + BD_DEBUG(DBG_BLURAY | DBG_CRIT, "No usable BD+ libraries found!\n"); + return NULL; +} + BD_BDPLUS *libbdplus_load(void) { BD_BDPLUS *p = calloc(1, sizeof(BD_BDPLUS)); BD_DEBUG(DBG_BDPLUS, "attempting to load libbdplus\n"); - const char *libbdplus = getenv("LIBBDPLUS_PATH"); - if (!libbdplus) { - libbdplus = "libbdplus"; - } - - p->h_libbdplus = dl_dlopen(libbdplus, "0"); + p->h_libbdplus = _libbdplus_open(); if (!p->h_libbdplus) { - BD_DEBUG(DBG_BLURAY | DBG_CRIT, "libbdplus not found!\n"); X_FREE(p); return NULL; } _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
