libbluray | branch: master | hpi1 <[email protected]> | Tue Sep 22 11:33:29 2015 +0300| [cbb86e18b4575e06ab1237aa91c413757f8c441f] | committer: hpi1
Add player setting for disabling persistent storage > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=cbb86e18b4575e06ab1237aa91c413757f8c441f --- src/libbluray/bdj/bdj.c | 8 ++++++++ src/libbluray/bdj/bdj.h | 4 ++++ src/libbluray/bdj/java/org/videolan/Libbluray.java | 16 ++++++++++++++++ src/libbluray/bluray.c | 16 ++++++++++++++++ src/libbluray/bluray.h | 4 +++- src/libbluray/player_settings.h | 18 ++++++++++++++++++ 6 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/libbluray/bdj/bdj.c b/src/libbluray/bdj/bdj.c index 9ee1aa8..67d9170 100644 --- a/src/libbluray/bdj/bdj.c +++ b/src/libbluray/bdj/bdj.c @@ -346,6 +346,10 @@ static const char *_bdj_persistent_root(BDJ_STORAGE *storage) const char *root; char *data_home; + if (storage->no_persistent_storage) { + return NULL; + } + if (!storage->persistent_root) { root = getenv("LIBBLURAY_PERSISTENT_ROOT"); @@ -368,6 +372,10 @@ static const char *_bdj_buda_root(BDJ_STORAGE *storage) const char *root; char *cache_home; + if (storage->no_persistent_storage) { + return NULL; + } + if (!storage->cache_root) { root = getenv("LIBBLURAY_CACHE_ROOT"); diff --git a/src/libbluray/bdj/bdj.h b/src/libbluray/bdj/bdj.h index ee6355e..789e7fe 100644 --- a/src/libbluray/bdj/bdj.h +++ b/src/libbluray/bdj/bdj.h @@ -22,6 +22,8 @@ #include "util/attributes.h" +#include <stdint.h> + typedef enum { /* Note: these must be in sync with Libbluray.java ! */ @@ -65,6 +67,8 @@ typedef struct { char *cache_root; /* BD-J binding unit data area */ char *classpath; /* BD-J implementation class path (location of libbluray.jar) */ + + uint8_t no_persistent_storage; /* disable persistent storage (remove files at close) */ } BDJ_STORAGE; typedef struct bdjava_s BDJAVA; diff --git a/src/libbluray/bdj/java/org/videolan/Libbluray.java b/src/libbluray/bdj/java/org/videolan/Libbluray.java index f2d26dd..071c1de 100644 --- a/src/libbluray/bdj/java/org/videolan/Libbluray.java +++ b/src/libbluray/bdj/java/org/videolan/Libbluray.java @@ -110,6 +110,20 @@ public class Libbluray { initOnce(); /* set up directories */ + + try { + if (persistentRoot == null) { + /* no persistent storage */ + persistentRoot = CacheDir.create("dvb.persistent.root").getPath() + File.separator; + } + if (budaRoot == null) { + /* no persistent storage for BUDA */ + budaRoot = CacheDir.create("bluray.bindingunit.root").getPath() + File.separator; + } + } catch (java.io.IOException e) { + System.err.println("Cache creation failed: " + e); + /* not fatal with most discs */ + } persistentRoot = canonicalize(persistentRoot, true); budaRoot = canonicalize(budaRoot, true); @@ -123,6 +137,8 @@ public class Libbluray { System.getProperties().remove("bluray.vfs.root"); } + /* */ + Libbluray.nativePointer = nativePointer; DiscManager.getDiscManager().setCurrentDisc(discID); diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index f14073f..36e9fac 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -1388,6 +1388,8 @@ static void _storage_free(BLURAY *bd) BLURAY *bd_init(void) { + char *env; + BD_DEBUG(DBG_BLURAY, "libbluray version "BLURAY_VERSION_STRING"\n"); BLURAY *bd = calloc(1, sizeof(BLURAY)); @@ -1409,6 +1411,12 @@ BLURAY *bd_init(void) bd_mutex_init(&bd->argb_buffer_mutex); #endif + env = getenv("LIBBLURAY_PERSISTENT_STORAGE"); + if (env) { + int v = (!strcmp(env, "yes")) ? 1 : (!strcmp(env, "no")) ? 0 : atoi(env); + bd->bdjstorage.no_persistent_storage = !v; + } + BD_DEBUG(DBG_BLURAY, "BLURAY initialized!\n"); return bd; @@ -2767,6 +2775,14 @@ int bd_set_player_setting(BLURAY *bd, uint32_t idx, uint32_t value) bd_mutex_unlock(&bd->mutex); return result; } + if (idx == BLURAY_PLAYER_SETTING_PERSISTENT_STORAGE) { + if (bd->title_type != title_undef) { + BD_DEBUG(DBG_BLURAY | DBG_CRIT, "Can't disable persistent storage during playback\n"); + return 0; + } + bd->bdjstorage.no_persistent_storage = !value; + return 1; + } for (i = 0; i < sizeof(map) / sizeof(map[0]); i++) { if (idx == map[i].idx) { diff --git a/src/libbluray/bluray.h b/src/libbluray/bluray.h index 73e142c..997f59d 100644 --- a/src/libbluray/bluray.h +++ b/src/libbluray/bluray.h @@ -665,7 +665,9 @@ typedef enum { BLURAY_PLAYER_SETTING_TEXT_CAP = 30, /* Text Subtitle capability. Bit mask. */ BLURAY_PLAYER_SETTING_PLAYER_PROFILE = 31, /* Player profile and version. */ - BLURAY_PLAYER_SETTING_DECODE_PG = 0x100, /* Enable/disable PG (subtitle) decoder. Integer. */ + BLURAY_PLAYER_SETTING_DECODE_PG = 0x100, /* Enable/disable PG (subtitle) decoder. Integer. Default: disabled. */ + BLURAY_PLAYER_SETTING_PERSISTENT_STORAGE = 0x101, /* Enable/disable BD-J persistent storage. Integer. Default: enabled. */ + BLURAY_PLAYER_PERSISTENT_ROOT = 400, /* Root path to the BD_J persistent storage location. String. */ BLURAY_PLAYER_CACHE_ROOT = 401, /* Root path to the BD_J cache storage location. String. */ } bd_player_setting; diff --git a/src/libbluray/player_settings.h b/src/libbluray/player_settings.h index 6709303..3a5f207 100644 --- a/src/libbluray/player_settings.h +++ b/src/libbluray/player_settings.h @@ -158,4 +158,22 @@ enum { BLURAY_PG_TEXTST_DECODER_ENABLE = 1, /* enable both decoders */ }; + +/* + * BLURAY_PLAYER_SETTING_PERSISTENT_STORAGE + * + * Enable / disable BD-J persistent storage. + * + * If persistent storage is disabled, BD-J Xlets can't access any data + * stored during earlier playback sessions. Persistent data stored during + * current playback session will be removed and can't be accessed later. + * + * This setting can't be changed after bd_play() has been called. + */ + +enum { + BLURAY_PERSISTENT_STORAGE_DISABLE = 0, /* disable persistent storage between playback sessions */ + BLURAY_PERSISTENT_STORAGE_ENABLE = 1, /* enable persistent storage */ +}; + #endif /* BD_PLAYER_SETTINGS_H_ */ _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
