Hello,

We can add this to API if it would be useful. Maybe it would be more
generic if it would return ex. bit mask of available features (BD-J,
JVM, JAR, UDF, metadata, ...). Would there be any real use for the
other flags ?

Do you need to know BD-J status before opening the disc ? vlc/xine do
similar check between bd_open() and bd_play() , and pop up a message or
play the disc without menus if BD-J or some other required feature is
missing.

We could also make existing API to work without opening the disc. This
information is in BLURAY_DISC_INFO. Something like:
    BLURAY *bd = bd_init();
    const BLURAY_DISC_INFO *info = bd_get_disc_info(bd);
    if (!info->bdj_handled) {
        ...
    }
Currently these fields are not initialized if bd_open*() was not
called, but that's easy to fix.


Before adding new API for this I'd like to discuss about simplifying
the build configuration. I think we could unconditionally build BD-J
and UDF support into the library. That does not add any new
dependencies, and code size increase is not that big. Any opinions ?

su, 2017-04-09 kello 13:13 +0200, Andreas Zelend kirjoitti:
> From: ace20022 <[email protected]>
> 
> ---
>  src/libbluray/bdj/bdj.c | 14 ++++++++++++++
>  src/libbluray/bdj/bdj.h |  1 +
>  src/libbluray/bluray.c  | 10 ++++++++++
>  src/libbluray/bluray.h  | 13 +++++++++++++
>  4 files changed, 38 insertions(+)
> 
> diff --git a/src/libbluray/bdj/bdj.c b/src/libbluray/bdj/bdj.c
> index eeb3040f..8c6708f0 100644
> --- a/src/libbluray/bdj/bdj.c
> +++ b/src/libbluray/bdj/bdj.c
> @@ -631,6 +631,20 @@ static int _bdj_init(JNIEnv *env, struct bluray
> *bd, const char *disc_root, cons
>      return 1;
>  }
>  
> +int bdj_functional()
> +{
> +  BDJ_STORAGE* bds = calloc(1, sizeof(BDJ_STORAGE));
> +  if (!bds) {
> +    BD_DEBUG(DBG_CRIT, "out of memory\n");
> +    return 0;
> +  }
> +
> +  int ret = bdj_jvm_available(bds);
> +  X_FREE(bds);
> +
> +  return ret;
> +}
> +
>  int bdj_jvm_available(BDJ_STORAGE *storage)
>  {
>      const char *java_home;
> diff --git a/src/libbluray/bdj/bdj.h b/src/libbluray/bdj/bdj.h
> index 789e7fee..748c9917 100644
> --- a/src/libbluray/bdj/bdj.h
> +++ b/src/libbluray/bdj/bdj.h
> @@ -81,5 +81,6 @@ BD_PRIVATE void bdj_close(BDJAVA *bdjava);
>  BD_PRIVATE int  bdj_process_event(BDJAVA *bdjava, unsigned ev,
> unsigned param);
>  
>  BD_PRIVATE int  bdj_jvm_available(BDJ_STORAGE *storage); /* 0: no.
> 1: only jvm. 2: jvm + libbluray.jar. */
> +BD_PRIVATE int  bdj_functional(); /* wrapper for bdj_jvm_available
> without a specific disc*/
>  
>  #endif
> diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c
> index 4eddac0f..9dd2577c 100644
> --- a/src/libbluray/bluray.c
> +++ b/src/libbluray/bluray.c
> @@ -3862,3 +3862,13 @@ void bd_free_bdjo(struct bdjo_data *obj)
>      (void)obj;
>  #endif
>  }
> +
> +int bd_bdj_functional()
> +{
> +#ifdef USING_BDJAVA
> +  return bdj_functional();
> +#else
> +  return -1;
> +#endif
> +
> +}
> diff --git a/src/libbluray/bluray.h b/src/libbluray/bluray.h
> index e53a9779..53ea1abe 100644
> --- a/src/libbluray/bluray.h
> +++ b/src/libbluray/bluray.h
> @@ -1086,6 +1086,19 @@ void bd_stop_bdj(BLURAY *bd); // shutdown BD-J 
> and clean up resources
>   */
>  int bd_read_file(BLURAY *, const char *path, void **data, int64_t
> *size);
>  
> +/**
> +*
> +*  Check if BD-J is functional
> +*
> +*  Checks whether BD-J support was compiled in and if so
> +*  whether jvm and/or libbluray.jar is usable or not.
> +*
> +* @return -1 if BD-J support was not compiled in,
> +*         0: JVM library could not be loaded
> +*         1: only the JVM library could be loaded
> +*         2: the JVM library and the libbluray.jar could be loaded
> +*/
> +int bd_bdj_functional();
>  
>  #ifdef __cplusplus
>  }
_______________________________________________
libbluray-devel mailing list
[email protected]
https://mailman.videolan.org/listinfo/libbluray-devel

Reply via email to