gmerlin
|
00001 /***************************************************************** 00002 * gmerlin - a general purpose multimedia framework and applications 00003 * 00004 * Copyright (c) 2001 - 2012 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 #include <gavl/chapterlist.h> 00028 00029 #include <libxml/tree.h> 00030 #include <libxml/parser.h> 00031 00041 /************************************************ 00042 * Types for describing media streams 00043 ************************************************/ 00044 00045 /* Languages are ISO 639-2 (3 character code) */ 00046 00053 typedef struct 00054 { 00055 gavl_audio_format_t format; 00056 00057 gavl_metadata_t m; 00058 00059 int64_t duration; 00060 int64_t pts_offset; 00061 } bg_audio_info_t; 00062 00068 typedef struct 00069 { 00070 gavl_video_format_t format; 00071 gavl_metadata_t m; 00072 00073 int64_t duration; 00074 int64_t pts_offset; 00075 } bg_video_info_t; 00076 00082 typedef struct 00083 { 00084 gavl_metadata_t m; 00085 int timescale; 00086 int64_t duration; 00087 } bg_text_info_t; 00088 00094 typedef struct 00095 { 00096 gavl_metadata_t m; 00097 gavl_video_format_t format; 00098 int64_t duration; 00099 } bg_overlay_info_t; 00100 00122 char * bg_create_track_name(const gavl_metadata_t * m, const char * format); 00123 00130 char * bg_metadata_to_string(const gavl_metadata_t * m, int use_tabs); 00131 00140 int bg_metadata_get_year(const gavl_metadata_t * m); 00141 00142 00143 /* XML Interface */ 00144 00153 void bg_xml_2_metadata(xmlDocPtr xml_doc, xmlNodePtr xml_metadata, 00154 gavl_metadata_t * ret); 00155 00163 void bg_metadata_2_xml(xmlNodePtr xml_metadata, 00164 gavl_metadata_t * ret); 00165 00178 bg_parameter_info_t * bg_metadata_get_parameters(gavl_metadata_t * m); 00179 00194 bg_parameter_info_t * bg_metadata_get_parameters_common(gavl_metadata_t * m); 00195 00196 00203 void bg_metadata_set_parameter(void * data, const char * name, 00204 const bg_parameter_value_t * v); 00205 00213 void bg_chapter_list_set_default_names(gavl_chapter_list_t * list); 00214 00222 void bg_chapter_list_2_xml(gavl_chapter_list_t * list, xmlNodePtr xml_list); 00223 00232 gavl_chapter_list_t * 00233 bg_xml_2_chapter_list(xmlDocPtr xml_doc, xmlNodePtr xml_list); 00234 00240 void bg_chapter_list_save(gavl_chapter_list_t * list, const char * filename); 00241 00247 gavl_chapter_list_t * bg_chapter_list_load(const char * filename); 00248 00249 #define BG_TRACK_SEEKABLE (1<<0) //!< Track is seekable 00250 #define BG_TRACK_PAUSABLE (1<<1) //!< Track is pausable 00251 00255 typedef struct 00256 { 00257 int flags; 00258 00259 int num_audio_streams; 00260 int num_video_streams; 00261 int num_text_streams; 00262 int num_overlay_streams; 00263 00264 bg_audio_info_t * audio_streams; 00265 bg_video_info_t * video_streams; 00266 bg_text_info_t * text_streams; 00267 bg_overlay_info_t * overlay_streams; 00268 00269 gavl_metadata_t metadata; 00270 00271 // char * url; //!< URL (denotes a redirector) 00272 00273 gavl_chapter_list_t * chapter_list; 00274 00275 } bg_track_info_t; 00276 00286 void bg_track_info_free(bg_track_info_t * info); 00287 00298 void bg_set_track_name_default(bg_track_info_t * info, 00299 const char * location); 00300 00311 char * bg_get_track_name_default(const char * location, int track, int num_tracks); 00312 00318 gavl_time_t bg_track_info_get_duration(const bg_track_info_t * info); 00319 00325 #endif // /__BG_STREAMINFO_H_