libbluray | branch: master | anonymous <[email protected]> | Sun Dec 15 10:46:59 2013 +0200| [8bdc92437a919c191e61955acf77f9a5af43be64] | committer: anonymous
Added bdplus content code version information to disc info. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=8bdc92437a919c191e61955acf77f9a5af43be64 --- src/examples/bd_info.c | 11 ++++++++++- src/file/libbdplus.c | 22 ++++++++++++++++++++++ src/file/libbdplus.h | 3 +++ src/libbluray/bluray.c | 2 ++ src/libbluray/bluray.h | 5 +++++ 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/examples/bd_info.c b/src/examples/bd_info.c index 028960a..fbf8f31 100644 --- a/src/examples/bd_info.c +++ b/src/examples/bd_info.c @@ -180,7 +180,16 @@ int main(int argc, char *argv[]) printf("\nBD+ detected : %s\n", _yes_no(info->bdplus_detected)); if (info->bdplus_detected) { printf("libbdplus detected : %s\n", _yes_no(info->libbdplus_detected)); - printf("BD+ handled : %s\n", _yes_no(info->bdplus_handled)); + if (info->libbdplus_detected) { + if (info->bdplus_gen) { + printf("BD+ generation : %d\n", info->bdplus_gen); + } + if (info->bdplus_date) { + printf("BD+ release date : %d-%02d-%02d\n", + info->bdplus_date >> 16, (info->bdplus_date >> 8) & 0xff, info->bdplus_date & 0xff ); + } + printf("BD+ handled : %s\n", _yes_no(info->bdplus_handled)); + } } _print_meta(bd_get_meta(bd)); diff --git a/src/file/libbdplus.c b/src/file/libbdplus.c index 1cc7c69..dab219f 100644 --- a/src/file/libbdplus.c +++ b/src/file/libbdplus.c @@ -174,6 +174,28 @@ int libbdplus_init(BD_BDPLUS *p, const char *device_path, const uint8_t *vid) return 0; } +static uint32_t _bdplus_get(BD_BDPLUS *p, const char *func) +{ + if (p && p->bdplus) { + fptr_int32 fp; + *(void **)(&fp) = dl_dlsym(p->h_libbdplus, func); + if (fp) { + return fp(p->bdplus); + } + } + return 0; +} + +int libbdplus_get_gen(BD_BDPLUS *p) +{ + return _bdplus_get(p, "bdplus_get_code_gen"); +} + +int libbdplus_get_date(BD_BDPLUS *p) +{ + return _bdplus_get(p, "bdplus_get_code_date"); +} + void libbdplus_event(BD_BDPLUS *p, uint32_t event, uint32_t param1, uint32_t param2) { if (p && p->bdplus && p->event) { diff --git a/src/file/libbdplus.h b/src/file/libbdplus.h index ba5c6d8..e8fe8e6 100644 --- a/src/file/libbdplus.h +++ b/src/file/libbdplus.h @@ -32,6 +32,9 @@ BD_PRIVATE BD_BDPLUS *libbdplus_load(void); BD_PRIVATE int libbdplus_init(BD_BDPLUS *p, const char *device_path, const uint8_t *vid); BD_PRIVATE void libbdplus_unload(BD_BDPLUS **p); +BD_PRIVATE int libbdplus_get_gen(BD_BDPLUS *p); +BD_PRIVATE int libbdplus_get_date(BD_BDPLUS *p); + BD_PRIVATE void libbdplus_mmap(BD_BDPLUS *p, uint32_t region_id, void *mem); BD_PRIVATE void libbdplus_psr(BD_BDPLUS *p, void *regs, void *read, void *write); BD_PRIVATE void libbdplus_start(BD_BDPLUS *p); diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index db90a34..b09b7aa 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -885,6 +885,8 @@ static int _libbdplus_init(BLURAY *bd) /* connect registers */ libbdplus_psr(bd->libbdplus, (void*)bd->regs, (void*)bd_psr_read, (void*)bd_psr_write); + bd->disc_info.bdplus_gen = libbdplus_get_gen(bd->libbdplus); + bd->disc_info.bdplus_date = libbdplus_get_date(bd->libbdplus); bd->disc_info.bdplus_handled = 1; return 1; } diff --git a/src/libbluray/bluray.h b/src/libbluray/bluray.h index 90ca186..5b3760a 100644 --- a/src/libbluray/bluray.h +++ b/src/libbluray/bluray.h @@ -500,6 +500,11 @@ typedef struct { uint8_t bdj_supported; /* 1 if BD-J support was compiled in */ uint8_t libjvm_detected; /* 1 if usable Java VM was found */ uint8_t bdj_handled; /* 1 if usable Java VM + libbluray.jar was found */ + + /* BD+ content code generation */ + uint8_t bdplus_gen; + /* BD+ content code relese date */ + uint32_t bdplus_date; /* (year << 16) | (month << 8) | day */ } BLURAY_DISC_INFO; /** _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
