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