libbluray | branch: master | hpi1 <[email protected]> | Mon Jun 13 20:36:16 2011 +0300| [17896a40e6ddbe12473db77549ff0207ef748a64] | committer: hpi1
Added min_title_length parameter to bd_get_titles() > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=17896a40e6ddbe12473db77549ff0207ef748a64 --- player_wrappers/xine/input_bluray.c | 2 +- src/examples/bdsplice.c | 2 +- src/examples/libbluray_test.c | 2 +- src/examples/list_titles.c | 6 +----- src/libbluray/bdnav/navigation.c | 7 ++++++- src/libbluray/bdnav/navigation.h | 2 +- src/libbluray/bluray.c | 4 ++-- src/libbluray/bluray.h | 3 ++- 8 files changed, 15 insertions(+), 13 deletions(-) diff --git a/player_wrappers/xine/input_bluray.c b/player_wrappers/xine/input_bluray.c index 9dabf2a..5e0078d 100644 --- a/player_wrappers/xine/input_bluray.c +++ b/player_wrappers/xine/input_bluray.c @@ -1088,7 +1088,7 @@ static int bluray_plugin_open (input_plugin_t *this_gen) /* load title list */ - this->num_title_idx = bd_get_titles(this->bdh, TITLES_RELEVANT); + this->num_title_idx = bd_get_titles(this->bdh, TITLES_RELEVANT, 180); LOGMSG("%d titles\n", this->num_title_idx); if (this->num_title_idx < 1) diff --git a/src/examples/bdsplice.c b/src/examples/bdsplice.c index c7b6b9e..4d61b06 100644 --- a/src/examples/bdsplice.c +++ b/src/examples/bdsplice.c @@ -141,7 +141,7 @@ main(int argc, char *argv[]) return 1; } - title_count = bd_get_titles(bd, TITLES_RELEVANT); + title_count = bd_get_titles(bd, TITLES_RELEVANT, 0); if (title_count <= 0) { fprintf(stderr, "No titles found: %s\n", bdpath); return 1; diff --git a/src/examples/libbluray_test.c b/src/examples/libbluray_test.c index 5fc4a6b..47e3014 100644 --- a/src/examples/libbluray_test.c +++ b/src/examples/libbluray_test.c @@ -41,7 +41,7 @@ int main(int argc, char *argv[]) BD_DEBUG(DBG_BLURAY,"\nListing titles:\n"); - count = bd_get_titles(bd, TITLES_RELEVANT); + count = bd_get_titles(bd, TITLES_RELEVANT, 0); for (ii = 0; ii < count; ii++) { BLURAY_TITLE_INFO* ti; diff --git a/src/examples/list_titles.c b/src/examples/list_titles.c index d9f3138..a987951 100644 --- a/src/examples/list_titles.c +++ b/src/examples/list_titles.c @@ -81,15 +81,11 @@ int main(int argc, char *argv[]) } bd = bd_open(bd_dir, NULL); - count = bd_get_titles(bd, TITLES_RELEVANT); + count = bd_get_titles(bd, TITLES_RELEVANT, seconds); for (ii = 0; ii < count; ii++) { BLURAY_TITLE_INFO* ti; ti = bd_get_title_info(bd, ii, 0); - if (ti->duration / 90000 < seconds) - { - continue; - } printf( "index: %d duration: %02"PRIu64":%02"PRIu64":%02"PRIu64" chapters: %d angles: %u clips %u\n", ii + 1, diff --git a/src/libbluray/bdnav/navigation.c b/src/libbluray/bdnav/navigation.c index 7c27a1f..bce26a7 100644 --- a/src/libbluray/bdnav/navigation.c +++ b/src/libbluray/bdnav/navigation.c @@ -111,7 +111,7 @@ _pl_duration(MPLS_PL *pl) return duration; } -NAV_TITLE_LIST* nav_get_title_list(const char *root, uint32_t flags) +NAV_TITLE_LIST* nav_get_title_list(const char *root, uint32_t flags, uint32_t min_title_length) { BD_DIR_H *dir; BD_DIRENT ent; @@ -171,6 +171,11 @@ NAV_TITLE_LIST* nav_get_title_list(const char *root, uint32_t flags) mpls_free(pl); continue; } + if (min_title_length > 0 && + _pl_duration(pl) < min_title_length*45000) { + mpls_free(pl); + continue; + } if (ii >= title_info_alloc) { NAV_TITLE_INFO *tmp = NULL; title_info_alloc += 100; diff --git a/src/libbluray/bdnav/navigation.h b/src/libbluray/bdnav/navigation.h index fa2abf9..497e903 100644 --- a/src/libbluray/bdnav/navigation.h +++ b/src/libbluray/bdnav/navigation.h @@ -150,7 +150,7 @@ BD_PRIVATE NAV_CLIP* nav_mark_search(NAV_TITLE *title, unsigned mark, uint32_t * BD_PRIVATE uint32_t nav_angle_change_search(NAV_CLIP *clip, uint32_t pkt, uint32_t *time); BD_PRIVATE NAV_CLIP* nav_set_angle(NAV_TITLE *title, NAV_CLIP *clip, unsigned angle); -BD_PRIVATE NAV_TITLE_LIST* nav_get_title_list(const char *root, uint32_t flags); +BD_PRIVATE NAV_TITLE_LIST* nav_get_title_list(const char *root, uint32_t flags, uint32_t min_title_length); BD_PRIVATE void nav_free_title_list(NAV_TITLE_LIST *title_list); #endif // _NAVIGATION_H_ diff --git a/src/libbluray/bluray.c b/src/libbluray/bluray.c index 5de1105..e6984ba 100644 --- a/src/libbluray/bluray.c +++ b/src/libbluray/bluray.c @@ -1455,7 +1455,7 @@ void bd_seamless_angle_change(BLURAY *bd, unsigned angle) * title lists */ -uint32_t bd_get_titles(BLURAY *bd, uint8_t flags) +uint32_t bd_get_titles(BLURAY *bd, uint8_t flags, uint32_t min_title_length) { if (!bd) { BD_DEBUG(DBG_BLURAY | DBG_CRIT, "bd_get_titles(NULL) failed (%p)\n", bd); @@ -1465,7 +1465,7 @@ uint32_t bd_get_titles(BLURAY *bd, uint8_t flags) if (bd->title_list != NULL) { nav_free_title_list(bd->title_list); } - bd->title_list = nav_get_title_list(bd->device_path, flags); + bd->title_list = nav_get_title_list(bd->device_path, flags, min_title_length); if (!bd->title_list) { BD_DEBUG(DBG_BLURAY | DBG_CRIT, "nav_get_title_list(%s) failed (%p)\n", bd->device_path, bd); diff --git a/src/libbluray/bluray.h b/src/libbluray/bluray.h index 43b9c43..c0566d9 100644 --- a/src/libbluray/bluray.h +++ b/src/libbluray/bluray.h @@ -174,9 +174,10 @@ typedef struct bd_title_info { * * @param bd BLURAY object * @param flags title flags + * @param min_title_length filter out titles shorter than min_title_length seconds * @return number of titles found */ -uint32_t bd_get_titles(BLURAY *bd, uint8_t flags); +uint32_t bd_get_titles(BLURAY *bd, uint8_t flags, uint32_t min_title_length); /** * _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
