When UDF is disabled, this change causes the build to fail. -- Sean McG.
Original Message From: hpi1 Sent: Sunday, February 21, 2016 11:56 To: [email protected] Reply To: Development around libbluray Subject: [libbluray-devel] disc: simplify passing file system access functions libbluray | branch: master | hpi1 <[email protected]> | Sun Jan 31 16:50:09 2016 +0200| [0db59294fed0e47b54ece79e6e3534dba578bf15] | committer: hpi1 disc: simplify passing file system access functions > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=0db59294fed0e47b54ece79e6e3534dba578bf15 --- src/libbluray/bluray.c | 10 +++++----- src/libbluray/disc/disc.c | 12 ++++++++---- src/libbluray/disc/disc.h | 15 +++++++++++++-- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index aad7a85..f030f53 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -1423,8 +1423,7 @@ BLURAY *bd_init(void) static int _bd_open(BLURAY *bd, const char *device_path, const char *keyfile_path, - void *read_blocks_handle, - int (*read_blocks)(void *handle, void *buf, int lba, int num_blocks)) + fs_access *p_fs) { BD_ENC_INFO enc_info; @@ -1436,7 +1435,7 @@ static int _bd_open(BLURAY *bd, return 0; } - bd->disc = disc_open(device_path, read_blocks_handle, read_blocks, + bd->disc = disc_open(device_path, p_fs, &enc_info, keyfile_path, (void*)bd->regs, (void*)bd_psr_read, (void*)bd_psr_write); @@ -1456,7 +1455,7 @@ int bd_open_disc(BLURAY *bd, const char *device_path, const char *keyfile_path) return 0; } - return _bd_open(bd, device_path, keyfile_path, NULL, NULL); + return _bd_open(bd, device_path, keyfile_path, NULL); } int bd_open_stream(BLURAY *bd, @@ -1467,7 +1466,8 @@ int bd_open_stream(BLURAY *bd, return 0; } - return _bd_open(bd, NULL, NULL, read_blocks_handle, read_blocks); + fs_access fs = { read_blocks_handle, read_blocks, NULL, NULL }; + return _bd_open(bd, NULL, NULL, &fs); } BLURAY *bd_open(const char *device_path, const char *keyfile_path) diff --git a/src/libbluray/disc/disc.c b/src/libbluray/disc/disc.c index 0880fa9..82283f7 100644 --- a/src/libbluray/disc/disc.c +++ b/src/libbluray/disc/disc.c @@ -249,8 +249,7 @@ static void _set_paths(BD_DISC *p, const char *device_path) } BD_DISC *disc_open(const char *device_path, - void *read_blocks_handle, - int (*read_blocks)(void *handle, void *buf, int lba, int num_blocks), + fs_access *p_fs, struct bd_enc_info *enc_info, const char *keyfile_path, void *regs, void *psr_read, void *psr_write) @@ -258,13 +257,19 @@ BD_DISC *disc_open(const char *device_path, BD_DISC *p = _disc_init(); if (p) { + if (p_fs && p_fs->open_dir) { + p->fs_handle = p_fs->fs_handle; + p->pf_file_open_bdrom = p_fs->open_file; + p->pf_dir_open_bdrom = p_fs->open_dir; + } + _set_paths(p, device_path); #ifdef ENABLE_UDF /* check if disc root directory can be opened. If not, treat it as device/image file. */ BD_DIR_H *dp_img = device_path ? dir_open(device_path) : NULL; if (!dp_img) { - void *udf = udf_image_open(device_path, read_blocks_handle, read_blocks); + void *udf = udf_image_open(device_path, p_fs ? p_fs->fs_handle : NULL, p_fs ? p_fs->read_blocks : NULL); if (!udf) { BD_DEBUG(DBG_FILE | DBG_CRIT, "failed opening UDF image %s\n", device_path); } else { @@ -283,7 +288,6 @@ BD_DISC *disc_open(const char *device_path, BD_DEBUG(DBG_FILE, "%s does not seem to be image file or device node\n", device_path); } #else - (void)read_blocks_handle; (void)read_blocks; #endif diff --git a/src/libbluray/disc/disc.h b/src/libbluray/disc/disc.h index 8bbde7b..13f91d1 100644 --- a/src/libbluray/disc/disc.h +++ b/src/libbluray/disc/disc.h @@ -29,6 +29,18 @@ struct bd_file_s; struct bd_dir_s; struct bd_enc_info; +/* application provided file system access (optional) */ +typedef struct fs_access { + void *fs_handle; + + /* method 1: block (device) access */ + int (*read_blocks)(void *fs_handle, void *buf, int lba, int num_blocks); + + /* method 2: file access */ + struct bd_dir_s *(*open_dir) (void *fs_handle, const char *rel_path); + struct bd_file_s *(*open_file)(void *fs_handle, const char *rel_path); +} fs_access; + /* * BluRay Virtual File System * @@ -38,8 +50,7 @@ struct bd_enc_info; typedef struct bd_disc BD_DISC; BD_PRIVATE BD_DISC *disc_open(const char *device_path, - void *read_blocks_handle, - int (*read_blocks)(void *handle, void *buf, int lba, int num_blocks), + fs_access *p_fs, struct bd_enc_info *enc_info, const char *keyfile_path, void *regs, void *psr_read, void *psr_write); _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
