gmerlin
streaminfo.h
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_