[libbluray-devel] nav_set_angle(): Factorized NAV_CLIP filling to _fill_clip()
hpi1
git at videolan.org
Sat May 14 14:12:00 CEST 2011
libbluray | branch: master | hpi1 <hpi1 at anonymous.org> | Tue May 10 14:47:45 2011 +0300| [334065766e375d274b0524f10d9ebc7049918b47] | committer: hpi1
nav_set_angle(): Factorized NAV_CLIP filling to _fill_clip()
> http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=334065766e375d274b0524f10d9ebc7049918b47
---
src/libbluray/bdnav/navigation.c | 60 +++++++++----------------------------
1 files changed, 15 insertions(+), 45 deletions(-)
diff --git a/src/libbluray/bdnav/navigation.c b/src/libbluray/bdnav/navigation.c
index 1f6895a..61fddae 100644
--- a/src/libbluray/bdnav/navigation.c
+++ b/src/libbluray/bdnav/navigation.c
@@ -388,6 +388,7 @@ _extrapolate_title(NAV_TITLE *title)
static void _fill_clip(NAV_TITLE *title,
MPLS_CLIP *mpls_clip,
uint8_t connection_condition, uint32_t in_time, uint32_t out_time,
+ unsigned pi_angle_count,
NAV_CLIP *clip,
unsigned ref, uint32_t *pos, uint32_t *time)
@@ -396,13 +397,20 @@ static void _fill_clip(NAV_TITLE *title,
clip->title = title;
clip->ref = ref;
- clip->angle = 0;
+
+ if (title->angle >= pi_angle_count) {
+ clip->angle = 0;
+ } else {
+ clip->angle = title->angle;
+ }
+
strncpy(clip->name, mpls_clip[clip->angle].clip_id, 5);
strncpy(&clip->name[5], ".m2ts", 6);
clip->clip_id = atoi(mpls_clip[clip->angle].clip_id);
path = str_printf("%s"DIR_SEP"BDMV"DIR_SEP"CLIPINF"DIR_SEP"%s.clpi",
title->root, mpls_clip[clip->angle].clip_id);
+ clpi_free(clip->cl);
clip->cl = clpi_parse(path, 0);
X_FREE(path);
if (clip->cl == NULL) {
@@ -472,7 +480,8 @@ NAV_TITLE* nav_title_open(const char *root, const char *playlist)
clip = &title->clip_list.clip[ii];
- _fill_clip(title, pi->clip, pi->connection_condition, pi->in_time, pi->out_time, clip, ii, &pos, &time);
+ _fill_clip(title, pi->clip, pi->connection_condition, pi->in_time, pi->out_time, pi->angle_count,
+ clip, ii, &pos, &time);
}
// sub paths
@@ -493,7 +502,8 @@ NAV_TITLE* nav_title_open(const char *root, const char *playlist)
MPLS_SUB_PI *pi = &title->pl->sub_path[ss].sub_play_item[ii];
NAV_CLIP *clip = &sub_path->clip_list.clip[ii];
- _fill_clip(title, pi->clip, pi->connection_condition, pi->in_time, pi->out_time, clip, ii, &pos, &time);
+ _fill_clip(title, pi->clip, pi->connection_condition, pi->in_time, pi->out_time, 0,
+ clip, ii, &pos, &time);
}
}
}
@@ -744,7 +754,6 @@ NAV_CLIP* nav_next_clip(NAV_TITLE *title, NAV_CLIP *clip)
NAV_CLIP* nav_set_angle(NAV_TITLE *title, NAV_CLIP *clip, unsigned angle)
{
- char *path;
int ii;
uint32_t pos = 0;
uint32_t time = 0;
@@ -770,48 +779,9 @@ NAV_CLIP* nav_set_angle(NAV_TITLE *title, NAV_CLIP *clip, unsigned angle)
pi = &title->pl->play_item[ii];
clip = &title->clip_list.clip[ii];
- if (title->angle >= pi->angle_count) {
- clip->angle = 0;
- } else {
- clip->angle = title->angle;
- }
-
- clpi_free(clip->cl);
- clip->ref = ii;
- strncpy(clip->name, pi->clip[clip->angle].clip_id, 5);
- strncpy(&clip->name[5], ".m2ts", 6);
- clip->clip_id = atoi(pi->clip[clip->angle].clip_id);
-
- path = str_printf("%s"DIR_SEP"BDMV"DIR_SEP"CLIPINF"DIR_SEP"%s.clpi",
- title->root, pi->clip[clip->angle].clip_id);
- clip->cl = clpi_parse(path, 0);
- X_FREE(path);
- if (clip->cl == NULL) {
- clip->start_pkt = 0;
- clip->end_pkt = 0;
- continue;
- }
- switch (pi->connection_condition) {
- case 5:
- case 6:
- clip->start_pkt = 0;
- clip->connection = CONNECT_SEAMLESS;
- break;
- default:
- clip->start_pkt = clpi_lookup_spn(clip->cl, pi->in_time, 1,
- pi->clip[clip->angle].stc_id);
- clip->connection = CONNECT_NON_SEAMLESS;
- break;
- }
- clip->end_pkt = clpi_lookup_spn(clip->cl, pi->out_time, 0,
- pi->clip[clip->angle].stc_id);
- clip->in_time = pi->in_time;
- clip->out_time = pi->out_time;
- clip->pos = pos;
- pos += clip->end_pkt - clip->start_pkt;
- clip->start_time = time;
- time += clip->out_time - clip->in_time;
+ _fill_clip(title, pi->clip, pi->connection_condition, pi->in_time, pi->out_time, pi->angle_count,
+ clip, ii, &pos, &time);
}
_extrapolate_title(title);
return clip;
More information about the libbluray-devel
mailing list