gmerlin
|
00001 /***************************************************************** 00002 * gmerlin - a general purpose multimedia framework and applications 00003 * 00004 * Copyright (c) 2001 - 2011 Members of the Gmerlin project 00005 * gmerlin-general@lists.sourceforge.net 00006 * http://gmerlin.sourceforge.net 00007 * 00008 * This program is free software: you can redistribute it and/or modify 00009 * it under the terms of the GNU General Public License as published by 00010 * the Free Software Foundation, either version 2 of the License, or 00011 * (at your option) any later version. 00012 * 00013 * This program is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 * GNU General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU General Public License 00019 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00020 * *****************************************************************/ 00021 00022 #ifndef __BG_STREAMINFO_H_ 00023 #define __BG_STREAMINFO_H_ 00024 00025 #include <gavl/gavl.h> 00026 #include <gavl/metadata.h> 00027 00028 #include <libxml/tree.h> 00029 #include <libxml/parser.h> 00030 00040 /************************************************ 00041 * Types for describing media streams 00042 ************************************************/ 00043 00044 /* Languages are ISO 639-2 (3 character code) */ 00045 00052 typedef struct 00053 { 00054 gavl_audio_format_t format; 00055 00056 gavl_metadata_t m; 00057 00058 int64_t duration; 00059 int64_t pts_offset; 00060 } bg_audio_info_t; 00061 00067 typedef struct 00068 { 00069 gavl_video_format_t format; 00070 gavl_metadata_t m; 00071 00072 int64_t duration; 00073 int64_t pts_offset; 00074 } bg_video_info_t; 00075 00081 typedef struct 00082 { 00083 gavl_metadata_t m; 00084 int is_text; 00085 gavl_video_format_t format; 00086 int64_t duration; 00087 } bg_subtitle_info_t; 00088 00110 char * bg_create_track_name(const gavl_metadata_t * m, const char * format); 00111 00118 char * bg_metadata_to_string(const gavl_metadata_t * m, int use_tabs); 00119 00128 int bg_metadata_get_year(const gavl_metadata_t * m); 00129 00130 00131 /* XML Interface */ 00132 00141 void bg_xml_2_metadata(xmlDocPtr xml_doc, xmlNodePtr xml_metadata, 00142 gavl_metadata_t * ret); 00143 00151 void bg_metadata_2_xml(xmlNodePtr xml_metadata, 00152 gavl_metadata_t * ret); 00153 00166 bg_parameter_info_t * bg_metadata_get_parameters(gavl_metadata_t * m); 00167 00182 bg_parameter_info_t * bg_metadata_get_parameters_common(gavl_metadata_t * m); 00183 00184 00191 void bg_metadata_set_parameter(void * data, const char * name, 00192 const bg_parameter_value_t * v); 00193 00200 //int bg_metadata_equal(const bg_metadata_t * m1, 00201 // const bg_metadata_t * m2); 00202 00203 00211 typedef struct 00212 { 00213 int num_chapters; 00214 int timescale; 00215 struct 00216 { 00217 int64_t time; 00218 char * name; 00219 } * chapters; 00220 } bg_chapter_list_t; 00221 00227 bg_chapter_list_t * bg_chapter_list_create(int num_chapters); 00228 00233 bg_chapter_list_t * bg_chapter_list_copy(const bg_chapter_list_t * list); 00234 00235 00240 void bg_chapter_list_destroy(bg_chapter_list_t * list); 00248 void bg_chapter_list_insert(bg_chapter_list_t * list, int index, 00249 int64_t time, const char * name); 00250 00256 void bg_chapter_list_delete(bg_chapter_list_t * list, int index); 00257 00265 void bg_chapter_list_set_default_names(bg_chapter_list_t * list); 00266 00276 int bg_chapter_list_get_current(bg_chapter_list_t * list, 00277 gavl_time_t time); 00278 00289 int bg_chapter_list_changed(bg_chapter_list_t * list, 00290 gavl_time_t time, int * current_chapter); 00291 00292 00300 void bg_chapter_list_2_xml(bg_chapter_list_t * list, xmlNodePtr xml_list); 00301 00310 bg_chapter_list_t * 00311 bg_xml_2_chapter_list(xmlDocPtr xml_doc, xmlNodePtr xml_list); 00312 00318 void bg_chapter_list_save(bg_chapter_list_t * list, const char * filename); 00319 00325 bg_chapter_list_t * bg_chapter_list_load(const char * filename); 00326 00327 #define BG_TRACK_SEEKABLE (1<<0) //!< Track is seekable 00328 #define BG_TRACK_PAUSABLE (1<<1) //!< Track is pausable 00329 00333 typedef struct 00334 { 00335 int flags; 00336 char * name; 00337 int64_t duration; 00338 00339 int num_audio_streams; 00340 int num_video_streams; 00341 int num_subtitle_streams; 00342 00343 bg_audio_info_t * audio_streams; 00344 bg_video_info_t * video_streams; 00345 bg_subtitle_info_t * subtitle_streams; 00346 00347 gavl_metadata_t metadata; 00348 00349 /* The following are only meaningful for redirectors */ 00350 00351 char * url; 00352 00353 bg_chapter_list_t * chapter_list; 00354 00355 } bg_track_info_t; 00356 00366 void bg_track_info_free(bg_track_info_t * info); 00367 00378 void bg_set_track_name_default(bg_track_info_t * info, 00379 const char * location); 00380 00391 char * bg_get_track_name_default(const char * location, int track, int num_tracks); 00392 00398 #endif // /__BG_STREAMINFO_H_