diff --git a/packages/multimedia/libbluray/package.mk b/packages/multimedia/libbluray/package.mk index a89f924c05..6e21244479 100644 --- a/packages/multimedia/libbluray/package.mk +++ b/packages/multimedia/libbluray/package.mk @@ -17,8 +17,8 @@ ################################################################################ PKG_NAME="libbluray" -PKG_VERSION="0.9.3" -PKG_SHA256="a6366614ec45484b51fe94fcd1975b3b8716f90f038a33b24d59978de3863ce0" +PKG_VERSION="1.0.1" +PKG_SHA256="0f9f9a1db2f48cafc70ed2596ff3594b597e2027408f5f2be6191c245d67853a" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://www.videolan.org/developers/libbluray.html" @@ -43,8 +43,7 @@ PKG_CONFIGURE_OPTS_TARGET="--disable-werror \ --disable-extra-warnings \ --disable-optimizations \ --disable-examples \ - --disable-bdjava \ - --enable-udf \ + --disable-bdjava-jar \ --disable-doxygen-doc \ --disable-doxygen-dot \ --disable-doxygen-man \ diff --git a/packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairie_v0.9.2.patch b/packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairie_v1.0.1.patch similarity index 92% rename from packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairie_v0.9.2.patch rename to packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairie_v1.0.1.patch index fbe18b05c9..3c2eeb8a08 100644 --- a/packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairie_v0.9.2.patch +++ b/packages/multimedia/libbluray/patches/libbluray-01-bump_to_Nevcairie_v1.0.1.patch @@ -1,8 +1,8 @@ diff --git a/Makefile.am b/Makefile.am -index 3a54bfc..035553b 100644 +index 33813b07..d7b909c4 100644 --- a/Makefile.am +++ b/Makefile.am -@@ -161,6 +161,15 @@ noinst_HEADERS = \ +@@ -210,6 +210,15 @@ noinst_HEADERS = \ jni/win32/jni_md.h \ jni/darwin/jni_md.h @@ -18,19 +18,20 @@ index 3a54bfc..035553b 100644 pkginclude_HEADERS = \ src/file/filesystem.h \ src/libbluray/bluray.h \ -@@ -168,6 +177,9 @@ pkginclude_HEADERS = \ +@@ -217,6 +226,10 @@ pkginclude_HEADERS = \ src/libbluray/keys.h \ src/libbluray/player_settings.h \ src/libbluray/bdnav/clpi_data.h \ + src/libbluray/bdnav/clpi_parse.h \ + src/libbluray/bdnav/mpls_parse.h \ ++ src/libbluray/bdnav/mpls_data.h \ + src/libbluray/bdnav/uo_mask_table.h \ src/libbluray/bdnav/meta_data.h \ src/libbluray/decoders/overlay.h \ src/util/log_control.h diff --git a/config.h b/config.h new file mode 100644 -index 0000000..6764704 +index 00000000..bd39268a --- /dev/null +++ b/config.h @@ -0,0 +1,157 @@ @@ -152,7 +153,7 @@ index 0000000..6764704 +#define PACKAGE_NAME "libbluray" + +/* Define to the full name and version of this package. */ -+#define PACKAGE_STRING "libbluray 0.9.2" ++#define PACKAGE_STRING "libbluray 1.0.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "libbluray" @@ -161,7 +162,7 @@ index 0000000..6764704 +#define PACKAGE_URL "" + +/* Define to the version of this package. */ -+#define PACKAGE_VERSION "0.9.2" ++#define PACKAGE_VERSION "1.0.0" + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE void @@ -173,7 +174,7 @@ index 0000000..6764704 +/* #undef USING_BDJAVA */ + +/* Version number of package */ -+#define VERSION "0.9.2" ++#define VERSION "1.0.0" + +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE @@ -193,7 +194,7 @@ index 0000000..6764704 +#define _WIN32_WINNT 0x0502 diff --git a/includes/inttypes.h b/includes/inttypes.h new file mode 100644 -index 0000000..ead903f +index 00000000..ead903f7 --- /dev/null +++ b/includes/inttypes.h @@ -0,0 +1,305 @@ @@ -504,7 +505,7 @@ index 0000000..ead903f +#endif // _MSC_INTTYPES_H_ ] diff --git a/libbluray.def b/libbluray.def new file mode 100644 -index 0000000..d4c93cb +index 00000000..d4c93cb9 --- /dev/null +++ b/libbluray.def @@ -0,0 +1,63 @@ @@ -573,10 +574,10 @@ index 0000000..d4c93cb + bd_get_debug_mask diff --git a/libbluray.vcxproj b/libbluray.vcxproj new file mode 100644 -index 0000000..c778955 +index 00000000..393cd1a0 --- /dev/null +++ b/libbluray.vcxproj -@@ -0,0 +1,231 @@ +@@ -0,0 +1,236 @@ + + + @@ -653,6 +654,7 @@ index 0000000..c778955 + + + ++ + + + @@ -698,6 +700,7 @@ index 0000000..c778955 + + + ++ + + + @@ -722,6 +725,9 @@ index 0000000..c778955 + + v140_xp + ++ ++ v141_xp ++ + + DynamicLibrary + true @@ -811,10 +817,10 @@ index 0000000..c778955 \ No newline at end of file diff --git a/libbluray.vcxproj.filters b/libbluray.vcxproj.filters new file mode 100644 -index 0000000..57ff16c +index 00000000..4352ef05 --- /dev/null +++ b/libbluray.vcxproj.filters -@@ -0,0 +1,353 @@ +@@ -0,0 +1,359 @@ + + + @@ -1036,6 +1042,9 @@ index 0000000..57ff16c + + Header Files\file + ++ ++ Header Files\util ++ + + + @@ -1161,6 +1170,9 @@ index 0000000..57ff16c + + Source Files\file + ++ ++ Source Files\util ++ + + + @@ -1170,22 +1182,29 @@ index 0000000..57ff16c + \ No newline at end of file diff --git a/src/file/dir_win32.c b/src/file/dir_win32.c -index 2690658..f42114d 100644 +index 5cbc3c86..40308966 100644 --- a/src/file/dir_win32.c +++ b/src/file/dir_win32.c -@@ -86,8 +86,8 @@ static BD_DIR_H *_dir_open_win32(const char* dirname) - - dir->internal = priv; - +@@ -76,7 +76,7 @@ static dir_data_t *_open_impl(const char *dirname) + { + dir_data_t *priv; + char *filespec; - wchar_t wfilespec[MAX_PATH]; -- if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filespec, -1, wfilespec, MAX_PATH)) -+ wchar_t wfilespec[4096 + 1] = {0}; -+ if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filespec, -1, wfilespec, 4096)) - priv->handle = _wfindfirst(wfilespec, &priv->info); - else - priv->handle = -1; ++ wchar_t wfilespec[4096 + 1]; + int result; + + filespec = str_printf("%s" DIR_SEP "*", dirname); +@@ -84,7 +84,7 @@ static dir_data_t *_open_impl(const char *dirname) + return NULL; + } + +- result = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filespec, -1, wfilespec, MAX_PATH); ++ result = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filespec, -1, wfilespec, 4096); + X_FREE(filespec); + if (!result) { + return NULL; diff --git a/src/file/dirs_win32.c b/src/file/dirs_win32.c -index e165fea..3d07251 100644 +index e165feac..3d07251a 100644 --- a/src/file/dirs_win32.c +++ b/src/file/dirs_win32.c @@ -36,7 +36,7 @@ @@ -1216,7 +1235,7 @@ index e165fea..3d07251 100644 if (!dir) { // first call diff --git a/src/file/dl_win32.c b/src/file/dl_win32.c -index e4492e1..7f6ae73 100644 +index 6155ad6a..3a09fa1c 100644 --- a/src/file/dl_win32.c +++ b/src/file/dl_win32.c @@ -57,7 +57,7 @@ void *dl_dlopen(const char *path, const char *version) @@ -1227,8 +1246,19 @@ index e4492e1..7f6ae73 100644 + wchar_t wname[MAX_PATH+1] = {0}; char *name; void *result; + int iresult; +@@ -81,8 +81,8 @@ void *dl_dlopen(const char *path, const char *version) + if (GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), + "SetDefaultDllDirectories") != NULL) + #endif +- flags = LOAD_LIBRARY_SEARCH_APPLICATION_DIR | +- LOAD_LIBRARY_SEARCH_SYSTEM32; ++ flags = 0xA00; /*LOAD_LIBRARY_SEARCH_APPLICATION_DIR | ++ LOAD_LIBRARY_SEARCH_SYSTEM32;*/ -@@ -109,7 +109,7 @@ const char *dl_get_path(void) + result = LoadLibraryExW(wname, NULL, flags); + +@@ -125,7 +125,7 @@ const char *dl_get_path(void) if (!initialized) { initialized = 1; @@ -1238,7 +1268,7 @@ index e4492e1..7f6ae73 100644 wchar_t wpath[MAX_PATH]; diff --git a/src/file/file_win32.c b/src/file/file_win32.c -index d9845fb..b4fb7ad 100644 +index 11aaf820..f5518636 100644 --- a/src/file/file_win32.c +++ b/src/file/file_win32.c @@ -107,9 +107,9 @@ static BD_FILE_H *_file_open(const char* filename, const char *mode) @@ -1264,7 +1294,7 @@ index d9845fb..b4fb7ad 100644 if (!file) { BD_DEBUG(DBG_FILE | DBG_CRIT, "Error opening file %s (out of memory)\n", filename); diff --git a/src/libbluray/bdnav/clpi_parse.c b/src/libbluray/bdnav/clpi_parse.c -index 394347e..39bbcef 100644 +index 839e10c3..5fa490dc 100644 --- a/src/libbluray/bdnav/clpi_parse.c +++ b/src/libbluray/bdnav/clpi_parse.c @@ -39,6 +39,7 @@ @@ -1275,7 +1305,7 @@ index 394347e..39bbcef 100644 static void _human_readable_sig(char *sig, uint32_t s1, uint32_t s2) -@@ -129,7 +130,8 @@ _parse_header(BITSTREAM *bits, CLPI_CL *cl) +@@ -134,7 +135,8 @@ _parse_header(BITSTREAM *bits, CLPI_CL *cl) cl->type_indicator2 = bs_read(bits, 32); if (cl->type_indicator != CLPI_SIG1 || (cl->type_indicator2 != CLPI_SIG2A && @@ -1285,11 +1315,50 @@ index 394347e..39bbcef 100644 char sig[9]; char expect[9]; +diff --git a/src/libbluray/bdnav/index_parse.c b/src/libbluray/bdnav/index_parse.c +index 6a0f5a01..56b3d949 100644 +--- a/src/libbluray/bdnav/index_parse.c ++++ b/src/libbluray/bdnav/index_parse.c +@@ -104,12 +104,11 @@ static int _parse_index(BITSTREAM *bs, INDX_ROOT *index) + + index->num_titles = bs_read(bs, 16); + if (!index->num_titles) { +- BD_DEBUG(DBG_CRIT, "empty index\n"); +- return 0; ++ BD_DEBUG(DBG_NAV, "empty index\n"); + } + + index->titles = calloc(index->num_titles, sizeof(INDX_TITLE)); +- if (!index->titles) { ++ if (index->num_titles && !index->titles) { + BD_DEBUG(DBG_CRIT, "out of memory\n"); + return 0; + } +diff --git a/src/libbluray/bdnav/mpls_data.h b/src/libbluray/bdnav/mpls_data.h +index f148d513..b6a8cdd0 100644 +--- a/src/libbluray/bdnav/mpls_data.h ++++ b/src/libbluray/bdnav/mpls_data.h +@@ -47,6 +47,7 @@ typedef struct + uint8_t sv_num_pip_pg_ref; + uint8_t *sv_secondary_audio_ref; + uint8_t *sv_pip_pg_ref; ++ uint8_t ss_offset_sequence_id; + } MPLS_STREAM; + + typedef struct +@@ -107,6 +108,7 @@ typedef struct + uint8_t random_access_flag; + uint8_t audio_mix_flag; + uint8_t lossless_bypass_flag; ++ uint8_t mvc_base_view_r_flag; + } MPLS_AI; + + typedef struct diff --git a/src/libbluray/bdnav/mpls_parse.c b/src/libbluray/bdnav/mpls_parse.c -index e196118..87b240a 100644 +index 82b61854..92ea99a7 100644 --- a/src/libbluray/bdnav/mpls_parse.c +++ b/src/libbluray/bdnav/mpls_parse.c -@@ -39,6 +39,7 @@ +@@ -40,6 +40,7 @@ #define MPLS_SIG1 ('M' << 24 | 'P' << 16 | 'L' << 8 | 'S') #define MPLS_SIG2A ('0' << 24 | '2' << 16 | '0' << 8 | '0') #define MPLS_SIG2B ('0' << 24 | '1' << 16 | '0' << 8 | '0') @@ -1297,18 +1366,19 @@ index e196118..87b240a 100644 static void _human_readable_sig(char *sig, uint32_t s1, uint32_t s2) -@@ -137,8 +138,9 @@ _parse_appinfo(BITSTREAM *bits, MPLS_AI *ai) +@@ -92,9 +93,10 @@ _parse_appinfo(BITSTREAM *bits, MPLS_AI *ai) ai->random_access_flag = bs_read(bits, 1); ai->audio_mix_flag = bs_read(bits, 1); ai->lossless_bypass_flag = bs_read(bits, 1); + ai->mvc_base_view_r_flag = bs_read(bits, 1); + #if 0 // Reserved - bs_skip(bits, 13); + bs_skip(bits, 12); bs_seek_byte(bits, pos + len); + #endif return 1; - } -@@ -155,7 +157,8 @@ _parse_header(BITSTREAM *bits, MPLS_PL *pl) +@@ -112,7 +114,8 @@ _parse_header(BITSTREAM *bits, MPLS_PL *pl) pl->type_indicator2 = bs_read(bits, 32); if (pl->type_indicator != MPLS_SIG1 || (pl->type_indicator2 != MPLS_SIG2A && @@ -1318,15 +1388,15 @@ index e196118..87b240a 100644 char sig[9]; char expect[9]; -@@ -259,6 +262,7 @@ _parse_stream(BITSTREAM *bits, MPLS_STREAM *s) +@@ -218,6 +221,7 @@ _parse_stream(BITSTREAM *bits, MPLS_STREAM *s) break; }; s->lang[3] = '\0'; + s->ss_offset_sequence_id = 0xFF; - bs_seek_byte(bits, pos + len); - return 1; -@@ -882,6 +886,99 @@ _parse_subpath_extension(BITSTREAM *bits, MPLS_PL *pl) + if (bs_seek_byte(bits, pos + len) < 0) { + return 0; +@@ -911,6 +915,99 @@ _parse_subpath_extension(BITSTREAM *bits, MPLS_PL *pl) } static int @@ -1426,7 +1496,7 @@ index e196118..87b240a 100644 _parse_mpls_extension(BITSTREAM *bits, int id1, int id2, void *handle) { MPLS_PL *pl = (MPLS_PL*)handle; -@@ -895,7 +992,7 @@ _parse_mpls_extension(BITSTREAM *bits, int id1, int id2, void *handle) +@@ -924,7 +1021,7 @@ _parse_mpls_extension(BITSTREAM *bits, int id1, int id2, void *handle) if (id1 == 2) { if (id2 == 1) { @@ -1435,31 +1505,11 @@ index e196118..87b240a 100644 } if (id2 == 2) { // SubPath entries extension -diff --git a/src/libbluray/bdnav/mpls_parse.h b/src/libbluray/bdnav/mpls_parse.h -index 94bfa67..c1b2c31 100644 ---- a/src/libbluray/bdnav/mpls_parse.h -+++ b/src/libbluray/bdnav/mpls_parse.h -@@ -49,6 +49,7 @@ typedef struct - uint8_t sv_num_pip_pg_ref; - uint8_t *sv_secondary_audio_ref; - uint8_t *sv_pip_pg_ref; -+ uint8_t ss_offset_sequence_id; - } MPLS_STREAM; - - typedef struct -@@ -109,6 +110,7 @@ typedef struct - uint8_t random_access_flag; - uint8_t audio_mix_flag; - uint8_t lossless_bypass_flag; -+ uint8_t mvc_base_view_r_flag; - } MPLS_AI; - - typedef struct diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c -index 0e60b68..f633d7a 100644 +index ce4854d8..94565278 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c -@@ -1626,6 +1626,25 @@ int64_t bd_seek_time(BLURAY *bd, uint64_t tick) +@@ -1651,6 +1651,25 @@ int64_t bd_seek_time(BLURAY *bd, uint64_t tick) return bd->s_pos; } @@ -1485,26 +1535,26 @@ index 0e60b68..f633d7a 100644 uint64_t bd_tell_time(BLURAY *bd) { uint32_t clip_pkt = 0, out_pkt = 0, out_time = 0; -@@ -2602,6 +2621,7 @@ static BLURAY_TITLE_INFO* _fill_title_info(NAV_TITLE* title, uint32_t title_idx, - BLURAY_CLIP_INFO *ci = &title_info->clips[ii]; - NAV_CLIP *nc = &title->clip_list.clip[ii]; +@@ -2648,6 +2667,7 @@ static BLURAY_TITLE_INFO* _fill_title_info(NAV_TITLE* title, uint32_t title_idx, + NAV_CLIP *nc = &title->clip_list.clip[ii]; -+ ci->idx = nc->clip_id; - ci->pkt_count = nc->end_pkt - nc->start_pkt; - ci->start_time = (uint64_t)nc->title_time * 2; - ci->in_time = (uint64_t)pi->in_time * 2; -@@ -2628,6 +2648,8 @@ static BLURAY_TITLE_INFO* _fill_title_info(NAV_TITLE* title, uint32_t title_idx, - _copy_streams(nc, ci->sec_audio_streams, pi->stn.secondary_audio, ci->sec_audio_stream_count); + memcpy(ci->clip_id, pi->clip->clip_id, sizeof(ci->clip_id)); ++ ci->idx = nc->clip_id; + ci->pkt_count = nc->end_pkt - nc->start_pkt; + ci->start_time = (uint64_t)nc->title_time * 2; + ci->in_time = (uint64_t)pi->in_time * 2; +@@ -2672,6 +2692,8 @@ static BLURAY_TITLE_INFO* _fill_title_info(NAV_TITLE* title, uint32_t title_idx, + } } + title_info->mvc_base_view_r_flag = title->pl->app_info.mvc_base_view_r_flag; + return title_info; - } -@@ -3746,3 +3768,28 @@ void bd_free_bdjo(struct bdjo_data *obj) - (void)obj; - #endif + error: +@@ -3825,3 +3847,28 @@ void bd_free_bdjo(struct bdjo_data *obj) + { + bdjo_free(&obj); } + +int bd_get_clip_infos(BLURAY *bd, unsigned clip, uint64_t *clip_start_time, uint64_t *stream_start_time, uint64_t *pos, uint64_t *duration) @@ -1532,7 +1582,7 @@ index 0e60b68..f633d7a 100644 + return NULL; +} diff --git a/src/libbluray/bluray.h b/src/libbluray/bluray.h -index cbf16fc..97dc1a3 100644 +index b7b52e55..744a6926 100644 --- a/src/libbluray/bluray.h +++ b/src/libbluray/bluray.h @@ -32,6 +32,7 @@ extern "C" { @@ -1543,7 +1593,7 @@ index cbf16fc..97dc1a3 100644 #define TITLES_ALL 0 /**< all titles. */ #define TITLES_FILTER_DUP_TITLE 0x01 /**< remove duplicate titles. */ -@@ -225,6 +226,7 @@ typedef struct bd_stream_info { +@@ -222,6 +223,7 @@ typedef struct bd_stream_info { } BLURAY_STREAM_INFO; typedef struct bd_clip { @@ -1551,16 +1601,16 @@ index cbf16fc..97dc1a3 100644 uint32_t pkt_count; uint8_t still_mode; uint16_t still_time; /* seconds */ -@@ -275,6 +277,8 @@ typedef struct bd_title_info { - - uint32_t mark_count; +@@ -272,6 +274,8 @@ typedef struct bd_title_info { + BLURAY_CLIP_INFO *clips; + BLURAY_TITLE_CHAPTER *chapters; BLURAY_TITLE_MARK *marks; + + uint8_t mvc_base_view_r_flag; } BLURAY_TITLE_INFO; /* -@@ -483,6 +487,16 @@ uint32_t bd_get_current_title(BLURAY *bd); +@@ -480,6 +484,16 @@ uint32_t bd_get_current_title(BLURAY *bd); /** * @@ -1577,7 +1627,7 @@ index cbf16fc..97dc1a3 100644 * Read from currently selected title file, decrypt if possible * * @param bd BLURAY object -@@ -1007,7 +1021,6 @@ int bd_mouse_select(BLURAY *bd, int64_t pts, uint16_t x, uint16_t y); +@@ -1033,7 +1047,6 @@ int bd_mouse_select(BLURAY *bd, int64_t pts, uint16_t x, uint16_t y); /* access to internal information */ @@ -1585,7 +1635,7 @@ index cbf16fc..97dc1a3 100644 /** * * Get copy of clip information for requested playitem. -@@ -1060,6 +1073,28 @@ void bd_stop_bdj(BLURAY *bd); // shutdown BD-J and clean up resources +@@ -1086,6 +1099,28 @@ 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); @@ -1615,10 +1665,10 @@ index cbf16fc..97dc1a3 100644 #ifdef __cplusplus } diff --git a/src/libbluray/disc/disc.c b/src/libbluray/disc/disc.c -index defa084..375e6c3 100644 +index be6a279d..8ed14e64 100644 --- a/src/libbluray/disc/disc.c +++ b/src/libbluray/disc/disc.c -@@ -69,7 +69,7 @@ static BD_FILE_H *_bdrom_open_path(void *p, const char *rel_path) +@@ -75,7 +75,7 @@ static BD_FILE_H *_bdrom_open_path(void *p, const char *rel_path) return NULL; } @@ -1627,4 +1677,3 @@ index defa084..375e6c3 100644 X_FREE(abs_path); return fp; -