1 /* 2 ogmmerge -- utility for splicing together ogg bitstreams 3 from component media subtypes 4 5 ogmmerge.h 6 general class and type definitions 7 8 Written by Moritz Bunkus <moritz@bunkus.org> 9 Based on Xiph.org's 'oggmerge' found in their CVS repository 10 See http://www.xiph.org 11 12 Distributed under the GPL 13 see the file COPYING for details 14 or visit http://www.gnu.org/copyleft/gpl.html 15 */ 16 17 #ifndef __ogmmerge_H__ 18 #define __ogmmerge_H__ 19 20 #include <stdio.h> 21 22 #include <ogg/ogg.h> 23 #include <vorbis/codec.h> 24 25 #include "common.h" 26 #include "ogmstreams.h" 27 28 #define DISPLAYPRIORITY_HIGH 10 29 #define DISPLAYPRIORITY_MEDIUM 5 30 #define DISPLAYPRIORITY_LOW 1 31 32 typedef struct { 33 int displacement; 34 double linear; 35 } audio_sync_t; 36 37 typedef struct { 38 double start; 39 double end; 40 } range_t; 41 42 typedef double stamp_t; 43 #define MAX_TIMESTAMP ((double)3.40282347e+38F) 44 45 typedef struct { 46 ogg_page *og; 47 stamp_t timestamp; 48 int header_page; 49 int index_serial; 50 } ogmmerge_page_t; 51 52 typedef class generic_reader_c { 53 protected: 54 vorbis_comment *chapter_info; 55 public: 56 generic_reader_c(); 57 virtual ~generic_reader_c(); 58 virtual int read() = 0; 59 virtual int serial_in_use(int serial) = 0; 60 virtual ogmmerge_page_t *get_page() = 0; 61 virtual ogmmerge_page_t *get_header_page(int header_type = 62 PACKET_TYPE_HEADER) = 0; 63 virtual void reset() = 0; 64 virtual int display_priority() = 0; 65 virtual void display_progress() = 0; 66 virtual void set_chapter_info(vorbis_comment *info); 67 } generic_reader_c; 68 69 typedef class generic_packetizer_c { 70 protected: 71 int serialno; 72 vorbis_comment *comments; 73 public: 74 generic_packetizer_c(); 75 virtual ~generic_packetizer_c() {}; 76 virtual int page_available() = 0; 77 virtual ogmmerge_page_t *get_page() = 0; 78 virtual ogmmerge_page_t *get_header_page(int header_type = 79 PACKET_TYPE_HEADER) = 0; 80 virtual stamp_t make_timestamp(ogg_int64_t granulepos) = 0; 81 virtual int serial_in_use(int serial); 82 virtual int flush_pages(int header_page = 0) = 0; 83 virtual int queue_pages(int header_page = 0) = 0; 84 virtual stamp_t get_smallest_timestamp() = 0; 85 virtual void produce_eos_packet() = 0; 86 virtual void produce_header_packets() = 0; 87 virtual void reset() = 0; 88 virtual void set_comments(vorbis_comment *ncomments); 89 } generic_packetizer_c; 90 91 class error_c { 92 private: 93 char *error; 94 public: error_c(char * nerror)95 error_c(char *nerror) { error = nerror; }; get_error()96 char *get_error() { return error; }; 97 }; 98 99 #ifndef OGMSPLIT 100 extern int force_flushing; 101 extern int omit_empty_packets; 102 extern int old_headers; 103 extern float video_fps; // needed for MicroDVD fps-to-time conversion 104 int create_unique_serial(); 105 extern void add_index(int serial); 106 #endif 107 108 int chapter_information_probe(FILE *file, off_t size); 109 vorbis_comment *chapter_information_read(char *name); 110 vorbis_comment *chapter_information_adjust(vorbis_comment *vc, double start, 111 double end); 112 113 #endif /* __ogmmerge_H__ */ 114