libbluray | branch: master | hpi1 <[email protected]> | Thu Dec 20 11:37:00 2012 +0200| [b7fb8a4eae78104b8fad114bb2c9b29deb919113] | committer: hpi1
Provide VID for BD-J > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=b7fb8a4eae78104b8fad114bb2c9b29deb919113 --- src/Makefile.am | 1 + .../com/aacsla/bluray/online/MediaAttribute.java | 5 ++-- src/libbluray/bdj/java/org/videolan/Libbluray.java | 5 ++++ src/libbluray/bdj/native/org_videolan_Libbluray.c | 24 +++++++++++++++ src/libbluray/bdj/native/org_videolan_Libbluray.h | 9 ++++++ src/libbluray/bluray.c | 6 ++-- src/libbluray/bluray_internal.h | 31 ++++++++++++++++++++ 7 files changed, 76 insertions(+), 5 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 0bb7ee4..9677e4d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -31,6 +31,7 @@ lib_LTLIBRARIES=libbluray.la libbluray_ladir= $(includedir)/libbluray libbluray_la_SOURCES=libbluray/bluray.h \ libbluray/bluray.c \ + libbluray/bluray_internal.h \ libbluray/register.h \ libbluray/register.c \ libbluray/keys.h \ diff --git a/src/libbluray/bdj/java/com/aacsla/bluray/online/MediaAttribute.java b/src/libbluray/bdj/java/com/aacsla/bluray/online/MediaAttribute.java index 7aab022..9b45760 100644 --- a/src/libbluray/bdj/java/com/aacsla/bluray/online/MediaAttribute.java +++ b/src/libbluray/bdj/java/com/aacsla/bluray/online/MediaAttribute.java @@ -19,6 +19,7 @@ package com.aacsla.bluray.online; +import org.videolan.Libbluray; import org.videolan.Logger; public class MediaAttribute { @@ -32,9 +33,7 @@ public class MediaAttribute { } public byte[] getVolumeID() { - // TODO - logger.unimplemented("getVolumeID"); - return null; + return Libbluray.getVolumeID(); } private static final Logger logger = Logger.getLogger(MediaAttribute.class.getName()); diff --git a/src/libbluray/bdj/java/org/videolan/Libbluray.java b/src/libbluray/bdj/java/org/videolan/Libbluray.java index a60ead5..16387a1 100644 --- a/src/libbluray/bdj/java/org/videolan/Libbluray.java +++ b/src/libbluray/bdj/java/org/videolan/Libbluray.java @@ -130,6 +130,10 @@ public class Libbluray { nativePointer = 0; } + public static byte[] getVolumeID() { + return getVolumeIDN(nativePointer); + } + public static int getTitles() { return getTitlesN(nativePointer); } @@ -383,6 +387,7 @@ public class Libbluray { public static final int PSR_BACKUP_PSR11 = 43; public static final int PSR_BACKUP_PSR12 = 44; + private static native byte[] getVolumeIDN(long np); private static native TitleInfo getTitleInfoN(long np, int title); private static native PlaylistInfo getPlaylistInfoN(long np, int playlist); private static native int getTitlesN(long np); diff --git a/src/libbluray/bdj/native/org_videolan_Libbluray.c b/src/libbluray/bdj/native/org_videolan_Libbluray.c index 8cb9b91..4c30478 100644 --- a/src/libbluray/bdj/native/org_videolan_Libbluray.c +++ b/src/libbluray/bdj/native/org_videolan_Libbluray.c @@ -26,12 +26,15 @@ #include "libbluray/bdj/bdjo_parser.h" #include "libbluray/register.h" #include "libbluray/bluray.h" +#include "libbluray/bluray_internal.h" #include "util/strutl.h" #include "util/macro.h" #include "org_videolan_Libbluray.h" +#include <string.h> + /* Disable some warnings */ #if defined __GNUC__ #pragma GCC diagnostic ignored "-Wunused-parameter" @@ -173,6 +176,22 @@ JNIEXPORT jobject JNICALL Java_org_videolan_Libbluray_getPlaylistInfoN } static +JNIEXPORT jbyteArray JNICALL Java_org_videolan_Libbluray_getVolumeIDN + (JNIEnv * env, jclass cls, jlong np) +{ + BDJAVA* bdj = (BDJAVA*)(intptr_t)np; + const uint8_t *vid = bd_get_vid(bdj->bd); + + static const uint8_t empty[16] = {0}; + if (!vid || !memcmp(vid, empty, sizeof(empty))) { + return NULL; + } + jbyteArray array = (*env)->NewByteArray(env, 16); + (*env)->SetByteArrayRegion(env, array, 0, 16, (const jbyte *)vid); + return array; +} + +static JNIEXPORT jint JNICALL Java_org_videolan_Libbluray_getTitlesN(JNIEnv * env, jclass cls, jlong np) { BDJAVA* bdj = (BDJAVA*)(intptr_t)np; @@ -350,6 +369,11 @@ BD_PRIVATE const JNINativeMethod Java_org_videolan_Libbluray_methods[] = { /* AUTOMATICALLY GENERATED */ { + CC("getVolumeIDN"), + CC("(J)[B"), + Java_org_videolan_Libbluray_getVolumeIDN, + }, + { CC("getTitleInfoN"), CC("(JI)Lorg/videolan/TitleInfo;"), Java_org_videolan_Libbluray_getTitleInfoN, diff --git a/src/libbluray/bdj/native/org_videolan_Libbluray.h b/src/libbluray/bdj/native/org_videolan_Libbluray.h index ec6c985..a650c9a 100644 --- a/src/libbluray/bdj/native/org_videolan_Libbluray.h +++ b/src/libbluray/bdj/native/org_videolan_Libbluray.h @@ -89,6 +89,15 @@ extern "C" { #define org_videolan_Libbluray_PSR_BACKUP_PSR12 44L /* * Class: org_videolan_Libbluray + * Method: getVolumeIDN + * Signature: (J)[B + */ +static +JNIEXPORT jbyteArray JNICALL Java_org_videolan_Libbluray_getVolumeIDN + (JNIEnv *, jclass, jlong); + +/* + * Class: org_videolan_Libbluray * Method: getTitleInfoN * Signature: (JI)Lorg/videolan/TitleInfo; */ diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 9d3ddfa..5dca951 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -25,6 +25,7 @@ #include "bluray-version.h" #include "bluray.h" +#include "bluray_internal.h" #include "register.h" #include "util/macro.h" #include "util/logging.h" @@ -790,8 +791,9 @@ static int _libaacs_open(BLURAY *bd, const char *keyfile_path) return 0; } -static const uint8_t *_libaacs_get_vid(BLURAY *bd) +const uint8_t *bd_get_vid(BLURAY *bd) { + /* internal function. Used by BD-J and libbdplus loader. */ if (bd->aacs) { fptr_p_void fptr; *(void **)(&fptr) = dl_dlsym(bd->h_libaacs, "aacs_get_vid"); @@ -904,7 +906,7 @@ static int _libbdplus_open(BLURAY *bd, const char *keyfile_path) return 0; } - const uint8_t *aacs_vid = _libaacs_get_vid(bd); + const uint8_t *aacs_vid = bd_get_vid(bd); bd->bdplus = bd->bdplus_init(bd->device_path, keyfile_path, aacs_vid ? aacs_vid : vid); if (bd->bdplus) { diff --git a/src/libbluray/bluray_internal.h b/src/libbluray/bluray_internal.h new file mode 100644 index 0000000..e300ec4 --- /dev/null +++ b/src/libbluray/bluray_internal.h @@ -0,0 +1,31 @@ +/* + * This file is part of libbluray + * Copyright (C) 2012 libbluray + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +#if !defined(_BLURAY_INTERNAL_H_) +#define _BLURAY_INTERNAL_H_ + +#include <util/attributes.h> + +#include "bluray.h" + +#include <stdint.h> + +BD_PRIVATE const uint8_t *bd_get_vid(BLURAY *bd); + +#endif /* _BLURAY_INTERNAL_H_ */ _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
