libbluray | branch: master | npzacs <[email protected]> | Wed Apr 25 12:43:32 2012 +0300| [7ef5a2204a83ece4c61cdf0069ed4dac8b5af7af] | committer: npzacs
Added extended AACS error codes > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=7ef5a2204a83ece4c61cdf0069ed4dac8b5af7af --- ChangeLog | 2 ++ configure.ac | 8 ++++---- src/libbluray/bluray.c | 32 +++++++++++++++++++++++++++++++- src/libbluray/bluray.h | 11 +++++++++++ 4 files changed, 48 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 344d68c..8dc8ccf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,5 @@ + - Added extended AACS error codes + 2012-03-19: Version 0.2.2 - Fixed displaying of single-loop animated buttons when not using animations - Added events for pop-up menu availability and IG menu status diff --git a/configure.ac b/configure.ac index af31129..9c15ceb 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ # library version number m4_define([bluray_major], 0) m4_define([bluray_minor], 2) -m4_define([bluray_micro], 2) +m4_define([bluray_micro], 3) m4_define([bluray_version],[bluray_major.bluray_minor.bluray_micro]) # shared library version (.so version) @@ -12,9 +12,9 @@ m4_define([bluray_version],[bluray_major.bluray_minor.bluray_micro]) # # Library file name will be libbluray.so.(current-age).age.revision # -m4_define([lt_current], 2) -m4_define([lt_revision], 0) -m4_define([lt_age], 1) +m4_define([lt_current], 3) +m4_define([lt_revision], 1) +m4_define([lt_age], 0) # initilization AC_INIT([libbluray], bluray_version, [http://www.videolan.org/developers/libbluray.html]) diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 90fedfd..ecaee79 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -701,7 +701,14 @@ static int _libaacs_open(BLURAY *bd, const char *keyfile_path) return 0; } - bd->aacs = bd->libaacs_open(bd->device_path, keyfile_path); + int error_code = 0; + fptr_p_void aacs_open2 = (fptr_p_void)dl_dlsym(bd->h_libaacs, "aacs_open2"); + if (!aacs_open2) { + BD_DEBUG(DBG_BLURAY, "Using old aacs_open(), no verbose error reporting available (%p)\n", bd->aacs); + bd->aacs = bd->libaacs_open(bd->device_path, keyfile_path); + } else { + bd->aacs = aacs_open2(bd->device_path, keyfile_path, &error_code); + } if (bd->aacs) { BD_DEBUG(DBG_BLURAY, "Opened libaacs (%p)\n", bd->aacs); @@ -712,6 +719,29 @@ static int _libaacs_open(BLURAY *bd, const char *keyfile_path) BD_DEBUG(DBG_BLURAY, "aacs_open() failed!\n"); bd->disc_info.aacs_handled = 0; + switch (error_code) { + case 0: /* AACS_SUCCESS */ + break; + case -1: /* AACS_ERROR_CORRUPTED_DISC */ + bd->disc_info.aacs_error_code = BD_AACS_CORRUPTED_DISC; + break; + case -2: /* AACS_ERROR_NO_CONFIG */ + bd->disc_info.aacs_error_code = BD_AACS_NO_CONFIG; + break; + case -3: /* AACS_ERROR_NO_PK */ + bd->disc_info.aacs_error_code = BD_AACS_NO_PK; + break; + case -4: /* AACS_ERROR_NO_CERT */ + bd->disc_info.aacs_error_code = BD_AACS_NO_CERT; + break; + case -5: /* AACS_ERROR_CERT_REVOKED */ + bd->disc_info.aacs_error_code = BD_AACS_CERT_REVOKED; + break; + case -6: /* AACS_ERROR_MMC_OPEN */ + bd->disc_info.aacs_error_code = BD_AACS_MMC_FAILED; + break; + } + _libaacs_unload(bd); return 0; } diff --git a/src/libbluray/bluray.h b/src/libbluray/bluray.h index 88abdc7..067e061 100644 --- a/src/libbluray/bluray.h +++ b/src/libbluray/bluray.h @@ -407,6 +407,14 @@ uint64_t bd_tell_time(BLURAY *bd); * Disc info */ +/* AACS error codes */ +#define BD_AACS_CORRUPTED_DISC -1 +#define BD_AACS_NO_CONFIG -2 +#define BD_AACS_NO_PK -3 +#define BD_AACS_NO_CERT -4 +#define BD_AACS_CERT_REVOKED -5 +#define BD_AACS_MMC_FAILED -6 + typedef struct { uint8_t bluray_detected; @@ -425,6 +433,9 @@ typedef struct { uint8_t libbdplus_detected; uint8_t bdplus_handled; + /* aacs error code */ + int aacs_error_code; + } BLURAY_DISC_INFO; /** _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
