libbluray | branch: master | hpi1 <[email protected]> | Tue May 10 15:21:08 2011 +0300| [80779fae8dbcf38a269e5d86e6acd75617f65ab4] | committer: hpi1
Fixed chapter byte positions in BLURAY_TITLE_INFO. Chapter byte position depends on selected angle. > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=80779fae8dbcf38a269e5d86e6acd75617f65ab4 --- player_wrappers/xine/input_bluray.c | 6 +++--- src/examples/bdsplice.c | 2 +- src/examples/libbluray_test.c | 2 +- src/examples/list_titles.c | 2 +- src/libbluray/bluray.c | 14 ++++++++------ src/libbluray/bluray.h | 6 ++++-- 6 files changed, 18 insertions(+), 14 deletions(-) diff --git a/player_wrappers/xine/input_bluray.c b/player_wrappers/xine/input_bluray.c index 4527f91..9dabf2a 100644 --- a/player_wrappers/xine/input_bluray.c +++ b/player_wrappers/xine/input_bluray.c @@ -231,9 +231,9 @@ static void update_title_info(bluray_input_plugin_t *this, int playlist_id) bd_free_title_info(this->title_info); if (playlist_id < 0) - this->title_info = bd_get_title_info(this->bdh, this->current_title_idx); + this->title_info = bd_get_title_info(this->bdh, this->current_title_idx, 0); else - this->title_info = bd_get_playlist_info(this->bdh, playlist_id); + this->title_info = bd_get_playlist_info(this->bdh, playlist_id, 0); pthread_mutex_unlock(&this->title_info_mutex); @@ -1101,7 +1101,7 @@ static int bluray_plugin_open (input_plugin_t *this_gen) uint64_t duration = 0; int i, playlist = 99999; for (i = 0; i < this->num_title_idx; i++) { - BLURAY_TITLE_INFO *info = bd_get_title_info(this->bdh, i); + BLURAY_TITLE_INFO *info = bd_get_title_info(this->bdh, i, 0); if (info->duration > duration) { title = i; duration = info->duration; diff --git a/src/examples/bdsplice.c b/src/examples/bdsplice.c index d654541..c7b6b9e 100644 --- a/src/examples/bdsplice.c +++ b/src/examples/bdsplice.c @@ -162,7 +162,7 @@ main(int argc, char *argv[]) out = stdout; } - ti = bd_get_title_info(bd, title_no); + ti = bd_get_title_info(bd, title_no, angle); if (angle >= (int)ti->angle_count) { fprintf(stderr, "Invalid angle %d > angle count %d. Using angle 1.\n", diff --git a/src/examples/libbluray_test.c b/src/examples/libbluray_test.c index 646d822..5fc4a6b 100644 --- a/src/examples/libbluray_test.c +++ b/src/examples/libbluray_test.c @@ -45,7 +45,7 @@ int main(int argc, char *argv[]) for (ii = 0; ii < count; ii++) { BLURAY_TITLE_INFO* ti; - ti = bd_get_title_info(bd, ii); + ti = bd_get_title_info(bd, ii, 0); BD_DEBUG(DBG_BLURAY, "index: %d duration: %02"PRIu64":%02"PRIu64":%02"PRIu64" chapters: %d\n", ii, diff --git a/src/examples/list_titles.c b/src/examples/list_titles.c index 3f91f74..d9f3138 100644 --- a/src/examples/list_titles.c +++ b/src/examples/list_titles.c @@ -85,7 +85,7 @@ int main(int argc, char *argv[]) for (ii = 0; ii < count; ii++) { BLURAY_TITLE_INFO* ti; - ti = bd_get_title_info(bd, ii); + ti = bd_get_title_info(bd, ii, 0); if (ti->duration / 90000 < seconds) { continue; diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 3567527..5de1105 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -1541,12 +1541,13 @@ static BLURAY_TITLE_INFO* _fill_title_info(NAV_TITLE* title, uint32_t title_idx, return title_info; } -static BLURAY_TITLE_INFO *_get_title_info(BLURAY *bd, uint32_t title_idx, uint32_t playlist, const char *mpls_name) +static BLURAY_TITLE_INFO *_get_title_info(BLURAY *bd, uint32_t title_idx, uint32_t playlist, const char *mpls_name, + unsigned angle) { NAV_TITLE *title; BLURAY_TITLE_INFO *title_info; - title = nav_title_open(bd->device_path, mpls_name, 0); + title = nav_title_open(bd->device_path, mpls_name, angle); if (title == NULL) { BD_DEBUG(DBG_BLURAY | DBG_CRIT, "Unable to open title %s! (%p)\n", mpls_name, bd); @@ -1559,7 +1560,7 @@ static BLURAY_TITLE_INFO *_get_title_info(BLURAY *bd, uint32_t title_idx, uint32 return title_info; } -BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx) +BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx, unsigned angle) { if (bd->title_list == NULL) { BD_DEBUG(DBG_BLURAY, "Title list not yet read! (%p)\n", bd); @@ -1572,15 +1573,16 @@ BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx) return _get_title_info(bd, title_idx, bd->title_list->title_info[title_idx].mpls_id, - bd->title_list->title_info[title_idx].name); + bd->title_list->title_info[title_idx].name, + angle); } -BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist) +BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist, unsigned angle) { char *f_name = str_printf("%05d.mpls", playlist); BLURAY_TITLE_INFO *title_info; - title_info = _get_title_info(bd, 0, playlist, f_name); + title_info = _get_title_info(bd, 0, playlist, f_name, angle); X_FREE(f_name); diff --git a/src/libbluray/bluray.h b/src/libbluray/bluray.h index 15a6ee6..43b9c43 100644 --- a/src/libbluray/bluray.h +++ b/src/libbluray/bluray.h @@ -184,9 +184,10 @@ uint32_t bd_get_titles(BLURAY *bd, uint8_t flags); * * @param bd BLURAY object * @param title_idx title index number + * @param angle angle number (chapter offsets and clip size depend on selected angle) * @return allocated BLURAY_TITLE_INFO object, NULL on error */ -BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx); +BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx, unsigned angle); /** * @@ -194,9 +195,10 @@ BLURAY_TITLE_INFO* bd_get_title_info(BLURAY *bd, uint32_t title_idx); * * @param bd BLURAY object * @param playlist playlist number + * @param angle angle number (chapter offsets and clip size depend on selected angle) * @return allocated BLURAY_TITLE_INFO object, NULL on error */ -BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist); +BLURAY_TITLE_INFO* bd_get_playlist_info(BLURAY *bd, uint32_t playlist, unsigned angle); /** * _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
