gmerlin
streaminfo.h
1 /*****************************************************************
2  * gmerlin - a general purpose multimedia framework and applications
3  *
4  * Copyright (c) 2001 - 2012 Members of the Gmerlin project
5  * gmerlin-general@lists.sourceforge.net
6  * http://gmerlin.sourceforge.net
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program. If not, see <http://www.gnu.org/licenses/>.
20  * *****************************************************************/
21 
22 #ifndef __BG_STREAMINFO_H_
23 #define __BG_STREAMINFO_H_
24 
25 #include <gavl/gavl.h>
26 #include <gavl/metadata.h>
27 #include <gavl/chapterlist.h>
28 
29 #include <libxml/tree.h>
30 #include <libxml/parser.h>
31 
41 /************************************************
42  * Types for describing media streams
43  ************************************************/
44 
45 /* Languages are ISO 639-2 (3 character code) */
46 
53 typedef struct
54  {
56 
57  gavl_metadata_t m;
58 
59  int64_t duration;
60  int64_t pts_offset;
62 
68 typedef struct
69  {
71  gavl_metadata_t m;
72 
73  int64_t duration;
74  int64_t pts_offset;
76 
82 typedef struct
83  {
84  gavl_metadata_t m;
85  int timescale;
86  int64_t duration;
88 
94 typedef struct
95  {
96  gavl_metadata_t m;
98  int64_t duration;
100 
122 char * bg_create_track_name(const gavl_metadata_t * m, const char * format);
123 
130 char * bg_metadata_to_string(const gavl_metadata_t * m, int use_tabs);
131 
140 int bg_metadata_get_year(const gavl_metadata_t * m);
141 
142 
143 /* XML Interface */
144 
153 void bg_xml_2_metadata(xmlDocPtr xml_doc, xmlNodePtr xml_metadata,
154  gavl_metadata_t * ret);
155 
163 void bg_metadata_2_xml(xmlNodePtr xml_metadata,
164  gavl_metadata_t * ret);
165 
178 bg_parameter_info_t * bg_metadata_get_parameters(gavl_metadata_t * m);
179 
195 
196 
203 void bg_metadata_set_parameter(void * data, const char * name,
204  const bg_parameter_value_t * v);
205 
213 void bg_chapter_list_set_default_names(gavl_chapter_list_t * list);
214 
222 void bg_chapter_list_2_xml(gavl_chapter_list_t * list, xmlNodePtr xml_list);
223 
232 gavl_chapter_list_t *
233 bg_xml_2_chapter_list(xmlDocPtr xml_doc, xmlNodePtr xml_list);
234 
240 void bg_chapter_list_save(gavl_chapter_list_t * list, const char * filename);
241 
247 gavl_chapter_list_t * bg_chapter_list_load(const char * filename);
248 
249 #define BG_TRACK_SEEKABLE (1<<0)
250 #define BG_TRACK_PAUSABLE (1<<1)
251 
252 
255 typedef struct
256  {
257  int flags;
258 
263 
268 
269  gavl_metadata_t metadata;
270 
271  // char * url; //!< URL (denotes a redirector)
272 
273  gavl_chapter_list_t * chapter_list;
274 
275  } bg_track_info_t;
276 
287 
299  const char * location);
300 
311 char * bg_get_track_name_default(const char * location, int track, int num_tracks);
312 
319 
325 #endif // /__BG_STREAMINFO_H_