00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #if !defined(_NAVIGATION_H_)
00021 #define _NAVIGATION_H_
00022
00023 #include <util/attributes.h>
00024
00025 #include "mpls_parse.h"
00026 #include "clpi_parse.h"
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00032 #define CONNECT_NON_SEAMLESS 0
00033 #define CONNECT_SEAMLESS 1
00034
00035 #define TITLES_ALL 0
00036 #define TITLES_FILTER_DUP_TITLE 0x01
00037 #define TITLES_FILTER_DUP_CLIP 0x02
00038 #define TITLES_RELEVANT (TITLES_FILTER_DUP_TITLE | TITLES_FILTER_DUP_CLIP)
00039
00040 typedef struct nav_title_s NAV_TITLE;
00041
00042 typedef struct nav_mark_s NAV_MARK;
00043 struct nav_mark_s
00044 {
00045 int number;
00046 int mark_type;
00047 unsigned clip_ref;
00048 uint32_t clip_pkt;
00049 uint32_t clip_time;
00050
00051
00052 uint32_t title_pkt;
00053 uint32_t title_time;
00054 uint32_t duration;
00055
00056 MPLS_PLM *plm;
00057 };
00058
00059
00060 typedef struct nav_mark_list_s NAV_MARK_LIST;
00061 struct nav_mark_list_s
00062 {
00063 unsigned count;
00064 NAV_MARK *mark;
00065 };
00066
00067 typedef struct nav_clip_s NAV_CLIP;
00068 struct nav_clip_s
00069 {
00070 char name[11];
00071 uint32_t clip_id;
00072 unsigned ref;
00073 uint32_t pos;
00074 uint32_t start_pkt;
00075 uint32_t end_pkt;
00076 uint8_t connection;
00077 uint8_t angle;
00078
00079 uint32_t start_time;
00080 uint32_t duration;
00081
00082 uint32_t in_time;
00083 uint32_t out_time;
00084
00085
00086 uint32_t title_pkt;
00087 uint32_t title_time;
00088
00089 NAV_TITLE *title;
00090
00091 CLPI_CL *cl;
00092 };
00093
00094 typedef struct nav_clip_list_s NAV_CLIP_LIST;
00095 struct nav_clip_list_s
00096 {
00097 unsigned count;
00098 NAV_CLIP *clip;
00099 };
00100
00101 typedef struct nav_sub_path_s NAV_SUB_PATH;
00102 struct nav_sub_path_s
00103 {
00104 uint8_t type;
00105 NAV_CLIP_LIST clip_list;
00106 };
00107
00108 struct nav_title_s {
00109 char *root;
00110 char name[11];
00111 uint8_t angle_count;
00112 uint8_t angle;
00113 NAV_CLIP_LIST clip_list;
00114 NAV_MARK_LIST chap_list;
00115 NAV_MARK_LIST mark_list;
00116
00117 unsigned sub_path_count;
00118 NAV_SUB_PATH *sub_path;
00119
00120 uint32_t packets;
00121 uint32_t duration;
00122
00123 MPLS_PL *pl;
00124 };
00125
00126 typedef struct nav_title_info_s NAV_TITLE_INFO;
00127 struct nav_title_info_s
00128 {
00129 char name[11];
00130 uint32_t mpls_id;
00131 uint32_t duration;
00132 unsigned ref;
00133 };
00134
00135 typedef struct nav_title_list_s NAV_TITLE_LIST;
00136 struct nav_title_list_s
00137 {
00138 unsigned int count;
00139 NAV_TITLE_INFO *title_info;
00140 };
00141
00142 BD_PRIVATE uint8_t nav_lookup_aspect(NAV_CLIP *clip, int pid);
00143 BD_PRIVATE char* nav_find_main_title(const char *root);
00144 BD_PRIVATE NAV_TITLE* nav_title_open(const char *root, const char *playlist, unsigned angle);
00145 BD_PRIVATE void nav_title_close(NAV_TITLE *title);
00146 BD_PRIVATE NAV_CLIP* nav_next_clip(NAV_TITLE *title, NAV_CLIP *clip);
00147 BD_PRIVATE NAV_CLIP* nav_packet_search(NAV_TITLE *title, uint32_t pkt, uint32_t *clip_pkt,
00148 uint32_t *out_pkt, uint32_t *out_time);
00149 BD_PRIVATE NAV_CLIP* nav_time_search(NAV_TITLE *title, uint32_t tick, uint32_t *clip_pkt, uint32_t *out_pkt);
00150 BD_PRIVATE void nav_clip_time_search(NAV_CLIP *clip, uint32_t tick, uint32_t *clip_pkt, uint32_t *out_pkt);
00151 BD_PRIVATE NAV_CLIP* nav_chapter_search(NAV_TITLE *title, unsigned chapter, uint32_t *clip_pkt, uint32_t *out_pkt);
00152 BD_PRIVATE uint32_t nav_chapter_get_current(NAV_CLIP *clip, uint32_t pkt);
00153 BD_PRIVATE NAV_CLIP* nav_mark_search(NAV_TITLE *title, unsigned mark, uint32_t *clip_pkt, uint32_t *out_pkt);
00154 BD_PRIVATE uint32_t nav_angle_change_search(NAV_CLIP *clip, uint32_t pkt, uint32_t *time);
00155 BD_PRIVATE NAV_CLIP* nav_set_angle(NAV_TITLE *title, NAV_CLIP *clip, unsigned angle);
00156
00157 BD_PRIVATE NAV_TITLE_LIST* nav_get_title_list(const char *root, uint32_t flags, uint32_t min_title_length);
00158 BD_PRIVATE void nav_free_title_list(NAV_TITLE_LIST *title_list);
00159
00160 #ifdef __cplusplus
00161 };
00162 #endif
00163
00164 #endif // _NAVIGATION_H_