00001 /* format.h rh */ 00002 00003 #ifndef FORMAT_H 00004 #define FORMAT_H 00005 00006 #ifdef __GNUC__ 00007 #define MYTH_PACKED __attribute__((packed)) 00008 #else 00009 #define MYTH_PACKED 00010 #endif 00011 00012 typedef struct rtfileheader 00013 { 00014 char finfo[12]; // "NuppelVideo" + \0 00015 char version[5]; // "0.05" + \0 00016 int width; 00017 int height; 00018 int desiredwidth; // 0 .. as it is 00019 int desiredheight; // 0 .. as it is 00020 char pimode; // P .. progressive 00021 // I .. interlaced (2 half pics) [NI] 00022 double aspect; // physical aspect ratio 00023 double fps; 00024 int videoblocks; // count of video-blocks -1 .. unknown 0 .. no video 00025 int audioblocks; // count of audio-blocks -1 .. unknown 0 .. no audio 00026 int textsblocks; // count of text-blocks -1 .. unknown 0 .. no text 00027 int keyframedist; 00028 } rtfileheader; 00029 00030 typedef struct rtframeheader 00031 { 00032 char frametype; // A .. Audio, V .. Video, S .. Sync, T .. Text 00033 // R .. Seekpoint: String RTjjjjjjjj (use full packet) 00034 // D .. Addition Data for Compressors 00035 // ct: R .. RTjpeg Tables, F .. FFMpeg extradata 00036 // X .. eXtended data, Q .. SeekTable 00037 // K .. KFA table 00038 00039 char comptype; // V: 0 .. raw YUV420 00040 // 1 .. RTJpeg 00041 // 2 .. RTJpeg with lzo afterwards 00042 // 3 .. raw YUV420 with lzo afterwards 00043 // 4 .. avcodec (fourcc in the extendeddata) 00044 // N .. black frame 00045 // L .. simply copy last frame (if lost frames) 00046 // A: 0 .. Uncompressed (44100/sec 16bit 2ch) 00047 // 1 .. lzo compression [NI] 00048 // 2 .. layer2 (packet) [NI] 00049 // 3 .. layer3 (packet) 00050 // F .. flac (lossless) [NI] 00051 // S .. shorten (lossless) [NI] 00052 // A .. AC3 (packet) 00053 // N .. null frame loudless 00054 // L .. simply copy last frame (may sound bad) NI 00055 // S: B .. Audio and Video sync point [NI] 00056 // A .. Audio Sync Information 00057 // timecode == effective dsp-frequency*100 00058 // when reaching this audio sync point 00059 // because many cheap soundcards are unexact 00060 // and have a range from 44000 to 44250 00061 // instead of the expected exact 44100 S./sec 00062 // V .. Next Video Sync 00063 // timecode == next video framenumber 00064 // S .. Audio,Video,Text Correlation [NI] 00065 // M .. New Header - format changed (only aspect now) 00066 // T: C .. Closed Caption (US) 00067 // T .. Teletext Subtitles (Europe) 00068 char keyframe; // 0 .. keyframe 00069 // 1 .. nr of frame in gop => no keyframe 00070 00071 char filters; // Every bit stands for one type of filter 00072 // 1 .. Gauss 5 Pixel (8*m+2*l+2*r+2*a+2*b)/16 [NYI] 00073 // 2 .. Gauss 5 Pixel (8*m+1*l+1*r+1*a+1*b)/12 [NYI] 00074 // 4 .. Cartoon Filter [NI] 00075 // 8 .. Reserverd Filter [NI] 00076 // 16 .. Reserverd Filter [NI] 00077 // 32 .. Reserverd Filter [NI] 00078 // 64 .. Reserverd Filter [NI] 00079 // 128 .. Reserverd Filter [NI] 00080 00081 int timecode; // Timecodeinformation sec*1000 + msecs 00082 00083 int packetlength; // V,A,T: length of following data in stream 00084 // S: length of packet correl. information [NI] 00085 // R: do not use here! (fixed 'RTjjjjjjjjjjjjjj') 00086 } MYTH_PACKED rtframeheader; 00087 00088 // The fourcc's here are for the most part taken from libavcodec. 00089 // As to their correctness, I have no idea. The audio ones are surely wrong, 00090 // but I suppose it doesn't really matter as long as I'm consistant. 00091 00092 typedef struct extendeddata 00093 { 00094 int version; // yes, this is repeated from the file header 00095 int video_fourcc; // video encoding method used 00096 int audio_fourcc; // audio encoding method used 00097 // generic data 00098 int audio_sample_rate; 00099 int audio_bits_per_sample; 00100 int audio_channels; 00101 // codec specific 00102 // mp3lame 00103 int audio_compression_ratio; 00104 int audio_quality; 00105 // rtjpeg 00106 int rtjpeg_quality; 00107 int rtjpeg_luma_filter; 00108 int rtjpeg_chroma_filter; 00109 // libavcodec 00110 int lavc_bitrate; 00111 int lavc_qmin; 00112 int lavc_qmax; 00113 int lavc_maxqdiff; 00114 // seek table offset 00115 long long seektable_offset; 00116 // key frame adjust offset 00117 long long keyframeadjust_offset; 00118 // unused for later -- total size of 128 integers. 00119 // new fields must be added at the end, above this comment. 00120 int expansion[109]; 00121 } MYTH_PACKED extendeddata; 00122 00123 typedef struct seektable_entry 00124 { 00125 long long file_offset; 00126 int keyframe_number; 00127 } MYTH_PACKED seektable_entry; 00128 00129 typedef struct kfatable_entry 00130 { 00131 int adjust; 00132 int keyframe_number; 00133 } MYTH_PACKED kfatable_entry; 00134 00135 #define FRAMEHEADERSIZE sizeof(rtframeheader) 00136 #define FILEHEADERSIZE sizeof(rtfileheader) 00137 #define EXTENDEDSIZE sizeof(extendeddata) 00138 00139 typedef struct vidbuffertype 00140 { 00141 int sample; 00142 int timecode; 00143 int freeToEncode; 00144 int freeToBuffer; 00145 unsigned char *buffer; 00146 int bufferlen; 00147 int forcekey; 00148 } vidbuffertyp; 00149 00150 typedef struct audbuffertype 00151 { 00152 int sample; 00153 int timecode; 00154 int freeToEncode; 00155 int freeToBuffer; 00156 unsigned char *buffer; 00157 } audbuffertyp; 00158 00159 typedef struct txtbuffertype 00160 { 00161 int timecode; 00162 int pagenr; 00163 int freeToEncode; 00164 int freeToBuffer; 00165 unsigned char *buffer; 00166 int bufferlen; 00167 } txtbuffertyp; 00168 00169 typedef struct teletextsubtitle 00170 { 00171 unsigned char row; 00172 unsigned char col; 00173 unsigned char dbl; 00174 unsigned char fg; 00175 unsigned char bg; 00176 unsigned char len; 00177 } teletextsubtitle; 00178 00179 typedef struct ccsubtitle 00180 { 00181 unsigned char row; 00182 unsigned char rowcount; 00183 unsigned char resumedirect; 00184 unsigned char resumetext; 00185 unsigned char clr; // clear the display 00186 unsigned char len; //length of string to follow 00187 } ccsubtitle; 00188 00189 // resumedirect codes 00190 #define CC_STYLE_POPUP 0x00 00191 #define CC_STYLE_PAINT 0x01 00192 #define CC_STYLE_ROLLUP 0x02 00193 00194 // resumetext special codes 00195 #define CC_LINE_CONT 0x02 00196 #define CC_MODE_MASK 0xf0 00197 #define CC_TXT_MASK 0x20 00198 #define CC_CC1 0x00 00199 #define CC_CC2 0x10 00200 #define CC_TXT1 0x20 00201 #define CC_TXT2 0x30 00202 #define CC_CC3 0x40 00203 #define CC_CC4 0x50 00204 #define CC_TXT3 0x60 00205 #define CC_TXT4 0x70 00206 00207 #endif
1.6.3