gmerlin

streaminfo.h

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_